From 5690fd0d3304f378754b23b098bd7cb5f4aa1976 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 12 Jun 2010 14:38:21 +0200 Subject: [PATCH 0001/2375] initial commit with latest version extracted from git-python --- .gitignore | 1 + __init__.py | 6 + db.py | 341 +++++++++++++++++++++++++++++++++ fun.py | 115 ++++++++++++ stream.py | 445 ++++++++++++++++++++++++++++++++++++++++++++ test/__init__.py | 1 + test/lib.py | 60 ++++++ test/test_db.py | 90 +++++++++ test/test_stream.py | 172 +++++++++++++++++ test/test_utils.py | 15 ++ utils.py | 38 ++++ 11 files changed, 1284 insertions(+) create mode 100644 .gitignore create mode 100644 __init__.py create mode 100644 db.py create mode 100644 fun.py create mode 100644 stream.py create mode 100644 test/__init__.py create mode 100644 test/lib.py create mode 100644 test/test_db.py create mode 100644 test/test_stream.py create mode 100644 test/test_utils.py create mode 100644 utils.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..0d20b6487 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/__init__.py b/__init__.py new file mode 100644 index 000000000..5789d7eb7 --- /dev/null +++ b/__init__.py @@ -0,0 +1,6 @@ +"""Initialize the object database module""" + +# default imports +from db import * +from stream import * + diff --git a/db.py b/db.py new file mode 100644 index 000000000..5d3cc6a3f --- /dev/null +++ b/db.py @@ -0,0 +1,341 @@ +"""Contains implementations of database retrieveing objects""" +from git.utils import IndexFileSHA1Writer +from git.errors import ( + InvalidDBRoot, + BadObject, + BadObjectType + ) + +from stream import ( + DecompressMemMapReader, + FDCompressedSha1Writer, + Sha1Writer, + OStream, + OInfo + ) + +from utils import ( + ENOENT, + to_hex_sha, + exists, + hex_to_bin, + isdir, + mkdir, + rename, + dirname, + join + ) + +from fun import ( + chunk_size, + loose_object_header_info, + write_object, + stream_copy + ) + +import tempfile +import mmap +import os + + +__all__ = ('ObjectDBR', 'ObjectDBW', 'FileDBBase', 'LooseObjectDB', 'PackedDB', + 'CompoundDB', 'ReferenceDB', 'GitObjectDB' ) + +class ObjectDBR(object): + """Defines an interface for object database lookup. + Objects are identified either by hex-sha (40 bytes) or + by sha (20 bytes)""" + + def __contains__(self, sha): + return self.has_obj + + #{ Query Interface + def has_object(self, sha): + """ + :return: True if the object identified by the given 40 byte hexsha or 20 bytes + binary sha is contained in the database + :raise BadObject:""" + raise NotImplementedError("To be implemented in subclass") + + def info(self, sha): + """ :return: OInfo instance + :param sha: 40 bytes hexsha or 20 bytes binary sha + :raise BadObject:""" + raise NotImplementedError("To be implemented in subclass") + + def info_async(self, input_channel): + """Retrieve information of a multitude of objects asynchronously + :param input_channel: Channel yielding the sha's of the objects of interest + :return: Channel yielding OInfo|InvalidOInfo, in any order""" + raise NotImplementedError("To be implemented in subclass") + + def stream(self, sha): + """:return: OStream instance + :param sha: 40 bytes hexsha or 20 bytes binary sha + :raise BadObject:""" + raise NotImplementedError("To be implemented in subclass") + + def stream_async(self, input_channel): + """Retrieve the OStream of multiple objects + :param input_channel: see ``info`` + :param max_threads: see ``ObjectDBW.store`` + :return: Channel yielding OStream|InvalidOStream instances in any order""" + raise NotImplementedError("To be implemented in subclass") + + #} END query interface + +class ObjectDBW(object): + """Defines an interface to create objects in the database""" + + def __init__(self, *args, **kwargs): + self._ostream = None + + #{ Edit Interface + def set_ostream(self, stream): + """Adjusts the stream to which all data should be sent when storing new objects + :param stream: if not None, the stream to use, if None the default stream + will be used. + :return: previously installed stream, or None if there was no override + :raise TypeError: if the stream doesn't have the supported functionality""" + cstream = self._ostream + self._ostream = stream + return cstream + + def ostream(self): + """:return: overridden output stream this instance will write to, or None + if it will write to the default stream""" + return self._ostream + + def store(self, istream): + """Create a new object in the database + :return: the input istream object with its sha set to its corresponding value + :param istream: IStream compatible instance. If its sha is already set + to a value, the object will just be stored in the our database format, + in which case the input stream is expected to be in object format ( header + contents ). + :raise IOError: if data could not be written""" + raise NotImplementedError("To be implemented in subclass") + + def store_async(self, input_channel): + """Create multiple new objects in the database asynchronously. The method will + return right away, returning an output channel which receives the results as + they are computed. + + :return: Channel yielding your IStream which served as input, in any order. + The IStreams sha will be set to the sha it received during the process, + or its error attribute will be set to the exception informing about the error. + :param input_channel: Channel yielding IStream instance. + As the same instances will be used in the output channel, you can create a map + between the id(istream) -> istream + :note:As some ODB implementations implement this operation as atomic, they might + abort the whole operation if one item could not be processed. Hence check how + many items have actually been produced.""" + raise NotImplementedError("To be implemented in subclass") + + #} END edit interface + + +class FileDBBase(object): + """Provides basic facilities to retrieve files of interest, including + caching facilities to help mapping hexsha's to objects""" + + def __init__(self, root_path): + """Initialize this instance to look for its files at the given root path + All subsequent operations will be relative to this path + :raise InvalidDBRoot: + :note: The base will not perform any accessablity checking as the base + might not yet be accessible, but become accessible before the first + access.""" + super(FileDBBase, self).__init__() + self._root_path = root_path + + + #{ Interface + def root_path(self): + """:return: path at which this db operates""" + return self._root_path + + def db_path(self, rela_path): + """ + :return: the given relative path relative to our database root, allowing + to pontentially access datafiles""" + return join(self._root_path, rela_path) + #} END interface + + + +class LooseObjectDB(FileDBBase, ObjectDBR, ObjectDBW): + """A database which operates on loose object files""" + + # CONFIGURATION + # chunks in which data will be copied between streams + stream_chunk_size = chunk_size + + + def __init__(self, root_path): + super(LooseObjectDB, self).__init__(root_path) + self._hexsha_to_file = dict() + # Additional Flags - might be set to 0 after the first failure + # Depending on the root, this might work for some mounts, for others not, which + # is why it is per instance + self._fd_open_flags = getattr(os, 'O_NOATIME', 0) + + #{ Interface + def object_path(self, hexsha): + """ + :return: path at which the object with the given hexsha would be stored, + relative to the database root""" + return join(hexsha[:2], hexsha[2:]) + + def readable_db_object_path(self, hexsha): + """ + :return: readable object path to the object identified by hexsha + :raise BadObject: If the object file does not exist""" + try: + return self._hexsha_to_file[hexsha] + except KeyError: + pass + # END ignore cache misses + + # try filesystem + path = self.db_path(self.object_path(hexsha)) + if exists(path): + self._hexsha_to_file[hexsha] = path + return path + # END handle cache + raise BadObject(hexsha) + + #} END interface + + def _map_loose_object(self, sha): + """ + :return: memory map of that file to allow random read access + :raise BadObject: if object could not be located""" + db_path = self.db_path(self.object_path(to_hex_sha(sha))) + try: + fd = os.open(db_path, os.O_RDONLY|self._fd_open_flags) + except OSError,e: + if e.errno != ENOENT: + # try again without noatime + try: + fd = os.open(db_path, os.O_RDONLY) + except OSError: + raise BadObject(to_hex_sha(sha)) + # didn't work because of our flag, don't try it again + self._fd_open_flags = 0 + else: + raise BadObject(to_hex_sha(sha)) + # END handle error + # END exception handling + try: + return mmap.mmap(fd, 0, access=mmap.ACCESS_READ) + finally: + os.close(fd) + # END assure file is closed + + def set_ostream(self, stream): + """:raise TypeError: if the stream does not support the Sha1Writer interface""" + if stream is not None and not isinstance(stream, Sha1Writer): + raise TypeError("Output stream musst support the %s interface" % Sha1Writer.__name__) + return super(LooseObjectDB, self).set_ostream(stream) + + def info(self, sha): + m = self._map_loose_object(sha) + try: + type, size = loose_object_header_info(m) + return OInfo(sha, type, size) + finally: + m.close() + # END assure release of system resources + + def stream(self, sha): + m = self._map_loose_object(sha) + type, size, stream = DecompressMemMapReader.new(m, close_on_deletion = True) + return OStream(sha, type, size, stream) + + def has_object(self, sha): + try: + self.readable_db_object_path(to_hex_sha(sha)) + return True + except BadObject: + return False + # END check existance + + def store(self, istream): + """note: The sha we produce will be hex by nature""" + tmp_path = None + writer = self.ostream() + if writer is None: + # open a tmp file to write the data to + fd, tmp_path = tempfile.mkstemp(prefix='obj', dir=self._root_path) + writer = FDCompressedSha1Writer(fd) + # END handle custom writer + + try: + try: + if istream.sha is not None: + stream_copy(istream.read, writer.write, istream.size, self.stream_chunk_size) + else: + # write object with header, we have to make a new one + write_object(istream.type, istream.size, istream.read, writer.write, + chunk_size=self.stream_chunk_size) + # END handle direct stream copies + except: + if tmp_path: + os.remove(tmp_path) + raise + # END assure tmpfile removal on error + finally: + if tmp_path: + writer.close() + # END assure target stream is closed + + sha = istream.sha or writer.sha(as_hex=True) + + if tmp_path: + obj_path = self.db_path(self.object_path(sha)) + obj_dir = dirname(obj_path) + if not isdir(obj_dir): + mkdir(obj_dir) + # END handle destination directory + rename(tmp_path, obj_path) + # END handle dry_run + + istream.sha = sha + return istream + + +class PackedDB(FileDBBase, ObjectDBR): + """A database operating on a set of object packs""" + + +class CompoundDB(ObjectDBR): + """A database which delegates calls to sub-databases""" + + +class ReferenceDB(CompoundDB): + """A database consisting of database referred to in a file""" + + +#class GitObjectDB(CompoundDB, ObjectDBW): +class GitObjectDB(LooseObjectDB): + """A database representing the default git object store, which includes loose + objects, pack files and an alternates file + + It will create objects only in the loose object database. + :note: for now, we use the git command to do all the lookup, just until he + have packs and the other implementations + """ + def __init__(self, root_path, git): + """Initialize this instance with the root and a git command""" + super(GitObjectDB, self).__init__(root_path) + self._git = git + + def info(self, sha): + t = self._git.get_object_header(sha) + return OInfo(*t) + + def stream(self, sha): + """For now, all lookup is done by git itself""" + t = self._git.stream_object_data(sha) + return OStream(*t) + diff --git a/fun.py b/fun.py new file mode 100644 index 000000000..3321a8ea4 --- /dev/null +++ b/fun.py @@ -0,0 +1,115 @@ +"""Contains basic c-functions which usually contain performance critical code +Keeping this code separate from the beginning makes it easier to out-source +it into c later, if required""" + +from git.errors import ( + BadObjectType + ) + +import zlib +decompressobj = zlib.decompressobj + + +# INVARIANTS +type_id_to_type_map = { + 1 : "commit", + 2 : "tree", + 3 : "blob", + 4 : "tag" + } + +# used when dealing with larger streams +chunk_size = 1000*1000 + +__all__ = ('is_loose_object', 'loose_object_header_info', 'object_header_info', + 'write_object' ) + +#{ Routines + +def is_loose_object(m): + """:return: True the file contained in memory map m appears to be a loose object. + Only the first two bytes are needed""" + b0, b1 = map(ord, m[:2]) + word = (b0 << 8) + b1 + return b0 == 0x78 and (word % 31) == 0 + +def loose_object_header_info(m): + """:return: tuple(type_string, uncompressed_size_in_bytes) the type string of the + object as well as its uncompressed size in bytes. + :param m: memory map from which to read the compressed object data""" + decompress_size = 8192 # is used in cgit as well + hdr = decompressobj().decompress(m, decompress_size) + type_name, size = hdr[:hdr.find("\0")].split(" ") + return type_name, int(size) + +def object_header_info(m): + """:return: tuple(type_string, uncompressed_size_in_bytes + :param mmap: mapped memory map. It will be + seeked to the actual start of the object contents, which can be used + to initialize a zlib decompress object. + :note: This routine can only handle new-style objects which are assumably contained + in packs + """ + assert not is_loose_object(m), "Use loose_object_header_info instead" + + c = b0 # first byte + i = 1 # next char to read + type_id = (c >> 4) & 7 # numeric type + size = c & 15 # starting size + s = 4 # starting bit-shift size + while c & 0x80: + c = ord(m[i]) + i += 1 + size += (c & 0x7f) << s + s += 7 + # END character loop + + # finally seek the map to the start of the data stream + m.seek(i) + try: + return (type_id_to_type_map[type_id], size) + except KeyError: + # invalid object type - we could try to be smart now and decode part + # of the stream to get the info, problem is that we had trouble finding + # the exact start of the content stream + raise BadObjectType(type_id) + # END handle exceptions + +def write_object(type, size, read, write, chunk_size=chunk_size): + """Write the object as identified by type, size and source_stream into the + target_stream + + :param type: type string of the object + :param size: amount of bytes to write from source_stream + :param read: read method of a stream providing the content data + :param write: write method of the output stream + :param close_target_stream: if True, the target stream will be closed when + the routine exits, even if an error is thrown + :return: The actual amount of bytes written to stream, which includes the header and a trailing newline""" + tbw = 0 # total num bytes written + + # WRITE HEADER: type SP size NULL + tbw += write("%s %i\0" % (type, size)) + tbw += stream_copy(read, write, size, chunk_size) + + return tbw + +def stream_copy(read, write, size, chunk_size): + """Copy a stream up to size bytes using the provided read and write methods, + in chunks of chunk_size + :note: its much like stream_copy utility, but operates just using methods""" + dbw = 0 # num data bytes written + + # WRITE ALL DATA UP TO SIZE + while True: + cs = min(chunk_size, size-dbw) + data_len = write(read(cs)) + dbw += data_len + if data_len < cs or dbw == size: + break + # END check for stream end + # END duplicate data + return dbw + + +#} END routines diff --git a/stream.py b/stream.py new file mode 100644 index 000000000..da97cf5b6 --- /dev/null +++ b/stream.py @@ -0,0 +1,445 @@ +import zlib +from cStringIO import StringIO +from git.utils import make_sha +import errno + +from utils import ( + to_hex_sha, + to_bin_sha, + write, + close + ) + +__all__ = ('OInfo', 'OStream', 'IStream', 'InvalidOInfo', 'InvalidOStream', + 'DecompressMemMapReader', 'FDCompressedSha1Writer') + + +# ZLIB configuration +# used when compressing objects - 1 to 9 ( slowest ) +Z_BEST_SPEED = 1 + + +#{ ODB Bases + +class OInfo(tuple): + """Carries information about an object in an ODB, provdiing information + about the sha of the object, the type_string as well as the uncompressed size + in bytes. + + It can be accessed using tuple notation and using attribute access notation:: + + assert dbi[0] == dbi.sha + assert dbi[1] == dbi.type + assert dbi[2] == dbi.size + + The type is designed to be as lighteight as possible.""" + __slots__ = tuple() + + def __new__(cls, sha, type, size): + return tuple.__new__(cls, (sha, type, size)) + + def __init__(self, *args): + tuple.__init__(self) + + #{ Interface + @property + def sha(self): + return self[0] + + @property + def type(self): + return self[1] + + @property + def size(self): + return self[2] + #} END interface + + +class OStream(OInfo): + """Base for object streams retrieved from the database, providing additional + information about the stream. + Generally, ODB streams are read-only as objects are immutable""" + __slots__ = tuple() + + def __new__(cls, sha, type, size, stream, *args, **kwargs): + """Helps with the initialization of subclasses""" + return tuple.__new__(cls, (sha, type, size, stream)) + + + def __init__(self, *args, **kwargs): + tuple.__init__(self) + + #{ Stream Reader Interface + + def read(self, size=-1): + return self[3].read(size) + + #} END stream reader interface + + +class IStream(list): + """Represents an input content stream to be fed into the ODB. It is mutable to allow + the ODB to record information about the operations outcome right in this instance. + + It provides interfaces for the OStream and a StreamReader to allow the instance + to blend in without prior conversion. + + The only method your content stream must support is 'read'""" + __slots__ = tuple() + + def __new__(cls, type, size, stream, sha=None): + return list.__new__(cls, (sha, type, size, stream, None)) + + def __init__(self, type, size, stream, sha=None): + list.__init__(self, (sha, type, size, stream, None)) + + #{ Interface + + @property + def hexsha(self): + """:return: our sha, hex encoded, 40 bytes""" + return to_hex_sha(self[0]) + + @property + def binsha(self): + """:return: our sha as binary, 20 bytes""" + return to_bin_sha(self[0]) + + def _error(self): + """:return: the error that occurred when processing the stream, or None""" + return self[4] + + def _set_error(self, exc): + """Set this input stream to the given exc, may be None to reset the error""" + self[4] = exc + + error = property(_error, _set_error) + + #} END interface + + #{ Stream Reader Interface + + def read(self, size=-1): + """Implements a simple stream reader interface, passing the read call on + to our internal stream""" + return self[3].read(size) + + #} END stream reader interface + + #{ interface + + def _set_sha(self, sha): + self[0] = sha + + def _sha(self): + return self[0] + + sha = property(_sha, _set_sha) + + + def _type(self): + return self[1] + + def _set_type(self, type): + self[1] = type + + type = property(_type, _set_type) + + def _size(self): + return self[2] + + def _set_size(self, size): + self[2] = size + + size = property(_size, _set_size) + + def _stream(self): + return self[3] + + def _set_stream(self, stream): + self[3] = stream + + stream = property(_stream, _set_stream) + + #} END odb info interface + + +class InvalidOInfo(tuple): + """Carries information about a sha identifying an object which is invalid in + the queried database. The exception attribute provides more information about + the cause of the issue""" + __slots__ = tuple() + + def __new__(cls, sha, exc): + return tuple.__new__(cls, (sha, exc)) + + def __init__(self, sha, exc): + tuple.__init__(self, (sha, exc)) + + @property + def sha(self): + return self[0] + + @property + def error(self): + """:return: exception instance explaining the failure""" + return self[1] + + +class InvalidOStream(InvalidOInfo): + """Carries information about an invalid ODB stream""" + __slots__ = tuple() + +#} END ODB Bases + + +#{ RO Streams + +class DecompressMemMapReader(object): + """Reads data in chunks from a memory map and decompresses it. The client sees + only the uncompressed data, respective file-like read calls are handling on-demand + buffered decompression accordingly + + A constraint on the total size of bytes is activated, simulating + a logical file within a possibly larger physical memory area + + To read efficiently, you clearly don't want to read individual bytes, instead, + read a few kilobytes at least. + + :note: The chunk-size should be carefully selected as it will involve quite a bit + of string copying due to the way the zlib is implemented. Its very wasteful, + hence we try to find a good tradeoff between allocation time and number of + times we actually allocate. An own zlib implementation would be good here + to better support streamed reading - it would only need to keep the mmap + and decompress it into chunks, thats all ... """ + __slots__ = ('_m', '_zip', '_buf', '_buflen', '_br', '_cws', '_cwe', '_s', '_close') + + max_read_size = 512*1024 # currently unused + + def __init__(self, m, close_on_deletion, size): + """Initialize with mmap for stream reading + :param m: must be content data - use new if you have object data and no size""" + self._m = m + self._zip = zlib.decompressobj() + self._buf = None # buffer of decompressed bytes + self._buflen = 0 # length of bytes in buffer + self._s = size # size of uncompressed data to read in total + self._br = 0 # num uncompressed bytes read + self._cws = 0 # start byte of compression window + self._cwe = 0 # end byte of compression window + self._close = close_on_deletion # close the memmap on deletion ? + + def __del__(self): + if self._close: + self._m.close() + # END handle resource freeing + + def _parse_header_info(self): + """If this stream contains object data, parse the header info and skip the + stream to a point where each read will yield object content + :return: parsed type_string, size""" + # read header + maxb = 512 # should really be enough, cgit uses 8192 I believe + self._s = maxb + hdr = self.read(maxb) + hdrend = hdr.find("\0") + type, size = hdr[:hdrend].split(" ") + size = int(size) + self._s = size + + # adjust internal state to match actual header length that we ignore + # The buffer will be depleted first on future reads + self._br = 0 + hdrend += 1 # count terminating \0 + self._buf = StringIO(hdr[hdrend:]) + self._buflen = len(hdr) - hdrend + + return type, size + + @classmethod + def new(self, m, close_on_deletion=False): + """Create a new DecompressMemMapReader instance for acting as a read-only stream + This method parses the object header from m and returns the parsed + type and size, as well as the created stream instance. + :param m: memory map on which to oparate. It must be object data ( header + contents ) + :param close_on_deletion: if True, the memory map will be closed once we are + being deleted""" + inst = DecompressMemMapReader(m, close_on_deletion, 0) + type, size = inst._parse_header_info() + return type, size, inst + + def read(self, size=-1): + if size < 1: + size = self._s - self._br + else: + size = min(size, self._s - self._br) + # END clamp size + + if size == 0: + return str() + # END handle depletion + + # protect from memory peaks + # If he tries to read large chunks, our memory patterns get really bad + # as we end up copying a possibly huge chunk from our memory map right into + # memory. This might not even be possible. Nonetheless, try to dampen the + # effect a bit by reading in chunks, returning a huge string in the end. + # Our performance now depends on StringIO. This way we don't need two large + # buffers in peak times, but only one large one in the end which is + # the return buffer + # NO: We don't do it - if the user thinks its best, he is right. If he + # has trouble, he will start reading in chunks. According to our tests + # its still faster if we read 10 Mb at once instead of chunking it. + + # if size > self.max_read_size: + # sio = StringIO() + # while size: + # read_size = min(self.max_read_size, size) + # data = self.read(read_size) + # sio.write(data) + # size -= len(data) + # if len(data) < read_size: + # break + # # END data loop + # sio.seek(0) + # return sio.getvalue() + # # END handle maxread + # + # deplete the buffer, then just continue using the decompress object + # which has an own buffer. We just need this to transparently parse the + # header from the zlib stream + dat = str() + if self._buf: + if self._buflen >= size: + # have enough data + dat = self._buf.read(size) + self._buflen -= size + self._br += size + return dat + else: + dat = self._buf.read() # ouch, duplicates data + size -= self._buflen + self._br += self._buflen + + self._buflen = 0 + self._buf = None + # END handle buffer len + # END handle buffer + + # decompress some data + # Abstract: zlib needs to operate on chunks of our memory map ( which may + # be large ), as it will otherwise and always fill in the 'unconsumed_tail' + # attribute which possible reads our whole map to the end, forcing + # everything to be read from disk even though just a portion was requested. + # As this would be a nogo, we workaround it by passing only chunks of data, + # moving the window into the memory map along as we decompress, which keeps + # the tail smaller than our chunk-size. This causes 'only' the chunk to be + # copied once, and another copy of a part of it when it creates the unconsumed + # tail. We have to use it to hand in the appropriate amount of bytes durin g + # the next read. + tail = self._zip.unconsumed_tail + if tail: + # move the window, make it as large as size demands. For code-clarity, + # we just take the chunk from our map again instead of reusing the unconsumed + # tail. The latter one would safe some memory copying, but we could end up + # with not getting enough data uncompressed, so we had to sort that out as well. + # Now we just assume the worst case, hence the data is uncompressed and the window + # needs to be as large as the uncompressed bytes we want to read. + self._cws = self._cwe - len(tail) + self._cwe = self._cws + size + else: + cws = self._cws + self._cws = self._cwe + self._cwe = cws + size + # END handle tail + + + # if window is too small, make it larger so zip can decompress something + win_size = self._cwe - self._cws + if win_size < 8: + self._cwe = self._cws + 8 + # END adjust winsize + indata = self._m[self._cws:self._cwe] # another copy ... :( + + # get the actual window end to be sure we don't use it for computations + self._cwe = self._cws + len(indata) + + dcompdat = self._zip.decompress(indata, size) + + self._br += len(dcompdat) + if dat: + dcompdat = dat + dcompdat + + return dcompdat + +#} END RO streams + + +#{ W Streams + +class Sha1Writer(object): + """Simple stream writer which produces a sha whenever you like as it degests + everything it is supposed to write""" + __slots__ = "sha1" + + def __init__(self): + self.sha1 = make_sha("") + + #{ Stream Interface + + def write(self, data): + """:raise IOError: If not all bytes could be written + :return: lenght of incoming data""" + self.sha1.update(data) + return len(data) + + # END stream interface + + #{ Interface + + def sha(self, as_hex = False): + """:return: sha so far + :param as_hex: if True, sha will be hex-encoded, binary otherwise""" + if as_hex: + return self.sha1.hexdigest() + return self.sha1.digest() + + #} END interface + +class FDCompressedSha1Writer(Sha1Writer): + """Digests data written to it, making the sha available, then compress the + data and write it to the file descriptor + :note: operates on raw file descriptors + :note: for this to work, you have to use the close-method of this instance""" + __slots__ = ("fd", "sha1", "zip") + + # default exception + exc = IOError("Failed to write all bytes to filedescriptor") + + def __init__(self, fd): + super(FDCompressedSha1Writer, self).__init__() + self.fd = fd + self.zip = zlib.compressobj(Z_BEST_SPEED) + + #{ Stream Interface + + def write(self, data): + """:raise IOError: If not all bytes could be written + :return: lenght of incoming data""" + self.sha1.update(data) + cdata = self.zip.compress(data) + bytes_written = write(self.fd, cdata) + if bytes_written != len(cdata): + raise self.exc + return len(data) + + def close(self): + remainder = self.zip.flush() + if write(self.fd, remainder) != len(remainder): + raise self.exc + return close(self.fd) + + #} END stream interface + +#} END W streams diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/test/__init__.py @@ -0,0 +1 @@ + diff --git a/test/lib.py b/test/lib.py new file mode 100644 index 000000000..d51997488 --- /dev/null +++ b/test/lib.py @@ -0,0 +1,60 @@ +"""Utilities used in ODB testing""" +from git.odb import ( + OStream, + ) +from git.odb.stream import Sha1Writer + +import zlib +from cStringIO import StringIO + +#{ Stream Utilities + +class DummyStream(object): + def __init__(self): + self.was_read = False + self.bytes = 0 + self.closed = False + + def read(self, size): + self.was_read = True + self.bytes = size + + def close(self): + self.closed = True + + def _assert(self): + assert self.was_read + + +class DeriveTest(OStream): + def __init__(self, sha, type, size, stream, *args, **kwargs): + self.myarg = kwargs.pop('myarg') + self.args = args + + def _assert(self): + assert self.args + assert self.myarg + + +class ZippedStoreShaWriter(Sha1Writer): + """Remembers everything someone writes to it""" + __slots__ = ('buf', 'zip') + def __init__(self): + Sha1Writer.__init__(self) + self.buf = StringIO() + self.zip = zlib.compressobj(1) # fastest + + def __getattr__(self, attr): + return getattr(self.buf, attr) + + def write(self, data): + alen = Sha1Writer.write(self, data) + self.buf.write(self.zip.compress(data)) + return alen + + def close(self): + self.buf.write(self.zip.flush()) + + +#} END stream utilitiess + diff --git a/test/test_db.py b/test/test_db.py new file mode 100644 index 000000000..35ba86802 --- /dev/null +++ b/test/test_db.py @@ -0,0 +1,90 @@ +"""Test for object db""" +from test.testlib import * +from lib import ZippedStoreShaWriter + +from git.odb import * +from git.odb.stream import Sha1Writer +from git import Blob +from git.errors import BadObject + + +from cStringIO import StringIO +import os + +class TestDB(TestBase): + """Test the different db class implementations""" + + # data + two_lines = "1234\nhello world" + + all_data = (two_lines, ) + + def _assert_object_writing(self, db): + """General tests to verify object writing, compatible to ObjectDBW + :note: requires write access to the database""" + # start in 'dry-run' mode, using a simple sha1 writer + ostreams = (ZippedStoreShaWriter, None) + for ostreamcls in ostreams: + for data in self.all_data: + dry_run = ostreamcls is not None + ostream = None + if ostreamcls is not None: + ostream = ostreamcls() + assert isinstance(ostream, Sha1Writer) + # END create ostream + + prev_ostream = db.set_ostream(ostream) + assert type(prev_ostream) in ostreams or prev_ostream in ostreams + + istream = IStream(Blob.type, len(data), StringIO(data)) + + # store returns same istream instance, with new sha set + my_istream = db.store(istream) + sha = istream.sha + assert my_istream is istream + assert db.has_object(sha) != dry_run + assert len(sha) == 40 # for now we require 40 byte shas as default + + # verify data - the slow way, we want to run code + if not dry_run: + info = db.info(sha) + assert Blob.type == info.type + assert info.size == len(data) + + ostream = db.stream(sha) + assert ostream.read() == data + assert ostream.type == Blob.type + assert ostream.size == len(data) + else: + self.failUnlessRaises(BadObject, db.info, sha) + self.failUnlessRaises(BadObject, db.stream, sha) + + # DIRECT STREAM COPY + # our data hase been written in object format to the StringIO + # we pasesd as output stream. No physical database representation + # was created. + # Test direct stream copy of object streams, the result must be + # identical to what we fed in + ostream.seek(0) + istream.stream = ostream + assert istream.sha is not None + prev_sha = istream.sha + + db.set_ostream(ZippedStoreShaWriter()) + db.store(istream) + assert istream.sha == prev_sha + new_ostream = db.ostream() + + # note: only works as long our store write uses the same compression + # level, which is zip + assert ostream.getvalue() == new_ostream.getvalue() + # END for each data set + # END for each dry_run mode + + @with_bare_rw_repo + def test_writing(self, rwrepo): + ldb = LooseObjectDB(os.path.join(rwrepo.git_dir, 'objects')) + + # write data + self._assert_object_writing(ldb) + diff --git a/test/test_stream.py b/test/test_stream.py new file mode 100644 index 000000000..020fe6bd3 --- /dev/null +++ b/test/test_stream.py @@ -0,0 +1,172 @@ +"""Test for object db""" +from test.testlib import * +from lib import ( + DummyStream, + DeriveTest, + Sha1Writer + ) + +from git.odb import * +from git import Blob +from cStringIO import StringIO +import tempfile +import os +import zlib + + + + +class TestStream(TestBase): + """Test stream classes""" + + data_sizes = (15, 10000, 1000*1024+512) + + def test_streams(self): + # test info + sha = Blob.NULL_HEX_SHA + s = 20 + info = OInfo(sha, Blob.type, s) + assert info.sha == sha + assert info.type == Blob.type + assert info.size == s + + # test ostream + stream = DummyStream() + ostream = OStream(*(info + (stream, ))) + ostream.read(15) + stream._assert() + assert stream.bytes == 15 + ostream.read(20) + assert stream.bytes == 20 + + # derive with own args + DeriveTest(sha, Blob.type, s, stream, 'mine',myarg = 3)._assert() + + # test istream + istream = IStream(Blob.type, s, stream) + assert istream.sha == None + istream.sha = sha + assert istream.sha == sha + + assert len(istream.binsha) == 20 + assert len(istream.hexsha) == 40 + + assert istream.size == s + istream.size = s * 2 + istream.size == s * 2 + assert istream.type == Blob.type + istream.type = "something" + assert istream.type == "something" + assert istream.stream is stream + istream.stream = None + assert istream.stream is None + + assert istream.error is None + istream.error = Exception() + assert isinstance(istream.error, Exception) + + def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): + """Make stream tests - the orig_stream is seekable, allowing it to be + rewound and reused + :param cdata: the data we expect to read from stream, the contents + :param rewind_stream: function called to rewind the stream to make it ready + for reuse""" + ns = 10 + assert len(cdata) > ns-1, "Data must be larger than %i, was %i" % (ns, len(cdata)) + + # read in small steps + ss = len(cdata) / ns + for i in range(ns): + data = stream.read(ss) + chunk = cdata[i*ss:(i+1)*ss] + assert data == chunk + # END for each step + rest = stream.read() + if rest: + assert rest == cdata[-len(rest):] + # END handle rest + + rewind_stream(stream) + + # read everything + rdata = stream.read() + assert rdata == cdata + + def test_decompress_reader(self): + for close_on_deletion in range(2): + for with_size in range(2): + for ds in self.data_sizes: + cdata = make_bytes(ds, randomize=False) + + # zdata = zipped actual data + # cdata = original content data + + # create reader + if with_size: + # need object data + zdata = zlib.compress(make_object(Blob.type, cdata)) + type, size, reader = DecompressMemMapReader.new(zdata, close_on_deletion) + assert size == len(cdata) + assert type == Blob.type + else: + # here we need content data + zdata = zlib.compress(cdata) + reader = DecompressMemMapReader(zdata, close_on_deletion, len(cdata)) + assert reader._s == len(cdata) + # END get reader + + def rewind(r): + r._zip = zlib.decompressobj() + r._br = r._cws = r._cwe = 0 + if with_size: + r._parse_header_info() + # END skip header + # END make rewind func + + self._assert_stream_reader(reader, cdata, rewind) + + # put in a dummy stream for closing + dummy = DummyStream() + reader._m = dummy + + assert not dummy.closed + del(reader) + assert dummy.closed == close_on_deletion + #zdi# + # END for each datasize + # END whether size should be used + # END whether stream should be closed when deleted + + def test_sha_writer(self): + writer = Sha1Writer() + assert 2 == writer.write("hi") + assert len(writer.sha(as_hex=1)) == 40 + assert len(writer.sha(as_hex=0)) == 20 + + # make sure it does something ;) + prev_sha = writer.sha() + writer.write("hi again") + assert writer.sha() != prev_sha + + def test_compressed_writer(self): + for ds in self.data_sizes: + fd, path = tempfile.mkstemp() + ostream = FDCompressedSha1Writer(fd) + data = make_bytes(ds, randomize=False) + + # for now, just a single write, code doesn't care about chunking + assert len(data) == ostream.write(data) + ostream.close() + # its closed already + self.failUnlessRaises(OSError, os.close, fd) + + # read everything back, compare to data we zip + fd = os.open(path, os.O_RDONLY) + written_data = os.read(fd, os.path.getsize(path)) + os.close(fd) + assert written_data == zlib.compress(data, 1) # best speed + + os.remove(path) + # END for each os + + diff --git a/test/test_utils.py b/test/test_utils.py new file mode 100644 index 000000000..34572b37e --- /dev/null +++ b/test/test_utils.py @@ -0,0 +1,15 @@ +"""Test for object db""" +from test.testlib import * +from git import Blob +from git.odb.utils import ( + to_hex_sha, + to_bin_sha + ) + + +class TestUtils(TestBase): + def test_basics(self): + assert to_hex_sha(Blob.NULL_HEX_SHA) == Blob.NULL_HEX_SHA + assert len(to_bin_sha(Blob.NULL_HEX_SHA)) == 20 + assert to_hex_sha(to_bin_sha(Blob.NULL_HEX_SHA)) == Blob.NULL_HEX_SHA + diff --git a/utils.py b/utils.py new file mode 100644 index 000000000..6863e97b9 --- /dev/null +++ b/utils.py @@ -0,0 +1,38 @@ +import binascii +import os +import errno + +#{ Routines + +hex_to_bin = binascii.a2b_hex +bin_to_hex = binascii.b2a_hex + +def to_hex_sha(sha): + """:return: hexified version of sha""" + if len(sha) == 40: + return sha + return bin_to_hex(sha) + +def to_bin_sha(sha): + if len(sha) == 20: + return sha + return hex_to_bin(sha) + +# errors +ENOENT = errno.ENOENT + +# os shortcuts +exists = os.path.exists +mkdir = os.mkdir +isdir = os.path.isdir +rename = os.rename +dirname = os.path.dirname +join = os.path.join +read = os.read +write = os.write +close = os.close + + +#} END Routines + + From 94c2167bb08c65d4354941e14b1899449efb04f7 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 12 Jun 2010 16:14:00 +0200 Subject: [PATCH 0002/2375] Adjusted imports and tests to deal with new folder structure --- db.py | 5 +- exc.py | 14 +++++ fun.py | 2 +- stream.py | 6 +-- test/lib.py | 67 +++++++++++++++++++++++- test/performance/lib.py | 49 ++++++++++++++++++ test/performance/test_db.py | 15 ++++++ test/performance/test_stream.py | 91 +++++++++++++++++++++++++++++++++ test/test_db.py | 28 +++++----- test/test_stream.py | 33 +++++++----- test/test_util.py | 15 ++++++ test/test_utils.py | 15 ------ typ.py | 10 ++++ util.py | 75 +++++++++++++++++++++++++++ utils.py | 38 -------------- 15 files changed, 376 insertions(+), 87 deletions(-) create mode 100644 exc.py create mode 100644 test/performance/lib.py create mode 100644 test/performance/test_db.py create mode 100644 test/performance/test_stream.py create mode 100644 test/test_util.py delete mode 100644 test/test_utils.py create mode 100644 typ.py create mode 100644 util.py delete mode 100644 utils.py diff --git a/db.py b/db.py index 5d3cc6a3f..7ec8a24b3 100644 --- a/db.py +++ b/db.py @@ -1,6 +1,5 @@ """Contains implementations of database retrieveing objects""" -from git.utils import IndexFileSHA1Writer -from git.errors import ( +from exc import ( InvalidDBRoot, BadObject, BadObjectType @@ -14,7 +13,7 @@ OInfo ) -from utils import ( +from util import ( ENOENT, to_hex_sha, exists, diff --git a/exc.py b/exc.py new file mode 100644 index 000000000..3eaf5777d --- /dev/null +++ b/exc.py @@ -0,0 +1,14 @@ +"""Module with common exceptions""" + +class ODBError(Exception): + """All errors thrown by the object database""" + +class InvalidDBRoot(ODBError): + """Thrown if an object database cannot be initialized at the given path""" + +class BadObject(ODBError): + """The object with the given SHA does not exist""" + +class BadObjectType(ODBError): + """The object had an unsupported type""" + diff --git a/fun.py b/fun.py index 3321a8ea4..80b0f41b6 100644 --- a/fun.py +++ b/fun.py @@ -2,7 +2,7 @@ Keeping this code separate from the beginning makes it easier to out-source it into c later, if required""" -from git.errors import ( +from exc import ( BadObjectType ) diff --git a/stream.py b/stream.py index da97cf5b6..309df28c4 100644 --- a/stream.py +++ b/stream.py @@ -1,11 +1,11 @@ import zlib from cStringIO import StringIO -from git.utils import make_sha import errno -from utils import ( +from util import ( to_hex_sha, - to_bin_sha, + to_bin_sha, + make_sha, write, close ) diff --git a/test/lib.py b/test/lib.py index d51997488..071e38a5f 100644 --- a/test/lib.py +++ b/test/lib.py @@ -1,12 +1,75 @@ """Utilities used in ODB testing""" -from git.odb import ( +from gitdb import ( OStream, ) -from git.odb.stream import Sha1Writer +from gitdb.stream import Sha1Writer +import sys import zlib +import random +from array import array from cStringIO import StringIO +import unittest +import tempfile +import shutil +import os + + +#{ Bases + +class TestBase(unittest.TestCase): + """Base class for all tests""" + + +#} END bases + +#{ Decorators + +def with_rw_directory(func): + """Create a temporary directory which can be written to, remove it if the + test suceeds, but leave it otherwise to aid additional debugging""" + def wrapper(self): + path = tempfile.mktemp(suffix=func.__name__) + os.mkdir(path) + try: + return func(self, path) + except Exception: + print >> sys.stderr, "Test %s.%s failed, output is at %r" % (type(self).__name__, func.__name__, path) + raise + else: + shutil.rmtree(path) + # END handle exception + # END wrapper + + wrapper.__name__ = func.__name__ + return wrapper + + +#} END decorators + +#{ Routines + +def make_bytes(size_in_bytes, randomize=False): + """:return: string with given size in bytes + :param randomize: try to produce a very random stream""" + actual_size = size_in_bytes / 4 + producer = xrange(actual_size) + if randomize: + producer = list(producer) + random.shuffle(producer) + # END randomize + a = array('i', producer) + return a.tostring() + + +def make_object(type, data): + """:return: bytes resembling an uncompressed object""" + odata = "blob %i\0" % len(data) + return odata + data + +#} END routines + #{ Stream Utilities class DummyStream(object): diff --git a/test/performance/lib.py b/test/performance/lib.py new file mode 100644 index 000000000..03788c081 --- /dev/null +++ b/test/performance/lib.py @@ -0,0 +1,49 @@ +"""Contains library functions""" +import os +from gitdb.test.lib import * +import shutil +import tempfile + + +#{ Invvariants +k_env_git_repo = "GITDB_TEST_GIT_REPO_BASE" +#} END invariants + + +#{ Utilities +def resolve_or_fail(env_var): + """:return: resolved environment variable or raise EnvironmentError""" + try: + return os.environ[env_var] + except KeyError: + raise EnvironmentError("Please set the %r envrionment variable and retry" % env_var) + # END exception handling + +#} END utilities + + +#{ Base Classes + +class TestBigRepoR(TestBase): + """TestCase providing access to readonly 'big' repositories using the following + member variables: + + * gitrepopath + + * read-only base path of the git source repository, i.e. .../git/.git""" + + #{ Invariants + head_sha_2k = '235d521da60e4699e5bd59ac658b5b48bd76ddca' + head_sha_50 = '32347c375250fd470973a5d76185cac718955fd5' + #} END invariants + + @classmethod + def setUpAll(cls): + try: + super(TestBigRepoR, cls).setUpAll() + except AttributeError: + pass + cls.gitrepopath = resolve_or_fail(k_env_git_repo) + + +#} END base classes diff --git a/test/performance/test_db.py b/test/performance/test_db.py new file mode 100644 index 000000000..cd231b650 --- /dev/null +++ b/test/performance/test_db.py @@ -0,0 +1,15 @@ +"""Performance tests for object store""" + +import sys +from time import time + +from lib import ( + TestBigRepoR + ) + +class TestGitDBPerformance(TestBigRepoR): + + def test_random_access(self): + pass + # TODO: use the actual db for this + diff --git a/test/performance/test_stream.py b/test/performance/test_stream.py new file mode 100644 index 000000000..2880c9b79 --- /dev/null +++ b/test/performance/test_stream.py @@ -0,0 +1,91 @@ +"""Performance data streaming performance""" + +from lib import TestBigRepoR +from gitdb.db import * +from gitdb.stream import * + +from cStringIO import StringIO +from time import time +import os +import sys +import stat +import subprocess + + +from lib import ( + TestBigRepoR, + make_bytes, + with_rw_directory + ) + + +def make_memory_file(size_in_bytes, randomize=False): + """:return: tuple(size_of_stream, stream) + :param randomize: try to produce a very random stream""" + d = make_bytes(size_in_bytes, randomize) + return len(d), StringIO(d) + + +class TestObjDBPerformance(TestBigRepoR): + + large_data_size_bytes = 1000*1000*10 # some MiB should do it + moderate_data_size_bytes = 1000*1000*1 # just 1 MiB + + @with_rw_directory + def test_large_data_streaming(self, path): + ldb = LooseObjectDB(path) + + for randomize in range(2): + desc = (randomize and 'random ') or '' + print >> sys.stderr, "Creating %s data ..." % desc + st = time() + size, stream = make_memory_file(self.large_data_size_bytes, randomize) + elapsed = time() - st + print >> sys.stderr, "Done (in %f s)" % elapsed + + # writing - due to the compression it will seem faster than it is + st = time() + sha = ldb.store(IStream('blob', size, stream)).sha + elapsed_add = time() - st + assert ldb.has_object(sha) + db_file = ldb.readable_db_object_path(sha) + fsize_kib = os.path.getsize(db_file) / 1000 + + + size_kib = size / 1000 + print >> sys.stderr, "Added %i KiB (filesize = %i KiB) of %s data to loose odb in %f s ( %f Write KiB / s)" % (size_kib, fsize_kib, desc, elapsed_add, size_kib / elapsed_add) + + # reading all at once + st = time() + ostream = ldb.stream(sha) + shadata = ostream.read() + elapsed_readall = time() - st + + stream.seek(0) + assert shadata == stream.getvalue() + print >> sys.stderr, "Read %i KiB of %s data at once from loose odb in %f s ( %f Read KiB / s)" % (size_kib, desc, elapsed_readall, size_kib / elapsed_readall) + + + # reading in chunks of 1 MiB + cs = 512*1000 + chunks = list() + st = time() + ostream = ldb.stream(sha) + while True: + data = ostream.read(cs) + chunks.append(data) + if len(data) < cs: + break + # END read in chunks + elapsed_readchunks = time() - st + + stream.seek(0) + assert ''.join(chunks) == stream.getvalue() + + cs_kib = cs / 1000 + print >> sys.stderr, "Read %i KiB of %s data in %i KiB chunks from loose odb in %f s ( %f Read KiB / s)" % (size_kib, desc, cs_kib, elapsed_readchunks, size_kib / elapsed_readchunks) + + # del db file so git has something to do + os.remove(db_file) + + # END for each randomization factor diff --git a/test/test_db.py b/test/test_db.py index 35ba86802..7f58f4f00 100644 --- a/test/test_db.py +++ b/test/test_db.py @@ -1,12 +1,14 @@ """Test for object db""" -from test.testlib import * -from lib import ZippedStoreShaWriter - -from git.odb import * -from git.odb.stream import Sha1Writer -from git import Blob -from git.errors import BadObject +from lib import ( + with_rw_directory, + ZippedStoreShaWriter, + TestBase + ) +from gitdb import * +from gitdb.stream import Sha1Writer +from gitdb.exc import BadObject +from gitdb.typ import str_blob_type from cStringIO import StringIO import os @@ -36,7 +38,7 @@ def _assert_object_writing(self, db): prev_ostream = db.set_ostream(ostream) assert type(prev_ostream) in ostreams or prev_ostream in ostreams - istream = IStream(Blob.type, len(data), StringIO(data)) + istream = IStream(str_blob_type, len(data), StringIO(data)) # store returns same istream instance, with new sha set my_istream = db.store(istream) @@ -48,12 +50,12 @@ def _assert_object_writing(self, db): # verify data - the slow way, we want to run code if not dry_run: info = db.info(sha) - assert Blob.type == info.type + assert str_blob_type == info.type assert info.size == len(data) ostream = db.stream(sha) assert ostream.read() == data - assert ostream.type == Blob.type + assert ostream.type == str_blob_type assert ostream.size == len(data) else: self.failUnlessRaises(BadObject, db.info, sha) @@ -81,9 +83,9 @@ def _assert_object_writing(self, db): # END for each data set # END for each dry_run mode - @with_bare_rw_repo - def test_writing(self, rwrepo): - ldb = LooseObjectDB(os.path.join(rwrepo.git_dir, 'objects')) + @with_rw_directory + def test_writing(self, path): + ldb = LooseObjectDB(path) # write data self._assert_object_writing(ldb) diff --git a/test/test_stream.py b/test/test_stream.py index 020fe6bd3..af7fdc35a 100644 --- a/test/test_stream.py +++ b/test/test_stream.py @@ -1,13 +1,22 @@ """Test for object db""" -from test.testlib import * from lib import ( + TestBase, DummyStream, DeriveTest, - Sha1Writer + Sha1Writer, + make_bytes, + make_object + ) + +from gitdb import * +from gitdb.util import ( + NULL_HEX_SHA + ) + +from gitdb.typ import ( + str_blob_type ) -from git.odb import * -from git import Blob from cStringIO import StringIO import tempfile import os @@ -23,11 +32,11 @@ class TestStream(TestBase): def test_streams(self): # test info - sha = Blob.NULL_HEX_SHA + sha = NULL_HEX_SHA s = 20 - info = OInfo(sha, Blob.type, s) + info = OInfo(sha, str_blob_type, s) assert info.sha == sha - assert info.type == Blob.type + assert info.type == str_blob_type assert info.size == s # test ostream @@ -40,10 +49,10 @@ def test_streams(self): assert stream.bytes == 20 # derive with own args - DeriveTest(sha, Blob.type, s, stream, 'mine',myarg = 3)._assert() + DeriveTest(sha, str_blob_type, s, stream, 'mine',myarg = 3)._assert() # test istream - istream = IStream(Blob.type, s, stream) + istream = IStream(str_blob_type, s, stream) assert istream.sha == None istream.sha = sha assert istream.sha == sha @@ -54,7 +63,7 @@ def test_streams(self): assert istream.size == s istream.size = s * 2 istream.size == s * 2 - assert istream.type == Blob.type + assert istream.type == str_blob_type istream.type = "something" assert istream.type == "something" assert istream.stream is stream @@ -104,10 +113,10 @@ def test_decompress_reader(self): # create reader if with_size: # need object data - zdata = zlib.compress(make_object(Blob.type, cdata)) + zdata = zlib.compress(make_object(str_blob_type, cdata)) type, size, reader = DecompressMemMapReader.new(zdata, close_on_deletion) assert size == len(cdata) - assert type == Blob.type + assert type == str_blob_type else: # here we need content data zdata = zlib.compress(cdata) diff --git a/test/test_util.py b/test/test_util.py new file mode 100644 index 000000000..5aac5b84b --- /dev/null +++ b/test/test_util.py @@ -0,0 +1,15 @@ +"""Test for object db""" +from lib import TestBase +from gitdb.util import ( + to_hex_sha, + to_bin_sha, + NULL_HEX_SHA + ) + + +class TestUtils(TestBase): + def test_basics(self): + assert to_hex_sha(NULL_HEX_SHA) == NULL_HEX_SHA + assert len(to_bin_sha(NULL_HEX_SHA)) == 20 + assert to_hex_sha(to_bin_sha(NULL_HEX_SHA)) == NULL_HEX_SHA + diff --git a/test/test_utils.py b/test/test_utils.py deleted file mode 100644 index 34572b37e..000000000 --- a/test/test_utils.py +++ /dev/null @@ -1,15 +0,0 @@ -"""Test for object db""" -from test.testlib import * -from git import Blob -from git.odb.utils import ( - to_hex_sha, - to_bin_sha - ) - - -class TestUtils(TestBase): - def test_basics(self): - assert to_hex_sha(Blob.NULL_HEX_SHA) == Blob.NULL_HEX_SHA - assert len(to_bin_sha(Blob.NULL_HEX_SHA)) == 20 - assert to_hex_sha(to_bin_sha(Blob.NULL_HEX_SHA)) == Blob.NULL_HEX_SHA - diff --git a/typ.py b/typ.py new file mode 100644 index 000000000..54a1f84be --- /dev/null +++ b/typ.py @@ -0,0 +1,10 @@ +"""Module containing information about types known to the database""" + +#{ String types + +str_blob_type = "blob" +str_commit_type = "commit" +str_tree_type = "tree" +str_tag_type = "tag" + +#} END string types diff --git a/util.py b/util.py new file mode 100644 index 000000000..a6f726399 --- /dev/null +++ b/util.py @@ -0,0 +1,75 @@ +import binascii +import os +import errno + +try: + import hashlib +except ImportError: + import sha + + +#{ Aliases + +hex_to_bin = binascii.a2b_hex +bin_to_hex = binascii.b2a_hex + +# errors +ENOENT = errno.ENOENT + +# os shortcuts +exists = os.path.exists +mkdir = os.mkdir +isdir = os.path.isdir +rename = os.rename +dirname = os.path.dirname +join = os.path.join +read = os.read +write = os.write +close = os.close + +# constants +NULL_HEX_SHA = "0"*40 + +#} END Aliases + + +#{ Routines + +def make_sha(source=''): + """A python2.4 workaround for the sha/hashlib module fiasco + :note: From the dulwich project """ + try: + return hashlib.sha1(source) + except NameError: + sha1 = sha.sha(source) + return sha1 + +def stream_copy(source, destination, chunk_size=512*1024): + """Copy all data from the source stream into the destination stream in chunks + of size chunk_size + + :return: amount of bytes written""" + br = 0 + while True: + chunk = source.read(chunk_size) + destination.write(chunk) + br += len(chunk) + if len(chunk) < chunk_size: + break + # END reading output stream + return br + +def to_hex_sha(sha): + """:return: hexified version of sha""" + if len(sha) == 40: + return sha + return bin_to_hex(sha) + +def to_bin_sha(sha): + if len(sha) == 20: + return sha + return hex_to_bin(sha) + + +#} END routines + diff --git a/utils.py b/utils.py deleted file mode 100644 index 6863e97b9..000000000 --- a/utils.py +++ /dev/null @@ -1,38 +0,0 @@ -import binascii -import os -import errno - -#{ Routines - -hex_to_bin = binascii.a2b_hex -bin_to_hex = binascii.b2a_hex - -def to_hex_sha(sha): - """:return: hexified version of sha""" - if len(sha) == 40: - return sha - return bin_to_hex(sha) - -def to_bin_sha(sha): - if len(sha) == 20: - return sha - return hex_to_bin(sha) - -# errors -ENOENT = errno.ENOENT - -# os shortcuts -exists = os.path.exists -mkdir = os.mkdir -isdir = os.path.isdir -rename = os.rename -dirname = os.path.dirname -join = os.path.join -read = os.read -write = os.write -close = os.close - - -#} END Routines - - From 93f7316425128a498e0581eca12ef7b44380a1ab Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 12 Jun 2010 17:18:34 +0200 Subject: [PATCH 0003/2375] Added async as submodule tests: minimal reorganzation of code --- .gitmodules | 3 +++ ext/async | 1 + test/lib.py | 7 ++++++- test/performance/test_stream.py | 9 +-------- 4 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 .gitmodules create mode 160000 ext/async diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..45ddc0b4c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "ext/async"] + path = ext/async + url = git://gitorious.org/git-python/async.git diff --git a/ext/async b/ext/async new file mode 160000 index 000000000..5a13dc577 --- /dev/null +++ b/ext/async @@ -0,0 +1 @@ +Subproject commit 5a13dc5772ec3b00b75c8e3b533051cfb82c4929 diff --git a/test/lib.py b/test/lib.py index 071e38a5f..f0c4064ab 100644 --- a/test/lib.py +++ b/test/lib.py @@ -62,11 +62,16 @@ def make_bytes(size_in_bytes, randomize=False): a = array('i', producer) return a.tostring() - def make_object(type, data): """:return: bytes resembling an uncompressed object""" odata = "blob %i\0" % len(data) return odata + data + +def make_memory_file(size_in_bytes, randomize=False): + """:return: tuple(size_of_stream, stream) + :param randomize: try to produce a very random stream""" + d = make_bytes(size_in_bytes, randomize) + return len(d), StringIO(d) #} END routines diff --git a/test/performance/test_stream.py b/test/performance/test_stream.py index 2880c9b79..8916d3e58 100644 --- a/test/performance/test_stream.py +++ b/test/performance/test_stream.py @@ -14,18 +14,11 @@ from lib import ( TestBigRepoR, - make_bytes, + make_memory_file, with_rw_directory ) -def make_memory_file(size_in_bytes, randomize=False): - """:return: tuple(size_of_stream, stream) - :param randomize: try to produce a very random stream""" - d = make_bytes(size_in_bytes, randomize) - return len(d), StringIO(d) - - class TestObjDBPerformance(TestBigRepoR): large_data_size_bytes = 1000*1000*10 # some MiB should do it From 10fef8f8e4ee83cf54feadbb5ffb522efec739fc Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 12 Jun 2010 17:18:51 +0200 Subject: [PATCH 0004/2375] Added project information --- AUTHORS | 1 + README | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 AUTHORS create mode 100644 README diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 000000000..490baad8e --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Creator: Sebastian Thiel diff --git a/README b/README new file mode 100644 index 000000000..a52d9f508 --- /dev/null +++ b/README @@ -0,0 +1,41 @@ +GtDB +===== + +GitDB allows you to access bare git repositories for reading and writing. It +aims at allowing full access to loose objects as well as packs with performance +and scalability in mind. It operates exclusively on streams, allowing to operate +on large objects with a small memory footprint. + +REQUIREMENTS +============ + +* Python Nose - for running the tests + +SOURCE +====== +The source is available in a git repository at gitorious and github: + +git://gitorious.org/git-python/gitdb.git +git://github.com/Byron/gitdb.git + +Once the clone is complete, please be sure to initialize the submodules using + + cd gitdb + git submodule update --init + +Run the tests with + + nosetests + +MAILING LIST +============ +http://groups.google.com/group/git-python + +ISSUE TRACKER +============= +http://byronimo.lighthouseapp.com/projects/51787-gitpython + +LICENSE +======= + +New BSD License From c64a9741a648526a3d24780ccd5ca193f48684c5 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 12 Jun 2010 20:36:00 +0200 Subject: [PATCH 0005/2375] Implemented all async methods, including test which shows how to chain the async method together --- __init__.py | 12 +++++++ db.py | 55 +++++++++++++++++++++--------- ext/async | 2 +- test/__init__.py | 11 ++++++ test/lib.py | 2 +- test/test_db.py | 88 +++++++++++++++++++++++++++++++++++++++++++++++- util.py | 10 ++++++ 7 files changed, 161 insertions(+), 19 deletions(-) diff --git a/__init__.py b/__init__.py index 5789d7eb7..8b0e47b19 100644 --- a/__init__.py +++ b/__init__.py @@ -1,5 +1,17 @@ """Initialize the object database module""" +import sys +import os + +#{ Initialization +def _init_externals(): + """Initialize external projects by putting them into the path""" + sys.path.append(os.path.join(os.path.dirname(__file__), 'ext')) + +#} END initialization + +_init_externals() + # default imports from db import * from stream import * diff --git a/db.py b/db.py index 7ec8a24b3..8107fee25 100644 --- a/db.py +++ b/db.py @@ -14,6 +14,7 @@ ) from util import ( + pool, ENOENT, to_hex_sha, exists, @@ -32,6 +33,11 @@ stream_copy ) + +from async import ( + ChannelThreadTask + ) + import tempfile import mmap import os @@ -40,6 +46,7 @@ __all__ = ('ObjectDBR', 'ObjectDBW', 'FileDBBase', 'LooseObjectDB', 'PackedDB', 'CompoundDB', 'ReferenceDB', 'GitObjectDB' ) + class ObjectDBR(object): """Defines an interface for object database lookup. Objects are identified either by hex-sha (40 bytes) or @@ -52,21 +59,30 @@ def __contains__(self, sha): def has_object(self, sha): """ :return: True if the object identified by the given 40 byte hexsha or 20 bytes - binary sha is contained in the database - :raise BadObject:""" + binary sha is contained in the database""" raise NotImplementedError("To be implemented in subclass") + def has_object_async(self, reader): + """Return a reader yielding information about the membership of objects + as identified by shas + :param reader: Reader yielding 20 byte or 40 byte shas. + :return: async.Reader yielding tuples of (sha, bool) pairs which indicate + whether the given sha exists in the database or not""" + task = ChannelThreadTask(reader, str(self.has_object_async), lambda sha: (sha, self.has_object(sha))) + return pool.add_task(task) + def info(self, sha): """ :return: OInfo instance :param sha: 40 bytes hexsha or 20 bytes binary sha :raise BadObject:""" raise NotImplementedError("To be implemented in subclass") - def info_async(self, input_channel): + def info_async(self, reader): """Retrieve information of a multitude of objects asynchronously - :param input_channel: Channel yielding the sha's of the objects of interest - :return: Channel yielding OInfo|InvalidOInfo, in any order""" - raise NotImplementedError("To be implemented in subclass") + :param reader: Channel yielding the sha's of the objects of interest + :return: async.Reader yielding OInfo|InvalidOInfo, in any order""" + task = ChannelThreadTask(reader, str(self.info_async), self.info) + return pool.add_task(task) def stream(self, sha): """:return: OStream instance @@ -74,12 +90,17 @@ def stream(self, sha): :raise BadObject:""" raise NotImplementedError("To be implemented in subclass") - def stream_async(self, input_channel): + def stream_async(self, reader): """Retrieve the OStream of multiple objects - :param input_channel: see ``info`` + :param reader: see ``info`` :param max_threads: see ``ObjectDBW.store`` - :return: Channel yielding OStream|InvalidOStream instances in any order""" - raise NotImplementedError("To be implemented in subclass") + :return: async.Reader yielding OStream|InvalidOStream instances in any order + :note: depending on the system configuration, it might not be possible to + read all OStreams at once. Instead, read them individually using reader.read(x) + where x is small enough.""" + # base implementation just uses the stream method repeatedly + task = ChannelThreadTask(reader, str(self.stream_async), self.stream) + return pool.add_task(task) #} END query interface @@ -114,7 +135,7 @@ def store(self, istream): :raise IOError: if data could not be written""" raise NotImplementedError("To be implemented in subclass") - def store_async(self, input_channel): + def store_async(self, reader): """Create multiple new objects in the database asynchronously. The method will return right away, returning an output channel which receives the results as they are computed. @@ -122,13 +143,15 @@ def store_async(self, input_channel): :return: Channel yielding your IStream which served as input, in any order. The IStreams sha will be set to the sha it received during the process, or its error attribute will be set to the exception informing about the error. - :param input_channel: Channel yielding IStream instance. - As the same instances will be used in the output channel, you can create a map - between the id(istream) -> istream - :note:As some ODB implementations implement this operation as atomic, they might + :param reader: async.Reader yielding IStream instances. + The same instances will be used in the output channel as were received + in by the Reader. + :note:As some ODB implementations implement this operation atomic, they might abort the whole operation if one item could not be processed. Hence check how many items have actually been produced.""" - raise NotImplementedError("To be implemented in subclass") + # base implementation uses store to perform the work + task = ChannelThreadTask(reader, str(self.store_async), self.store) + return pool.add_task(task) #} END edit interface diff --git a/ext/async b/ext/async index 5a13dc577..164bb702e 160000 --- a/ext/async +++ b/ext/async @@ -1 +1 @@ -Subproject commit 5a13dc5772ec3b00b75c8e3b533051cfb82c4929 +Subproject commit 164bb702e3871ab30341a714ef517fb58cd76772 diff --git a/test/__init__.py b/test/__init__.py index 8b1378917..0dec7750f 100644 --- a/test/__init__.py +++ b/test/__init__.py @@ -1 +1,12 @@ +import gitdb.util + +#{ Initialization +def _init_pool(): + """Assure the pool is actually threaded""" + size = 2 + print "Setting ThreadPool to %i" % size + gitdb.util.pool.set_size(size) + + +#} END initialization diff --git a/test/lib.py b/test/lib.py index f0c4064ab..fc0982bcb 100644 --- a/test/lib.py +++ b/test/lib.py @@ -30,7 +30,7 @@ def with_rw_directory(func): """Create a temporary directory which can be written to, remove it if the test suceeds, but leave it otherwise to aid additional debugging""" def wrapper(self): - path = tempfile.mktemp(suffix=func.__name__) + path = tempfile.mktemp(prefix=func.__name__) os.mkdir(path) try: return func(self, path) diff --git a/test/test_db.py b/test/test_db.py index 7f58f4f00..7ba770f48 100644 --- a/test/test_db.py +++ b/test/test_db.py @@ -10,6 +10,8 @@ from gitdb.exc import BadObject from gitdb.typ import str_blob_type +from async import IteratorReader + from cStringIO import StringIO import os @@ -78,10 +80,93 @@ def _assert_object_writing(self, db): new_ostream = db.ostream() # note: only works as long our store write uses the same compression - # level, which is zip + # level, which is zip_best assert ostream.getvalue() == new_ostream.getvalue() # END for each data set # END for each dry_run mode + + def _assert_object_writing_async(self, db): + """Test generic object writing using asynchronous access""" + ni = 5000 + def istream_generator(offset=0, ni=ni): + for data_src in xrange(ni): + data = str(data_src + offset) + yield IStream(str_blob_type, len(data), StringIO(data)) + # END for each item + # END generator utility + + # for now, we are very trusty here as we expect it to work if it worked + # in the single-stream case + + # write objects + reader = IteratorReader(istream_generator()) + istream_reader = db.store_async(reader) + istreams = istream_reader.read() # read all + assert istream_reader.task().error() is None + assert len(istreams) == ni + + for stream in istreams: + assert stream.error is None + assert len(stream.sha) == 40 + assert isinstance(stream, IStream) + # END assert each stream + + # test has-object-async - we must have all previously added ones + reader = IteratorReader( istream.sha for istream in istreams ) + hasobject_reader = db.has_object_async(reader) + count = 0 + for sha, has_object in hasobject_reader: + assert has_object + count += 1 + # END for each sha + assert count == ni + + # read the objects we have just written + reader = IteratorReader( istream.sha for istream in istreams ) + ostream_reader = db.stream_async(reader) + + # read items individually to prevent hitting possible sys-limits + count = 0 + for ostream in ostream_reader: + assert isinstance(ostream, OStream) + count += 1 + # END for each ostream + assert ostream_reader.task().error() is None + assert count == ni + + # get info about our items + reader = IteratorReader( istream.sha for istream in istreams ) + info_reader = db.info_async(reader) + + count = 0 + for oinfo in info_reader: + assert isinstance(oinfo, OInfo) + count += 1 + # END for each oinfo instance + assert count == ni + + + # combined read-write using a converter + # add 2500 items, and obtain their output streams + nni = 2500 + reader = IteratorReader(istream_generator(offset=ni, ni=nni)) + istream_to_sha = lambda istreams: [ istream.sha for istream in istreams ] + + istream_reader = db.store_async(reader) + istream_reader.set_post_cb(istream_to_sha) + + ostream_reader = db.stream_async(istream_reader) + + count = 0 + # read it individually, otherwise we might run into the ulimit + for ostream in ostream_reader: + assert isinstance(ostream, OStream) + count += 1 + # END for each ostream + assert count == nni + + + @with_rw_directory def test_writing(self, path): @@ -89,4 +174,5 @@ def test_writing(self, path): # write data self._assert_object_writing(ldb) + self._assert_object_writing_async(ldb) diff --git a/util.py b/util.py index a6f726399..fd52695bf 100644 --- a/util.py +++ b/util.py @@ -2,11 +2,21 @@ import os import errno +from async import ThreadPool + try: import hashlib except ImportError: import sha +#{ Globals + +# A pool distributing tasks, initially with zero threads, hence everything +# will be handled in the main thread +pool = ThreadPool(0) + +#} END globals + #{ Aliases From 05cee2eb6b35d5216d4dd34bed50cdc921668cd4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 12 Jun 2010 22:22:33 +0200 Subject: [PATCH 0006/2375] Added multi-threading performance tests which show that, during compression and decompression, it is not a tiny bit faster than without, which is due to the GIL and even separately locked zlib module implementations. The only way to make this faster update the resepctive c modules to drop the gil, and their own locks where possible --- ext/async | 2 +- test/performance/test_stream.py | 102 +++++++++++++++++++++++++++++++- 2 files changed, 101 insertions(+), 3 deletions(-) diff --git a/ext/async b/ext/async index 164bb702e..8cfa2542e 160000 --- a/ext/async +++ b/ext/async @@ -1 +1 @@ -Subproject commit 164bb702e3871ab30341a714ef517fb58cd76772 +Subproject commit 8cfa2542ed623627b5e2e91072368209710e9370 diff --git a/test/performance/test_stream.py b/test/performance/test_stream.py index 8916d3e58..298207963 100644 --- a/test/performance/test_stream.py +++ b/test/performance/test_stream.py @@ -3,6 +3,14 @@ from lib import TestBigRepoR from gitdb.db import * from gitdb.stream import * +from gitdb.util import pool +from gitdb.typ import str_blob_type +from gitdb.fun import chunk_size + +from async import ( + IteratorReader, + ChannelThreadTask, + ) from cStringIO import StringIO from time import time @@ -19,6 +27,30 @@ ) +#{ Utilities +def read_chunked_stream(stream): + total = 0 + while True: + chunk = stream.read(chunk_size) + total += len(chunk) + if len(chunk) < chunk_size: + break + # END read stream loop + assert total == stream.size + return stream + + +class TestStreamReader(ChannelThreadTask): + """Expects input streams and reads them in chunks. It will read one at a time, + requireing a queue chunk of size 1""" + def __init__(self, *args): + super(TestStreamReader, self).__init__(*args) + self.fun = read_chunked_stream + self.max_chunksize = 1 + + +#} END utilities + class TestObjDBPerformance(TestBigRepoR): large_data_size_bytes = 1000*1000*10 # some MiB should do it @@ -27,7 +59,9 @@ class TestObjDBPerformance(TestBigRepoR): @with_rw_directory def test_large_data_streaming(self, path): ldb = LooseObjectDB(path) + string_ios = list() # list of streams we previously created + # serial mode for randomize in range(2): desc = (randomize and 'random ') or '' print >> sys.stderr, "Creating %s data ..." % desc @@ -35,6 +69,7 @@ def test_large_data_streaming(self, path): size, stream = make_memory_file(self.large_data_size_bytes, randomize) elapsed = time() - st print >> sys.stderr, "Done (in %f s)" % elapsed + string_ios.append(stream) # writing - due to the compression it will seem faster than it is st = time() @@ -78,7 +113,70 @@ def test_large_data_streaming(self, path): cs_kib = cs / 1000 print >> sys.stderr, "Read %i KiB of %s data in %i KiB chunks from loose odb in %f s ( %f Read KiB / s)" % (size_kib, desc, cs_kib, elapsed_readchunks, size_kib / elapsed_readchunks) - # del db file so git has something to do + # del db file so we keep something to do os.remove(db_file) - # END for each randomization factor + + + # multi-threaded mode + # want two, should be supported by most of todays cpus + pool.set_size(2) + total_kib = 0 + nsios = len(string_ios) + for stream in string_ios: + stream.seek(0) + total_kib += len(stream.getvalue()) / 1000 + # END rewind + + def istream_iter(): + for stream in string_ios: + stream.seek(0) + yield IStream(str_blob_type, len(stream.getvalue()), stream) + # END for each stream + # END util + + # write multiple objects at once, involving concurrent compression + reader = IteratorReader(istream_iter()) + istream_reader = ldb.store_async(reader) + istream_reader.task().max_chunksize = 1 + + st = time() + istreams = istream_reader.read(nsios) + assert len(istreams) == nsios + elapsed = time() - st + + print >> sys.stderr, "Threads(%i): Compressed %i KiB of data in loose odb in %f s ( %f Write KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) + + + # decompress multiple at once, by reading them + istream_reader = IteratorReader(iter([ i.sha for i in istreams ])) + ostream_reader = ldb.stream_async(istream_reader) + + chunk_task = TestStreamReader(ostream_reader, "chunker", None) + output_reader = pool.add_task(chunk_task) + + st = time() + assert len(output_reader.read(nsios)) == nsios + elapsed = time() - st + + print >> sys.stderr, "Threads(%i): Decompressed %i KiB of data in loose odb in %f s ( %f Write KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) + + # store the files, and read them back. For the reading, we use a task + # as well which is chunked into one item per task. Reading all will + # very quickly result in two threads handling two bytestreams of + # chained compression/decompression streams + reader = IteratorReader(istream_iter()) + istream_reader = ldb.store_async(reader) + + istream_to_sha = lambda items: [ i.sha for i in items ] + istream_reader.set_post_cb(istream_to_sha) + + ostream_reader = ldb.stream_async(istream_reader) + chunk_task = TestStreamReader(ostream_reader, "chunker", None) + output_reader = pool.add_task(chunk_task) + + st = time() + assert len(output_reader.read(nsios)) == nsios + elapsed = time() - st + + print >> sys.stderr, "Threads(%i): Compressed and decompressed and read %i KiB of data in loose odb in %f s ( %f Combined KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) From 0ef86550179b9bb9e29ecccdccd586713b9d1752 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 13 Jun 2010 13:44:10 +0200 Subject: [PATCH 0007/2375] Now using the async zlib module if it is available to allow performance gains through multi-threading. --- ext/async | 2 +- fun.py | 2 +- stream.py | 5 +++-- test/lib.py | 2 +- test/performance/test_stream.py | 13 +++++++++---- test/test_stream.py | 2 +- util.py | 6 ++++++ 7 files changed, 22 insertions(+), 10 deletions(-) diff --git a/ext/async b/ext/async index 8cfa2542e..77bf7bef7 160000 --- a/ext/async +++ b/ext/async @@ -1 +1 @@ -Subproject commit 8cfa2542ed623627b5e2e91072368209710e9370 +Subproject commit 77bf7bef748b019a3a59693cef6d955f74b358ad diff --git a/fun.py b/fun.py index 80b0f41b6..c766f8e09 100644 --- a/fun.py +++ b/fun.py @@ -6,7 +6,7 @@ BadObjectType ) -import zlib +from util import zlib decompressobj = zlib.decompressobj diff --git a/stream.py b/stream.py index 309df28c4..10bc8901a 100644 --- a/stream.py +++ b/stream.py @@ -1,4 +1,4 @@ -import zlib + from cStringIO import StringIO import errno @@ -7,7 +7,8 @@ to_bin_sha, make_sha, write, - close + close, + zlib ) __all__ = ('OInfo', 'OStream', 'IStream', 'InvalidOInfo', 'InvalidOStream', diff --git a/test/lib.py b/test/lib.py index fc0982bcb..723958ca1 100644 --- a/test/lib.py +++ b/test/lib.py @@ -3,9 +3,9 @@ OStream, ) from gitdb.stream import Sha1Writer +from gitdb.util import zlib import sys -import zlib import random from array import array from cStringIO import StringIO diff --git a/test/performance/test_stream.py b/test/performance/test_stream.py index 298207963..5de463ee2 100644 --- a/test/performance/test_stream.py +++ b/test/performance/test_stream.py @@ -1,5 +1,4 @@ """Performance data streaming performance""" - from lib import TestBigRepoR from gitdb.db import * from gitdb.stream import * @@ -53,7 +52,7 @@ def __init__(self, *args): class TestObjDBPerformance(TestBigRepoR): - large_data_size_bytes = 1000*1000*10 # some MiB should do it + large_data_size_bytes = 1000*1000*50 # some MiB should do it moderate_data_size_bytes = 1000*1000*1 # just 1 MiB @with_rw_directory @@ -147,19 +146,22 @@ def istream_iter(): print >> sys.stderr, "Threads(%i): Compressed %i KiB of data in loose odb in %f s ( %f Write KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) - # decompress multiple at once, by reading them + # chunk size is not important as the stream will not really be decompressed + + # until its read istream_reader = IteratorReader(iter([ i.sha for i in istreams ])) ostream_reader = ldb.stream_async(istream_reader) chunk_task = TestStreamReader(ostream_reader, "chunker", None) output_reader = pool.add_task(chunk_task) + output_reader.task().max_chunksize = 1 st = time() assert len(output_reader.read(nsios)) == nsios elapsed = time() - st - print >> sys.stderr, "Threads(%i): Decompressed %i KiB of data in loose odb in %f s ( %f Write KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) + print >> sys.stderr, "Threads(%i): Decompressed %i KiB of data in loose odb in %f s ( %f Read KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) # store the files, and read them back. For the reading, we use a task # as well which is chunked into one item per task. Reading all will @@ -167,13 +169,16 @@ def istream_iter(): # chained compression/decompression streams reader = IteratorReader(istream_iter()) istream_reader = ldb.store_async(reader) + istream_reader.task().max_chunksize = 1 istream_to_sha = lambda items: [ i.sha for i in items ] istream_reader.set_post_cb(istream_to_sha) ostream_reader = ldb.stream_async(istream_reader) + chunk_task = TestStreamReader(ostream_reader, "chunker", None) output_reader = pool.add_task(chunk_task) + output_reader.max_chunksize = 1 st = time() assert len(output_reader.read(nsios)) == nsios diff --git a/test/test_stream.py b/test/test_stream.py index af7fdc35a..4f022286e 100644 --- a/test/test_stream.py +++ b/test/test_stream.py @@ -13,6 +13,7 @@ NULL_HEX_SHA ) +from gitdb.util import zlib from gitdb.typ import ( str_blob_type ) @@ -20,7 +21,6 @@ from cStringIO import StringIO import tempfile import os -import zlib diff --git a/util.py b/util.py index fd52695bf..6b8862472 100644 --- a/util.py +++ b/util.py @@ -2,6 +2,12 @@ import os import errno +try: + import async.mod.zlib as zlib +except ImportError: + import zlib +# END try async zlib + from async import ThreadPool try: From 97a17dc4f3af188c8c00b0b265f17c26c9c96ddc Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 14 Jun 2010 18:16:31 +0200 Subject: [PATCH 0008/2375] Made the db module a package to have enough room for expansion --- db/__init__.py | 7 ++ db.py => db/base.py | 218 +------------------------------------------- db/git.py | 33 +++++++ db/loose.py | 186 +++++++++++++++++++++++++++++++++++++ db/pack.py | 11 +++ db/ref.py | 7 ++ ext/async | 2 +- 7 files changed, 250 insertions(+), 214 deletions(-) create mode 100644 db/__init__.py rename db.py => db/base.py (50%) create mode 100644 db/git.py create mode 100644 db/loose.py create mode 100644 db/pack.py create mode 100644 db/ref.py diff --git a/db/__init__.py b/db/__init__.py new file mode 100644 index 000000000..05d9b21b3 --- /dev/null +++ b/db/__init__.py @@ -0,0 +1,7 @@ + +from base import * +from loose import * +from pack import * +from git import * +from ref import * + diff --git a/db.py b/db/base.py similarity index 50% rename from db.py rename to db/base.py index 8107fee25..2cda0ea0a 100644 --- a/db.py +++ b/db/base.py @@ -1,50 +1,15 @@ """Contains implementations of database retrieveing objects""" -from exc import ( - InvalidDBRoot, - BadObject, - BadObjectType - ) - -from stream import ( - DecompressMemMapReader, - FDCompressedSha1Writer, - Sha1Writer, - OStream, - OInfo - ) - -from util import ( +from gitdb.util import ( pool, - ENOENT, - to_hex_sha, - exists, - hex_to_bin, - isdir, - mkdir, - rename, - dirname, join ) -from fun import ( - chunk_size, - loose_object_header_info, - write_object, - stream_copy - ) - - from async import ( ChannelThreadTask ) -import tempfile -import mmap -import os - -__all__ = ('ObjectDBR', 'ObjectDBW', 'FileDBBase', 'LooseObjectDB', 'PackedDB', - 'CompoundDB', 'ReferenceDB', 'GitObjectDB' ) +__all__ = ('ObjectDBR', 'ObjectDBW', 'FileDBBase', 'CompoundDB') class ObjectDBR(object): @@ -104,6 +69,7 @@ def stream_async(self, reader): #} END query interface + class ObjectDBW(object): """Defines an interface to create objects in the database""" @@ -183,181 +149,7 @@ def db_path(self, rela_path): return join(self._root_path, rela_path) #} END interface - - -class LooseObjectDB(FileDBBase, ObjectDBR, ObjectDBW): - """A database which operates on loose object files""" - - # CONFIGURATION - # chunks in which data will be copied between streams - stream_chunk_size = chunk_size - - - def __init__(self, root_path): - super(LooseObjectDB, self).__init__(root_path) - self._hexsha_to_file = dict() - # Additional Flags - might be set to 0 after the first failure - # Depending on the root, this might work for some mounts, for others not, which - # is why it is per instance - self._fd_open_flags = getattr(os, 'O_NOATIME', 0) - - #{ Interface - def object_path(self, hexsha): - """ - :return: path at which the object with the given hexsha would be stored, - relative to the database root""" - return join(hexsha[:2], hexsha[2:]) - - def readable_db_object_path(self, hexsha): - """ - :return: readable object path to the object identified by hexsha - :raise BadObject: If the object file does not exist""" - try: - return self._hexsha_to_file[hexsha] - except KeyError: - pass - # END ignore cache misses - - # try filesystem - path = self.db_path(self.object_path(hexsha)) - if exists(path): - self._hexsha_to_file[hexsha] = path - return path - # END handle cache - raise BadObject(hexsha) - - #} END interface - - def _map_loose_object(self, sha): - """ - :return: memory map of that file to allow random read access - :raise BadObject: if object could not be located""" - db_path = self.db_path(self.object_path(to_hex_sha(sha))) - try: - fd = os.open(db_path, os.O_RDONLY|self._fd_open_flags) - except OSError,e: - if e.errno != ENOENT: - # try again without noatime - try: - fd = os.open(db_path, os.O_RDONLY) - except OSError: - raise BadObject(to_hex_sha(sha)) - # didn't work because of our flag, don't try it again - self._fd_open_flags = 0 - else: - raise BadObject(to_hex_sha(sha)) - # END handle error - # END exception handling - try: - return mmap.mmap(fd, 0, access=mmap.ACCESS_READ) - finally: - os.close(fd) - # END assure file is closed - - def set_ostream(self, stream): - """:raise TypeError: if the stream does not support the Sha1Writer interface""" - if stream is not None and not isinstance(stream, Sha1Writer): - raise TypeError("Output stream musst support the %s interface" % Sha1Writer.__name__) - return super(LooseObjectDB, self).set_ostream(stream) - - def info(self, sha): - m = self._map_loose_object(sha) - try: - type, size = loose_object_header_info(m) - return OInfo(sha, type, size) - finally: - m.close() - # END assure release of system resources - - def stream(self, sha): - m = self._map_loose_object(sha) - type, size, stream = DecompressMemMapReader.new(m, close_on_deletion = True) - return OStream(sha, type, size, stream) - - def has_object(self, sha): - try: - self.readable_db_object_path(to_hex_sha(sha)) - return True - except BadObject: - return False - # END check existance - - def store(self, istream): - """note: The sha we produce will be hex by nature""" - tmp_path = None - writer = self.ostream() - if writer is None: - # open a tmp file to write the data to - fd, tmp_path = tempfile.mkstemp(prefix='obj', dir=self._root_path) - writer = FDCompressedSha1Writer(fd) - # END handle custom writer - - try: - try: - if istream.sha is not None: - stream_copy(istream.read, writer.write, istream.size, self.stream_chunk_size) - else: - # write object with header, we have to make a new one - write_object(istream.type, istream.size, istream.read, writer.write, - chunk_size=self.stream_chunk_size) - # END handle direct stream copies - except: - if tmp_path: - os.remove(tmp_path) - raise - # END assure tmpfile removal on error - finally: - if tmp_path: - writer.close() - # END assure target stream is closed - - sha = istream.sha or writer.sha(as_hex=True) - - if tmp_path: - obj_path = self.db_path(self.object_path(sha)) - obj_dir = dirname(obj_path) - if not isdir(obj_dir): - mkdir(obj_dir) - # END handle destination directory - rename(tmp_path, obj_path) - # END handle dry_run - - istream.sha = sha - return istream - - -class PackedDB(FileDBBase, ObjectDBR): - """A database operating on a set of object packs""" - - + class CompoundDB(ObjectDBR): """A database which delegates calls to sub-databases""" - - -class ReferenceDB(CompoundDB): - """A database consisting of database referred to in a file""" - - -#class GitObjectDB(CompoundDB, ObjectDBW): -class GitObjectDB(LooseObjectDB): - """A database representing the default git object store, which includes loose - objects, pack files and an alternates file - - It will create objects only in the loose object database. - :note: for now, we use the git command to do all the lookup, just until he - have packs and the other implementations - """ - def __init__(self, root_path, git): - """Initialize this instance with the root and a git command""" - super(GitObjectDB, self).__init__(root_path) - self._git = git - - def info(self, sha): - t = self._git.get_object_header(sha) - return OInfo(*t) - - def stream(self, sha): - """For now, all lookup is done by git itself""" - t = self._git.stream_object_data(sha) - return OStream(*t) - + # TODO diff --git a/db/git.py b/db/git.py new file mode 100644 index 000000000..d2477d7b1 --- /dev/null +++ b/db/git.py @@ -0,0 +1,33 @@ + +from gitdb.stream import ( + OInfo, + OStream + ) + +from loose import LooseObjectDB + +__all__ = ('GitObjectDB', ) + +#class GitObjectDB(CompoundDB, ObjectDBW): +class GitObjectDB(LooseObjectDB): + """A database representing the default git object store, which includes loose + objects, pack files and an alternates file + + It will create objects only in the loose object database. + :note: for now, we use the git command to do all the lookup, just until he + have packs and the other implementations + """ + def __init__(self, root_path, git): + """Initialize this instance with the root and a git command""" + super(GitObjectDB, self).__init__(root_path) + self._git = git + + def info(self, sha): + t = self._git.get_object_header(sha) + return OInfo(*t) + + def stream(self, sha): + """For now, all lookup is done by git itself""" + t = self._git.stream_object_data(sha) + return OStream(*t) + diff --git a/db/loose.py b/db/loose.py new file mode 100644 index 000000000..37aad8c6f --- /dev/null +++ b/db/loose.py @@ -0,0 +1,186 @@ +from base import ( + FileDBBase, + ObjectDBR, + ObjectDBW + ) + + +from gitdb.exc import ( + InvalidDBRoot, + BadObject, + ) + +from gitdb.stream import ( + DecompressMemMapReader, + FDCompressedSha1Writer, + Sha1Writer, + OStream, + OInfo + ) + +from gitdb.util import ( + ENOENT, + to_hex_sha, + exists, + isdir, + mkdir, + rename, + dirname, + join + ) + +from gitdb.fun import ( + chunk_size, + loose_object_header_info, + write_object, + stream_copy + ) + +import tempfile +import mmap +import os + + +__all__ = ( 'LooseObjectDB', ) + + +class LooseObjectDB(FileDBBase, ObjectDBR, ObjectDBW): + """A database which operates on loose object files""" + + # CONFIGURATION + # chunks in which data will be copied between streams + stream_chunk_size = chunk_size + + + def __init__(self, root_path): + super(LooseObjectDB, self).__init__(root_path) + self._hexsha_to_file = dict() + # Additional Flags - might be set to 0 after the first failure + # Depending on the root, this might work for some mounts, for others not, which + # is why it is per instance + self._fd_open_flags = getattr(os, 'O_NOATIME', 0) + + #{ Interface + def object_path(self, hexsha): + """ + :return: path at which the object with the given hexsha would be stored, + relative to the database root""" + return join(hexsha[:2], hexsha[2:]) + + def readable_db_object_path(self, hexsha): + """ + :return: readable object path to the object identified by hexsha + :raise BadObject: If the object file does not exist""" + try: + return self._hexsha_to_file[hexsha] + except KeyError: + pass + # END ignore cache misses + + # try filesystem + path = self.db_path(self.object_path(hexsha)) + if exists(path): + self._hexsha_to_file[hexsha] = path + return path + # END handle cache + raise BadObject(hexsha) + + #} END interface + + def _map_loose_object(self, sha): + """ + :return: memory map of that file to allow random read access + :raise BadObject: if object could not be located""" + db_path = self.db_path(self.object_path(to_hex_sha(sha))) + try: + fd = os.open(db_path, os.O_RDONLY|self._fd_open_flags) + except OSError,e: + if e.errno != ENOENT: + # try again without noatime + try: + fd = os.open(db_path, os.O_RDONLY) + except OSError: + raise BadObject(to_hex_sha(sha)) + # didn't work because of our flag, don't try it again + self._fd_open_flags = 0 + else: + raise BadObject(to_hex_sha(sha)) + # END handle error + # END exception handling + try: + return mmap.mmap(fd, 0, access=mmap.ACCESS_READ) + finally: + os.close(fd) + # END assure file is closed + + def set_ostream(self, stream): + """:raise TypeError: if the stream does not support the Sha1Writer interface""" + if stream is not None and not isinstance(stream, Sha1Writer): + raise TypeError("Output stream musst support the %s interface" % Sha1Writer.__name__) + return super(LooseObjectDB, self).set_ostream(stream) + + def info(self, sha): + m = self._map_loose_object(sha) + try: + type, size = loose_object_header_info(m) + return OInfo(sha, type, size) + finally: + m.close() + # END assure release of system resources + + def stream(self, sha): + m = self._map_loose_object(sha) + type, size, stream = DecompressMemMapReader.new(m, close_on_deletion = True) + return OStream(sha, type, size, stream) + + def has_object(self, sha): + try: + self.readable_db_object_path(to_hex_sha(sha)) + return True + except BadObject: + return False + # END check existance + + def store(self, istream): + """note: The sha we produce will be hex by nature""" + tmp_path = None + writer = self.ostream() + if writer is None: + # open a tmp file to write the data to + fd, tmp_path = tempfile.mkstemp(prefix='obj', dir=self._root_path) + writer = FDCompressedSha1Writer(fd) + # END handle custom writer + + try: + try: + if istream.sha is not None: + stream_copy(istream.read, writer.write, istream.size, self.stream_chunk_size) + else: + # write object with header, we have to make a new one + write_object(istream.type, istream.size, istream.read, writer.write, + chunk_size=self.stream_chunk_size) + # END handle direct stream copies + except: + if tmp_path: + os.remove(tmp_path) + raise + # END assure tmpfile removal on error + finally: + if tmp_path: + writer.close() + # END assure target stream is closed + + sha = istream.sha or writer.sha(as_hex=True) + + if tmp_path: + obj_path = self.db_path(self.object_path(sha)) + obj_dir = dirname(obj_path) + if not isdir(obj_dir): + mkdir(obj_dir) + # END handle destination directory + rename(tmp_path, obj_path) + # END handle dry_run + + istream.sha = sha + return istream + diff --git a/db/pack.py b/db/pack.py new file mode 100644 index 000000000..e57241a32 --- /dev/null +++ b/db/pack.py @@ -0,0 +1,11 @@ +"""Module containing a database to deal with packs""" +from base import ( + FileDBBase, + ObjectDBR + ) + +__all__ = ('PackedDB', ) + +class PackedDB(FileDBBase, ObjectDBR): + """A database operating on a set of object packs""" + diff --git a/db/ref.py b/db/ref.py new file mode 100644 index 000000000..2c63884bc --- /dev/null +++ b/db/ref.py @@ -0,0 +1,7 @@ +from base import CompoundDB + +__all__ = ('CompoundDB', ) + +class ReferenceDB(CompoundDB): + """A database consisting of database referred to in a file""" + diff --git a/ext/async b/ext/async index 77bf7bef7..af0040b0f 160000 --- a/ext/async +++ b/ext/async @@ -1 +1 @@ -Subproject commit 77bf7bef748b019a3a59693cef6d955f74b358ad +Subproject commit af0040b0f3c6ede3be5b2d6bc69f6ea5ac53c36c From 133988a9b53400810d2baea9cc817c67dd1577a9 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 14 Jun 2010 18:27:29 +0200 Subject: [PATCH 0009/2375] update db test to allow testing of individual database types, giving more fine-grained control over testing the db packge --- test/db/__init__.py | 0 test/{test_db.py => db/lib.py} | 31 ++++++++++++++----------------- test/db/test_loose.py | 13 +++++++++++++ 3 files changed, 27 insertions(+), 17 deletions(-) create mode 100644 test/db/__init__.py rename test/{test_db.py => db/lib.py} (93%) create mode 100644 test/db/test_loose.py diff --git a/test/db/__init__.py b/test/db/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/test/test_db.py b/test/db/lib.py similarity index 93% rename from test/test_db.py rename to test/db/lib.py index 7ba770f48..8d61e677b 100644 --- a/test/test_db.py +++ b/test/db/lib.py @@ -1,22 +1,29 @@ -"""Test for object db""" -from lib import ( +"""Base classes for object db testing""" +from gitdb.test.lib import ( with_rw_directory, ZippedStoreShaWriter, TestBase ) -from gitdb import * -from gitdb.stream import Sha1Writer +from gitdb.stream import ( + Sha1Writer, + IStream, + OStream, + OInfo + ) + from gitdb.exc import BadObject from gitdb.typ import str_blob_type from async import IteratorReader from cStringIO import StringIO -import os + + +__all__ = ('TestDBBase', 'with_rw_directory' ) -class TestDB(TestBase): - """Test the different db class implementations""" +class TestDBBase(TestBase): + """Base class providing testing routines on databases""" # data two_lines = "1234\nhello world" @@ -166,13 +173,3 @@ def istream_generator(offset=0, ni=ni): assert count == nni - - - @with_rw_directory - def test_writing(self, path): - ldb = LooseObjectDB(path) - - # write data - self._assert_object_writing(ldb) - self._assert_object_writing_async(ldb) - diff --git a/test/db/test_loose.py b/test/db/test_loose.py new file mode 100644 index 000000000..70cd7742c --- /dev/null +++ b/test/db/test_loose.py @@ -0,0 +1,13 @@ +from lib import * +from gitdb.db import LooseObjectDB + +class TestLooseDB(TestDBBase): + + @with_rw_directory + def test_writing(self, path): + ldb = LooseObjectDB(path) + + # write data + self._assert_object_writing(ldb) + self._assert_object_writing_async(ldb) + From 937d592ad08cff4bcb675a96d62534c65cc8015c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 15 Jun 2010 01:06:01 +0200 Subject: [PATCH 0010/2375] Added LockedFD class including test, it moved 'down' from git-python --- test/test_util.py | 78 ++++++++++++++++++++++++- util.py | 144 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 221 insertions(+), 1 deletion(-) diff --git a/test/test_util.py b/test/test_util.py index 5aac5b84b..2272b53e5 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -1,9 +1,13 @@ """Test for object db""" +import tempfile +import os + from lib import TestBase from gitdb.util import ( to_hex_sha, to_bin_sha, - NULL_HEX_SHA + NULL_HEX_SHA, + LockedFD ) @@ -12,4 +16,76 @@ def test_basics(self): assert to_hex_sha(NULL_HEX_SHA) == NULL_HEX_SHA assert len(to_bin_sha(NULL_HEX_SHA)) == 20 assert to_hex_sha(to_bin_sha(NULL_HEX_SHA)) == NULL_HEX_SHA + + def _cmp_contents(self, file_path, data): + # raise if data from file at file_path + # does not match data string + fp = open(file_path, "rb") + try: + assert fp.read() == data + finally: + fp.close() + + def test_lockedfd(self): + my_file = tempfile.mktemp() + orig_data = "hello" + new_data = "world" + my_file_fp = open(my_file, "wb") + my_file_fp.write(orig_data) + my_file_fp.close() + + try: + lfd = LockedFD(my_file) + lockfilepath = lfd._lockfilepath() + + # cannot end before it was started + self.failUnlessRaises(AssertionError, lfd.rollback) + self.failUnlessRaises(AssertionError, lfd.commit) + + # open for writing + assert not os.path.isfile(lockfilepath) + wfd = lfd.open(write=True) + assert lfd._fd is wfd + assert os.path.isfile(lockfilepath) + + # write data and fail + os.write(wfd, new_data) + lfd.rollback() + assert lfd._fd is None + self._cmp_contents(my_file, orig_data) + assert not os.path.isfile(lockfilepath) + + # additional call doesnt fail + lfd.commit() + lfd.rollback() + + # test reading + lfd = LockedFD(my_file) + rfd = lfd.open(write=False) + assert os.read(rfd, len(orig_data)) == orig_data + + assert os.path.isfile(lockfilepath) + # deletion rolls back + del(lfd) + assert not os.path.isfile(lockfilepath) + + + # write data - concurrently + lfd = LockedFD(my_file) + olfd = LockedFD(my_file) + assert not os.path.isfile(lockfilepath) + wfdstream = lfd.open(write=True, stream=True) # this time as stream + assert os.path.isfile(lockfilepath) + # another one fails + self.failUnlessRaises(IOError, olfd.open) + + wfdstream.write(new_data) + lfd.commit() + assert not os.path.isfile(lockfilepath) + self._cmp_contents(my_file, new_data) + + # could test automatic _end_writing on destruction + finally: + os.remove(my_file) + # END final cleanup diff --git a/util.py b/util.py index 6b8862472..291855630 100644 --- a/util.py +++ b/util.py @@ -1,5 +1,6 @@ import binascii import os +import sys import errno try: @@ -89,3 +90,146 @@ def to_bin_sha(sha): #} END routines + +#{ Utilities + + +class FDStreamWrapper(object): + """A simple wrapper providing the most basic functions on a file descriptor + with the fileobject interface. Cannot use os.fdopen as the resulting stream + takes ownership""" + __slots__ = ("_fd", '_pos') + def __init__(self, fd): + self._fd = fd + self._pos = 0 + + def write(self, data): + self._pos += len(data) + os.write(self._fd, data) + + def read(self, count=0): + if count == 0: + count = os.path.getsize(self._filepath) + # END handle read everything + + bytes = os.read(self._fd, count) + self._pos += len(bytes) + return bytes + + def fileno(self): + return self._fd + + def tell(self): + return self._pos + + +class LockedFD(object): + """This class facilitates a safe read and write operation to a file on disk. + If we write to 'file', we obtain a lock file at 'file.lock' and write to + that instead. If we succeed, the lock file will be renamed to overwrite + the original file. + + When reading, we obtain a lock file, but to prevent other writers from + succeeding while we are reading the file. + + This type handles error correctly in that it will assure a consistent state + on destruction. + + :note: with this setup, parallel reading is not possible""" + __slots__ = ("_filepath", '_fd', '_write') + + def __init__(self, filepath): + """Initialize an instance with the givne filepath""" + self._filepath = filepath + self._fd = None + self._write = None # if True, we write a file + + def __del__(self): + # will do nothing if the file descriptor is already closed + if self._fd is not None: + self.rollback() + + def _lockfilepath(self): + return "%s.lock" % self._filepath + + def open(self, write=False, stream=False): + """Open the file descriptor for reading or writing, both in binary mode. + :param write: if True, the file descriptor will be opened for writing. Other + wise it will be opened read-only. + :param stream: if True, the file descriptor will be wrapped into a simple stream + object which supports only reading or writing + :return: fd to read from or write to. It is still maintained by this instance + and must not be closed directly + :raise IOError: if the lock could not be retrieved + :raise OSError: If the actual file could not be opened for reading + :note: must only be called once""" + if self._write is not None: + raise AssertionError("Called %s multiple times" % self.open) + + self._write = write + + # try to open the lock file + binary = getattr(os, 'O_BINARY', 0) + lockmode = os.O_WRONLY | os.O_CREAT | os.O_EXCL | binary + try: + fd = os.open(self._lockfilepath(), lockmode) + if not write: + os.close(fd) + else: + self._fd = fd + # END handle file descriptor + except OSError: + raise IOError("Lock at %r could not be obtained" % self._lockfilepath()) + # END handle lock retrieval + + # open actual file if required + if self._fd is None: + # we could specify exlusive here, as we obtained the lock anyway + self._fd = os.open(self._filepath, os.O_RDONLY | binary) + # END open descriptor for reading + + if stream: + return FDStreamWrapper(self._fd) + else: + return self._fd + # END handle stream + + def commit(self): + """When done writing, call this function to commit your changes into the + actual file. + The file descriptor will be closed, and the lockfile handled. + :note: can be called multiple times""" + self._end_writing(successful=True) + + def rollback(self): + """Abort your operation without any changes. The file descriptor will be + closed, and the lock released. + :note: can be called multiple times""" + self._end_writing(successful=False) + + def _end_writing(self, successful=True): + """Handle the lock according to the write mode """ + if self._write is None: + raise AssertionError("Cannot end operation if it wasn't started yet") + + if self._fd is None: + return + + os.close(self._fd) + self._fd = None + + lockfile = self._lockfilepath() + if self._write and successful: + # on windows, rename does not silently overwrite the existing one + if sys.platform == "win32": + if os.path.isfile(self._filepath): + os.remove(self._filepath) + # END remove if exists + # END win32 special handling + os.rename(lockfile, self._filepath) + else: + # just delete the file so far, we failed + os.remove(lockfile) + # END successful handling + +#} END utilities From f50643ff166180d3a048ff55422d84e631e831b1 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 15 Jun 2010 01:07:32 +0200 Subject: [PATCH 0011/2375] Added basic frame for packfile implementation and testing, as well as the testing of the corresponding PackedDB. It wants to be filled out now, but the design not yet done either actually --- db/pack.py | 33 ++++++++++++++++ exc.py | 2 + pack.py | 1 + test/db/lib.py | 4 +- test/db/test_pack.py | 12 ++++++ ...fdfa9e156ab73caae3b6da867192221f2089c2.idx | Bin 0 -> 1912 bytes ...dfa9e156ab73caae3b6da867192221f2089c2.pack | Bin 0 -> 51875 bytes test/lib.py | 37 ++++++++++++++++++ test/test_pack.py | 16 ++++++++ 9 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 pack.py create mode 100644 test/db/test_pack.py create mode 100644 test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx create mode 100644 test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.pack create mode 100644 test/test_pack.py diff --git a/db/pack.py b/db/pack.py index e57241a32..a850e0fb2 100644 --- a/db/pack.py +++ b/db/pack.py @@ -4,8 +4,41 @@ ObjectDBR ) +from gitdb.exc import ( + UnsupportedOperation, + ) + __all__ = ('PackedDB', ) class PackedDB(FileDBBase, ObjectDBR): """A database operating on a set of object packs""" + def __init__(self, root_path): + super(PackedDB, self).__init__(root_path) + + + #{ Object DB Read + + def has_object(self, sha): + raise NotImplementedError() + + def info(self, sha): + raise NotImplementedError() + + def stream(self, sha): + raise NotImplementedError() + + #} END object db read + + #{ object db write + + def store(self, istream): + """Storing individual objects is not feasible as a pack is designed to + hold multiple objects. Writing or rewriting packs for single objects is + inefficient""" + raise UnsupportedOperation() + + def store_async(self, reader): + raise NotImplementedError() + + #} END object db write diff --git a/exc.py b/exc.py index 3eaf5777d..482726e3b 100644 --- a/exc.py +++ b/exc.py @@ -12,3 +12,5 @@ class BadObject(ODBError): class BadObjectType(ODBError): """The object had an unsupported type""" +class UnsupportedOperation(ODBError): + """Thrown if the given operation cannot be supported by the object database""" diff --git a/pack.py b/pack.py new file mode 100644 index 000000000..676fa26c5 --- /dev/null +++ b/pack.py @@ -0,0 +1 @@ +"""Contains PackIndex and PackFile implementations""" diff --git a/test/db/lib.py b/test/db/lib.py index 8d61e677b..738eeb851 100644 --- a/test/db/lib.py +++ b/test/db/lib.py @@ -1,6 +1,7 @@ """Base classes for object db testing""" from gitdb.test.lib import ( with_rw_directory, + with_packs, ZippedStoreShaWriter, TestBase ) @@ -16,11 +17,10 @@ from gitdb.typ import str_blob_type from async import IteratorReader - from cStringIO import StringIO -__all__ = ('TestDBBase', 'with_rw_directory' ) +__all__ = ('TestDBBase', 'with_rw_directory', 'with_packs' ) class TestDBBase(TestBase): """Base class providing testing routines on databases""" diff --git a/test/db/test_pack.py b/test/db/test_pack.py new file mode 100644 index 000000000..29b348876 --- /dev/null +++ b/test/db/test_pack.py @@ -0,0 +1,12 @@ +from lib import * +from gitdb.db import PackedDB + +class TestPackDB(TestDBBase): + + @with_rw_directory + @with_packs + def test_writing(self, path): + ldb = PackedDB(path) + # TODO + + diff --git a/test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx b/test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx new file mode 100644 index 0000000000000000000000000000000000000000..fda5969bc69c10781d3159ecfc6a3caf36d3eea9 GIT binary patch literal 1912 zcmexg;-AdGz`z8=t%7h5R~Q zTXcX;mTl)hi_XvCD|Od)tJiK`87aAUf}`>E=V$DUY<600OIVw9x2C82n)#~P2M@Ja zwOIbMP34ktToN=Rxv~G6@XomAwC?=}9jBkO$(>>z`H-WFX~s6!!YzA>qI^uhIo^J| z?vlaQi2geQIj$C4F3k3sz99UGVC2uTnjZyzSJz2M-S_Pckk%}5U!fXnYJ9AH+OGu-(2 zw2i8TzvWXCk`_i)Jiqg$`DTLNnLou=p&UZzJav6maeY%g(W3UP=ufKhMAMBQBe=KE zJ1zE?^+QYJ?e~j*PoA-?_@BJT9S&UL4_P#nPuL6x5;q0p)nH(}Y$K7@A^B4QY zKFoO;LE2$LFBol?K3 zi)vlv$=yb0{+D?ki{h$wQz{2t5R^_?jnqvlONmddNX(5LTPZTs!na$V15Z&z(BqE8Ww(Zh%a!T)|W_!#O7_n1U3oD_JRosc_f1Thc=bDcsLm_cg&T4phZO^m^jPta0JV+A8E zvs$ok?@62+r$yBZ-aJZ?nkyUQ86c_*wSGfbtxfvQ6Xw1C~%USqch}(FGMK33|-WamcqvZ$n$kNsI{a7G*SUdu%VrNl}1Hc#tcwRkVbb{?_%)vi{yF2qOM zdf{c%x}@)?Kdg!$Qg35^ml1fJos3IP!!Qs)_ddm3Akp~SF+x=(7Ercufw4VPvPfJ7 zSAyHOM?h?!-g{#g0SaVW5oM<(`%Ih;Ud3vlRs&(R8Y59gbLCyO0jxn&!02*nQd7>} z*~&4uK#{yEqj$cb7`~0KzQg-%TRObJ8?U@|c)l#-d&qve_R@dm+Semk7rpg_m|(&K zqIuAD84v4UwRt^%f}PVG=3vana@nL!U3DtIPk$JiJ87m=5}F!#oSlrzN&_(%h1cdO ze!3|LQ*)Wziil7U5qyYT{%O;8k|C3UKE8wKLKiOF9nSZi(<&kuBaJm88s;hDpcQ&4 zBWI3AtGxD1nOa7!%g_p@ zm5A%#I@J-wfD*0ZQBdVwAZ}@=QsHgMslWkV-RN?G$75=9!}>fGUv9fl#wTE03MRB< z20E%KC2KpTwp#yMlXt8~1YcbaC)l3D!{}0O-I6C4E?x0w3~lb_R#RwOSW$sbgOGdp z+ujp^mvn>8PYT@^-w<*rdAP1|-jh4Oq-#t0*VitP54%c*{gNJdoSo6nO2jY_2Jm~H zVs5KK*ZkSE%_1TQB7)B#lVq|9v`J~RY#-lxkOe&mo@V&?e#~L&Oa#<(ZjFy79QcdhijCMQ}%?^UqI2&>R{s9L=x^xaohQ{W^; z>m|p7@#v&fWKFNP#pzZH=`A^i=NiilZ|9r}Ji{xFm1J^KV*U!97T8F-wXjloI-F%(7j`HDw31!3BkWRgjXh~P#9KjI~M>5O%fl4d~v z-a+lwh1+}2;k3#OCbHs4)~KWo5_P~REhZPx#DSgm)@YJu5ErVP8+cF34Mt0^$@L}? zp;qJ)C(SkvtL;p12Y=&3Fb*j>XK)CNiUUc~Yfmcd`xxaRxIQ`*w6w8Qcv_yK?Gd=+0p zp?x!v8+e?ZjLk{|F%(Akd5XKM3Zwa-q=*P^MDQ6TxpSuz+ewBr#rpORMHj9Fx8FJ6 zX_W{_DveS}BpzKr8r7)P7}k+1OV$}Fqp?D=B~;1{wD3KWLOXb^dgDoO=K`1BMXOCO zqK?>06Mp<*Wf%;1(P>FmU@rzQxe|OF6_1g)RL*DdW5$q=(5KD|Nk z1-uo-S5#4>Gea;rE>bhmO5PZBP6nlkZPeKkqQrI4j)FL_a~+`NYHXA`D`!^|B_~AB zoc(GwW@VL?DIldk-m2({4J|oZ<6UGWLqMrxNQ-q|C7Z}=hXQY7YaL#1wKRB!7u>Nn zc(|7FF}Ob+Ew!&Rwfzy4b~-L|gok_Sr4-ZM%b3)^(&CN#l_7Pkw83e|QpZV%JNQ)> z0kDm6oaqAi*-D0W-d5@ru)=JsWfXib-<;uSljkme0FabvD47{}oSl%tN(3{aj?RW98hyMsGaDr~(tK7+v%0citJqs-im09PW3bK%ytcJec)sRT;1Qm1!(8C*oZ4IC`mh&YK8{qjdl=QMoSB@I zFi0z<=<1eQr~Z`|FI>+IzG9{o4wY^qA+5I67_ ze-Z%S){#zt?5~KOrT1_ZU#TI22%jBzoSjh1PQx$|y!$Iw zJ;9-s^K4QO0&ziH`GU2*PF5s#v0hrxFK$<(d@h=5kb)zS9x1%qnozzeQhjh ztSBEXc9khx({*jRR|_Tz0!?o^S9QLn+84d)E893**L{ViDE7KV>k3_%M&T-BOz^x0 zj_?RiIAe%#JFpyu()|)meBaqP-$79}W#86a-@sPywN@FOSu*Qi-)a!|MWfQ-Z|^< z{LXz8_wH3wQ4v#cN0Z@tm0pZcE{of zNZ_cu9H)Tl3HE+nb)_a_voEL=?LRc-1xI7N;CLXx(cR|99ea0Owx!kr;LG#-Qa%|} zbJ)!M)G^be0Pc6t5!XbK!wD|dS8GNNJa-cJ&s5n9{t?r|A;?}xEcj+<92U?&YZL9# zezA(=zSAQ08WU{zx8p&us(q@eVn>gigjwlZoH%A?3OlNA3bb|HO+!q-?!0fG#1C9b z(jWY_FPZw(W2Prg>KGdXrRK)*pMU;0_RvDxwIw-|{gd@48Zm);BHhp!B+wFnDO6TQ z2gXr}#3ue6%3!-{LSE@@+$SdX7a-52N9>y zKe;sI>VrlgL6d7Fa<*q=Goq6lEu03}U%a^B^?J2I0mD5p%$U7f-1Ee@6tj@R*ab*? z6ley6h7-YR_Q?f@#4`Q)GOVVbs%_so;S$(#cZFbZ2#{c>$(lm!v+t8DRWIn6*GLw1 zM+(sh0f9pMAYmjp0fcXRF<;(PoV~I^*++Sd?F1r9cYiel3_#;S*tpwV?~An;lXT@y z`#dR?!>!~kpH@Q<5uXj+@+xrde6c5Awr{dbCMfokI|D)iERmHbT3Fqg<5<27X2kBF z+0Vx&Mnm8T2CK1r@w8!d|+Ms}Qzvs7dXUW@N$x-I*xOZ9ghurl&G=sspfVI2`W{cU@zi8Z>j{E46 zQ9)AL7bi?FP{4>o>di}tQhB^VQ)<7~==w+g_94qt1Oy0A7!d_m1gw>wRbCp%bojQ; zJM8k^YE~Yrft|E!2yiR{8fL6NwCryTd@i&-T@ad{uz0hz|8VeXg95&{Z^<_H5i1)w zqv5Dg@O|R9tzkaRkkJ?t8ViHFx`LIx!Jb+_=QD9+^G^Abh1UJKoPDbPj1Y^(fzuc2 z-1)=bn>{VRUUR>8j3bJjd3NxM_zgyl$7B3KTC-1+<$;(&K<|HWq`>y>g`_cGFz zLBp#mlJcSI?82w$M?pXaPk{@w`3nZT+!rty3W>oZp%G#yj=280l0)Kl;rm^gla7li zr9JwLWiW6rsCqK5?*VOI%R!Hv52aWuextZg7hMLiWm+a>}54!Jj zHdkh}WUMO&syEq2KzLo zC2n-9XiKIfqedaYkwBdSm);!)5@qI$3OL`-?0vJ85w!1Wm;bc4C!2wre#IR8-> zVH+9CCJu{COKqytmaZ;l_FJnIj!c4~v93rzu*~gS-?@LmEM8kWU6}YZUG1)W@?zKj zDFfwT5qlk zCB-ckYi~b;O1*DM@`=`J+SR?5r?#X2+fG82N!_6yZLYAdOm|fk3-#F6;GkS;cxPG1 zk-WF`ADR`WOc9%BI{ z34wyaNH`n@ETH*fCgUQW`Da^pz>a*o=GU-*6vjnkxd0xH@C3a}g6h;!iOiA%lD}(3 zl3aG>?rzgv%R>vDL3L2(famGTq(t6J@^h?Fup9wK>P3QiAqnnCm=_Tm2`LuZKw+`T z4YJ$V2eK!sZTB}dImRM50t^WUUkIFoV2N9IwD{2n;&OiFa+L_1b0~Pq^_wu3AX47E z`qC!l(=94XMVxc?AtzZCI}8my7^FM2iw7UN@jA_vJ#%zlRH0Fz_u`hs?eUC`fP{8u zpDowh-aTwpcyl)ezyCtKo7ugi5)2YrJ3;w*^tRuvT~olLY+Fwrg(H{OW&UPdw$NB` zqPapFTi5xzZzZy9C3iV5ND2g--&wHzBFKO-IH}ij%LUqR4??XT$z!J;*?R$@FU&AKunDtcaOE=jiHO!2tJYTC2NS{2@4SVcycuUU* zA=@FXcKEA5v%!qiliKhbL*p0HV|S7IZbr-JE4>!aek1L~XnmmdQj9suz5C^#c;h@a z7mjvBL4JlSgTsP5H~7ksUY{9RQ^B-rgQKhOOV$?ij~i~@>toQ+azM8p2WV{Cq4yKz zk}S-kXS;7Y@#r1f?6pdOlNRC|g`6LM!CQ%L;L%9t+IyO)kb19@krT*RB&84%ikeEV zkFr+@O7gU7asyg-Ht~viM!j0A1W3=H%B>k1Ns&xfF=&kEQV?W;FQhP1G7(y#4(5G7 z()2MRO0M6{BNmX)()`Q{-okNNm<-YWv6HF>uNOXmP)5fLd*uYqR{NKOJGwX*w^?W&DGo z|3I5F7wBYgDroCVCDo_K<7uz`6CD_vnSdlBp=n7RV3z1SZ`!A4yTl=W;^%}&q}`8y zs1FQ-CPLaMy+VNlH}=RXx3qPs=J)ex%!1Gw8V@H>=CFQg4pLtvJgd;P|K^ygP*(TV z#NmHAlCtLsY|FlTHdN*$FUzT!+7nEcQiXfl8Lb!StP>nc7J|4+idmjT3Qw|(e{-^k zVsJzx)|J+G`}%kHg}Tml+uCLF3Em5w_Bw3i$;eUQuDjfOCWZ&kwTj*N@+~4bhZFrF zQYrZ`%fH(9Z`7;GeFv-l{+v+AdM>kjmc~pTH{%)S7^T4SHdlo-uPxtkXOYD3D2Vhp zj=25xXCR{{5zu(>U`*+A(f48wC)hu5r(d4R(y0ry&#PBqoR36*FBcpJji5fE?t-o3 zV~xp=pBhf6rK)$D`sFogF_a*|pfe#0k=z-B~urFM;Gw=?6iN%ce| z0UTy9>dqyn)m4w)5PZSY<9Wvom{}Nh$aB( zRh2{S`a^?P+j=Eq~E_n$eeA}B!U z{%BBei*H=Z)MD1UWb3Uzl|vU-h!^-MB<+M?hj=J5>V4&m1W#bK#cY7~)}IODf29{3 zT+b*gFv*Vu%&}yQ7Jd*t@@{j^0WHrhaV-lua&(pwY%O+v=-+j^s`R0#q;2?hp$wEg zchPEt0w(9}Eh92>adOxDl`Fe8?+-Ym6Sd_>QR3Ux!^zJ^AZ@iL9u-v2iBBb~wSk zB;n|TecH5F$3lr*fW@bzGvnBjl5WjXZ@d6mB_)0K>ECLoTh1{NZ=He>nfykwaq$Gw zgY)2>D$EMPL*wQ4)a4G=eBoUxGx{MLH@$Mr*6yQac@RXh7cKTQF|W7(93`3l>4N57 z^YwCJX1zs+|6wRV#;{BF>M?|6fqbt*<8al9_rfx?NFPD+$3r!p9xx8}?J~4N&Txe+ z6$>|fE6UnHC9ZHVZh(>l!nPmX3_iLwnS8@&Bqm-(i`ne9STU5qV)(n^Z3E*IqW5FG zB=3{a!^)-dEXR1n zY58wG3Hi;b_WsKB4uggcPMoA4_N7U^1)4Fr`I4z-p|9fqWQs_cgUi(oyKhRw|UB`%5CFcelpDk+LA9#`AUB^a2IA35K8UZ?Zkh^rkya zdV9s?i~HV>(+RL0z#|D5KSFDI+s42`pSQoSY>HtPDn9qQJ|O&-JENuj*a7_S<5D)2 z(Mc&-vhlog@;W)5ct(pOxKdJb62s~i?XQ`9xU2>TcX!?{4|Sg#VzhWP!V~TX_1n82 zp$Wi6$+_bis0~(M#8VsPP4gHv0f}8s;UOMezcf2-a)+(7JeT7`kcQ}!-m z{)M3gt|4ysqLAQ=eC46fJlR(i^oH-QC#PAe1u0q!ONr(i6<}Lmv+ke+C_stBV~={# z?wePcboehhbQQb_IZNA%k*;VGWyv%-lEUWMVAHdI+$%AsmUoki&nemw4GB(LXu_?3 zZ^r+sIF1PsFgnMBOd34uk6FJ$e9#0O7P=Dwp~FC^pSH#XhvihvFU%uDp6T@U+%)Ki zL^vV5p!0@yjH%`4>Ig+WV_%r+`vc~7zxqZP6}Y<<9(f|r7vee7ro8b++JnHx+~2ev zkdl`{dr|W;r~ic6W`FcIER>%&pAfyN^BX>IMuUITD=6SnN2L^eFlDQW^elIMVunY? z8+Y1mjT_pJj9=Ni07Oq#6**T;Y2JQeqh?%^4r>2N8(NLa36BWrDE?E;9*5+-!{Bw^ z2CCvy;S2Nv1pw!*o{*pP*W5}w%@MXcOJsjNaXWn#VBkhf+2WaIYl4ijKS7 z%xyvV9lNyW3OC#Fn=Vr{jwV6rZ5TMgNMJbx35tF2NCF1XP?)=_6|`sk!1DsE9>0>E zcdw5ReIYNX=3PsJ%)O@9nfOL`pJ6IJ>tI-u!%mN&U~0K3DRn0P8tZq&4+%uHjCxzP_HG9Xu7o^XS%$l`*vmAh^6;!N?>u25gP~;a@kb z{DykLEE^$TAHy0W9T$A z385t3N`fBzz1Bltq`U%=ehry^0)m){H(I`2Spt(F)#0(5O*h|0Um;*diFppJWWUE z>u_-O&%GvDDs(l1!BsF4gAq@x%dID6c1U=#^q zjzduaVHQUtgPU7r7KSA`A9!Kq=rA=qgCOC+b3NpDP1f_roiuWkCReWfqK{sD?M{tqdQQerYUOxgH`60z z+aS4jPpW+{)=<%89sLyZrmQQ=V-?g%o*6~qro7GDx{Fm!qV*1AMn3+c(*z`xYg;|r z!BP_4EurFN{&wr{X@5l-z2>fwkUI8HDF|XKEE`#BFDtM)$%JUI1aI0H%agYXV$fL6 zjWKA&~qd#p2D zR)6${yZc>^CYi1Dj_l%vb0sei(6Se5PbSS17ISO&aQj>lH>=scan;-UV3%LB_nTCV zvi<1A;WMOE@jnS!)7M8Y(K&GP!N3`f^Ih(STYi~!vh2;T7$zQUejowJLWg;y&p zgC`993kb>&YKREH$1~w}WEFgh;(KdyA!3DquLU64n8PMN6whd+x7U$_1~6}il4y4{ z?gTg?2*Pr)ha2XnAFr40*$_#5Gn@E{UZ8;K@AWR_>Jz-Prt@J2<67{tSQ0HtMuA;N zO;mtY#aVW-ZOnbful7UXkeaTPUn^#4kPd=kdrR$y^0-rR&x{^Bc43cPX!I$prWYsx z{bm2rqOcu*9`IJ49Qhnl@O$x&HBBtv9mpKsH@Kbi^7calT<;3q%1w$eOq%op1z42` zXyfKBd7RQ~q@GS8g{P0x zW95T$U)b14e>}a^RQ){H5lt^pfU)WIm(z8_-rPU>BEpols^3(V(}G>J>vF($eZ0o; z)>Mts(V2$}njxZ76^CPKxh%9798a05AX7iOAh2V4cv7^JBi>s5-0hAB*J;0w67|#4 zD=GkK-v3YxS>?H4`1#wc+os!vRj3Yw^g&{YC=wD4otEZz3nVP;`H&-iedN*k=)19& zUqa{CfGB{8c>nv9d~{_jyS8{nXQNuC!^S&t4**azOGX-VY|jD z4v$((qJUP1GL`}B**7v7=iz!|8MA8PCA9A!FqoCA0+^>4ChvU-OxftC&0@ZuXd{~f5;va8*k^z`5E;*WMjLv z`-*a>L*TMRpajEtYud;CQWw!a8kN2-RXP2RhI#w03-R#+uaHB+!Oryky51=vL(+SzFR?1 z;0!$xYTC`MJ;B&^jghevo|Q_9^1Ci(KhL2-`r95wvAa%w*qoL(4uWSMR9N$0F};Rd z+SWfsg3jia-Z6?7FuvmR&@Ca=!kcz7^735H z{bd$Na|(_4&8p2vYWCmlbrf^!rCr}r?sKT?5TMu=6P1_=gEw%M|ItWO?lWz_LS-wf z*<#GS@tfWS(MfOasK#{&%^Q%Xs#Y5m5YfeXG`j}ZoUM$nF|{`JPu%;tnQACGTuLeo ztV6gUCFKTda0@}gt~_X znAMhYWpw87?+40>bFfkktqo_lMm)OH(%1D5LjlJl8}sowgi;}mr2W-Hbz3enpRHZZ zd}tl)n|8!*VET3<|Gk62HD01SK3_L|O^O1d&82g$5+tW12E&Ha3WhVo`%@O_DJ8!O zR!I_>?>O*2qk^@pug$x8xAj}uAwfC^)^sOS*=W}dpZ0FP_?(GnzuvVCS(&W}cgnIl zDcBtO(pk4{%&RPXLU>9!)nJ>#3V~uj93J|z4{DTbLlbPDd!sB`^d!#hvX<)+LG7qD zDGHc~&uF}G*`&0@W!NhGg5FZ+nNph-3QZ(h`k_~W?}h2(ySsM1Z2j|Q!u5Wh!*KN~ zh=x{MuE{qWJTtsRO{|`&1b75C?o3pgVo=ZvT5plUAAj&;Tqf(CZxB0Ai2x?|;A|XP}$fwX@tEty~sQg(?_*}0&SDwheJVu2A;3CE*y6sJZhFu%~?8>o|@4eXR zNLAkC<%`4f(OZnGJ-zY>_bVEuBJ3we9G2&^E@yl{34151^ zh~4o5-T=cjAPOMWZghPS|EVLuwqfXC=;L2cwoB^#g;1+XhS^VL*X|27l1;2{Z)Zo! z_Ma4?7bw6t&@L#uJZ4%;?|vDx+Pn~F(W|Bv0Uf|#;HnONMw8N znJ@3vhBK=mbYa@8C3XH0e1lV6T71;5yvi20Q|ne66yWeocSCU6+55#En9HeSHZuHd z{O?x`3QvpjMu@f~MAKo-0r-H-02+%cnV^F^5^VnT9EnowiX3kI{0(<*!GjZZ}H`DG<-TA z&~j#gd4)XH%X>UANkSpKmXq~u z#C(lsh239}P;=&EJ8CB+< zIG3635MW~s&4Ho3%W}U*B#ZuX+xm_z_-)5W-zoL`i5ecEj0y#`!SWqMxGFZz*vUw{ zFdgK1=DO?NigE`R7fOK6BUF@X-Msg*@%zVfgXZE26o z7ZA%1lq#l01Vj?Sg$yP8vjsHkq$5k?2`6VaihgPz!XH}3)!OPnb324ys{?8|UdS8FA zp=eb8*z}N7}9rq3s8x20w0Td9x`G}3{NO9D$Hg1_u zZ0m$BvW~c{04P1L;*NJr-o&3Kv5qL@>_4>MM&YnN_3=nAa7BW?)fd_&^TM<+?Eo_H zh*jXlufB~Hf*Q0+pqvW= z?^MUs@;o=m%_s$9KG{gnJL+}S-9grwB>wO#liilDuSVCtLaWP~tzy)e=Am|GRcddK z6X(6r+?eE7!%LkT~@2I!Rx`9f>7?V-*K| zSQ7c(=bcMy5f&EGJYQhC&L#Yp(G0y^eNf4)LWTQvbndP>c=cFqYhqJYgD)$jJ0ylD;c(mr9{e{WP{(r9i~ zb$=(LZl{E4_|^@_4ft!HeKM~{c07u0pivZMtEauA64=C@gs**XBc(reXl?KKhoJyn9`++nNl{muN?bK(2k#bDD(u@z$H0ng zi`XZuvR&11TK^TePwi4E@6qz77bsxQ&uwO*srBOP=PN3-zNa{d$??z<0%R;2oYhF^ zt_(@Zy<1px8%c@b5kbO6IWvi={-Ot>$Sam|_@QoI4{nqNwU6<+3+(6}Dsn?jCO#cc zUkzz9fUr40Q1Cb}ittp`n^?hxZtC<=TT7yVrj$uDZG4^ZM;UbmtGTxy_CM&LrJ|_c z*-(=@>Rk^M!q_J3JwilAj}?<0+Ea&U9|@3&@a4}cbF(Z$%4D<3J(%|X;mzjr6*L!I zAxHwXv#c$W1~iYILt8vfbk1+#_H>rw3}jR&pi)2}ZmQf>YoyKkLA`VtcWk2}il#_z z>R>&cc#oX z65_Sz67;#B>(!U?SsUJzVb-qe4WojU6dX?nt3ta+UZBb}p?c^QA`*-0CENE#;UjiJzJTq!b`GIoQK09Fl+j`DN`?~h9_2X6$c(`@K z5u9AnP&>BRop9dy+1}RO%pYBTI=*M-MgnIYXyNd@!_a7O1^Z2XX7Wvc%2T~kW zY5z{iev`-$Qy-N);i>YKeX{CM9ztY;i)ln`>pu(yqzxYTEv=Orw$rsfyDgWad-$LZ z?ULP(`VBq_NpM?U44B5v3O5IhtNSIU)pY9paeK@5RP6s?6kusBuaVC6T^V8dTQFZT z4p$!DI=H;CQ7pj2Y5n|%wcM$(O?TIE6lHxF5*tGQ56w1ALgxg^S9qKOM*z70_;2)Y zu+k>8_9l`E6ik<(SL6{{`F4Exa8A{(7#iPAjkBCElmZuNa{%U@;+wM3)Wruj-I z%#bO0d@gU=e>_d|8XiZ4Bg@_imlU99fqT-ibdXUFD4?TL$ULFaWU_-hAbhyFftL?S zQId<7#0CIGSYCl(o;ew+GJN~;>9YlX7tET060AJ$?NfzA@fg5a!eB+2I4$i=%Da+n zNwDov{YYtmS@;)vQ{jp=s?N1R#-Vp5YSs2A>gwC(lpz!}AxkNV5-GVze@t>_s^HLJ z73~Ev?CKyk11ZcU#tj&TOIFsgB%v79dL3fzXM(mCmKddg zCkT|ili<3D*G_@@9@_5BabuqW66>M>M~o3TUCKRAb3{dmluTBaFq%5|wU_<$6meVk zTH%bk)`-}gV03xm<9?~mPoR;HZNvjcI8_MKv7^_Tai#Mk`n^Tlbq8%b3-)xndr^&W z98qxdJdqW9#01w>plrGh@_FhwlCK2&h0u0e=~&KyF|XNM=!!mB^_@+e_okp%oRVhe z_bqp;0opdJkk`%D_H?l1u=Y1$qyz5yZ18JtwGyYEh9XX@zsPO|>eDRNiaI61nKLb1 zHn58s@@OqC$74$7z!@c;*YPX@mo{54&!abw*=mjF(oJUXxSZVH)=lq%SMB!0as(zy zcHIK|GGWq{ugt;O1qUa~`NtA!!C%vLUjC)^3V582oC`QqUHktjL{U1SNK&FQm>DyO za;W4Gi4sYSnZYn-GzW*Iq=*tJ=Y$A_L}$^7l!{Uk)ss?0PB|Bn|K58JdwHJscU}MI zect!2>-v7~wf9>0y4St#wf10jbcnjTDq3DN4vE8I(LA^uDqBP`x!T+%G-I<^tDN_Z zZF}tw=wPg{sFLQzV6vzpp)aoC>WIx6l?3BdhOxjr|tW%{E&^nn$0u_^E$AfKSm1k2WkYygAi02`Tgl1Qn8( z7mMme;!rUxDw|8^u(jCUB8_)%yM|uOD0leg{qC@DFZqEvLwC? zdfh;(hd_AD-a*}()p~*zaYQUPBS-Um)+G^s0Z6OXhQWF|?zS#FjO^rxGPk&2 zm&EG>D##>;9l(H)jA9G~A0i`#G<4=KgUeuB>YG>m4msQaw z3Q-DW_HX{w>*_%NpfZtw_-}o3-z_$(Es&bGl9Rk}m9^(zen-M0e-el6jqzhrsIWn9 zPM^jG%i&K|cf}{lQqOm|uI2Uv4YQ~u3Wmd?QZarQd>|8)doZfE-;o6tw6SbQPV!-q=dXpu$!#uf}@?!R#= z?ZqWR!h3~37Tl4?{D4BJ-&VauFpeFvw#K7 zfEJHICj%^33S6RfU7>!K_vz@aVeRc_)3r0&0J$!P%LrsaGsuHyeWh8^?x@SjzRpUw zBhIR4N@12&jskK5h7HXi5*;xu^?TRVjp;4#XVz#8jhSavnr!&zGoU46D3C+L!i&x0 zaTjW?Kl178wagi=UbBBpO#u~RbucUvIT(INSlqTJ!=w#ozj@~mE3w6?*F>|<98W{V zI2{a`MfZe-wyc|2lY4}Z$Mb5~y_Y-oMKhE>0YWT>%wz;mS!@~;@z=Pj^MNm)$ek)a zJE!kggmY-oSF0RAjzjE1uD~GqArC#!`ZkJ|z1OF-{-%HTwz(QttH;FwJ)Wm0`N7(P zUe?YThLJhamgjFjE}=cEKPejlXm$Bo7TKE?fEa&TkK4rg@p%U}_e9#4=bsO?{WG%z z1@Jl;HZ+F*Y=06Nk=K^wydd2-ycs`}K)JSp<+H6J=@cs0)q!RRi%rEa{W;LfB4blt zv*KrROTbSDtw*n$#6B$UOeTn+1VIM_yAwN@&7mSM5Urv4>cCR=+narod(DWYDmK+K zY5+L_<3SB(GAI~!upgbq@I{)CW{!AWczf9164QLHKINKAF+1c6$`Ij);&@}Y92(DC z99}Iy^|`c`pDT{upEr3fz_vI75Ox}b<3s9-k6RB*FR074o4Po%eQDD!7sFlv!cBv?LTsPO z%W9p^vo76!7}cPtQG_ul{6`VM@BjwAmnSUc&pr)6 zy8mh`5SbPO=d9LRjYm%|Fne88TlypQ`=uB^03rYov@}tXId?2|zW4gz)FZi6Q=h26 zr_Wqx1vvl=5kn?%FoFQoe0y-J;-Oi{(jRZ*x;Gsk3F}-&0>pY4ZxY)Z!w;A6LXpz8 z<$)GQW2@BXop0(e#v&4>>407zcpxS;U+KIK8~ZXN;-jaU*fo&}wfScemt(fb)ooRHmR#Dn){XE*ru&LehzCr+YNix&V z4_YC4?}ARo$EMpy0{+arzH*zxy2-kEnz7H*rGy*~;y7HW2^!Duy}s++J|cR$_4aE_ zp?{re^M;Z(GocudxUxSJj%}VaFIa!{_8Jq}I_JhsC*4&dV`%B3vbz!iJr=|ECb6g# z1cUW0W^a_vsBAIabN{o^5jkRbJ=gXopvUp-1A+6Dj>{&NTg>R(L!C1|FIoAwEVip1 z0PvVV64^Hxcp^zr`6m_Sq*)OLL+P({U(f@SZL|TaQ!K~%m{JVop(2kxq0?H zbiY#kaZ!tq zx51)%$R+4ZHZ&8MP^g0C|74hG?%HjWqAa(}R=>ks{_*@_bgt>bQI<{ig@xIxal=Qy zN<^9!Naa>&OnzCWnouSb5|BX+;01A5ZP7O?@H}PF!Hsutdkl>egMas!HUnxbCXmSz zdhux9Z-Wb`+NuKgU8W9D>fg*;cmEt9#-XNp{|osgjJ1o2hj}n zk(ZsHmEdaJ27db+FE8~_MFD|8YYd9Ws_p5LDrQVsIWe=4xU6^p-*-_Q^sI5?D( zy{TkhCYJ*RCFqYBG6Z@fj=k}t>u%*sIP%ECja+%L!a2ENH2{eHKf#m&cIV2oySlSd z)HZ&8?fAA!&H5_<;{FYCVaT7T6vj}zs<`@y)KR@{4&9br+86-B{~Pl2h57^rXI%W_ zO3XSXYhI?mEjW`FVDdrQ765hs4MHolKg7-+6cEwa-HkkKhO06 zNFRWZI0-WwrA}N|Ub4Bcv;D~4c`H)4dd%@u02l*+fp$AIh9?q|hAJ1U96zMKSmOS| zo6qkycAREP$D-@F@BrxIvuRMNz_UahVW5-wD?Qsm~Fg$fD zGRzMk@Y6a2+Np4PYvp84|J6e!f3Akgkfvm_wJ^N}roI5Ci(v=SpuG(;w)4yZ#Qp5i(*aJkALAFpZ zVxy#$A(g6dbIMjL!Kq`$PUf~GaTI|<7QDrSMiZKubZCTl>FVu;%VH!y49>%yY8rca zV7@}W?hf=duxLc*d8`MC0;hg3h#8t}IXOzrzKQ)r4Drv;_v+hF0f1Nm$a7g1mG@Ve zq#QXmnL=1_fA|>XnPWW@_NtdFz71;+793Fr+r&>N zc?AKCAC1k10vF8VS0{8dgdH7!eR88iTg#w#qiw=UArG(CBnkzCK4`oOSHdvWyx~OV zuhlDFgjEbabVvo{SU`^91p8CT-Xw+>LTbhNud)}rXY(}HYf!z@TfepLiVHyE5EA+? zi|WVZjf2mT9TMBZ9q-M&Eau*=_%2yYW3V3}@CZR;aG)d_mOJIFNmAasIzw^hE~k&t z(iu8>JGKhta4JEDGAJhWuRom{Kt-|-L(wZ*Hm&w=4DW|~HI(K)pCs*z5+Hau`qJ6F ztpkS1@uu>EeB>JCqp4=!kF6Vcb7LOn@WExLtTF)x`)>wA4ILj+~9v zKC|tw$F-`N9~(>S02YU`6ewB?-0HYkiLIik9pS(M(PvAm&y@~pmdBzL7I;cu8l4U$ zKhTV%dD5uJ{4WaQ0GP^RF`B7P3aAHH|Lg^E4%+48S->W; z-!r0b-l?Gk7TzzDec^-@v2Uugr0D9iNb@}9z$9_?ezQwsK2L;dcVS=t|zezqEr zV);@yFXQkxCB=E(&d197TX78*W>rP0OQS1fZmq&NZq@B)DCOGC07%4Wuf>sNcdfB3gBs~!f)T-zJ*8qn(s^l)%vk;sCD zX2+Z zyZze%h={%nn@!@qPQ;&sR=;1~yE*%CcEUAIxmIvgY6yVn2@n#rG9!b%Cbc74Z)oY3 zA78u9xY3G426o#S1AxA;4KAHS!$4~n(oCynV^F8(`sV!ydRnk^N^a$fRAvK|fpBEt zojWUl-`~jiuL+gg8Bn%Sq4ebNx|-!%Ow*m@ARB!;FoHirUQDRmv}RoNJ=Vol4}<-_>(3vG&~9IrEgU4?YIZ% zb^r5(&_qWv%)Z(5+R00}C#v`cr{S|3(;Eskg#|P`fw!q(@izG%K31&FJm-J$oAI7Y zYInx|F6w)<3XsCR0Bwjkd;;T7U)Oh>zy++&nz*ubmFtzb*{+eK)c{7AhC!PS4$>X%%65A)%VzY1ZtES#iEGcy zvL$H=DIy$KkOE>rY5A5dJ_?r}RpA_I4oS7^s5zH~GCf|>giNIFc@L8E_Plp8!(?e* zOm_Qz{6iw3!wNGPV3K=GQd>`L+B#p}@1v6HPw|lB8L4XlhLAP4pRRiA$cCNME&mWzUvxA7Ck{zZr*P1t(ewAr2(X*Vf7jO zk`Am_qi;(V-BOV0+#cIn@?o3Dkz4QEc?TJYTx3*k=FY4)ubY$1<&OBj{6AM z!(#OH2?iLf7AJ@!qF=ex=kVpcO*7|tPx`%HeJ-6MAvsNpv@J~9vAKbBbj|4*jcYSS z?pB8EpJd2%Pm^;wp8AMkH+%8A8S8Q`Gw!r^v)8Pve|xF$IH1H~_H&sWUKn)p7GI?n zrq?Yk|Lg0S^G>}=ayL1E6c2CFcpKzhi+)+_6mb5o8(j2bURv|;2aSL>K&i`9qK`Xt z$nZ&z-S@DodTW(rsiy0nOBmJ)^l*=1kOM3@Ad`@u_4{NV@2bALe2Iee#kc-EKz*4$ggWQ?KFlq`|`5HRq|rfLu>7Qk(!@66gL&Wl>|X>%I)RlPBHP zPo4gGwifVCEZ-rZypk-KXfCop0&*s$cWoaWUnF8n(_NqOL>D0Vz7WVpHcH4r!iB%s z#Y$_3B6fB?kDK}R(btY+aVUV}y8<-`ith~GL*=_`j;(yZX9q>k;pOIW>MIkUyXnG? z$LWZqu0O7L_$ai6dZVFy&};>5yGm>aU=cg5<1q}bp9i$uA@R-s91i>Z)cHItE5z!` zgtocZdA%P1i4$~>(DTK7cSYpqwVm`4kj1avk2N2k4BMU@@O9@XTRQFdKdPnKxtdvm- zns8j^4{&^sK(Y^Bzr!0vs9l(C`}Q^NY1E|LQ(Q_`Rm8yc)Pw|OfW-@g9F5B0y_a&S zW%TDcQyp*T&vy^?`rvc=(ZmQq@O>hX$)X_Lw?*>jpMts#6>(QejY7V>!wx?)9{}V8 z!Q`j$j_f+NcABYUM$WoL8VA+>F~lyXsGbDm#OY%NpV~t&1rHev-`zA2VQH>YJ+JbD z_vce}TOM9BQv_f^lUw*C$R@Dgpr*&yO9DUqijkn|_+V zzAUYLtSa}%^&78^#7)Uq zS>I?5H}L)XYpabbU=GVS$6zv$fb?zi1`(SX^vKB|qdVWf)f=mNc?F^7up%z)d5Hm6 zv4Igw)^uM=KmVqIzHT{S4#zi#W-E)6lk82a9DQ;w*rqTW^K>S3j|Bq&o)4gIdS%Uh}PbNjx1i+X?K{XujL3`D{$@kLJ;yiYnwR!}?sJHp50@Xw{FO{~yE$RyHTerx*1;P3G9KBA7XV+NFD~vO&?NZI*eUW z&~vJc8?}g*QG8q8nCht6ln4-lF{Lsn{Gzhw_zq{~+kJ7e+RY4|cB{b;8*^jz>td}17f}Ew7-WC`f#%V-cfC^VDvQ-DD*n7QR#iP**ZCBX3#K_7b&w&vIp>eflcEj;W9?cTpJ$_xurk0E!_Sh_pTQ4QxgCR z#-8oX;txuS>F$2ROoz89qM~KmX$k0D`d(WMf$Tg?PMDYQtfb#u>xQqg^%Y z{?zRwXRHGV0!j#GwBc4oieh$yy3Omt=!9btQ!#CyKLP|192Hpq@>YK4mzw7;t1q`& ztk~r^SfFcL2IvLD&W2MRPh=9U51-L>c7EwIQKu_1^Ibor*tt)31B77Q1x1QDpDv4L z^A*L0Y%wy${^_cVS-HOEsn_f)@-pTq$Q` zkXktqWe<*HJdRHtq|bXgQQ66Sr&|6@^d$fbhToIqOU00&6`IZArAY~TMwhcHXK$un z3X1)?p~)Fq1uy`I&V4^7KaDP5{@0NH*K)qzb<4AVwG4YxPoJ7X34#v)PFQ%7yS?tG zn$^j<%f4it^CuE+JR1gN&;$9Q<-&FGm_QBVd&UpfhMxC*?m5@=?42s17>87E1!bJP ziWw(%&)>bKA=X+o=8bcd%$(8RfE2#(0U71re=u=Lo*&P>@Nk@a`J>L0(!yEv$F_hN zhvDm#6E$;PmJgVVh&nW>3@lSToUJ|!(BUzDP}b&0LQ1u1p^BS5b@egv8a{Lh&1V%K z<}?@sT3vq1K||JZv0ryP?TiD&2TY82)jzOFe{CMW0TmN)a4!HiWkzQ{D#g>SM55vY z_59B5m~}9{vPclAA+<>F$dmTvBVW|N)=Rg>So?^&&*~Od3J7pzfkR>mk0{)ZmB!`v z52T)UdHP4pk#$>ykS_^{v4RVE$c;(lD8v_guEAqBe)+7%;@0fBP3? z^~Ha_=GJx^KYIqtVs<5f;CM|4uSRWh?+C?)OkNE!33hV6k+m}SPWnPXj_1kAOcsla zj0k*m1HG>xpWT6byHLuTrdYao2-)R62jXR6WD`OjZ9xv<}y=`HD-MeqY z!%X7*op~{Uk^nstasY_oSK>-Ykyghyk$pP2nZun^s}oEmpf4*2pA@3>D;(Pmtmde>7}w!l@Q!$-b8eA%JXp_2fE=P|-#d;#X5?#cR-Hi^#RwP&Lp9u z)0}xz@d~l%{nbB_YwaSvtgbk1eGfozp_4}T6`pd+>gBKe%i%ItEi}&x93JwYzunuZ_YyS5?$p z6uY1NZm~#b>s!(`UqFf6UK5nmDx+~Le3#Wn8&*|iUm?Ax{Tn?J|_YCM005HEuD8JtLUYh#h%7pd!C)Ned}wVE8O59kSeJFW2aI!8ySX1D$kN#~&2crf_U_6XJOcEZBLVk+k_b`R-nZWEi(YX@c>{45Lw<-ziP@?xr5uoKDbL}=a}Bo zCKSNyfb$3=tlQ-!-3eAaSg^Tx-D^LZe}4Q>_9=LohQE7&DJ+IUrTU}ABH@rwo8NLO zo)ql4ap8&cSB)YqQj@Y6+M2Eo@_mO;J)HfDF29uQ7`B~M#N0jWlM{DwJE|t|)k625 zOT(Gl&+u*O#-5tl`m1^DQROlLBn^b}f@p+8bd3@(zN^hvylw6tv5Um{|n z{b5tkvl~bMvH%Rr!(io#t&VKPt4lI`?8XXLhF!Yx;NgSe7CrD(}3c4G5MwFkmv~?3!0ly#>QVem1N`HX)@}%JAP$F-#2S>Bj(&J2N?b{ zK{JQU%Q2VSeAs9|e$t$J^IOtU9ObJM(M1E$3!V&c6!ma7H|+D3vR~rf?AjGwaQwK& zwKD*ri}BzxD7@XprD4+ylJurEFaPZFJeI#gdy#mn7$7C^jpMwK?}jq%7jG+4tZCSz z9v>EPpe&__w89@y6ZvZN7RJz6zPsZaxBSMoaKmNd-H&>w%xh5qif?cRg-#$C`MF>H z(e;G&mgZ-Q!qj_ka*{cU!Yks?K|?HVl-ef# z+|E(QGi^t!D8S%RhQst{Vwfy`ZB~;#_#tHWa>qH7rh2|kp-SrkuSYcud-nd~$fTT_l#*UV)=%FLFnT~Uz(KI!*1vV+{Ff?c#w6Bub$h&A za(Tfrmv%jX)<@}SCFRFg)3fq>M_0-`c^>;n(qgCc{y!Z6W&rjHi+^pc=CV&(s`Zr? zcg>T(@>}Y%EV9JaPzEcwWhKZ4MK{0ibb8bLKwbr}WIqs=(ZD!T0>}ZcKrS$OK*0}9 z3EP!#EVoYNzPY*Vl#QC(NZ|p==qmsW_y?Qj=TGO~gWfTx%qw%vBZ)1~W<2kjA+aMr zxj-AB01x3;TKI3r%Z~nNOMJN*y=Qa|k#x`9dtvP^x;4m{u}zrV9BC@LDnYaC9QMI*PQpsbtwhpy6B}n^mfMeiBac= zGmGvwMeK@Mktkw*=lRQKfFbak056|zGP3y+CtdSKrIC2zTA|ETi{7em03q@b!H!cg zE8BkMY>oB4*UUGhI2&&i;_>$Kza6z+~UE@-t0HDtY zxc>0PPQew`-$UP~G(|p}$L*eZ@kh7XdS@PSnCDbmY5F!_|7adp)V0fXA z@jeygzIVs8y+*@9e#2> z+vQf%-;#U)6nFr9UmEIfAPsX#nwX<^$AE1X%xoz8`)pghgyBU1Bm(XRZMfmH88Q^k z5Er_`StREao4Fyh<6#ydZBA_dtFSF73guM7y`7*GA=28Cq~7^;o{h%01!^-cCcIHd zZAS?L^2rdLUyeU{vRO$gmGU~OX0f){Y?m#a?9`n?EtbEA3O^SS1d##p@v>Nq<@y`Z z4O_fOqJI`j(N$3jKG&tPp$YB5yQOeQQpusOYMK5qo7jnS2^wc*LxhK+M7Wsc=_l9* z`>~M%fZ6EO5c_WOtQ8)?qKfl1>CRV=hY1PfvLlm)p^~6vo&O0?n0<{;!w#x=z@BT1 zhQpSa)YQry699T}Cg6u06w2QD{n+~FN86G)2F|~)rQa_w_IIz@)(PX+J|4|j89G^i?LAvgSDfYWHKGpnjyL|5`q4{-xzAUOF>Rbbp7%(ZsD1(Y~c+3D7=xsgoux+EU?L;K@} zYJKfziGUK%Q$mY2ulQ;9U`LGi_n)(B?l1kdh-IjKdiHK3K(31#9w7FG+|-fsd|37D zjhal2Jo#g0H=rc&4GZsUJR1IEL}lOcv}D^CWi*Vn%21_*`LiBeRwW}-t$R}UGf^Tg zO47t9rC~pN`5n6j!jHf8kSq1@Mg&&Qk71N6tlRt6f3Cv@pF~BheZ1vWp%N)J33pS% zn@aOEYw7(940gP~R~{vWjf`8<;$jOhSb$-3{rvcA0{s!);4ioDd|`rib+Mkedc*Cm z%>ac1DD)EW*piwCn>IzQs=tzz@}D$40$v?s0T3Q+Dwu&h9ao=AIsU%P0=wzDzU;Pl zR~H%_hzAe?fC!h+v=zUOHst>Okn1-{TT&P+=6GD|G{6u62K}T0gMa_C$5`8ap?C-J z+d^-TrFG)R07wsjpuhmf1*EQGA87Z|>PUs$$rBCDCGni$@loq4plI6OL}1mRbmur#)3-sK8bP>N!j+-@bO*p}G|4W@$03@JtAjJvbX z{*4}uKUv;$e&vqf$4^h5159B7Q(u2NsK(ZkJg)xpGD!Bk8Dp{a!2&>v1Eh|1k?u?W zsoCG&l6P#NIrz`uqdUg{DIUJ=D){tNP#}!Z7~OViQT(KldgjbI%oBYoc6Gl1MpvMR z0ny@#Gu}xGp((mH>tq<{}g>nRmYid7DG>-Ig-e%dIN8`7;R~ z1$i{=kwO3yq%dSIl(hSSSJzvT5AM^Rqb|L>yz6|y@2^@vKS#I&AVJt3n@Q*8WYT4? zm#^60vgDe(fvh}s-rSBezs~^#aavO_V1IGPr`_R&PS!cL?84$9%s#xD9smfkSorI1 z;bkk!;a2Cgy70_TXQh{)bE%sBbcy%|fDt6J{1-vGK%>zsxir*e(du_ks~CD^j_l>j zCQ(GNFXS+p$gZiwyQ&*warvtDGxarjm7=Rh57l@I)q1?|sQJ~+;R5lkc1xH1-91yR zQ^#)m*s+nzmjNl3FU4>f{QpB@j^HOVTnaz0{;qZw=Uq0xmT_eCqQ$RY!n@^q`uy9j zf~V^K=T(|=*;u)y!k;}Yo%ilcdao9qN$DeJQv4r+fyG;1xOZ901q75FXsy}$(ERY) zeH&Dto^YdZngZ&oF`?9*uHXD1wm)i%ur<~dZDDkLrVWrzL`jw9ylK5Ht*a)jdSe~~YZC;6gv~J9aIHa;R-d%ZISfDn5-yAu7pu$INu(=6$pG@(4 zG)i^Uz}<|UsvWyuuM}QnHh}&h_$eB6@!UOkrgIxRL;j=!G3ubhr>0n=*oOdt6%zg| zCa)5ICL#4lQU(4!<8Dcbaz#>ozCK--B7b`{d@CLG)&_VzA@4`?V)0%0v|_B(#1l_3 zN34?AjXN0Y+cQctP#JKohQE;f&ND6hiW`gv@6_;@MHL1^{4yHiCRPBfzQ@ z#>UKZ++-G(&GY&sl6NFD@O?CjVNrMC!XF(4_@Pda#n|Q&Yn@`()dh1K^JBWjIPrl+ zfFAWq_{Wye+W+mJ8EVnH>^eEA_FsEK4!2g<0_!dR>5Bh)Zob%G6 zt#3x|`j7XkJl6njiZuXQYJT86@$;-tlT|m!)I15d_DVItI_ixiF2|d8-HPQb{2{Sj)PiB7V2B>|(iTNcHf+8J{o`OtQ$8~0(bsYy2ZKOxOVYFcfbbm-{F`-rBgY`&#I6p6fnla#(H}wbCbhpof_L09DXk=7JP5^ zNG;mWM3HI@iDhrvGuRz7LqFxOTl}nkr^|hyG1O=IpI{0)54LSp7+bptle}c|XbEMr zTXu4-Y_1BxqK-@UqX6}autSzs>xa9elIOo@DnF(2$bA=E6uyIiq$;0y&i+S75-)t81JKGlJ@jCx<4Kz@V6n->1{Kf=7;Be}uQX+dxVdOVc07N~O zcViH!p{1?LbD_*v++y-k1MAlN_Gd$BS_eR)-sr(%`cfGnO5b+6gqZNA`$uGS2xs%= ziHCFc1CESGy^=v?!=niQRqz8jLsfIhw?~fEeT)w_6!q^HYxZ=I0a(--`PW^M4_jbR zYD%{5oJ5rU>iy53^=U>$UUCZF3V?tc!a0Dz19`74=q>xO_JKC>!OKLI8%a-WBRa50 z2G$Eb2Tu^W_+53vkhJ=hhKcW0!or{2qOd6`pba80-N=w@a{jM&*c;@&T-!IlXrPoJ_X0O)%&s|JAroe{xc)_c>?`7&%9qWs&#wzI_F4Fy~Oxz6=T(wtnfYI0EoIO zgULX?eET2nI;5AFUi&o0M9TJEv*IT^4fpmh>rflIIzT`13r4dD_I}nE2XCGEB2w{o zzVDA^)S0^g0y{m3_|vJ=uGSdUdnt79Qcw6|^;gop{*SW4p2PogaO20{<$GoOBkA; zKmQJ7xMIi4Q)hm6y{;%o@Nn;JS{!7)0MKK3dR{BAoiR4$ z2+x@ebkXNRz63@bGk}-JQpUD6xjgir_jF&(!Q<}_Js$e5wHW}h{{jVv2t^mA6_@vq z?WSsT^@(c4(1=xZew`UHvtoZiUK`js6KG@=to2P$xq!Lmy7K1IckQ%+_- z*k!Ho{KvA61*l!T$l%Z9V+-DWr!}?L=SO6o`x*E_OZZy>25>8P^mVdM0 zG}2xcK9E25{{S1u3cu#;0f4+uc${sPc_7r=`^RU9Y*{~L8Oy||>`RvHYsyZWrNkJ+ zOlHQIg=~!_x+Pgo`cjrGNknN#_N`Kg(PC+_i$u2&Nv_}cUUl!U-*5hyf6nW?pXWTE z=e*DJE$BKa#dx1Z^F6+hZlRZvk#`=6hwdeO$Qr$?rKzc>qk~i@qVWVGnhev|32A6H z3r=)^ACMW$Bu&^dtcp`<`cV8q1&1FI&H|U|&mA511;iaTjMhnQ5h0pDrmfTABNh%0uyO{S=i7A8Up1OfkR!NS^6RGMhE2o~9f3F;19y6l|wBXtXYGsMLqnNimBpXsJ_V!P8nQ9x?Y;H#TQpso< zP8|cY|HPj+8`NVvop{cf&%)ahDH6#CCg8Uq{*J6d&I{d{ZR+dlTjW#j8Y!TvK^}*q ztd1u8heT6|uqq~}@VSCM)#lUkOu}B{h~iN>y8C_dM+*XfKX#rsYe=6KHsn8k&N^;X|4F-K%?9JB*H)KEFQ?Q>W5)qn{zd&0~i}+0iL%^a* zY!R+@Oy?~6nMK2RC8|{s({fbUn+3|b#i2>b(|K;abNi_4TW<6Fyii%Ky0+wy`-HzV~sSB!@C1wzDUjwWwJQz zvuuh~zZ`G1zSuGap75GNYy0_INXLqFDjdG=T|VQQX0gj^07&r}IN@kCvYJ1Z_TO4A zyf>k6`a5<{}RxvyYPgC>rWy5yIU>Iq4SpUj^wMeplbAZbEsu&Q= zw;f6XE%}8ZkItv|hdpz}wV}_iFZ+Y5e1%qNnDFM>X*K>o#saD+H>BuFS+7t0Cckmr zsAK}3#tu;C9q3`Q=ndBsGAT*aXQ4iYndX2Perc#^RwKNccrSeQzTxeKx*~ojDsu@` z@ZW|Ohp6APlN<_Ph;%0OrHI*d-|fu>!2;$`Ra#rXy)O7Emp4S)%a?Lin*@_Jz#{<% zDCnjv^@_?{0mQDp1_!Xa@7(mo`@IejQFf9GMV(i}3u?tAGJsD|79zEe=l9{X4)|P{KT2 z@}k#-Fs121+46k$wL0rhkFmFZONW9b2GKV1fn8`CNz)+i@GY-jT{6107&TFj1ucSB zkayncYyp*&KXax{co6|g8XBM9>;e)(U5o>(xe+B-2b;;GMT4#THTm<+RVRN_r{aPr zG(u1STmRHP(N7Zj9f(%fC3@_~^6>z#t6%>w9s17|g*O&d#Z{TvYUY)S_t_(Yo!xn} z{=ETUgfpQVQbgH&Nc4-V!li>5_AOe%Kk5lUSi}i3!SYF46duaJ#3c8L)trp;Pi$%d z6cH+r5jBVMl0G}EIC%aC`K_x>CrIYe)-(6hK(MGZ#9+L(T&XVItufF1Zr7V(7xqPZ z1muZIdl{m-W84}eEqMpDI6?r{C<)sk_P?`N$H9=6QA(KaiY?+1EYF&6jeAmRmTP}O zBtODNnJ4a*WZ5Y*s&?*-jk7A*U3#FG5(cEi;viKGuC|d24^I?)-r+v3_n`!AWZMuYNXh4D*-dI>$(7Z=IaTiO}*o&h1ZL{UZ~CrEJJZ?D!B`U7;Tf zGi$$){h>1Q#Zfy2?Ozl*jEzh>ZofT8Pw%RL6z&d*%G7X4^)3Lt9R<*55xlBKF87!& zLH^i!GQ#$h)ch+jwx_s$_eJ%E0Ga#DMt$7H(0crU+6`)-<43enF+w|N>Ymr{Iy(TTUQq-xRxCfdY#Nu7+P5MZc=rsFXt?+6Uk&hs^O@~czB>mr~G zDaCL;LEH8fD{**|UW?O1AIek_+G4W#(E|Q!_R&%2JVyvqbxVi`HjgShJze8Z*8U5i zlCcM<&&Y`i+V|%_V^PrL4a=JF59Q$LH@PHtynU%+ z_n!On)sO4Ig`J0?qcM8Mj&Cyl&|G<19dg$#R%GjnGWfEy0rbfqg0`m-lZfKIox=>y zhi=pB8QSCp4AWS_0S<8mA9EaL>Y*ZIajQem5@-Xp&rF$FC^{Sx?oT!1PC=#56pt7v zmIW(j*2i)H#a(_zMZDu5d%5Q_yz{xe9^S!XCkw)g{yqjVC>&29pxG{q)`E>rDyRp& zi%GR}WDcG^HL5CDMZ5yCcj-e#e_ExcweXngG58WXg$H&0eq4?L)4TkjgLx_~y2`K2 z>Lq6{dc@w^LA{3>V{6Jgj%~5iH6qH>sY)f4Fth^#G&QxLx$+%qKFGT ziW43!)!ryY<9PPMb~7BTw17MK?X#Q|90qgKf7tY%m)#}gW-Zxfg~6%$VF@%eyP|*6 zE`A`Q0xKd(epQG+)DC+wLTSv;d!pfxue8owYeCVi`j0~7ORw$@b3xu!;H+{tDJ-}bZ$Map*wSuKi#2K3M>rdyq%n8>0)PT*P6s$j$?V>Gm zr-<%Jh<^R=J}5+1fM&7-)b)$ld?(w=^7~b;nbAbnCy<<5aZ`pc0|j8Ks)nFoDI4qO z^tQE{9w})$z--9#nT&RKiL%oG4XS#KZdBRTq_6I|39IL6FHSpNjbKRn{1OkrQ}IC? zZ%762+54O}3=}FqmL)cp+IKo(pX^VH&K^D4hL0xsvE!_pTvAJ1KqiK>=CdQ02~X_o zSnvNI5C%sxd__B`T*E%| zD>H<`9NnMFG>R|XpDjC6Om_4xn)ce8Zc-h^G8yl*QCkFBnqmNh@>?S<=Ux`o zc1$1^Mf7)1G^%((xv~Il@9LBG~tn_jYj;O7HC*1?N@)8{NcTDX6lF4 zP_x&-?tpAu_oQne^P$!Z+?2gIuf;q%ZylnqdhL9hr-g!)#DtsVPZ9Q%K_#KM`(^IrQ-x=$O_CwRK zYE&$R{c5r2TmK+-z=(Zo2@$nHiAg=V$jc!Bs-8FH_{9@~(3`c!z|P9n9ky#TFgrQT zo%Y3CH8!vE#?nuaiVoQ5qxrd{snlPb=r9#R9zbYaM7Y{Q4~rdMT{+bQDmu6i|iyMJEii?%pJO;`_;d{bLZUWob#OLoJ&DoUPVbsRMr7ahLg!e zv>kBEV=KJBC@ipzFF{^RI+}vjheU7{7HuMEJ>VWm$Py1zEBindQ%;AK@2V@74uO zoD!>S2`g$=74U-gigcd?ALN<1aB<6S;b;7PNA4R1h4jln`vY`eYr+%px>ZZ^nrn{L z?>`5;e59|vfc8p2f4(Poe;gm23I8>{QKY1c7praj2HGpr{rH$BsX>T44&IG&%Dizb zX-53$4QQ`I_a&nInKm7QW|>04vpL^dzh7Rvm;voo>E2<}2kC1L!Qp`$^De8lRAs!l z_(}@e)AXmA;+)nOdlVu!|KTR3DY)3{28Tmw1xEC58}Mx@9t*iA`Y_jg_HIt^v+1$@ z&>o0>o4>g{#zZsL)_5^LYVmSrM(&pb&>o0>Ac8&LlAB%I+(Rb%e)-&xOrg_NXb(ic zTMkw8yeTDKt?}0nd7O7^T91u7v~zMK z{!*QccQ1qk6^X5FOGXQ)pgldB-&BZ%IH$V?Vda@R7WdQpj~;per4<=|bc$OnRmXpx z-O^;=?DhYoYziD2pgj;x&!0-$Ol(o*6#cn1<+UnRg(cS%pgj=H%nq@87mSR|bmu44 zH(YWLe$KLI3EBhEq}0z)=FT8kJCy?7X>s5v=d$cXpgj=HVaXlD_@et?IscP+Afs)z zVC&)O0`2KqF=XSWqoK#~Q$vZYczaFP*`Vi8`T!$3KC}Aok3P$grNGyc1|r(EbW=LM zLVMu(hQ<9=d7apjtCk~!@u_jw)7=ckp*;|trY-(x)18`cc-w@-&rGs>Q#y5T53~oO zlVhl%muwfaaJrI^5p`klO7XCM6SN1S<1^XZ(8%)3UW|RFI^Q{H?6t+$Bxn!Jwe=6A zWqy2}x*-=!eFsi#AD9|2Q>2m1x0u_or!2t&Dk;e7o>OjavL;Xb+6mi$?i=thNYY{_V58Uw_PY zs%gb>LwjJfv<_*VeYC4}u31DVIiZ=NclQM;kEEZY`)qVz{jFwKw_KrZ ztk9mOClwFE$+*GRsV7ap)RaqWDPItfd1^WHcnt^=!d#c;=0wQRw>@p@s=p@Qf%ZW3 z)rCA+N2X!n+?Qkao%+3BwwrwyERbcC2pU%(5U$H9^_~#Gomm5Q-%M%7d$dKKD0PA*nXyVckVrC4@AFt*s6g0 zm6}!7;IrCW!6mifdIC1ko~ES~ckj6_JZGgfG~2R8LU`lMlMu+ftip)qF~n1Z-gMRW zGj&7k^KWb{aT^b`L3<#Y=UE?Hy1}{MhMk($@XF7uo~SY!*Z9RIt)W*S#>E#&@uIQ}M%G zQ)mxFGyZ0ggIXGIL)zAS+pVTLWhX=z6`?&4AH-PiQggM+QLaa8RTGLu1YCGg5EZ8i zqXO&lo!&kNdbt7%K5rN=H{?^QbZ(FNNF^<6^ zd>pWD-RQ0(&Nxm54`Qn>zx||4msC$Ra#P76P#Dfe*fy~gTyk3tuY z3#MXjt3FY>2a$P}^GN1;9^)XE&wU)I-u&+u)&$m8NclnO#^j>$l2G&xDJ#je;Y6m-7EhygLdL!xY5&2fBVBh1G zA5eO^!Wd8=xDb(Iu64llaF$~J^$o2NCJ<){m6ZzPjYtWv6+#Oil=(m=AOw-fzMuk8 z@2IR)7{*fn6_2w0_|{D-NU7d08@)a{4KkX`6$W>v-Y=qe=WJDH;>90glE#WJ@DL}z z$8_;D8fn1NNZ2EN?e5v>C+?izbt)XJ->Q+1`f$iaB7#Zn?2B2?fxx|@2cf6loVp~ww4aMfXWlLCw zSOg4%CXoTS_Q!pQ~zV=Gx&gSNv729k-QpMh4Ryy(kElLtmlNS3h+`^18&0}_WM!pTS&ffiPJ z6CR2Gyw%PPy_*bH4tlnWUD_5l*9mR{4%Z!*pQF54rAW5$GW_7TsprmUSn;yO+uPys zPB1qTM%JE0V(HxxwoaqfY-)Ra>cda=)X>xI zx?AHV=9nMT+dnsE>}%vG3d${$16u+C1H3oMjNIDo9l{;qRp)9lBb2`MV51Ef673z) zSOT614FCI-{;_o&m&eE4KRP~NN)T5#8D_m&y8u17qkF1*GrP#(&zdIx+j-uT)p}h3 zKS030;~;8>CL!&ChuVKhl6hvV~Pd^fR8*>3EdW8!tDL4cMcxKj@fyb5Vb`nEv zuuIqAS0&$VWUUrhwbC%4Airbwt`b!DzR8bZz2m zqyh6{QRO1>vilwX`HtJ~lyWEdKU zK)TUe*tH!~DU5HuydRgWWR73Zm*#%v0nq~3>kJi!?`$7F$Fi#qJ-xqr*yg=i46`K? z-C+c@y%Vt35nH(Sj#9X!O-Y@Vekk8iZF&8FIB*mi|D6>UW$mx-Jojp8Pqv>#QQR)D zM3eD&3~*J(nInxUQ65;V7uqZ^=j3s%)@U9qF-SNL7?&Wm+^z@b<zT7XOCq4@e3RWWjW5y&Tk(&MJ*zKHq z-)=E}r_NxDC#O`tO`DF?npdyF94>?lAuHebx(imf{aras2>GB*~tL zwgcjvtI$zo;4Yl^%c|?FY%s}5*`jI_*wXhE>cRp7Vl<)bHd+>T&>{5tI>d?Ll1#&> zo2&KTIe#;@=}y#@u_(##wGpb;vtL_f4NX_;l>wiso7~IcLzXa%s6#HKo!#pR50+Ym z>2A||UUBX{uZe28{fYdwZ{O8%i3YB6E3-HvrA)}sPt+&zaK%JSj@-GY>=(fUj)IfO zFkl4fJX>7y*QS3gq@2B`I-RASJoR3!>F|TVNvrD}PO+>>+cD~)g6||=iW-6; z8bd}B!AVqchvT=2f2VBrhA6 z^?0Y6l|E`eICqRkJFTKJ8{{19>8dj$I8=&Is&r;*y&~To3w6D3!)0KFq-Gg7aXI0j zft}rdN^4N!0KT-iDJV+#{>Y!&&aJuNMnr1uN6)opm96+LQ^C-J?@C2WQdjOR?jnL6 z1x;rSFCz<22j%VCmtD!0%pL3Z!Rxy+h&jSZj*JKZb9#nz@mdv*JAd%V#H&1S-PkG1 z-(Zf!0KeW|^wv0Z880SBBEwygz%#`@?M^nfvpT9H zaMvP;&%4y`Lqin~f0!7FHq$AL2-r%8Sf3i6 zN5m9{qQo`_uaP@;`~X;!KuL3*2dl_)_NZ?*z2lainDbwL?R!Cv=%_s=dzr2q7 zG5SEWLvT-cNRP7=zo@$hGhWG9 zw-7!pEb9paGxw{fv78%xkDFg4wi^G#sU^nWALzUhk(tBE;b6qqwpS5P@NHLU*)4|-hQLQq-_Y5NY0 zda48Fo!cneL{@;Y!_SPfGbXQjnqDahJcDWhq|9%ajpm5L36%1G-f7ngO#*Utu7I%< z84gU-n>D<;nsp?xj0-%e+#7QBZCv*9GsERqyV|elKy24V5Q0nDT={#4WV38|!P14U zV$5y#T~I{9Uwc(13&@(f7N$t^fE12)P$nV)d--u{Uhs&Zuti6>#V*#L##6|QPLQQ7 zc&5BAd;HFQZvODxSXmtW;Dm=h^DB)#`Y;PKC=FymYHifuo0u3bWGFP~7aaI-c}>E)$m%iWIJva`v?kVRDQ#Z_!k2eIjOGCf-+n z#wGM(zl(NY1;{y5sMQ6i#QDhPHOO~l^VdqQn)}1~Mz*{i-*$sI5eY~9T}#fkKlxSq zvt>KF^BdR3?bdrOZEV7XS5iiYuyfNf{Q>ixQLh^ADP1hG;8?H7B<+#Zle&%7=AIxf!t*t<_B2nSvyN23hcc&F3s> z0;ctv#EoFqpq<(#2yLzTGg^;NSq0}0Jl^$d;e72X&>1|w|B~p4}ES<6<2H+4q0XCYYqt7T1yEr z_n3MOHiPJync7_mS0de+F_JOIF7i^YY~pPnN>N~4uQBgSAtPF4!4kMsv0M}(OY&jd zx9yn!@^q2ad*{%}0Fa`UCNLyz8>8!%r*{g9THd#~vOVvMJQ4TJ=hw)=)p}*r)FXHM z$?UgkN!^~>sruO4=|V~F7BF_CdNKv5z_w2sUKoxxVm&e&y+z>w`*g{}H8M;V$rvjh zjW*u;BoXAJwhhUnE||WQOKu8Gkh;W{C#{aY#y#r~v!9x5H1sCM%VB|h^Q){YxZV#M zGeeAhG?+{E!^Zenz>0SU9NVy(|J_0RB`q_4D{z*gYjZT7>^T%3v!`o*wO%gtXLO=F z9qsFO@?J2Il#^MT)V@(uYL%tCWBGi2Stf4>@bF7V+7i9qg!^6)+2YB!n!G zxVV0v%J~zlElD>z*A&_^Lq=ZOfrytIbV(`B-2dxkg!+!2(q`><%#ch0vcCTukJ5(Y zF-IQvRAv77$ld(4P|b-+643+_b!>qSP}oZbU^2~{%EW$MdGr{iE$nFuJ`9j3c33=u z!YCcQS~Yr&o`p3ROYIOdoilK3j2s2;J|q|5cr6yM7AMlU-+kh_+e!JJ+*kJn-Vngd z9czcjpzT+pYJbP<`i6ts-m-fsUR8HDRlbt>b3e#0@9aNGid)lJ&v(74Kz*&Yd)V+L zKTd;*5&x#zPqnxWnJ_qb1r0V3id^>eZ#E;J-$%ge>r%MS7~IsV!l~O@4cA}s2-+?4-{~mP^I{~RYEt}E0vUTk)VIEHja2c!emQgz>htTev(xeQoJ~Sa zXqA2GI&;{6HE>A+TPb$gtlq8(6MNE!in%+vmST5`b!OuYrdAj{b>9MCg1%^lQv%ry zIZ?kuIpXXNWthB@Vf(kmO2#N0cvyErFsYSY>AZf}zEaYg_FW?&?g9sHZ2D$OZV6W# z)|kNuSeA~ove>=%7y>gS5sh;H`_u}!fMR3wnr80;7OtMLLkCr^a$NbBFHaZ$FPm7E zuCA-R!E%zFosu4U?axMVAx%B~z^F+B@5;!>`-10{_r+{U=ZozN6ImEitC`ygzUFmx zq*Xs~oCBjksp>Aibwm~QQ7^Kh9UIhX$!#PHzQT1SqRF5tx+3V|=^NesdG8G$#37&8yYH3H?H}YS1hzcHFbXDTh8S4gZG4^;OwTBcko`{A6Dft^{1kKT?d;QkG0^MvLG`0IO~n>|iYi&hnQi#fTMN3Ua>Wy!sCAz! z&~Is0kwg3@TOusgG5`H>^&bFP++z3FCOgYo zeo9Wu$rh|QgnG1Ag7M2}1vOwQ5kgX`6yCht2*-$xyFKmMOf z>uETmgwX+7L4<_^rHf?P+Ao};$rD8yh8rK8INtcD_n`X zb+EymQmdb>L9*-Y&Ch6E>s@8(#XQX>B7VYc!|RPC6WF<09Sm~Vuf+e1Djcw@jZo8}6**-6U|5Ie z2^RA@;e=(e%$VAvV6Hk;98(%oNZEVZ__Xk{+#<2M^-g;G$(ATkf5Xz>Y7oh zDiWZ4VK61}WwjL2VJA@w<-cR+g)xawanAR=o$umBn8_;Cdw|;{j&3)fd9wcaY4c&n zvuPJy$l7l zVbzo+>ma#};ZBmBYjT0(Pqwkoa7IVNa>a150H^)(lE41yGjJTs-8_o4CN3*MN8~?@ zgrY)`nY`ol=6)K&-i9oSv5{BlcjAYtJoQdEXRe88KwZdW$Awh&$?YUbr}@8gp?rTB zT%OHC3FL&H4tW@a4<1{X$!G%S`LqfN(1VYUY5>2%*7xpafq%z522YQnaALM*R9qR* zlgKx-OZUSrVT57m;al6yM%7i+RGMll*s=9ek^Qc0MEqp}*#OJwHM-B)Z0m6QpBr3u zwtfS^AGUbTwz2|voO8)fF3nBND@iQL%+J#gO3m@hFG(%dHPkcHGXcVqiV^_a=nKlT zwgz~d&0Fhp+qe<`Ed3R*ZsJff<=Af8Tu+u~oSbt_FNtpwr)isJIFtxktSM6A!?v!; z|K5E7AV5-%bJKQu9~=>n#bUAh+Xryp#pyh$A}I#5Do)Bc-Cqv+-{hsOth{KLmdYY6T$ zTPzCPUm{a80NR3*c2lin6wEfIEKDctBY69#)8N^~U&Xw-mBv z0EcGb>nx5$7)5ul!~goi-n=i`dnaBx_5!~_R`3_}_;wy9NjCQmeVURjyw-%_kVlVC z6oIKQ0;gu22#qZ6Uc3+}(1@f6JwcdDqWP3ga&H$b+c#TOBVk@|C08rJ zK~HxzI3paPf&2}pd;nix`n@Qlg$iUBz$K@?Tf{Q&z#;?F{l=EW*bqgwaV7}pfElNz z9caUitF6m0Pd4K0{P}<;VIv}Tnt21lPC{>yA$qKG|xLEzg6^KT_Vv3)6cz?21QO z?)Zy$(aZtTT*Z!siR7Qb;XqH8g6~-5*$ViUkjwBeZz#eAMmLbofEmXNioKTLbLt=* zKF+V&0S^Z4GN2?<2do{DDyhyrL}o{)0Rv5E%#9>f#KR0wM2MM{r)KIn)fc7#HO3d^ zW-ZfjMFYnt_%-B!atIN@f$@q9038lMX#rs(({}h-$DSMs11wz@;`7uwPb)AzEh&Tq zL2m?r7rIu8F!O8xek*!Vrmcx6!Eo8xPwIjN&^1JQ3dpIjzYCn zz^6edZ(joq1O_Ic+9545!SNyD1_iXWM0Xv5T7wVtV5E*d?)>SWgVWc4L)U0d8QbZ! z8@UGct>R)8mhwtYen(Jt_o;+4%0QKpFcAd ziirC?mtWA93V;k#YSd2{$HDGhs%J|I+$Zl43ncou=zM@PY9oIgXl<#pk24Cf<5ZpM zKwBV9!eR}RvGu^GIH5@b!bzobiP34?*H?_I3u+V))Z1%Bpq3%ww~IsZM1^WGr8FW2 z1hAk}#Cv-xgkwb{wEYl&+*i8Vb5y=Dz}H%+WI&Q{C;9bO9Dgp;YNbRIkS>tnkgKkZ zr_)K-wHwAQh!oR&TrRaO68IySAg?}T5I2ych%5XTTOocZ5j>Cr97$a63-Qh={P>I} z46lW9OOU8U<|yNIj0GN_a4His$vOceLWVv-y=|W4HwgoH*&48rF*E1&VK$ux5oq`a zVfruoNx$4}hlDA*>Q^TnMo{F&8gkP}@yt8sBgMcQA4ObP&BjTlpgxu-ABpYpyG zc>MC(9O!LeH)l2QV|=2D)LRh`rDgbzQ}Ssn9GmH{%G;8x z6Vfr*OGrR4C7}@aw~F}Q!ejo{VP42~JmeD91egaRvrEhxacYO_3Wy-sWm)srUb2I~ zrVB!sxkb(_#ug?5R%gkz z=g)msf{s*p>Q1ohygg#OPI0Nq(%uOMfwpPs99e4x3(F{@stH*6wJ+)f+$s!Fo==~s zC~;azUECoa9KKrCuCCP5ELGJFP_%sGb)RgxC~>TNn_vqi_+avjDYwCYHWQlypDs&Mbk+4JDXvzHgAZ2G#gX5k7IP>&9V zrmTF#73P{P+ag@K(Q?`>APe28Cn>0@{R_7$TtRVbt4A7G_O+rRQ|6<9VlQ8`ZTs^!_Z<7*M&vV<3#Ryv^VHg7i`*fZ2)=4e*##@nmRS2dZ%pw8FvQ)x#ozXa$pbE(POEC(!TMkGmmjM~yAnY>4Ay zU_|WcZ9Op;jqaQdXD!A}*;7_y(}p9&t=nxU-HyNCEr^QhLo?Ect-|LM9NUt6mJS z)f8ZzZi{CUU-U4(MF?>FJm5b9Y-W(}+%SCu#3`3|5A44S@HNdoor0Ls^Qta~1X(e= z`(5LcO$bBr5D8x0lh#=my*QvX#{?_(DPRU|f)=}&X?a1DgWLC}*0pK-*3?MpOIHY` z!qi5#d573JdhL98q(UU{k6tsrG2g{9UbHX4G?aEk>EwVqBP~3nF0h=oo~rfR5N-pw zfp1lS2Y@~~5s!xe)98)Vts%qq@9AbAHvvtLCw<#h9o&Aeo}t{^0}}1MshdqKY+eQr% zwUunkB||taQ|rf!EUptG{eTosQU5XpKRpC#EWyArX+Hd|qudrAKoxT{1)4@>3WjYSk8G}=6qL8VJ zz^9sk-pIF1&+F+5jJ}b8x-qNCsHf9kqryjN6S6FA>X7S#EJd5dKPQm`#uAcs7_Jx% zO<9P?HBbqrEz2xTyaqBg#%nauqhX~os}kG+8qs5ju|S6pRbfJD!5k6qq5qIGyBg`} z8UkiE7g0#sT4at(bg%Fg()j3ZYS0AM7;ZZmdiL+x{||u5{rXfocuz%zhv4Aw} zAly#JcpHMNRs13Y5O{xIyb3onDT-_bQ^F0$-rdyIQ#X3W`+{B>&dXcE;@a2Y=Y600 znsLwLGz9T+2&`zTSB7{|+Sj#EeuAPpbuC+$nAE$O`dR{sQk#gtA7i>qV-xScfc#-Twwc*f=1)`VM%Uy*>R`+eWrO+keG`o)DV=G2L$aHcog; z!6cj#%(J1{Hk+d(Y#D1~OI}Ilqp$q$?|#guG%_abzCGK3MtAPa+_~R#HGC5%quFvC ziH&JdEOw_G&2MzeA{>3emS&t3VjLD>kVT^?zKO?+NpZW9nr#?eGv4tv4j<=`~j4M7$L{dtLPw;XjD2(K4IO zyUlN+WE@WrUxEnF`i!r4F#IJrx;%e>aCUUsv%7N70D!~gtk4LW-#|;8MB;qV`#JdW z@;Dft{Mr-Wb^i9fel<8ad)Euz_YRJF1AhINPO~|hhM6FoQI@4yUSywm3WGtP!9K%+ zt)&rcp3jgR@#NlJ-6&0R070Bv2s4T@oMb!^rzbxW-k*De;Yt52IJ^8H_TP%mUFV0+ z-#UM(L+~ZKx2g09n*XYuN4N-!sm4?b6(^HaFJ_h|*Sy?WdK=`6C>jT|cpew-ntfnJ zJda!`O}Ys%Q<4VJBERvHjev;d7Fl|CZ(!){GLNz#3Fpza{CyGTIdkMH+U)(%=`>$$ ziOW19HtL^W1V8nDIX@TvcNp4K8#q zW^8Bmilu1Pw`n$Z$Xj_!A{b{V+zJl(dpS}}Jd1(qTZ=5bo`=CS3dd2_T>%KYR)Q@7 zyV?V~rO-<@Leny$j@T{!EeZ-T$>1@#T23ZW*1AdKF-)e&wuO8h%?kWYKPU5Oezh$a zkb4E~=KnSu@;&|lrjy;o7I)~vd!8P5QC$I2;(!S?VB1^NYhSkR?8DF9S(Jz!-LgpY zq}^;Zb$8m_@}hOXTB2v!XIj`iB>% zP28?H1x+U6bX3d~ZCP_p!(==Ia*`;{$BL4pSsW$Bf+<-;DG7rU$#3IgG!-qt&=$~T z6iS(b8GJYj&id!Cfkbk;+};cNKVjDr=%6>eI2c?EKqF%pXXPMn-8wW<`Fn=BJp1Xa z|M3ivL+1w|la?aMaJN}pM2ae`b^h~w2S0Gfy?n>-f^a-;aqG6wQ$cocZ1l^Q-6|uv zOG}os+1D+MXF}_$9kjB<2dx4K323-Dp9WIoQT|)2R0ICoe$1U9#9#_WQJx2+j^^-N zcpc@WGHAlc(aCbI-x%80jtd~UB@ zXOU<*IG()~XP2j^Bp;+&?6*7na~SmPTXuzp?}DTLS&u;*+Dc|o4inImQ9W^IcKIEO zM}yY$R(NzQyp%H|7&#-cxruKC{}12n?BfXd-W@3l^ZS4`2C6(g6!%G@JDvdPO=|$T zj)q0UESje%y4T-SnBCX)Ols!qkDwIlYUW?~rK($TNX+g(!g$ZaF z9OVx%psVJLGe90xx+r4M1ufgZx(Q+GZo_ODX=8B30tMUp3`A%&U$i)k0Ox`o-VFc^ zvo>#Z)fv8yivX}s;_KilO=m3{j)rJk3cW)U_YZ?Ej2guBu<$~MIJs_ZDu0Jy%^>S| z+y0Tk*CEqr6|>!9!Sti&aEdi#6T1RQJ_?nm1-o_!uYBE zgt1o)iecBPF=bfxHwBW=DLW>1(0lb zF~9`I$=S(8R|?KE9qN*t=qG@_gRbM{qIDgS0Jb*HrR=;G8*QSoaWN;Y&E*2@*7N-J zbCd)tm^K4+)kcyBkVgd=krppvTgR#(bA$7bM{L~W?15xOIGXYpLTi%8fT(|v5U%p4xnYQHP*Y2v_4#T-=LvLi-B(FME-Tk+mVXzfYg-9?cd8y8x^xJiyj80ukZwoH}|B0 z4-d`{F5b%(Q}>bsXq>nw;ypP#?kl|59k=JvZpQ~Frx06V-khbRX+qz!+p{k^5Q=)U z#_(!QJ#yOr7z{xukAl;a4<{GW82QFqPr(>`7bhQjesnlRDTr%Oq<;!HPy2@lC|WjA zK=Ve)O>5)b$wi>}T63M_fVg zeE2i#V+)z_#n!@gKIs1ggs9xrN`0zCK*{scnu(2*9ob@b0nHgdg)rLIC zv-k@hw?QbB0)jl9N5vHU)Qw#sK2Bq>4&ZbCH}%y(Z_xGFfBgpa*8bn$Ow+vBf3>^2 ziz$REoC6@zO#BNhPYKXK&`_^vc`x6Jzrb?Bf)_fPW-TPfi@(1hDM$L0-n^zaL@fO# zS-t^FqIn zZZ;}U*WKV*@ZA5y6R{TD;sF&xClYvMKm^+sx_@b0d|Mj#p)6`3y1@iotTz3P;&3 z9c%NEL$hIG%a)x(lOc^(x7V}uDxC40NQ1vS?f-ai8XQOnCf6IXY?R8GiuSJsXj379RNR^cj^1PVJKnB@Hea^l?hMNdZ zQ!i&&EVK9i0<6b}gMS2r-v31w$z<*ZFuq;a)}ZKLPqlq$zC+EmR| z0Le8#w5MIW3kia0CTv=#F~KhiTD>R3M;iMKKtYmqW~UL*O$3fdFVW(6H&3`%uQO5H+{aIy&n&7X z->(Fsvu7)kICLI{XJKU#McE1{rtA-n&^x{89bWW~Hrl4kvqct7;ycV%x+8CM=~Ygy z<9eBG&xwAi2&!QhJ~7)l$r~eLj?o;=qA&rAqH{Zs9gO;q6Pv!%L??ymMTqBwl|w^y zW@wHc6|x%MeByDU(lmC|p~z4=cf`ZDNft%s7*Ucy&K2HQh@ri~^>)k|-rhqi(NeQ+ zYt=S_xwS^y7f~?ANnwMI3k<+Fbe#iSZP^Qu>+*Ik`vWzOghJtq1KGSHxn;FayBhBK zydvd%mr_nOSyS+N!NydfAVS?nr3y~2CwodmGb?yAtG-;Up4V#mR+-m&F+o|j54HcG zus$M^w_N{FYYAjAMUjO`K8dni9-n*+!A9bNc}U`h8O;w&0i=Xl}elh5FoXi z-U^7ODS&W%NJ(TXD#N;&bkb7fXMU3pQW0u~GVMILs)o|dQmrakTUiF;pP*N*Y1VM- z9xU?6p>21(rZB{rsEydxv8wgKBBUZl#VXWk*@i?w*!V5o>c}|@>BbAvP?$iWhKdGR%{Y&=%R8F z^tPxd^tCWhiucFM<6}hOluoaW;_z~K(f=SFNF7?Q*B9#rk1x*-Ij8!ht{(>{7rn3S zdwG7^KRA-dPHR*8UGG9=X;tAKu{`h;mFyN_Ry?g3a4f_EO4^HL$g7e&Hl7=@nX?EaF4At4QcHE83=Uigk|3D8e&1OpXdzdo-r*8gN(TMc21IN-LP7)`$8E zM%v3sJOl4w3Q;aDojo6vYDwO-aE+J@oZC)Zu+|Kna$8)^wm zVztcJTm@Vj+IBhI!EgPRtX(tPty!FW!A$z5nG;$sE?|UqxqNCu5NN_5s>!i$%Kk7? zv^g5PYSVT{4-9Bb_K+rF30eN9MMGuB=8ea%so5#=H^G}~S?ecCF(ri6%*!Kdi=xO) z_^<0^~7FXR(YlqwUHbL%eD||FQ^=;trJ|i23Pqu4}MRIv(21l zE}})vc6roOjoPC^@l-pOer@=upZOrH@?L{ug?5w4p2vJsnpnMa+NiQ@xz>|Nl`WG$ z%X-jfJhKqM7iliFullqnixO&vrpXvhp1_jS$=GV3@^hypx*PGc`XFp#g(jHG!n1%p znnk06Qd{Y=kieEt#EH*Qy-c*QMYdH4;7>QCr&U)r$U&`I=8r9w(Ps4#b&wYEg0g@#KP!0S@~| zJ>*~l;9M*isdm?ib+uBnLh9C*`>w6>q-r8%pBGEdPBz89k~K_?g`ON5}5 zGRnyiXq-bcu+&%|y1Ox{o6oghm1U?RSKVq4y;cpcTeKH12FpaKFc$Mi;R3ATB8ydF zp2e6>uxruD^Sa!HJR{o?WTyB}xr2^N=ysN3#Wb z9q3)oQ;>~&42eKk%^4;zDivVp!rU2tn@ZkQ6peEjIW3|VeT_8LwYja{r>$<_Su8xHTrY2sB8^Gn3(89v8UF-mOr49+SP=I1_8yC}nieQw&vA+LvizHNi zlBv+fvLgah;W$hWp24w*5+oM=4*z`8jWCzb$a0cc9#k7tzw}W0l$drHIDCSWc8WQ! zz|6Sw1SnfN59?f zcB4H7R+X7@pHn+D?;D^vK$k#@sFP>Xe%4mp?_JjMLg z^WCld6%ggyZIlLGzg06-!-I)FAAr6uzh!#x>@oLRrAB$>wF_Ro+{c-(c0V>1U1-kR zHG_25+rTwh3l;UWB=$ES?q5a-Y0dg`L4m&1$kgwSf%weeco1_euZJACqV(a z{9vBrP>rLp=Fo0VoI=xv{F>YZvNVLQ%=W6W#%R|_TGWI>-m^o|tA_|5`-l@*4@hUF>P zS4?k}z?-8ZvJt39xlh$hl)MnzUf4E5qIOIU^;aD{rfgeds7?oB^k}usM+mNdF3&|9 zijq+&<_qjpF)XMF)ym2)&!+4|-pXzf%@?q9YG^k0GNzqi8AD5g@3LfursiL%Wj~)# z2?TF4O_3PH!c}Gz#e0qG6h8^$q=@7g23vC{*kqV}XiO+|QT{%wm01=9#0;Yd%HAMF zf+FSpau%tY&iQqfTO}6Dld3Q*)33rFa^r~!O8ymoF)G3trZw(m!R@#zbGtfe zfD?Y^k;=B&z2~`1>xU!EzhglBJjc5l+|z91O4qGs5*4E<22q{>N*Ah6OaP@<>~ov= zZWyoUB)>InHaJb@#%??uJnih;)%0ckKy=yy*ae z`Cr*T;F)xEs@SVl<$9>#ORDqICYKT^wAIKdc!i#uJ1O{OfNz308N&~zwly7<7N3yf$zadm-Qr2BQf z;|S5!J=CpY9Rk}ytJ#dQW&k7UCPQ}s!QG8TLVo(T^Z6^J&I(_Y+~G<|?(&T_ zh0XGGd?u=FpSo4k&Z6b2B)+*!yj3w$S10CU@kYpN`lNxAx7cBaPqF-*fbOSzasJ{p zg}w4j76*>ex_paiYIWD2xkt+~Uo`ql5o2UWyrjMsr~`!mzWW}acM%%DB2w|SV@EA$ z0M-T+)NH+=TS84eWNa%Fi}udq67i$ZzwUMI3KAJ;TX*ewXo=3Gq#)&>|Cw-pUJ(y5 z@UIUQmF8Dt&RHiHf#af-J1qIU@&a$MjQ*`N`uMQ3j{xM8JI7nnO?E+u5T#zGWQAXN zBIV%|uUr!Bmy1NFH~69U04^n4_jaf`&09mbuBW&>tyIIkQzuBVQX*uXh1`{?4O#f^anEi3#t@y?H5W%zgXx6IC z;^hF9ajta@>`L;Hf}XrD~9!yG7{JG2Qh|n0LQ=R zcCS$W$!;tDq)P*BmtRSkcKshUu??*btSCZ-vtC!1oLpxhoOL2Sc~?642GO+K+*T(; zwiK06XnAumsLVlavZf;ZoU|$7w9_^v4YF?bMh7Rf32ZLiIqFa-yh=0m^@5|8eWx2f zCFM@hm!7qI`A!U~YVrvvO4aZt=l=v8E0fFh-K-QdP}B2inXdFcnaCpVI44&Fmz+mv z+_H2o=We+s@e1G8bk=(mglulbl1BArZR-M6iSYD|{0SPZw{F{QGe zz_%Rvk~6e1z)4{EOAZ^}NF}3Rywd>>OvLk_KTHF z8LDelPt%(>>QZakX5^m&LXG)ucoW8Wk%my0ox88mDdM*$Y>Qum;V);0!SU(k@IBiAfE~U+*b6QfV+($?O>>a4 zYz+p)^iRquH20GR;w*cfZ(%kN0C(5AAAAMZXot^z;m=oilS7uT#~I5?rm{9siK+?P zKH&`!c%i`OuIo0EkN^;|YbAw2nhi^#oIm+N!Y7%ZATrL_=xX+_^g8Vd2!Cw$m<%hv z_qd-E<$g}Vcf|X8Bok1kOcAjpy81|GE~elQjnd_8ET-X2BqpFJKr+Tla%-{hcVia*b}z;;D2F1=?q%&~nrw6lK>1drby2)cuCl+G7v0zQ`dI?hL#H++L1&?QMxA@$Dsc%K|+J4lETF~ul!lUQkI z|k=vSv@R%Lons=q9Am6sOR_sPV~K1f6DfO`P!i>gXX;$fbv-{k_aE?H?$`DC<#XNF zeSIeZauX33uCN_rZe17YmJ9ZnOQR-b(jso>X11y44A-K%_Hg1{6jtvnnf)OB_SI0Q z^F9{l-NM4x6^U=;;(DcpY7#*4ss{3=K7T+s7{dY}wb0d-&wZE3_YETxlzS^(hUsivNdT7$~Joa*> z)A6cH#~t^!LNMuK%(jM$k?9k=&d8y|(U-(`OjY93gvyJyT?2Fb$ETNHjFvb2YzcsK2|_p zB&;RiqX#KF^O=da)bg<2dwu-=mOe)cJ4&!Te%y0+UgxDEB|{emxxeJNJ;JQCPTr5a zr;G_xGML)U3U=I}XUCSkAI=D%mgLRK%Ubcfr2lS12|S+=*1!mhkI5@m(RJ0sy3+SW zAt@Sr^^?>kK6cRJ>`2}%RIP5b)8xr*{y4A4iUdFM){1(iL2@_hoMAr_we&)I*T0T2 zD{yT&@GNn6C=Q=EUDMLvpff|UD9sPrp#{(zHmjOW5!d5veb{Z8_ZP=#{6VMq&8 zMy5)UHgzbM^eSd1WqrG&rbYOZlB9uf`~+1On7{AAW6QKNOl5cj-DJ`_e_>bWsiI3R z-clN>3X{rqPb@)=)Yr!6C0m)BC|J<%z7`pQ@wm6Keto ztR|MFU513+W7fAva?=LB-Q;(rPaNniQK*W{_;~roI_0~Zv+2SHC7|cTNL8kHW4mfp z_`N&#?Om7TS1vY}*-u*aGKp16p*Vl^WgHP585MRk zG6?48@`uuC!ABj%Z!xXa*U$Fhl>*RCtQn|?^iNO6 zUap46gh&##wwi*22C0ywcq|+U)N?#1StbkNhV|Tif7Kkx3Y|X#mP_0M;^F!4u85R5 z?_Tp6bNci#?_0~se8@yn69L2+H<8^B7ceq0J1y2O{$G`v0&1XY=?yL*OY@E?%SwK> z3P0#5fc2D&p?$zX^+y0WU|)I^#+>XFn^jm`c{V9=W%31Z64BA{)hY&b+$Y2nph zI#^*N8Z^c2f{RbnVMtK5QtLeQbvQ?!i1|fF2gV-cmX*ox?RL7{zWyGaXW}Rd^61t8OKB#`n(>qMRN|7|37fU))__V1*sGfed=b{l z&~zwt^!X@Cl^jb^ka=S^0Qu^va6wI&b6f!TeDkv&szV%3arIfB63)NUTjByJW4H?5 zIW7bgJ+ywS{?vV>?8+tB=moh*G2TKSh;}>{0Xm=D1wxBtBP`E9LMo{Ot?dR#*Q9*D zD9HB|91f-%V}V61WBkq39JXPYCnC@0FT8n7_#`-K><@;R8mV>3r=N__3>ar9;lywepf)gPvJ!EyF^r=|zP^i1*#JCC6!r2%Co1T?Hxi7!Y zJdswbYMBap-Q;zd4I%BGBLGCWPwCL_sve&UJn*N520AmeMhMUcM-&(E=?Pl4#8xh3 zlPoZ(d$^IBQoU9V#X0N4&HS%Q3a7ky(vq>Kk}WcKUrbQ0v5vzUi^0fq)>=9`=zyq5 z96p?Ih4^DoPAe96v+!i?*3w4J*uS1kSSPhsf#z<$fX|e7cCp~zr(ZgiJoyrz0l}xt z+rY3QbKk9%p5xogBQ_y-m<@eu+_zom({|WoUVfZQ?*u}7f5+vWhU9J-kh9d#qCuZF+<@B z2!`}|V>AHTPDsDyXyZw#vXYzcQR{|dv&u|P7#qI-D_`|ct!)l|JMd@3h(1n40tu_N zK~X1s{3X;026Nowi(H2%u$@SG-!u1>ZuA6awp+QE=X!S1u66V;*KT|trmL&9H>7<> z55grdLSGkn;Z0ijZr$5L?(Wj5CGm2gfx<%BemZz$^pMP-u2l)d- z?}!P9yxdA)7=xt3<>Q;a;_@8wCj7uwbYLdzAG*=Lr(r`ML49Sti|7jtAZ^5f;j0OJ z$_3cdWN)P37>?IMlQAp+X~^rqfelpcJXa*+c@fTgD&!qfVV9Y{1>qG;4+4BPwiyC) s8|!*~4Xa@^J8%hCPWstmhwg#c9Q>8h7EoFYxtCroOBv5K!MKF~2i=v?SO5S3 literal 0 HcmV?d00001 diff --git a/test/lib.py b/test/lib.py index 723958ca1..ef08c2032 100644 --- a/test/lib.py +++ b/test/lib.py @@ -10,6 +10,7 @@ from array import array from cStringIO import StringIO +import glob import unittest import tempfile import shutil @@ -46,10 +47,46 @@ def wrapper(self): return wrapper +def with_packs(func): + """Function that provides a path into which the packs for testing should be + copied. Will pass on the path to the actual function afterwards""" + def wrapper(self, path): + src_pack_glob = fixture_path('packs/*') + copy_files_globbed(src_pack_glob, path, hard_link_ok=True) + return func(self, path) + # END wrapper + + wrapper.__name__ = func.__name__ + return wrapper + #} END decorators #{ Routines +def fixture_path(relapath=''): + """:return: absolute path into the fixture directory + :param relapath: relative path into the fixtures directory, or '' + to obtain the fixture directory itself""" + return os.path.join(os.path.dirname(__file__), 'fixtures', relapath) + +def copy_files_globbed(source_glob, target_dir, hard_link_ok=False): + """Copy all files found according to the given source glob into the target directory + :param hard_link_ok: if True, hard links will be created if possible. Otherwise + the files will be copied""" + for src_file in glob.glob(source_glob): + if hard_link_ok and hasattr(os, 'link'): + target = os.path.join(target_dir, os.path.basename(src_file)) + try: + os.link(src_file, target) + except OSError: + shutil.copy(src_file, target_dir) + # END handle cross device links ( and resulting failure ) + else: + shutil.copy(src_file, target_dir) + # END try hard link + # END for each file to copy + + def make_bytes(size_in_bytes, randomize=False): """:return: string with given size in bytes :param randomize: try to produce a very random stream""" diff --git a/test/test_pack.py b/test/test_pack.py new file mode 100644 index 000000000..0b9e448cb --- /dev/null +++ b/test/test_pack.py @@ -0,0 +1,16 @@ +"""Test everything about packs reading and writing""" + +from lib import ( + TestBase, + with_rw_directory, + with_packs + ) + + +class TestPack(TestBase): + + @with_rw_directory + @with_packs + def test_reading(self, pack_dir): + # initialze a pack file for reading + pass From 099ec0dbd23bf46cba7618768e628ceeac7c2e17 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 15 Jun 2010 15:17:29 +0200 Subject: [PATCH 0012/2375] index reading from V2 index files implemeneted and tested. Added LazyMixin type from git-python --- fun.py | 1 + pack.py | 190 +++++++++++++++++++++++++++++++++++++++++++ stream.py | 4 +- test/db/lib.py | 4 +- test/db/test_pack.py | 2 +- test/lib.py | 2 +- test/test_pack.py | 38 +++++++-- util.py | 69 ++++++++++++++++ 8 files changed, 297 insertions(+), 13 deletions(-) diff --git a/fun.py b/fun.py index c766f8e09..883062eba 100644 --- a/fun.py +++ b/fun.py @@ -113,3 +113,4 @@ def stream_copy(read, write, size, chunk_size): #} END routines + diff --git a/pack.py b/pack.py index 676fa26c5..a175f48dc 100644 --- a/pack.py +++ b/pack.py @@ -1 +1,191 @@ """Contains PackIndex and PackFile implementations""" +from util import ( + LockedFD, + LazyMixin, + file_contents_ro, + unpack_from + ) + +from struct import ( + pack, + ) + +__all__ = ('PackIndex', 'Pack') + + +class PackIndex(LazyMixin): + """A pack index provides offsets into the corresponding pack, allowing to find + locations for offsets faster.""" + + # Dont use slots as we dynamically bind functions for each version, need a dict for this + # The slots you see here are just to keep track of our instance variables + # __slots__ = ('_indexpath', '_fanout_table', '_data', '_version', + # '_sha_list_offset', '_crc_list_offset', '_pack_offset', '_pack_64_offset') + + # used in v2 indices + _sha_list_offset = 8 + 1024 + + def __init__(self, indexpath): + super(PackIndex, self).__init__() + self._indexpath = indexpath + + def _set_cache_(self, attr): + if attr == "_packfile_checksum": + self._packfile_checksum = self._data[-40:-20] + elif attr == "_packfile_checksum": + self._packfile_checksum = self._data[-20:] + elif attr == "_data": + lfd = LockedFD(self._indexpath) + fd = lfd.open() + self._data = file_contents_ro(fd) + lfd.rollback() + else: + # now its time to initialize everything - if we are here, someone wants + # to access the fanout table or related properties + + # CHECK VERSION + self._version = (self._data[:4] == '\377tOc' and 2) or 1 + if self._version == 2: + version_id = unpack_from(">L", self._data, 4)[0] + assert version_id == self._version, "Unsupported index version: %i" % version_id + # END assert version + + # SETUP FUNCTIONS + # setup our functions according to the actual version + for fname in ('entry', 'offset', 'sha', 'crc'): + setattr(self, fname, getattr(self, "_%s_v%i" % (fname, self._version))) + # END for each function to initialize + + + # INITIALIZE DATA + # byte offset is 8 if version is 2, 0 otherwise + self._initialize() + # END handle attributes + + + #{ Access V1 + + def _entry_v1(self, i): + """:return: tuple(offset, binsha)""" + return unpack_from(">L20s", self._data, 1024 + i*24)[0] + + def _offset_v1(self, i): + """see ``_offset_v2``""" + return unpack_from(">L", self._data, 1024 + i*24)[0] + + def _sha_v1(self, i): + """see ``_sha_v2``""" + base = 1024 + i*24 + return self._data[base:base+20] + + def _crc_v1(self, i): + """unsupported""" + return 0 + + #} END access V1 + + #{ Access V2 + def _entry_v2(self, i): + """:return: tuple(offset, binsha, crc)""" + return (self._offset_v2(i), self._sha_v2(i), self._crc_v2(i)) + + def _offset_v2(self, i): + """:return: 32 or 64 byte offset into pack files. 64 byte offsets will only + be returned if the pack is larger than 4 GiB, or 2^32""" + offset = unpack_from(">L", self._data, self._pack_offset + i * 4)[0] + + # if the high-bit is set, this indicates that we have to lookup the offset + # in the 64 bit region of the file. The current offset ( lower 31 bits ) + # are the index into it + if offset & 0x80000000: + offset = unpack_from(">Q", self._data, self._pack_64_offset + (self.offset & ~0x80000000) * 8)[0] + # END handle 64 bit offset + + return offset + + def _sha_v2(self, i): + """:return: sha at the given index of this file index instance""" + base = self._sha_list_offset + i * 20 + return self._data[base:base+20] + + def _crc_v2(self, i): + """:return: 4 bytes crc for the object at index i""" + return unpack_from(">L", self._data, self._crc_list_offset + i * 4)[0] + + #} END access V2 + + #{ Initialization + + def _initialize(self): + """initialize base data""" + self._fanout_table = self._read_fanout((self._version == 2) * 8) + + if self._version == 2: + self._crc_list_offset = self._sha_list_offset + self.size * 20 + self._pack_offset = self._crc_list_offset + self.size * 4 + self._pack_64_offset = self._pack_offset + self.size * 4 + # END setup base + + def _read_fanout(self, byte_offset): + """Generate a fanout table from our data""" + d = self._data + out = list() + append = out.append + for i in range(256): + append(unpack_from('>L', d, byte_offset + i*4)[0]) + # END for each entry + return out + + #} END initialization + + #{ Properties + @property + def version(self): + return self._version + + @property + def size(self): + """:return: amount of objects referred to by this index""" + return self._fanout_table[255] + + @property + def packfile_checksum(self): + """:return: 20 byte sha representing the sha1 hash of the pack file""" + return self._data[-40:-20] + + @property + def indexfile_checksum(self): + """:return: 20 byte sha representing the sha1 hash of this index file""" + return self._data[-20:] + + def sha_to_index(self, sha): + """ + :return: index usable with the ``offset`` or ``entry`` method, or None + if the sha was not found in this pack index + :param sha: 20 byte sha to lookup""" + first_byte = ord(sha[0]) + lo = 0 # lower index, the left bound of the bisection + if first_byte != 0: + lo = self._fanout_table[first_byte-1] + hi = self._fanout_table[first_byte] # the upper, right bound of the bisection + + # bisect until we have the sha + while lo < hi: + mid = (lo + hi) / 2 + c = cmp(sha, self.sha(mid)) + if c < 0: + hi = mid + elif not c: + return mid + else: + lo = mid + # END handle midpoint + # END bisect + return None + + #} END properties + + +class Pack(LazyMixin): + """A pack is a file written according to the Version 2 for git packs""" + diff --git a/stream.py b/stream.py index 10bc8901a..44c7b945a 100644 --- a/stream.py +++ b/stream.py @@ -361,7 +361,9 @@ def read(self, size=-1): if win_size < 8: self._cwe = self._cws + 8 # END adjust winsize - indata = self._m[self._cws:self._cwe] # another copy ... :( + + # takes a slice, but doesn't copy the data, it says ... + indata = buffer(self._m, self._cws, self._cwe - self._cws) # get the actual window end to be sure we don't use it for computations self._cwe = self._cws + len(indata) diff --git a/test/db/lib.py b/test/db/lib.py index 738eeb851..35823059b 100644 --- a/test/db/lib.py +++ b/test/db/lib.py @@ -1,7 +1,7 @@ """Base classes for object db testing""" from gitdb.test.lib import ( with_rw_directory, - with_packs, + with_packs_rw, ZippedStoreShaWriter, TestBase ) @@ -20,7 +20,7 @@ from cStringIO import StringIO -__all__ = ('TestDBBase', 'with_rw_directory', 'with_packs' ) +__all__ = ('TestDBBase', 'with_rw_directory', 'with_packs_rw' ) class TestDBBase(TestBase): """Base class providing testing routines on databases""" diff --git a/test/db/test_pack.py b/test/db/test_pack.py index 29b348876..6faff4695 100644 --- a/test/db/test_pack.py +++ b/test/db/test_pack.py @@ -4,7 +4,7 @@ class TestPackDB(TestDBBase): @with_rw_directory - @with_packs + @with_packs_rw def test_writing(self, path): ldb = PackedDB(path) # TODO diff --git a/test/lib.py b/test/lib.py index ef08c2032..6b25876d6 100644 --- a/test/lib.py +++ b/test/lib.py @@ -47,7 +47,7 @@ def wrapper(self): return wrapper -def with_packs(func): +def with_packs_rw(func): """Function that provides a path into which the packs for testing should be copied. Will pass on the path to the actual function afterwards""" def wrapper(self, path): diff --git a/test/test_pack.py b/test/test_pack.py index 0b9e448cb..a0c8464e0 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -1,16 +1,38 @@ """Test everything about packs reading and writing""" - from lib import ( TestBase, with_rw_directory, - with_packs + with_packs_rw, + fixture_path ) - +from gitdb.pack import ( + PackIndex + ) +import os + class TestPack(TestBase): - @with_rw_directory - @with_packs - def test_reading(self, pack_dir): - # initialze a pack file for reading - pass + def test_pack_index(self): + # read v2 index information + index_file = fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx') + index = PackIndex(index_file) + + assert index.packfile_checksum != index.indexfile_checksum + assert index.version == 2 + assert index.size == 30 + + # get all data of all objects + for oidx in xrange(index.size): + sha = index.sha(oidx) + assert oidx == index.sha_to_index(sha) + + entry = index.entry(oidx) + assert len(entry) == 3 + + assert entry[0] == index.offset(oidx) + assert entry[1] == sha + assert entry[2] == index.crc(oidx) + # END for each object index in indexfile + + diff --git a/util.py b/util.py index 291855630..5c2bb540b 100644 --- a/util.py +++ b/util.py @@ -1,7 +1,9 @@ import binascii import os +import mmap import sys import errno +import cStringIO try: import async.mod.zlib as zlib @@ -16,6 +18,22 @@ except ImportError: import sha +try: + from struct import unpack_from +except ImportError: + from struct import unpack, calcsize + __calcsize_cache = dict() + def unpack_from(fmt, data, offset=0): + try: + size = __calcsize_cache[fmt] + except KeyError: + size = calcsize(fmt) + __calcsize_cache[fmt] = size + # END exception handling + return unpack(fmt, data[offset : offset + size]) + # END own unpack_from implementation + + #{ Globals # A pool distributing tasks, initially with zero threads, hence everything @@ -76,6 +94,28 @@ def stream_copy(source, destination, chunk_size=512*1024): # END reading output stream return br +def file_contents_ro(fd, stream=False, allow_mmap=True): + """:return: read-only contents of the file represented by the file descriptor fd + :param fd: file descriptor opened for reading + :param stream: if False, random access is provided, otherwise the stream interface + is provided. + :param allow_mmap: if True, its allowed to map the contents into memory, which + allows large files to be handled and accessed efficiently. The file-descriptor + will change its position if this is False""" + try: + if allow_mmap: + # supports stream and random access + return mmap.mmap(fd, 0, access=mmap.ACCESS_READ) + except OSError: + pass + # END exception handling + + # read manully + contents = os.read(fd, os.fstat(fd).st_size) + if stream: + return cStringIO.StringIO(contents) + return contents + def to_hex_sha(sha): """:return: hexified version of sha""" if len(sha) == 40: @@ -93,6 +133,35 @@ def to_bin_sha(sha): #{ Utilities +class LazyMixin(object): + """ + Base class providing an interface to lazily retrieve attribute values upon + first access. If slots are used, memory will only be reserved once the attribute + is actually accessed and retrieved the first time. All future accesses will + return the cached value as stored in the Instance's dict or slot. + """ + __slots__ = tuple() + + def __getattr__(self, attr): + """ + Whenever an attribute is requested that we do not know, we allow it + to be created and set. Next time the same attribute is reqeusted, it is simply + returned from our dict/slots. + """ + self._set_cache_(attr) + # will raise in case the cache was not created + return object.__getattribute__(self, attr) + + def _set_cache_(self, attr): + """ This method should be overridden in the derived class. + It should check whether the attribute named by attr can be created + and cached. Do nothing if you do not know the attribute or call your subclass + + The derived class may create as many additional attributes as it deems + necessary in case a git command returns more information than represented + in the single attribute.""" + pass + class FDStreamWrapper(object): """A simple wrapper providing the most basic functions on a file descriptor From 0717775fa51460335976a046072cf5c492af2a91 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 15 Jun 2010 16:18:04 +0200 Subject: [PATCH 0013/2375] index: added tests for reading version 1 index files --- pack.py | 6 ++--- ...438c19fb16422b6bbcce24387b3264416d485b.idx | Bin 0 -> 2672 bytes ...38c19fb16422b6bbcce24387b3264416d485b.pack | Bin 0 -> 49113 bytes test/test_pack.py | 23 ++++++++++++------ 4 files changed, 19 insertions(+), 10 deletions(-) create mode 100644 test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx create mode 100644 test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack diff --git a/pack.py b/pack.py index a175f48dc..2ffc64f52 100644 --- a/pack.py +++ b/pack.py @@ -66,8 +66,8 @@ def _set_cache_(self, attr): #{ Access V1 def _entry_v1(self, i): - """:return: tuple(offset, binsha)""" - return unpack_from(">L20s", self._data, 1024 + i*24)[0] + """:return: tuple(offset, binsha, 0)""" + return unpack_from(">L20s", self._data, 1024 + i*24) + (0, ) def _offset_v1(self, i): """see ``_offset_v2``""" @@ -75,7 +75,7 @@ def _offset_v1(self, i): def _sha_v1(self, i): """see ``_sha_v2``""" - base = 1024 + i*24 + base = 1024 + (i*24)+4 return self._data[base:base+20] def _crc_v1(self, i): diff --git a/test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx b/test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx new file mode 100644 index 0000000000000000000000000000000000000000..87c635f48cbdd3ef50ed7f14bf339382f9af6e5a GIT binary patch literal 2672 zcmbW(2{hE(9{}(xgBd(K*&dTMYnGWTWyziz99xMPjlC>~p})toMV67`B}1}TmM2~q zOyNC)B$V=>Y~wFNCXZJ=WU2ml&dE8R)9e5G&pDrSzu$ZB%$eWs-0!^?fWLg$V76@! zjQ4fx<(7XHr!VEZiu;rwkvFy2WR<}9M0 ziNW?u#9{x}NWk%Jk}&=fDcHZ8H0;~0S!1ubC&}!{~9egzD*m(EIK>r!k7i~*+JOuqz7{r{l8%V`*$;h zeTQ~A4D+ushU0(71dg$o?qUY>ZRRlkf+Roov-HpfiknPsQSgc&e(qq6WB`1JWKPan zB@S2bs@9j0Pu|~d3zptAo6i9t?h^kI1DSrnq$x0?CZnAHC2c>5vI8K!Ubt5DVi7iY z?A_8z*$9G-R#3e*0)XYZY(?$$*T}c}X^F@3#WAThDSD(2@KOCVt`3W24I`2RsnLBe zS3jw0nq2P#z07L^-wp$TW4myC&t@7Gr+ZVVr6g z$-e-=Eo<#hN2Q21t3Ra-jQb!Z=9wbXoA5o|tkXGKDP`nmyOsVhEBFSzNeHEyv<^U> z48}jq^E#hMi98}g93TD4@T8`>B>;(nSoROf%FTl_#jluKzhpcYt}lD|3V>@9rjgfirN;=VrfBvag&LO4B?q530k~0*+caMbZa7Y`tgx)%5tzpQd;u;Cr29|` zg4`9@hf42=_8lvAG#>GT`&3S$x6E;z*~pNXEd#Z#RO_xjl{W4P*G`Rh8+*|#F9jD) zzzDbvYWkWWLN)=2+6tU8v~Iol{rb;BG-u|EgvR$DD^I}Xt$J>yH>2(npZ;`;ap+T_ znF0E536B7_Gth=y2XN&VQmRuEmkqQ=~}@d@(%C z18d}t(ht1#T;EwyGmkzOP?_LDh^KKd&j66;5L;?~8AqfzuAk{?`@lec{4O#9*1v>p znw+nYlJ7^=)DV*V%wjyr>I#OB1M8oyQMA%DR=eLa4S{}gSy0&{e^`fw-dVq=QcpE!H4pW15dKd_d;q9mTz)fwH2@cAKACp2 z(fn9~Q7%3ZfN13_?p7)l=hMSHgo$4NJ~#DHajXZ@8?8!Uy7Gtdti%pQ4XVV&guHY^Hum*BmVAK=#l8yatThW*Cw-l zA0*q7;d9|z3{TR1LV}0_<6emXY1JSW9tQuv_t39)r0UeSghr*wy)K~ytmL%wom}|) zzBI=lB7L31T2D1nQDEV>+91(#F93cD>|VO{CQDY@>+jHY6ZJI9(SGOU(!DkXfXl`HYn@z}jw8u= z{7#8S{PZ4&STf<649oXra}3>5Q?omL(>2z%3 z72f@_1ptxy)RCe1UQ}tc#qSXAaBd2{;EHe_0IhK&fSj*j!TtDkOh!-c0d><`T|+AX zP;?oJ-3H6|xa-CHDhA4iboaYr7McJkX_{=;A~u!CHkB56{}I1>PLX%QJ_%k6a;NVw z@bp@dquPOdQ7(IQPVPbQK*O@|lhkvb#-aP;sLT0jd86!ebCf6}!;r2C_hk1|YUt&NPYZ&3 RQ*{1wQC`jG0&mm7{{mdj0G9v& literal 0 HcmV?d00001 diff --git a/test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack b/test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack new file mode 100644 index 0000000000000000000000000000000000000000..a69b28ac68bd547d49ad7502b1b3fdd42d74ec71 GIT binary patch literal 49113 zcmV(^K-IrcK|@Ob00062002Xo4tSiM&CLx0ArL^}J5_KuF~jh;B*xf-HUPumk}Qis zJlMTkgV&dQd2=w!;;H1s42lU+BavHz@?cHyOVZwJGR7}TyyD<}N~cl=9hfapawdCp zS{ns65Fc}d^V_uBgH*<#(!)Z0}m^v=PtMR@`Q z5JzowPX5;mTI2rYEKA*3`~cm7Mv$8ec$}TgO$q`r3_#(1Pm#SK>9mtpkik3X1yUzE zf&M_P3vcg$H*ovld!vg$ijL>F5_uBh;4Q9ceng9i(Nl7k!W59v@Ox~n!&MT$hH{15 zrjp^DKD|{f?eZ+F`FL+-0XqdEJXuF@zzNapwdfe~uQytCM;U%2^99@ZIe)K_0eGBE z)q6ZtX&(S^ZNkVVx0dwEODOADY9`rg$Zd6T`5>(l&YU?jbC{Vk@0l~o@)njQtX;j? zP|0n3UDmSemT6_zL=tVvEBB8Gnc8f%Xi&Z9FlW~P-_P^>ZqM&=ba2>Br<;Qq#6zNC zd!E{{tjS~31uf zA1Mt4LOdA2F_?57#dHY^&~_Z)A3~Py{)~= zrH)kw6#|feEhgZJ?qv0xTSy1(TyqROP#D1M;}}s;ED-=4WI03Zj`vx={-uhr50-$o zs)u*aUS1oiWNa8hF%T!!){@Fg&$M3cNliGMYfMk6NOnqpt5SR%B#3M0Y~ge`tIxGS z!^TgvZNc3S^14$Qk z0}~E#oPHO2$_-SCtP=3@kV&Y@7u(30zD6;4-cOT`%%OZEfs3oIl z3}Nn+mVRt?*)qw+wm>Pk2o4Zc7lAk+!4W=zfAvi-Pk9B^T915m6onX@$AW&$rZ5JI z$l;XNjt@w4^mpv{RSRX_+^#4)<#A6%U=bl61PoifF|zKz&e`j;FFUz6?^}b5O2Grg z{ZSzCGc!qvX^%QK$hP{y+Zcoy{X9rb>Yb zaTpV!{FT<8ay`QxDm!yM0B_5;$C1Z9J?r->As-Rr0LqGlA)K5j-2={MooaH~HhJ_& zbkON7e)nj;l;i^f7~_)X1*W_bBy(V_eQRUWaBuwTQ~An1&m4+M#;=E`? z$c9f7R2J}s1P&549gwGqiQCU4)^^4h}KJ_)Syz==z6(xreS$?wZw>$K-ANtJb7l#}&il~vT zvu{}QH{$_hKM2-gcca{=vw2sDQJC9#$JgOUTjxh97KIZ^NY>-ZT;SYn)s%UP#^;Y{ zdxx8uoSRjY!cbz;#N?Hr*%2SNzV1zjhG`1x$`f{@se@rk^)Cs!JRq$vuD#3z7Me6o z#gqPV^p=LY@vBOL!NhU{S<8#WRbsrc-Y>oRvNlA=3TA8`FuT83F%H@KQy`zLTU??0 zH$HfMfP&T5^mbV5-G`ER;BQC@6ODbnK& znYB>x&K6_$5OwbTKDNq4BVwZRgmU~d!!`KldDGygSoaJ5gHm6K?lh$&Lh|hjKq0v< zMs7Obbp>1N3iH7~&(86!bcXyAl~4=|+0?f9=H(E>S?x<1JHvM(MwbEY&yGMS#seJz zK8i+3$kE+-u+(%v=g`u*JDGwjy>p2#8(M@r!sOG56}h36Jo{gW2A1zj~W2KQ6= zVN8^IbvQ^~^@UEg=7(O=jDwFh?ikWkH%?tAXQ=?WR_R<(*rg4I1(xb!5!1sz@yy$zl zZabS7BeuQ%X-UOkm>LH+J#DY>yo{{wU)cK>rpg*+_D&|N7$JtOTAgQZXjdC|lynt! z@7f+rpRQ91iE#Pdl8}t-!UWg)xZ+x#!*J-aBVt$=&9m{rj`n zw6^R|>|C$i>Yh~!G9H+$M4Dl~o|f;6TmGge>`q!tSfkznQ`VfGgOuuOK^I*^SpP;7<8l4T>*8AK@jT28Qowra0&H{xa2 zw#sqai1#PR7#v&^guG6*$cdC*Wtz3micVY#WIQwq&byfEb@VTK#c^RnttU9l7h)}^eh+r zmvU;+MslWA_=SAeRYPJT$ZTm4S%Vt%iAE1%1m8sJW6q7REX!bct~!c*myMBsdCoD2 z7LxesP`2?&@`P}7+~yoNLxhhTb@hgZ`(-}$G&R?`Cr?CrGyC2W`?_FIKoxv%>&~=- z2ALRCtt4!P{E2#J-w|jX>l}8<4J{0zw+HSj>Q(js9TkQ&o`Vn_@9X@4CItSN@>)Gp z$=xY;qBiL^5nY^gAG?C&bhh0NSAhD^Lbv^a(s6&N=)#~if zl~tXsi}TIr75@iasJt$)GkBbRQ^9V+FbqA@udu`cT2Ug*<=sFkj_%!DGVkN%oPadjLbWSAT0=J zwNwrbI1R3*jBdqShhUxQ3fCEgXc8O)*h!ah^^{u$5W&4XAT?yLRJ#}qQiY;E$k;QH z&R>w~T`e4!71|iItyZOFTIueB8!Ql=PUAu=>!7FwC1W7Hp_c%UtXzo(I_q`f2gh&$ zKefm*YK~9O(|<9QXsicu^QAV>c6lQU7FpC-yq=-QkZ#d6&NB7YtdmW;7#~6y^Jg~e zsR*yZ%lT^i2ioiD!PE72kzB&p>1q|89ND5OK@*n5@3q0cV!8=ueBehL#voM5r6`IT zMhDS!ID$Ryb6yH;8Vm2_8@Xh`|D?5HzaUi>o#&#hIXaIe2^>M8R zmqvTCY4AmEkmEhsm%vuI+HXY+w+SO&mmy6?R={t-KL^(L4JwolqPG)xoMn*94uU`o zMc4K#8rUcy8rSYzxiIk)2+VY(iXAc!<0JmNfEc5$+S}fqHci=xCWGtkZe463?Q#}+ zOGsH%6E$ICs{^SpuM+^e1agAPiVvvj(qUFLwkpE4r4@h=E~Qq@U*ssB_d!w%&wx#nlc#A3;LvH%T;y|Yy&z5y}+0f5Fw8qLF zJ>Tdb_D|_ODT!u-i){P~W(#-%_-SZ)xiWa1ZIZ!m+b|4<&-GIf$i)d%_W^e5+O)ZJ zhrEEH$doN4rT|J#nzx@QIdih@V$i>+kNhdFoTUye{M^6(dfTo) zci=*%l@l-%Gg3TVA%V;hJ7FZY0@5Sik{48#6@;icwht*1dn>UZ@Y{vl{Cq7AI{u9c zgP%@aVS!~oDsgSfebR?hvfJ` zvNlIBdJ6cD$>`yb+c2K2>nFxev=O<-oXa@+h!5r-N1_WqwJMl7Pui%RP35oarjkcH zd)Lh!w~8VLa=rYp;_oKU@Gcb$NgZvySgexd z;;MQ5`o*-Pep)S8o5kH?y;-h)V~lzJRnOntEf(wR+eHw3*)!JfK74NVeLwjA_9MT& zzWY5eewec7DJ!&L(&|z;$XO;V*cr=85Q>SyfnkjWmOk%Py!r5HHNU?55>))y>wf!g z`F_rWVbA-i=Uva|i+P0e^E5%LAB6$sEEA;xksnwsj79rG;r~2`{MVt)^_Sb*#pZ7L zmcL)zY=W9!rjvpD995u=p+CA{cCQ~*)MSUsN8(%Es9cx>@2q$|Z-kW@BdDel zPHN>9WLhDhY%dH;YlA`gil82}%<0-F;JI)DNsY2{r!bCEIR?U%2d*1eH!f=581Vqc zijozj*adJynIs2g;nmgUBuNslIi8i~6__2^{{AS+`*z@33k z%F3!PWpUtpjITC_NJf&5N2hDewaLM>1hL~GZmkkhctqNkdV55Id($Gk4hqMO-0fZG^P@onDC+B=3n3yn zqG2gw3fjPCdoWl8wanUJ7Sh;OhHF(~lw$VgvM8QR9P(NPOP1-ICiW1_Dd9$ERAC(1{0u-pS_wMU2fjKZVm|E= zk1%7Os>}y?#Ij8ogWVhpzG(E3a@7)iv5*=o|AMwyWJw!odx+DOLc=2R;h^0asJX6P zlKNBO#kwZ4b&2ygjv)M2)ccVzrXUjiPn5GYWD*CbA0)O*w!N1%7G$Gb0M07$wYzso zFE#EO;vmpdx>SMg?NE<~cA&*v3x^ZJ`n?$MdmAv&`WnC{Ir14-hV>Ub&(3pcu*c2S zt;d2wO(Q*)TBL+>`+GJSK3+IIJGg&$Bri@GtHtLexjLoKmp3=~mRW6*my-#4iY*{5 z0{Si^Kir`PdN28{c9Ht@4>uSu6nE2$<9(i9vU96@I-5MulSY=n&Z{~lqmx+DU{t^$ z6>4iS+Ec@LvX|_1Go$IK#@7e9rXHvvnlQU;ESVzdq4VV5Y+#7S2KHDQC3F_>b+Nk` z3gG=I#U$?6i9clm_stflTR@2lrhPn!jn2_d>J3q`oR3NmaFiPCC+H*kr06IKl`!}1 z{^V4($O22Xe{rNc{Pw1MasOaAD@z=f(%)(SR3zUy^%=btPiSdV$3}+|DvqI=jn@Z} zL&pq(&=d{Z<6`s}WGVjA%3|T)xtC&EpMEd^M1Kb#46z)gu|pD{u1AQD%kB)&|D~Na z0(ZK#a;n}7`OOzvR%HI6`)$&0z_2|pyF0aNf5QipHp2*?(bc^)1NlE(JgK3{Gs0d> z{sFYLl92F@0Wt85KvuH%8&3E!lmCbI{Fc5%m(57^ug>pea)Lz=E z<;JNuBoLJERDxsuK^bge;~qA47! zLAA%>>g0k52F^Ntt<6%iTNFJ`Or7F+L%y}02G(+M4FxmvpCG(DmfBBZc*rgAf+@@! zTS{Lu-KpcX!g*JoMF}T=!CC(4^6F!LT1o{cA%ML}16pRhDDGZnZ|?qX=TG8UYvZ|x z0d7aww(4deJCRsX%LSF1E8dJGi^Os*YKl5tC?F;U_bj+aVGZKibbf&QDa5iAuo|vr z;}zrH+X26ru!WM9#x~p&U+~h}F|MZ*VyzU{BsQUph7AH-Q+3!1(o=O2F>hh~`PrIx z+V`csJILOSVHekRdxvyqZSYz_GS->C=Dvyx-;!m2galdwwgQ^jT@ ziQPyQM9jP~YT$d3H#j3RAM+D#3NvC zxgF9h3-Whmp(P;9AqlPazNHbz=9U_j74v~T4osPf{EFugM}p(8%8^11EKUDz&nz^? z)245@RAJ)~(Ewemrp}7?*D0QJNA<3;=`3lLHBD#i`GhTq4j1P%%rVo=f_SEJv{7O@q+=Ib+VhI|6DBFmavbMQKTzeUw`&W0CmvYE{Y7GKe~p#l_g;=! za)k~MjA@nSP3q@PkHb4pvb3zj^5D9fdMT<{T8XaQ+kU;~hf1-6Pr z5z19~RgbX1vdsPg{U{?~vnP0*jgdW1!!Qtr=lEBgl%+%&fHfNei2<=OAr!gxxv>;3 z2PZ;uptn-vF%88kx}^xgaY?T1LJInj{*M2U9LWMQXv-S6aO zB0FL~pti^vcIs%&$oQ3f@Dangi+qs=GP#(!*)ubWW%ms7x^PIR@fl$)k*s&>2WHpWBDzI*oQ+dWZ`&{oJ;%R-XfBD7q8~f@pjt72X{EAKYVdv4XFPvS@=7Mqlnfss*<824q8Hz1CX}2%6 zzb9!}lvXjUl(mW$LO=B-tc@@C!wVTAm8wd918Ul!U zG#cHF2K+-X4ShKkXYI3h9p~NF5AY=jW$}IMhamLknJ>lD>mc3rqQ%lpce6B@@6DcS zl}Q>;vZ+}%bCVgCltrU=?L+5Xr+wZTmW4n6J`W~)vo{Dg72Lny><^st&PA_1?l`A| ztNwXQeETN;r`J7oe(enVSC`^vad3BdbZ}6R48P`XDo>*<^qbyJ(h{QCgr9$bU;O*0 zmU#0O?c1>PR{PfLzt_6R8#fO0 zLTKM;9O@;2qtQ6hO8`%!@w|pwog&4H{cVwjH(|62#Ug?UYX*yDlqA7qE(Hk0BnaI! zh(a-Px)p;*DZxFI%9V>e82RX~NC;sCMl!Du&G zN-vlO9%I`R-IQ68MA)og2sR?>CXs&+gt@UyO7bT_O)QsCCc~6u02>F)gsXn{lUPMD zjHHQ_0ZM2crZ63=z=yd^qiAohwPj1m+wQp61?g0Csn?BEU2}n}3VwA#}HpYKKS^&8{|&e<}8 zwE$CwO}z-D&P(^iNG?;km;i3r4_@R98c8W;X}Wy9zmJ>@+|Wf-`^+3-_CE4&H_WhY zVn`zFJ?*RB*a3NRJ`9Fq8d5G)r)~l($9Gd#z`mDxX%?3YveZwo2)&skwAQ{l>b~u_ z$5+D+>|w{p$A5isbo{&lYW6AUowKLdfblX0XC_@-F#p_YWTBc^OG;?~NYmK~*6{?t9xwlne z2KHHDMIt?Wlp&Rs!}I0seh^0cS>W$q!~Z1sT?)`h+CBgx>fJzdr6#p8(;jv00+G9@ zZj*vHu4tlqL^+5+2L!kXK_)@ITVf`&I7r}gp-K=d&;WZVtXbrjH*>>l>E|N*kw;B% z(?H@{0F0C1dKb51HxyCKniGgd>as*_C#-jUc?Zp4S0)wLzZmhN%k{3o%m@%BHxBa@ zrQsf#TIIBdKTqmv7OKYJI&j%8f&tq_xDVT9FfVq|b+rg*O)mom#<(vXemOe$s#kyx z2h|7`;WY?(gTO-Av%XyPI-i{OaM=F*^+dpuTSOoNz!nq~V~hn)jQ&08cy;53@>+gC zc@0aTw1z8)qlPh1T*DhEtzi$8+8k2FIVaX~u4eGtp}b2U&Amd!b)0_tvUAxUy$1{Y z;O<~LowoGa(YXDVtDzRnK%=&_5ux^#T}y38@46Rbad@2k@&8 z=iosoWQPYfwqfUT@M~UuRH?rDFdlGws6MV#x6jWz2BlD~*S~9z-Z4PlxrM%;L*%_5 z6n4v5w7h3S3ucHcy96vO`au?p%M&GdqNXv}2N7UR$$V4R@}4-&Qq-g&ns7?j5K^4W z9ijFsbki8|lP!yVz-{oqc&f?)ebb3=ZDCW;aX~o8R<{w@HXcx~tCnV+aQR8PBkC%W z*lTT7G(3&`7Xhty-{kTP_Mbr|NFi>c=Mm{vWFZX>Mhhu0`a*1NH5yoI6vE1mCD;xjxA-QSghu@Qv$@i6 z=uezwP;=!LqHc<7P32ZS`ee=!=F zUuht@fGcI$#JyUhH!my)CR^pY&G${MZFMW%i~`#tqp5MTX=ubB1(ueqq3DD;8#fU_>i&zI`*@#+s(8t`sLM z9CqHqa;O_B3ecv}@Gu-y$T-Pqt>*LOj;J3f=oxVIsSMgBsUz>Cm!6zTvW@?=7?6DW3Qv5(n|{sC4w)z!AiTE z`hJR1Qx*f24KyMsEJ4;$H$P{!-}cYwTu|lQ?x-{m%wm{Y+ffhEB-dbQ5eTpgS#VUq}%qdnbm<6H6IPt$*jixCpf1}E)3=H#P9R~tqduV{=jC6NJ6LhIVhQ#|`5Efb*MPkge*qDT zB@~h6wN3c+PH`v>+9}|21Ze=?_U};oS{#3=K1`32p`VNdqU zafibgLlAQ0H;D=-9KcqD1!To%7;yEYn`~JG-}+I?-o%O`u`3)Jy5&(G(4+7GP@RCy z6fBl=G{mFqde+(zlT7vU%;(TT-ZYkEEpi~6K29?4MyBNBdoBlZ6QKNtW2_vAEx?3a zEYo{Xu+d@>g{?g?ih%fM&>#bXCXxa#X;coMVghOI^jBJ+45tSQq#+5cow z;c*F_Q1l1R_#K{yoP(cuHn{xI9(PZ>z3%uk7`$i0!KhfH7$kx2*^6lw(zHhfEgLM1 zD=<)20VCnBLQ-)B*jRGaMyg^>Gg^|BHdv}DH`uLwhHtj`3jsHOEZVhdV99uBF5Psd zH{#N=<&I#G62mGEQbk@fl&h()w91Z9!M>IPv55dw1h3%&h3L6)Nqqi&J^fj@kTLM9 zXi^lcZ=>cBC2$!fP4-Ha$=p&JqNvsACCC>4LQrjveBbap(b9^RcrwwVI>yO$1_MCQ z;im%CXN4AtzLS7W2jsN!Dh(r6nG*zX6uws37ZUKRJiiO8axcKBl=gp9{;rbm(-iF zeeFpeHcuU34UFoVN#=3q@Fw2K52k_i>#^pQ--EN1aCwLOg(>7a0`_QB{f4wFNOOUb z#EU}Y;bY#kJhYZ!wh+d}^BSMAbmt6%v>4!Pu$L>&p#o4WL6DpS zM&tlbg#fA3>Hpdt4*Hj!{#ZO!g-;ErkAvZR>aPl0RFy6CQ>P04z3U*=Ku@a}f!59$ zwS-@T;pY;XH{?nKF23mYG#cIx+ZW?1C>NWcIUDpZx^Jt{Twa0e z4bIxVbD9P1qLDF=-4u39u;OH*^Y3C%0S>}x zv|k5ZK(f)}d;pp6eiBc=An@0xg;`CfBZ)I{W9h^ac8dUy4IOWKeX<#(i56VT1`1#u z_;@UkI(`saFcibz#=2D$-;kwJ*O9_ez}Q&Gl~%Z9y16f?SIe|G5?u=jdqMIDFl7qC z2DBFBI(DaN9SENjmNe^Qp?z!PC?CTSvep2YHppu_bKB4hS>Z_qz21QAN$qH*-5Ym? zeOgmB%fGC(6hXH$DuqtRPoqPsFdf7s6(%HrjmLn_A**A^mXBf(L#hejsm}R?v$Or^ zRvY?Y%4t-!Bf^eo>wVn(D|9%excB~9l*Fi883)t*&A9Y3+VpEtU?k^z(P+vHx0h4r zzpuKTu{gNHWDip(g~;oPDT?5JVj>aFffc=EV@>OT{4Ma$ns*c$zH9yE@MUZJ`TkLH zyfu{Us-Yh}$)=bVLYWT^<<^Y@3P?P=dzL%z=&PfHKa1v^z=d3Qfx>5D{495J zPWXU}QabRUOce_+i&gd!^$a5+9N=(2qk?BU%4^-GfaHcH6sudE~kouNLBT-K+qNgG??$dP}vEWQKZqVwQwlFJE*yf zdFpUl6>Y!(46jAg<~9_z6!ahX^AE9_p(f^oP0=kPP;?rXC47p;K>*xN;{~S@mJuWr zFwJ$YiyoOO-gcSmT5MXWh(q_2jp(t3h4M_ubvBxt-txmFTdwl@9?fP-7gRN!F`l}x zPSx4i6qU1ei5hp|!l1@bzKCf~m=63VMsDl^uokQ1{M_LbssY%}13ZEkhYj>Z2An7A z`^I9jz=s{MNY6UrsB8g7)!g+Y<<0Dusav&3M(?{HobwC#c=lc#mpGD}U@6Woa1_&d zfXv1er=%Xq->*inRe$)<>7R>NM0$Ivl1JzFpuJ!R-Sb|*CNZY%v}LUZJC0G$(RJre zls?B{j*TK>cBE{jFw@64 zD@QeT-M9V05S+N-a4;M-j_vsQJN4w^0kV8Etti{u+dJvxmWEV~Q)j zbdKE28`{RSly&{m;dU++Bt_<^@cbK<0vRuLRJrxyJ8AJ*18jrDH@b`v2MO#K@>Yg; zSXSf@VXAJNNh_b_vOPX~m(L{uHX302FiuR!<=jM04#v#kG{Ja2DhbRc1ND$%nvsZI zFPPu&dSHHpg@sYq)v$f`+3AkZ5+8qV92^~16%*$ZmfAl zA>dJMJav80uPC>Vso$&>JrZ!=A`e4$<^Iji=T0?vgg+iK0l4>NpvRZ$`ZsK3!fO*y zix>CoM=q%cM`*bSpfKh%scK=PUA0zqTgY`Qe%QGfc19q>9k5A1!$KiP0XHn5I*O&k zCu^G6=Pj~L6e0MJ}d*+i$t^vWt``2f~SZlmHF4)Yy3iSvdi|T zuXNI@4GY~Xr|820quj}slqgi~f6W%qdI%xiFY*5@LOcQm54C7kgU3=$1qsr!%8jl! zb+n;jO-RR`(}kVfiEu!Gmsx69=~hqkD3K41Nbe<%=JSaQwU2AVx!H4>Vi<915VB#1 zR~v38yba=ru1s)tKINODwHsV#F?(zai3g@Zval9OUHXtg)o)pps*PisfeC4fj*;%9 zt5H@#=yaGCQ<7w0T4Z67N}*L^a74yALW(&W_4DW&&x)}^iM(0Aa^ui(7ZVtDlqJ>n zbU(`1; z*d{0HBr9>JlHgJIjoKF-=WN)!a4y=tQGR}6FRPlxO(i%qU4R9-x3||4j#HdnIZm_5Ocu>$40ABuft4hV zFql_8K>APP#6hrWpoO#RccW@M)JuQ5T^XTzRBL_6&=hu=;I~XV?qm|n+w~YM!=er@ z%+O{pF5^`5S%btWU^dXI9eh8*D-MfglPM?~!wej($(hA0Fl_Ol!(XjB(t9>K#>zE) zk{v^xF7IocA%`w!tn1OqZ;7az97O|F_h6s%*zOaHbCjUxn)rPOG;WS*i|?eR&f+G) z{1jP7pqHhL_G2UIEwMB}%#k9^a}f$NWr0FbVK#Ct{1Gn*g1B)WI8Y(LL^T%uqFldQHg_m9=8SD{L=c9^{o;lcMsN_Q!mV*}A0+XhYZCy0JOM#Do?%bbZXe zbd()fX{(|PWGb@NLFw#s>H471i_=Y*r{?!IaHyZU-uR2e7X)ZeHKdlqbuiDUpK7&^ zJ4vE>rY!U-er?&~_b&%u@h1MW{b#sfbZCk+K7j0`+5-IdSi%az%*#hNTHgW)FlTSV zrxv{bx;`IEg>+%v<=vG$DPTq<_?qDk$6nMoI&{zgP3MPp8fDs27^YU6X;FeXULv+# zy=^|zDz?c@3c3>OQb8%J2h>(A+tZp=y5R07+0;f*IqkN3soOrwuvOX3zu5sxo>T1y z)DfsMztWS{O_g7jE=;_j+`K&O2A((g?3*S-CF#?}U^`YyHZGA@m~WdWR+7^ zZ*+=+dl4QaX!ENYES6ZdV;MMXZ`y$rbjWl2>0wJj1-aN;uL#^@M7pMbGTk0*Ro6&A zU)|i7ie76FGkFK9p07!KIePK3Vy2mIED*G1VR*W_H1K&}$-vmhi@zcGMEF$8K1Epo zY@gJN`Ou0U%e?INyO&p&PW$w9*!fkIo=l!js49LkIEkr0nl-7okj9T##d%W)vm5wE z(PNNkh1=>%RUOhh zNDlMP;3zsK)#B|K1McfMI&~1)(v1_~D*}G`x)yRO@rTwh}{ z*)^Kt0j=JuT$p3RV696zN7bZVM_rdrLp^{?Vqu7?rb;W19g>jIy;ay<@Vd6s9}F+s zJ>@}B$*|LFkGsEi^6#T}gW)*;l1CBgOLsJQ_444bXn1jU^y=t{LWhQ$m_;jxPK8W9 zp{>Is!cV_Pp;VNYR4Uz1b{Z{VzJ;zK_c`x~Ep)VbXn|x?Wwz4PQ+OV)J~r3FnUuN9 zWgOiFmCjIDO#(}*^3bE9v8c#Ms66lV#}sUK27O>YJvSh<91{kh$O6Cz1%c-c z<+2{vsWkLW-7K9&F?$p>p`{X#&#%z)+YCEhfPdnHZBZkfdWl@P!Q3n&F6Dd1dhC@% z)iubqqfauC@#GgTAX+XPy1we%Gym%FqY%ZMld1li7CWCKtIuHs)X0_kW~4d2J~VE< z7Ir!i@jwQYne31gzMUt~v6&rJvkbKJt-`A(r?uFC>k@fQB~zX?=Gpcx7?pURv^+9i z4`aOXLp|hQuzLN2KX}tPbs~SFPM3A942CLdc}GE5$=b!8U{Ht!T}jm~DKxnz6J*8n zDU~)ly)++>rK9PP#YFF>9Q^asVpnK)w6~WIjK_SY)26tG2irb6k62LLh>_+^WaAEMVfup`95OVzr%lf_>msCV;L)=_nQQ*WS}Jo#S>lD zv_AC4l|CcO6aDEgkU4GU@LRn+VLCzGt79C@mn*$e?U!U^+R~&cDawrDk6{!}LH?j} z<;Fgj(cwMJ8tSM9?N|8X241Ga_k^xS`mH{_c<|mT7CFvI7Lw0F6%5??4D<#mT<-MIa>sKWaUrUD>h>1+sH zkIB7}<4BdLEjM4!I2-i)$o)K3mH(BLTIrm#0Avv?8&4)lzUzk}th**>1${aCYWA1K z))o$puh*ua0!abxj|yjfuUKmZ;Os;|JL*g?V6dx4VAWs%2AJ|JyGq;-J$5VZr*m1| zDIyqhipwPI<+}2 zW$dpdp1LiT0!EL33xHzGdeNY2>GW^YlDYng1OiyG0B!WDYTt}BwR<3f8% zn?N(aD~~5_K7-y4VaX~S%1Wg8U@dcUBcnvgdoT$>xj8%F|E)Xpc$g#Gd=g{Y-X>3e|^d%unr_mp5%wa?NSQcO1Pe*AYWOP_*gjwgcr8cDXse|9Ojv6%lnClNU!P2?HJn7z+@V;>CJJh!?G~0l(>orm zTXa`?ejFnCI0jamISUZd;MR>d4!^>TwJ6E%#`Wc)H}WW=?5LDXJzVHYY^z)Pn*6`q zZ+%2MMlSr`q&f~6-qy|MrZFe?nD0|VsRnaBk0$QCZZupk;~2ycJiAKYMoMG*6F&Yy z(ZS{+JqWCyap`)8!ew8y2HFvb4NI<3EhwqX1T`gw{~UR@oCjV2dmqfuErvxlhZcdG zUW8GrwUdoG)tvpV!O~seftbnpQsVP5p~q=V*28fN_kMz}j%DD00Q3AnHtFS!jp9#l z4^MqI_|bPDE7889%TRX6$+vwoN+ipVH8cZE#a+~0V@g~vd=>4eK7S-P%5>?_u?bt8S$XBG4Y$Q}Jr zBo2r2fG~9V>III64(_Cf56r%L(Oe_4n2Vqe%-|DWpC%5_^3z(<4Afe<7+h3mDfcOz z!fvT6Tway2{NkiD0sZITpEjs-F%=9wI`aUG(kl;Pa<3l(QHJh1C=9<$WPJceBY2wD$w{`8dvBEkEH&7ul9w&n^Is2FghN&ZoIK;cIIQ3%XCW8JF zjcEm|h8SYE-9Zk)RFs_dtoW8#`>(hzh=1)%37>VJg73b=*UC1SQ-m+Y;6X>_xtoVc zt05qlPQLliNwzA*<^b80WF7{oc7SQS_#FTP%AlcF^eJg?3OlLv^S=v)m%eeE8JU;9 ziPh@QCXu(p;h?R2Vdi(Wlk(*}Gsw2#K^-&tM)#3}>C})yTKiDw&@CF{>LIrv*J>Ae zns7r_d$VAg>YT2);cJR31mBGM#EXGE(|fA@+0?n{}k^l^mu zV7fgF2ai6q&pHk5-Ud`snRD8?K<1Czrw#4q22|stWq91$9lygUHbWfi5NAWDJ$5>S zo+i2a9gUCpDjlar4X?nSXjUltRzpT%iWRIWxj^|P#(P@pfY#grEWp{>`p!mdF$1^3 zDx?cqq1i;+6O5#uRYK@_#j|MzD@(cyYZc0rLCoVhEH;W(dcqEul;dCnSb0Pm1(x}M zJKvpy=2>&Cb5f3=blh+W%#&SOf%%fmmsd?7dRxD9%TWo-oG4ShD9(EmEO{>t!u&k| zzO+c=GM9Sd)MB)jyLwrQPp$Gz8vk<7+`Z?mG74)H32&m6({sj#jNtF?Ja7|--!(Qf zv9N-C4tg~b4@uM?dqlSVA7&k5Lc1w=oSo89Yr-%P2k`fPibG#qk?O32L7&EOY~Uu0 z4TK4yH5U!kM3SrMx8J3$8y!B#p4z+S|GSi=ua%Lg;Bhfuyo=|k&xJPlQ%9p1daH4o ze%)s2eRh{kj>l};zU)@x9%v7f6p9m}hj{b{czsyTXKyf>1}K6UKDNC6kUO0hC4wjG zI7VCKURfbn1#4ScmsC0m8XgIq0c{92nndMM)ZYb9$*YpG=nQ{)WQTEWJYg;a6(a3I zjv1vlpcR~K1qM-G9-Gv2&jUNdT4TTuPq5zR4r2b5A#@uI4&h+6gm_)t@D6{m5O2)F z+VUzWggr@HkpN6>! z5Tp(oAZ`jbK{o`2Kuaf?i$rQ9mDC&d-*-n!vLwG`8|EO0b>uy~d+vp&9EnsWkg|)L z`TXiO`ZzkmCm~@Y7##^2=T!pirCR<5u{~bB?8vMJ=u3>%%PQ^55{Q-N*6keOhAOr! zRz)FflnZ0opQ9H&DGP*!Vmgrey@7=9b~^fNIzZ}xcth(yi1MgJ!h*_*93LuaL?$6& zLR$PyAVU|r@?6P`C1~xQ^GmKlTC-Ut4p?A4OuXWn1;{`O+FOa{f|l+$!yh54!I~}g za;zkRd+mCMU6+VBItkdr%juq(!y#7H5X&=d>aAJ zf?4smlj%XlNCR>RGKT*FBFZqV`FcN6IC?=J<~|h8-zxzY@kjK4X<-Jz9q&l$koj!% zJ3`h^J0t#pU4XlgCPP;1{OmqOLK@IJ)kC&RIdEF#khBKc!$r$=LC4BP#cfw`d3Sw1e4Z`3lABMn>#I+*u4pztzv^k-eVHvTZx-`& z#O{heefd1QxVpTWeF%pgMk*O`6ALlMr%eHKI-o}<%kEf-KFb}i~UN5>&E8bxB8QLP6P8e8} z<6to~ge8qRgU#5HRU%~8G06&>LqsS$VziAA6ef$xdf}hg*V4ST(&uu&vGvj+UNsb) zrVhQ&hkY*W@t~PvT(wjC3)lh*^@vq$SHM!COBjOymZhHzMn&JIa_mbUbp9JLgXVBC;kOu0fugjdrz^p1&t}+qx-0?=_coM6! z%m8{og}((PL=S0GI3BqcT)I6POqE;A3%^^KpZzBMa9rdV)wN z@4oO!14)4qG+%}6X$2C|u&17$vNvHf*x|TGp~Bcfj`Jwef*xq_0ClJlhcbe~ZRh~d zWcEqtf)z6AxEi@VyP0!!Z9+Mn@lH&q+N!nqDbDP@=D87XjaM~Ne=_w)9vW;1qkJz$bWInaGl-TP@AP3U z;3e}m9A364eCLUvVv|3UP}lD6E;|`v@#Az=xp!NVygsWh6ZYyA`(Yq^eOABLk48rz z6Kn%C$k+dbpo;z*9Ce_YxLJ6dZB$K9+%OQm@2?o`5d~;3RVCB|f1?8LId?4PEMECW9^Nz zF`dK?j!ri*@t_k(Fes1r9lCz=v;q0)PBG-*?fVaRXNORR+{9r>1i4j)@M*&NEK1eQOPthil?xb;&NWc+{Wf@U|Yo5qv zOWhx+iOoFmTI)cwWEk5t8UM4RaYfgdM#KOUU99E1k}mNdpDLc`?cjieQRqnB1fnc#+HMsPMrE8C;CN@!iFM{dhPzLE`)M#{XN7{voSbkuwC zA#}n^Y>VD4<|)_wT~7W^JDeKIPM49giz|7qi!8QM5cgije^|2n!MS4OEb*eEfzlL= zHg#`^IuSXN4|;aqfi0Fj{pw8?j?q(j$byvEt(_TTByGzbFz<26XRK8$Vq6iAip_CP zoaR!qWfsE?rG}BGeC4RT+yKfPh$7Brl>_L3Iji{P^ZDhHAA8icvBHoqi*;M)xgMfydfoU=v86$}-uFU9&FhhK@gc78|H{n&&*-GugE1>`<=U9< z3famI**1Gwj^O4(5N#V|$fEr9&2?sy8}cve3giO1EO?xSQNc>XKoC7=zha=58Y(5} zMaijzN`|xBKYXri^+0sex6UL??%pqIOqe}u&3X}yXT}ue3ztg_TqYnCFfi?)LNLbJq zuS-M2En=1O5(yA;b-#!Wxets@y?n@^_i+JPON&6Ri(b zvzTP4oW+O69cSGrCEe>)bREAX?0a`myRfLOm!Rsr^zA9VG}6^Wwg{p@MA^%I8pMpr zElOu#czoEsit#Ri2@Ds%Nd94RtekDiYSZ9ZkqMkgX|LSU{*D_T`Anc6&LKe5W1UZ@ z@ubd&)x~*w*X{m;uVtytvBG|~|9@PX;^Z_NQAaEG1J#f0k-isroSl!)3c@f9#?R|h z1a{HVH|R-p;7t(kqiZu4|D@7(B8up3Q{jR_#xoZr_i zN7^$wAWjhJjtV&FiPtcPY)ou=54O!Lq67<}^n*k1l& zcO;P`JF3MC#$kkax!D1DoV8X~&IK#OgFv^{M0(u+Y$ zl*K|KRg!9)zJB}8kd!RSO6o1Jxj1~xH?Qv->O_>X;3d3%b9?t{{Wd+pg^+w$r_VD` zE&JSYP@7LYw@@k#1+OgwftEYSo~Op@4o}?f+U;JFVG0@KnlsDSqoWJRRnvBs2m68{ zRH;=1Tk(ZU*mPydHQJK-T_p@?ZaXavFld#KmTRyI7l&TKR?LE_R96?U;m|T;c!9SG z%5)pUF%M~@pcYHWSzVhID2H2W9)-JDJ_C3K@Bg{I?cEdF5EkMq2_+MCr#W7|t9X^m8F0PyugJ9RwEEE2x`Nzq)04R4fwz-qHC>Y^O$;eSaY zF8pC+$K*41dl6QsA|Lulf8Lr@ZYNY8YqIQQZUr*GVGop<=P4#yThZ3obkT4F_rg|C z2r?$!c^KnaN>Jp%u!cv0hoT|pZ%TyUg+wW9QiN3UkFQ+g1ds&*5RT@C9Aj-lCk#m$ z!>XCy(!8jcoI;_g^s*jlnW_#SP$FHPbAv;HIe%mI6Eejeb{Na7$Whrf zJ?()c`wm2d-spTi)Bmu&=fK#;>g}9O*xuXxE^E?nY4Rw6;d*YO4rz=6NA@M6goPiB zfS`$w-*+a)@wZkmt>5*Gsv0`IFryQ+kq4A=6CX~;5)x83V${}N3uTGhHSFnj2dzV^Q@iYY$Mn_|2- zd_tkcIZXuoFcIPZLb<7c7CqeA8Hv?h|9%Y%Iyr@(=ew8ZOSrlML8k)FuHjD-F@E3) zY;w3px8U^D_v8vF1-#^=M11ry%@81d%yj#xxtbn!lm!Cl?^4Ha$0Sajt^jTv_(e zm^ij^TdQ>*JDtv%b{wC_6JsJV=UU8YIy^uww2<+1I5h0967pUPxiKc)YXY2g^fIn3 zd$OPCTo3B??LFi|59v;a(}6MR|6&sAeWzZ3+hmg!k2!-Kjv@h}uCGeij^eP?hNzVdoXF?zP$df&>Izbfhk0cMTfEEKHM4nkau@pIC>@(u8d}yAQ%G zOIAQ^$86!dOST30Qatbgvx*ydh>BNX>O-)F2@Nrr-c9|4J-B|#SrQiIzo}O))pD%q zr;B=`nm_o2Jtr71$K~ zOas5{kHEuN;iur|I_c)!gfT7r2MzpcIv9X5J@f7eexZSn`vY?{aV*q+Xvq~T_&c3+ zknD7=o4z@At_{0q+I#qqI=D3$ShpY=oorlC<|hrjYYi-$BKb)7_fNu|Tg&c^bMU`u z;Mc|&yx16h&NSJ>&vd)`&uQN*8(zV6y9&Nnvicsb+f{=M16ym_BV$m2>vq+=>rb59 z{^VLkY7Va3RoncP-h^eFfL;DrC+EoC|O$V7@pd;Y2uX|BRHF{pA3D{hB};zc!zf^50J{5Yrvl&nfeX z{qIPQu7F|xsn-gJtMC&ZeJB#c$m0==@DhC^=J)PnnHq~==|hDO`hK`Ajk(Syg2g$NqHb(%>Zl(e@xWdEaL7xDy`l!IC|CzFLEt3CFj> zOEQ}ffmWfY^%|U<$x6fw{(xd^wj)QuWiznRaj}8t9m!gRY2Z1syrmhhAY{pvvgObH zFb0nxf}{kIgEd@ST1PV@B8FaIxdb{C&rCi8u~d(;!#fO?YeA--=TMu>-1$8~WPMkn zJ6P|1sQ&?)@*rJCeJB> zQytGzFIR}A-xEq?XVpAh&oF%x1~&_XuyPFa*q<1XIAq?4WFpC*GdPa@XP!n#T;aF# z4tQb3B#_k;R6z>HESh3^(u%H@{RfkhzFiH>JIAnXnGK6qDT;V>p;BYdT&NrX#}_I`s>#Fl3B3yQpOr3nCXno3Lo7AK_M``$vPY9=Cv~&WD1Q>*MOd;Ry(g6ANT*2fiCL#JiHW% zj5A29Vh%nSEX1;K3O=||F#*#pMRtWXpB3}^US2Bxys%0e47{h3d zt9G=YV3Wd4BSlsXUKmt}Ioi;kIWfBvbvaPpN;TNEZoa}U7RPS--7m(Si9K|gEgQ1U z&*mL6mQ902HgqoD^EzT7XpNk#ZXnyg`W`@XT89C#GsXV*@4+h^WUT#r z{_K_A4?)|JyJcGe85}#Mm}RXJcs@}_)4`jAl#NEp2D>d)VCSG|;jrHYVX#|MFVWuQ zP;KIF<5Z~0exUeMGtEL!$W;^KMP0JuheaG|(8d#buK}E8ge9T??}3_=g$pSy&jlyN zo{_kKz#}n#8Fy|yh<$oN`L#fYx8d-wNaFoW1+}1GYlnfq%haN0q{gU-Ox4guL!T8N z@yS|6Er(ceN=1E&8?$a(1Rj4>vm$|ovwuSaPLem=fIbFu)Ht8qGjX5BOJ)vNF)Vi zhZ?+W;`6AkR_aESYzFpdOL7|$6fCL23zBFD=S;!&cy&Do0|*aIh2a8%c4{sN>D)X% z8CL!1Iznm8+$7=a4fs*I!K-S-QLB?bTR$u~nrz?rv3@*-s*Gbam93uE2%*B-VNRd`QIzZ${BN01j&Rqjj zwyvpM_-VY-rEkjKZ<~i4r6LZz5JbdB9}VP9s$=weX0KK|F;29@blHvLUHy2^9Kcb9 zfSw*OwBSvO80r!71Vn(X2TZ=+nCj}fS38;LLDSKfk##!)DR)(Xp=p1nd8Q|1sf0cy zL7h&YUaIW2iNXzsG6g^B(C*K6`0XY;P22J!6Z3R{P8@IeTr752J`3Cz*9VtJN2HL7 zHD7O(epmg$#Izm5!ZkGYYfzX=+xlXTYA2T`y6cXns!|1blp}MYzI(_@8S_4U_~30;qq*LV(P&G~4KY zb@~UVVV(1QoJ46Lt4Ru{hOVEAbA18by;5)#>$SZYI!mg=&~>6aUvV$j1yHnxlA8vr zEc?>plfv1dli3j!Wm&5%zN`>kp70ooVJMBg$~so<_EAa+!YWIs-txErF4CxOgnB|O z7;L@#?+&=P{|9}nf1tSk0eGB^S8Z?GHW2=7|B7pib+X|&PP^s9j16!Sr}bL9g`4bs z5NL_EiAbbMQcbd=|9y9)EK81*R-Yu^bI-l-?noW?yU>SomECKx*;)wBd+=g3`VoH3 zrBHAVuUX2ZLeO#dnOMu1ui;{Ld3pYBISpTTpW(NVyt>pq?!(nq7}# zA{7bK!rntFq)77=f*(iU^{RGuY-h{q5hus z)v1nrO7?`O1>Zggv&C$FJ>U5@`wRK-`N0#$3Z$}yTg(@>NwIFQ?(CNKmx_+~jMaH$ zU73aiGZ~NIbGK8LRx-TI{bKa*xZ82x{fyZyetc3QhJMT}D?cJ>!(t&)(pXQ> zU*|HS?1!jHH5`hVOFOO@N)%SS5&v;qbTx`~W5-Z`Ft#OMbKJ>@djv({@ONvShUvr$~aL6^o=J!zY-g)CYnZ>ZyDlNezc3XFEEKi5K z_2b&e3omDHr{Qmtx3i0Y_P7T@;9rh@A=^E8@-vKj^*Hk+4%eFVG6LGzLV&{&NEYH9WTDmknyjo7Ci`IOkdjJsWa zM|B5{1>eWkP*M3ER4cbP-l@6*r>o&7qe7$`%RLhPj zQ(2xc`&HKlq;lY&hg9Qo9sF&3OMEZf?8ogK?EHp=n$-Yv749Zj<4G zHGa_5~zZH`xrB`n|qt|2hk6c;MWQygN<3MG$;{>UGSLwjd?^`c&B zb;D)o+&!piKWXAd8Kwl=gw6s#MW~Q#UHyJCTZY#QcdT3l8Fh7r9bM7ubsIGN`MAed zeP~oTTfTcUU68^*-A(|(lf#+fXfWSyjx*>~eku&tYe~GRY2vXu1$K($C*r)aZjcqa&=-bRX#f3g$rxy9oPDor@c# z@I@5qe?+q?`Iz$@uVsFvp#i*B-@%Fl)y=r#UFvb$P^>ZUSK^S~$8BTO+uOr~R!Tq9 zIxTJasIY1De02k7tZ~*jos}1Izmb+#J&2!ZOe0$X#RT)hU(-@P} z@%L`u9|4KlfW?nR&1K1XoNzbm0WFy}U8V7?tZBLx$`s|O)+ra$v+GwdqJOK(LU+Ft zF<<4IZ#sW=hh2HVHj%hy@VMq(+#O|y%D(=p76$DFPS&5%e^wc6Q!H$-8sL=)uhpNw z!0i^71H3D>XgJ4F<6H3F*G4dxhc(JunCMg2hEb`osgwai$O_4&u}JL7c7blnwS<*sp_5Y z|K0Dddm@u5WNbW{@v~qLNg=^;fw6j(Se6RSL0Y|L|AO918nKX&G9fK1Kn{XllE<3K zxP-gYX>`Mfv)SMg=9Pt^6Cq2zdXu`baq>t>?R*cH z8lIXlgqbMdVU@Z1+8l^$?8J)~hUV+YO@I2E))0>q$4RD~-W$4+dw?*xdge~!dXa)D_>p?wG1~{-x ztCC?YpPH7h-EbL!$h2NgC)4Pym&!Op5IhhDx9kqR<*W+%;yqQFy;*(=a~!+}bB}HC zP5?)^-~ArW&-nT9=DtQYyj1-pNK#{z1Ku2``a5H`f(__|3V$DgSq43i@m0G0=wy?ABU`+hiLE2pOi>hoTklv zG@QW22}~b*%cwu^`|^5?9)w)%C>QTZ&#QRXUWd=QNb)vRb;2=63`MKqMQXLSFAkBE zAtk=6KBTv2)Z(G=W?pM7z;X>mZ1E!S4UwXL!YbZutDU+~>x9KRT0xWHqM^`dBh zTh;5a0lQk#F3L34?daYq$Pc8UR8LhD%sN?VgJ~BVu;LFU-awP|l`PivzeBaDAXAYA z{{d7T@(#Hac${s}(F%ev6b9h?J;ecUa)dsBmnIchR|VZ2#&*;}PSGVkew$E3>vI3j z|DCZ&S4L3<$MX$~N0DQGIpB#!F4Km#F{9biU|{OBf?8V~$)XtQ327#Yy|B$rc4o97 z8!-U?rg8SEhHJhEq3F>tx2$mdtN&%glr|Q;Frl|(t5$Q|KP}E6<#4^1CAdnfjj*JE zr(5FrmvHAjBuU~{G8U0hy7JumU%d7POSNv4yc~F(ZBV;T12GV+&tGBb8aSm%o2yU+ zibO+^E<%>E_s*-Bwef=n@$cB@zy(CJ^2}H}JJaJt8Ycd5f7~C$)7}1299Ul%B=}9T zm_k;GPmq)mUaGT@VUFyBb;?mpTp1bokiB(MS9xR|QsS8^u=tAU!f5cxly|0xGlAxB z86oYq8`gDa0KY76(7Ix?!W=;)gLFl;bELHmzC(C%5gH&Td~kDs7#o44Y}RFmoOj!i zeU3k=Lg`>wquu-;mJfBdO-0nF=MBI7R0gfCcB;7Xp;SWkU#sTYq>NQ)ooR^adnpBB zKa={TLfGB zDJa-N>C+K&iI;j!B#GMo`|jSSwic-%dgJW4J2P!1bs{9(Kfc6w&o`6!A!y^X(qbQ~ zvHbaVKA+8DcnH3Z=TkTjf_@l42%Kfvg7Fo|jpkk%4boVUj<4b!%T`43Uuyx%flmd9 z&$ZxQBn4<>4w}U~f`D_g>!)};eaolt2P^!>YS^-DLkbs!(`(QYTVcO^s`L_OlM22< z+**`zYN=U<|H3rB7smREGCE303~1wPW#f^(~Odb@g69Y z?WydIV3#VMLM9m2%V4kv(T|Q#OJ(sgY(rj#Vvo@PI=D+A?sBR&VDQ-%4A(712d!UC z>^BxuWsVwqSSX-xKYCMZ6mx&ZgSet5HIYISEG5*&Y?KVX0rZzm2er5bc$~c&Yj4{| z^0W0THZCqDT}77MIB4p)g(A_mP+3w%DRr(52%213gej8c!5crm?Wz zj}|6*^BQIa$+NL>W%cLt{>RqgL5my^lTzZXNSMXM2{)1F)0lV(xedbmfTSTwvM37U zl&pNZ^{#zN>^Qa`$cApNX`FO`#32$VoV%-8mbn-XtPjTA98D*drIVL0NexPVI3>Ne zZ{K!%W4-m2SgZ&~4i5<3MCk(~PyG^u^T~1mgkc?k^D&bA7J*MuBh*i5GhP=lL*E4* z08v7>DGd@Y48*#?^;RGadkFPS(>0Cny@a-roSpe8Q<}X364zNuY;x_TaS{?CY|&oZz+N_Ih(f3(Z3CCs}n8p{-EIsUJvEluia0&&YS?* zNR8#|7awQF^o*^wtn?v*HI@ZK9aWFIs^ZloxHR8u+cxes0U}80Wr3~z-Cd5yBc@)Me(lEGl4A4PGv^)@z|fP^bRqr|7dO}dsNmpU--lbA*^O=yrR zxDXepoer~^kXPVaoC@r059AC|y|mS%&hZ=a4e54{b$Il+Daeb$rTeoP1T7C11$-7$ z`raJkL}g}ajt4dTOKUk9T@|{tuBJ0%VwuzBd|;3_UFP05zIW{$fzn*kA6=2-&bMO{ zQ0kK7ZnsUQ5e7qV z=#R%zx?TYV?`(jg9&#w?FL3(ngB8%^B!0qeuMRsg&>R|M_3byOT;F=An-iDT;bx7jfK>De# zy|=xpb^?eLXWbxZ=r<5ZLg$t?2<3%NRmoW)7EgVXsbzjNEz=kqg9R44GG*#hhf@|F zluz49LgNb47;?e33<_upUX&hsK{GscqVj|tNA@93)$rYlBSiNV?}PAHOr}<@!N>Do zMiW-MGPdnf3@IdTVlK|EK$eMFP*LJY4L-g)fg%KsnK>!(Aymk{2iZN&W*)#K7koKh3E&NDb!A|bpT~3&Ef#8U9F>XQ7%JiaiRJW$)f5iian|Wx4+=ZSCO0{pO29^OMIBPp52auNZT#%Czvg_4Q+oaR! z=sR}{H3BjP(IQBH>8ee7ZE^%fJtqrL0#w3y2i?yk$E3Ws;{cNFKcrY937vw)G-btM zhIv6_VC_H*_1zk*2#1tFjnAdiCU>^Qf|HeiMV zRqhy0m<4Igu_^@(`z`}I_YXN|K%>DOa^PLBd-h;Li~TVp<-7Fu2dEmrD~Za&C$tdLjdSv;)SYqJj; zm+-%ELArte%mdk5D^KTqEVjX+h24ajB>+-zyG1Jh)Ro+}`8qy?Rdo^1Fbl9EXIjJ2 z91cU%`N%Nk^eTk&xorEzpnRrgK+SGn>nuqWL#a8u9^?g!&lQ?1c}YVwm=h?flf{|E zTNBfIKRsWXg_{JtyJCFhpjyZzTvPf2p%w5Nd}~8)-c!xXdpF+Ko#fo^O6=}-@w2DeW+Xatp?L4M%VNr?q##_Mq-+2MJyv!QU6BII*{veDlpo zYmXmXh|IdlN$am%QZ>D3WP_W(C)O7DWMzY< z+ZC6+| z^J-xBw1PNxSwSK=t}grI@f0FqIx?q|)*dW@daD7oHtBBr$2q+98JOS? zO(%?%ol-dZgNfN4D!G2Zu_6%Q`X0yH2dw=Z1Bvasc53hAKPSN)+PNbG(aghm2P01YRYh!V*RbC*VME1Lr6_bc)*Ox7x5o8_&6tz5gasx@FUV7 z>vgO#BxI8_7tHbfs<%qn(AcS6-WA2JKXoJ~4`7lzXXpB9Ho+CaHfhGJekHbc` zk49si@zXIW)_g(Ma!Oe%z~A>C*P~dVU{)2WypQxa4J1%3!*n`8@5m1_~MeYSsbsUWn3 zJA-y)e6qthlHtl#3(x0Cv_qt3BmBs3X}Af#C;v+JS-s{b0QQ56-fS09SlG!~$KSaz z1t<0f5;WmJcJE9)X!^1=#2*UL+z&9xwvq@eqypV@Z1dYzcBPIKobV2S_%k^_x@boK zyg!<-qG3SqJl8vtJCYbq4HHf!3v#~f&-;^wVc-v!X{mg9oF}1pIqr!cDIt5~gnb7Z zKz2=)L*5l^pSUNGxmw}}@k!nw_P9?3G0#V?h9uZxk-eGOG?;%!y8Neprhc@d*gC{q z0b(l9MTehyK}Lncpph8kzZ5gw$6iWnb`sF13?%K1~44s$^(xrr}+uIQX* zgY-;wo7+UW0K-=w+RI#xD;LgKdn*_7t-#E2gv>ChDs>q!r-y#k0lq1`0e%?U@dH_b zyibaY9BZOVujNmTS1Re8@-!*#oB+IIvuiuC@=tC`ttCnpK=hZ52e{n(^I+h|JUj%- z6)3rw2lNsOE-&_lQ$I)??8dNR1$9b7&_d(PD}mC+XIl((QCo;tE|Xuy zWy);EWt%GFf~FtAC4Z6z9>OH~I=l+j>YK+C@ljV@#!UB&WqMN(6>C`j;O*nuyIJ#` zfk~{iiNcI5w{Ianv@O`ma_FMfS1^LVP_aVjsJu5J84F5d%!pl?kw zp9gS0;fKKu$^4W2;E35xR3Op?aOU&)MP3>Ze+frfBrcO3$Az*5XHNJVVX98>O;efc zzylpE^Yx;Fz3KrCAr(30Qi!SUW1IG^N48wu>1S;4Gxzt!+Y(ncP~DCBq(8QPHmCDN zOa4$|{howzDo!nYPdkr@aDWka-yn>3fS;41ud2;Uxs}nC`&`DS;8?pE9ggM}ejA9N zft}B%%b8^wm(Yie2Bz|{#vq4KEi-1I`Bo)Q~zB3%sk|jGSvI{J* zkVMYMn>TO9xzUv=v4TIoK7M)HK3(0=gEn}4zPew-BkY~(YS11ObXJ>y4uXYH(;M5V ze|rQUTwjFVA*}DO-AB@%mzQIg9c_Afvl)T`8!HM`E%9Q(@ayhXf7*KIo=_ zLiHZ002wT*#t!$|fbB!qhoH?K8mgm*%DQ-NG{u(W&1-<5+hk+Q&s)AkxRRejHH~1& z7oMwhs*k}=kC10_lC5aJ6*pVrk@hu~bk-qJ!+7{*bK;!ubLdO|F-ggVAO~z3-FfnO zdwq9zcfE>MEND~ef}snw3Xz*GXiFee6KLpGtGy>g78OdlTqw{cS6}jhwfsNU?JtS% zm=4Dt@m4S;w2nn+Rq*3c@e?mlJK6ZbcUb636QJaG*H?D{&w;}?R%(W>)h04-qz9YG zHTs%S1}y+2`$f~2D9(%CIW#$?O{DV!So-7!?W3hj)sPyJaeP%pXbxaaA?czj>PV#V z_L3z6J|(-b{~r8;2CV&V0X>ymm1QP7r8?Gq1fTwS-RefUvs@#XpX`7y=r*7u-uqrT zMIuK)2g_y*e}&F*^h*?@Z!VVc0adxl=uf_qRk8CLqLTzU;U>`I@T2?WM zPdQA(giT4bOl64?SPmbUD$*24MPJ6)ssq8rmEOgGQk>koghza2Ku+V7mdq4sk%ma7 z2-{Fy=PVJCMelk}lDnIao&e*W{@=g*r-R}sL0=IA)l#7-O;ea9~%G*QkH!KG&?>Oi%Z zcVm?zH7!Q{Om5UsMEP)%PZBb*rF`n;d56Tz#p?Uh{Jm7I!DFkxk@k-cpWMFH;2(?s z$Ur%r#aL7`d{)p>Z)Y9^;iR8~M1 z&NS<4m6z)@EoRpxecEBpHcR^YKSz4f{^?-PluIqpqW5Zl1fA7b+9+}ObniY7hA#bV~)WHj`K2!I+uaA*5(`c$}3~ zO^=%}5Iu)qVJVk3;?UjW=ENqnsk94GN~PVC#gYN65*yhj&9=&a@7M%_366upVQN z@%pvHf~cqCZ5W}=F6@J>p5kwz3q^6#+wXkuyc|}Q39jL!`F$F=gW1@V$Xf zSv4|fOXv*D4wOO}E>p*C&Q7!fUg&aSoL31eyhf<>!`%>M{0LIJn9`|k6cxOBcL|;z zU;=LVA=Oz)|3YV?;iC*ch1}D&LYKf+VDCa{RZ$z?z|L#%_%#Z4uXG)L4!%Dnvrm(3 z6h8;aYBRf=WX(04-4C+0^L@AGP}f)m?GBA0K8(-a0vDf*?zs!JPliw07sDr$55~u(lR6WJ znpNQBR+Gs`j=6;Y^DaEFhkpIx25!=7~qmxgr=UwoEDE135yf;VfSnmA+fCeFZ zu}FBFjZ?vH(?AeCXTM^k2r0FkwrVLzL?CehrBdkykhocEdmK;W?3&%#27~x_X4kkP zL@iwG^=RIkH}9?I)R-C@Sik+aF4k%;XEHc_s`?M-~)}_jdh^A4uVJLb0`DD#@ag7xh1pl z5x#Fx1`jsCUK<9sa2Gto7O@9*y4r$mKto4Tl+y^zL7O_FTYWFeN8VAWjq|`7>BLfGVZx*-x&b{cp_gIncVoJ8sY+dAt z@x&Fe1~lvlJxC?qjO2ZkdZs+PP;u%jk`+bl9pHzW1>d|; z(MPywT`qnJ_OVf!c1{l?A%2tP42)wsYqy~Eh3yfMkgO0aOx7 zIxXMCIN&v$uO2GK9e$@Uq;&iF=0-A6YL2F+M*RY=V}#7QssVVMtycSQ+cpsXIsPjS z4N%xZ5_?#J4NIHCi#v#3HgY{?QP#cw%3Bn5{)f`XeFE(VaR9R$gew@rNcEu>|Ba1g6 ztSe?^${1@|fs5P)+;-G}2!29H(4lfLlNJ-m4Y)ainvVK#kA>AF&?zj+%;{rSNMlnh zKwGvgt(;{DnoYC?y;x?rK;xuiD`^s_((}vqaWTs?kV@r6qRn0Qc)}nPZ)(Bh4s5%=3OQTxNpvx+) zHSnIaATs#DZ6!~XLJYw9*710nVL3zTKT$YX=GFu&YP3sA6Dm~tmr47f(2mltVzPW@ z$qg0;D*KexL~vCFyL81-y^NGGy{*2@0vEF*2#O&d%4-MGJFPKQZYY@l71@+o_Jz1y ztudE9(p2Fkj+TO=ol;%s!Lq`kR z{7n?Q6KU{-#EcgIt2gG7Jp*7nh-bK$Ng}*ry$KuV=E&Ew8S#33o?1Kh*5PumlbVq> zmHo;099?A?Mm3*s{@;NPJWQ0= zUsXLC(7OdC+403{FdTvZ-k2S&t)2IZDLOT$<+LIszqb+J@Qz^BUMcsMr=8G`d?^SQ zQO@r#(ISl8xg~gyM(fX;Ki`pd8~Sh&1X z|6@r#=I7t70(sq%Y{S@Ylkwgf+3u{*bm)VT9%G)M1}Rk&IirgG16;sA$_xd5*O?;K zx`8Yie}TC5FClWtKE4-toOO=R3W7io#_vAGf)|zEpj#1C1ReCgY&vUGIUBR1;oE1X zgp#+JkMGYfL`wx&bvmS(K5ve@ZIs-`VQAxc18*rB!+2g-}_;&YeEuW@PbrM8TuuabS?9-p?E~^YD1s`ZSV#cIET`(6L_3ukHHRt zFbsyz?kSpZQ37)C=$YsNFTTJsMkh1ebCa zAJDdx&Lb#I2nPKN&rwz}mT6@>RM0g1Q9o}rzq2g%+Tt%_+6Exvi}PqqJ1T{q2gp4R zBLyBo!48m0Iy(fAz3`B~Md(*a1`TfL=eke8@BH<)jq`f%wsQ={)+Zxj8 zllEa0#Mk80HGYn^(~5lo_L5&*xg>a;g^|H(!!Qhn&(Twu=F)|*^C0K49SVc7yK!xK z(MaTAJMCcX-KR7yG;POxF_!;N`X!a**`Zh4*Ju6yw%O%DSIz-B-u{YG|7LCK0?p9b@W7A^|MNz2fEKH|y z_lZ_o{No?Lax~{sm#S$<6(c(Rw3E$Qu{DTOD3N6^@C$(j$aA#~c${s`!3x4K3ib2I|T)A`9t#k9R>Cn^f+9u<8ZTQ)k!4AuZ<$E zx*&L)fMSAtSZmo_)fwt+Bdt{%+4kBkEVG-TXcH(RL&E-@O~Jfan5KgF zU^(;>+9ub6@!#8Oh#+uVzxVF-U5vG^pysE%*yp0icbDRPyyoJ-VvkY7jKWYmu7K_! z2xLnZJ4mdfRyr-nQ3p5Ca`^0zaUve`J%p!cQT0M;3@ z3xB2rwr$*MJFM;q!1lGn!*_$S3K1jtaZhN7Hag&iGZs!5g$#O)_><6m3yPYI5(<=| zSJD}*f;R?TVa?w7tBw=Ag8_J)rB+Q(+dvRK<6kinm#~VG0*6ZE1Qk#!Br2Li5kl6+ zUdLPP-Dr1Bl2-ip&a6LT8wVZ|2RLoz0<4R4fv>yZCnbWgdPF4)L2*VrK}f zGezV;FMf&0g_*Pt{saddD=_IqKI>UaU#7&y&4SliAIXTs5>lb8Tq+SmqzmQxAi&V? z@#^;SXLx>pfBx_^gDHbt8v$%OfXa>G+YYQ$4wRYoEIi9}^rm7T9SY@)$JoR2Akqq% zMJYE(kLQAH4SKF)GQ0vS!)!^uZtVQw`(=1>Gyeeqr;YXM_WZiCo_r31DGPwXJQa0n zw_OR47OX?&!~jlVA)TEB)P`=EZSpH_EI!WQxZQwaz~(cY?aFJvOESK+__C?8{nEF= zru_Kvickn$iDZ;ynxQgo3Mv113!HuF|o`F``7TB9^vrOyfVpT(w<#wCHs5`B~ zsVrcT5!{In9xO7N| zCDwa#2vy|uzVL^p)TZ&xG%~XCccWJcS?b6tmhTC;mM(>rMn5N!$`-^X64pX4aP4i& z&4noOpn}yj7V25)wb~c${^Pu?oUK5JcK zfdP1&byeGL+c*$?j=o~xyx4-1*p{0-7=7qw(>7>P7jCv#V0R(VB4x9cNQ0yj8*Tr+ zGo-9boCSg;9?qOObLQf6nJX@G`26PfL;5~C$N!}g$B)suR9R7R0Rz4MCNg)q9YoPp z96=19S@vCU2zJ;C#)U!qRUhNa{ku1Jd0Z$Z-xfS<8 zg!9OXN`Nd1v0();d|_*i$Og-oYJ+}6wh))-9LQrb{2_bBtbn!1ScQMdpsI3>IkA?| zVf0kMyq<(X@flM}I}rO!;2=!L^JF@{zMhOHlL-+QSnJ_9AAznSN9Ldq%sPTdTFE$b z%#)_<8e^&OW4dR#=I~Db;T7|BH<}_0Mc3+697jc*4w!jv1$9G~(jf?%lNk!?EC~X) zNXirk@7i>rPH018O176}RUY;G>g&U@`i;Q`VAHIIOqV-mM6Ejw$-FK%Fd_^k_N^He zZt1uE^OM0~ptQOuHOios%!1c|FoZGMfDE-;k!i(iNR-`hYOyU*&EpJq_)vJ`cnM)7 zLa)|H+|WFQfSu7hZBe$o^1}G^6ds108ZP<1-KiF3gY(zSKl#-Cx;(uW_kaG~yBK+X zGoR3nfarE>qonXvs$tPC82>al5?T39#XzU{Vs}dK@2MeGO!ehdJChV zS!{nGh!yf+RpHv@|6flWBsBOjTD*J>LkBxIv3rdO;)RRUQ*ZI?p&`|to?EODhki%5 zquEjjiAev-Hwy>j$>6yAto7oa(xJiR64blyNNf+ z3deT6>p+C~?>DpSm$hT=Xrw?g-g)-fd3kp7N-UFzFX3hsO#N_jGrO9Mr{U$`6&gjt z_v{0n6dTA`E_s+{Dpb3S!{gxKWC$|j3&CO_lZ4^P;J~tlr z$?c7&ArMidiG+Kh){vyY@>Q|niE6=}U0Kd&lgYI|8he1=;nnzK0QYGTN3dpF4s*^E zVE9ido#%v`ihIOpNPriQ>o{y%N^oGCSt!F=-&L%hEXcmqU*=&GI-t}UeQ}k_t zZ%hU3fsZHJY!F-av2X0Zx9pc!=jZ;I?0*;rQsu=$mGL_rP&H72i9}hv7ISBT(N)k| z4MPu%d9h|W3^DAUb}SOfm5bmf!vPH82Z8>0|DHYrtkXD>pw?Vh9;8eC*&uqbOAFW( z2&pTACD0Tl#0>2sp*6X|VtLMXuko|qMy}Ibg;Y27W&};-*n&z*rBFyjl~`qZadi;# z@!;s&n_Xx}qz zkk{~u^9+Qla~Nz$y3g=R0<^6gnG^6tQ8OwPBLS7Ws1t8ctm{e*GyR% zhA8FowekB*c~1BiGlQqoL2~%Rf@cbrX>MiSEgftHqD)G2pfYH*n+~JiZk4A+hJ;we z^P0A9teW?R$vX;9fB%(xc3bd0NVcPm%VX8Cts|SDs5(h%4p9o8bh~J}aob=`ZWO!2 z!&!>zX|PI{p#>s>4yYE|x#G<%X+rm+BZ( z%8EXtP!Nkd4ZhPoNh?pe z!%Ts52 zdHNtCRBYh1FniZG2;aa+nn&1*4!TRrE0sJ4EO`m zNZOOB=1CS@xM)wKq-k4k(04iMSMNYuLjJFt*`oZSuS5j;`rVAbS}ke(Eg6p|fj_$q z#-R0AuMX)tst?eEIjlhcgUT-)$PDAh^a7b~XzW&8UqDS7_0wnK9J2X5=i3+l5YS=3 zE&GvLb^R-Ftqusk_`%s^>N{JOyU(^|KIMArjbF#@InR5B>>*+i@SOgpi_qcbpfA#R@GzmJZP9>@4uVlsNr8jjelV z@?yaev{sTsnlAoKK0qW^Lh0WSk&yV~Unu4 zOYwm3nA6D7D(o!B(>=5^OAB>kc@l}`;9m_?68*X!c$}S)F$=;l5QS&+D-OD75Gt;j zLy0}CtIJB4g9O?w( z2waZAU@d#P1mbqoYS^A zpWjxzoDU3g48KKXCj1#C66E>~A(ijn2Qn3Rd$y>`vN(90l~X-y!!Qt?qhE30#W9A^ zHJ-Yq(4o+D7Q&WmQAHBcskD^-_nz!Db?lfl%Yp9Wy?5{IOtq$wEj-=tcl`0;dCzw& zql7Z@EXM-+SR*)r9oH%#S11qg#a4AEJQOKkvDLd(4HOZTuGn`q8)DRd8K_7x5JEIT zy&BnoG6=?(Ahfpiv_K$DbUcBC?Oo5sdT!^b%unEXZB0NJG@|^#5{ArF1#Pgdju0nh zwU)x?^VSs0UPtSt)(z`jY|#>yhNA;jo2b!xF$BStmlT zJ6{qwu#Oi>#r53fqobp@3DTc?k&5L4$$ucVwQteg0(s3Iy6@DWt15(Z(locI=r5dz zM&HO{b2`wkEPmlqH{6J2BviFPCX9ZowB!$-EvH zW;HbBG`2+t^4;A(sfKZrG`J-s0XNzRJ7MC(nhcV%Cwr%Z%VLk@}0p`4J)AtjsYGy=&IUQ7Kpx-{-JY_9rOgTXVY zA3;5H?zkU#oQ0504uUWcM%VTfldw_34Oko9Y2*M6p;Ksr)21_+czYWRNYucr`t!Zl znP$$CK?~R0<#an%l|HL1?H%FrNU_AB5eU(@5t&P+9^M%+jzeERwRF)BZ5IaFe-vi>Ik_w>2bkN4Qx2H!PMHe zsZhIA@UHnPU~G^?OHy^dHw$X?ruWAmWbt8T{CWPrd41=0g(+a!e99(?%8-n+>IDQ` zwmZ3t0eGC9RoiYGHxPZczG4z1uq7x?``Q$JOOOCYiv-DAfCaT2Y6)}6HOaNK{ra5Y zuHuy}q;UmH=4CEt&K#1L)_Bc^K7IY?%e(5s;t~_<`Nw>5X?^W_&Gcu=8k;xGU&m`U z$kO7?iaxOGC2s_h)F$r>6$Pb!K{5}y)0a_U`{^3#wqx7SNj38_nAaoe}-^B+^Z z)I}gR*LADc^wNZ|QITFH{JmULx~~d?Yk2*(Jf8o)Tuvc&p?8`#OsW%pqg9!2h(4N; z+5-fXxeWy(+M9okkH3ga~3CxQyi=h1F$eyy!BuXAMnRnTweapD+A zkUVj3LdtV@n2z2O;BVVno9OxeoMB< za%Vw&Dev97VJjY44?W?%AUE*cWS_xhkVoKXPweF?l(QG~-fcTsf-2O6BsT8WdO`x*^GPs=s1 z1{ZmvJ{1Xly}gwaEHqi)VN(a#`;f_na7WJG@p0H$Pb9#ULXX5w^-U$;SDGi;mW3I6 zU>c~$`s*s?!ST;281KpxTG;FEk=2Qw2dW}233+bEOWi5I?bQ}~f0S;aRi5W(T?$9eLvDiq-|o47Uh2gqPJuOx?~>c| zD8C1IoKwzB%S%a3QwVZ(boOv{bn6+GD zT*|3=DVb?p0D9*t?!Om!oSje03c@fDJU3sl(2IutfhP|>z=Gh#V+hTrUD|FWiPq1z ztrn#R1urw~ursrpl4XMyPMd9h+^O?AKd8M(dx;ols=#|h&v0{OfS984Xd73mPB--; zM1L(Jd`ODeIw@hG;=5_Q z)9Mj6vrB_=|<2V$4 zroZBdc^Ig=P}oPFP@7p01$N8Kj#jHxWRjEC!nG^g;WDH7?|Y7&HfcgT>aK(!cFyHH zx9@}xvd}peFik!^q*uKU^ei>5jy>mXnR&2Sq{?JZ@V$4C&4qWQvP?c_{j4nfPPJauz%_V@YlA9^YEN+GXKg|Qi?FIIZ8`QxJ31ejhw zJp6S_4=_Ay-T!_$x=F?`Jn!{R`#tExNGRpN&k@`bGg(MNP?S3J(r9)9D6%<+2?1-V zy;LAMa9>*OKpXuHtr@T_q4V`UTYMI(M0#=B^KVP!WHNF#81hl*qs(aMVVyY6&;a7) zW)i8PWR&b3Ryhx?s5kX1kDR+-=n;{<4JGwwB)fq57tvvvjbuCPU|d-pBH13I!QuuWZ$kSs6@Z)J&M4z`a&)fHf+S=L{ygZUG_( zQ7vF+D>ZxqAz&t-Q3n}Dw5fd(x~s}vNDH~Dk^T4nsw)z#b|U6mE3R|u&}izm>p!*4TEKM)2V zIkt8xwxnUjJ1v;hEe!C8d*tI)aykA8Jkp`M$0uBaCe7U4j}!WPFnlHc*@=z}$F8QT zmP?vs+!NMnkdbjID*Tz8k@& zQ#P2H#e(>e4RXp@C^}u&wB;bk|J=hAsRv!0-0;?mCz^}L(h~=J;7#CBZ*)Xx-BPdm zV7L9RyhTY}2)y~mt)_vh-b=V?z{M%Xsc&q{BKqG4ry^KJ7?)?;|I zNRh~vqIpKk@o=1|y_M*;txXb1Nrbm&dnO{n)~)WQw}m`_YfG$mOnXgM{=4by0)%>5 z)q8s1?~YLV|MBUuW!sb4ZA*1UWuvQPbdxfneY&6CUVcvRZ(z9nZ8DwSPvPj7v*R5W z?vhFJXEGtN^BrPeuP5Wt<#bG9zaDRp#T+Y6r&t!PruM?l(60u^B5ykgrKw16*jy)_ zNn!EM{vw`jkZ{#e_|mzfbT)?8qBH6_(udTbF>Le0nedz|Jy|N%IvJ7f10L=a>JS|ni~7mM_F^EqT<}*BwO~p=Xf1q)+lSw%Y+T&| zjIWdR^B-TXlh4%&e#AM6E3AV$ntUI3@8IC4q}bhk)ZVPw_#A!*yV3MJG&Jg57C?Lx z|9jzB{{=qbT#d8C0eGB^R!wi)I1oMCzhZzau(sf)$sX73p(v8=0!;(By$g&qw1`Ng zKvH&%MgRNGkd!US_HJ@WqWOF?^El*(W)JJyKKn|IQX z*FI>#XsEEW%6V15g4!;++Ao7c2qo&hIJh&vVDQJlV4Upz5GxB4c=xK>JSEAywiF(d zrcu@!J8hW70@V&%QM|6lny#&lD5K(7y)+gI8gQZsS63erp6FJ2-{!3~KM(8qul1Bx zS^S%C(J!X_T9UOtw8%VVz$n5Pg1yv>i-A_KGpZ!&ShXYn&=O`4vGsCTUgQ@Yn@&5m)mSo+0^v`%Uk`+>@E)z6iW@<5RC*ibeJ`D53djFT z=VL?hX9y6nOzBNbIFWw<4zj>w)-8@nx#>0Pcn!8Z>dUsPFn(DRtJ#gHN6dS)NObcR0&1@;0_OsusilaPh$w-IX-MgA z=gh}2WJzA3A&V<`EIL!~uqTK+G~A*yKtlm1KH=JsH6xRM>x_UDA5~qBJ2j zOc2&&Tq>wY`PPt%E*!Gt&!FmMDN&!42u-WsaflbB6@(QfU4_hhRo5g0hyD$bBD@d` zge3i5*s@30DCejbxp`%Xo$IK<2auw6v?gCV5BrK*yhjjJmMBYJZ7){nqPqQ!*UoK& zc8eTId5-W*abosp#WHPZZhkl&I#~@>6weTkm9CM*YC0wtmq|F)+~w7kjoH&=J|k9* z2^Yu)@$T%)ovuDcaLV#F2;(a+tv9+@xzcUmW`E&W6s0@zh+zKifR0L-CQUJ_4E>_F zh{C#br`Gg0p3-IRE#2aT|JuEFr6+@0(^M|L3McOgdFic~&?JY8FwUNGfg)!v31Zat zPn&3IN1y58_Uo*OEdIUv2H_CNgx>=(8W~D;Y~VOjdUzzCXdm|6X`S~DkxqKdgvbJT z_ zvNBaxCSJigwL?r&dLgayj+{@~4KC~`xFCLlL&~gKQX#C={`hpq`^hNz zOP-rVc$t!L2#u#F*RLHCC)-CRzO+cfFC;x7ym-iEWh`|%s6&Ml>DawmXH@^#&`Oau z4Cz58W(kW>+AnoYo5&l48VT(AStr0JE>z!)j&u&EekcP(?NvC|PUf&o0Ftz1GH3|v zV^}SPPTR+{EV=Qyak5U169tx6Ls#32%)?Z9fQ~?BS>%$z=45#qINcs+#t#9z4?8XU z4I_aACp}t*8Pi(kED&6`S4o*;?5>8dw@+*^yBc=i0Xv(l!Ft7H4<`z}3fXGo$(2Q6 zEGpfC(S?dsfQOW;a6=cKcVX?4TuF^-2l7tV9)Laq80!K+y{M(obEOB>4f3h)pfqT% zB=%@WQr&l?=1ncNQ;*yJUsS11XAo&>3 zJe<^}hC0@^RhZasduH0+*a{QzE0}Nm4hRnUhx6(EJf4RzAZPltn{d2}P2t;n)`OQ&LDi#?TYN)XrvDO7OJ?mtFGEM37XX377zE&zQAV$6@J;DedV%20D*qlpe zUt`bViX6I0UOE;&NdF|IW;a{zSv6F~`L7d25G{G` zg#{^@O;Rr!>?J|lP$$!qz#%6}Ps%S)2%|1-hIcdyW7$^7s*UxM1w{DMq5d@Bb=!J_ zW@$(;5G0UhYJ<|tYw(Pasw)#tvc$xmqw3p1he(#kD@YPg^vKoElB2J}B_vA)85s7+aq?O{xkNwj1Sk!llVlZ>dE`cuA`)`WIX-Xuq-* zc${sI!D_=W42I9qQy6mDLN2{Fr?L$Sg)-O!7|&K3vsNyWT_~mRUONpXf$1RQPyYS? zs(numd-e0R|J2``kDcB^oq;D@Fp$W}MkPp2pN;*~h7Y1{P}x8dl^qPLhS8$GV3~JN zB@%xibn1fq8wA&@7OHCe!5ojX+sQKreu6%*MV-#h#7U3@bsRj6wol~vsyWem)xo_3 z@H7kd_J7i*^sH55%|kns*s4jzcnT5ACgps+FAl_dK;xucsGE_!=M;4|^gTQP$w6%7 zybXAqUCloW!axiK@VWOX0=H=C(%H$apin`aL+#~ku;%10iuKc5vG{Mx`|)_O?8T9X zZM7_MUDvDK1}kGnVxd1ZbW@4~EDEV>N+i)Z;5npO8zd=Q13SpI+4oeKEXx2A-w73{ zrxQN!Up~@+!TUry`9%^RgdFst_=JwXg2bu&dinOYYa-<1;(TE&iDPdbdr(GJx*B+# zb&tVr!Y~Ym&-GJ8^fC}k+OB;7I7~tsyGNl(S4)i(r3nln-kn5*s-o+~vj2Sf{kz15 zq-xk>Vj-36)G!V2GRI_&*>y8!6D3$|c${U7QES356oudOD=ze9jtaHVz3eHonaZjuS%tlY*xX`}#*su3 zfBjm@YQeXA&iU>anZ{~t;Cqv^54y|cnnYbT7N^y7R|;P7B`+isf(w|Z&xl}KUa@~* z@sQ-~lkSU3mUQ{WD!HXUut<_*+zTpJY`VT>S(*@HYygM#ReGcGpsaqW&(;U1kIKPo zi!tJsvY9_5{3hvo4ph7%^hU`k5)fC{od$->x&qsX03vXVf?%g+^?!n7-Xw% zot8wM&otx@f9+{%w2lIJoQ+s*Z`(Ey{#^fxTk;`x;<#z{EonP+TZRVPnxV;nVqM|U z5@ivUNR6cIdPV>Ho+Bk&w&k=!QBx%E?z!h)Naa{%I+YpSKfL|%&tImm2gi6*T5cu= zPfrJQO84H*>g>c(A~ek;)lQPqR0_SKrC7Nu5{?ATR$h{@R;Rli$MQnjtT0P*B9qu=m7co^);H!H<F#lAvHks;rFlSYTrx zrK|!hrPHfM)w2mCB%Qy6LMmlBla>^)77QB>6opC7Wjdx@>LdW!bu@)))`VwPt0JYu zlvN==wVgLrN|<9KuTK!uz`0{9bC ztvYBcqqGNH0jQHk>YoU3no2K{{Df7ofT^SvUKt(fiK`(Z0UKr3l%&9(%VkkCx|X>r zWFQT01T|rm7NSroEv*j{8|qu|mj@{Agg?UI@ZqNb10LH8sp*WKg>A0E5cn5frW1OA zPWcIG67@i1Lw=h?bn^Gb$vB8CTf_lGqpN`eff?_PZv1o}!!)6rkT8)y%4(eizNB_F zl>1z@kk$?}gvv@M?E?5Vk$Ypjj1H=>=k8awc~li*bwo?$^MI^jK2=sG9`RQhtxQcz zV?RQ!Q5CcxyjL6TO@QatEQfA3ru)0!Z>IORf8C6(n;m#2lL@_+R*r)yIBwutWZrpU zJ<|itZWj0fXF4U5ArgA-^KCVaJ+Tm~fWc9$j)K8j7bO`tS6suC@ZX@J4f`7YWZOR{ zJ)-}-#V7mF1Ah>e>TjL zGYprT5OZnjdCrkiF?nMurABYM9ip5_<|R#=9Bi{sIma`v{hx$`WsJvxFf>GSLq0UcVw=@Dg;KV&nDT%k^OQ^tyd>`#|)WF2?+C+Z27_qwSoZ)>ff#5GAVwp$hYG zpn)!ILMuE&l?Rp2Uh7GUn$SPk5zun zZGw{++&a)8b_3Iw+BjOv!-~E_mXNarN+C`6 zD}jAvG)bGbTYNtoby#fJJv(DAll_G*#r+K;#O+W4R|ba%D8`YsU7UxSM~R#AjW?v4llGb}g)9EKYvG=P= z^7mXbJ3N)2DqP^EnFe|EHEzPyCO1VYZF_QrUhwHaZbs!_)0!Du3LHHhD3s}a1A{4_ zVph#+FQ?PtFv<;a@6bLQUyi>YjYbD}>W#-1h7tg9RqZ6;_Q8_jiq(^Z?XmgG?Qb`s zKcTq7T@5{)B`Cvr6fViQ81l6nm(DQHA1^xG8#i_4woUe1$v84@9n27J$)<;DfXZIpRGTYHKftN>(g`hBC1?k!nqTb zCFPPv*!cY$Dt;I?Lf|K3AW)tngBoOjnq}YdVZv63$RR0)tiVa!&E45OAMLGN>^fxclP%Ua14p};8F$(X6B`0h;yY@l%y8rDP-oADCFnm z0F}fi7nBxjl;vlpXj*e|DW~S8WTq+TYoY5@(9-7u0AB|oS+$MV(}5MSk9FXR(XP{eRA3NSrnC~qu8Z^bi_VM0a&B3<)wT!D(&I|~nqNC`jz~xoWjW&`GWyIZoqhYca;u?Lpa`~yc{LxF`R5tUnIZMWO@sqHyQl6PLfdqUpMLR zFKsHsi9)EImeG6UZ5D;%TuRWS~w)zaYG#_ z60Z?%64!!Wj)ue0&&lBX9dvV5Rch}1JbXmn^LdN6T`jPoSr3zzhc8?!P^i{(VfYb@ zHPQk$z#+^qLt2DsvKdxx?FH~)N5qq}qm<=VEIE2R9j<5SwFJEyz%k=?VkD00|A!qv zvhvEdr>!Hp<1W0***ANq-@3D~xC;KdFYy}bs5o`Az9W&7A7sqwF^c=d-!@@#)Duo`6B99XhM>3Kex-I+PJ0m%czd~Ry zaxycTdGC#8)~eDaR`BcR%S-Y5+mG+XYqBPT(m1ju&f8Xc(Bg~*YH#1*U$T-$I}fdP z>Y%X%c@!2hcNAZCS6?(W!XL@h2P*C1Y)afE@4G&=w}?fFPTn$Kj4C19w^fCf?$0rV zbDG(yzkO!ml_X=$d=}A$sv%8*f4mjar!zbmpE(Q}1xig0qrw?;YBmYskACb{9A)OpNuojdZ!e1y%+LS_)W?#J(cS$+-Yhnm5t^F zM&Z+YMj!&+s8eTUV(waZPS)Sc!{rPI^y(@1YRs7=uWBW| zqre6AprSjg*h+fQBCZY2ctAgV-ixgpuY`Q=?hPy5!z{}C=Z;DZl^l{<{W-lCWW_xt>78vhf;d~JCU;}aN_PJ{)e46ex9ep{_ zk8X5mDXmeLs!IL?thr|jyft{7eN#(sgD?y}lV4%AmlmN`J@+(iNZV~oMR;(+AQgwFq{N$|2lzMS~mA!Wj4Z6jCBM<77?72I0qY} zxYOktUCTr?iu~|U491lI1Ls71@ zUElx1A2dwjo4d3ZGKp_rlBb8)7*@iG1pU#(SNgt zBeK6IuG3#1%fHjcF5-NVkqCkS{4<2#NP|5nIIBV$Cc3b(Tf{M?u$G*a!^H8ZP|!7s z7l>W$(n>B(zjU2+H!0MI#rsC{=FRidl4@tM)<5pQ+)W!I6Ri2)WG5QEksY&{`T2yjUhOAB0#nyMN1;4?# zjl@{KtUAxo1@_jkNTl{+-BK)1k+(h}bh3=-K|4G0KyDb{noz1gXY?QT6!D!))Ht-g zdl3`zhj-Z?ouA&z$^R~7WfMTA;SRiO_Y=^05l0&`EzAjC;A!3{vLE{8=3`9Lh_pnT zDVQE9hz~uLo#2gp=uA6vCPc~CPQbiq@DiLu1jJ|V@lhwsIPP{Oa=E3sB;*c~ah8`$S*Cp$h>SAiw z@{kkUF-F(NV7lk(7!Y@@M~Ykki>cBD|I1a%+`N|Z*6fD}oVlTFBpt_bXLyCNC*1ni z=;Xq`jjO*s|AooBSC@Pfms+B;RI9(aSk$w$B6ysYQ9WzJFc97KD-OIg#t=xCK*mDb zKya3%t5D>#b2L61=}g-G`btXc#Ld)2x{r77J)JVDxxyM=);qo5JumgE%0f_FivjUl`E2!`4u+=X5_?sU#Wa&Q!_qpM&I+=449nL#}OP+f~8+J&sL_0hfTi z3#UFi(}#uV$Z$tlq?bo|p2Ukwazc(|+0Ww3tzJKE%Qtl)aF~3c_7aqu2{~~Aw|O_n z=z7{A9veX`!;{DHTmLGU;!xNbl>5ylAi1Ji{oa9$8&uzvro5ZIM|hl#R84Q&Fbq9M zzk+Bkju52SIj0^rY*?o)f9cxo0L!#0ZMgRLKe{{B+6}#BrBl#ZrBztQcZ?J(M zclX~vKd7%_%aQf?7Z6+PYnKheO~i8`JhV4LB#OBvc+&0{MtBjMORxr{(WH-JV?9A7 z8>G5b5u07LESGy20ZxJ}6~~dGk{ySo@k&$n$(}qKs9ViIYW1hxQtkhnMzz|Z_PKl4 zH}Rg36h*{Y*xE!PKF<*C+$_3ad<+TQydq*97(a>uszZ#qBNZNhVojZ&M@ zz<%PrDz?`8*1#JCHbE*K)M9_*8tc&OGXjO7s?Q9(aM3Q8%%KdnVp1-gltI$gr8ib> zj3pbqX8Z6rJ7w8O-F3)=v44{&w;onz_E&a&YWCc@J$$gZ*lhl>`_hxEQx|*YZuc%< zy*H(DmFRCjQKtr=nycmLW?yyrPm~Y4ybIA5y|E3jozs7%Sn&rZvxeKWFL<1FQqgW2 zF%W!?zhWg`k`qck;HpX&AfakSD{?50ma+G^RSx@PuMeuK{~mMX8lcI8CC_+vyq@)l zDr>NUr?MzlPjW6s36aHjLX61jCK`kS6ffdI9f5g>uDTl&Y zF`X^Pr_}1#v?yoOGj1|37LOO)YEdqW$@dF(@$-IJEGF}@_?rt6*hkH9b~#xF3X&`_ zsU{a!x>g>twO3Zx2k2~IIFcSK^k_Ba$GQ&v+JynBEn4%okCwgCFF0W9cFNlX?lLHA z3<%0&%3|9_Mgt~#vKwf<(-^{G>nh+Hfvlm9OjHd7)J&-v$nK7wsd`JS*3Hns&iNNZ zUZ%yrFSyf&PM?%6z`d-fH+lH>V+L8(UTE6%ZrbO4ga^+J4FSp|t7vn5s_v8@!#UAJ z97E^GK&IC>xxhW6x6t?Z&ngC#{pa}P++(AdI+U&AI^?4Fdp}N1wkgx=|7M(pn-9dv z`xB`cr7=tA6tONb&6tep_Fq6-6JV6&X$ z+*rhy$RAY;;=glF+$u#SLlVDt_nzO`nO4|<;vdi3%|>ir-`8)O$EUS;VHv?1;R?et zjdd3q;LAg!mAV_>x9yTK=WVDx9{~YId*QtFuwu*~2Z%=dUN<~1W)*dhE*KCBZ}O2X zN?y0p#&1BUcL)vddfeTt{x#s=Y;jeRr{5J@Oqv#q)D+nga-q)8jBxsk8h*%5-=J>r+Ln`W9%rD0a82r1>@JEXpwMKmy0)Z#7BX6oB<#J z-~XQypAxW>2o#vi;jlQV2)@M}%`bi&A7qTQDWQ|62zcsc4jgyb0GOF1L<-OAdy2-D tFDyW&#L@M5oLj;&mt})2695Vb0vUd~@0o~~*#qY0wst)_Zp7SMgj;>}a0>tc literal 0 HcmV?d00001 diff --git a/test/test_pack.py b/test/test_pack.py index a0c8464e0..199b6c61c 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -13,14 +13,13 @@ class TestPack(TestBase): - def test_pack_index(self): - # read v2 index information - index_file = fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx') - index = PackIndex(index_file) - + packindexfile_v2 = fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx') + packindexfile_v1 = fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx') + + def _assert_index_file(self, index, version, size): assert index.packfile_checksum != index.indexfile_checksum - assert index.version == 2 - assert index.size == 30 + assert index.version == version + assert index.size == size # get all data of all objects for oidx in xrange(index.size): @@ -35,4 +34,14 @@ def test_pack_index(self): assert entry[2] == index.crc(oidx) # END for each object index in indexfile + + def test_pack_index(self): + # check version 1 and 2 + index = PackIndex(self.packindexfile_v1) + self._assert_index_file(index, 1, 67) + + index = PackIndex(self.packindexfile_v2) + self._assert_index_file(index, 2, 30) + + From 3b902ed6bf75bb04bdf5703a564f539d8d2e43d8 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 15 Jun 2010 23:35:46 +0200 Subject: [PATCH 0014/2375] Initial version of a pack design that should be able to solve the problem nicely streams: added pack specific Info and Stream types, including test --- fun.py | 27 ++++---- pack.py | 147 ++++++++++++++++++++++++++++++++++++++++---- stream.py | 84 ++++++++++++++++++++++++- test/test_pack.py | 54 ++++++++++++---- test/test_stream.py | 28 +++++++++ 5 files changed, 298 insertions(+), 42 deletions(-) diff --git a/fun.py b/fun.py index 883062eba..b2e684472 100644 --- a/fun.py +++ b/fun.py @@ -11,11 +11,17 @@ # INVARIANTS +OFS_DELTA = 6 +REF_DELTA = 7 type_id_to_type_map = { + 0 : "", # EXT 1 1 : "commit", 2 : "tree", 3 : "blob", - 4 : "tag" + 4 : "tag", + 5 : "", # EXT 2 + OFS_DELTA : "OFS_DELTA", # OFFSET DELTA + REF_DELTA : "REF_DELTA" # REFERENCE DELTA } # used when dealing with larger streams @@ -42,30 +48,23 @@ def loose_object_header_info(m): type_name, size = hdr[:hdr.find("\0")].split(" ") return type_name, int(size) -def object_header_info(m): - """:return: tuple(type_string, uncompressed_size_in_bytes - :param mmap: mapped memory map. It will be - seeked to the actual start of the object contents, which can be used - to initialize a zlib decompress object. - :note: This routine can only handle new-style objects which are assumably contained - in packs - """ - assert not is_loose_object(m), "Use loose_object_header_info instead" - +def pack_object_header_info(data): + """:return: tuple(type_id, uncompressed_size_in_bytes, byte_offset) + The type_id should be interpreted according to the ``type_id_to_type_map`` map + The byte-offset specifies the start of the actual zlib compressed datastream + :param m: random-access memory, like a string or memory map""" c = b0 # first byte i = 1 # next char to read type_id = (c >> 4) & 7 # numeric type size = c & 15 # starting size s = 4 # starting bit-shift size while c & 0x80: - c = ord(m[i]) + c = ord(data[i]) i += 1 size += (c & 0x7f) << s s += 7 # END character loop - # finally seek the map to the start of the data stream - m.seek(i) try: return (type_id_to_type_map[type_id], size) except KeyError: diff --git a/pack.py b/pack.py index 2ffc64f52..377963053 100644 --- a/pack.py +++ b/pack.py @@ -1,4 +1,4 @@ -"""Contains PackIndex and PackFile implementations""" +"""Contains PackIndexFile and PackFile implementations""" from util import ( LockedFD, LazyMixin, @@ -6,14 +6,17 @@ unpack_from ) +from fun import ( + pack_object_header_info + ) from struct import ( pack, ) -__all__ = ('PackIndex', 'Pack') +__all__ = ('PackIndexFile', 'PackFile') -class PackIndex(LazyMixin): +class PackIndexFile(LazyMixin): """A pack index provides offsets into the corresponding pack, allowing to find locations for offsets faster.""" @@ -26,7 +29,7 @@ class PackIndex(LazyMixin): _sha_list_offset = 8 + 1024 def __init__(self, indexpath): - super(PackIndex, self).__init__() + super(PackIndexFile, self).__init__() self._indexpath = indexpath def _set_cache_(self, attr): @@ -121,9 +124,9 @@ def _initialize(self): self._fanout_table = self._read_fanout((self._version == 2) * 8) if self._version == 2: - self._crc_list_offset = self._sha_list_offset + self.size * 20 - self._pack_offset = self._crc_list_offset + self.size * 4 - self._pack_64_offset = self._pack_offset + self.size * 4 + self._crc_list_offset = self._sha_list_offset + self.size() * 20 + self._pack_offset = self._crc_list_offset + self.size() * 4 + self._pack_64_offset = self._pack_offset + self.size() * 4 # END setup base def _read_fanout(self, byte_offset): @@ -139,21 +142,17 @@ def _read_fanout(self, byte_offset): #} END initialization #{ Properties - @property def version(self): return self._version - @property def size(self): """:return: amount of objects referred to by this index""" return self._fanout_table[255] - @property def packfile_checksum(self): """:return: 20 byte sha representing the sha1 hash of the pack file""" return self._data[-40:-20] - @property def indexfile_checksum(self): """:return: 20 byte sha representing the sha1 hash of this index file""" return self._data[-20:] @@ -186,6 +185,128 @@ def sha_to_index(self, sha): #} END properties -class Pack(LazyMixin): - """A pack is a file written according to the Version 2 for git packs""" +class PackFile(LazyMixin): + """A pack is a file written according to the Version 2 for git packs + As we currently use memory maps, it could be assumed that the maximum size of + packs therefor is 32 bit on 32 bit systems. On 64 bit systems, this should be + fine though. + + :note: at some point, this might be implemented using streams as well, or + streams are an alternate path in the case memory maps cannot be created + for some reason - one clearly doesn't want to read 10GB at once in that + case""" + + __slots__ = ('_packpath', '_data', '_size', '_version') + + # offset into our data at which the first object starts + _first_object_offset = 3*4 + 8 + + def __init__(self, packpath): + self._packpath = packpath + + def _set_cache_(self, attr): + if attr == '_data': + ldb = LockedFD(self._packpath) + fd = ldb.open() + self._data = file_contents_ro(fd) + ldb.rollback() + # TODO: figure out whether we should better keep the lock, or maybe + # add a .keep file instead ? + else: + # read the header information + type_id, self._version, self._size = unpack_from(">4sLL", self._data, 0) + assert type_id == "PACK", "Pack file format is invalid: %r" % type_id + assert self._version in (2, 3), "Cannot handle pack format version %i" % self._version + # END handle header + + def _iter_objects(self, start_offset, as_stream): + """Handle the actual iteration of objects within this pack""" + size = len(self._data) + cur_offset = start_offset or self._first_object_offset + + while cur_offset < size: + type_id, uncomp_size, data_offset = pack_object_header_info(buffer(self._data, cur_offset)) + + # if type_id + # END until we have read everything + + #{ Interface + + def size(self): + """:return: The amount of objects stored in this pack""" + return self._size + + def version(self): + """:return: the version of this pack""" + return self._version + + def checksum(self): + """:return: 20 byte sha1 hash on all object sha's contained in this file""" + return self._data[-20:] + + #} END interface + + #{ Read-Database like Interface + + def info(self, offset): + """Retrieve information about the object at the given file-absolute offset + :param offset: byte offset + :return: OPackInfo instance, the actual type differs depending on the type_id attribute""" + raise NotImplementedError() + + def stream(self, offset): + """Retrieve an object at the given file-relative offset as stream along with its information + :param offset: byte offset + :return: OPackStream instance, the actual type differs depending on the type_id attribute""" + raise NotImplementedError() + + #} END Read-Database like Interface + + +class PackFileEntity(object): + """Combines the PackIndexFile and the PackFile into one, allowing the + actual objects to be resolved and iterated""" + + __slots__ = ('_index', '_pack') + + IndexFileCls = PackIndexFile + PackFileCls = PackFile + + def __init__(self, basename): + self._index = self.IndexFileCls("%s.idx" % basename) # PackIndexFile instance + self._pack = self.PackFileCls("%s.pack" % basename) # corresponding PackFile instance + + + def _iter_objects(self, as_stream): + raise NotImplementedError + + #{ Read-Database like Interface + + def info(self, sha): + """Retrieve information about the object identified by the given sha + :param sha: 20 byte sha1 + :return: OInfo instance""" + raise NotImplementedError() + + def stream(self, sha): + """Retrieve an object stream along with its information as identified by the given sha + :param sha: 20 byte sha1 + :return: OStream instance""" + raise NotImplementedError() + + #} END Read-Database like Interface + + #{ Interface + + def info_iter(self): + """:return: Iterator over all objects in this pack. The iterator yields + OInfo instances""" + return self._iter_objects(as_stream=False) + + def stream_iter(self): + """:return: iterator over all objects in this pack. The iterator yields + OStream instances""" + return self._iter_objects(as_stream=True) + + #} Interface diff --git a/stream.py b/stream.py index 44c7b945a..b30ec1ec9 100644 --- a/stream.py +++ b/stream.py @@ -11,7 +11,11 @@ zlib ) -__all__ = ('OInfo', 'OStream', 'IStream', 'InvalidOInfo', 'InvalidOStream', +from fun import type_id_to_type_map + +__all__ = ('OInfo', 'OPackInfo', 'ODeltaPackInfo', + 'OStream', 'OPackStream', 'ODeltaPackStream', + 'IStream', 'InvalidOInfo', 'InvalidOStream', 'DecompressMemMapReader', 'FDCompressedSha1Writer') @@ -55,8 +59,42 @@ def type(self): def size(self): return self[2] #} END interface - - + + +class OPackInfo(OInfo): + """As OInfo, but provides a type_id property to retrieve the numerical type id""" + __slots__ = tuple() + + @property + def type(self): + return type_id_to_type_map[self[1]] + + #{ Interface + + @property + def type_id(self): + return self[1] + + #} interface + + +class ODeltaPackInfo(OPackInfo): + """Adds delta specific information, + Either the 20 byte sha which points to some object in the database, + or the base_offset, being an offset into the pack at which our base + can be found""" + __slots__ = tuple() + + def __new__(cls, sha, type, size, delta_info): + return tuple.__new__(cls, (sha, type, size, delta_info)) + + #{ Interface + @property + def delta_info(self): + return self[3] + #} END interface + + class OStream(OInfo): """Base for object streams retrieved from the database, providing additional information about the stream. @@ -76,6 +114,46 @@ def __init__(self, *args, **kwargs): def read(self, size=-1): return self[3].read(size) + @property + def stream(self): + return self[3] + #} END stream reader interface + + +class OPackStream(OPackInfo): + """Next to pack object information, a stream outputting an undeltified base object + is provided""" + __slots__ = tuple() + + def __new__(cls, sha, type, size, stream, *args): + """Helps with the initialization of subclasses""" + return tuple.__new__(cls, (sha, type, size, stream)) + + #{ Stream Reader Interface + def read(self, size=-1): + return self[3].read(size) + + @property + def stream(self): + return self[3] + #} END stream reader interface + + +class ODeltaPackStream(ODeltaPackInfo): + """Provides a stream outputting the uncompressed offset delta information""" + __slots__ = tuple() + + def __new__(cls, sha, type, size, delta_info, stream): + return tuple.__new__(cls, (sha, type, size, delta_info, stream)) + + + #{ Stream Reader Interface + def read(self, size=-1): + return self[4].read(size) + + @property + def stream(self): + return self[4] #} END stream reader interface diff --git a/test/test_pack.py b/test/test_pack.py index 199b6c61c..14d8a2496 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -6,23 +6,35 @@ fixture_path ) from gitdb.pack import ( - PackIndex + PackIndexFile, + PackFile ) +from gitdb.util import to_bin_sha import os +#{ Utilities +def bin_sha_from_filename(filename): + return to_bin_sha(os.path.splitext(os.path.basename(filename))[0][5:]) +#} END utilities + class TestPack(TestBase): - packindexfile_v2 = fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx') - packindexfile_v1 = fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx') + packindexfile_v1 = (fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx'), 1, 67) + packindexfile_v2 = (fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx'), 2, 30) + packfile_v2_1 = (fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack'), 2, packindexfile_v1[2]) + packfile_v2_2 = (fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.pack'), 2, packindexfile_v2[2]) + def _assert_index_file(self, index, version, size): - assert index.packfile_checksum != index.indexfile_checksum - assert index.version == version - assert index.size == size + assert index.packfile_checksum() != index.indexfile_checksum() + assert len(index.packfile_checksum()) == 20 + assert len(index.indexfile_checksum()) == 20 + assert index.version() == version + assert index.size() == size # get all data of all objects - for oidx in xrange(index.size): + for oidx in xrange(index.size()): sha = index.sha(oidx) assert oidx == index.sha_to_index(sha) @@ -34,14 +46,32 @@ def _assert_index_file(self, index, version, size): assert entry[2] == index.crc(oidx) # END for each object index in indexfile + + def _assert_pack_file(self, pack, version, size): + assert pack.version() == 2 + assert pack.size() == size + assert len(pack.checksum()) == 20 + def test_pack_index(self): # check version 1 and 2 - index = PackIndex(self.packindexfile_v1) - self._assert_index_file(index, 1, 67) - - index = PackIndex(self.packindexfile_v2) - self._assert_index_file(index, 2, 30) + for indexfile, version, size in (self.packindexfile_v1, self.packindexfile_v2): + index = PackIndexFile(indexfile) + self._assert_index_file(index, version, size) + # END run tests + def test_pack(self): + # there is this special version 3, but apparently its like 2 ... + for packfile, version, size in (self.packfile_v2_1, self.packfile_v2_2): + pack = PackFile(packfile) + self._assert_pack_file(pack, version, size) + # END for each pack to test + def test_pack_entity(self): + # TODO: + pass + def test_pack_64(self): + # TODO: hex-edit a pack helping us to verify that we can handle 64 byte offsets + # of course without really needing such a huge pack + pass diff --git a/test/test_stream.py b/test/test_stream.py index 4f022286e..7c9097961 100644 --- a/test/test_stream.py +++ b/test/test_stream.py @@ -39,15 +39,43 @@ def test_streams(self): assert info.type == str_blob_type assert info.size == s + # test pack info + # provides type_id + blob_id = 3 + pinfo = OPackInfo(sha, blob_id, s) + assert pinfo.type == str_blob_type + assert pinfo.type_id == blob_id + + dpinfo = ODeltaPackInfo(sha, blob_id, s, sha) + assert dpinfo.type == str_blob_type + assert dpinfo.type_id == blob_id + assert dpinfo.delta_info == sha + + # test ostream stream = DummyStream() ostream = OStream(*(info + (stream, ))) + assert ostream.stream is stream ostream.read(15) stream._assert() assert stream.bytes == 15 ostream.read(20) assert stream.bytes == 20 + # test packstream + postream = OPackStream(*(pinfo + (stream, ))) + assert postream.stream is stream + postream.read(10) + stream._assert() + assert stream.bytes == 10 + + # test deltapackstream + dpostream = ODeltaPackStream(*(dpinfo + (stream, ))) + dpostream.stream is stream + dpostream.read(5) + stream._assert() + assert stream.bytes == 5 + # derive with own args DeriveTest(sha, str_blob_type, s, stream, 'mine',myarg = 3)._assert() From 0650892246e99b60448d4a168ea36f84236b97a4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 16 Jun 2010 01:10:46 +0200 Subject: [PATCH 0015/2375] moved all info and stream base classes into new module, base, as well as the respective tests were moved to test_base Adjusted PackStream and PackInfo classes not to contain the sha field anymore streams: DecompressMemMapReader now parses its header on demand if it is not set, using the mose useful 3 lines ever, LazyMixin --- __init__.py | 1 + base.py | 272 +++++++++++++++++++++++++++++++++++++++++++ db/git.py | 2 +- db/loose.py | 9 +- pack.py | 76 +++++++++++- stream.py | 273 ++------------------------------------------ test/db/lib.py | 5 +- test/test_base.py | 90 +++++++++++++++ test/test_stream.py | 78 +------------ 9 files changed, 461 insertions(+), 345 deletions(-) create mode 100644 base.py create mode 100644 test/test_base.py diff --git a/__init__.py b/__init__.py index 8b0e47b19..d79788fc4 100644 --- a/__init__.py +++ b/__init__.py @@ -14,5 +14,6 @@ def _init_externals(): # default imports from db import * +from base import * from stream import * diff --git a/base.py b/base.py new file mode 100644 index 000000000..d12181229 --- /dev/null +++ b/base.py @@ -0,0 +1,272 @@ +"""Module with basic data structures - they are designed to be lightweight and fast""" +from util import ( + to_hex_sha, + to_bin_sha, + zlib + ) + +from fun import type_id_to_type_map + +__all__ = ('OInfo', 'OPackInfo', 'ODeltaPackInfo', + 'OStream', 'OPackStream', 'ODeltaPackStream', + 'IStream', 'InvalidOInfo', 'InvalidOStream' ) + +#{ ODB Bases + +class OInfo(tuple): + """Carries information about an object in an ODB, provdiing information + about the sha of the object, the type_string as well as the uncompressed size + in bytes. + + It can be accessed using tuple notation and using attribute access notation:: + + assert dbi[0] == dbi.sha + assert dbi[1] == dbi.type + assert dbi[2] == dbi.size + + The type is designed to be as lighteight as possible.""" + __slots__ = tuple() + + def __new__(cls, sha, type, size): + return tuple.__new__(cls, (sha, type, size)) + + def __init__(self, *args): + tuple.__init__(self) + + #{ Interface + @property + def sha(self): + return self[0] + + @property + def type(self): + return self[1] + + @property + def size(self): + return self[2] + #} END interface + + +class OPackInfo(tuple): + """As OInfo, but provides a type_id property to retrieve the numerical type id, and + does not include a sha""" + __slots__ = tuple() + + def __new__(cls, type, size): + return tuple.__new__(cls, (type, size)) + + def __init__(self, *args): + tuple.__init__(self) + + #{ Interface + + @property + def type(self): + return type_id_to_type_map[self[0]] + + @property + def type_id(self): + return self[0] + + @property + def size(self): + return self[1] + + #} END interface + + +class ODeltaPackInfo(OPackInfo): + """Adds delta specific information, + Either the 20 byte sha which points to some object in the database, + or the base_offset, being an offset into the pack at which our base + can be found""" + __slots__ = tuple() + + def __new__(cls, type, size, delta_info): + return tuple.__new__(cls, (type, size, delta_info)) + + #{ Interface + @property + def delta_info(self): + return self[2] + #} END interface + + +class OStream(OInfo): + """Base for object streams retrieved from the database, providing additional + information about the stream. + Generally, ODB streams are read-only as objects are immutable""" + __slots__ = tuple() + + def __new__(cls, sha, type, size, stream, *args, **kwargs): + """Helps with the initialization of subclasses""" + return tuple.__new__(cls, (sha, type, size, stream)) + + + def __init__(self, *args, **kwargs): + tuple.__init__(self) + + #{ Stream Reader Interface + + def read(self, size=-1): + return self[3].read(size) + + @property + def stream(self): + return self[3] + #} END stream reader interface + + +class OPackStream(OPackInfo): + """Next to pack object information, a stream outputting an undeltified base object + is provided""" + __slots__ = tuple() + + def __new__(cls, type, size, stream, *args): + """Helps with the initialization of subclasses""" + return tuple.__new__(cls, (type, size, stream)) + + #{ Stream Reader Interface + def read(self, size=-1): + return self[2].read(size) + + @property + def stream(self): + return self[2] + #} END stream reader interface + + +class ODeltaPackStream(ODeltaPackInfo): + """Provides a stream outputting the uncompressed offset delta information""" + __slots__ = tuple() + + def __new__(cls, type, size, delta_info, stream): + return tuple.__new__(cls, (type, size, delta_info, stream)) + + + #{ Stream Reader Interface + def read(self, size=-1): + return self[3].read(size) + + @property + def stream(self): + return self[3] + #} END stream reader interface + + +class IStream(list): + """Represents an input content stream to be fed into the ODB. It is mutable to allow + the ODB to record information about the operations outcome right in this instance. + + It provides interfaces for the OStream and a StreamReader to allow the instance + to blend in without prior conversion. + + The only method your content stream must support is 'read'""" + __slots__ = tuple() + + def __new__(cls, type, size, stream, sha=None): + return list.__new__(cls, (sha, type, size, stream, None)) + + def __init__(self, type, size, stream, sha=None): + list.__init__(self, (sha, type, size, stream, None)) + + #{ Interface + + @property + def hexsha(self): + """:return: our sha, hex encoded, 40 bytes""" + return to_hex_sha(self[0]) + + @property + def binsha(self): + """:return: our sha as binary, 20 bytes""" + return to_bin_sha(self[0]) + + def _error(self): + """:return: the error that occurred when processing the stream, or None""" + return self[4] + + def _set_error(self, exc): + """Set this input stream to the given exc, may be None to reset the error""" + self[4] = exc + + error = property(_error, _set_error) + + #} END interface + + #{ Stream Reader Interface + + def read(self, size=-1): + """Implements a simple stream reader interface, passing the read call on + to our internal stream""" + return self[3].read(size) + + #} END stream reader interface + + #{ interface + + def _set_sha(self, sha): + self[0] = sha + + def _sha(self): + return self[0] + + sha = property(_sha, _set_sha) + + + def _type(self): + return self[1] + + def _set_type(self, type): + self[1] = type + + type = property(_type, _set_type) + + def _size(self): + return self[2] + + def _set_size(self, size): + self[2] = size + + size = property(_size, _set_size) + + def _stream(self): + return self[3] + + def _set_stream(self, stream): + self[3] = stream + + stream = property(_stream, _set_stream) + + #} END odb info interface + + +class InvalidOInfo(tuple): + """Carries information about a sha identifying an object which is invalid in + the queried database. The exception attribute provides more information about + the cause of the issue""" + __slots__ = tuple() + + def __new__(cls, sha, exc): + return tuple.__new__(cls, (sha, exc)) + + def __init__(self, sha, exc): + tuple.__init__(self, (sha, exc)) + + @property + def sha(self): + return self[0] + + @property + def error(self): + """:return: exception instance explaining the failure""" + return self[1] + + +class InvalidOStream(InvalidOInfo): + """Carries information about an invalid ODB stream""" + __slots__ = tuple() + +#} END ODB Bases + diff --git a/db/git.py b/db/git.py index d2477d7b1..0488bc601 100644 --- a/db/git.py +++ b/db/git.py @@ -1,5 +1,5 @@ -from gitdb.stream import ( +from gitdb.base import ( OInfo, OStream ) diff --git a/db/loose.py b/db/loose.py index 37aad8c6f..109782fdc 100644 --- a/db/loose.py +++ b/db/loose.py @@ -13,11 +13,14 @@ from gitdb.stream import ( DecompressMemMapReader, FDCompressedSha1Writer, - Sha1Writer, - OStream, - OInfo + Sha1Writer ) +from gitdb.base import ( + OStream, + OInfo + ) + from gitdb.util import ( ENOENT, to_hex_sha, diff --git a/pack.py b/pack.py index 377963053..ab394daba 100644 --- a/pack.py +++ b/pack.py @@ -7,8 +7,21 @@ ) from fun import ( - pack_object_header_info + pack_object_header_info, + OFS_DELTA, + REF_DELTA ) + +from base import ( + OPackInfo, + OPackStream, + ODeltaPackInfo, + ODeltaPackStream, + ) +from stream import ( + DecompressMemMapReader, + ) + from struct import ( pack, ) @@ -16,6 +29,60 @@ __all__ = ('PackIndexFile', 'PackFile') + +#{ Utilities + +def pack_object_at(data, as_stream): + """ + :return: info or stream object of the correct type according to the type + of the object, REF_DELTAS will not be resolved in case a stream is desired. + The resulting ODeltaPackStream will have None instead of a stream. + :param data: random accessable data at which the header of an object can be read + :param as_stream: if True, a stream object will be returned that can read + the data, otherwise you receive an info object only + :note: a bit redundant, but it needs to be as fast as possible !""" + type_id, uncomp_size, data_offset = pack_object_header_info(data) + + if type_id == OFS_DELTA: + i = 0 + delta_offset = 0 + s = 7 + while c & 0x80: + c = ord(data[i]) + i += 1 + delta_offset += (c & 0x7f) << s + s += 7 + # END character loop + if as_stream: + stream = DecompressMemMapReader(buffer(data, i), False) + return ODeltaPackStream(type_id, uncomp_size, delta_offset, stream) + else: + return ODeltaPackInfo(type_id, uncomp_size, delta_offset) + # END handle stream + elif type_id == REF_DELTA: + ref_sha = data[:20] + if as_stream: + stream = DecompressMemMapReader(buffer(data, 20), False) + return ODeltaPackStream(type_id, uncomp_size, ref_sha, stream) + else: + return ODeltaPackInfo(type_id, uncomp_size, ref_sha) + # END handle stream + else: + # assume its a base object + if as_stream: + # if no size is given, it will read the header on first access + stream = DecompressMemMapReader(buffer(data, data_offset), False) + return OPackStream(type_id, uncomp_size, stream) + else: + return OPackInfo(type_id, uncomp_size) + # END handle as_stream + # END handle type id + + +#} END utilities + + + class PackIndexFile(LazyMixin): """A pack index provides offsets into the corresponding pack, allowing to find locations for offsets faster.""" @@ -222,13 +289,14 @@ def _set_cache_(self, attr): def _iter_objects(self, start_offset, as_stream): """Handle the actual iteration of objects within this pack""" - size = len(self._data) + data = self._data + size = len(data) cur_offset = start_offset or self._first_object_offset while cur_offset < size: - type_id, uncomp_size, data_offset = pack_object_header_info(buffer(self._data, cur_offset)) + ostream = pack_object_at(buffer(data, cur_offset), True) + # TODO: Decompressor needs to track the size of bytes actually decompressed - # if type_id # END until we have read everything #{ Interface diff --git a/stream.py b/stream.py index b30ec1ec9..f759267a5 100644 --- a/stream.py +++ b/stream.py @@ -3,279 +3,23 @@ import errno from util import ( - to_hex_sha, - to_bin_sha, + LazyMixin, make_sha, write, close, zlib ) -from fun import type_id_to_type_map - -__all__ = ('OInfo', 'OPackInfo', 'ODeltaPackInfo', - 'OStream', 'OPackStream', 'ODeltaPackStream', - 'IStream', 'InvalidOInfo', 'InvalidOStream', - 'DecompressMemMapReader', 'FDCompressedSha1Writer') +__all__ = ('DecompressMemMapReader', 'FDCompressedSha1Writer') # ZLIB configuration # used when compressing objects - 1 to 9 ( slowest ) Z_BEST_SPEED = 1 - -#{ ODB Bases - -class OInfo(tuple): - """Carries information about an object in an ODB, provdiing information - about the sha of the object, the type_string as well as the uncompressed size - in bytes. - - It can be accessed using tuple notation and using attribute access notation:: - - assert dbi[0] == dbi.sha - assert dbi[1] == dbi.type - assert dbi[2] == dbi.size - - The type is designed to be as lighteight as possible.""" - __slots__ = tuple() - - def __new__(cls, sha, type, size): - return tuple.__new__(cls, (sha, type, size)) - - def __init__(self, *args): - tuple.__init__(self) - - #{ Interface - @property - def sha(self): - return self[0] - - @property - def type(self): - return self[1] - - @property - def size(self): - return self[2] - #} END interface - - -class OPackInfo(OInfo): - """As OInfo, but provides a type_id property to retrieve the numerical type id""" - __slots__ = tuple() - - @property - def type(self): - return type_id_to_type_map[self[1]] - - #{ Interface - - @property - def type_id(self): - return self[1] - - #} interface - - -class ODeltaPackInfo(OPackInfo): - """Adds delta specific information, - Either the 20 byte sha which points to some object in the database, - or the base_offset, being an offset into the pack at which our base - can be found""" - __slots__ = tuple() - - def __new__(cls, sha, type, size, delta_info): - return tuple.__new__(cls, (sha, type, size, delta_info)) - - #{ Interface - @property - def delta_info(self): - return self[3] - #} END interface - - -class OStream(OInfo): - """Base for object streams retrieved from the database, providing additional - information about the stream. - Generally, ODB streams are read-only as objects are immutable""" - __slots__ = tuple() - - def __new__(cls, sha, type, size, stream, *args, **kwargs): - """Helps with the initialization of subclasses""" - return tuple.__new__(cls, (sha, type, size, stream)) - - - def __init__(self, *args, **kwargs): - tuple.__init__(self) - - #{ Stream Reader Interface - - def read(self, size=-1): - return self[3].read(size) - - @property - def stream(self): - return self[3] - #} END stream reader interface - - -class OPackStream(OPackInfo): - """Next to pack object information, a stream outputting an undeltified base object - is provided""" - __slots__ = tuple() - - def __new__(cls, sha, type, size, stream, *args): - """Helps with the initialization of subclasses""" - return tuple.__new__(cls, (sha, type, size, stream)) - - #{ Stream Reader Interface - def read(self, size=-1): - return self[3].read(size) - - @property - def stream(self): - return self[3] - #} END stream reader interface - - -class ODeltaPackStream(ODeltaPackInfo): - """Provides a stream outputting the uncompressed offset delta information""" - __slots__ = tuple() - - def __new__(cls, sha, type, size, delta_info, stream): - return tuple.__new__(cls, (sha, type, size, delta_info, stream)) - - - #{ Stream Reader Interface - def read(self, size=-1): - return self[4].read(size) - - @property - def stream(self): - return self[4] - #} END stream reader interface - - -class IStream(list): - """Represents an input content stream to be fed into the ODB. It is mutable to allow - the ODB to record information about the operations outcome right in this instance. - - It provides interfaces for the OStream and a StreamReader to allow the instance - to blend in without prior conversion. - - The only method your content stream must support is 'read'""" - __slots__ = tuple() - - def __new__(cls, type, size, stream, sha=None): - return list.__new__(cls, (sha, type, size, stream, None)) - - def __init__(self, type, size, stream, sha=None): - list.__init__(self, (sha, type, size, stream, None)) - - #{ Interface - - @property - def hexsha(self): - """:return: our sha, hex encoded, 40 bytes""" - return to_hex_sha(self[0]) - - @property - def binsha(self): - """:return: our sha as binary, 20 bytes""" - return to_bin_sha(self[0]) - - def _error(self): - """:return: the error that occurred when processing the stream, or None""" - return self[4] - - def _set_error(self, exc): - """Set this input stream to the given exc, may be None to reset the error""" - self[4] = exc - - error = property(_error, _set_error) - - #} END interface - - #{ Stream Reader Interface - - def read(self, size=-1): - """Implements a simple stream reader interface, passing the read call on - to our internal stream""" - return self[3].read(size) - - #} END stream reader interface - - #{ interface - - def _set_sha(self, sha): - self[0] = sha - - def _sha(self): - return self[0] - - sha = property(_sha, _set_sha) - - - def _type(self): - return self[1] - - def _set_type(self, type): - self[1] = type - - type = property(_type, _set_type) - - def _size(self): - return self[2] - - def _set_size(self, size): - self[2] = size - - size = property(_size, _set_size) - - def _stream(self): - return self[3] - - def _set_stream(self, stream): - self[3] = stream - - stream = property(_stream, _set_stream) - - #} END odb info interface - - -class InvalidOInfo(tuple): - """Carries information about a sha identifying an object which is invalid in - the queried database. The exception attribute provides more information about - the cause of the issue""" - __slots__ = tuple() - - def __new__(cls, sha, exc): - return tuple.__new__(cls, (sha, exc)) - - def __init__(self, sha, exc): - tuple.__init__(self, (sha, exc)) - - @property - def sha(self): - return self[0] - - @property - def error(self): - """:return: exception instance explaining the failure""" - return self[1] - - -class InvalidOStream(InvalidOInfo): - """Carries information about an invalid ODB stream""" - __slots__ = tuple() - -#} END ODB Bases - - #{ RO Streams -class DecompressMemMapReader(object): +class DecompressMemMapReader(LazyMixin): """Reads data in chunks from a memory map and decompresses it. The client sees only the uncompressed data, respective file-like read calls are handling on-demand buffered decompression accordingly @@ -296,19 +40,26 @@ class DecompressMemMapReader(object): max_read_size = 512*1024 # currently unused - def __init__(self, m, close_on_deletion, size): + def __init__(self, m, close_on_deletion, size=None): """Initialize with mmap for stream reading :param m: must be content data - use new if you have object data and no size""" self._m = m self._zip = zlib.decompressobj() self._buf = None # buffer of decompressed bytes self._buflen = 0 # length of bytes in buffer - self._s = size # size of uncompressed data to read in total + if size is not None: + self._s = size # size of uncompressed data to read in total self._br = 0 # num uncompressed bytes read self._cws = 0 # start byte of compression window self._cwe = 0 # end byte of compression window self._close = close_on_deletion # close the memmap on deletion ? + def _set_cache_(self, attr): + assert attr == '_s' + # only happens for size, which is a marker to indicate we still + # have to parse the header from the stream + self._parse_header_info() + def __del__(self): if self._close: self._m.close() diff --git a/test/db/lib.py b/test/db/lib.py index 35823059b..cf752741b 100644 --- a/test/db/lib.py +++ b/test/db/lib.py @@ -6,8 +6,9 @@ TestBase ) -from gitdb.stream import ( - Sha1Writer, +from gitdb.stream import Sha1Writer + +from gitdb.base import ( IStream, OStream, OInfo diff --git a/test/test_base.py b/test/test_base.py new file mode 100644 index 000000000..f7ddebaa2 --- /dev/null +++ b/test/test_base.py @@ -0,0 +1,90 @@ +"""Test for object db""" +from lib import ( + TestBase, + DummyStream, + DeriveTest, + ) + +from gitdb import * +from gitdb.util import ( + NULL_HEX_SHA + ) + +from gitdb.typ import ( + str_blob_type + ) + + +class TestBaseTypes(TestBase): + + def test_streams(self): + # test info + sha = NULL_HEX_SHA + s = 20 + info = OInfo(sha, str_blob_type, s) + assert info.sha == sha + assert info.type == str_blob_type + assert info.size == s + + # test pack info + # provides type_id + blob_id = 3 + pinfo = OPackInfo(blob_id, s) + assert pinfo.type == str_blob_type + assert pinfo.type_id == blob_id + + dpinfo = ODeltaPackInfo(blob_id, s, sha) + assert dpinfo.type == str_blob_type + assert dpinfo.type_id == blob_id + assert dpinfo.delta_info == sha + + + # test ostream + stream = DummyStream() + ostream = OStream(*(info + (stream, ))) + assert ostream.stream is stream + ostream.read(15) + stream._assert() + assert stream.bytes == 15 + ostream.read(20) + assert stream.bytes == 20 + + # test packstream + postream = OPackStream(*(pinfo + (stream, ))) + assert postream.stream is stream + postream.read(10) + stream._assert() + assert stream.bytes == 10 + + # test deltapackstream + dpostream = ODeltaPackStream(*(dpinfo + (stream, ))) + dpostream.stream is stream + dpostream.read(5) + stream._assert() + assert stream.bytes == 5 + + # derive with own args + DeriveTest(sha, str_blob_type, s, stream, 'mine',myarg = 3)._assert() + + # test istream + istream = IStream(str_blob_type, s, stream) + assert istream.sha == None + istream.sha = sha + assert istream.sha == sha + + assert len(istream.binsha) == 20 + assert len(istream.hexsha) == 40 + + assert istream.size == s + istream.size = s * 2 + istream.size == s * 2 + assert istream.type == str_blob_type + istream.type = "something" + assert istream.type == "something" + assert istream.stream is stream + istream.stream = None + assert istream.stream is None + + assert istream.error is None + istream.error = Exception() + assert isinstance(istream.error, Exception) diff --git a/test/test_stream.py b/test/test_stream.py index 7c9097961..69a93ad0f 100644 --- a/test/test_stream.py +++ b/test/test_stream.py @@ -2,7 +2,6 @@ from lib import ( TestBase, DummyStream, - DeriveTest, Sha1Writer, make_bytes, make_object @@ -18,7 +17,6 @@ str_blob_type ) -from cStringIO import StringIO import tempfile import os @@ -29,78 +27,6 @@ class TestStream(TestBase): """Test stream classes""" data_sizes = (15, 10000, 1000*1024+512) - - def test_streams(self): - # test info - sha = NULL_HEX_SHA - s = 20 - info = OInfo(sha, str_blob_type, s) - assert info.sha == sha - assert info.type == str_blob_type - assert info.size == s - - # test pack info - # provides type_id - blob_id = 3 - pinfo = OPackInfo(sha, blob_id, s) - assert pinfo.type == str_blob_type - assert pinfo.type_id == blob_id - - dpinfo = ODeltaPackInfo(sha, blob_id, s, sha) - assert dpinfo.type == str_blob_type - assert dpinfo.type_id == blob_id - assert dpinfo.delta_info == sha - - - # test ostream - stream = DummyStream() - ostream = OStream(*(info + (stream, ))) - assert ostream.stream is stream - ostream.read(15) - stream._assert() - assert stream.bytes == 15 - ostream.read(20) - assert stream.bytes == 20 - - # test packstream - postream = OPackStream(*(pinfo + (stream, ))) - assert postream.stream is stream - postream.read(10) - stream._assert() - assert stream.bytes == 10 - - # test deltapackstream - dpostream = ODeltaPackStream(*(dpinfo + (stream, ))) - dpostream.stream is stream - dpostream.read(5) - stream._assert() - assert stream.bytes == 5 - - # derive with own args - DeriveTest(sha, str_blob_type, s, stream, 'mine',myarg = 3)._assert() - - # test istream - istream = IStream(str_blob_type, s, stream) - assert istream.sha == None - istream.sha = sha - assert istream.sha == sha - - assert len(istream.binsha) == 20 - assert len(istream.hexsha) == 40 - - assert istream.size == s - istream.size = s * 2 - istream.size == s * 2 - assert istream.type == str_blob_type - istream.type = "something" - assert istream.type == "something" - assert istream.stream is stream - istream.stream = None - assert istream.stream is None - - assert istream.error is None - istream.error = Exception() - assert isinstance(istream.error, Exception) def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): """Make stream tests - the orig_stream is seekable, allowing it to be @@ -145,6 +71,10 @@ def test_decompress_reader(self): type, size, reader = DecompressMemMapReader.new(zdata, close_on_deletion) assert size == len(cdata) assert type == str_blob_type + + # even if we don't set the size, it will be set automatically on first read + test_reader = DecompressMemMapReader(zdata, close_on_deletion=False) + assert test_reader._s == len(cdata) else: # here we need content data zdata = zlib.compress(cdata) From bf4437ef45d9115aa2716e1c722c3938b6976803 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 16 Jun 2010 13:37:59 +0200 Subject: [PATCH 0016/2375] DecompressMemMapReader: implemented compressed bytes counting, including test. This is required to properly read packs without the use of an index --- ext/async | 2 +- pack.py | 6 +-- stream.py | 105 +++++++++++++++++++++++++++++--------------- test/test_stream.py | 19 ++++---- 4 files changed, 82 insertions(+), 50 deletions(-) diff --git a/ext/async b/ext/async index af0040b0f..796b5e94f 160000 --- a/ext/async +++ b/ext/async @@ -1 +1 @@ -Subproject commit af0040b0f3c6ede3be5b2d6bc69f6ea5ac53c36c +Subproject commit 796b5e94f19dfc36a3fb251468192373c76510b0 diff --git a/pack.py b/pack.py index ab394daba..2c01f0452 100644 --- a/pack.py +++ b/pack.py @@ -54,7 +54,7 @@ def pack_object_at(data, as_stream): s += 7 # END character loop if as_stream: - stream = DecompressMemMapReader(buffer(data, i), False) + stream = DecompressMemMapReader(buffer(data, i), False, uncomp_size) return ODeltaPackStream(type_id, uncomp_size, delta_offset, stream) else: return ODeltaPackInfo(type_id, uncomp_size, delta_offset) @@ -62,7 +62,7 @@ def pack_object_at(data, as_stream): elif type_id == REF_DELTA: ref_sha = data[:20] if as_stream: - stream = DecompressMemMapReader(buffer(data, 20), False) + stream = DecompressMemMapReader(buffer(data, 20), False, uncomp_size) return ODeltaPackStream(type_id, uncomp_size, ref_sha, stream) else: return ODeltaPackInfo(type_id, uncomp_size, ref_sha) @@ -267,7 +267,7 @@ class PackFile(LazyMixin): __slots__ = ('_packpath', '_data', '_size', '_version') # offset into our data at which the first object starts - _first_object_offset = 3*4 + 8 + _first_object_offset = 3*4 def __init__(self, packpath): self._packpath = packpath diff --git a/stream.py b/stream.py index f759267a5..de7ddcd86 100644 --- a/stream.py +++ b/stream.py @@ -1,6 +1,8 @@ from cStringIO import StringIO import errno +import mmap +import os from util import ( LazyMixin, @@ -13,10 +15,6 @@ __all__ = ('DecompressMemMapReader', 'FDCompressedSha1Writer') -# ZLIB configuration -# used when compressing objects - 1 to 9 ( slowest ) -Z_BEST_SPEED = 1 - #{ RO Streams class DecompressMemMapReader(LazyMixin): @@ -36,7 +34,8 @@ class DecompressMemMapReader(LazyMixin): times we actually allocate. An own zlib implementation would be good here to better support streamed reading - it would only need to keep the mmap and decompress it into chunks, thats all ... """ - __slots__ = ('_m', '_zip', '_buf', '_buflen', '_br', '_cws', '_cwe', '_s', '_close') + __slots__ = ('_m', '_zip', '_buf', '_buflen', '_br', '_cws', '_cwe', '_s', '_close', + '_cbr', '_phi') max_read_size = 512*1024 # currently unused @@ -52,6 +51,8 @@ def __init__(self, m, close_on_deletion, size=None): self._br = 0 # num uncompressed bytes read self._cws = 0 # start byte of compression window self._cwe = 0 # end byte of compression window + self._cbr = 0 # number of compressed bytes read + self._phi = False # is True if we parsed the header info self._close = close_on_deletion # close the memmap on deletion ? def _set_cache_(self, attr): @@ -85,6 +86,8 @@ def _parse_header_info(self): self._buf = StringIO(hdr[hdrend:]) self._buflen = len(hdr) - hdrend + self._phi = True + return type, size @classmethod @@ -98,7 +101,55 @@ def new(self, m, close_on_deletion=False): inst = DecompressMemMapReader(m, close_on_deletion, 0) type, size = inst._parse_header_info() return type, size, inst + + def compressed_bytes_read(self): + """:return: number of compressed bytes read. This includes the bytes it + took to decompress the header ( if there was one )""" + # ABSTRACT: When decompressing a byte stream, it can be that the first + # x bytes which were requested match the first x bytes in the loosely + # compressed datastream. This is the worst-case assumption that the reader + # does, it assumes that it will get at least X bytes from X compressed bytes + # in call cases. + # The caveat is that the object, according to our known uncompressed size, + # is already complete, but there are still some bytes left in the compressed + # stream that contribute to the amount of compressed bytes. + # How can we know that we are truly done, and have read all bytes we need + # to read ? + # Without help, we cannot know, as we need to obtain the status of the + # decompression. If it is not finished, we need to decompress more data + # until it is finished, to yield the actual number of compressed bytes + # belonging to the decompressed object + # We are using a custom zlib module for this, if its not present, + # we can only hope it works. + # Only scrub the stream forward if we are officially done with the + # bytes we were to have. + if self._br == self._s and hasattr(self._zip, 'status') and self._zip.status == zlib.Z_OK: + # manipulate the bytes-read to allow our own read method to coninute + # but keep the window at its current position + self._br = 0 + while self._zip.status == zlib.Z_OK: + self.read(mmap.PAGESIZE) + # END scrub-loop + # reset bytes read, just to be sure + self._br = self._s + # END handle stream scrubbing + + return self._cbr - len(self._zip.unused_data) + def seek(self, offset, whence=os.SEEK_SET): + """Allows to reset the stream to restart reading + :raise ValueError: If offset and whence are not 0""" + if offset != 0 or whence != os.SEEK_SET: + raise ValueError("Can only seek to position 0") + # END handle offset + + self._zip = zlib.decompressobj() + self._br = self._cws = self._cwe = self._cbr = 0 + if self._phi: + self._phi = False + del(self._s) # trigger header parsing on first access + # END skip header + def read(self, size=-1): if size < 1: size = self._s - self._br @@ -109,33 +160,8 @@ def read(self, size=-1): if size == 0: return str() # END handle depletion - - # protect from memory peaks - # If he tries to read large chunks, our memory patterns get really bad - # as we end up copying a possibly huge chunk from our memory map right into - # memory. This might not even be possible. Nonetheless, try to dampen the - # effect a bit by reading in chunks, returning a huge string in the end. - # Our performance now depends on StringIO. This way we don't need two large - # buffers in peak times, but only one large one in the end which is - # the return buffer - # NO: We don't do it - if the user thinks its best, he is right. If he - # has trouble, he will start reading in chunks. According to our tests - # its still faster if we read 10 Mb at once instead of chunking it. - - # if size > self.max_read_size: - # sio = StringIO() - # while size: - # read_size = min(self.max_read_size, size) - # data = self.read(read_size) - # sio.write(data) - # size -= len(data) - # if len(data) < read_size: - # break - # # END data loop - # sio.seek(0) - # return sio.getvalue() - # # END handle maxread - # + + # deplete the buffer, then just continue using the decompress object # which has an own buffer. We just need this to transparently parse the # header from the zlib stream @@ -186,8 +212,7 @@ def read(self, size=-1): # if window is too small, make it larger so zip can decompress something - win_size = self._cwe - self._cws - if win_size < 8: + if self._cwe - self._cws < 8: self._cwe = self._cws + 8 # END adjust winsize @@ -196,10 +221,18 @@ def read(self, size=-1): # get the actual window end to be sure we don't use it for computations self._cwe = self._cws + len(indata) - + dcompdat = self._zip.decompress(indata, size) + # update the amount of compressed bytes read + # We feed possibly overlapping chunks, which is why the unconsumed tail + # has to be taken into consideration, as well as the unused data + # if we hit the end of the stream + self._cbr += len(indata) - len(self._zip.unconsumed_tail) self._br += len(dcompdat) + + print size, self._br, self._cbr, len(indata), self._cws, self._cwe, len(self._zip.unused_data), len(self._zip.unconsumed_tail) + if dat: dcompdat = dat + dcompdat @@ -252,7 +285,7 @@ class FDCompressedSha1Writer(Sha1Writer): def __init__(self, fd): super(FDCompressedSha1Writer, self).__init__() self.fd = fd - self.zip = zlib.compressobj(Z_BEST_SPEED) + self.zip = zlib.compressobj(zlib.Z_BEST_SPEED) #{ Stream Interface diff --git a/test/test_stream.py b/test/test_stream.py index 69a93ad0f..41f2b235a 100644 --- a/test/test_stream.py +++ b/test/test_stream.py @@ -49,12 +49,20 @@ def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): assert rest == cdata[-len(rest):] # END handle rest + if isinstance(stream, DecompressMemMapReader): + assert len(stream._m) == stream.compressed_bytes_read() + # END handle special type + rewind_stream(stream) # read everything rdata = stream.read() assert rdata == cdata + if isinstance(stream, DecompressMemMapReader): + assert len(stream._m) == stream.compressed_bytes_read() + # END handle special type + def test_decompress_reader(self): for close_on_deletion in range(2): for with_size in range(2): @@ -82,15 +90,7 @@ def test_decompress_reader(self): assert reader._s == len(cdata) # END get reader - def rewind(r): - r._zip = zlib.decompressobj() - r._br = r._cws = r._cwe = 0 - if with_size: - r._parse_header_info() - # END skip header - # END make rewind func - - self._assert_stream_reader(reader, cdata, rewind) + self._assert_stream_reader(reader, cdata, lambda r: r.seek(0)) # put in a dummy stream for closing dummy = DummyStream() @@ -99,7 +99,6 @@ def rewind(r): assert not dummy.closed del(reader) assert dummy.closed == close_on_deletion - #zdi# # END for each datasize # END whether size should be used # END whether stream should be closed when deleted From b6db082874b528b431d90de898a3061b2b6d9c36 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 16 Jun 2010 14:01:45 +0200 Subject: [PATCH 0017/2375] DecompressMemMapReader: improved compressed_bytes_read method with alternate route which is a bit less efficient, but works without a custom zlib --- stream.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/stream.py b/stream.py index de7ddcd86..fb58125bf 100644 --- a/stream.py +++ b/stream.py @@ -120,16 +120,26 @@ def compressed_bytes_read(self): # until it is finished, to yield the actual number of compressed bytes # belonging to the decompressed object # We are using a custom zlib module for this, if its not present, - # we can only hope it works. + # we try to put in additional bytes up for decompression if feasible + # and check for the unused_data. + # Only scrub the stream forward if we are officially done with the # bytes we were to have. - if self._br == self._s and hasattr(self._zip, 'status') and self._zip.status == zlib.Z_OK: + if self._br == self._s and not self._zip.unused_data: # manipulate the bytes-read to allow our own read method to coninute # but keep the window at its current position self._br = 0 - while self._zip.status == zlib.Z_OK: - self.read(mmap.PAGESIZE) - # END scrub-loop + if hasattr(self._zip, 'status'): + while self._zip.status == zlib.Z_OK: + self.read(mmap.PAGESIZE) + # END scrub-loop custom zlib + else: + # pass in additional pages, until we have unused data + while not self._zip.unused_data and self._cbr != len(self._m): + self.read(mmap.PAGESIZE) + # END scrub-loop default zlib + # END handle stream scrubbing + # reset bytes read, just to be sure self._br = self._s # END handle stream scrubbing @@ -231,8 +241,6 @@ def read(self, size=-1): self._cbr += len(indata) - len(self._zip.unconsumed_tail) self._br += len(dcompdat) - print size, self._br, self._cbr, len(indata), self._cws, self._cwe, len(self._zip.unused_data), len(self._zip.unconsumed_tail) - if dat: dcompdat = dat + dcompdat From 4977bc52938c058123f2a3f6e0dbf6fc404550dc Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 16 Jun 2010 17:36:57 +0200 Subject: [PATCH 0018/2375] implemented direct pack reading - currently not all information is passed on, the absolute offset into the packfile could be interesting to the caller --- fun.py | 4 +-- pack.py | 82 ++++++++++++++++++++++++++++++++++------------- stream.py | 29 ++++++++++++++++- test/test_pack.py | 3 ++ 4 files changed, 92 insertions(+), 26 deletions(-) diff --git a/fun.py b/fun.py index b2e684472..bf223e904 100644 --- a/fun.py +++ b/fun.py @@ -53,7 +53,7 @@ def pack_object_header_info(data): The type_id should be interpreted according to the ``type_id_to_type_map`` map The byte-offset specifies the start of the actual zlib compressed datastream :param m: random-access memory, like a string or memory map""" - c = b0 # first byte + c = ord(data[0]) # first byte i = 1 # next char to read type_id = (c >> 4) & 7 # numeric type size = c & 15 # starting size @@ -66,7 +66,7 @@ def pack_object_header_info(data): # END character loop try: - return (type_id_to_type_map[type_id], size) + return (type_id, size, i) except KeyError: # invalid object type - we could try to be smart now and decode part # of the stream to get the info, problem is that we had trouble finding diff --git a/pack.py b/pack.py index 2c01f0452..fa5e43b31 100644 --- a/pack.py +++ b/pack.py @@ -8,6 +8,8 @@ from fun import ( pack_object_header_info, + stream_copy, + chunk_size, OFS_DELTA, REF_DELTA ) @@ -20,6 +22,7 @@ ) from stream import ( DecompressMemMapReader, + NullStream ) from struct import ( @@ -34,50 +37,61 @@ def pack_object_at(data, as_stream): """ - :return: info or stream object of the correct type according to the type - of the object, REF_DELTAS will not be resolved in case a stream is desired. - The resulting ODeltaPackStream will have None instead of a stream. + :return: tuple(num_header_bytes, PackInfo|PackStream) + Tuple of number of additional bytes read from data until the data stream begins + and object of the correct type according to the type of the object. + If as_stream is True, the object will contain a stream, allowing the + data to be read decompressed. :param data: random accessable data at which the header of an object can be read :param as_stream: if True, a stream object will be returned that can read the data, otherwise you receive an info object only :note: a bit redundant, but it needs to be as fast as possible !""" type_id, uncomp_size, data_offset = pack_object_header_info(data) - + total_offset = None # set later, actual offset until data stream begins + obj = None if type_id == OFS_DELTA: - i = 0 + i = data_offset delta_offset = 0 s = 7 - while c & 0x80: + while True: c = ord(data[i]) - i += 1 delta_offset += (c & 0x7f) << s + i += 1 + if not (c & 0x80): + break s += 7 # END character loop + total_offset = i if as_stream: - stream = DecompressMemMapReader(buffer(data, i), False, uncomp_size) - return ODeltaPackStream(type_id, uncomp_size, delta_offset, stream) + stream = DecompressMemMapReader(buffer(data, total_offset), False, uncomp_size) + obj = ODeltaPackStream(type_id, uncomp_size, delta_offset, stream) else: - return ODeltaPackInfo(type_id, uncomp_size, delta_offset) + obj = ODeltaPackInfo(type_id, uncomp_size, delta_offset) # END handle stream elif type_id == REF_DELTA: - ref_sha = data[:20] + total_offset = data_offset+20 + ref_sha = data[data_offset:total_offset] + if as_stream: - stream = DecompressMemMapReader(buffer(data, 20), False, uncomp_size) - return ODeltaPackStream(type_id, uncomp_size, ref_sha, stream) + stream = DecompressMemMapReader(buffer(data, total_offset), False, uncomp_size) + obj = ODeltaPackStream(type_id, uncomp_size, ref_sha, stream) else: - return ODeltaPackInfo(type_id, uncomp_size, ref_sha) + obj = ODeltaPackInfo(type_id, uncomp_size, ref_sha) # END handle stream else: + total_offset = data_offset # assume its a base object if as_stream: # if no size is given, it will read the header on first access - stream = DecompressMemMapReader(buffer(data, data_offset), False) - return OPackStream(type_id, uncomp_size, stream) + stream = DecompressMemMapReader(buffer(data, data_offset), False, uncomp_size) + obj = OPackStream(type_id, uncomp_size, stream) else: - return OPackInfo(type_id, uncomp_size) + obj = OPackInfo(type_id, uncomp_size) # END handle as_stream # END handle type id + return total_offset, obj + #} END utilities @@ -267,7 +281,8 @@ class PackFile(LazyMixin): __slots__ = ('_packpath', '_data', '_size', '_version') # offset into our data at which the first object starts - _first_object_offset = 3*4 + _first_object_offset = 3*4 # header bytes + _footer_size = 20 # final sha def __init__(self, packpath): self._packpath = packpath @@ -287,16 +302,28 @@ def _set_cache_(self, attr): assert self._version in (2, 3), "Cannot handle pack format version %i" % self._version # END handle header - def _iter_objects(self, start_offset, as_stream): + def _iter_objects(self, start_offset, as_stream=True): """Handle the actual iteration of objects within this pack""" data = self._data - size = len(data) + content_size = len(data) - self._footer_size cur_offset = start_offset or self._first_object_offset - while cur_offset < size: - ostream = pack_object_at(buffer(data, cur_offset), True) - # TODO: Decompressor needs to track the size of bytes actually decompressed + null = NullStream() + while cur_offset < content_size: + header_offset, ostream = pack_object_at(buffer(data, cur_offset), True) + # scrub the stream to the end - this decompresses the object, but yields + # the amount of compressed bytes we need to get to the next offset + + stream_copy(ostream.read, null.write, ostream.size, chunk_size) + cur_offset += header_offset + ostream.stream.compressed_bytes_read() + + # if a stream is requested, reset it beforehand + # Otherwise return the Stream object directly, its derived from the + # info object + if as_stream: + ostream.stream.seek(0) + yield ostream # END until we have read everything #{ Interface @@ -329,6 +356,15 @@ def stream(self, offset): :return: OPackStream instance, the actual type differs depending on the type_id attribute""" raise NotImplementedError() + def stream_iter(self, start_offset=0): + """:return: iterator yielding OPackStream compatible instances, allowing + to access the data in the pack directly. + :param start_offset: offset to the first object to iterate. If 0, iteration + starts at the very first object in the pack. + :note: Iterating a pack directly is costly as the datastream has to be decompressed + to determine the bounds between the objects""" + return self._iter_objects(start_offset, as_stream=True) + #} END Read-Database like Interface diff --git a/stream.py b/stream.py index fb58125bf..898059def 100644 --- a/stream.py +++ b/stream.py @@ -17,6 +17,21 @@ #{ RO Streams +class NullStream(object): + """A stream that does nothing but providing a stream interface. + Use it like /dev/null""" + __slots__ = tuple() + + def read(self, size=0): + return '' + + def close(self): + pass + + def write(self, data): + return len(data) + + class DecompressMemMapReader(LazyMixin): """Reads data in chunks from a memory map and decompresses it. The client sees only the uncompressed data, respective file-like read calls are handling on-demand @@ -144,7 +159,9 @@ def compressed_bytes_read(self): self._br = self._s # END handle stream scrubbing - return self._cbr - len(self._zip.unused_data) + # unused data ends up in the unconsumed tail, which was removed + # from the count already + return self._cbr def seek(self, offset, whence=os.SEEK_SET): """Allows to reset the stream to restart reading @@ -243,7 +260,17 @@ def read(self, size=-1): if dat: dcompdat = dat + dcompdat + # END prepend our cached data + # it can happen, depending on the compression, that we get less bytes + # than ordered as it needs the final portion of the data as well. + # Recursively resolve that. + # Note: dcompdat can be empty even though we still appear to have bytes + # to read, if we are called by compressed_bytes_read - it manipulates + # us to empty the stream + if dcompdat and len(dcompdat) < size and self._br < self._s: + dcompdat += self.read(size-len(dcompdat)) + # END handle special case return dcompdat #} END RO streams diff --git a/test/test_pack.py b/test/test_pack.py index 14d8a2496..a5234a6ce 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -52,6 +52,9 @@ def _assert_pack_file(self, pack, version, size): assert pack.size() == size assert len(pack.checksum()) == 20 + objs = list(pack.stream_iter()) + assert len(objs) == size + def test_pack_index(self): # check version 1 and 2 From ca8236451439490670822103b475df9925884e32 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 16 Jun 2010 21:57:22 +0200 Subject: [PATCH 0019/2375] Implemented offset based pack object collection including test, next up is the actual stream delta handling --- base.py | 59 +++++++++++------ fun.py | 9 +++ pack.py | 157 +++++++++++++++++++++++++++++++--------------- test/test_base.py | 12 +++- test/test_pack.py | 29 ++++++++- 5 files changed, 191 insertions(+), 75 deletions(-) diff --git a/base.py b/base.py index d12181229..aa917858d 100644 --- a/base.py +++ b/base.py @@ -5,7 +5,10 @@ zlib ) -from fun import type_id_to_type_map +from fun import ( + type_id_to_type_map, + type_to_type_id_map + ) __all__ = ('OInfo', 'OPackInfo', 'ODeltaPackInfo', 'OStream', 'OPackStream', 'ODeltaPackStream', @@ -41,6 +44,10 @@ def sha(self): @property def type(self): return self[1] + + @property + def type_id(self): + return type_to_type_id_map[self[1]] @property def size(self): @@ -50,28 +57,40 @@ def size(self): class OPackInfo(tuple): """As OInfo, but provides a type_id property to retrieve the numerical type id, and - does not include a sha""" + does not include a sha. + + Additionally, the pack_offset is the absolute offset into the packfile at which + all object information is located. The data_offset property points to the abosolute + location in the pack at which that actual data stream can be found.""" __slots__ = tuple() - def __new__(cls, type, size): - return tuple.__new__(cls, (type, size)) + def __new__(cls, packoffset, dataoffset, type, size): + return tuple.__new__(cls, (packoffset, dataoffset, type, size)) def __init__(self, *args): tuple.__init__(self) #{ Interface + @property + def pack_offset(self): + return self[0] + + @property + def data_offset(self): + return self[1] + @property def type(self): - return type_id_to_type_map[self[0]] + return type_id_to_type_map[self[2]] @property def type_id(self): - return self[0] + return self[2] @property def size(self): - return self[1] + return self[3] #} END interface @@ -79,17 +98,17 @@ def size(self): class ODeltaPackInfo(OPackInfo): """Adds delta specific information, Either the 20 byte sha which points to some object in the database, - or the base_offset, being an offset into the pack at which our base - can be found""" + or the negative offset from the pack_offset, so that pack_offset - delta_info yields + the pack offset of the base object""" __slots__ = tuple() - def __new__(cls, type, size, delta_info): - return tuple.__new__(cls, (type, size, delta_info)) + def __new__(cls, packoffset, dataoffset, type, size, delta_info): + return tuple.__new__(cls, (packoffset, dataoffset, type, size, delta_info)) #{ Interface @property def delta_info(self): - return self[2] + return self[4] #} END interface @@ -123,17 +142,17 @@ class OPackStream(OPackInfo): is provided""" __slots__ = tuple() - def __new__(cls, type, size, stream, *args): + def __new__(cls, packoffset, dataoffset, type, size, stream, *args): """Helps with the initialization of subclasses""" - return tuple.__new__(cls, (type, size, stream)) + return tuple.__new__(cls, (packoffset, dataoffset, type, size, stream)) #{ Stream Reader Interface def read(self, size=-1): - return self[2].read(size) + return self[4].read(size) @property def stream(self): - return self[2] + return self[4] #} END stream reader interface @@ -141,17 +160,17 @@ class ODeltaPackStream(ODeltaPackInfo): """Provides a stream outputting the uncompressed offset delta information""" __slots__ = tuple() - def __new__(cls, type, size, delta_info, stream): - return tuple.__new__(cls, (type, size, delta_info, stream)) + def __new__(cls, packoffset, dataoffset, type, size, delta_info, stream): + return tuple.__new__(cls, (packoffset, dataoffset, type, size, delta_info, stream)) #{ Stream Reader Interface def read(self, size=-1): - return self[3].read(size) + return self[5].read(size) @property def stream(self): - return self[3] + return self[5] #} END stream reader interface diff --git a/fun.py b/fun.py index bf223e904..7999c0a92 100644 --- a/fun.py +++ b/fun.py @@ -24,6 +24,15 @@ REF_DELTA : "REF_DELTA" # REFERENCE DELTA } +type_to_type_id_map = dict( + commit=1, + tree=2, + blob=3, + tag=4, + OFS_DELTA=OFS_DELTA, + REF_DELTA=REF_DELTA + ) + # used when dealing with larger streams chunk_size = 1000*1000 diff --git a/pack.py b/pack.py index fa5e43b31..8de2a47db 100644 --- a/pack.py +++ b/pack.py @@ -1,4 +1,7 @@ """Contains PackIndexFile and PackFile implementations""" +from gitdb.exc import ( + BadObject, + ) from util import ( LockedFD, LazyMixin, @@ -31,67 +34,68 @@ __all__ = ('PackIndexFile', 'PackFile') +_delta_types = (OFS_DELTA, REF_DELTA) #{ Utilities -def pack_object_at(data, as_stream): +def pack_object_at(data, offset, as_stream): """ - :return: tuple(num_header_bytes, PackInfo|PackStream) - Tuple of number of additional bytes read from data until the data stream begins - and object of the correct type according to the type of the object. + :return: PackInfo|PackStream + an object of the correct type according to the type_id of the object. If as_stream is True, the object will contain a stream, allowing the data to be read decompressed. - :param data: random accessable data at which the header of an object can be read + :param data: random accessable data containing all required information + :parma offset: offset in to the data at which the object information is located :param as_stream: if True, a stream object will be returned that can read - the data, otherwise you receive an info object only - :note: a bit redundant, but it needs to be as fast as possible !""" - type_id, uncomp_size, data_offset = pack_object_header_info(data) - total_offset = None # set later, actual offset until data stream begins - obj = None + the data, otherwise you receive an info object only""" + ldata = len(data) # debug + data = buffer(data, offset) + type_id, uncomp_size, data_rela_offset = pack_object_header_info(data) + total_rela_offset = None # set later, actual offset until data stream begins + delta_info = None + + # OFFSET DELTA if type_id == OFS_DELTA: - i = data_offset - delta_offset = 0 - s = 7 - while True: + i = data_rela_offset + c = ord(data[i]) + i += 1 + delta_offset = c & 0x7f + while c & 0x80: c = ord(data[i]) - delta_offset += (c & 0x7f) << s i += 1 - if not (c & 0x80): - break - s += 7 + delta_offset += 1 + delta_offset = (delta_offset << 7) + (c & 0x7f) # END character loop - total_offset = i - if as_stream: - stream = DecompressMemMapReader(buffer(data, total_offset), False, uncomp_size) - obj = ODeltaPackStream(type_id, uncomp_size, delta_offset, stream) - else: - obj = ODeltaPackInfo(type_id, uncomp_size, delta_offset) - # END handle stream + delta_info = delta_offset + total_rela_offset = i + # REF DELTA elif type_id == REF_DELTA: - total_offset = data_offset+20 - ref_sha = data[data_offset:total_offset] - - if as_stream: - stream = DecompressMemMapReader(buffer(data, total_offset), False, uncomp_size) - obj = ODeltaPackStream(type_id, uncomp_size, ref_sha, stream) - else: - obj = ODeltaPackInfo(type_id, uncomp_size, ref_sha) - # END handle stream + total_rela_offset = data_rela_offset+20 + ref_sha = data[data_rela_offset:total_rela_offset] + delta_info = ref_sha + # BASE OBJECT else: - total_offset = data_offset # assume its a base object - if as_stream: - # if no size is given, it will read the header on first access - stream = DecompressMemMapReader(buffer(data, data_offset), False, uncomp_size) - obj = OPackStream(type_id, uncomp_size, stream) - else: - obj = OPackInfo(type_id, uncomp_size) - # END handle as_stream + total_rela_offset = data_rela_offset # END handle type id - return total_offset, obj - + abs_data_offset = offset + total_rela_offset + if as_stream: + stream = DecompressMemMapReader(buffer(data, total_rela_offset), False, uncomp_size) + if delta_info is None: + return OPackStream(offset, abs_data_offset, type_id, uncomp_size, stream) + else: + return ODeltaPackStream(offset, abs_data_offset, type_id, uncomp_size, delta_info, stream) + else: + if delta_info is None: + return OPackInfo(offset, abs_data_offset, type_id, uncomp_size) + else: + return ODeltaPackInfo(offset, abs_data_offset, type_id, uncomp_size, delta_info) + # END handle info + # END handle stream + + #} END utilities @@ -310,12 +314,12 @@ def _iter_objects(self, start_offset, as_stream=True): null = NullStream() while cur_offset < content_size: - header_offset, ostream = pack_object_at(buffer(data, cur_offset), True) + ostream = pack_object_at(data, cur_offset, True) # scrub the stream to the end - this decompresses the object, but yields # the amount of compressed bytes we need to get to the next offset stream_copy(ostream.read, null.write, ostream.size, chunk_size) - cur_offset += header_offset + ostream.stream.compressed_bytes_read() + cur_offset += (ostream.data_offset - ostream.pack_offset) + ostream.stream.compressed_bytes_read() # if a stream is requested, reset it beforehand @@ -326,7 +330,7 @@ def _iter_objects(self, start_offset, as_stream=True): yield ostream # END until we have read everything - #{ Interface + #{ Pack Information def size(self): """:return: The amount of objects stored in this pack""" @@ -340,7 +344,58 @@ def checksum(self): """:return: 20 byte sha1 hash on all object sha's contained in this file""" return self._data[-20:] - #} END interface + #} END pack information + + #{ Pack Specific + + def collect_streams(self, offset): + """ + :return: list of pack streams which are required to build the object + at the given offset. The first entry of the list is the object at offset, + the last one is either a full object, or a REF_Delta stream. The latter + type needs its reference object to be locked up in an ODB to form a valid + delta chain. + :param offset: specifies the first byte of the object within this pack""" + out = list() + while True: + ostream = pack_object_at(self._data, offset, True) + out.append(ostream) + if ostream.type_id == OFS_DELTA: + offset = ostream.pack_offset - ostream.delta_info + else: + # the only thing we can lookup are OFFSET deltas. Everything + # else is either an object, or a ref delta, in the latter + # case someone else has to find it + break + # END handle type + # END while chaining streams + return out + + def to_delta_stream(self, stream_list): + """Convert the given list of streams into a stream which resolves deltas + (if availble) when reading from it. + :param stream_list: one or more stream objects. If the first stream is a Delta, + there must be at least two streams in the list. The list's last stream + must be a non-delta stream. + :return: Non-Delta OPackStream object whose stream can be used to obtain + the decompressed resolved data + :raise ValueError: if the stream list cannot be handled due to a missing base object""" + if len(stream_list) == 1: + if stream_list[0].type_id in _delta_types: + raise ValueError("Cannot resolve deltas if only one stream is given", stream_list[0].type) + # its an object, no need to resolve anything + return stream_list[0] + # END single object special handling + + if stream_list[-1].type_id in _delta_types: + raise ValueError("Cannot resolve deltas if there is no base object stream, last one was type: %s" % stream_list[-1].type) + # END check stream + + # just create the respective stream wrapper + raise NotImplementedError() + + + #} END pack specific #{ Read-Database like Interface @@ -348,13 +403,13 @@ def info(self, offset): """Retrieve information about the object at the given file-absolute offset :param offset: byte offset :return: OPackInfo instance, the actual type differs depending on the type_id attribute""" - raise NotImplementedError() + return pack_object_at(self._data, offset or self._first_object_offset, False) def stream(self, offset): """Retrieve an object at the given file-relative offset as stream along with its information :param offset: byte offset :return: OPackStream instance, the actual type differs depending on the type_id attribute""" - raise NotImplementedError() + return pack_object_at(self._data, offset or self._first_object_offset, True) def stream_iter(self, start_offset=0): """:return: iterator yielding OPackStream compatible instances, allowing @@ -390,12 +445,14 @@ def _iter_objects(self, as_stream): def info(self, sha): """Retrieve information about the object identified by the given sha :param sha: 20 byte sha1 + :raise BadObject: :return: OInfo instance""" raise NotImplementedError() def stream(self, sha): """Retrieve an object stream along with its information as identified by the given sha :param sha: 20 byte sha1 + :raise BadObject: :return: OStream instance""" raise NotImplementedError() diff --git a/test/test_base.py b/test/test_base.py index f7ddebaa2..524bf3054 100644 --- a/test/test_base.py +++ b/test/test_base.py @@ -21,22 +21,28 @@ def test_streams(self): # test info sha = NULL_HEX_SHA s = 20 + blob_id = 3 + info = OInfo(sha, str_blob_type, s) assert info.sha == sha assert info.type == str_blob_type + assert info.type_id == blob_id assert info.size == s # test pack info # provides type_id - blob_id = 3 - pinfo = OPackInfo(blob_id, s) + pinfo = OPackInfo(0, 1, blob_id, s) assert pinfo.type == str_blob_type assert pinfo.type_id == blob_id + assert pinfo.pack_offset == 0 + assert pinfo.data_offset == 1 - dpinfo = ODeltaPackInfo(blob_id, s, sha) + dpinfo = ODeltaPackInfo(0, 1, blob_id, s, sha) assert dpinfo.type == str_blob_type assert dpinfo.type_id == blob_id assert dpinfo.delta_info == sha + assert dpinfo.pack_offset == 0 + assert dpinfo.data_offset == 1 # test ostream diff --git a/test/test_pack.py b/test/test_pack.py index a5234a6ce..f2b0f9481 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -52,8 +52,33 @@ def _assert_pack_file(self, pack, version, size): assert pack.size() == size assert len(pack.checksum()) == 20 - objs = list(pack.stream_iter()) - assert len(objs) == size + num_obj = 0 + for obj in pack.stream_iter(): + num_obj += 1 + info = pack.info(obj.pack_offset) + stream = pack.stream(obj.pack_offset) + + assert info.pack_offset == stream.pack_offset + assert info.data_offset == stream.data_offset + assert info.type_id == stream.type_id + assert hasattr(stream, 'read') + + # it should be possible to read from both streams + assert obj.read() == stream.read() + + streams = pack.collect_streams(obj.pack_offset) + assert streams + + # read the stream + try: + dstream = pack.to_delta_stream(streams) + except ValueError: + # ignore these, old git versions use only ref deltas, + # which we havent resolved ( as we are without an index ) + continue + # END get deltastream + # END for each object + assert num_obj == size def test_pack_index(self): From 84c4e5a33aac3010d197a3a92adbff52a83969da Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 17 Jun 2010 00:39:17 +0200 Subject: [PATCH 0020/2375] initial research on possible delta-apply algorithms. True streaming appears only possible if delta opcodes are acessing only sequential memory, but through mmaps, it should still be possible to obtain decent performance even on big files --- pack.py | 6 ++-- stream.py | 75 +++++++++++++++++++++++++++++++++++++++++++++++ test/test_pack.py | 8 +++++ 3 files changed, 86 insertions(+), 3 deletions(-) diff --git a/pack.py b/pack.py index 8de2a47db..314ae07c1 100644 --- a/pack.py +++ b/pack.py @@ -25,7 +25,8 @@ ) from stream import ( DecompressMemMapReader, - NullStream + DeltaApplyReader, + NullStream, ) from struct import ( @@ -49,7 +50,6 @@ def pack_object_at(data, offset, as_stream): :parma offset: offset in to the data at which the object information is located :param as_stream: if True, a stream object will be returned that can read the data, otherwise you receive an info object only""" - ldata = len(data) # debug data = buffer(data, offset) type_id, uncomp_size, data_rela_offset = pack_object_header_info(data) total_rela_offset = None # set later, actual offset until data stream begins @@ -392,7 +392,7 @@ def to_delta_stream(self, stream_list): # END check stream # just create the respective stream wrapper - raise NotImplementedError() + return DeltaApplyReader(stream_list) #} END pack specific diff --git a/stream.py b/stream.py index 898059def..735924845 100644 --- a/stream.py +++ b/stream.py @@ -272,7 +272,82 @@ def read(self, size=-1): dcompdat += self.read(size-len(dcompdat)) # END handle special case return dcompdat + + +class DeltaApplyReader(LazyMixin): + """A reader which dynamically applies pack deltas to a base object, keeping the + memory demands to a minimum. + + The size of the final object is only obtainable once all deltas have been + applied, unless it is retrieved from a pack index. + + The uncompressed Delta has the following layout (MSB being a most significant + bit encoded dynamic size): + + * MSB Source Size - the size of the base against which the delta was created + * MSB Target Size - the size of the resulting data after the delta was applied + * A list of one byte commands (cmd) which are followed by a specific protocol: + + * cmd & 0x80 - copy delta_data[offset:offset+size] + + * Followed by an encoded offset into the delta data + * Followed by an encoded size of the chunk to copy + + * cmd & 0x7f - insert + + * insert cmd bytes from the delta buffer into the output stream + + * cmd == 0 - invalid operation ( or error in delta stream ) + """ + __slots__ = ( + "_streams", # tuple of our stream objects + "_readers", # list of read methods from our streams + "_mm_target", # memory map of the delta-applied data + ) + + def __init__(self, stream_list): + """Initialize this instance with a list of streams, the first stream being + the delta to apply on top of all following deltas, the last stream being the + base object onto which to apply the deltas""" + assert len(stream_list) > 1, "Need at least one delta and one base stream" + + self._streams = tuple(stream_list) + self._readers = None # TODO + + def _set_cache_(self, attr): + """If we are here, we apply the actual deltas""" + # fill in delta info structures, providing the source and target buffer + # sizes. + # Allocate private memory map big enough to hold the first base buffer + # It can be swapped out if it is too large. We need random access to it + + # allocate memory map large enough for the largest (intermediate) target + # We will use it as scratch space for all delta ops. If the final + # target buffer is smaller than our allocated space, we just use parts + # of it + + # for each delta to apply, memory map the decompressed delta and + # work on the op-codes to reconstruct everything. + # For the actual copying, we use a seek and write pattern of buffer + # slices. + + # NOTE: on py pre 2.5, all memory maps must actually be some kind + # of memory buffer,like StringIO ( ouch ;) ) + + + + # TODO: Once that works, figure out the ordering of the opcodes. If they + # are always in-order/sequential, an alternate implementation could + # use stream access only. Of course this would mean we would read + # all deltas in advance, analyse the opcode ranges to determine a final + # concatenated opcode list which indicates what to copy from which delta + # to which position. This preprocessing would allow true streaming + + def read(self, size=0): + # pass the call to our lazy-loaded delta-applied data + return self._mm_target.read(size) + #} END RO streams diff --git a/test/test_pack.py b/test/test_pack.py index f2b0f9481..d972bef14 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -77,6 +77,14 @@ def _assert_pack_file(self, pack, version, size): # which we havent resolved ( as we are without an index ) continue # END get deltastream + + # TODO: TestStream._assert_stream_reader does that already, should + # be used instead + # read all + dstream.read() + + # read chunks + # END for each object assert num_obj == size From 6a4eee20486eca91d06d7ba1420c8a31bcf0f4a8 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 17 Jun 2010 11:20:06 +0200 Subject: [PATCH 0021/2375] initial version of delta-apply, but more pedandic testing is required --- fun.py | 89 ++++++++++++++++++++++++++++++++++++++++- stream.py | 100 +++++++++++++++++++++++++++++++++++++++------- test/test_pack.py | 6 +-- util.py | 13 ++++++ 4 files changed, 188 insertions(+), 20 deletions(-) diff --git a/fun.py b/fun.py index 7999c0a92..52688ba7b 100644 --- a/fun.py +++ b/fun.py @@ -9,6 +9,7 @@ from util import zlib decompressobj = zlib.decompressobj +import mmap # INVARIANTS OFS_DELTA = 6 @@ -34,7 +35,7 @@ ) # used when dealing with larger streams -chunk_size = 1000*1000 +chunk_size = 1000*mmap.PAGESIZE __all__ = ('is_loose_object', 'loose_object_header_info', 'object_header_info', 'write_object' ) @@ -83,6 +84,26 @@ def pack_object_header_info(data): raise BadObjectType(type_id) # END handle exceptions +def msb_size(data, offset=0): + """:return: tuple(read_bytes, size) read the msb size from the given random + access data starting at the given byte offset""" + size = 0 + i = 0 + l = len(data) + hit_msb = False + while i < l: + c = ord(data[i+offset]) + size |= (c & 0x7f) << i*7 + i += 1 + if not c & 0x80: + hit_msb = True + break + # END check msb bit + # END while in range + if not hit_msb: + raise AssertionError("Could not find terminating MSB byte in data stream") + return i+offset, size + def write_object(type, size, read, write, chunk_size=chunk_size): """Write the object as identified by type, size and source_stream into the target_stream @@ -111,8 +132,15 @@ def stream_copy(read, write, size, chunk_size): # WRITE ALL DATA UP TO SIZE while True: cs = min(chunk_size, size-dbw) - data_len = write(read(cs)) + # NOTE: not all write methods return the amount of written bytes, like + # mmap.write. Its bad, but we just deal with it ... perhaps its not + # even less efficient + # data_len = write(read(cs)) + # dbw += data_len + data = read(cs) + data_len = len(data) dbw += data_len + write(data) if data_len < cs or dbw == size: break # END check for stream end @@ -120,5 +148,62 @@ def stream_copy(read, write, size, chunk_size): return dbw +def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_file): + """Apply data from a delta buffer using a source buffer to the target file, + which will be written to + :param src_buf: random access data from which the delta was created + :param src_buf_size: size of the source buffer in bytes + :param delta_buf_size: size fo the delta buffer in bytes + :param delta_buf: random access delta data + :param target_file: file like object to write the result to + :note: transcribed to python from the similar routine in patch-delta.c""" + i = 0 + twrite = target_file.write + db = delta_buf + while i < delta_buf_size: + c = ord(db[i]) + i += 1 + if c & 0x80: + cp_off, cp_size = 0, 0 + if (c & 0x01): + cp_off = ord(db[i]) + i += 1 + if (c & 0x02): + cp_off |= (ord(db[i]) << 8) + i += 1 + if (c & 0x04): + cp_off |= (ord(db[i]) << 16) + i += i + if (c & 0x08): + cp_off |= (ord(db[i]) << 24) + i += 1 + if (c & 0x10): + cp_size = ord(db[i]) + i += 1 + if (c & 0x20): + cp_size |= (ord(db[i]) << 8) + i += 1 + if (c & 0x40): + cp_size |= (ord(db[i]) << 16) + i += 1 + + if not cp_size: + cp_size = 0x10000 + # maybe skip this check ? + if (cp_off + cp_size < cp_size or + cp_off + cp_size > src_buf_size): + break + twrite(src_buf[cp_off:cp_off+cp_size]) + elif c: + twrite(db[i:i+c]) + i += c + else: + raise ValueError("unexpected delta opcode 0") + # END handle command byte + # END while processing delta data + + # yes, lets use the exact same error message that git uses :) + assert i == delta_buf_size, "delta replay has gone wild" + #} END routines diff --git a/stream.py b/stream.py index 735924845..5ced7ada0 100644 --- a/stream.py +++ b/stream.py @@ -4,7 +4,14 @@ import mmap import os +from fun import ( + msb_size, + stream_copy, + apply_delta_data + ) + from util import ( + allocate_memory, LazyMixin, make_sha, write, @@ -300,9 +307,11 @@ class DeltaApplyReader(LazyMixin): * cmd == 0 - invalid operation ( or error in delta stream ) """ __slots__ = ( - "_streams", # tuple of our stream objects - "_readers", # list of read methods from our streams + "_bstream", # base stream to which to apply the deltas + "_dstreams", # tuple of delta stream readers "_mm_target", # memory map of the delta-applied data + "_size", # actual number of bytes in _mm_target + "_br" # number of bytes read ) def __init__(self, stream_list): @@ -311,31 +320,81 @@ def __init__(self, stream_list): base object onto which to apply the deltas""" assert len(stream_list) > 1, "Need at least one delta and one base stream" - self._streams = tuple(stream_list) - self._readers = None # TODO + self._bstream = stream_list[-1] + self._dstreams = tuple(stream_list[:-1]) + self._br = 0 def _set_cache_(self, attr): """If we are here, we apply the actual deltas""" # fill in delta info structures, providing the source and target buffer # sizes. + buffer_offset_list = list() + final_target_size = None + max_target_size = 0 + for dstream in self._dstreams: + buf = dstream.read(512) # read the header information + X + offset, src_size = msb_size(buf) + offset, target_size = msb_size(buf, offset) + if final_target_size is None: + final_target_size = target_size + # END set final target size + buffer_offset_list.append((buffer(buf, offset), offset)) + max_target_size = max(max_target_size, target_size) + # END for each delta stream + + # sanity check - the first delta to apply should have the same source + # size as our actual base stream + base_size = self._bstream.size + target_size = max_target_size + + # if we have more than 1 delta to apply, we will swap buffers, hence we must + # assure that all buffers we use are large enough to hold all the results + if len(self._dstreams) > 1: + base_size = target_size = max(base_size, max_target_size) + # END adjust buffer sizes + # Allocate private memory map big enough to hold the first base buffer - # It can be swapped out if it is too large. We need random access to it + # We need random access to it + bbuf = allocate_memory(base_size) # allocate memory map large enough for the largest (intermediate) target # We will use it as scratch space for all delta ops. If the final # target buffer is smaller than our allocated space, we just use parts - # of it + # of it upon return. + tbuf = allocate_memory(target_size) # for each delta to apply, memory map the decompressed delta and # work on the op-codes to reconstruct everything. # For the actual copying, we use a seek and write pattern of buffer # slices. - - # NOTE: on py pre 2.5, all memory maps must actually be some kind - # of memory buffer,like StringIO ( ouch ;) ) - - + for (dbuf, offset), dstream in reversed(zip(buffer_offset_list, self._dstreams)): + # allocate a buffer to hold all delta data - fill in the data for + # fast access. We do this as we know that reading individual bytes + # from our stream would be slower than necessary ( although possible ) + # The dbuf buffer contains commands after the first two MSB sizes, the + # offset specifies the amount of bytes read to get the sizes. + ddata = allocate_memory(dstream.size - offset) + ddata.write(dbuf) + # read the rest from the stream. The size we give is larger than necessary + stream_copy(dstream.read, ddata.write, dstream.size, 256*mmap.PAGESIZE) + + ################################################################ + apply_delta_data(bbuf, len(bbuf), ddata, len(ddata), tbuf) + ################################################################ + + # finally, swap out source and target buffers. The target is now the + # base for the next delta to apply + bbuf, tbuf = tbuf, bbuf + bbuf.seek(0) + tbuf.seek(0) + # END for each delta to apply + + # its already seeked to 0, constrain it to the actual size + # NOTE: in the end of the loop, it swaps buffers, hence our target buffer + # is not tbuf, but bbuf ! + self._mm_target = bbuf + self._size = final_target_size # TODO: Once that works, figure out the ordering of the opcodes. If they # are always in-order/sequential, an alternate implementation could @@ -344,10 +403,21 @@ def _set_cache_(self, attr): # concatenated opcode list which indicates what to copy from which delta # to which position. This preprocessing would allow true streaming - def read(self, size=0): - # pass the call to our lazy-loaded delta-applied data - return self._mm_target.read(size) - + def read(self, count=0): + bl = self._size - self._br # bytes left + if count < 1 or count > bl: + count = bl + data = self._mm_target.read(count) + self._br += len(data) + return data + + def seek(self, offset, whence=os.SEEK_SET): + """Allows to reset the stream to restart reading + :raise ValueError: If offset and whence are not 0""" + if offset != 0 or whence != os.SEEK_SET: + raise ValueError("Can only seek to position 0") + # END handle offset + self._size #} END RO streams diff --git a/test/test_pack.py b/test/test_pack.py index d972bef14..5786fbf72 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -78,12 +78,12 @@ def _assert_pack_file(self, pack, version, size): continue # END get deltastream - # TODO: TestStream._assert_stream_reader does that already, should - # be used instead # read all - dstream.read() + assert len(dstream.read()) # read chunks + # NOTE: the current implementation is safe, it basically transfers + # all calls to the underlying memory map # END for each object assert num_obj == size diff --git a/util.py b/util.py index 5c2bb540b..f10b71b12 100644 --- a/util.py +++ b/util.py @@ -94,6 +94,19 @@ def stream_copy(source, destination, chunk_size=512*1024): # END reading output stream return br +def allocate_memory(size): + """:return: a file-protocol accessible memory block of the given size""" + try: + return mmap.mmap(-1, size) # read-write by default + except EnvironmentError: + # setup real memory instead + # this of course may fail if the amount of memory is not available in + # one chunk - would only be the case in python 2.4, being more likely on + # 32 bit systems. + return cStringIO.StringIO("\0"*size) + # END handle memory allocation + + def file_contents_ro(fd, stream=False, allow_mmap=True): """:return: read-only contents of the file represented by the file descriptor fd :param fd: file descriptor opened for reading From f4b6e272963fefdb1e372b87a09e7c74680d6b52 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 17 Jun 2010 13:24:41 +0200 Subject: [PATCH 0022/2375] Implemented main PackEntity object retrieval method and moved constructor for delta_streams out of the PackFile, into the stream itself where it belongs. All this is still to be tested --- fun.py | 2 + pack.py | 145 ++++++++++++++++++++++++++++++++++------------ stream.py | 49 +++++++++++++++- test/test_pack.py | 9 ++- 4 files changed, 165 insertions(+), 40 deletions(-) diff --git a/fun.py b/fun.py index 52688ba7b..cbc37b2f0 100644 --- a/fun.py +++ b/fun.py @@ -14,6 +14,8 @@ # INVARIANTS OFS_DELTA = 6 REF_DELTA = 7 +delta_types = (OFS_DELTA, REF_DELTA) + type_id_to_type_map = { 0 : "", # EXT 1 1 : "commit", diff --git a/pack.py b/pack.py index 314ae07c1..811acaf98 100644 --- a/pack.py +++ b/pack.py @@ -5,19 +5,24 @@ from util import ( LockedFD, LazyMixin, - file_contents_ro, - unpack_from + unpack_from, + file_contents_ro, ) from fun import ( pack_object_header_info, + type_id_to_type_map, stream_copy, chunk_size, + delta_types, OFS_DELTA, - REF_DELTA + REF_DELTA, + msb_size ) -from base import ( +from base import ( # Amazing ! + OInfo, + OStream, OPackInfo, OPackStream, ODeltaPackInfo, @@ -35,7 +40,7 @@ __all__ = ('PackIndexFile', 'PackFile') -_delta_types = (OFS_DELTA, REF_DELTA) + #{ Utilities @@ -95,8 +100,6 @@ def pack_object_at(data, offset, as_stream): # END handle info # END handle stream - - #} END utilities @@ -355,6 +358,7 @@ def collect_streams(self, offset): the last one is either a full object, or a REF_Delta stream. The latter type needs its reference object to be locked up in an ODB to form a valid delta chain. + If the object at offset is no delta, the size of the list is 1. :param offset: specifies the first byte of the object within this pack""" out = list() while True: @@ -370,31 +374,7 @@ def collect_streams(self, offset): # END handle type # END while chaining streams return out - - def to_delta_stream(self, stream_list): - """Convert the given list of streams into a stream which resolves deltas - (if availble) when reading from it. - :param stream_list: one or more stream objects. If the first stream is a Delta, - there must be at least two streams in the list. The list's last stream - must be a non-delta stream. - :return: Non-Delta OPackStream object whose stream can be used to obtain - the decompressed resolved data - :raise ValueError: if the stream list cannot be handled due to a missing base object""" - if len(stream_list) == 1: - if stream_list[0].type_id in _delta_types: - raise ValueError("Cannot resolve deltas if only one stream is given", stream_list[0].type) - # its an object, no need to resolve anything - return stream_list[0] - # END single object special handling - - if stream_list[-1].type_id in _delta_types: - raise ValueError("Cannot resolve deltas if there is no base object stream, last one was type: %s" % stream_list[-1].type) - # END check stream - - # just create the respective stream wrapper - return DeltaApplyReader(stream_list) - - + #} END pack specific #{ Read-Database like Interface @@ -437,8 +417,58 @@ def __init__(self, basename): self._pack = self.PackFileCls("%s.pack" % basename) # corresponding PackFile instance + def _sha_to_index(self, sha): + """:return: index for the given sha, or raise""" + index = self._index.sha_to_index(sha) + if index is None: + raise BadObject(sha) + return index + def _iter_objects(self, as_stream): - raise NotImplementedError + """Iterate over all objects in our index and yield their OInfo or OStream instences""" + raise NotImplementedError() + + def _object(self, sha, as_stream): + """:return: OInfo or OStream object providing information about the given sha""" + # its a little bit redundant here, but it needs to be efficient + offset = self._index.offset(self._sha_to_index(sha)) + type_id, uncomp_size, data_rela_offset = pack_object_header_info(buffer(self._pack._data, offset)) + if as_stream: + if type_id not in delta_types: + packstream = self._pack.stream(offset) + return OStream(sha, packstream.type, packstream.size, packstream.stream) + # END handle non-deltas + + # produce a delta stream containing all info + # To prevent it from applying the deltas when querying the size, + # we extract it from the delta stream ourselves + streams = self.collect_streams_at_offset(offset) + buf = streams[0].read(512) + offset, src_size = msb_size(buf) + offset, target_size = msb_size(buf, offset) + + streams[0].seek(0) # assure it can be read by the delta reader + dstream = DeltaApplyReader.new(streams) + + return OStream(sha, dstream.type, target_size, dstream) + else: + if type_id not in delta_types: + return OInfo(sha, type_id_to_type_map[type_id], uncomp_size) + # END handle non-deltas + + # deltas are a little tougher - unpack the first bytes to obtain + # the actual target size, as opposed to the size of the delta data + streams = self.collect_streams_at_offset(offset) + buf = streams[0].read(512) + offset, src_size = msb_size(buf) + offset, target_size = msb_size(buf, offset) + + # collect the streams to obtain the actual object type + if streams[-1].type_id in delta_types: + raise BadObject(sha, "Could not resolve delta object") + + return OInfo(sha, streams[-1].type, target_size) + # END handle stream #{ Read-Database like Interface @@ -447,14 +477,14 @@ def info(self, sha): :param sha: 20 byte sha1 :raise BadObject: :return: OInfo instance""" - raise NotImplementedError() + return self._object(sha, as_stream=False) def stream(self, sha): """Retrieve an object stream along with its information as identified by the given sha :param sha: 20 byte sha1 :raise BadObject: :return: OStream instance""" - raise NotImplementedError() + return self._object(sha, as_stream=True) #} END Read-Database like Interface @@ -470,4 +500,47 @@ def stream_iter(self): OStream instances""" return self._iter_objects(as_stream=True) - #} Interface + def collect_streams_at_offset(self, offset): + """As the version in the PackFile, but can resolve REF deltas within this pack + For more info, see ``collect_streams`` + :param offset: offset into the pack file at which the object can be found""" + streams = self._pack.collect_streams(offset) + + # try to resolve the last one if needed. It is assumed to be either + # a REF delta, or a base object, as OFFSET deltas are resolved by the pack + if streams[-1].type_id == REF_DELTA: + stream = streams[-1] + while stream.type_id in delta_types: + if stream.type_id == REF_DELTA: + sindex = self._index.sha_to_index(stream.delta_info) + if sindex is None: + break + stream = self._pack.stream(self._index.offset(sindex)) + streams.append(stream) + else: + # must be another OFS DELTA - this could happen if a REF + # delta we resolve previously points to an OFS delta. Who + # would do that ;) ? We can handle it though + stream = self._pack.stream(stream.delta_info) + streams.append(stream) + # END handle ref delta + # END resolve ref streams + # END resolve streams + + return streams + + def collect_streams(self, sha): + """As ``PackFile.collect_streams``, but takes a sha instead of an offset. + Additionally, ref_delta streams will be resolved within this pack. + If this is not possible, the stream will be left alone, hence it is adivsed + to check for unresolved ref-deltas and resolve them before attempting to + construct a delta stream. + :param sha: 20 byte sha1 specifying the object whose related streams you want to collect + :return: list of streams, first being the actual object delta, the last being + a possibly unresolved base object. + :raise BadObject:""" + return self.collect_streams_at_offset(self._index.offset(self._sha_to_index(sha))) + + + + #} END interface diff --git a/stream.py b/stream.py index 5ced7ada0..10a8e057c 100644 --- a/stream.py +++ b/stream.py @@ -7,7 +7,8 @@ from fun import ( msb_size, stream_copy, - apply_delta_data + apply_delta_data, + delta_types ) from util import ( @@ -19,7 +20,7 @@ zlib ) -__all__ = ('DecompressMemMapReader', 'FDCompressedSha1Writer') +__all__ = ('DecompressMemMapReader', 'FDCompressedSha1Writer', 'DeltaApplyReader') #{ RO Streams @@ -418,6 +419,50 @@ def seek(self, offset, whence=os.SEEK_SET): raise ValueError("Can only seek to position 0") # END handle offset self._size + + #{ Interface + + @classmethod + def new(cls, stream_list): + """Convert the given list of streams into a stream which resolves deltas + when reading from it. + :param stream_list: two or more stream objects, first stream is a Delta + to the object that you want to resolve, followed by N additional delta + streams. The list's last stream must be a non-delta stream. + :return: Non-Delta OPackStream object whose stream can be used to obtain + the decompressed resolved data + :raise ValueError: if the stream list cannot be handled""" + if len(stream_list) < 2: + raise ValueError("Need at least two streams") + # END single object special handling + + if stream_list[-1].type_id in delta_types: + raise ValueError("Cannot resolve deltas if there is no base object stream, last one was type: %s" % stream_list[-1].type) + # END check stream + + return cls(stream_list) + + #} END interface + + + #{ OInfo like Interface + + @property + def type(self): + return self._bstream.type + + @property + def type_id(self): + return self._bstream.type_id + + @property + def size(self): + """:return: number of uncompressed bytes in the stream""" + return self._size + + #} END oinfo like interface + + #} END RO streams diff --git a/test/test_pack.py b/test/test_pack.py index 5786fbf72..1f860961e 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -5,6 +5,10 @@ with_packs_rw, fixture_path ) +from gitdb.stream import ( + DeltaApplyReader + ) + from gitdb.pack import ( PackIndexFile, PackFile @@ -71,15 +75,16 @@ def _assert_pack_file(self, pack, version, size): # read the stream try: - dstream = pack.to_delta_stream(streams) + dstream = DeltaApplyReader.new(streams) except ValueError: # ignore these, old git versions use only ref deltas, # which we havent resolved ( as we are without an index ) + # Also ignore non-delta streams continue # END get deltastream # read all - assert len(dstream.read()) + assert len(dstream.read()) # read chunks # NOTE: the current implementation is safe, it basically transfers From 001f030cc8c87407d30fe87fe24929cc1edb8f48 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 17 Jun 2010 16:51:39 +0200 Subject: [PATCH 0023/2375] Initial implementation of stream validation - this is the final hurdle, if that works ( which it doesn't for yet for everything ), than the pack reading would officially work --- fun.py | 7 ++- pack.py | 124 ++++++++++++++++++++++++++++++++++++++-------- stream.py | 2 +- test/test_pack.py | 38 ++++++++++++-- util.py | 15 ------ 5 files changed, 146 insertions(+), 40 deletions(-) diff --git a/fun.py b/fun.py index cbc37b2f0..1466a78bb 100644 --- a/fun.py +++ b/fun.py @@ -106,6 +106,11 @@ def msb_size(data, offset=0): raise AssertionError("Could not find terminating MSB byte in data stream") return i+offset, size +def loose_object_header(type, size): + """:return: string representing the loose object header, which is immediately + followed by the content stream of size 'size'""" + return "%s %i\0" % (type, size) + def write_object(type, size, read, write, chunk_size=chunk_size): """Write the object as identified by type, size and source_stream into the target_stream @@ -120,7 +125,7 @@ def write_object(type, size, read, write, chunk_size=chunk_size): tbw = 0 # total num bytes written # WRITE HEADER: type SP size NULL - tbw += write("%s %i\0" % (type, size)) + tbw += write(loose_object_header(type, size)) tbw += stream_copy(read, write, size, chunk_size) return tbw diff --git a/pack.py b/pack.py index 811acaf98..b1f2f1e05 100644 --- a/pack.py +++ b/pack.py @@ -3,6 +3,7 @@ BadObject, ) from util import ( + zlib, LockedFD, LazyMixin, unpack_from, @@ -12,6 +13,7 @@ from fun import ( pack_object_header_info, type_id_to_type_map, + write_object, stream_copy, chunk_size, delta_types, @@ -31,6 +33,7 @@ from stream import ( DecompressMemMapReader, DeltaApplyReader, + Sha1Writer, NullStream, ) @@ -38,7 +41,8 @@ pack, ) -__all__ = ('PackIndexFile', 'PackFile') +import os +__all__ = ('PackIndexFile', 'PackFile', 'PackEntity') @@ -237,6 +241,10 @@ def size(self): """:return: amount of objects referred to by this index""" return self._fanout_table[255] + def path(self): + """:return: path to the packindexfile""" + return self._indexpath + def packfile_checksum(self): """:return: 20 byte sha representing the sha1 hash of the pack file""" return self._data[-40:-20] @@ -288,8 +296,8 @@ class PackFile(LazyMixin): __slots__ = ('_packpath', '_data', '_size', '_version') # offset into our data at which the first object starts - _first_object_offset = 3*4 # header bytes - _footer_size = 20 # final sha + first_object_offset = 3*4 # header bytes + footer_size = 20 # final sha def __init__(self, packpath): self._packpath = packpath @@ -312,8 +320,8 @@ def _set_cache_(self, attr): def _iter_objects(self, start_offset, as_stream=True): """Handle the actual iteration of objects within this pack""" data = self._data - content_size = len(data) - self._footer_size - cur_offset = start_offset or self._first_object_offset + content_size = len(data) - self.footer_size + cur_offset = start_offset or self.first_object_offset null = NullStream() while cur_offset < content_size: @@ -343,10 +351,18 @@ def version(self): """:return: the version of this pack""" return self._version + def data(self): + """:return: read-only data of this pack. It provides random access and usually + is a memory map""" + return self._data + def checksum(self): """:return: 20 byte sha1 hash on all object sha's contained in this file""" return self._data[-20:] - + + def path(self): + """:return: path to the packfile""" + return self._packpath #} END pack information #{ Pack Specific @@ -383,13 +399,13 @@ def info(self, offset): """Retrieve information about the object at the given file-absolute offset :param offset: byte offset :return: OPackInfo instance, the actual type differs depending on the type_id attribute""" - return pack_object_at(self._data, offset or self._first_object_offset, False) + return pack_object_at(self._data, offset or self.first_object_offset, False) def stream(self, offset): """Retrieve an object at the given file-relative offset as stream along with its information :param offset: byte offset :return: OPackStream instance, the actual type differs depending on the type_id attribute""" - return pack_object_at(self._data, offset or self._first_object_offset, True) + return pack_object_at(self._data, offset or self.first_object_offset, True) def stream_iter(self, start_offset=0): """:return: iterator yielding OPackStream compatible instances, allowing @@ -403,7 +419,7 @@ def stream_iter(self, start_offset=0): #} END Read-Database like Interface -class PackFileEntity(object): +class PackEntity(object): """Combines the PackIndexFile and the PackFile into one, allowing the actual objects to be resolved and iterated""" @@ -412,11 +428,12 @@ class PackFileEntity(object): IndexFileCls = PackIndexFile PackFileCls = PackFile - def __init__(self, basename): + def __init__(self, pack_or_index_path): + """Initialize ourselves with the path to the respective pack or index file""" + basename, ext = os.path.splitext(pack_or_index_path) self._index = self.IndexFileCls("%s.idx" % basename) # PackIndexFile instance self._pack = self.PackFileCls("%s.pack" % basename) # corresponding PackFile instance - def _sha_to_index(self, sha): """:return: index for the given sha, or raise""" index = self._index.sha_to_index(sha) @@ -426,12 +443,20 @@ def _sha_to_index(self, sha): def _iter_objects(self, as_stream): """Iterate over all objects in our index and yield their OInfo or OStream instences""" - raise NotImplementedError() - - def _object(self, sha, as_stream): - """:return: OInfo or OStream object providing information about the given sha""" + indexfile = self._index + _object = self._object + for index in xrange(indexfile.size()): + sha = indexfile.sha(index) + yield _object(sha, as_stream, index) + # END for each index + + def _object(self, sha, as_stream, index=-1): + """:return: OInfo or OStream object providing information about the given sha + :param index: if not -1, its assumed to be the sha's index in the IndexFile""" # its a little bit redundant here, but it needs to be efficient - offset = self._index.offset(self._sha_to_index(sha)) + if index < 0: + index = self._sha_to_index(sha) + offset = self._index.offset(index) type_id, uncomp_size, data_rela_offset = pack_object_header_info(buffer(self._pack._data, offset)) if as_stream: if type_id not in delta_types: @@ -447,7 +472,7 @@ def _object(self, sha, as_stream): offset, src_size = msb_size(buf) offset, target_size = msb_size(buf, offset) - streams[0].seek(0) # assure it can be read by the delta reader + streams[0].stream.seek(0) # assure it can be read by the delta reader dstream = DeltaApplyReader.new(streams) return OStream(sha, dstream.type, target_size, dstream) @@ -476,20 +501,79 @@ def info(self, sha): """Retrieve information about the object identified by the given sha :param sha: 20 byte sha1 :raise BadObject: - :return: OInfo instance""" + :return: OInfo instance, with 20 byte sha""" return self._object(sha, as_stream=False) def stream(self, sha): """Retrieve an object stream along with its information as identified by the given sha :param sha: 20 byte sha1 :raise BadObject: - :return: OStream instance""" + :return: OStream instance, with 20 byte sha""" return self._object(sha, as_stream=True) #} END Read-Database like Interface #{ Interface - + + def pack(self): + """:return: the underlying pack file instance""" + return self._pack + + def index(self): + """:return: the underlying pack index file instance""" + return self._index + + def is_valid_stream(self, sha, use_crc=False): + """Verify that the stream at the given sha is valid. + :param sha: 20 byte sha1 of the object whose stream to verify + :param use_crc: if True, the index' crc for the sha is used to determine + whether the compressed stream of the object is valid. If it is + a delta, this only verifies that the delta's data is valid, not the + data of the actual undeltified object, as it depends on more than + just this stream. + If False, the object will be decompressed and the sha generated. It must + match the given sha + :return: True if the stream is valid + :raise UnsupportedOperation: If the index is version 1 only + :raise BadObject: sha was not found""" + if use_crc: + index = self._sha_to_index(sha) + offset = self._index.offset(index) + pack_data = self._pack.data() + next_index = min(self._index.size()-1, index+1) + next_offset = 0 + if next_index == index: + next_offset = len(pack_data) - self._pack.footer_size + else: + next_offset = self._index.offset(next_index) + # END get next offset + crc_value = self._index.crc(index) + + this_crc_value = 0 + crc_update = zlib.crc32 + + # create the current crc value, on the compressed object data + # Read it in chunks, without copying the data + cur_pos = offset + while cur_pos < next_offset: + rbound = min(cur_pos + chunk_size, next_offset) + size = rbound - cur_pos + crc_update(buffer(pack_data, cur_pos, size), this_crc_value) + cur_pos += size + # END window size loop + + assert this_crc_value == crc_value + return this_crc_value == crc_value + else: + shawriter = Sha1Writer() + stream = self._object(sha, as_stream=True) + # write a loose object, which is the basis for the sha + write_object(stream.type, stream.size, stream.read, shawriter.write) + + return shawriter.sha(as_hex=False) == sha + # END handle crc/sha verification + return True + def info_iter(self): """:return: Iterator over all objects in this pack. The iterator yields OInfo instances""" diff --git a/stream.py b/stream.py index 10a8e057c..903aeb109 100644 --- a/stream.py +++ b/stream.py @@ -474,7 +474,7 @@ class Sha1Writer(object): __slots__ = "sha1" def __init__(self): - self.sha1 = make_sha("") + self.sha1 = make_sha() #{ Stream Interface diff --git a/test/test_pack.py b/test/test_pack.py index 1f860961e..03b162178 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -10,10 +10,16 @@ ) from gitdb.pack import ( + PackEntity, PackIndexFile, PackFile ) + +from gitdb.fun import ( + delta_types, + ) from gitdb.util import to_bin_sha +from itertools import izip import os @@ -84,7 +90,7 @@ def _assert_pack_file(self, pack, version, size): # END get deltastream # read all - assert len(dstream.read()) + assert len(dstream.read()) == dstream.size # read chunks # NOTE: the current implementation is safe, it basically transfers @@ -109,8 +115,34 @@ def test_pack(self): # END for each pack to test def test_pack_entity(self): - # TODO: - pass + for packinfo, indexinfo in ( (self.packfile_v2_1, self.packindexfile_v1), + (self.packfile_v2_2, self.packindexfile_v2)): + packfile, version, size = packinfo + indexfile, version, size = indexinfo + print packfile + entity = PackEntity(packfile) + assert entity.pack().path() == packfile + assert entity.index().path() == indexfile + + count = 0 + for info, stream in izip(entity.info_iter(), entity.stream_iter()): + count += 1 + assert info.sha == stream.sha + assert len(info.sha) == 20 + assert info.type_id == stream.type_id + assert info.size == stream.size + + # we return fully resolved items, which is implied by the sha centric access + assert not info.type_id in delta_types + + # verify the stream + print info + assert entity.is_valid_stream(info.sha, use_crc=True) + #assert entity.is_valid_stream(info.sha, use_crc=False) + # END for each info, stream tuple + assert count == size + + # END for each entity def test_pack_64(self): # TODO: hex-edit a pack helping us to verify that we can handle 64 byte offsets diff --git a/util.py b/util.py index f10b71b12..c460969ca 100644 --- a/util.py +++ b/util.py @@ -79,21 +79,6 @@ def make_sha(source=''): sha1 = sha.sha(source) return sha1 -def stream_copy(source, destination, chunk_size=512*1024): - """Copy all data from the source stream into the destination stream in chunks - of size chunk_size - - :return: amount of bytes written""" - br = 0 - while True: - chunk = source.read(chunk_size) - destination.write(chunk) - br += len(chunk) - if len(chunk) < chunk_size: - break - # END reading output stream - return br - def allocate_memory(size): """:return: a file-protocol accessible memory block of the given size""" try: From ecb18782c423bfdc45a474af2b7fbb61f62fa750 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 17 Jun 2010 17:56:20 +0200 Subject: [PATCH 0024/2375] CRC verification already works for all packs, sha1 still needs some work, probably with deltified objects, there it shows whether we did it aaaaaall correctly ;) --- pack.py | 75 ++++++++++++++++++++++++++++++++++++----------- test/test_pack.py | 14 +++++---- 2 files changed, 67 insertions(+), 22 deletions(-) diff --git a/pack.py b/pack.py index b1f2f1e05..4003e2742 100644 --- a/pack.py +++ b/pack.py @@ -1,6 +1,7 @@ """Contains PackIndexFile and PackFile implementations""" from gitdb.exc import ( - BadObject, + BadObject, + UnsupportedOperation ) from util import ( zlib, @@ -41,6 +42,8 @@ pack, ) +from itertools import izip +import array import os __all__ = ('PackIndexFile', 'PackFile', 'PackEntity') @@ -253,6 +256,21 @@ def indexfile_checksum(self): """:return: 20 byte sha representing the sha1 hash of this index file""" return self._data[-20:] + def offsets(self): + """:return: sequence of all offsets in the order in which they were written + :note: return value can be random accessed, but may be immmutable""" + if self._version == 2: + # read stream to array, convert to tuple + a = array.array('I') # 4 byte unsigned int, long are 8 byte on 64 bit it appears + a.fromstring(buffer(self._data, self._pack_offset, self._pack_64_offset - self._pack_offset)) + + # networkbyteorder to something array likes more + a.byteswap() + return a + else: + return tuple(self.offset(index) for index in xrange(self.size())) + # END handle version + def sha_to_index(self, sha): """ :return: index usable with the ``offset`` or ``entry`` method, or None @@ -419,11 +437,14 @@ def stream_iter(self, start_offset=0): #} END Read-Database like Interface -class PackEntity(object): +class PackEntity(LazyMixin): """Combines the PackIndexFile and the PackFile into one, allowing the actual objects to be resolved and iterated""" - __slots__ = ('_index', '_pack') + __slots__ = ( '_index', # our index file + '_pack', # our pack file + '_offset_map' # on demand dict mapping one offset to the next consecutive one + ) IndexFileCls = PackIndexFile PackFileCls = PackFile @@ -433,6 +454,28 @@ def __init__(self, pack_or_index_path): basename, ext = os.path.splitext(pack_or_index_path) self._index = self.IndexFileCls("%s.idx" % basename) # PackIndexFile instance self._pack = self.PackFileCls("%s.pack" % basename) # corresponding PackFile instance + + def _set_cache_(self, attr): + # currently this can only be _offset_map + offsets_sorted = sorted(self._index.offsets()) + last_offset = len(self._pack.data()) - self._pack.footer_size + assert offsets_sorted, "Cannot handle empty indices" + + offset_map = None + if len(offsets_sorted) == 1: + offset_map = { offsets_sorted[0] : last_offset } + else: + iter_offsets = iter(offsets_sorted) + iter_offsets_plus_one = iter(offsets_sorted) + iter_offsets_plus_one.next() + consecutive = izip(iter_offsets, iter_offsets_plus_one) + + offset_map = dict(consecutive) + + # the last offset is not yet set + offset_map[offsets_sorted[-1]] = last_offset + # END handle offset amount + self._offset_map = offset_map def _sha_to_index(self, sha): """:return: index for the given sha, or raise""" @@ -537,33 +580,31 @@ def is_valid_stream(self, sha, use_crc=False): :raise UnsupportedOperation: If the index is version 1 only :raise BadObject: sha was not found""" if use_crc: + if self._index.version() < 2: + raise UnsupportedOperation("Version 1 indices do not contain crc's, verify by sha instead") + # END handle index version + index = self._sha_to_index(sha) offset = self._index.offset(index) - pack_data = self._pack.data() - next_index = min(self._index.size()-1, index+1) - next_offset = 0 - if next_index == index: - next_offset = len(pack_data) - self._pack.footer_size - else: - next_offset = self._index.offset(next_index) - # END get next offset + next_offset = self._offset_map[offset] crc_value = self._index.crc(index) - this_crc_value = 0 - crc_update = zlib.crc32 - # create the current crc value, on the compressed object data # Read it in chunks, without copying the data + crc_update = zlib.crc32 + pack_data = self._pack.data() cur_pos = offset + this_crc_value = 0 while cur_pos < next_offset: rbound = min(cur_pos + chunk_size, next_offset) size = rbound - cur_pos - crc_update(buffer(pack_data, cur_pos, size), this_crc_value) + this_crc_value = crc_update(buffer(pack_data, cur_pos, size), this_crc_value) cur_pos += size # END window size loop - assert this_crc_value == crc_value - return this_crc_value == crc_value + # crc returns signed 32 bit numbers, the AND op forces it into unsigned + # mode ... wow, sneaky, from dulwich. + return (this_crc_value & 0xffffffff) == crc_value else: shawriter = Sha1Writer() stream = self._object(sha, as_stream=True) diff --git a/test/test_pack.py b/test/test_pack.py index 03b162178..d9823efa0 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -15,9 +15,8 @@ PackFile ) -from gitdb.fun import ( - delta_types, - ) +from gitdb.fun import delta_types +from gitdb.exc import UnsupportedOperation from gitdb.util import to_bin_sha from itertools import izip import os @@ -42,6 +41,7 @@ def _assert_index_file(self, index, version, size): assert len(index.indexfile_checksum()) == 20 assert index.version() == version assert index.size() == size + assert len(index.offsets()) == size # get all data of all objects for oidx in xrange(index.size()): @@ -137,8 +137,12 @@ def test_pack_entity(self): # verify the stream print info - assert entity.is_valid_stream(info.sha, use_crc=True) - #assert entity.is_valid_stream(info.sha, use_crc=False) + try: + assert entity.is_valid_stream(info.sha, use_crc=True) + except UnsupportedOperation: + pass + # END ignore version issues + assert entity.is_valid_stream(info.sha, use_crc=False) # END for each info, stream tuple assert count == size From 5af5cd919aea64aeb8be8a5dc38cc6a169878399 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 17 Jun 2010 18:36:33 +0200 Subject: [PATCH 0025/2375] Sha1 verification works as well, forgot to fill in the base buffer for delta-application, and fixed the broken DeltaApplyReader's seek method --- fun.py | 2 +- pack.py | 1 + stream.py | 6 +++++- test/test_pack.py | 10 +++++++--- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/fun.py b/fun.py index 1466a78bb..dd9a53b5d 100644 --- a/fun.py +++ b/fun.py @@ -200,7 +200,7 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_fi if (cp_off + cp_size < cp_size or cp_off + cp_size > src_buf_size): break - twrite(src_buf[cp_off:cp_off+cp_size]) + twrite(buffer(src_buf, cp_off, cp_size)) elif c: twrite(db[i:i+c]) i += c diff --git a/pack.py b/pack.py index 4003e2742..ca9dac959 100644 --- a/pack.py +++ b/pack.py @@ -611,6 +611,7 @@ def is_valid_stream(self, sha, use_crc=False): # write a loose object, which is the basis for the sha write_object(stream.type, stream.size, stream.read, shawriter.write) + assert shawriter.sha(as_hex=False) == sha return shawriter.sha(as_hex=False) == sha # END handle crc/sha verification return True diff --git a/stream.py b/stream.py index 903aeb109..b0fa4acb5 100644 --- a/stream.py +++ b/stream.py @@ -358,6 +358,7 @@ def _set_cache_(self, attr): # Allocate private memory map big enough to hold the first base buffer # We need random access to it bbuf = allocate_memory(base_size) + stream_copy(self._bstream.read, bbuf.write, base_size, 256*mmap.PAGESIZE) # allocate memory map large enough for the largest (intermediate) target # We will use it as scratch space for all delta ops. If the final @@ -408,6 +409,8 @@ def read(self, count=0): bl = self._size - self._br # bytes left if count < 1 or count > bl: count = bl + # NOTE: we could check for certain size limits, and possibly + # return buffers instead of strings to prevent byte copying data = self._mm_target.read(count) self._br += len(data) return data @@ -418,7 +421,8 @@ def seek(self, offset, whence=os.SEEK_SET): if offset != 0 or whence != os.SEEK_SET: raise ValueError("Can only seek to position 0") # END handle offset - self._size + self._br = 0 + self._mm_target.seek(0) #{ Interface diff --git a/test/test_pack.py b/test/test_pack.py index d9823efa0..fbcf84e39 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -90,7 +90,13 @@ def _assert_pack_file(self, pack, version, size): # END get deltastream # read all - assert len(dstream.read()) == dstream.size + data = dstream.read() + assert len(data) == dstream.size + + # test seek + dstream.seek(0) + assert dstream.read() == data + # read chunks # NOTE: the current implementation is safe, it basically transfers @@ -119,7 +125,6 @@ def test_pack_entity(self): (self.packfile_v2_2, self.packindexfile_v2)): packfile, version, size = packinfo indexfile, version, size = indexinfo - print packfile entity = PackEntity(packfile) assert entity.pack().path() == packfile assert entity.index().path() == indexfile @@ -136,7 +141,6 @@ def test_pack_entity(self): assert not info.type_id in delta_types # verify the stream - print info try: assert entity.is_valid_stream(info.sha, use_crc=True) except UnsupportedOperation: From 325742cfe258436302fe0bb92462dc18a22261c7 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 17 Jun 2010 22:36:44 +0200 Subject: [PATCH 0026/2375] Implemented basic info and stream retrieval as well as pack file handling of PackedDB - its now operational. Next up is a performance test --- db/pack.py | 123 +++++++++++++++++++++++++++++++++++++++++-- pack.py | 30 +++++++---- test/db/test_pack.py | 45 ++++++++++++++-- test/test_pack.py | 14 +++-- 4 files changed, 193 insertions(+), 19 deletions(-) diff --git a/db/pack.py b/db/pack.py index a850e0fb2..f5ee04d6e 100644 --- a/db/pack.py +++ b/db/pack.py @@ -4,29 +4,95 @@ ObjectDBR ) +from gitdb.util import ( + to_bin_sha, + LazyMixin + ) + from gitdb.exc import ( + BadObject, UnsupportedOperation, ) +from gitdb.pack import PackEntity + +import os +import glob __all__ = ('PackedDB', ) -class PackedDB(FileDBBase, ObjectDBR): + +#{ Utilities + + +class PackedDB(FileDBBase, ObjectDBR, LazyMixin): """A database operating on a set of object packs""" + # sort the priority list every N queries + _sort_interval = 15 + def __init__(self, root_path): super(PackedDB, self).__init__(root_path) + # list of lists with three items: + # * hits - number of times the pack was hit with a request + # * entity - Pack entity instance + # * sha_to_index - PackIndexFile.sha_to_index method for direct cache query + # self._entities = list() # lazy loaded list + self._hit_count = 0 # amount of hits + self._st_mtime = 0 # last modification data of our root path + + def _set_cache_(self, attr): + # currently it can only be our _entities attribute + self._entities = list() + self.update_pack_entity_cache() + + def _sort_entities(self): + self._entities.sort(key=lambda l: l[0], reverse=True) + + def _pack_info(self, sha): + """:return: tuple(entity, index) for an item at the given sha + :param sha: 20 or 40 byte sha + :raise BadObject: + :note: This method is not thread-safe, but may be hit in multi-threaded + operation. The worst thing that can happen though is a counter that + was not incremented, or the list being in wrong order. So we safe + the time for locking here, lets see how that goes""" + # presort ? + if self._hit_count % self._sort_interval == 0: + self._sort_entities() + # END update sorting + + sha = to_bin_sha(sha) + for item in self._entities: + index = item[2](sha) + if index is not None: + item[0] += 1 # one hit for you + self._hit_count += 1 # general hit count + return (item[1], index) + # END index found in pack + # END for each item + # no hit, see whether we have to update packs + # NOTE: considering packs don't change very often, we safe this call + # and leave it to the super-caller to trigger that + raise BadObject(sha) #{ Object DB Read def has_object(self, sha): - raise NotImplementedError() + try: + self._pack_info(sha) + return True + except BadObject: + return False + # END exception handling def info(self, sha): - raise NotImplementedError() + entity, index = self._pack_info(sha) + return entity.info_at_index(index) def stream(self, sha): - raise NotImplementedError() + entity, index = self._pack_info(sha) + return entity.stream_at_index(index) #} END object db read @@ -39,6 +105,55 @@ def store(self, istream): raise UnsupportedOperation() def store_async(self, reader): + # TODO: add ObjectDBRW before implementing this raise NotImplementedError() #} END object db write + + + #{ Interface + + def update_pack_entity_cache(self, force=False): + """Update our cache with the acutally existing packs on disk. Add new ones, + and remove deleted ones. We keep the unchanged ones + :param force: If True, the cache will be updated even though the directory + does not appear to have changed according to its modification timestamp. + :return: True if the packs have been updated so there is new information, + False if there was no change to the pack database""" + stat = os.stat(self.root_path()) + if not force and stat.st_mtime <= self._st_mtime: + return False + # END abort early on no change + self._st_mtime = stat.st_mtime + + # packs are supposed to be prefixed with pack- by git-convention + # get all pack files, figure out what changed + pack_files = set(glob.glob(os.path.join(self.root_path(), "pack-*.pack"))) + our_pack_files = set(item[1].pack().path() for item in self._entities) + + # new packs + for pack_file in (pack_files - our_pack_files): + # init the hit-counter/priority with the size, a good measure for hit- + # probability. Its implemented so that only 12 bytes will be read + entity = PackEntity(pack_file) + self._entities.append([entity.pack().size(), entity, entity.index().sha_to_index]) + # END for each new packfile + + # removed packs + for pack_file in (our_pack_files - pack_files): + del_index = -1 + for i, item in enumerate(self._entities): + if item[1].pack().path() == pack_file: + del_index = i + break + # END found index + # END for each entity + assert del_index != -1 + del(self._entities[del_index]) + # END for each removed pack + + # reinitialize prioritiess + self._sort_entities() + return True + + #} END interface diff --git a/pack.py b/pack.py index ca9dac959..4e70c7ce9 100644 --- a/pack.py +++ b/pack.py @@ -40,6 +40,7 @@ from struct import ( pack, + unpack, ) from itertools import izip @@ -196,7 +197,7 @@ def _offset_v2(self, i): # in the 64 bit region of the file. The current offset ( lower 31 bits ) # are the index into it if offset & 0x80000000: - offset = unpack_from(">Q", self._data, self._pack_64_offset + (self.offset & ~0x80000000) * 8)[0] + offset = unpack_from(">Q", self._data, self._pack_64_offset + (offset & ~0x80000000) * 8)[0] # END handle 64 bit offset return offset @@ -291,7 +292,7 @@ def sha_to_index(self, sha): elif not c: return mid else: - lo = mid + lo = mid + 1 # END handle midpoint # END bisect return None @@ -326,13 +327,15 @@ def _set_cache_(self, attr): fd = ldb.open() self._data = file_contents_ro(fd) ldb.rollback() - # TODO: figure out whether we should better keep the lock, or maybe - # add a .keep file instead ? - else: + # read the header information type_id, self._version, self._size = unpack_from(">4sLL", self._data, 0) - assert type_id == "PACK", "Pack file format is invalid: %r" % type_id - assert self._version in (2, 3), "Cannot handle pack format version %i" % self._version + + # TODO: figure out whether we should better keep the lock, or maybe + # add a .keep file instead ? + else: # must be '_size' or '_version' + # read header info - we do that just with a file stream + type_id, self._version, self._size = unpack(">4sLL", open(self._packpath).read(12)) # END handle header def _iter_objects(self, start_offset, as_stream=True): @@ -545,14 +548,23 @@ def info(self, sha): :param sha: 20 byte sha1 :raise BadObject: :return: OInfo instance, with 20 byte sha""" - return self._object(sha, as_stream=False) + return self._object(sha, False) def stream(self, sha): """Retrieve an object stream along with its information as identified by the given sha :param sha: 20 byte sha1 :raise BadObject: :return: OStream instance, with 20 byte sha""" - return self._object(sha, as_stream=True) + return self._object(sha, True) + + def info_at_index(self, index): + """As ``info``, but uses a PackIndexFile compatible index to refer to the object""" + return self._object(None, False, index) + + def stream_at_index(self, index): + """As ``stream``, but uses a PackIndexFile compatible index to refer to the + object""" + return self._object(None, True, index) #} END Read-Database like Interface diff --git a/test/db/test_pack.py b/test/db/test_pack.py index 6faff4695..d37c886eb 100644 --- a/test/db/test_pack.py +++ b/test/db/test_pack.py @@ -1,12 +1,51 @@ from lib import * from gitdb.db import PackedDB - +from gitdb.test.lib import fixture_path + +import os +import random + class TestPackDB(TestDBBase): @with_rw_directory @with_packs_rw def test_writing(self, path): - ldb = PackedDB(path) - # TODO + pdb = PackedDB(path) + + # on demand, we init our pack cache + num_packs = 2 + assert len(pdb._entities) == num_packs + assert pdb._st_mtime != 0 + + # test pack directory changed: + # packs removed - rename a file, should affect the glob + pack_path = pdb._entities[0][1].pack().path() + new_pack_path = pack_path + "renamed" + os.rename(pack_path, new_pack_path) + pdb.update_pack_entity_cache(force=True) + assert len(pdb._entities) == num_packs - 1 + + # packs added + os.rename(new_pack_path, pack_path) + pdb.update_pack_entity_cache(force=True) + assert len(pdb._entities) == num_packs + # bang on the cache + # access the Entities directly, as there is no iteration interface + # yet ( or required for now ) + sha_list = list() + for entity in (item[1] for item in pdb._entities): + for index in xrange(entity.index().size()): + + sha_list.append(entity.index().sha(index)) + # END for each index + # END for each entity + + # hit all packs in random order + random.shuffle(sha_list) + + for sha in sha_list: + info = pdb.info(sha) + stream = pdb.stream(sha) + # END for each sha to query diff --git a/test/test_pack.py b/test/test_pack.py index fbcf84e39..6cfd784d4 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -5,9 +5,7 @@ with_packs_rw, fixture_path ) -from gitdb.stream import ( - DeltaApplyReader - ) +from gitdb.stream import DeltaApplyReader from gitdb.pack import ( PackEntity, @@ -15,6 +13,11 @@ PackFile ) +from gitdb.base import ( + OInfo, + OStream, + ) + from gitdb.fun import delta_types from gitdb.exc import UnsupportedOperation from gitdb.util import to_bin_sha @@ -140,6 +143,11 @@ def test_pack_entity(self): # we return fully resolved items, which is implied by the sha centric access assert not info.type_id in delta_types + # try all calls + assert len(entity.collect_streams(info.sha)) + assert isinstance(entity.info(info.sha), OInfo) + assert isinstance(entity.stream(info.sha), OStream) + # verify the stream try: assert entity.is_valid_stream(info.sha, use_crc=True) From 8ab9b4f307a0672fb7b7ae29812b4ffd3d9dc8bc Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 17 Jun 2010 23:36:53 +0200 Subject: [PATCH 0027/2375] PackedDB: added sha_iter and size methods, these should move to the ObjectDBR actually Added performance test, packed stream reading still runs into errors, which is interesting as it dealt with the sample packs very well before --- db/pack.py | 19 +++++++++- test/db/test_pack.py | 9 ++--- test/performance/lib.py | 1 + test/performance/test_db.py | 70 +++++++++++++++++++++++++++++++++---- 4 files changed, 84 insertions(+), 15 deletions(-) diff --git a/db/pack.py b/db/pack.py index f5ee04d6e..97890ee20 100644 --- a/db/pack.py +++ b/db/pack.py @@ -28,7 +28,9 @@ class PackedDB(FileDBBase, ObjectDBR, LazyMixin): """A database operating on a set of object packs""" # sort the priority list every N queries - _sort_interval = 15 + # Higher values are better, performance tests don't show this has + # any effect, but it should have one + _sort_interval = 500 def __init__(self, root_path): super(PackedDB, self).__init__(root_path) @@ -156,4 +158,19 @@ def update_pack_entity_cache(self, force=False): self._sort_entities() return True + def sha_iter(self): + """Return iterator yielding 20 byte shas for the packed objects in this data base""" + sha_list = list() + for entity in (item[1] for item in self._entities): + index = entity.index() + sha_by_index = index.sha + for index in xrange(index.size()): + yield sha_by_index(index) + # END for each index + # END for each entity + + def size(self): + """:return: amount of packed objects in this database""" + sizes = [item[1].index().size() for item in self._entities] + return reduce(lambda x,y: x+y, sizes) #} END interface diff --git a/test/db/test_pack.py b/test/db/test_pack.py index d37c886eb..89f73f036 100644 --- a/test/db/test_pack.py +++ b/test/db/test_pack.py @@ -34,13 +34,8 @@ def test_writing(self, path): # bang on the cache # access the Entities directly, as there is no iteration interface # yet ( or required for now ) - sha_list = list() - for entity in (item[1] for item in pdb._entities): - for index in xrange(entity.index().size()): - - sha_list.append(entity.index().sha(index)) - # END for each index - # END for each entity + sha_list = list(pdb.sha_iter()) + assert len(sha_list) == pdb.size() # hit all packs in random order random.shuffle(sha_list) diff --git a/test/performance/lib.py b/test/performance/lib.py index 03788c081..45e0ca53f 100644 --- a/test/performance/lib.py +++ b/test/performance/lib.py @@ -44,6 +44,7 @@ def setUpAll(cls): except AttributeError: pass cls.gitrepopath = resolve_or_fail(k_env_git_repo) + assert cls.gitrepopath.endswith('.git') #} END base classes diff --git a/test/performance/test_db.py b/test/performance/test_db.py index cd231b650..f6d855e20 100644 --- a/test/performance/test_db.py +++ b/test/performance/test_db.py @@ -1,15 +1,71 @@ """Performance tests for object store""" +from lib import ( + TestBigRepoR + ) + +from gitdb.db.pack import PackedDB import sys +import os from time import time - -from lib import ( - TestBigRepoR - ) +import random class TestGitDBPerformance(TestBigRepoR): - def test_random_access(self): - pass - # TODO: use the actual db for this + def test_pack_random_access(self): + pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) + assert len(pdb._entities) > 1 + + # sha lookup + st = time() + sha_list = list(pdb.sha_iter()) + elapsed = time() - st + ns = len(sha_list) + print >> sys.stderr, "PDB: looked up %i shas by index in %f s ( %f shas/s )" % (ns, elapsed, ns / elapsed) + + + # sha lookup: best-case and worst case access + pdb_pack_info = pdb._pack_info + access_times = list() + for rand in range(2): + if rand: + random.shuffle(sha_list) + # END shuffle shas + st = time() + for sha in sha_list: + pdb_pack_info(sha) + # END for each sha to look up + elapsed = time() - st + access_times.append(elapsed) + + # discard cache + del(pdb._entities) + pdb._entities + print >> sys.stderr, "PDB: looked up %i sha (random=%i) in %f s ( %f shas/s )" % (ns, rand, elapsed, ns / elapsed) + # END for each random mode + elapsed_order, elapsed_rand = access_times + + # well, its never really sequencial regarding the memory patterns, but it + # shows how well the prioriy cache performs + print >> sys.stderr, "PDB: sequential access is %f %% faster than random-access" % (100 - ((elapsed_order / elapsed_rand) * 100)) + + + # query info and streams only + max_items = 10000 # can wait longer when testing memory + for pdb_fun in (pdb.info, pdb.stream): + st = time() + for sha in sha_list[:max_items]: + pdb_fun(sha) + elapsed = time() - st + print >> sys.stderr, "PDB: Obtained %i object %s by sha in %f s ( %f info/s )" % (max_items, pdb_fun.__name__.upper(), elapsed, max_items / elapsed) + # END for each function + # retrieve stream and read all + max_items = 5000 + pdb_stream = pdb.stream + st = time() + for sha in sha_list[:max_items]: + stream = pdb_stream(sha) + stream.read() + elapsed = time() - st + print >> sys.stderr, "PDB: Obtained %i streams by sha and read all bytes in %f s ( %f info/s )" % (max_items, elapsed, max_items / elapsed) From e9c5cf3df54d0879662194f22d43a984e89b2cdf Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 18 Jun 2010 00:49:34 +0200 Subject: [PATCH 0028/2375] delta-apply now works after fixing a stupid type, instead of i + 1 I wrote i + i ... argh \! --- fun.py | 18 +++++++++++++----- stream.py | 24 +++++++++++------------- test/performance/test_db.py | 5 ++++- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/fun.py b/fun.py index dd9a53b5d..82b9373b2 100644 --- a/fun.py +++ b/fun.py @@ -155,7 +155,8 @@ def stream_copy(read, write, size, chunk_size): return dbw -def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_file): +def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_file, + target_size): """Apply data from a delta buffer using a source buffer to the target file, which will be written to :param src_buf: random access data from which the delta was created @@ -163,6 +164,7 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_fi :param delta_buf_size: size fo the delta buffer in bytes :param delta_buf: random access delta data :param target_file: file like object to write the result to + :param target_size: size of the target buffer :note: transcribed to python from the similar routine in patch-delta.c""" i = 0 twrite = target_file.write @@ -180,7 +182,7 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_fi i += 1 if (c & 0x04): cp_off |= (ord(db[i]) << 16) - i += i + i += 1 if (c & 0x08): cp_off |= (ord(db[i]) << 24) i += 1 @@ -196,14 +198,20 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_fi if not cp_size: cp_size = 0x10000 - # maybe skip this check ? - if (cp_off + cp_size < cp_size or - cp_off + cp_size > src_buf_size): + + rbound = cp_off + cp_size + if (rbound < cp_size or + rbound > src_buf_size or + cp_size > target_size): break twrite(buffer(src_buf, cp_off, cp_size)) + target_size -= cp_size elif c: + if c > target_size: + break twrite(db[i:i+c]) i += c + target_size -= c else: raise ValueError("unexpected delta opcode 0") # END handle command byte diff --git a/stream.py b/stream.py index b0fa4acb5..8c171b23a 100644 --- a/stream.py +++ b/stream.py @@ -327,19 +327,15 @@ def __init__(self, stream_list): def _set_cache_(self, attr): """If we are here, we apply the actual deltas""" - # fill in delta info structures, providing the source and target buffer - # sizes. - buffer_offset_list = list() - final_target_size = None + + # prefetch information + buffer_info_list = list() max_target_size = 0 for dstream in self._dstreams: buf = dstream.read(512) # read the header information + X offset, src_size = msb_size(buf) offset, target_size = msb_size(buf, offset) - if final_target_size is None: - final_target_size = target_size - # END set final target size - buffer_offset_list.append((buffer(buf, offset), offset)) + buffer_info_list.append((buffer(buf, offset), offset, src_size, target_size)) max_target_size = max(max_target_size, target_size) # END for each delta stream @@ -358,7 +354,7 @@ def _set_cache_(self, attr): # Allocate private memory map big enough to hold the first base buffer # We need random access to it bbuf = allocate_memory(base_size) - stream_copy(self._bstream.read, bbuf.write, base_size, 256*mmap.PAGESIZE) + stream_copy(self._bstream.read, bbuf.write, base_size, 256 * mmap.PAGESIZE) # allocate memory map large enough for the largest (intermediate) target # We will use it as scratch space for all delta ops. If the final @@ -370,7 +366,8 @@ def _set_cache_(self, attr): # work on the op-codes to reconstruct everything. # For the actual copying, we use a seek and write pattern of buffer # slices. - for (dbuf, offset), dstream in reversed(zip(buffer_offset_list, self._dstreams)): + final_target_size = None + for (dbuf, offset, src_size, target_size), dstream in reversed(zip(buffer_info_list, self._dstreams)): # allocate a buffer to hold all delta data - fill in the data for # fast access. We do this as we know that reading individual bytes # from our stream would be slower than necessary ( although possible ) @@ -381,15 +378,16 @@ def _set_cache_(self, attr): # read the rest from the stream. The size we give is larger than necessary stream_copy(dstream.read, ddata.write, dstream.size, 256*mmap.PAGESIZE) - ################################################################ - apply_delta_data(bbuf, len(bbuf), ddata, len(ddata), tbuf) - ################################################################ + ####################################################################### + apply_delta_data(bbuf, src_size, ddata, len(ddata), tbuf, target_size) + ####################################################################### # finally, swap out source and target buffers. The target is now the # base for the next delta to apply bbuf, tbuf = tbuf, bbuf bbuf.seek(0) tbuf.seek(0) + final_target_size = target_size # END for each delta to apply # its already seeked to 0, constrain it to the actual size diff --git a/test/performance/test_db.py b/test/performance/test_db.py index f6d855e20..3948003cc 100644 --- a/test/performance/test_db.py +++ b/test/performance/test_db.py @@ -63,9 +63,12 @@ def test_pack_random_access(self): # retrieve stream and read all max_items = 5000 pdb_stream = pdb.stream + total_size = 0 st = time() for sha in sha_list[:max_items]: stream = pdb_stream(sha) stream.read() + total_size += stream.size elapsed = time() - st - print >> sys.stderr, "PDB: Obtained %i streams by sha and read all bytes in %f s ( %f info/s )" % (max_items, elapsed, max_items / elapsed) + total_kib = total_size / 1000 + print >> sys.stderr, "PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (max_items, total_kib, total_kib/elapsed , elapsed, max_items / elapsed) From fc6253d8428631029a9cb42830c9829692e92997 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 18 Jun 2010 01:04:45 +0200 Subject: [PATCH 0029/2375] removed some extra checks in apply-delta which are indeed not required --- fun.py | 11 ++--------- stream.py | 2 +- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/fun.py b/fun.py index 82b9373b2..d7e43717c 100644 --- a/fun.py +++ b/fun.py @@ -155,8 +155,7 @@ def stream_copy(read, write, size, chunk_size): return dbw -def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_file, - target_size): +def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_file): """Apply data from a delta buffer using a source buffer to the target file, which will be written to :param src_buf: random access data from which the delta was created @@ -164,7 +163,6 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_fi :param delta_buf_size: size fo the delta buffer in bytes :param delta_buf: random access delta data :param target_file: file like object to write the result to - :param target_size: size of the target buffer :note: transcribed to python from the similar routine in patch-delta.c""" i = 0 twrite = target_file.write @@ -201,17 +199,12 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_fi rbound = cp_off + cp_size if (rbound < cp_size or - rbound > src_buf_size or - cp_size > target_size): + rbound > src_buf_size): break twrite(buffer(src_buf, cp_off, cp_size)) - target_size -= cp_size elif c: - if c > target_size: - break twrite(db[i:i+c]) i += c - target_size -= c else: raise ValueError("unexpected delta opcode 0") # END handle command byte diff --git a/stream.py b/stream.py index 8c171b23a..6c388a96c 100644 --- a/stream.py +++ b/stream.py @@ -379,7 +379,7 @@ def _set_cache_(self, attr): stream_copy(dstream.read, ddata.write, dstream.size, 256*mmap.PAGESIZE) ####################################################################### - apply_delta_data(bbuf, src_size, ddata, len(ddata), tbuf, target_size) + apply_delta_data(bbuf, src_size, ddata, len(ddata), tbuf) ####################################################################### # finally, swap out source and target buffers. The target is now the From ae6d08e1b63bf05ddcb3ee5fe027c5d829380afc Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 18 Jun 2010 10:10:28 +0200 Subject: [PATCH 0030/2375] Removed data-offset field from PackInfo as it is not needed in most cases. Instead, pack_at_offset returns the data-offset, slightly improving performance, and reducing memory demands --- base.py | 36 ++++++++++++++++-------------------- pack.py | 23 ++++++++++++----------- test/performance/test_db.py | 2 +- test/test_base.py | 2 -- test/test_pack.py | 1 - 5 files changed, 29 insertions(+), 35 deletions(-) diff --git a/base.py b/base.py index aa917858d..25968f371 100644 --- a/base.py +++ b/base.py @@ -64,8 +64,8 @@ class OPackInfo(tuple): location in the pack at which that actual data stream can be found.""" __slots__ = tuple() - def __new__(cls, packoffset, dataoffset, type, size): - return tuple.__new__(cls, (packoffset, dataoffset, type, size)) + def __new__(cls, packoffset, type, size): + return tuple.__new__(cls, (packoffset,type, size)) def __init__(self, *args): tuple.__init__(self) @@ -76,21 +76,17 @@ def __init__(self, *args): def pack_offset(self): return self[0] - @property - def data_offset(self): - return self[1] - @property def type(self): - return type_id_to_type_map[self[2]] + return type_id_to_type_map[self[1]] @property def type_id(self): - return self[2] + return self[1] @property def size(self): - return self[3] + return self[2] #} END interface @@ -102,13 +98,13 @@ class ODeltaPackInfo(OPackInfo): the pack offset of the base object""" __slots__ = tuple() - def __new__(cls, packoffset, dataoffset, type, size, delta_info): - return tuple.__new__(cls, (packoffset, dataoffset, type, size, delta_info)) + def __new__(cls, packoffset, type, size, delta_info): + return tuple.__new__(cls, (packoffset, type, size, delta_info)) #{ Interface @property def delta_info(self): - return self[4] + return self[3] #} END interface @@ -142,17 +138,17 @@ class OPackStream(OPackInfo): is provided""" __slots__ = tuple() - def __new__(cls, packoffset, dataoffset, type, size, stream, *args): + def __new__(cls, packoffset, type, size, stream, *args): """Helps with the initialization of subclasses""" - return tuple.__new__(cls, (packoffset, dataoffset, type, size, stream)) + return tuple.__new__(cls, (packoffset, type, size, stream)) #{ Stream Reader Interface def read(self, size=-1): - return self[4].read(size) + return self[3].read(size) @property def stream(self): - return self[4] + return self[3] #} END stream reader interface @@ -160,17 +156,17 @@ class ODeltaPackStream(ODeltaPackInfo): """Provides a stream outputting the uncompressed offset delta information""" __slots__ = tuple() - def __new__(cls, packoffset, dataoffset, type, size, delta_info, stream): - return tuple.__new__(cls, (packoffset, dataoffset, type, size, delta_info, stream)) + def __new__(cls, packoffset, type, size, delta_info, stream): + return tuple.__new__(cls, (packoffset, type, size, delta_info, stream)) #{ Stream Reader Interface def read(self, size=-1): - return self[5].read(size) + return self[4].read(size) @property def stream(self): - return self[5] + return self[4] #} END stream reader interface diff --git a/pack.py b/pack.py index 4e70c7ce9..1996d0389 100644 --- a/pack.py +++ b/pack.py @@ -55,7 +55,7 @@ def pack_object_at(data, offset, as_stream): """ - :return: PackInfo|PackStream + :return: Tuple(abs_data_offset, PackInfo|PackStream) an object of the correct type according to the type_id of the object. If as_stream is True, the object will contain a stream, allowing the data to be read decompressed. @@ -97,14 +97,14 @@ def pack_object_at(data, offset, as_stream): if as_stream: stream = DecompressMemMapReader(buffer(data, total_rela_offset), False, uncomp_size) if delta_info is None: - return OPackStream(offset, abs_data_offset, type_id, uncomp_size, stream) + return abs_data_offset, OPackStream(offset, type_id, uncomp_size, stream) else: - return ODeltaPackStream(offset, abs_data_offset, type_id, uncomp_size, delta_info, stream) + return abs_data_offset, ODeltaPackStream(offset, type_id, uncomp_size, delta_info, stream) else: if delta_info is None: - return OPackInfo(offset, abs_data_offset, type_id, uncomp_size) + return abs_data_offset, OPackInfo(offset, type_id, uncomp_size) else: - return ODeltaPackInfo(offset, abs_data_offset, type_id, uncomp_size, delta_info) + return abs_data_offset, ODeltaPackInfo(offset, type_id, uncomp_size, delta_info) # END handle info # END handle stream @@ -278,6 +278,7 @@ def sha_to_index(self, sha): if the sha was not found in this pack index :param sha: 20 byte sha to lookup""" first_byte = ord(sha[0]) + get_sha = self.sha lo = 0 # lower index, the left bound of the bisection if first_byte != 0: lo = self._fanout_table[first_byte-1] @@ -286,7 +287,7 @@ def sha_to_index(self, sha): # bisect until we have the sha while lo < hi: mid = (lo + hi) / 2 - c = cmp(sha, self.sha(mid)) + c = cmp(sha, get_sha(mid)) if c < 0: hi = mid elif not c: @@ -346,12 +347,12 @@ def _iter_objects(self, start_offset, as_stream=True): null = NullStream() while cur_offset < content_size: - ostream = pack_object_at(data, cur_offset, True) + data_offset, ostream = pack_object_at(data, cur_offset, True) # scrub the stream to the end - this decompresses the object, but yields # the amount of compressed bytes we need to get to the next offset stream_copy(ostream.read, null.write, ostream.size, chunk_size) - cur_offset += (ostream.data_offset - ostream.pack_offset) + ostream.stream.compressed_bytes_read() + cur_offset += (data_offset - ostream.pack_offset) + ostream.stream.compressed_bytes_read() # if a stream is requested, reset it beforehand @@ -399,7 +400,7 @@ def collect_streams(self, offset): :param offset: specifies the first byte of the object within this pack""" out = list() while True: - ostream = pack_object_at(self._data, offset, True) + ostream = pack_object_at(self._data, offset, True)[1] out.append(ostream) if ostream.type_id == OFS_DELTA: offset = ostream.pack_offset - ostream.delta_info @@ -420,13 +421,13 @@ def info(self, offset): """Retrieve information about the object at the given file-absolute offset :param offset: byte offset :return: OPackInfo instance, the actual type differs depending on the type_id attribute""" - return pack_object_at(self._data, offset or self.first_object_offset, False) + return pack_object_at(self._data, offset or self.first_object_offset, False)[1] def stream(self, offset): """Retrieve an object at the given file-relative offset as stream along with its information :param offset: byte offset :return: OPackStream instance, the actual type differs depending on the type_id attribute""" - return pack_object_at(self._data, offset or self.first_object_offset, True) + return pack_object_at(self._data, offset or self.first_object_offset, True)[1] def stream_iter(self, start_offset=0): """:return: iterator yielding OPackStream compatible instances, allowing diff --git a/test/performance/test_db.py b/test/performance/test_db.py index 3948003cc..46db794fd 100644 --- a/test/performance/test_db.py +++ b/test/performance/test_db.py @@ -14,7 +14,6 @@ class TestGitDBPerformance(TestBigRepoR): def test_pack_random_access(self): pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) - assert len(pdb._entities) > 1 # sha lookup st = time() @@ -72,3 +71,4 @@ def test_pack_random_access(self): elapsed = time() - st total_kib = total_size / 1000 print >> sys.stderr, "PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (max_items, total_kib, total_kib/elapsed , elapsed, max_items / elapsed) + diff --git a/test/test_base.py b/test/test_base.py index 524bf3054..c122ec4b1 100644 --- a/test/test_base.py +++ b/test/test_base.py @@ -35,14 +35,12 @@ def test_streams(self): assert pinfo.type == str_blob_type assert pinfo.type_id == blob_id assert pinfo.pack_offset == 0 - assert pinfo.data_offset == 1 dpinfo = ODeltaPackInfo(0, 1, blob_id, s, sha) assert dpinfo.type == str_blob_type assert dpinfo.type_id == blob_id assert dpinfo.delta_info == sha assert dpinfo.pack_offset == 0 - assert dpinfo.data_offset == 1 # test ostream diff --git a/test/test_pack.py b/test/test_pack.py index 6cfd784d4..6821097ad 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -72,7 +72,6 @@ def _assert_pack_file(self, pack, version, size): stream = pack.stream(obj.pack_offset) assert info.pack_offset == stream.pack_offset - assert info.data_offset == stream.data_offset assert info.type_id == stream.type_id assert hasattr(stream, 'read') From 4503a78e699cb42935f15baa46f5947a0020911f Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 18 Jun 2010 12:37:42 +0200 Subject: [PATCH 0031/2375] Added initial test for putting some often-called functions into an extension module, for now its only being built by a cheap hardcoded makefile. It shows that the performance gain is rather small, bottlenecks are attr accesses, so in fact the whole type wants to be put into C to get real performance. Its not really worth it for 25% I believe --- .gitignore | 2 ++ _fun.c | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ makefile | 12 +++++++ pack.py | 13 ++++++++ 4 files changed, 124 insertions(+) create mode 100644 _fun.c create mode 100644 makefile diff --git a/.gitignore b/.gitignore index 0d20b6487..1a9d961a7 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ *.pyc +*.o +*.so diff --git a/_fun.c b/_fun.c new file mode 100644 index 000000000..ce9f25b16 --- /dev/null +++ b/_fun.c @@ -0,0 +1,97 @@ +#include +#include + +static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) +{ + const unsigned char *sha; + const unsigned int sha_len; + + // Note: self is only set if we are a c type. We emulate an instance method, + // hence we have to get the instance as 'first' argument + + // get instance and sha + PyObject* inst = 0; + if (!PyArg_ParseTuple(args, "Os#", &inst, &sha, &sha_len)) + return NULL; + + if (sha_len != 20) { + PyErr_SetString(PyExc_ValueError, "Sha is not 20 bytes long"); + return NULL; + } + + if( !inst){ + PyErr_SetString(PyExc_ValueError, "Cannot be called without self"); + return NULL; + } + + // read lo and hi bounds + PyObject* fanout_table = PyObject_GetAttrString(inst, "_fanout_table"); + if (!fanout_table){ + PyErr_SetString(PyExc_ValueError, "Couldn't obtain fanout table"); + return NULL; + } + + unsigned int lo = 0, hi = 0; + if (sha[0]){ + PyObject* item = PySequence_GetItem(fanout_table, (const Py_ssize_t)(sha[0]-1)); + lo = PyInt_AS_LONG(item); + Py_DECREF(item); + } + PyObject* item = PySequence_GetItem(fanout_table, (const Py_ssize_t)sha[0]); + hi = PyInt_AS_LONG(item); + Py_DECREF(item); + item = 0; + + Py_DECREF(fanout_table); + + // get sha query function + PyObject* get_sha = PyObject_GetAttrString(inst, "sha"); + if (!get_sha){ + PyErr_SetString(PyExc_ValueError, "Couldn't obtain sha method"); + return NULL; + } + + PyObject *sha_str = 0; + while (lo < hi) { + const int mid = (lo + hi)/2; + sha_str = PyObject_CallFunction(get_sha, "i", mid); + if (!sha_str) { + return NULL; + } + + // we really trust that string ... for speed + const int cmp = memcmp(PyString_AS_STRING(sha_str), sha, 20); + Py_DECREF(sha_str); + sha_str = 0; + + if (cmp < 0){ + lo = mid + 1; + } + else if (cmp > 0) { + hi = mid; + } + else { + Py_DECREF(get_sha); + return PyInt_FromLong(mid); + }// END handle comparison + }// END while lo < hi + + // nothing found, cleanup + Py_DECREF(get_sha); + Py_RETURN_NONE; +} + + +static PyMethodDef py_fun[] = { + { "PackIndexFile_sha_to_index", (PyCFunction)PackIndexFile_sha_to_index, METH_VARARGS, NULL }, + { NULL, NULL, 0, NULL } +}; + +void init_fun(void) +{ + PyObject *m; + + m = Py_InitModule3("_fun", py_fun, NULL); + if (m == NULL) + return; +} diff --git a/makefile b/makefile new file mode 100644 index 000000000..390289625 --- /dev/null +++ b/makefile @@ -0,0 +1,12 @@ + +_fun.o: _fun.c + gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.6 -c $< -o $@ + +_fun.so: _fun.o + gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions $^ -o $@ + +all: _fun.so + +clean: + -rm *.so + -rm *.o diff --git a/pack.py b/pack.py index 1996d0389..d6fe56823 100644 --- a/pack.py +++ b/pack.py @@ -23,6 +23,12 @@ msb_size ) +try: + from _fun import PackIndexFile_sha_to_index +except ImportError: + pass +# END try c module + from base import ( # Amazing ! OInfo, OStream, @@ -298,6 +304,13 @@ def sha_to_index(self, sha): # END bisect return None + if 'PackIndexFile_sha_to_index' in globals(): + # NOTE: Its just about 25% faster, the major bottleneck might be the attr + # accesses + def sha_to_index(self, sha): + return PackIndexFile_sha_to_index(self, sha) + # END redefine heavy-hitter with c version + #} END properties From 3cee78ed377b0a73febdbd772ddba2999313023e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 18 Jun 2010 15:52:16 +0200 Subject: [PATCH 0032/2375] Added endurance run to check all objects in the git source repository, something like a primtive git-fsck, which indeed takes a while to run. Its useful to see the memory consumption, which must stay static in the domain of physical memory --- db/pack.py | 6 ++++- test/performance/{test_db.py => test_pack.py} | 26 ++++++++++++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) rename test/performance/{test_db.py => test_pack.py} (74%) diff --git a/db/pack.py b/db/pack.py index 97890ee20..2332992f2 100644 --- a/db/pack.py +++ b/db/pack.py @@ -157,11 +157,15 @@ def update_pack_entity_cache(self, force=False): # reinitialize prioritiess self._sort_entities() return True + + def entities(self): + """:return: list of pack entities operated upon by this database""" + return [ item[1] for item in self._entities ] def sha_iter(self): """Return iterator yielding 20 byte shas for the packed objects in this data base""" sha_list = list() - for entity in (item[1] for item in self._entities): + for entity in self.entities(): index = entity.index() sha_by_index = index.sha for index in xrange(index.size()): diff --git a/test/performance/test_db.py b/test/performance/test_pack.py similarity index 74% rename from test/performance/test_db.py rename to test/performance/test_pack.py index 46db794fd..37abc1725 100644 --- a/test/performance/test_db.py +++ b/test/performance/test_pack.py @@ -10,7 +10,7 @@ from time import time import random -class TestGitDBPerformance(TestBigRepoR): +class TestPackedDBPerformance(TestBigRepoR): def test_pack_random_access(self): pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) @@ -22,7 +22,6 @@ def test_pack_random_access(self): ns = len(sha_list) print >> sys.stderr, "PDB: looked up %i shas by index in %f s ( %f shas/s )" % (ns, elapsed, ns / elapsed) - # sha lookup: best-case and worst case access pdb_pack_info = pdb._pack_info access_times = list() @@ -39,7 +38,7 @@ def test_pack_random_access(self): # discard cache del(pdb._entities) - pdb._entities + pdb.entities() print >> sys.stderr, "PDB: looked up %i sha (random=%i) in %f s ( %f shas/s )" % (ns, rand, elapsed, ns / elapsed) # END for each random mode elapsed_order, elapsed_rand = access_times @@ -72,3 +71,24 @@ def test_pack_random_access(self): total_kib = total_size / 1000 print >> sys.stderr, "PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (max_items, total_kib, total_kib/elapsed , elapsed, max_items / elapsed) + + print >> sys.stderr, "Endurance run: verify streaming of %i objects (crc and sha)" % ns + for crc in range(2): + count = 0 + st = time() + for entity in pdb.entities(): + pack_verify = entity.is_valid_stream + sha_by_index = entity.index().sha + for index in xrange(entity.index().size()): + try: + assert pack_verify(sha_by_index(index), use_crc=crc) + except UnsupportedOperation: + pass + # END ignore old indices + count += 1 + # END for each index + # END for each entity + elapsed = time() - st + print >> sys.stderr, "PDB: verified %i objects (crc=%i) in %f s ( %f objects/s )" % (count, crc, elapsed, count / elapsed) + # END for each verify mode + From 6fd8d7406028d603379dc23be0ab1403785f2cd3 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 18 Jun 2010 19:57:28 +0200 Subject: [PATCH 0033/2375] Base implementation and stubs added for git-like db, as well as the reference db ( for the alternates implementation ) --- db/base.py | 73 +++++++++++++++++++++++++++++++++-- db/git.py | 68 +++++++++++++++++++------------- db/loose.py | 19 +++++++++ db/pack.py | 45 ++++++++++----------- db/ref.py | 61 ++++++++++++++++++++++++++++- test/db/lib.py | 1 + test/db/test_git.py | 9 +++++ test/db/test_loose.py | 5 +++ test/db/test_pack.py | 12 +++--- test/db/test_ref.py | 21 ++++++++++ test/performance/test_pack.py | 5 ++- util.py | 1 + 12 files changed, 258 insertions(+), 62 deletions(-) create mode 100644 test/db/test_git.py create mode 100644 test/db/test_ref.py diff --git a/db/base.py b/db/base.py index 2cda0ea0a..91e82fc0b 100644 --- a/db/base.py +++ b/db/base.py @@ -9,7 +9,7 @@ ) -__all__ = ('ObjectDBR', 'ObjectDBW', 'FileDBBase', 'CompoundDB') +__all__ = ('ObjectDBR', 'ObjectDBW', 'FileDBBase', 'CompoundDB', 'CachingDB') class ObjectDBR(object): @@ -66,6 +66,14 @@ def stream_async(self, reader): # base implementation just uses the stream method repeatedly task = ChannelThreadTask(reader, str(self.stream_async), self.stream) return pool.add_task(task) + + def size(self): + """:return: amount of objects in this database""" + raise NotImplementedError() + + def sha_iter(self): + """Return iterator yielding 20 byte shas for all objects in this data base""" + raise NotImplementedError() #} END query interface @@ -150,6 +158,63 @@ def db_path(self, rela_path): #} END interface -class CompoundDB(ObjectDBR): - """A database which delegates calls to sub-databases""" - # TODO +class CachingDB(object): + """A database which uses caches to speed-up access""" + + #{ Interface + def update_cache(self, force=False): + """Call this method if the underlying data changed to trigger an update + of the internal caching structures. + :param force: if True, the update must be performed. Otherwise the implementation + may decide not to perform an update if it thinks nothing has changed. + :return: True if an update was performed as something change indeed""" + + # END interface + + +class CompoundDB(ObjectDBR, LazyMixin, CachingDB): + """A database which delegates calls to sub-databases. + + Databases are stored in the lazy-loaded _dbs attribute. + Define _set_cache_ to update it with your databases""" + + def _set_cache_(self, attr): + if attr == '_dbs': + self._dbs = list() + + #{ ObjectDBR interface + + def has_object(self, sha): + raise NotImplementedError("To be implemented in subclass") + + def info(self, sha): + raise NotImplementedError("To be implemented in subclass") + + def stream(self, sha): + raise NotImplementedError() + + def size(self): + raise NotImplementedError() + + def sha_iter(self): + raise NotImplementedError() + + #} END object DBR Interface + + #{ Interface + + def databases(self): + """:return: tuple of database instances we use for lookups""" + return tuple(self._dbs) + + def update_cache(self, force=False): + stat = False + for db in self._dbs: + if isinstance(db, CachingDB): + stat |= db.update_cache(force) + # END if is caching db + # END for each database to update + return stat + #} END interface + + diff --git a/db/git.py b/db/git.py index 0488bc601..1953def17 100644 --- a/db/git.py +++ b/db/git.py @@ -1,33 +1,49 @@ - -from gitdb.base import ( - OInfo, - OStream - ) +from base import ( + CompoundDB, + FileDBBase, + ) from loose import LooseObjectDB +from pack import PackedDB +from ref import ReferenceDB + +from gitdb.util import LazyMixin +from gitdb.exc import InvalidDBRoot +import os -__all__ = ('GitObjectDB', ) +__all__ = ('GitDB', ) -#class GitObjectDB(CompoundDB, ObjectDBW): -class GitObjectDB(LooseObjectDB): - """A database representing the default git object store, which includes loose - objects, pack files and an alternates file +class GitDB(FileDBBase, CompoundDB): + """A git-style object database, which contains all objects in the 'objects' + subdirectory""" + # Configuration + PackDBCls = PackedDB + LooseDBCls = LooseObjectDB + ReferenceDBCls = ReferenceDB - It will create objects only in the loose object database. - :note: for now, we use the git command to do all the lookup, just until he - have packs and the other implementations - """ - def __init__(self, root_path, git): - """Initialize this instance with the root and a git command""" - super(GitObjectDB, self).__init__(root_path) - self._git = git + # Directories + packs_dir = 'packs' + loose_dir = '' + alternates_dir = os.path.join('info', 'alternates') + + def __init__(self, root_path): + """Initialize ourselves on a git objects directory""" + super(GitDB, self).__init__(root_path) - def info(self, sha): - t = self._git.get_object_header(sha) - return OInfo(*t) + def _set_cache_(self, attr): + if attr == '_dbs': + self._dbs = list() + for subpath, dbcls in ((self.packs_dir, self.PackDBCls), + (self.loose_dir, self.LooseDBCls), + (self.alternates_dir, self.ReferenceDBCls)): + path = self.db_path(subpath) + if os.path.exists(path): + self._dbs.append(dbcls(path)) + # END check path exists + # END for each db type + + # should have at least one subdb + if not self._dbs: + raise InvalidDBRoot(self.root_path()) + # END handle dbs - def stream(self, sha): - """For now, all lookup is done by git itself""" - t = self._git.stream_object_data(sha) - return OStream(*t) - diff --git a/db/loose.py b/db/loose.py index 109782fdc..b95d6f1c9 100644 --- a/db/loose.py +++ b/db/loose.py @@ -24,11 +24,13 @@ from gitdb.util import ( ENOENT, to_hex_sha, + hex_to_bin, exists, isdir, mkdir, rename, dirname, + basename, join ) @@ -186,4 +188,21 @@ def store(self, istream): istream.sha = sha return istream + + def sha_iter(self): + # find all files which look like an object, extract sha from there + for root, dirs, files in os.walk(self.root_path()): + root_base = basename(root) + if len(root_base) != 2: + continue + + for f in files: + if len(f) != 38: + continue + yield hex_to_bin(root_base + f) + # END for each file + # END for each walk iteration + + def size(self): + return len(tuple(self.sha_iter())) diff --git a/db/pack.py b/db/pack.py index 2332992f2..92fbc616b 100644 --- a/db/pack.py +++ b/db/pack.py @@ -1,7 +1,8 @@ """Module containing a database to deal with packs""" from base import ( FileDBBase, - ObjectDBR + ObjectDBR, + CachingDB ) from gitdb.util import ( @@ -18,13 +19,13 @@ import os import glob -__all__ = ('PackedDB', ) +__all__ = ('PackedDB', ) #{ Utilities -class PackedDB(FileDBBase, ObjectDBR, LazyMixin): +class PackedDB(FileDBBase, ObjectDBR, CachingDB, LazyMixin): """A database operating on a set of object packs""" # sort the priority list every N queries @@ -43,9 +44,10 @@ def __init__(self, root_path): self._st_mtime = 0 # last modification data of our root path def _set_cache_(self, attr): - # currently it can only be our _entities attribute - self._entities = list() - self.update_pack_entity_cache() + if attr == '_entities': + self._entities = list() + self.update_cache() + # END handle entities initialization def _sort_entities(self): self._entities.sort(key=lambda l: l[0], reverse=True) @@ -95,6 +97,20 @@ def info(self, sha): def stream(self, sha): entity, index = self._pack_info(sha) return entity.stream_at_index(index) + + def sha_iter(self): + sha_list = list() + for entity in self.entities(): + index = entity.index() + sha_by_index = index.sha + for index in xrange(index.size()): + yield sha_by_index(index) + # END for each index + # END for each entity + + def size(self): + sizes = [item[1].index().size() for item in self._entities] + return reduce(lambda x,y: x+y, sizes) #} END object db read @@ -115,7 +131,7 @@ def store_async(self, reader): #{ Interface - def update_pack_entity_cache(self, force=False): + def update_cache(self, force=False): """Update our cache with the acutally existing packs on disk. Add new ones, and remove deleted ones. We keep the unchanged ones :param force: If True, the cache will be updated even though the directory @@ -162,19 +178,4 @@ def entities(self): """:return: list of pack entities operated upon by this database""" return [ item[1] for item in self._entities ] - def sha_iter(self): - """Return iterator yielding 20 byte shas for the packed objects in this data base""" - sha_list = list() - for entity in self.entities(): - index = entity.index() - sha_by_index = index.sha - for index in xrange(index.size()): - yield sha_by_index(index) - # END for each index - # END for each entity - - def size(self): - """:return: amount of packed objects in this database""" - sizes = [item[1].index().size() for item in self._entities] - return reduce(lambda x,y: x+y, sizes) #} END interface diff --git a/db/ref.py b/db/ref.py index 2c63884bc..5db8d7a23 100644 --- a/db/ref.py +++ b/db/ref.py @@ -1,7 +1,64 @@ -from base import CompoundDB +from base import ( + CompoundDB, + ) +import os __all__ = ('CompoundDB', ) class ReferenceDB(CompoundDB): """A database consisting of database referred to in a file""" - + + # Configuration + # Specifies the object database to use for the paths found in the alternates + # file. If None, it defaults to the GitDB + ObjectDBCls = None + + def __init__(self, ref_file): + super(ReferenceDB, self).__init__() + self._ref_file = ref_file + + def _set_cache_(self, attr): + if attr == '_dbs': + self._dbs = list() + self._update_dbs_from_ref_file() + # END handle dbs + + def _update_dbs_from_ref_file(self): + dbcls = self.ObjectDBCls + if dbcls is None: + # late import + from git import GitDB + dbcls = GitDB + # END get db type + + # try to get as many as possible, don't fail if some are unavailable + ref_paths = list() + try: + ref_paths = [l.strip() for l in open(self._ref_file, 'r').readlines()] + except OSError: + pass + # END handle alternates + + ref_paths_set = set(ref_paths) + cur_ref_paths_set = set(db.root_path() for db in self._dbs) + + # remove existing + for path in (cur_ref_paths_set - ref_paths_set): + for i, db in enumerate(self._dbs[:]): + if db.root_path() == path: + del(self._dbs[i]) + continue + # END del matching db + # END for each path to remove + + # add new + # sort them to maintain order + added_paths = sorted(ref_paths_set - cur_ref_paths_set, key=lambda p: ref_paths.index(p)) + for path in added_paths: + self._dbs.append(dbcls(path)) + # END for each path to add + + def update_cache(self, force=False): + # re-read alternates and update databases + self._update_dbs_from_ref_file() + return super(ReferenceDB, self).update_cache(force) diff --git a/test/db/lib.py b/test/db/lib.py index cf752741b..57f5eefc1 100644 --- a/test/db/lib.py +++ b/test/db/lib.py @@ -3,6 +3,7 @@ with_rw_directory, with_packs_rw, ZippedStoreShaWriter, + fixture_path, TestBase ) diff --git a/test/db/test_git.py b/test/db/test_git.py new file mode 100644 index 000000000..35a0d5bad --- /dev/null +++ b/test/db/test_git.py @@ -0,0 +1,9 @@ +from lib import * +from gitdb.db import GitDB + +class TestGitDB(TestBase): + + def test_reading(self): + ldb = GitDB(fixture_path('../../.git/objects') + self.fail("todo") + diff --git a/test/db/test_loose.py b/test/db/test_loose.py index 70cd7742c..536b02048 100644 --- a/test/db/test_loose.py +++ b/test/db/test_loose.py @@ -11,3 +11,8 @@ def test_writing(self, path): self._assert_object_writing(ldb) self._assert_object_writing_async(ldb) + # verify sha iteration and size + shas = list(ldb.sha_iter()) + assert shas and len(shas[0]) == 20 + + assert len(shas) == ldb.size() diff --git a/test/db/test_pack.py b/test/db/test_pack.py index 89f73f036..f347f408b 100644 --- a/test/db/test_pack.py +++ b/test/db/test_pack.py @@ -14,22 +14,22 @@ def test_writing(self, path): # on demand, we init our pack cache num_packs = 2 - assert len(pdb._entities) == num_packs + assert len(pdb.entities()) == num_packs assert pdb._st_mtime != 0 # test pack directory changed: # packs removed - rename a file, should affect the glob - pack_path = pdb._entities[0][1].pack().path() + pack_path = pdb.entities()[0].pack().path() new_pack_path = pack_path + "renamed" os.rename(pack_path, new_pack_path) - pdb.update_pack_entity_cache(force=True) - assert len(pdb._entities) == num_packs - 1 + pdb.update_cache(force=True) + assert len(pdb.entities()) == num_packs - 1 # packs added os.rename(new_pack_path, pack_path) - pdb.update_pack_entity_cache(force=True) - assert len(pdb._entities) == num_packs + pdb.update_cache(force=True) + assert len(pdb.entities()) == num_packs # bang on the cache # access the Entities directly, as there is no iteration interface diff --git a/test/db/test_ref.py b/test/db/test_ref.py new file mode 100644 index 000000000..3b027d701 --- /dev/null +++ b/test/db/test_ref.py @@ -0,0 +1,21 @@ +from lib import * +from gitdb.db import ReferenceDB + +class TestReferenceDB(TestBase): + + @with_rw_directory + def test_writing(self, path): + # TODO: setup alternate file + alternates = + ldb = ReferenceDB(path) + + # try empty, non-existing + + # add two, one is invalid + + # remove valid + + # add valid + + self.fail("todo") + diff --git a/test/performance/test_pack.py b/test/performance/test_pack.py index 37abc1725..8046c1f83 100644 --- a/test/performance/test_pack.py +++ b/test/performance/test_pack.py @@ -3,6 +3,7 @@ TestBigRepoR ) +from gitdb.exc import UnsupportedOperation from gitdb.db.pack import PackedDB import sys @@ -39,7 +40,7 @@ def test_pack_random_access(self): # discard cache del(pdb._entities) pdb.entities() - print >> sys.stderr, "PDB: looked up %i sha (random=%i) in %f s ( %f shas/s )" % (ns, rand, elapsed, ns / elapsed) + print >> sys.stderr, "PDB: looked up %i sha in %i packs (random=%i) in %f s ( %f shas/s )" % (ns, len(pdb.entities()), rand, elapsed, ns / elapsed) # END for each random mode elapsed_order, elapsed_rand = access_times @@ -82,10 +83,10 @@ def test_pack_random_access(self): for index in xrange(entity.index().size()): try: assert pack_verify(sha_by_index(index), use_crc=crc) + count += 1 except UnsupportedOperation: pass # END ignore old indices - count += 1 # END for each index # END for each entity elapsed = time() - st diff --git a/util.py b/util.py index c460969ca..aa6db4088 100644 --- a/util.py +++ b/util.py @@ -57,6 +57,7 @@ def unpack_from(fmt, data, offset=0): isdir = os.path.isdir rename = os.rename dirname = os.path.dirname +basename = os.path.basename join = os.path.join read = os.read write = os.write From 92ca2e4ad606fbec7c934ad9e467a1b51fddcc92 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 20 Jun 2010 19:47:38 +0200 Subject: [PATCH 0034/2375] Implemented gitdb, it should be a fully functional git database with full read support, and the ability to write loose objects --- db/base.py | 36 ++++++++++++++++++++++++++++++------ db/git.py | 36 ++++++++++++++++++++++++++++++------ db/pack.py | 2 +- db/ref.py | 15 ++++++++++++--- test/db/lib.py | 2 +- test/db/test_git.py | 23 ++++++++++++++++++++--- test/db/test_ref.py | 42 +++++++++++++++++++++++++++++++++++++----- 7 files changed, 131 insertions(+), 25 deletions(-) diff --git a/db/base.py b/db/base.py index 91e82fc0b..35c20b7e1 100644 --- a/db/base.py +++ b/db/base.py @@ -1,13 +1,19 @@ """Contains implementations of database retrieveing objects""" from gitdb.util import ( pool, - join + join, + LazyMixin, + to_bin_sha ) +from gitdb.exc import BadObject + from async import ( ChannelThreadTask ) +from itertools import chain + __all__ = ('ObjectDBR', 'ObjectDBW', 'FileDBBase', 'CompoundDB', 'CachingDB') @@ -182,22 +188,40 @@ def _set_cache_(self, attr): if attr == '_dbs': self._dbs = list() + def _db_query(self, sha): + """:return: database containing the given 20 or 40 byte sha + :raise BadObject:""" + # most databases use binary representations, prevent converting + # it everytime a database is being queried + sha = to_bin_sha(sha) + for db in self._dbs: + if db.has_object(sha): + return db + # END for each database + raise BadObject(sha) + #{ ObjectDBR interface def has_object(self, sha): - raise NotImplementedError("To be implemented in subclass") + try: + self._db_query(sha) + return True + except BadObject: + return False + # END handle exceptions def info(self, sha): - raise NotImplementedError("To be implemented in subclass") + return self._db_query(sha).info(sha) def stream(self, sha): - raise NotImplementedError() + return self._db_query(sha).stream(sha) def size(self): - raise NotImplementedError() + """:return: total size of all contained databases""" + return reduce(lambda x,y: x+y, (db.size() for db in self._dbs), 0) def sha_iter(self): - raise NotImplementedError() + return chain(*(db.sha_iter() for db in self._dbs)) #} END object DBR Interface diff --git a/db/git.py b/db/git.py index 1953def17..ad9a613b3 100644 --- a/db/git.py +++ b/db/git.py @@ -1,7 +1,8 @@ from base import ( - CompoundDB, - FileDBBase, - ) + CompoundDB, + ObjectDBW, + FileDBBase + ) from loose import LooseObjectDB from pack import PackedDB @@ -13,7 +14,7 @@ __all__ = ('GitDB', ) -class GitDB(FileDBBase, CompoundDB): +class GitDB(FileDBBase, ObjectDBW, CompoundDB): """A git-style object database, which contains all objects in the 'objects' subdirectory""" # Configuration @@ -22,7 +23,7 @@ class GitDB(FileDBBase, CompoundDB): ReferenceDBCls = ReferenceDB # Directories - packs_dir = 'packs' + packs_dir = 'pack' loose_dir = '' alternates_dir = os.path.join('info', 'alternates') @@ -31,19 +32,42 @@ def __init__(self, root_path): super(GitDB, self).__init__(root_path) def _set_cache_(self, attr): - if attr == '_dbs': + if attr == '_dbs' or attr == '_loose_db': self._dbs = list() + loose_db = None for subpath, dbcls in ((self.packs_dir, self.PackDBCls), (self.loose_dir, self.LooseDBCls), (self.alternates_dir, self.ReferenceDBCls)): path = self.db_path(subpath) if os.path.exists(path): self._dbs.append(dbcls(path)) + if dbcls is self.LooseDBCls: + loose_db = self._dbs[-1] + # END remember loose db # END check path exists # END for each db type # should have at least one subdb if not self._dbs: raise InvalidDBRoot(self.root_path()) + # END handle error + + # we the first one should have the store method + assert loose_db is not None and hasattr(loose_db, 'store'), "First database needs store functionality" + + # finally set the value + self._loose_db = loose_db + # END handle dbs + #{ ObjectDBW interface + + def store(self, istream): + return self._loose_db.store(istream) + + def ostream(self): + return self._loose_db.ostream() + + def set_ostream(self, ostream): + return self._loose_db.set_ostream(ostream) + #} END objectdbw interface diff --git a/db/pack.py b/db/pack.py index 92fbc616b..af6f7ffd6 100644 --- a/db/pack.py +++ b/db/pack.py @@ -110,7 +110,7 @@ def sha_iter(self): def size(self): sizes = [item[1].index().size() for item in self._entities] - return reduce(lambda x,y: x+y, sizes) + return reduce(lambda x,y: x+y, sizes, 0) #} END object db read diff --git a/db/ref.py b/db/ref.py index 5db8d7a23..3a4813979 100644 --- a/db/ref.py +++ b/db/ref.py @@ -3,7 +3,7 @@ ) import os -__all__ = ('CompoundDB', ) +__all__ = ('ReferenceDB', ) class ReferenceDB(CompoundDB): """A database consisting of database referred to in a file""" @@ -35,7 +35,7 @@ def _update_dbs_from_ref_file(self): ref_paths = list() try: ref_paths = [l.strip() for l in open(self._ref_file, 'r').readlines()] - except OSError: + except (OSError, IOError): pass # END handle alternates @@ -55,7 +55,16 @@ def _update_dbs_from_ref_file(self): # sort them to maintain order added_paths = sorted(ref_paths_set - cur_ref_paths_set, key=lambda p: ref_paths.index(p)) for path in added_paths: - self._dbs.append(dbcls(path)) + try: + db = dbcls(path) + # force an update to verify path + if isinstance(db, CompoundDB): + db.databases() + # END verification + self._dbs.append(db) + except Exception, e: + # ignore invalid paths or issues + pass # END for each path to add def update_cache(self, force=False): diff --git a/test/db/lib.py b/test/db/lib.py index 57f5eefc1..2c597fbd3 100644 --- a/test/db/lib.py +++ b/test/db/lib.py @@ -22,7 +22,7 @@ from cStringIO import StringIO -__all__ = ('TestDBBase', 'with_rw_directory', 'with_packs_rw' ) +__all__ = ('TestDBBase', 'with_rw_directory', 'with_packs_rw', 'fixture_path') class TestDBBase(TestBase): """Base class providing testing routines on databases""" diff --git a/test/db/test_git.py b/test/db/test_git.py index 35a0d5bad..4d463f1f7 100644 --- a/test/db/test_git.py +++ b/test/db/test_git.py @@ -1,9 +1,26 @@ from lib import * from gitdb.db import GitDB +from gitdb.base import OStream, OInfo -class TestGitDB(TestBase): +class TestGitDB(TestDBBase): def test_reading(self): - ldb = GitDB(fixture_path('../../.git/objects') - self.fail("todo") + gdb = GitDB(fixture_path('../../.git/objects')) + # we have packs and loose objects, alternates doesn't necessarily exist + assert 1 < len(gdb.databases()) < 4 + + # access should be possible + gitdb_sha = "5690fd0d3304f378754b23b098bd7cb5f4aa1976" + assert isinstance(gdb.info(gitdb_sha), OInfo) + assert isinstance(gdb.stream(gitdb_sha), OStream) + assert gdb.size() > 200 + assert len(list(gdb.sha_iter())) == gdb.size() + + @with_rw_directory + def test_writing(self, path): + gdb = GitDB(path) + + # its possible to write objects + self._assert_object_writing(gdb) + self._assert_object_writing_async(gdb) diff --git a/test/db/test_ref.py b/test/db/test_ref.py index 3b027d701..68d9b8116 100644 --- a/test/db/test_ref.py +++ b/test/db/test_ref.py @@ -1,21 +1,53 @@ from lib import * from gitdb.db import ReferenceDB -class TestReferenceDB(TestBase): +import os + +class TestReferenceDB(TestDBBase): + + def make_alt_file(self, alt_path, alt_list): + """Create an alternates file which contains the given alternates. + The list can be empty""" + alt_file = open(alt_path, "wb") + for alt in alt_list: + alt_file.write(alt + "\n") + alt_file.close() @with_rw_directory def test_writing(self, path): - # TODO: setup alternate file - alternates = - ldb = ReferenceDB(path) + null_sha_bin = '\0' * 20 + null_sha_hex = "0" * 40 + + alt_path = os.path.join(path, 'alternates') + rdb = ReferenceDB(alt_path) + assert len(rdb.databases()) == 0 + assert rdb.size() == 0 + assert len(list(rdb.sha_iter())) == 0 # try empty, non-existing + assert not rdb.has_object(null_sha_hex) + assert not rdb.has_object(null_sha_bin) + + # setup alternate file # add two, one is invalid + own_repo_path = fixture_path('../../.git/objects') # use own repo + self.make_alt_file(alt_path, [own_repo_path, "invalid/path"]) + rdb.update_cache() + assert len(rdb.databases()) == 1 + + # we should now find a default revision of ours + gitdb_sha = "5690fd0d3304f378754b23b098bd7cb5f4aa1976" + assert rdb.has_object(gitdb_sha) # remove valid + self.make_alt_file(alt_path, ["just/one/invalid/path"]) + rdb.update_cache() + assert len(rdb.databases()) == 0 # add valid + self.make_alt_file(alt_path, [own_repo_path]) + rdb.update_cache() + assert len(rdb.databases()) == 1 - self.fail("todo") From 92e6770be0f65393199432dcfd24f3f1b10d015e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 22 Jun 2010 10:58:45 +0200 Subject: [PATCH 0035/2375] Added MemoryDB including initial test, moved ZippedShaWriter into stream module, it was just a test helper previously --- base.py | 10 ++++++ db/__init__.py | 1 + db/mem.py | 80 +++++++++++++++++++++++++++++++++++++++++++++ stream.py | 33 +++++++++++++++++++ test/db/lib.py | 29 +++++++++++++++- test/db/test_mem.py | 10 ++++++ test/lib.py | 27 +++------------ test/test_base.py | 4 +-- 8 files changed, 169 insertions(+), 25 deletions(-) create mode 100644 db/mem.py create mode 100644 test/db/test_mem.py diff --git a/base.py b/base.py index 25968f371..0f4e63176 100644 --- a/base.py +++ b/base.py @@ -41,6 +41,16 @@ def __init__(self, *args): def sha(self): return self[0] + @property + def hexsha(self): + """:return: our sha, hex encoded, 40 bytes""" + return to_hex_sha(self[0]) + + @property + def binsha(self): + """:return: our sha as binary, 20 bytes""" + return to_bin_sha(self[0]) + @property def type(self): return self[1] diff --git a/db/__init__.py b/db/__init__.py index 05d9b21b3..85a0a6874 100644 --- a/db/__init__.py +++ b/db/__init__.py @@ -1,6 +1,7 @@ from base import * from loose import * +from mem import * from pack import * from git import * from ref import * diff --git a/db/mem.py b/db/mem.py new file mode 100644 index 000000000..3bb6a339d --- /dev/null +++ b/db/mem.py @@ -0,0 +1,80 @@ +"""Contains the MemoryDatabase implementation""" +from loose import LooseObjectDB +from base import ( + ObjectDBR, + ObjectDBW + ) + +from gitdb.base import OStream +from gitdb.util import to_bin_sha +from gitdb.exc import ( + BadObject, + UnsupportedOperation + ) +from gitdb.stream import ( + ZippedStoreShaWriter, + DecompressMemMapReader, + ) + +__all__ = ("MemoryDB", ) + +class MemoryDB(ObjectDBR, ObjectDBW): + """A memory database stores everything to memory, providing fast IO and object + retrieval. It should be used to buffer results and obtain SHAs before writing + it to the actual physical storage, as it allows to query whether object already + exists in the target storage before introducing actual IO + + :note: memory is currently not threadsafe, hence the async methods cannot be used + for storing""" + + def __init__(self): + super(MemoryDB, self).__init__() + self._db = LooseObjectDB("path/doesnt/matter") + + # maps 20 byte shas to their OStream objects + self._cache = dict() + + def set_ostream(self, stream): + raise UnsupportedOperation("MemoryDB's always stream into memory") + + def store(self, istream): + zstream = ZippedStoreShaWriter() + self._db.set_ostream(zstream) + + istream = self._db.store(istream) + zstream.close() # close to flush + zstream.seek(0) + + # don't provide a size, the stream is written in object format, hence the + # header needs decompression + decomp_stream = DecompressMemMapReader(zstream.getvalue(), close_on_deletion=False) + self._cache[istream.binsha] = OStream(istream.sha, istream.type, istream.size, decomp_stream) + + return istream + + def store_async(self, reader): + raise UnsupportedOperation("MemoryDBs cannot currently be used for async write access") + + def has_object(self, sha): + return to_bin_sha(sha) in self._cache + + def info(self, sha): + # we always return streams, which are infos as well + return self.stream(sha) + + def stream(self, sha): + sha = to_bin_sha(sha) + try: + ostream = self._cache[sha] + # rewind stream for the next one to read + ostream.stream.seek(0) + return ostream + except KeyError: + raise BadObject(sha) + # END exception handling + + def size(self): + return len(self._cache) + + def sha_iter(self): + return self._cache.iterkeys() diff --git a/stream.py b/stream.py index 6c388a96c..8b7e981b0 100644 --- a/stream.py +++ b/stream.py @@ -499,6 +499,39 @@ def sha(self, as_hex = False): #} END interface + +class ZippedStoreShaWriter(Sha1Writer): + """Remembers everything someone writes to it and generates a sha""" + __slots__ = ('buf', 'zip') + def __init__(self): + Sha1Writer.__init__(self) + self.buf = StringIO() + self.zip = zlib.compressobj(zlib.Z_BEST_SPEED) + + def __getattr__(self, attr): + return getattr(self.buf, attr) + + def write(self, data): + alen = Sha1Writer.write(self, data) + self.buf.write(self.zip.compress(data)) + return alen + + def close(self): + self.buf.write(self.zip.flush()) + + def seek(self, offset, whence=os.SEEK_SET): + """Seeking currently only supports to rewind written data + Multiple writes are not supported""" + if offset != 0 or whence != os.SEEK_SET: + raise ValueError("Can only seek to position 0") + # END handle offset + self.buf.seek(0) + + def getvalue(self): + """:return: string value from the current stream position to the end""" + return self.buf.getvalue() + + class FDCompressedSha1Writer(Sha1Writer): """Digests data written to it, making the sha available, then compress the data and write it to the file descriptor diff --git a/test/db/lib.py b/test/db/lib.py index 2c597fbd3..b22f9a2b8 100644 --- a/test/db/lib.py +++ b/test/db/lib.py @@ -20,6 +20,7 @@ from async import IteratorReader from cStringIO import StringIO +from struct import pack __all__ = ('TestDBBase', 'with_rw_directory', 'with_packs_rw', 'fixture_path') @@ -29,9 +30,35 @@ class TestDBBase(TestBase): # data two_lines = "1234\nhello world" - all_data = (two_lines, ) + def _assert_object_writing_simple(self, db): + # write a bunch of objects and query their streams and info + null_objs = db.size() + ni = 250 + for i in xrange(ni): + data = pack(">L", i) + istream = IStream(str_blob_type, len(data), StringIO(data)) + new_istream = db.store(istream) + assert new_istream is istream + assert db.has_object(istream.sha) + + info = db.info(istream.sha) + assert isinstance(info, OInfo) + assert info.type == istream.type and info.size == istream.size + + stream = db.stream(istream.sha) + assert isinstance(stream, OStream) + assert stream.sha == info.sha and stream.type == info.type + assert stream.read() == data + # END for each item + + assert db.size() == null_objs + ni + shas = list(db.sha_iter()) + assert len(shas) == db.size() + assert len(shas[0]) == 20 + + def _assert_object_writing(self, db): """General tests to verify object writing, compatible to ObjectDBW :note: requires write access to the database""" diff --git a/test/db/test_mem.py b/test/db/test_mem.py new file mode 100644 index 000000000..9e7c1190e --- /dev/null +++ b/test/db/test_mem.py @@ -0,0 +1,10 @@ +from lib import * +from gitdb.db import MemoryDB + +class TestMemoryDB(TestDBBase): + + def test_writing(self): + mdb = MemoryDB() + + # write data + self._assert_object_writing_simple(mdb) diff --git a/test/lib.py b/test/lib.py index 6b25876d6..78817fea9 100644 --- a/test/lib.py +++ b/test/lib.py @@ -2,7 +2,11 @@ from gitdb import ( OStream, ) -from gitdb.stream import Sha1Writer +from gitdb.stream import ( + Sha1Writer, + ZippedStoreShaWriter + ) + from gitdb.util import zlib import sys @@ -140,26 +144,5 @@ def _assert(self): assert self.args assert self.myarg - -class ZippedStoreShaWriter(Sha1Writer): - """Remembers everything someone writes to it""" - __slots__ = ('buf', 'zip') - def __init__(self): - Sha1Writer.__init__(self) - self.buf = StringIO() - self.zip = zlib.compressobj(1) # fastest - - def __getattr__(self, attr): - return getattr(self.buf, attr) - - def write(self, data): - alen = Sha1Writer.write(self, data) - self.buf.write(self.zip.compress(data)) - return alen - - def close(self): - self.buf.write(self.zip.flush()) - - #} END stream utilitiess diff --git a/test/test_base.py b/test/test_base.py index c122ec4b1..8d8bcc944 100644 --- a/test/test_base.py +++ b/test/test_base.py @@ -31,12 +31,12 @@ def test_streams(self): # test pack info # provides type_id - pinfo = OPackInfo(0, 1, blob_id, s) + pinfo = OPackInfo(0, blob_id, s) assert pinfo.type == str_blob_type assert pinfo.type_id == blob_id assert pinfo.pack_offset == 0 - dpinfo = ODeltaPackInfo(0, 1, blob_id, s, sha) + dpinfo = ODeltaPackInfo(0, blob_id, s, sha) assert dpinfo.type == str_blob_type assert dpinfo.type_id == blob_id assert dpinfo.delta_info == sha From 9b53ab02cb44571e6167a125a5296b7c3395563f Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 22 Jun 2010 11:45:26 +0200 Subject: [PATCH 0036/2375] MemoryDB: Implemented direct stream copy, allowing to flush memory db content into any other object db for permanent storage --- db/loose.py | 24 ++++++++++++++++----- db/mem.py | 33 ++++++++++++++++++++++++++++- stream.py | 51 ++++++++++++++++++++++++++++++++------------- test/db/test_mem.py | 20 ++++++++++++++++-- test/test_stream.py | 4 ++-- 5 files changed, 107 insertions(+), 25 deletions(-) diff --git a/db/loose.py b/db/loose.py index b95d6f1c9..9bcbd6aac 100644 --- a/db/loose.py +++ b/db/loose.py @@ -13,6 +13,7 @@ from gitdb.stream import ( DecompressMemMapReader, FDCompressedSha1Writer, + FDStream, Sha1Writer ) @@ -43,6 +44,7 @@ import tempfile import mmap +import sys import os @@ -153,13 +155,20 @@ def store(self, istream): if writer is None: # open a tmp file to write the data to fd, tmp_path = tempfile.mkstemp(prefix='obj', dir=self._root_path) - writer = FDCompressedSha1Writer(fd) + + if istream.sha is None: + writer = FDCompressedSha1Writer(fd) + else: + writer = FDStream(fd) + # END handle direct stream copies # END handle custom writer try: try: if istream.sha is not None: - stream_copy(istream.read, writer.write, istream.size, self.stream_chunk_size) + # copy as much as possible, the actual uncompressed item size might + # be smaller than the compressed version + stream_copy(istream.read, writer.write, sys.maxint, self.stream_chunk_size) else: # write object with header, we have to make a new one write_object(istream.type, istream.size, istream.read, writer.write, @@ -175,10 +184,15 @@ def store(self, istream): writer.close() # END assure target stream is closed - sha = istream.sha or writer.sha(as_hex=True) + hexsha = None + if istream.sha: + hexsha = istream.hexsha + else: + hexsha = writer.sha(as_hex=True) + # END handle sha if tmp_path: - obj_path = self.db_path(self.object_path(sha)) + obj_path = self.db_path(self.object_path(hexsha)) obj_dir = dirname(obj_path) if not isdir(obj_dir): mkdir(obj_dir) @@ -186,7 +200,7 @@ def store(self, istream): rename(tmp_path, obj_path) # END handle dry_run - istream.sha = sha + istream.sha = hexsha return istream def sha_iter(self): diff --git a/db/mem.py b/db/mem.py index 3bb6a339d..9e3d3972d 100644 --- a/db/mem.py +++ b/db/mem.py @@ -5,7 +5,11 @@ ObjectDBW ) -from gitdb.base import OStream +from gitdb.base import ( + OStream, + IStream, + ) + from gitdb.util import to_bin_sha from gitdb.exc import ( BadObject, @@ -16,6 +20,8 @@ DecompressMemMapReader, ) +from cStringIO import StringIO + __all__ = ("MemoryDB", ) class MemoryDB(ObjectDBR, ObjectDBW): @@ -78,3 +84,28 @@ def size(self): def sha_iter(self): return self._cache.iterkeys() + + + #{ Interface + def stream_copy(self, sha_iter, odb): + """Copy the streams as identified by sha's yielded by sha_iter into the given odb + The streams will be copied directly + :note: the object will only be written if it did not exist in the target db + :return: amount of streams actually copied into odb. If smaller than the amount + of input shas, one or more objects did already exist in odb""" + count = 0 + for sha in sha_iter: + if odb.has_object(sha): + continue + # END check object existance + + ostream = self.stream(sha) + # compressed data including header + sio = StringIO(ostream.stream.data()) + istream = IStream(ostream.type, ostream.size, sio, sha) + + odb.store(istream) + count += 1 + # END for each sha + return count + #} END interface diff --git a/stream.py b/stream.py index 8b7e981b0..57a5a194f 100644 --- a/stream.py +++ b/stream.py @@ -25,21 +25,6 @@ #{ RO Streams -class NullStream(object): - """A stream that does nothing but providing a stream interface. - Use it like /dev/null""" - __slots__ = tuple() - - def read(self, size=0): - return '' - - def close(self): - pass - - def write(self, data): - return len(data) - - class DecompressMemMapReader(LazyMixin): """Reads data in chunks from a memory map and decompresses it. The client sees only the uncompressed data, respective file-like read calls are handling on-demand @@ -113,6 +98,8 @@ def _parse_header_info(self): return type, size + #{ Interface + @classmethod def new(self, m, close_on_deletion=False): """Create a new DecompressMemMapReader instance for acting as a read-only stream @@ -125,6 +112,10 @@ def new(self, m, close_on_deletion=False): type, size = inst._parse_header_info() return type, size, inst + def data(self): + """:return: random access compatible data we are working on""" + return self._m + def compressed_bytes_read(self): """:return: number of compressed bytes read. This includes the bytes it took to decompress the header ( if there was one )""" @@ -171,6 +162,8 @@ def compressed_bytes_read(self): # from the count already return self._cbr + #} END interface + def seek(self, offset, whence=os.SEEK_SET): """Allows to reset the stream to restart reading :raise ValueError: If offset and whence are not 0""" @@ -567,4 +560,32 @@ def close(self): #} END stream interface +class FDStream(object): + """Simple wrapper around a file descriptor""" + __slots__ = "_fd" + def __init__(self, fd): + self._fd = fd + + def write(self, data): + return write(self._fd, data) + + def close(self): + close(self._fd) + + + +class NullStream(object): + """A stream that does nothing but providing a stream interface. + Use it like /dev/null""" + __slots__ = tuple() + + def read(self, size=0): + return '' + + def close(self): + pass + + def write(self, data): + return len(data) + #} END W streams diff --git a/test/db/test_mem.py b/test/db/test_mem.py index 9e7c1190e..4a9b7ee12 100644 --- a/test/db/test_mem.py +++ b/test/db/test_mem.py @@ -1,10 +1,26 @@ from lib import * -from gitdb.db import MemoryDB +from gitdb.db import ( + MemoryDB, + LooseObjectDB + ) class TestMemoryDB(TestDBBase): - def test_writing(self): + @with_rw_directory + def test_writing(self, path): mdb = MemoryDB() # write data self._assert_object_writing_simple(mdb) + + # test stream copy + ldb = LooseObjectDB(path) + assert ldb.size() == 0 + num_streams_copied = mdb.stream_copy(mdb.sha_iter(), ldb) + assert num_streams_copied == mdb.size() + + assert ldb.size() == mdb.size() + for sha in mdb.sha_iter(): + assert ldb.has_object(sha) + assert ldb.stream(sha).read() == mdb.stream(sha).read() + # END verify objects where copied and are equal diff --git a/test/test_stream.py b/test/test_stream.py index 41f2b235a..859920719 100644 --- a/test/test_stream.py +++ b/test/test_stream.py @@ -50,7 +50,7 @@ def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): # END handle rest if isinstance(stream, DecompressMemMapReader): - assert len(stream._m) == stream.compressed_bytes_read() + assert len(stream.data()) == stream.compressed_bytes_read() # END handle special type rewind_stream(stream) @@ -60,7 +60,7 @@ def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): assert rdata == cdata if isinstance(stream, DecompressMemMapReader): - assert len(stream._m) == stream.compressed_bytes_read() + assert len(stream.data()) == stream.compressed_bytes_read() # END handle special type def test_decompress_reader(self): From 9e6e7d7f1f624143ef8e8fc04e55e5ca277f43ab Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 24 Jun 2010 01:09:18 +0200 Subject: [PATCH 0037/2375] Removed redunant code due to parital reimplementation of a file descriptor stream wrapper --- db/loose.py | 14 +++++++------- stream.py | 29 ++++++++++++++++++++++++----- test/lib.py | 11 ++++++----- test/test_util.py | 10 ++++++++++ util.py | 43 +++++++++++-------------------------------- 5 files changed, 58 insertions(+), 49 deletions(-) diff --git a/db/loose.py b/db/loose.py index 9bcbd6aac..f97b98a2b 100644 --- a/db/loose.py +++ b/db/loose.py @@ -174,15 +174,15 @@ def store(self, istream): write_object(istream.type, istream.size, istream.read, writer.write, chunk_size=self.stream_chunk_size) # END handle direct stream copies - except: + finally: if tmp_path: - os.remove(tmp_path) - raise - # END assure tmpfile removal on error - finally: + writer.close() + # END assure target stream is closed + except: if tmp_path: - writer.close() - # END assure target stream is closed + os.remove(tmp_path) + raise + # END assure tmpfile removal on error hexsha = None if istream.sha: diff --git a/stream.py b/stream.py index 57a5a194f..3f5d0373a 100644 --- a/stream.py +++ b/stream.py @@ -560,19 +560,38 @@ def close(self): #} END stream interface + class FDStream(object): - """Simple wrapper around a file descriptor""" - __slots__ = "_fd" + """A simple wrapper providing the most basic functions on a file descriptor + with the fileobject interface. Cannot use os.fdopen as the resulting stream + takes ownership""" + __slots__ = ("_fd", '_pos') def __init__(self, fd): self._fd = fd + self._pos = 0 def write(self, data): - return write(self._fd, data) + self._pos += len(data) + os.write(self._fd, data) + + def read(self, count=0): + if count == 0: + count = os.path.getsize(self._filepath) + # END handle read everything + + bytes = os.read(self._fd, count) + self._pos += len(bytes) + return bytes + + def fileno(self): + return self._fd + + def tell(self): + return self._pos def close(self): close(self._fd) - - + class NullStream(object): """A stream that does nothing but providing a stream interface. diff --git a/test/lib.py b/test/lib.py index 78817fea9..742aa7f5c 100644 --- a/test/lib.py +++ b/test/lib.py @@ -38,11 +38,12 @@ def wrapper(self): path = tempfile.mktemp(prefix=func.__name__) os.mkdir(path) try: - return func(self, path) - except Exception: - print >> sys.stderr, "Test %s.%s failed, output is at %r" % (type(self).__name__, func.__name__, path) - raise - else: + try: + return func(self, path) + except Exception: + print >> sys.stderr, "Test %s.%s failed, output is at %r" % (type(self).__name__, func.__name__, path) + raise + finally: shutil.rmtree(path) # END handle exception # END wrapper diff --git a/test/test_util.py b/test/test_util.py index 2272b53e5..6a389d27c 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -88,4 +88,14 @@ def test_lockedfd(self): finally: os.remove(my_file) # END final cleanup + + # try non-existing file for reading + lfd = LockedFD(tempfile.mktemp()) + try: + lfd.open(write=False) + except OSError: + assert not os.path.exists(lfd._lockfilepath()) + else: + self.fail("expected OSError") + # END handle exceptions diff --git a/util.py b/util.py index aa6db4088..9d1a96900 100644 --- a/util.py +++ b/util.py @@ -161,35 +161,6 @@ def _set_cache_(self, attr): in the single attribute.""" pass - -class FDStreamWrapper(object): - """A simple wrapper providing the most basic functions on a file descriptor - with the fileobject interface. Cannot use os.fdopen as the resulting stream - takes ownership""" - __slots__ = ("_fd", '_pos') - def __init__(self, fd): - self._fd = fd - self._pos = 0 - - def write(self, data): - self._pos += len(data) - os.write(self._fd, data) - - def read(self, count=0): - if count == 0: - count = os.path.getsize(self._filepath) - # END handle read everything - - bytes = os.read(self._fd, count) - self._pos += len(bytes) - return bytes - - def fileno(self): - return self._fd - - def tell(self): - return self._pos - class LockedFD(object): """This class facilitates a safe read and write operation to a file on disk. @@ -240,7 +211,7 @@ def open(self, write=False, stream=False): binary = getattr(os, 'O_BINARY', 0) lockmode = os.O_WRONLY | os.O_CREAT | os.O_EXCL | binary try: - fd = os.open(self._lockfilepath(), lockmode) + fd = os.open(self._lockfilepath(), lockmode, 0600) if not write: os.close(fd) else: @@ -253,11 +224,19 @@ def open(self, write=False, stream=False): # open actual file if required if self._fd is None: # we could specify exlusive here, as we obtained the lock anyway - self._fd = os.open(self._filepath, os.O_RDONLY | binary) + try: + self._fd = os.open(self._filepath, os.O_RDONLY | binary) + except: + # assure we release our lockfile + os.remove(self._lockfilepath()) + raise + # END handle lockfile # END open descriptor for reading if stream: - return FDStreamWrapper(self._fd) + # need delayed import + from stream import FDStream + return FDStream(self._fd) else: return self._fd # END handle stream From 09275ad268e5459c8edff2cccafd0a43947cabdb Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 24 Jun 2010 11:45:09 +0200 Subject: [PATCH 0038/2375] Index and PackFiles do not obtain a lock anymore before reading the files in question - this won't work on read-only alternate repositories anyway, and shouldn't be necessary considering a pack is immutable --- db/loose.py | 5 +++-- pack.py | 16 ++++++---------- util.py | 19 ++++++++++++++++++- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/db/loose.py b/db/loose.py index f97b98a2b..c9ea3a038 100644 --- a/db/loose.py +++ b/db/loose.py @@ -23,6 +23,7 @@ ) from gitdb.util import ( + file_contents_ro_filepath, ENOENT, to_hex_sha, hex_to_bin, @@ -100,12 +101,12 @@ def _map_loose_object(self, sha): :raise BadObject: if object could not be located""" db_path = self.db_path(self.object_path(to_hex_sha(sha))) try: - fd = os.open(db_path, os.O_RDONLY|self._fd_open_flags) + return file_contents_ro_filepath(db_path, flags=self._fd_open_flags) except OSError,e: if e.errno != ENOENT: # try again without noatime try: - fd = os.open(db_path, os.O_RDONLY) + return file_contents_ro_filepath(db_path) except OSError: raise BadObject(to_hex_sha(sha)) # didn't work because of our flag, don't try it again diff --git a/pack.py b/pack.py index d6fe56823..c66d6717e 100644 --- a/pack.py +++ b/pack.py @@ -5,10 +5,9 @@ ) from util import ( zlib, - LockedFD, LazyMixin, unpack_from, - file_contents_ro, + file_contents_ro_filepath, ) from fun import ( @@ -140,10 +139,10 @@ def _set_cache_(self, attr): elif attr == "_packfile_checksum": self._packfile_checksum = self._data[-20:] elif attr == "_data": - lfd = LockedFD(self._indexpath) - fd = lfd.open() - self._data = file_contents_ro(fd) - lfd.rollback() + # Note: We don't lock the file when reading as we cannot be sure + # that we can actually write to the location - it could be a read-only + # alternate for instance + self._data = file_contents_ro_filepath(self._indexpath) else: # now its time to initialize everything - if we are here, someone wants # to access the fanout table or related properties @@ -337,10 +336,7 @@ def __init__(self, packpath): def _set_cache_(self, attr): if attr == '_data': - ldb = LockedFD(self._packpath) - fd = ldb.open() - self._data = file_contents_ro(fd) - ldb.rollback() + self._data = file_contents_ro_filepath(self._packpath) # read the header information type_id, self._version, self._size = unpack_from(">4sLL", self._data, 0) diff --git a/util.py b/util.py index 9d1a96900..f0bf3e60f 100644 --- a/util.py +++ b/util.py @@ -114,7 +114,24 @@ def file_contents_ro(fd, stream=False, allow_mmap=True): if stream: return cStringIO.StringIO(contents) return contents - + +def file_contents_ro_filepath(filepath, stream=False, allow_mmap=True, flags=0): + """Get the file contents at filepath as fast as possible + :return: random access compatible memory of the given filepath + :param stream: see ``file_contents_ro`` + :param allow_mmap: see ``file_contents_ro`` + :param flags: additional flags to pass to os.open + :raise OSError: If the file could not be opened + :note: for now we don't try to use O_NOATIME directly as the right value needs to be + shared per database in fact. It only makes a real difference for loose object + databases anyway, and they use it with the help of the ``flags`` parameter""" + fd = os.open(filepath, os.O_RDONLY|flags) + try: + return file_contents_ro(fd, stream, allow_mmap) + finally: + close(fd) + # END assure file is closed + def to_hex_sha(sha): """:return: hexified version of sha""" if len(sha) == 40: From d3a0037dd5a11459985e7dc4b6819f6292f20c13 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 24 Jun 2010 15:28:22 +0200 Subject: [PATCH 0039/2375] Fixed critical issues with incorrect permissions set on files the db has written - it was only rw-- for the user that wrote them, but should be readable by everyone by default --- db/loose.py | 5 +++++ util.py | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/db/loose.py b/db/loose.py index c9ea3a038..a91f0d9d3 100644 --- a/db/loose.py +++ b/db/loose.py @@ -28,6 +28,7 @@ to_hex_sha, hex_to_bin, exists, + chmod, isdir, mkdir, rename, @@ -199,6 +200,10 @@ def store(self, istream): mkdir(obj_dir) # END handle destination directory rename(tmp_path, obj_path) + + # make sure its readable for all ! It started out as rw-- tmp file + # but needs to be rrr + chmod(obj_path, 0444) # END handle dry_run istream.sha = hexsha diff --git a/util.py b/util.py index f0bf3e60f..2d9838379 100644 --- a/util.py +++ b/util.py @@ -54,6 +54,7 @@ def unpack_from(fmt, data, offset=0): # os shortcuts exists = os.path.exists mkdir = os.mkdir +chmod = os.chmod isdir = os.path.isdir rename = os.rename dirname = os.path.dirname @@ -291,6 +292,9 @@ def _end_writing(self, successful=True): # END remove if exists # END win32 special handling os.rename(lockfile, self._filepath) + + # assure others can at least read the file - the tmpfile left it at rw-- + chmod(self._filepath, 0444) else: # just delete the file so far, we failed os.remove(lockfile) From e3d5ad195d9dfa46af3d931f9769e965e337daf7 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 25 Jun 2010 15:29:50 +0200 Subject: [PATCH 0040/2375] CompoundDB: implemented simple dict base first-level cache which really helps to improve performance in real-world applications, which need to quickly determine whether objects are in or out for instance, as it happens during index_to_tree conversion Added separate pack streaming test which shows only a throughput of 250 streams / s in a densely packed pack, and about 3.5 MiB of data throughput. Performance tests show that half the time is spent in collecting the numerous deltas, the other one in decompressing and applying them Fixed broken performance tests --- db/base.py | 14 ++++++++++- db/git.py | 5 ++-- db/pack.py | 2 +- db/ref.py | 4 ++- exc.py | 7 +++++- test/performance/test_pack.py | 6 +++-- test/performance/test_pack_streaming.py | 33 +++++++++++++++++++++++++ test/performance/test_stream.py | 1 + 8 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 test/performance/test_pack_streaming.py diff --git a/db/base.py b/db/base.py index 35c20b7e1..0e81f0364 100644 --- a/db/base.py +++ b/db/base.py @@ -183,10 +183,13 @@ class CompoundDB(ObjectDBR, LazyMixin, CachingDB): Databases are stored in the lazy-loaded _dbs attribute. Define _set_cache_ to update it with your databases""" - def _set_cache_(self, attr): if attr == '_dbs': self._dbs = list() + elif attr == '_db_cache': + self._db_cache = dict() + else: + super(CompoundDB, self)._set_cache_(attr) def _db_query(self, sha): """:return: database containing the given 20 or 40 byte sha @@ -194,8 +197,15 @@ def _db_query(self, sha): # most databases use binary representations, prevent converting # it everytime a database is being queried sha = to_bin_sha(sha) + try: + return self._db_cache[sha] + except KeyError: + pass + # END first level cache + for db in self._dbs: if db.has_object(sha): + self._db_cache[sha] = db return db # END for each database raise BadObject(sha) @@ -232,6 +242,8 @@ def databases(self): return tuple(self._dbs) def update_cache(self, force=False): + # something might have changed, clear everything + self._db_cache.clear() stat = False for db in self._dbs: if isinstance(db, CachingDB): diff --git a/db/git.py b/db/git.py index ad9a613b3..a9298df05 100644 --- a/db/git.py +++ b/db/git.py @@ -57,8 +57,9 @@ def _set_cache_(self, attr): # finally set the value self._loose_db = loose_db - - # END handle dbs + else: + super(GitDB, self)._set_cache_(attr) + # END handle attrs #{ ObjectDBW interface diff --git a/db/pack.py b/db/pack.py index af6f7ffd6..a78c4a8a0 100644 --- a/db/pack.py +++ b/db/pack.py @@ -46,7 +46,7 @@ def __init__(self, root_path): def _set_cache_(self, attr): if attr == '_entities': self._entities = list() - self.update_cache() + self.update_cache(force=True) # END handle entities initialization def _sort_entities(self): diff --git a/db/ref.py b/db/ref.py index 3a4813979..c149c03d0 100644 --- a/db/ref.py +++ b/db/ref.py @@ -21,7 +21,9 @@ def _set_cache_(self, attr): if attr == '_dbs': self._dbs = list() self._update_dbs_from_ref_file() - # END handle dbs + else: + super(ReferenceDB, self)._set_cache_(attr) + # END handle attrs def _update_dbs_from_ref_file(self): dbcls = self.ObjectDBCls diff --git a/exc.py b/exc.py index 482726e3b..037ac3855 100644 --- a/exc.py +++ b/exc.py @@ -1,4 +1,5 @@ """Module with common exceptions""" +from util import to_hex_sha class ODBError(Exception): """All errors thrown by the object database""" @@ -7,7 +8,11 @@ class InvalidDBRoot(ODBError): """Thrown if an object database cannot be initialized at the given path""" class BadObject(ODBError): - """The object with the given SHA does not exist""" + """The object with the given SHA does not exist. Instantiate with the + failed sha""" + + def __str__(self): + return "BadObject: %s" % to_hex_sha(self.args[0]) class BadObjectType(ODBError): """The object had an unsupported type""" diff --git a/test/performance/test_pack.py b/test/performance/test_pack.py index 8046c1f83..66101a35f 100644 --- a/test/performance/test_pack.py +++ b/test/performance/test_pack.py @@ -72,8 +72,10 @@ def test_pack_random_access(self): total_kib = total_size / 1000 print >> sys.stderr, "PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (max_items, total_kib, total_kib/elapsed , elapsed, max_items / elapsed) - - print >> sys.stderr, "Endurance run: verify streaming of %i objects (crc and sha)" % ns + def _disabled_test_correctness(self): + pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) + # disabled for now as it used to work perfectly, checking big repositories takes a long time + print >> sys.stderr, "Endurance run: verify streaming of objects (crc and sha)" for crc in range(2): count = 0 st = time() diff --git a/test/performance/test_pack_streaming.py b/test/performance/test_pack_streaming.py new file mode 100644 index 000000000..4d47cdfcc --- /dev/null +++ b/test/performance/test_pack_streaming.py @@ -0,0 +1,33 @@ +"""Specific test for pack streams only""" +from lib import ( + TestBigRepoR + ) + +from gitdb.db.pack import PackedDB + +import os +import sys +from time import time + +class TestPackStreamingPerformance(TestBigRepoR): + + def test_stream_reading(self): + pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) + + # streaming only, meant for --with-profile runs + ni = 5000 + count = 0 + pdb_stream = pdb.stream + total_size = 0 + st = time() + for sha in pdb.sha_iter(): + if count == ni: + break + stream = pdb_stream(sha) + stream.read() + total_size += stream.size + count += 1 + elapsed = time() - st + total_kib = total_size / 1000 + print >> sys.stderr, "PDB Streaming: Got %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (ni, total_kib, total_kib/elapsed , elapsed, ni / elapsed) + diff --git a/test/performance/test_stream.py b/test/performance/test_stream.py index 5de463ee2..79fa9bc09 100644 --- a/test/performance/test_stream.py +++ b/test/performance/test_stream.py @@ -1,6 +1,7 @@ """Performance data streaming performance""" from lib import TestBigRepoR from gitdb.db import * +from gitdb.base import * from gitdb.stream import * from gitdb.util import pool from gitdb.typ import str_blob_type From 9e313a4773c97425d5c52be34ee21cbe405ddb84 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 25 Jun 2010 16:39:25 +0200 Subject: [PATCH 0041/2375] gitdb now uses 20 byte shas internally only, reducing the need to convert shas around all the time, saving previous function calls, and memory after all --- base.py | 43 ++++++++++++++------------------- db/base.py | 17 ++++++------- db/loose.py | 18 +++++++------- db/mem.py | 6 ++--- db/pack.py | 6 +---- test/db/lib.py | 28 ++++++++++----------- test/db/test_git.py | 3 ++- test/db/test_ref.py | 15 +++++++----- test/performance/test_pack.py | 2 +- test/performance/test_stream.py | 13 ++++++---- test/test_base.py | 12 ++++----- test/test_pack.py | 14 +++++------ util.py | 1 + 13 files changed, 85 insertions(+), 93 deletions(-) diff --git a/base.py b/base.py index 0f4e63176..938a09242 100644 --- a/base.py +++ b/base.py @@ -1,7 +1,6 @@ """Module with basic data structures - they are designed to be lightweight and fast""" from util import ( - to_hex_sha, - to_bin_sha, + bin_to_hex, zlib ) @@ -17,13 +16,13 @@ #{ ODB Bases class OInfo(tuple): - """Carries information about an object in an ODB, provdiing information - about the sha of the object, the type_string as well as the uncompressed size + """Carries information about an object in an ODB, provding information + about the binary sha of the object, the type_string as well as the uncompressed size in bytes. It can be accessed using tuple notation and using attribute access notation:: - assert dbi[0] == dbi.sha + assert dbi[0] == dbi.binsha assert dbi[1] == dbi.type assert dbi[2] == dbi.size @@ -38,18 +37,14 @@ def __init__(self, *args): #{ Interface @property - def sha(self): + def binsha(self): + """:return: our sha as binary, 20 bytes""" return self[0] - + @property def hexsha(self): """:return: our sha, hex encoded, 40 bytes""" - return to_hex_sha(self[0]) - - @property - def binsha(self): - """:return: our sha as binary, 20 bytes""" - return to_bin_sha(self[0]) + return bin_to_hex(self[0]) @property def type(self): @@ -197,16 +192,10 @@ def __init__(self, type, size, stream, sha=None): list.__init__(self, (sha, type, size, stream, None)) #{ Interface - @property def hexsha(self): """:return: our sha, hex encoded, 40 bytes""" - return to_hex_sha(self[0]) - - @property - def binsha(self): - """:return: our sha as binary, 20 bytes""" - return to_bin_sha(self[0]) + return bin_to_hex(self[0]) def _error(self): """:return: the error that occurred when processing the stream, or None""" @@ -231,13 +220,13 @@ def read(self, size=-1): #{ interface - def _set_sha(self, sha): - self[0] = sha + def _set_binsha(self, binsha): + self[0] = binsha - def _sha(self): + def _binsha(self): return self[0] - sha = property(_sha, _set_sha) + binsha = property(_binsha, _set_binsha) def _type(self): @@ -280,9 +269,13 @@ def __init__(self, sha, exc): tuple.__init__(self, (sha, exc)) @property - def sha(self): + def binsha(self): return self[0] + @property + def hexsha(self): + return bin_to_hex(self[0]) + @property def error(self): """:return: exception instance explaining the failure""" diff --git a/db/base.py b/db/base.py index 0e81f0364..c687166f7 100644 --- a/db/base.py +++ b/db/base.py @@ -2,8 +2,7 @@ from gitdb.util import ( pool, join, - LazyMixin, - to_bin_sha + LazyMixin ) from gitdb.exc import BadObject @@ -20,8 +19,7 @@ class ObjectDBR(object): """Defines an interface for object database lookup. - Objects are identified either by hex-sha (40 bytes) or - by sha (20 bytes)""" + Objects are identified either by their 20 byte bin sha""" def __contains__(self, sha): return self.has_obj @@ -29,14 +27,14 @@ def __contains__(self, sha): #{ Query Interface def has_object(self, sha): """ - :return: True if the object identified by the given 40 byte hexsha or 20 bytes + :return: True if the object identified by the given 20 bytes binary sha is contained in the database""" raise NotImplementedError("To be implemented in subclass") def has_object_async(self, reader): """Return a reader yielding information about the membership of objects as identified by shas - :param reader: Reader yielding 20 byte or 40 byte shas. + :param reader: Reader yielding 20 byte shas. :return: async.Reader yielding tuples of (sha, bool) pairs which indicate whether the given sha exists in the database or not""" task = ChannelThreadTask(reader, str(self.has_object_async), lambda sha: (sha, self.has_object(sha))) @@ -44,7 +42,7 @@ def has_object_async(self, reader): def info(self, sha): """ :return: OInfo instance - :param sha: 40 bytes hexsha or 20 bytes binary sha + :param sha: bytes binary sha :raise BadObject:""" raise NotImplementedError("To be implemented in subclass") @@ -57,7 +55,7 @@ def info_async(self, reader): def stream(self, sha): """:return: OStream instance - :param sha: 40 bytes hexsha or 20 bytes binary sha + :param sha: 20 bytes binary sha :raise BadObject:""" raise NotImplementedError("To be implemented in subclass") @@ -192,11 +190,10 @@ def _set_cache_(self, attr): super(CompoundDB, self)._set_cache_(attr) def _db_query(self, sha): - """:return: database containing the given 20 or 40 byte sha + """:return: database containing the given 20 byte sha :raise BadObject:""" # most databases use binary representations, prevent converting # it everytime a database is being queried - sha = to_bin_sha(sha) try: return self._db_cache[sha] except KeyError: diff --git a/db/loose.py b/db/loose.py index a91f0d9d3..7afc5bf1b 100644 --- a/db/loose.py +++ b/db/loose.py @@ -25,8 +25,8 @@ from gitdb.util import ( file_contents_ro_filepath, ENOENT, - to_hex_sha, hex_to_bin, + bin_to_hex, exists, chmod, isdir, @@ -100,7 +100,7 @@ def _map_loose_object(self, sha): """ :return: memory map of that file to allow random read access :raise BadObject: if object could not be located""" - db_path = self.db_path(self.object_path(to_hex_sha(sha))) + db_path = self.db_path(self.object_path(bin_to_hex(sha))) try: return file_contents_ro_filepath(db_path, flags=self._fd_open_flags) except OSError,e: @@ -109,11 +109,11 @@ def _map_loose_object(self, sha): try: return file_contents_ro_filepath(db_path) except OSError: - raise BadObject(to_hex_sha(sha)) + raise BadObject(sha) # didn't work because of our flag, don't try it again self._fd_open_flags = 0 else: - raise BadObject(to_hex_sha(sha)) + raise BadObject(sha) # END handle error # END exception handling try: @@ -144,7 +144,7 @@ def stream(self, sha): def has_object(self, sha): try: - self.readable_db_object_path(to_hex_sha(sha)) + self.readable_db_object_path(bin_to_hex(sha)) return True except BadObject: return False @@ -158,7 +158,7 @@ def store(self, istream): # open a tmp file to write the data to fd, tmp_path = tempfile.mkstemp(prefix='obj', dir=self._root_path) - if istream.sha is None: + if istream.binsha is None: writer = FDCompressedSha1Writer(fd) else: writer = FDStream(fd) @@ -167,7 +167,7 @@ def store(self, istream): try: try: - if istream.sha is not None: + if istream.binsha is not None: # copy as much as possible, the actual uncompressed item size might # be smaller than the compressed version stream_copy(istream.read, writer.write, sys.maxint, self.stream_chunk_size) @@ -187,7 +187,7 @@ def store(self, istream): # END assure tmpfile removal on error hexsha = None - if istream.sha: + if istream.binsha: hexsha = istream.hexsha else: hexsha = writer.sha(as_hex=True) @@ -206,7 +206,7 @@ def store(self, istream): chmod(obj_path, 0444) # END handle dry_run - istream.sha = hexsha + istream.binsha = hex_to_bin(hexsha) return istream def sha_iter(self): diff --git a/db/mem.py b/db/mem.py index 9e3d3972d..f361ab801 100644 --- a/db/mem.py +++ b/db/mem.py @@ -10,7 +10,6 @@ IStream, ) -from gitdb.util import to_bin_sha from gitdb.exc import ( BadObject, UnsupportedOperation @@ -54,7 +53,7 @@ def store(self, istream): # don't provide a size, the stream is written in object format, hence the # header needs decompression decomp_stream = DecompressMemMapReader(zstream.getvalue(), close_on_deletion=False) - self._cache[istream.binsha] = OStream(istream.sha, istream.type, istream.size, decomp_stream) + self._cache[istream.binsha] = OStream(istream.binsha, istream.type, istream.size, decomp_stream) return istream @@ -62,14 +61,13 @@ def store_async(self, reader): raise UnsupportedOperation("MemoryDBs cannot currently be used for async write access") def has_object(self, sha): - return to_bin_sha(sha) in self._cache + return sha in self._cache def info(self, sha): # we always return streams, which are infos as well return self.stream(sha) def stream(self, sha): - sha = to_bin_sha(sha) try: ostream = self._cache[sha] # rewind stream for the next one to read diff --git a/db/pack.py b/db/pack.py index a78c4a8a0..1a1c390ea 100644 --- a/db/pack.py +++ b/db/pack.py @@ -5,10 +5,7 @@ CachingDB ) -from gitdb.util import ( - to_bin_sha, - LazyMixin - ) +from gitdb.util import LazyMixin from gitdb.exc import ( BadObject, @@ -65,7 +62,6 @@ def _pack_info(self, sha): self._sort_entities() # END update sorting - sha = to_bin_sha(sha) for item in self._entities: index = item[2](sha) if index is not None: diff --git a/test/db/lib.py b/test/db/lib.py index b22f9a2b8..0080d919e 100644 --- a/test/db/lib.py +++ b/test/db/lib.py @@ -41,15 +41,15 @@ def _assert_object_writing_simple(self, db): istream = IStream(str_blob_type, len(data), StringIO(data)) new_istream = db.store(istream) assert new_istream is istream - assert db.has_object(istream.sha) + assert db.has_object(istream.binsha) - info = db.info(istream.sha) + info = db.info(istream.binsha) assert isinstance(info, OInfo) assert info.type == istream.type and info.size == istream.size - stream = db.stream(istream.sha) + stream = db.stream(istream.binsha) assert isinstance(stream, OStream) - assert stream.sha == info.sha and stream.type == info.type + assert stream.binsha == info.binsha and stream.type == info.type assert stream.read() == data # END for each item @@ -80,10 +80,10 @@ def _assert_object_writing(self, db): # store returns same istream instance, with new sha set my_istream = db.store(istream) - sha = istream.sha + sha = istream.binsha assert my_istream is istream assert db.has_object(sha) != dry_run - assert len(sha) == 40 # for now we require 40 byte shas as default + assert len(sha) == 20 # verify data - the slow way, we want to run code if not dry_run: @@ -107,12 +107,12 @@ def _assert_object_writing(self, db): # identical to what we fed in ostream.seek(0) istream.stream = ostream - assert istream.sha is not None - prev_sha = istream.sha + assert istream.binsha is not None + prev_sha = istream.binsha db.set_ostream(ZippedStoreShaWriter()) db.store(istream) - assert istream.sha == prev_sha + assert istream.binsha == prev_sha new_ostream = db.ostream() # note: only works as long our store write uses the same compression @@ -143,12 +143,12 @@ def istream_generator(offset=0, ni=ni): for stream in istreams: assert stream.error is None - assert len(stream.sha) == 40 + assert len(stream.binsha) == 20 assert isinstance(stream, IStream) # END assert each stream # test has-object-async - we must have all previously added ones - reader = IteratorReader( istream.sha for istream in istreams ) + reader = IteratorReader( istream.binsha for istream in istreams ) hasobject_reader = db.has_object_async(reader) count = 0 for sha, has_object in hasobject_reader: @@ -158,7 +158,7 @@ def istream_generator(offset=0, ni=ni): assert count == ni # read the objects we have just written - reader = IteratorReader( istream.sha for istream in istreams ) + reader = IteratorReader( istream.binsha for istream in istreams ) ostream_reader = db.stream_async(reader) # read items individually to prevent hitting possible sys-limits @@ -171,7 +171,7 @@ def istream_generator(offset=0, ni=ni): assert count == ni # get info about our items - reader = IteratorReader( istream.sha for istream in istreams ) + reader = IteratorReader( istream.binsha for istream in istreams ) info_reader = db.info_async(reader) count = 0 @@ -186,7 +186,7 @@ def istream_generator(offset=0, ni=ni): # add 2500 items, and obtain their output streams nni = 2500 reader = IteratorReader(istream_generator(offset=ni, ni=nni)) - istream_to_sha = lambda istreams: [ istream.sha for istream in istreams ] + istream_to_sha = lambda istreams: [ istream.binsha for istream in istreams ] istream_reader = db.store_async(reader) istream_reader.set_post_cb(istream_to_sha) diff --git a/test/db/test_git.py b/test/db/test_git.py index 4d463f1f7..779e3f15e 100644 --- a/test/db/test_git.py +++ b/test/db/test_git.py @@ -1,6 +1,7 @@ from lib import * from gitdb.db import GitDB from gitdb.base import OStream, OInfo +from gitdb.util import hex_to_bin class TestGitDB(TestDBBase): @@ -11,7 +12,7 @@ def test_reading(self): assert 1 < len(gdb.databases()) < 4 # access should be possible - gitdb_sha = "5690fd0d3304f378754b23b098bd7cb5f4aa1976" + gitdb_sha = hex_to_bin("5690fd0d3304f378754b23b098bd7cb5f4aa1976") assert isinstance(gdb.info(gitdb_sha), OInfo) assert isinstance(gdb.stream(gitdb_sha), OStream) assert gdb.size() > 200 diff --git a/test/db/test_ref.py b/test/db/test_ref.py index 68d9b8116..9df25cef6 100644 --- a/test/db/test_ref.py +++ b/test/db/test_ref.py @@ -1,6 +1,11 @@ from lib import * from gitdb.db import ReferenceDB - + +from gitdb.util import ( + NULL_BIN_SHA, + hex_to_bin + ) + import os class TestReferenceDB(TestDBBase): @@ -15,8 +20,7 @@ def make_alt_file(self, alt_path, alt_list): @with_rw_directory def test_writing(self, path): - null_sha_bin = '\0' * 20 - null_sha_hex = "0" * 40 + NULL_BIN_SHA = '\0' * 20 alt_path = os.path.join(path, 'alternates') rdb = ReferenceDB(alt_path) @@ -25,8 +29,7 @@ def test_writing(self, path): assert len(list(rdb.sha_iter())) == 0 # try empty, non-existing - assert not rdb.has_object(null_sha_hex) - assert not rdb.has_object(null_sha_bin) + assert not rdb.has_object(NULL_BIN_SHA) # setup alternate file @@ -37,7 +40,7 @@ def test_writing(self, path): assert len(rdb.databases()) == 1 # we should now find a default revision of ours - gitdb_sha = "5690fd0d3304f378754b23b098bd7cb5f4aa1976" + gitdb_sha = hex_to_bin("5690fd0d3304f378754b23b098bd7cb5f4aa1976") assert rdb.has_object(gitdb_sha) # remove valid diff --git a/test/performance/test_pack.py b/test/performance/test_pack.py index 66101a35f..af468b0be 100644 --- a/test/performance/test_pack.py +++ b/test/performance/test_pack.py @@ -56,7 +56,7 @@ def test_pack_random_access(self): for sha in sha_list[:max_items]: pdb_fun(sha) elapsed = time() - st - print >> sys.stderr, "PDB: Obtained %i object %s by sha in %f s ( %f info/s )" % (max_items, pdb_fun.__name__.upper(), elapsed, max_items / elapsed) + print >> sys.stderr, "PDB: Obtained %i object %s by sha in %f s ( %f items/s )" % (max_items, pdb_fun.__name__.upper(), elapsed, max_items / elapsed) # END for each function # retrieve stream and read all diff --git a/test/performance/test_stream.py b/test/performance/test_stream.py index 79fa9bc09..1afc1a1a0 100644 --- a/test/performance/test_stream.py +++ b/test/performance/test_stream.py @@ -3,7 +3,10 @@ from gitdb.db import * from gitdb.base import * from gitdb.stream import * -from gitdb.util import pool +from gitdb.util import ( + pool, + bin_to_hex + ) from gitdb.typ import str_blob_type from gitdb.fun import chunk_size @@ -73,10 +76,10 @@ def test_large_data_streaming(self, path): # writing - due to the compression it will seem faster than it is st = time() - sha = ldb.store(IStream('blob', size, stream)).sha + sha = ldb.store(IStream('blob', size, stream)).binsha elapsed_add = time() - st assert ldb.has_object(sha) - db_file = ldb.readable_db_object_path(sha) + db_file = ldb.readable_db_object_path(bin_to_hex(sha)) fsize_kib = os.path.getsize(db_file) / 1000 @@ -151,7 +154,7 @@ def istream_iter(): # chunk size is not important as the stream will not really be decompressed # until its read - istream_reader = IteratorReader(iter([ i.sha for i in istreams ])) + istream_reader = IteratorReader(iter([ i.binsha for i in istreams ])) ostream_reader = ldb.stream_async(istream_reader) chunk_task = TestStreamReader(ostream_reader, "chunker", None) @@ -172,7 +175,7 @@ def istream_iter(): istream_reader = ldb.store_async(reader) istream_reader.task().max_chunksize = 1 - istream_to_sha = lambda items: [ i.sha for i in items ] + istream_to_sha = lambda items: [ i.binsha for i in items ] istream_reader.set_post_cb(istream_to_sha) ostream_reader = ldb.stream_async(istream_reader) diff --git a/test/test_base.py b/test/test_base.py index 8d8bcc944..740e50bcd 100644 --- a/test/test_base.py +++ b/test/test_base.py @@ -7,7 +7,7 @@ from gitdb import * from gitdb.util import ( - NULL_HEX_SHA + NULL_BIN_SHA ) from gitdb.typ import ( @@ -19,12 +19,12 @@ class TestBaseTypes(TestBase): def test_streams(self): # test info - sha = NULL_HEX_SHA + sha = NULL_BIN_SHA s = 20 blob_id = 3 info = OInfo(sha, str_blob_type, s) - assert info.sha == sha + assert info.binsha == sha assert info.type == str_blob_type assert info.type_id == blob_id assert info.size == s @@ -72,9 +72,9 @@ def test_streams(self): # test istream istream = IStream(str_blob_type, s, stream) - assert istream.sha == None - istream.sha = sha - assert istream.sha == sha + assert istream.binsha == None + istream.binsha = sha + assert istream.binsha == sha assert len(istream.binsha) == 20 assert len(istream.hexsha) == 40 diff --git a/test/test_pack.py b/test/test_pack.py index 6821097ad..eaa2d38eb 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -134,8 +134,8 @@ def test_pack_entity(self): count = 0 for info, stream in izip(entity.info_iter(), entity.stream_iter()): count += 1 - assert info.sha == stream.sha - assert len(info.sha) == 20 + assert info.binsha == stream.binsha + assert len(info.binsha) == 20 assert info.type_id == stream.type_id assert info.size == stream.size @@ -143,17 +143,17 @@ def test_pack_entity(self): assert not info.type_id in delta_types # try all calls - assert len(entity.collect_streams(info.sha)) - assert isinstance(entity.info(info.sha), OInfo) - assert isinstance(entity.stream(info.sha), OStream) + assert len(entity.collect_streams(info.binsha)) + assert isinstance(entity.info(info.binsha), OInfo) + assert isinstance(entity.stream(info.binsha), OStream) # verify the stream try: - assert entity.is_valid_stream(info.sha, use_crc=True) + assert entity.is_valid_stream(info.binsha, use_crc=True) except UnsupportedOperation: pass # END ignore version issues - assert entity.is_valid_stream(info.sha, use_crc=False) + assert entity.is_valid_stream(info.binsha, use_crc=False) # END for each info, stream tuple assert count == size diff --git a/util.py b/util.py index 2d9838379..4d6f5b1e2 100644 --- a/util.py +++ b/util.py @@ -66,6 +66,7 @@ def unpack_from(fmt, data, offset=0): # constants NULL_HEX_SHA = "0"*40 +NULL_BIN_SHA = "\0"*20 #} END Aliases From c265c97f9130d2225b923b427736796c0a0d957c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 29 Jun 2010 10:56:50 +0200 Subject: [PATCH 0042/2375] Fixed critical bug that could cause single bytes not to be returned in reads that should read all --- stream.py | 4 +--- .../7b/b839852ed5e3a069966281bb08d50012fb309b | Bin 0 -> 446 bytes test/test_stream.py | 15 ++++++++++++--- util.py | 3 ++- 4 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 test/fixtures/objects/7b/b839852ed5e3a069966281bb08d50012fb309b diff --git a/stream.py b/stream.py index 3f5d0373a..010102bdd 100644 --- a/stream.py +++ b/stream.py @@ -249,9 +249,7 @@ def read(self, size=-1): # get the actual window end to be sure we don't use it for computations self._cwe = self._cws + len(indata) - dcompdat = self._zip.decompress(indata, size) - # update the amount of compressed bytes read # We feed possibly overlapping chunks, which is why the unconsumed tail # has to be taken into consideration, as well as the unused data @@ -269,7 +267,7 @@ def read(self, size=-1): # Note: dcompdat can be empty even though we still appear to have bytes # to read, if we are called by compressed_bytes_read - it manipulates # us to empty the stream - if dcompdat and len(dcompdat) < size and self._br < self._s: + if dcompdat and (len(dcompdat) - len(dat)) < size and self._br < self._s: dcompdat += self.read(size-len(dcompdat)) # END handle special case return dcompdat diff --git a/test/fixtures/objects/7b/b839852ed5e3a069966281bb08d50012fb309b b/test/fixtures/objects/7b/b839852ed5e3a069966281bb08d50012fb309b new file mode 100644 index 0000000000000000000000000000000000000000..021c2db3456031e1d2ab0bf73701fd07e1c3f18e GIT binary patch literal 446 zcmV;v0YUzF0V^p=O;s>8GGZ_^FfcPQQP4}zEJ-XWDauSLElDkA*k$BmEOsS@@9cup z94Ax`K0BwU`xdG)kwHqqdSOS!%y&8Fc7K0ZetX8c%q|BenU%5@~ z(-?H(E^K=G^sI4tWL0NrNXl|<-X9uJ$(;P;_{5YH25$lN^J%6=Iy|xceG!-L+2w=@ zF(E0*%}-&FY^mnnsdq=;+uk^0*18Z;q%))7P|&5i(pk;rewb_Um*b^Tbx?LaCci_=A6&R?hE*8 ztJ*Xl-{zzfCJ8maG_NQ%C$S_oB_0%@@wthac?_w(_A_#sd|uhiWEPKR`LO@V34K`5 opeZk|%uB|nyow>rIet2~&OwIvJHJh8HJG&J%aR?}0KQhvi8Wi_>i_@% literal 0 HcmV?d00001 diff --git a/test/test_stream.py b/test/test_stream.py index 859920719..dd65a1782 100644 --- a/test/test_stream.py +++ b/test/test_stream.py @@ -4,12 +4,14 @@ DummyStream, Sha1Writer, make_bytes, - make_object + make_object, + fixture_path ) from gitdb import * from gitdb.util import ( - NULL_HEX_SHA + NULL_HEX_SHA, + hex_to_bin ) from gitdb.util import zlib @@ -135,4 +137,11 @@ def test_compressed_writer(self): os.remove(path) # END for each os - + def test_decompress_reader_special_case(self): + odb = LooseObjectDB(fixture_path('objects')) + ostream = odb.stream(hex_to_bin('7bb839852ed5e3a069966281bb08d50012fb309b')) + + # if there is a bug, we will be missing one byte exactly ! + data = ostream.read() + assert len(data) == ostream.size + diff --git a/util.py b/util.py index 4d6f5b1e2..b55f789c0 100644 --- a/util.py +++ b/util.py @@ -56,6 +56,7 @@ def unpack_from(fmt, data, offset=0): mkdir = os.mkdir chmod = os.chmod isdir = os.path.isdir +isfile = os.path.isfile rename = os.rename dirname = os.path.dirname basename = os.path.basename @@ -288,7 +289,7 @@ def _end_writing(self, successful=True): if self._write and successful: # on windows, rename does not silently overwrite the existing one if sys.platform == "win32": - if os.path.isfile(self._filepath): + if isfile(self._filepath): os.remove(self._filepath) # END remove if exists # END win32 special handling From 155b62a9af0aa7677078331e111d0f7aa6eb4afc Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 30 Jun 2010 00:05:38 +0200 Subject: [PATCH 0043/2375] Added empty version of gitdb documentation --- doc/Makefile | 89 ++++++++++++++++++++ doc/source/conf.py | 194 +++++++++++++++++++++++++++++++++++++++++++ doc/source/index.rst | 20 +++++ 3 files changed, 303 insertions(+) create mode 100644 doc/Makefile create mode 100644 doc/source/conf.py create mode 100644 doc/source/index.rst diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 000000000..b10926ae2 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,89 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/GitDB.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/GitDB.qhc" + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ + "run these through (pdf)latex." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/doc/source/conf.py b/doc/source/conf.py new file mode 100644 index 000000000..58b8791a1 --- /dev/null +++ b/doc/source/conf.py @@ -0,0 +1,194 @@ +# -*- coding: utf-8 -*- +# +# GitDB documentation build configuration file, created by +# sphinx-quickstart on Wed Jun 30 00:01:32 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('.')) + +# -- 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'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['.templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'GitDB' +copyright = u'2010, Sebastian Thiel' + +# 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 = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0.0' + +# 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 = [] + +# List of directories, relative to source directory, that shouldn't be searched +# for source files. +exclude_trees = [] + +# 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 = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# 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 = None + +# 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 = True + +# 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 = True + +# 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 = 'GitDBdoc' + + +# -- 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', 'GitDB.tex', u'GitDB Documentation', + u'Sebastian Thiel', '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 diff --git a/doc/source/index.rst b/doc/source/index.rst new file mode 100644 index 000000000..71ead1fc3 --- /dev/null +++ b/doc/source/index.rst @@ -0,0 +1,20 @@ +.. GitDB documentation master file, created by + sphinx-quickstart on Wed Jun 30 00:01:32 2010. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to GitDB's documentation! +================================= + +Contents: + +.. toctree:: + :maxdepth: 2 + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + From 78e21e74a12f0767f6011a78349af52555ad2f74 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 30 Jun 2010 11:22:05 +0200 Subject: [PATCH 0044/2375] Added auto-doc api reference and fixed plenty of docstrings --- db/base.py | 20 +++++-- db/pack.py | 4 +- doc/.gitignore | 1 + doc/source/api.rst | 113 ++++++++++++++++++++++++++++++++++++++++ doc/source/conf.py | 2 +- doc/source/index.rst | 4 ++ doc/source/intro.rst | 4 ++ doc/source/tutorial.rst | 4 ++ fun.py | 38 +++++++++----- pack.py | 39 +++++++++----- stream.py | 14 +++-- util.py | 18 ++++--- 12 files changed, 218 insertions(+), 43 deletions(-) create mode 100644 doc/.gitignore create mode 100644 doc/source/api.rst create mode 100644 doc/source/intro.rst create mode 100644 doc/source/tutorial.rst diff --git a/db/base.py b/db/base.py index c687166f7..02584c635 100644 --- a/db/base.py +++ b/db/base.py @@ -90,7 +90,9 @@ def __init__(self, *args, **kwargs): #{ Edit Interface def set_ostream(self, stream): - """Adjusts the stream to which all data should be sent when storing new objects + """ + Adjusts the stream to which all data should be sent when storing new objects + :param stream: if not None, the stream to use, if None the default stream will be used. :return: previously installed stream, or None if there was no override @@ -100,13 +102,16 @@ def set_ostream(self, stream): return cstream def ostream(self): - """:return: overridden output stream this instance will write to, or None + """ + :return: overridden output stream this instance will write to, or None if it will write to the default stream""" return self._ostream def store(self, istream): - """Create a new object in the database + """ + Create a new object in the database :return: the input istream object with its sha set to its corresponding value + :param istream: IStream compatible instance. If its sha is already set to a value, the object will just be stored in the our database format, in which case the input stream is expected to be in object format ( header + contents ). @@ -114,16 +119,19 @@ def store(self, istream): raise NotImplementedError("To be implemented in subclass") def store_async(self, reader): - """Create multiple new objects in the database asynchronously. The method will + """ + Create multiple new objects in the database asynchronously. The method will return right away, returning an output channel which receives the results as they are computed. :return: Channel yielding your IStream which served as input, in any order. The IStreams sha will be set to the sha it received during the process, or its error attribute will be set to the exception informing about the error. + :param reader: async.Reader yielding IStream instances. The same instances will be used in the output channel as were received in by the Reader. + :note:As some ODB implementations implement this operation atomic, they might abort the whole operation if one item could not be processed. Hence check how many items have actually been produced.""" @@ -167,8 +175,10 @@ class CachingDB(object): #{ Interface def update_cache(self, force=False): - """Call this method if the underlying data changed to trigger an update + """ + Call this method if the underlying data changed to trigger an update of the internal caching structures. + :param force: if True, the update must be performed. Otherwise the implementation may decide not to perform an update if it thinks nothing has changed. :return: True if an update was performed as something change indeed""" diff --git a/db/pack.py b/db/pack.py index 1a1c390ea..022efe0a2 100644 --- a/db/pack.py +++ b/db/pack.py @@ -128,8 +128,10 @@ def store_async(self, reader): #{ Interface def update_cache(self, force=False): - """Update our cache with the acutally existing packs on disk. Add new ones, + """ + Update our cache with the acutally existing packs on disk. Add new ones, and remove deleted ones. We keep the unchanged ones + :param force: If True, the cache will be updated even though the directory does not appear to have changed according to its modification timestamp. :return: True if the packs have been updated so there is new information, diff --git a/doc/.gitignore b/doc/.gitignore new file mode 100644 index 000000000..567609b12 --- /dev/null +++ b/doc/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/doc/source/api.rst b/doc/source/api.rst new file mode 100644 index 000000000..417671da9 --- /dev/null +++ b/doc/source/api.rst @@ -0,0 +1,113 @@ +.. _api_reference_toplevel: + +############# +API Reference +############# + +**************** +Database.Base +**************** + +.. automodule:: gitdb.db.base + :members: + :undoc-members: + +**************** +Database.Git +**************** + +.. automodule:: gitdb.db.git + :members: + :undoc-members: + +**************** +Database.Loose +**************** + +.. automodule:: gitdb.db.loose + :members: + :undoc-members: + +**************** +Database.Memory +**************** + +.. automodule:: gitdb.db.mem + :members: + :undoc-members: + +**************** +Database.Pack +**************** + +.. automodule:: gitdb.db.pack + :members: + :undoc-members: + +****************** +Database.Reference +****************** + +.. automodule:: gitdb.db.ref + :members: + :undoc-members: + +************ +Base +************ + +.. automodule:: gitdb.base + :members: + :undoc-members: + +************ +Functions +************ + +.. automodule:: gitdb.fun + :members: + :undoc-members: + +************ +Pack +************ + +.. automodule:: gitdb.pack + :members: + :undoc-members: + +************ +Streams +************ + +.. automodule:: gitdb.stream + :members: + :undoc-members: + +************ +Types +************ + +.. automodule:: gitdb.typ + :members: + :undoc-members: + + +************ +Utilities +************ + +.. automodule:: gitdb.util + :members: + :undoc-members: + + + + + + + + + + + diff --git a/doc/source/conf.py b/doc/source/conf.py index 58b8791a1..d8aadabef 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -16,7 +16,7 @@ # 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('.')) +sys.path.append(os.path.abspath('../../../')) # -- General configuration ----------------------------------------------------- diff --git a/doc/source/index.rst b/doc/source/index.rst index 71ead1fc3..409c78e99 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -10,6 +10,10 @@ Contents: .. toctree:: :maxdepth: 2 + + intro + tutorial + api Indices and tables ================== diff --git a/doc/source/intro.rst b/doc/source/intro.rst new file mode 100644 index 000000000..9565e766e --- /dev/null +++ b/doc/source/intro.rst @@ -0,0 +1,4 @@ +######## +Overview +######## + diff --git a/doc/source/tutorial.rst b/doc/source/tutorial.rst new file mode 100644 index 000000000..b23a17703 --- /dev/null +++ b/doc/source/tutorial.rst @@ -0,0 +1,4 @@ + +######## +Tutorial +######## diff --git a/fun.py b/fun.py index d7e43717c..ccd8c0fc5 100644 --- a/fun.py +++ b/fun.py @@ -39,20 +39,22 @@ # used when dealing with larger streams chunk_size = 1000*mmap.PAGESIZE -__all__ = ('is_loose_object', 'loose_object_header_info', 'object_header_info', - 'write_object' ) +__all__ = ('is_loose_object', 'loose_object_header_info', 'msb_size', 'pack_object_header_info', + 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data' ) #{ Routines def is_loose_object(m): - """:return: True the file contained in memory map m appears to be a loose object. - Only the first two bytes are needed""" + """ + :return: True the file contained in memory map m appears to be a loose object. + Only the first two bytes are needed""" b0, b1 = map(ord, m[:2]) word = (b0 << 8) + b1 return b0 == 0x78 and (word % 31) == 0 def loose_object_header_info(m): - """:return: tuple(type_string, uncompressed_size_in_bytes) the type string of the + """ + :return: tuple(type_string, uncompressed_size_in_bytes) the type string of the object as well as its uncompressed size in bytes. :param m: memory map from which to read the compressed object data""" decompress_size = 8192 # is used in cgit as well @@ -61,9 +63,10 @@ def loose_object_header_info(m): return type_name, int(size) def pack_object_header_info(data): - """:return: tuple(type_id, uncompressed_size_in_bytes, byte_offset) - The type_id should be interpreted according to the ``type_id_to_type_map`` map - The byte-offset specifies the start of the actual zlib compressed datastream + """ + :return: tuple(type_id, uncompressed_size_in_bytes, byte_offset) + The type_id should be interpreted according to the ``type_id_to_type_map`` map + The byte-offset specifies the start of the actual zlib compressed datastream :param m: random-access memory, like a string or memory map""" c = ord(data[0]) # first byte i = 1 # next char to read @@ -87,8 +90,9 @@ def pack_object_header_info(data): # END handle exceptions def msb_size(data, offset=0): - """:return: tuple(read_bytes, size) read the msb size from the given random - access data starting at the given byte offset""" + """ + :return: tuple(read_bytes, size) read the msb size from the given random + access data starting at the given byte offset""" size = 0 i = 0 l = len(data) @@ -107,12 +111,14 @@ def msb_size(data, offset=0): return i+offset, size def loose_object_header(type, size): - """:return: string representing the loose object header, which is immediately + """ + :return: string representing the loose object header, which is immediately followed by the content stream of size 'size'""" return "%s %i\0" % (type, size) def write_object(type, size, read, write, chunk_size=chunk_size): - """Write the object as identified by type, size and source_stream into the + """ + Write the object as identified by type, size and source_stream into the target_stream :param type: type string of the object @@ -131,8 +137,10 @@ def write_object(type, size, read, write, chunk_size=chunk_size): return tbw def stream_copy(read, write, size, chunk_size): - """Copy a stream up to size bytes using the provided read and write methods, + """ + Copy a stream up to size bytes using the provided read and write methods, in chunks of chunk_size + :note: its much like stream_copy utility, but operates just using methods""" dbw = 0 # num data bytes written @@ -156,8 +164,10 @@ def stream_copy(read, write, size, chunk_size): def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_file): - """Apply data from a delta buffer using a source buffer to the target file, + """ + Apply data from a delta buffer using a source buffer to the target file, which will be written to + :param src_buf: random access data from which the delta was created :param src_buf_size: size of the source buffer in bytes :param delta_buf_size: size fo the delta buffer in bytes diff --git a/pack.py b/pack.py index c66d6717e..ed873b269 100644 --- a/pack.py +++ b/pack.py @@ -383,8 +383,9 @@ def version(self): return self._version def data(self): - """:return: read-only data of this pack. It provides random access and usually - is a memory map""" + """ + :return: read-only data of this pack. It provides random access and usually + is a memory map""" return self._data def checksum(self): @@ -428,19 +429,22 @@ def collect_streams(self, offset): def info(self, offset): """Retrieve information about the object at the given file-absolute offset + :param offset: byte offset :return: OPackInfo instance, the actual type differs depending on the type_id attribute""" return pack_object_at(self._data, offset or self.first_object_offset, False)[1] def stream(self, offset): """Retrieve an object at the given file-relative offset as stream along with its information + :param offset: byte offset :return: OPackStream instance, the actual type differs depending on the type_id attribute""" return pack_object_at(self._data, offset or self.first_object_offset, True)[1] def stream_iter(self, start_offset=0): - """:return: iterator yielding OPackStream compatible instances, allowing - to access the data in the pack directly. + """ + :return: iterator yielding OPackStream compatible instances, allowing + to access the data in the pack directly. :param start_offset: offset to the first object to iterate. If 0, iteration starts at the very first object in the pack. :note: Iterating a pack directly is costly as the datastream has to be decompressed @@ -555,6 +559,7 @@ def _object(self, sha, as_stream, index=-1): def info(self, sha): """Retrieve information about the object identified by the given sha + :param sha: 20 byte sha1 :raise BadObject: :return: OInfo instance, with 20 byte sha""" @@ -562,6 +567,7 @@ def info(self, sha): def stream(self, sha): """Retrieve an object stream along with its information as identified by the given sha + :param sha: 20 byte sha1 :raise BadObject: :return: OStream instance, with 20 byte sha""" @@ -589,15 +595,18 @@ def index(self): return self._index def is_valid_stream(self, sha, use_crc=False): - """Verify that the stream at the given sha is valid. - :param sha: 20 byte sha1 of the object whose stream to verify + """ + Verify that the stream at the given sha is valid. + :param use_crc: if True, the index' crc for the sha is used to determine - whether the compressed stream of the object is valid. If it is + :param sha: 20 byte sha1 of the object whose stream to verify + whether the compressed stream of the object is valid. If it is a delta, this only verifies that the delta's data is valid, not the data of the actual undeltified object, as it depends on more than just this stream. If False, the object will be decompressed and the sha generated. It must match the given sha + :return: True if the stream is valid :raise UnsupportedOperation: If the index is version 1 only :raise BadObject: sha was not found""" @@ -639,18 +648,22 @@ def is_valid_stream(self, sha, use_crc=False): return True def info_iter(self): - """:return: Iterator over all objects in this pack. The iterator yields + """ + :return: Iterator over all objects in this pack. The iterator yields OInfo instances""" return self._iter_objects(as_stream=False) def stream_iter(self): - """:return: iterator over all objects in this pack. The iterator yields - OStream instances""" + """ + :return: iterator over all objects in this pack. The iterator yields + OStream instances""" return self._iter_objects(as_stream=True) def collect_streams_at_offset(self, offset): - """As the version in the PackFile, but can resolve REF deltas within this pack + """ + As the version in the PackFile, but can resolve REF deltas within this pack For more info, see ``collect_streams`` + :param offset: offset into the pack file at which the object can be found""" streams = self._pack.collect_streams(offset) @@ -678,11 +691,13 @@ def collect_streams_at_offset(self, offset): return streams def collect_streams(self, sha): - """As ``PackFile.collect_streams``, but takes a sha instead of an offset. + """ + As ``PackFile.collect_streams``, but takes a sha instead of an offset. Additionally, ref_delta streams will be resolved within this pack. If this is not possible, the stream will be left alone, hence it is adivsed to check for unresolved ref-deltas and resolve them before attempting to construct a delta stream. + :param sha: 20 byte sha1 specifying the object whose related streams you want to collect :return: list of streams, first being the actual object delta, the last being a possibly unresolved base object. diff --git a/stream.py b/stream.py index 010102bdd..675ccf27e 100644 --- a/stream.py +++ b/stream.py @@ -77,6 +77,7 @@ def __del__(self): def _parse_header_info(self): """If this stream contains object data, parse the header info and skip the stream to a point where each read will yield object content + :return: parsed type_string, size""" # read header maxb = 512 # should really be enough, cgit uses 8192 I believe @@ -105,6 +106,7 @@ def new(self, m, close_on_deletion=False): """Create a new DecompressMemMapReader instance for acting as a read-only stream This method parses the object header from m and returns the parsed type and size, as well as the created stream instance. + :param m: memory map on which to oparate. It must be object data ( header + contents ) :param close_on_deletion: if True, the memory map will be closed once we are being deleted""" @@ -117,8 +119,9 @@ def data(self): return self._m def compressed_bytes_read(self): - """:return: number of compressed bytes read. This includes the bytes it - took to decompress the header ( if there was one )""" + """ + :return: number of compressed bytes read. This includes the bytes it + took to decompress the header ( if there was one )""" # ABSTRACT: When decompressing a byte stream, it can be that the first # x bytes which were requested match the first x bytes in the loosely # compressed datastream. This is the worst-case assumption that the reader @@ -406,6 +409,7 @@ def read(self, count=0): def seek(self, offset, whence=os.SEEK_SET): """Allows to reset the stream to restart reading + :raise ValueError: If offset and whence are not 0""" if offset != 0 or whence != os.SEEK_SET: raise ValueError("Can only seek to position 0") @@ -417,11 +421,14 @@ def seek(self, offset, whence=os.SEEK_SET): @classmethod def new(cls, stream_list): - """Convert the given list of streams into a stream which resolves deltas + """ + Convert the given list of streams into a stream which resolves deltas when reading from it. + :param stream_list: two or more stream objects, first stream is a Delta to the object that you want to resolve, followed by N additional delta streams. The list's last stream must be a non-delta stream. + :return: Non-Delta OPackStream object whose stream can be used to obtain the decompressed resolved data :raise ValueError: if the stream list cannot be handled""" @@ -526,6 +533,7 @@ def getvalue(self): class FDCompressedSha1Writer(Sha1Writer): """Digests data written to it, making the sha available, then compress the data and write it to the file descriptor + :note: operates on raw file descriptors :note: for this to work, you have to use the close-method of this instance""" __slots__ = ("fd", "sha1", "zip") diff --git a/util.py b/util.py index b55f789c0..502ac94dd 100644 --- a/util.py +++ b/util.py @@ -154,25 +154,26 @@ def to_bin_sha(sha): class LazyMixin(object): """ - Base class providing an interface to lazily retrieve attribute values upon + Base class providing an interface to lazily retrieve attribute values upon first access. If slots are used, memory will only be reserved once the attribute - is actually accessed and retrieved the first time. All future accesses will + is actually accessed and retrieved the first time. All future accesses will return the cached value as stored in the Instance's dict or slot. """ + __slots__ = tuple() def __getattr__(self, attr): """ Whenever an attribute is requested that we do not know, we allow it to be created and set. Next time the same attribute is reqeusted, it is simply - returned from our dict/slots. - """ + returned from our dict/slots. """ self._set_cache_(attr) # will raise in case the cache was not created return object.__getattribute__(self, attr) def _set_cache_(self, attr): - """ This method should be overridden in the derived class. + """ + This method should be overridden in the derived class. It should check whether the attribute named by attr can be created and cached. Do nothing if you do not know the attribute or call your subclass @@ -183,7 +184,8 @@ def _set_cache_(self, attr): class LockedFD(object): - """This class facilitates a safe read and write operation to a file on disk. + """ + This class facilitates a safe read and write operation to a file on disk. If we write to 'file', we obtain a lock file at 'file.lock' and write to that instead. If we succeed, the lock file will be renamed to overwrite the original file. @@ -212,7 +214,9 @@ def _lockfilepath(self): return "%s.lock" % self._filepath def open(self, write=False, stream=False): - """Open the file descriptor for reading or writing, both in binary mode. + """ + Open the file descriptor for reading or writing, both in binary mode. + :param write: if True, the file descriptor will be opened for writing. Other wise it will be opened read-only. :param stream: if True, the file descriptor will be wrapped into a simple stream From 4cde3c046b71bf481418cd3a2a0f0bf5bc540a2b Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 30 Jun 2010 21:52:12 +0200 Subject: [PATCH 0045/2375] Added a minimal documentation, including a quick usage guide --- doc/source/api.rst | 2 +- doc/source/conf.py | 11 ++-- doc/source/intro.rst | 25 +++++++++ doc/source/tutorial.rst | 116 ++++++++++++++++++++++++++++++++++++++-- test/test_example.py | 53 ++++++++++++++++++ 5 files changed, 197 insertions(+), 10 deletions(-) create mode 100644 test/test_example.py diff --git a/doc/source/api.rst b/doc/source/api.rst index 417671da9..9dea95764 100644 --- a/doc/source/api.rst +++ b/doc/source/api.rst @@ -1,4 +1,4 @@ -.. _api_reference_toplevel: +.. _api-label: ############# API Reference diff --git a/doc/source/conf.py b/doc/source/conf.py index d8aadabef..8e2585c2f 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -45,9 +45,9 @@ # built documents. # # The short X.Y version. -version = '1.0' +version = '0.5' # The full version, including alpha/beta/rc tags. -release = '1.0.0' +release = '0.5.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -93,10 +93,9 @@ # 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 = {} +html_theme_options = { + "stickysidebar": "true" +} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] diff --git a/doc/source/intro.rst b/doc/source/intro.rst index 9565e766e..a51d8bff4 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -2,3 +2,28 @@ Overview ######## +The *GitDB* project implements interfaces to allow read and write access to git repositories. In its core lies the *db* package, which contains all database types necessary to read a complete git repository. These are the ``LooseObjectDB``, the ``PackedDB`` and the ``ReferenceDB`` which are combined into the ``GitDB`` to combine every aspect of the git database. + +For this to work, GitDB implements pack reading, as well as loose object reading and writing. Data is always encapsulated in streams, which allows huge files to be handled as well as small ones, usually only chunks of the stream are kept in memory for processing, never the whole stream at once. + +Interfaces are used to describe the API, making it easy to provide alternate implementations. + +================ +Installing GitDB +================ +Its easiest to install gitdb using the *easy_install* program, which is part of the `setuptools`_:: + + $ easy_install gitdb + +As the command will install gitdb in your respective python distribution, you will most likely need root permissions to authorize the required changes. + +If you have downloaded the source archive, the package can be installed by running the ``setup.py`` script:: + + $ python setup.py install + +=============== +Getting Started +=============== +It is advised to have a look at the :ref:`Usage Guide ` for a brief introduction on the different database implementations. + +.. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools diff --git a/doc/source/tutorial.rst b/doc/source/tutorial.rst index b23a17703..cfe3fb284 100644 --- a/doc/source/tutorial.rst +++ b/doc/source/tutorial.rst @@ -1,4 +1,114 @@ +.. _tutorial-label: -######## -Tutorial -######## +########### +Usage Guide +########### +This text briefly introduces you to the basic design decisions and accompanying types. + +****** +Design +****** +The *GitDB* project models a standard git object database and implements it in pure python. This means that data, being classified by one of four types, can can be stored in the database and will in future be referred to by the generated SHA1 key, which is a 20 byte string within python. + +*GitDB* implements *RW* access to loose objects, as well as *RO* access to packed objects. Compound Databases allow to combine multiple object databases into one. + +All data is read and written using streams, which effectively prevents more than a chunk of the data being kept in memory at once mostly [#]_. + +******* +Streams +******* +In order to assure the object database can handle objects of any size, a stream interface is used for data retrieval as well as to fill data into the database. + +Basic Stream Types +================== +There are two fundamentally different types of streams, **IStream**\ s and **OStream**\ s. IStreams are mutable and are used to provide data streams to the database to create new objects. + +OStreams are immutable and are used to read data from the database. The base of this type, **OInfo**, contains only type and size information of the queried object, but no stream, which is slightly faster to retrieve depending on the database. + +OStreams are tuples, IStreams are lists. Both, OInfo and OStream, have the same member ordering which allows quick conversion from one type to another. + +**************************** +Data Query and Data Addition +**************************** +Databases support query and/or addition of objects using simple interfaces. They are called **ObjectDBR** for read-only access, and **ObjectDBW** for write access to create new objects. + +Both have two sets of methods, one of which allows interacting with single objects, the other one allowing to handle a stream of objects simultaneously and asynchronously. + +Acquiring information about an object from a database is easy if you have a SHA1 to refer to the object:: + + + ldb = LooseObjectDB(fixture_path("../../.git/objects")) + + for sha1 in ldb.sha_iter(): + oinfo = ldb.info(sha1) + ostream = ldb.stream(sha1) + assert oinfo[:3] == ostream[:3] + + assert len(ostream.read()) == ostream.size + # END for each sha in database + +To store information, you prepare an *IStream* object with the required information. The provided stream will be read and converted into an object, and the respective 20 byte SHA1 identifier is stored in the IStream object:: + + data = "my data" + istream = IStream("blob", len(data), StringIO(data)) + + # the object does not yet have a sha + assert istream.binsha is None + ldb.store(istream) + # now the sha is set + assert len(istream.binsha) == 20 + assert ldb.has_object(istream.binsha) + +********************** +Asynchronous Operation +********************** +For each read or write method that allows a single-object to be handled, an *_async* version exists which reads items to be processed from a channel, and writes the operation's result into an output channel that is read by the caller or by other async methods, to support chaining. + +Using asynchronous operations is easy, but chaining multiple operations together to form a complex one would require you to read the docs of the *async* package. At the current time, due to the *GIL*, the *GitDB* can only achieve true concurrency during zlib compression and decompression if big objects, if the respective c modules where compiled in *async*. + +Asynchronous operations are scheduled by a *ThreadPool* which resides in the *gitdb.util* module:: + + from gitdb.util import pool + + # set the pool to use two threads + pool.set_size(2) + + # synchronize the mode of operation + pool.set_size(0) + + +Use async methods with readers, which supply items to be processed. The result is given through readers as well:: + + from async import IteratorReader + + # Create a reader from an iterator + reader = IteratorReader(ldb.sha_iter()) + + # get reader for object streams + info_reader = ldb.stream_async(reader) + + # read one + info = info_reader.read(1)[0] + + # read all the rest until depletion + ostreams = info_reader.read() + + + +********* +Databases +********* +A database implements different interfaces, one if which will always be the *ObjectDBR* interface to support reading of object information and streams. + +The *Loose Object Database* as well as the *Packed Object Database* are *File Databases*, hence they operate on a directory which contains files they can read. + +File databases implementing the *ObjectDBW* interface can also be forced to write their output into the specified stream, using the ``set_ostream`` method. This effectively allows you to redirect its output to anywhere you like. + +*Compound Databases* are not implementing their own access type, but instead combine multiple database implementations into one. Examples for this database type are the *Reference Database*, which reads object locations from a file, and the *GitDB* which combines loose, packed and referenced objects into one database interface. + +For more information about the individual database types, please see the :ref:`API Reference `, and the unittests for the respective types. + + +---- + +.. [#] When reading streams from packs, all deltas are currently applied and the result written into a memory map before the first byte is returned. Future versions of the delta-apply algorithm might improve on this. diff --git a/test/test_example.py b/test/test_example.py new file mode 100644 index 000000000..dc3d6230a --- /dev/null +++ b/test/test_example.py @@ -0,0 +1,53 @@ +"""Module with examples from the tutorial section of the docs""" +from lib import * +from gitdb import IStream +from gitdb.db import LooseObjectDB +from gitdb.util import pool + +from cStringIO import StringIO + +from async import IteratorReader + +class TestExamples(TestBase): + + def test_base(self): + ldb = LooseObjectDB(fixture_path("../../.git/objects")) + + for sha1 in ldb.sha_iter(): + oinfo = ldb.info(sha1) + ostream = ldb.stream(sha1) + assert oinfo[:3] == ostream[:3] + + assert len(ostream.read()) == ostream.size + assert ldb.has_object(oinfo.binsha) + # END for each sha in database + + data = "my data" + istream = IStream("blob", len(data), StringIO(data)) + + # the object does not yet have a sha + assert istream.binsha is None + ldb.store(istream) + # now the sha is set + assert len(istream.binsha) == 20 + assert ldb.has_object(istream.binsha) + + + # async operation + # Create a reader from an iterator + reader = IteratorReader(ldb.sha_iter()) + + # get reader for object streams + info_reader = ldb.stream_async(reader) + + # read one + info = info_reader.read(1)[0] + + # read all the rest until depletion + ostreams = info_reader.read() + + # set the pool to use two threads + pool.set_size(2) + + # synchronize the mode of operation + pool.set_size(0) From 7562fdd96ab995f6c25fc102ef40a285283c844e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 1 Jul 2010 13:30:14 +0200 Subject: [PATCH 0046/2375] added setup.py and Manifest to allow distribution and easy_install --- .gitignore | 3 +++ MANIFEST.in | 15 +++++++++++++++ README | 2 +- doc/source/intro.rst | 12 ++++++++++++ ext/async | 2 +- setup.py | 18 ++++++++++++++++++ 6 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 MANIFEST.in create mode 100755 setup.py diff --git a/.gitignore b/.gitignore index 1a9d961a7..1e097f6f8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +MANIFEST +build/ +dist/ *.pyc *.o *.so diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 000000000..a01acc452 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,15 @@ +include VERSION +include LICENSE +include CHANGES +include AUTHORS +include README + +include _fun.c + +graft test + +global-exclude .git* +global-exclude *.pyc +global-exclude *.so +global-exclude *.dll +global-exclude *.o diff --git a/README b/README index a52d9f508..33a566d86 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -GtDB +GitDB ===== GitDB allows you to access bare git repositories for reading and writing. It diff --git a/doc/source/intro.rst b/doc/source/intro.rst index a51d8bff4..4d675cbc4 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -26,4 +26,16 @@ Getting Started =============== It is advised to have a look at the :ref:`Usage Guide ` for a brief introduction on the different database implementations. +================= +Source Repository +================= +The latest source can be cloned using git from one of the following locations: + + * git://gitorious.org/git-python/gitdb.git + * git://github.com/Byron/gitdb.git + +License Information +=================== +*GitDB* is licensed under the New BSD License. + .. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools diff --git a/ext/async b/ext/async index 796b5e94f..a18235276 160000 --- a/ext/async +++ b/ext/async @@ -1 +1 @@ -Subproject commit 796b5e94f19dfc36a3fb251468192373c76510b0 +Subproject commit a1823527631ffa8a2438c95096e71a741df7b61e diff --git a/setup.py b/setup.py new file mode 100755 index 000000000..b6c2c414b --- /dev/null +++ b/setup.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +from distutils.core import setup, Extension + +setup(name = "gitdb", + version = "0.5.0", + description = "Git Object Database", + author = "Sebastian Thiel", + author_email = "byronimo@gmail.com", + url = "http://gitorious.org/git-python/gitdb", + packages = ('gitdb', 'gitdb.db', 'gitdb.test', 'gitdb.test.db', 'gitdb.test.performance'), + package_data={'gitdb' : ['AUTHORS', 'README'], + 'gitdb.test' : ['fixtures/packs/*', 'fixtures/objects/7b/*']}, + package_dir = {'gitdb':''}, + ext_modules=[Extension('gitdb._fun', ['_fun.c'])], + license = "BSD License", + requires=('async (>=0.6.0)',), + long_description = """GitDB is a pure-Python git object database""" + ) From b76bac22bbb146a7a82318721147d7a5f831b7e9 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 1 Jul 2010 18:23:53 +0200 Subject: [PATCH 0047/2375] Removed obsolete makefile, to compile the extension, use ./setup build_ext and copy _fun.so from the build directory into the root directory --- makefile | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 makefile diff --git a/makefile b/makefile deleted file mode 100644 index 390289625..000000000 --- a/makefile +++ /dev/null @@ -1,12 +0,0 @@ - -_fun.o: _fun.c - gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.6 -c $< -o $@ - -_fun.so: _fun.o - gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions $^ -o $@ - -all: _fun.so - -clean: - -rm *.so - -rm *.o From 6c8721a7d5d32e54bb4ffd3725ed23ac5d76a593 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 2 Jul 2010 16:22:40 +0200 Subject: [PATCH 0048/2375] Win32 compatability adjustments. One performance test fails during shutdown as python fails to delete a stream in time it seems, so the file cannot be deleted as it is still opened by someone. This is madness, raising the question how badly python truly fails to call the destructors of objects in order to allow them to release their resources --- db/loose.py | 16 ++++++++++++++-- test/lib.py | 6 ++++++ test/test_example.py | 3 +++ test/test_stream.py | 5 ++++- util.py | 8 ++++++-- 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/db/loose.py b/db/loose.py index 7afc5bf1b..86eb151fb 100644 --- a/db/loose.py +++ b/db/loose.py @@ -30,6 +30,8 @@ exists, chmod, isdir, + isfile, + remove, mkdir, rename, dirname, @@ -60,6 +62,12 @@ class LooseObjectDB(FileDBBase, ObjectDBR, ObjectDBW): # chunks in which data will be copied between streams stream_chunk_size = chunk_size + # On windows we need to keep it writable, otherwise it cannot be removed + # either + new_objects_mode = 0444 + if os.name == 'nt': + new_objects_mode = 0644 + def __init__(self, root_path): super(LooseObjectDB, self).__init__(root_path) @@ -199,11 +207,15 @@ def store(self, istream): if not isdir(obj_dir): mkdir(obj_dir) # END handle destination directory + # rename onto existing doesn't work on windows + if os.name == 'nt' and isfile(obj_path): + remove(obj_path) + # END handle win322 rename(tmp_path, obj_path) # make sure its readable for all ! It started out as rw-- tmp file - # but needs to be rrr - chmod(obj_path, 0444) + # but needs to be rwrr + chmod(obj_path, self.new_objects_mode) # END handle dry_run istream.binsha = hex_to_bin(hexsha) diff --git a/test/lib.py b/test/lib.py index 742aa7f5c..3fb87d547 100644 --- a/test/lib.py +++ b/test/lib.py @@ -19,6 +19,7 @@ import tempfile import shutil import os +import gc #{ Bases @@ -44,6 +45,11 @@ def wrapper(self): print >> sys.stderr, "Test %s.%s failed, output is at %r" % (type(self).__name__, func.__name__, path) raise finally: + # Need to collect here to be sure all handles have been closed. It appears + # a windows-only issue. In fact things should be deleted, as well as + # memory maps closed, once objects go out of scope. For some reason + # though this is not the case here unless we collect explicitly. + gc.collect() shutil.rmtree(path) # END handle exception # END wrapper diff --git a/test/test_example.py b/test/test_example.py index dc3d6230a..dc82436ec 100644 --- a/test/test_example.py +++ b/test/test_example.py @@ -21,6 +21,9 @@ def test_base(self): assert len(ostream.read()) == ostream.size assert ldb.has_object(oinfo.binsha) # END for each sha in database + # assure we close all files + del(ostream) + del(oinfo) data = "my data" istream = IStream("blob", len(data), StringIO(data)) diff --git a/test/test_stream.py b/test/test_stream.py index dd65a1782..948cbe766 100644 --- a/test/test_stream.py +++ b/test/test_stream.py @@ -19,6 +19,7 @@ str_blob_type ) +import time import tempfile import os @@ -125,12 +126,14 @@ def test_compressed_writer(self): # for now, just a single write, code doesn't care about chunking assert len(data) == ostream.write(data) ostream.close() + # its closed already self.failUnlessRaises(OSError, os.close, fd) # read everything back, compare to data we zip - fd = os.open(path, os.O_RDONLY) + fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)) written_data = os.read(fd, os.path.getsize(path)) + assert len(written_data) == os.path.getsize(path) os.close(fd) assert written_data == zlib.compress(data, 1) # best speed diff --git a/util.py b/util.py index 502ac94dd..6b2f91073 100644 --- a/util.py +++ b/util.py @@ -58,12 +58,14 @@ def unpack_from(fmt, data, offset=0): isdir = os.path.isdir isfile = os.path.isfile rename = os.rename +remove = os.remove dirname = os.path.dirname basename = os.path.basename join = os.path.join read = os.read write = os.write close = os.close +fsync = os.fsync # constants NULL_HEX_SHA = "0"*40 @@ -128,7 +130,7 @@ def file_contents_ro_filepath(filepath, stream=False, allow_mmap=True, flags=0): :note: for now we don't try to use O_NOATIME directly as the right value needs to be shared per database in fact. It only makes a real difference for loose object databases anyway, and they use it with the help of the ``flags`` parameter""" - fd = os.open(filepath, os.O_RDONLY|flags) + fd = os.open(filepath, os.O_RDONLY|getattr(os, 'O_BINARY', 0)|flags) try: return file_contents_ro(fd, stream, allow_mmap) finally: @@ -300,7 +302,9 @@ def _end_writing(self, successful=True): os.rename(lockfile, self._filepath) # assure others can at least read the file - the tmpfile left it at rw-- - chmod(self._filepath, 0444) + # We may also write that file, on windows that boils down to a remove- + # protection as well + chmod(self._filepath, 0644) else: # just delete the file so far, we failed os.remove(lockfile) From 46bf4710e0f7184ac4875e8037de30b5081bfda2 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 6 Jul 2010 00:34:41 +0200 Subject: [PATCH 0049/2375] PackEntity: fixed capital bug which would cause a None to be in place of the bin sha when querying infos or streams through an entity --- ext/async | 2 +- pack.py | 4 +++- test/test_pack.py | 8 ++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ext/async b/ext/async index a18235276..76f15fc4b 160000 --- a/ext/async +++ b/ext/async @@ -1 +1 @@ -Subproject commit a1823527631ffa8a2438c95096e71a741df7b61e +Subproject commit 76f15fc4b3e3ccb0160d6c887181f29095d16f23 diff --git a/pack.py b/pack.py index ed873b269..5b13bcc56 100644 --- a/pack.py +++ b/pack.py @@ -516,6 +516,9 @@ def _object(self, sha, as_stream, index=-1): # its a little bit redundant here, but it needs to be efficient if index < 0: index = self._sha_to_index(sha) + if sha is None: + sha = self._index.sha(index) + # END assure sha is present ( in output ) offset = self._index.offset(index) type_id, uncomp_size, data_rela_offset = pack_object_header_info(buffer(self._pack._data, offset)) if as_stream: @@ -551,7 +554,6 @@ def _object(self, sha, as_stream, index=-1): # collect the streams to obtain the actual object type if streams[-1].type_id in delta_types: raise BadObject(sha, "Could not resolve delta object") - return OInfo(sha, streams[-1].type, target_size) # END handle stream diff --git a/test/test_pack.py b/test/test_pack.py index eaa2d38eb..445ed4a17 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -144,8 +144,12 @@ def test_pack_entity(self): # try all calls assert len(entity.collect_streams(info.binsha)) - assert isinstance(entity.info(info.binsha), OInfo) - assert isinstance(entity.stream(info.binsha), OStream) + oinfo = entity.info(info.binsha) + assert isinstance(oinfo, OInfo) + assert oinfo.binsha is not None + ostream = entity.stream(info.binsha) + assert isinstance(ostream, OStream) + assert ostream.binsha is not None # verify the stream try: From e750ce0be7d3cbf694c095f6519e2e34b2c3332c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 7 Jul 2010 10:40:35 +0200 Subject: [PATCH 0050/2375] Added method to obtain a full sha from a partial sha, for each of the databases. The IndexFile has a new method to retrieve an index from a partial sha, instead of from a full sha, to provide the required functionality --- db/git.py | 65 ++++++++++++++++++++++++++++++++++++++++++- db/loose.py | 20 ++++++++++++- db/pack.py | 22 +++++++++++++++ exc.py | 6 +++- pack.py | 48 +++++++++++++++++++++++++++++++- test/db/test_git.py | 13 +++++++-- test/db/test_loose.py | 14 +++++++++- test/db/test_pack.py | 24 ++++++++++++++++ test/test_pack.py | 6 ++++ 9 files changed, 211 insertions(+), 7 deletions(-) diff --git a/db/git.py b/db/git.py index a9298df05..62fed7fb6 100644 --- a/db/git.py +++ b/db/git.py @@ -9,11 +9,33 @@ from ref import ReferenceDB from gitdb.util import LazyMixin -from gitdb.exc import InvalidDBRoot +from gitdb.exc import ( + InvalidDBRoot, + BadObject, + AmbiguousObjectName + ) import os +from gitdb.util import hex_to_bin + __all__ = ('GitDB', ) + +def _databases_recursive(database, output): + """Fill output list with database from db, in order. Deals with Loose, Packed + and compound databases.""" + if isinstance(database, CompoundDB): + compounds = list() + dbs = database.databases() + output.extend(db for db in dbs if not isinstance(db, CompoundDB)) + for cdb in (db for db in dbs if isinstance(db, CompoundDB)): + _databases_recursive(cdb, output) + else: + output.append(database) + # END handle database type + + + class GitDB(FileDBBase, ObjectDBW, CompoundDB): """A git-style object database, which contains all objects in the 'objects' subdirectory""" @@ -71,4 +93,45 @@ def ostream(self): def set_ostream(self, ostream): return self._loose_db.set_ostream(ostream) + #} END objectdbw interface + + #{ Interface + + def partial_to_complete_sha_hex(self, partial_hexsha): + """ + :return: 20 byte binary sha1 from the given less-than-40 byte hexsha + :param partial_hexsha: hexsha with less than 40 byte + :raise AmbiguousObjectName: """ + databases = list() + _databases_recursive(self, databases) + + if len(partial_hexsha) % 2 != 0: + partial_binsha = hex_to_bin(partial_hexsha + "0") + else: + partial_binsha = hex_to_bin(partial_hexsha) + # END assure successful binary conversion + + candidate = None + for db in databases: + full_bin_sha = None + try: + if isinstance(db, LooseObjectDB): + full_bin_sha = db.partial_to_complete_sha_hex(partial_hexsha) + else: + full_bin_sha = db.partial_to_complete_sha(partial_binsha) + # END handle database type + except BadObject: + continue + # END ignore bad objects + if full_bin_sha: + if candidate and candidate != full_bin_sha: + raise AmbiguousObjectName(partial_hexsha) + candidate = full_bin_sha + # END handle candidate + # END for each db + if not candidate: + raise BadObject(partial_binsha) + return candidate + + #} END interface diff --git a/db/loose.py b/db/loose.py index 86eb151fb..521be44c2 100644 --- a/db/loose.py +++ b/db/loose.py @@ -7,7 +7,8 @@ from gitdb.exc import ( InvalidDBRoot, - BadObject, + BadObject, + AmbiguousObjectName ) from gitdb.stream import ( @@ -102,6 +103,23 @@ def readable_db_object_path(self, hexsha): # END handle cache raise BadObject(hexsha) + def partial_to_complete_sha_hex(self, partial_hexsha): + """:return: 20 byte binary sha1 string which matches the given name uniquely + :param name: hexadecimal partial name + :raise AmbiguousObjectName: + :raise BadObject: """ + candidate = None + for binsha in self.sha_iter(): + if bin_to_hex(binsha).startswith(partial_hexsha): + # it can't ever find the same object twice + if candidate is not None: + raise AmbiguousObjectName(partial_hexsha) + candidate = binsha + # END for each object + if candidate is None: + raise BadObject(partial_hexsha) + return candidate + #} END interface def _map_loose_object(self, sha): diff --git a/db/pack.py b/db/pack.py index 022efe0a2..47d511378 100644 --- a/db/pack.py +++ b/db/pack.py @@ -10,6 +10,7 @@ from gitdb.exc import ( BadObject, UnsupportedOperation, + AmbiguousObjectName ) from gitdb.pack import PackEntity @@ -175,5 +176,26 @@ def update_cache(self, force=False): def entities(self): """:return: list of pack entities operated upon by this database""" return [ item[1] for item in self._entities ] + + def partial_to_complete_sha(self, partial_binsha): + """:return: 20 byte sha as inferred by the given partial binary sha + :raise AmbiguousObjectName: + :raise BadObject: """ + candidate = None + for item in self._entities: + item_index = item[1].index().partial_sha_to_index(partial_binsha) + if item_index is not None: + sha = item[1].index().sha(item_index) + if candidate and candidate != sha: + raise AmbiguousObjectName(partial_binsha) + candidate = sha + # END handle full sha could be found + # END for each entity + + if candidate: + return candidate + + # still not found ? + raise BadObject(partial_binsha) #} END interface diff --git a/exc.py b/exc.py index 037ac3855..012cdbc6b 100644 --- a/exc.py +++ b/exc.py @@ -13,7 +13,11 @@ class BadObject(ODBError): def __str__(self): return "BadObject: %s" % to_hex_sha(self.args[0]) - + +class AmbiguousObjectName(ODBError): + """Thrown if a possibly shortened name does not uniquely represent a single object + in the database""" + class BadObjectType(ODBError): """The object had an unsupported type""" diff --git a/pack.py b/pack.py index 5b13bcc56..ab7c9b677 100644 --- a/pack.py +++ b/pack.py @@ -302,7 +302,53 @@ def sha_to_index(self, sha): # END handle midpoint # END bisect return None - + + def partial_sha_to_index(self, partial_sha): + """:return: index as in `sha_to_index` or None if the sha was not found in this + index file + :param partial_sha: an at least two bytes of a partial sha + :raise AmbiguousObjectName:""" + if len(partial_sha) < 2: + raise ValueError("Require at least 2 bytes of partial sha") + + first_byte = ord(partial_sha[0]) + get_sha = self.sha + lo = 0 # lower index, the left bound of the bisection + if first_byte != 0: + lo = self._fanout_table[first_byte-1] + hi = self._fanout_table[first_byte] # the upper, right bound of the bisection + + len_partial = len(partial_sha) + # fill the partial to full 20 bytes + filled_sha = partial_sha + '\0'*(20 - len_partial) + + # find lowest + while lo < hi: + mid = (lo + hi) / 2 + c = cmp(filled_sha, get_sha(mid)) + if c < 0: + hi = mid + elif not c: + # perfect match + lo = mid + break + else: + lo = mid + 1 + # END handle midpoint + # END bisect + if lo < self.size: + cur_sha = get_sha(lo) + if cur_sha[:len_partial] == partial_sha: + next_sha = None + if lo+1 < self.size: + next_sha = get_sha(lo+1) + if next_sha and next_sha == cur_sha: + raise AmbiguousObjectName(partial_sha) + return lo + # END if we have a match + # END if we found something + return None + if 'PackIndexFile_sha_to_index' in globals(): # NOTE: Its just about 25% faster, the major bottleneck might be the attr # accesses diff --git a/test/db/test_git.py b/test/db/test_git.py index 779e3f15e..1c0c39c96 100644 --- a/test/db/test_git.py +++ b/test/db/test_git.py @@ -1,7 +1,8 @@ from lib import * +from gitdb.exc import BadObject from gitdb.db import GitDB from gitdb.base import OStream, OInfo -from gitdb.util import hex_to_bin +from gitdb.util import hex_to_bin, bin_to_hex class TestGitDB(TestDBBase): @@ -16,7 +17,15 @@ def test_reading(self): assert isinstance(gdb.info(gitdb_sha), OInfo) assert isinstance(gdb.stream(gitdb_sha), OStream) assert gdb.size() > 200 - assert len(list(gdb.sha_iter())) == gdb.size() + sha_list = list(gdb.sha_iter()) + assert len(sha_list) == gdb.size() + + # test partial shas + for binsha in sha_list: + assert gdb.partial_to_complete_sha_hex(bin_to_hex(binsha)[:8]) == binsha + # END for each sha + + self.failUnlessRaises(BadObject, gdb.partial_to_complete_sha_hex, "0000") @with_rw_directory def test_writing(self, path): diff --git a/test/db/test_loose.py b/test/db/test_loose.py index 536b02048..8e8a9bfc3 100644 --- a/test/db/test_loose.py +++ b/test/db/test_loose.py @@ -1,10 +1,12 @@ from lib import * from gitdb.db import LooseObjectDB +from gitdb.exc import BadObject +from gitdb.util import bin_to_hex class TestLooseDB(TestDBBase): @with_rw_directory - def test_writing(self, path): + def test_basics(self, path): ldb = LooseObjectDB(path) # write data @@ -16,3 +18,13 @@ def test_writing(self, path): assert shas and len(shas[0]) == 20 assert len(shas) == ldb.size() + + # verify find short object + long_sha = bin_to_hex(shas[-1]) + for short_sha in (long_sha[:20], long_sha[:5]): + assert bin_to_hex(ldb.partial_to_complete_sha_hex(short_sha)) == long_sha + # END for each sha + + self.failUnlessRaises(BadObject, ldb.partial_to_complete_sha_hex, '0000') + # raises if no object could be foudn + diff --git a/test/db/test_pack.py b/test/db/test_pack.py index f347f408b..c8974b29b 100644 --- a/test/db/test_pack.py +++ b/test/db/test_pack.py @@ -2,6 +2,8 @@ from gitdb.db import PackedDB from gitdb.test.lib import fixture_path +from gitdb.exc import BadObject, AmbiguousObjectName + import os import random @@ -44,3 +46,25 @@ def test_writing(self, path): info = pdb.info(sha) stream = pdb.stream(sha) # END for each sha to query + + + # test short finding - be a bit more brutal here + max_bytes = 19 + min_bytes = 2 + num_ambiguous = 0 + for i, sha in enumerate(sha_list): + short_sha = sha[:max((i % max_bytes), min_bytes)] + try: + assert pdb.partial_to_complete_sha(short_sha) == sha + except AmbiguousObjectName: + num_ambiguous += 1 + pass # valid, we can have short objects + # END exception handling + # END for each sha to find + + # we should have at least one ambiguous, considering the small sizes + # but in our pack, there is no ambigious ... + # assert num_ambiguous + + # non-existing + self.failUnlessRaises(BadObject, pdb.partial_to_complete_sha, "\0\0") diff --git a/test/test_pack.py b/test/test_pack.py index 445ed4a17..a9db19178 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -57,7 +57,13 @@ def _assert_index_file(self, index, version, size): assert entry[0] == index.offset(oidx) assert entry[1] == sha assert entry[2] == index.crc(oidx) + + # verify partial sha + for l in (4,8,11,17,20): + assert index.partial_sha_to_index(sha[:l]) == oidx + # END for each object index in indexfile + self.failUnlessRaises(ValueError, index.partial_sha_to_index, "\0") def _assert_pack_file(self, pack, version, size): From e9e0496ea982f7574c6ea379e9f6e85dd111fc8e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 7 Jul 2010 11:10:25 +0200 Subject: [PATCH 0051/2375] Moved partial_to_complete_sha_hex from gitdb to compounddb, its fitting there better --- db/base.py | 61 +++++++++++++++++++++++++++++++++++++++++++-- db/git.py | 56 ----------------------------------------- test/db/test_git.py | 11 ++++++-- 3 files changed, 68 insertions(+), 60 deletions(-) diff --git a/db/base.py b/db/base.py index 02584c635..ebd5040a5 100644 --- a/db/base.py +++ b/db/base.py @@ -2,10 +2,14 @@ from gitdb.util import ( pool, join, - LazyMixin + LazyMixin, + hex_to_bin ) -from gitdb.exc import BadObject +from gitdb.exc import ( + BadObject, + AmbiguousObjectName + ) from async import ( ChannelThreadTask @@ -186,6 +190,22 @@ def update_cache(self, force=False): # END interface + + +def _databases_recursive(database, output): + """Fill output list with database from db, in order. Deals with Loose, Packed + and compound databases.""" + if isinstance(database, CompoundDB): + compounds = list() + dbs = database.databases() + output.extend(db for db in dbs if not isinstance(db, CompoundDB)) + for cdb in (db for db in dbs if isinstance(db, CompoundDB)): + _databases_recursive(cdb, output) + else: + output.append(database) + # END handle database type + + class CompoundDB(ObjectDBR, LazyMixin, CachingDB): """A database which delegates calls to sub-databases. @@ -258,6 +278,43 @@ def update_cache(self, force=False): # END if is caching db # END for each database to update return stat + + def partial_to_complete_sha_hex(self, partial_hexsha): + """ + :return: 20 byte binary sha1 from the given less-than-40 byte hexsha + :param partial_hexsha: hexsha with less than 40 byte + :raise AmbiguousObjectName: """ + databases = list() + _databases_recursive(self, databases) + + if len(partial_hexsha) % 2 != 0: + partial_binsha = hex_to_bin(partial_hexsha + "0") + else: + partial_binsha = hex_to_bin(partial_hexsha) + # END assure successful binary conversion + + candidate = None + for db in databases: + full_bin_sha = None + try: + if hasattr(db, 'partial_to_complete_sha_hex'): + full_bin_sha = db.partial_to_complete_sha_hex(partial_hexsha) + else: + full_bin_sha = db.partial_to_complete_sha(partial_binsha) + # END handle database type + except BadObject: + continue + # END ignore bad objects + if full_bin_sha: + if candidate and candidate != full_bin_sha: + raise AmbiguousObjectName(partial_hexsha) + candidate = full_bin_sha + # END handle candidate + # END for each db + if not candidate: + raise BadObject(partial_binsha) + return candidate + #} END interface diff --git a/db/git.py b/db/git.py index 62fed7fb6..f0e63b15a 100644 --- a/db/git.py +++ b/db/git.py @@ -16,26 +16,9 @@ ) import os -from gitdb.util import hex_to_bin - __all__ = ('GitDB', ) -def _databases_recursive(database, output): - """Fill output list with database from db, in order. Deals with Loose, Packed - and compound databases.""" - if isinstance(database, CompoundDB): - compounds = list() - dbs = database.databases() - output.extend(db for db in dbs if not isinstance(db, CompoundDB)) - for cdb in (db for db in dbs if isinstance(db, CompoundDB)): - _databases_recursive(cdb, output) - else: - output.append(database) - # END handle database type - - - class GitDB(FileDBBase, ObjectDBW, CompoundDB): """A git-style object database, which contains all objects in the 'objects' subdirectory""" @@ -96,42 +79,3 @@ def set_ostream(self, ostream): #} END objectdbw interface - #{ Interface - - def partial_to_complete_sha_hex(self, partial_hexsha): - """ - :return: 20 byte binary sha1 from the given less-than-40 byte hexsha - :param partial_hexsha: hexsha with less than 40 byte - :raise AmbiguousObjectName: """ - databases = list() - _databases_recursive(self, databases) - - if len(partial_hexsha) % 2 != 0: - partial_binsha = hex_to_bin(partial_hexsha + "0") - else: - partial_binsha = hex_to_bin(partial_hexsha) - # END assure successful binary conversion - - candidate = None - for db in databases: - full_bin_sha = None - try: - if isinstance(db, LooseObjectDB): - full_bin_sha = db.partial_to_complete_sha_hex(partial_hexsha) - else: - full_bin_sha = db.partial_to_complete_sha(partial_binsha) - # END handle database type - except BadObject: - continue - # END ignore bad objects - if full_bin_sha: - if candidate and candidate != full_bin_sha: - raise AmbiguousObjectName(partial_hexsha) - candidate = full_bin_sha - # END handle candidate - # END for each db - if not candidate: - raise BadObject(partial_binsha) - return candidate - - #} END interface diff --git a/test/db/test_git.py b/test/db/test_git.py index 1c0c39c96..d2ae10bad 100644 --- a/test/db/test_git.py +++ b/test/db/test_git.py @@ -20,9 +20,16 @@ def test_reading(self): sha_list = list(gdb.sha_iter()) assert len(sha_list) == gdb.size() + + # This is actually a test for compound functionality, but it doesn't + # have a separate test module # test partial shas - for binsha in sha_list: - assert gdb.partial_to_complete_sha_hex(bin_to_hex(binsha)[:8]) == binsha + # this one as uneven and quite short + assert gdb.partial_to_complete_sha_hex('155b6') == hex_to_bin("155b62a9af0aa7677078331e111d0f7aa6eb4afc") + + # mix even/uneven hexshas + for i, binsha in enumerate(sha_list): + assert gdb.partial_to_complete_sha_hex(bin_to_hex(binsha)[:8-(i%2)]) == binsha # END for each sha self.failUnlessRaises(BadObject, gdb.partial_to_complete_sha_hex, "0000") From ac7d4757ab4041f5f0f5806934130024b098bb82 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 7 Jul 2010 12:10:49 +0200 Subject: [PATCH 0052/2375] Fixed bug caused by incorrect comparison of 'filled-up' binary shas, as it would compare even the filling, instead of taking the canonical length into account and hence ignore the last 4 bytes if the original hex sha had an odd length --- db/base.py | 5 +++-- db/pack.py | 8 ++++++-- fun.py | 21 ++++++++++++++++++++- pack.py | 28 ++++++++++++++++------------ test/db/test_pack.py | 4 ++-- test/test_pack.py | 4 ++-- 6 files changed, 49 insertions(+), 21 deletions(-) diff --git a/db/base.py b/db/base.py index ebd5040a5..1914dbbce 100644 --- a/db/base.py +++ b/db/base.py @@ -287,7 +287,8 @@ def partial_to_complete_sha_hex(self, partial_hexsha): databases = list() _databases_recursive(self, databases) - if len(partial_hexsha) % 2 != 0: + len_partial_hexsha = len(partial_hexsha) + if len_partial_hexsha % 2 != 0: partial_binsha = hex_to_bin(partial_hexsha + "0") else: partial_binsha = hex_to_bin(partial_hexsha) @@ -300,7 +301,7 @@ def partial_to_complete_sha_hex(self, partial_hexsha): if hasattr(db, 'partial_to_complete_sha_hex'): full_bin_sha = db.partial_to_complete_sha_hex(partial_hexsha) else: - full_bin_sha = db.partial_to_complete_sha(partial_binsha) + full_bin_sha = db.partial_to_complete_sha(partial_binsha, len_partial_hexsha) # END handle database type except BadObject: continue diff --git a/db/pack.py b/db/pack.py index 47d511378..0ec8a4e3b 100644 --- a/db/pack.py +++ b/db/pack.py @@ -177,13 +177,17 @@ def entities(self): """:return: list of pack entities operated upon by this database""" return [ item[1] for item in self._entities ] - def partial_to_complete_sha(self, partial_binsha): + def partial_to_complete_sha(self, partial_binsha, canonical_length): """:return: 20 byte sha as inferred by the given partial binary sha + :param partial_binsha: binary sha with less than 20 bytes + :param canonical_length: length of the corresponding canonical representation. + It is required as binary sha's cannot display whether the original hex sha + had an odd or even number of characters :raise AmbiguousObjectName: :raise BadObject: """ candidate = None for item in self._entities: - item_index = item[1].index().partial_sha_to_index(partial_binsha) + item_index = item[1].index().partial_sha_to_index(partial_binsha, canonical_length) if item_index is not None: sha = item[1].index().sha(item_index) if candidate and candidate != sha: diff --git a/fun.py b/fun.py index ccd8c0fc5..e8bc35531 100644 --- a/fun.py +++ b/fun.py @@ -40,7 +40,8 @@ chunk_size = 1000*mmap.PAGESIZE __all__ = ('is_loose_object', 'loose_object_header_info', 'msb_size', 'pack_object_header_info', - 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data' ) + 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data', + 'is_equal_canonical_sha' ) #{ Routines @@ -223,5 +224,23 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_fi # yes, lets use the exact same error message that git uses :) assert i == delta_buf_size, "delta replay has gone wild" + +def is_equal_canonical_sha(canonical_length, match, sha1): + """ + :return: True if the given lhs and rhs 20 byte binary shas + The comparison will take the canonical_length of the match sha into account, + hence the comparison will only use the last 4 bytes for uneven canonical representations + :param match: less than 20 byte sha + :param sha1: 20 byte sha""" + binary_length = canonical_length/2 + if match[:binary_length] != sha1[:binary_length]: + return False + + if canonical_length - binary_length and \ + (ord(match[-1]) ^ ord(sha1[len(match)-1])) & 0xf0: + return False + # END handle uneven canonnical length + return True + #} END routines diff --git a/pack.py b/pack.py index ab7c9b677..6966c295f 100644 --- a/pack.py +++ b/pack.py @@ -12,6 +12,7 @@ from fun import ( pack_object_header_info, + is_equal_canonical_sha, type_id_to_type_map, write_object, stream_copy, @@ -303,24 +304,26 @@ def sha_to_index(self, sha): # END bisect return None - def partial_sha_to_index(self, partial_sha): - """:return: index as in `sha_to_index` or None if the sha was not found in this - index file - :param partial_sha: an at least two bytes of a partial sha + def partial_sha_to_index(self, partial_bin_sha, canonical_length): + """ + :return: index as in `sha_to_index` or None if the sha was not found in this + index file + :param partial_bin_sha: an at least two bytes of a partial binary sha + :param canonical_length: lenght of the original hexadecimal representation of the + given partial binary sha :raise AmbiguousObjectName:""" - if len(partial_sha) < 2: + if len(partial_bin_sha) < 2: raise ValueError("Require at least 2 bytes of partial sha") - first_byte = ord(partial_sha[0]) + first_byte = ord(partial_bin_sha[0]) get_sha = self.sha lo = 0 # lower index, the left bound of the bisection if first_byte != 0: lo = self._fanout_table[first_byte-1] hi = self._fanout_table[first_byte] # the upper, right bound of the bisection - len_partial = len(partial_sha) # fill the partial to full 20 bytes - filled_sha = partial_sha + '\0'*(20 - len_partial) + filled_sha = partial_bin_sha + '\0'*(20 - len(partial_bin_sha)) # find lowest while lo < hi: @@ -336,14 +339,15 @@ def partial_sha_to_index(self, partial_sha): lo = mid + 1 # END handle midpoint # END bisect - if lo < self.size: + + if lo < self.size(): cur_sha = get_sha(lo) - if cur_sha[:len_partial] == partial_sha: + if is_equal_canonical_sha(canonical_length, partial_bin_sha, cur_sha): next_sha = None - if lo+1 < self.size: + if lo+1 < self.size(): next_sha = get_sha(lo+1) if next_sha and next_sha == cur_sha: - raise AmbiguousObjectName(partial_sha) + raise AmbiguousObjectName(partial_bin_sha) return lo # END if we have a match # END if we found something diff --git a/test/db/test_pack.py b/test/db/test_pack.py index c8974b29b..0386b3f80 100644 --- a/test/db/test_pack.py +++ b/test/db/test_pack.py @@ -55,7 +55,7 @@ def test_writing(self, path): for i, sha in enumerate(sha_list): short_sha = sha[:max((i % max_bytes), min_bytes)] try: - assert pdb.partial_to_complete_sha(short_sha) == sha + assert pdb.partial_to_complete_sha(short_sha, len(short_sha)*2) == sha except AmbiguousObjectName: num_ambiguous += 1 pass # valid, we can have short objects @@ -67,4 +67,4 @@ def test_writing(self, path): # assert num_ambiguous # non-existing - self.failUnlessRaises(BadObject, pdb.partial_to_complete_sha, "\0\0") + self.failUnlessRaises(BadObject, pdb.partial_to_complete_sha, "\0\0", 4) diff --git a/test/test_pack.py b/test/test_pack.py index a9db19178..717d07e46 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -60,10 +60,10 @@ def _assert_index_file(self, index, version, size): # verify partial sha for l in (4,8,11,17,20): - assert index.partial_sha_to_index(sha[:l]) == oidx + assert index.partial_sha_to_index(sha[:l], l*2) == oidx # END for each object index in indexfile - self.failUnlessRaises(ValueError, index.partial_sha_to_index, "\0") + self.failUnlessRaises(ValueError, index.partial_sha_to_index, "\0", 2) def _assert_pack_file(self, pack, version, size): From f534e6e9a24f2ac7e7e0f3679551b512d4af569a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 8 Jul 2010 11:24:20 +0200 Subject: [PATCH 0053/2375] Added fixes to setup.py to allow easy_installation --- ext/async | 2 +- setup.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/ext/async b/ext/async index 76f15fc4b..081978422 160000 --- a/ext/async +++ b/ext/async @@ -1 +1 @@ -Subproject commit 76f15fc4b3e3ccb0160d6c887181f29095d16f23 +Subproject commit 0819784229dc98f92d2c57d740c9aebd533846d6 diff --git a/setup.py b/setup.py index b6c2c414b..1afeb3e17 100755 --- a/setup.py +++ b/setup.py @@ -1,6 +1,60 @@ #!/usr/bin/env python from distutils.core import setup, Extension - +from distutils.command.build_py import build_py + +import os, sys + +# wow, this is a mixed bag ... I am pretty upset about all of this ... +setuptools_build_py_module = None +try: + # don't pull it in if we don't have to + if 'setuptools' in sys.modules: + import setuptools.command.build_py as setuptools_build_py_module +except ImportError: + pass + +def get_data_files(self): + """Can you feel the pain ? So, in python2.5 and python2.4 coming with maya, + the line dealing with the ``plen`` has a bug which causes it to truncate too much. + It is fixed in the system interpreters as they receive patches, and shows how + bad it is if something doesn't have proper unittests. + The code here is a plain copy of the python2.6 version which works for all. + + Generate list of '(package,src_dir,build_dir,filenames)' tuples""" + data = [] + if not self.packages: + return data + + # this one is just for the setup tools ! They don't iniitlialize this variable + # when they should, but do it on demand using this method.Its crazy + if hasattr(self, 'analyze_manifest'): + self.analyze_manifest() + # END handle setuptools ... + + for package in self.packages: + # Locate package source directory + src_dir = self.get_package_dir(package) + + # Compute package build directory + build_dir = os.path.join(*([self.build_lib] + package.split('.'))) + + # Length of path to strip from found files + plen = 0 + if src_dir: + plen = len(src_dir)+1 + + # Strip directory from globbed filenames + filenames = [ + file[plen:] for file in self.find_data_files(package, src_dir) + ] + data.append((package, src_dir, build_dir, filenames)) + return data + +build_py.get_data_files = get_data_files +if setuptools_build_py_module: + setuptools_build_py_module.build_py._get_data_files = get_data_files +# END apply setuptools patch too + setup(name = "gitdb", version = "0.5.0", description = "Git Object Database", @@ -14,5 +68,6 @@ ext_modules=[Extension('gitdb._fun', ['_fun.c'])], license = "BSD License", requires=('async (>=0.6.0)',), + install_requires='async >= 0.6.0', long_description = """GitDB is a pure-Python git object database""" ) From ebf1ead5fb593bc559a96581b60f05165967d35d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 9 Jul 2010 11:14:47 +0200 Subject: [PATCH 0054/2375] stream: adjusted code to allow compilation in python 2.4. It doesn't work though as the mmap implementation isn't advanced enough, but parent projects can at least import gitdb, and possibly use different implementations on demand --- ext/async | 2 +- stream.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/async b/ext/async index 081978422..2842d1eae 160000 --- a/ext/async +++ b/ext/async @@ -1 +1 @@ -Subproject commit 0819784229dc98f92d2c57d740c9aebd533846d6 +Subproject commit 2842d1eaee8411f7d09c6dc533465b2a404740ec diff --git a/stream.py b/stream.py index 675ccf27e..90bfc996d 100644 --- a/stream.py +++ b/stream.py @@ -167,7 +167,7 @@ def compressed_bytes_read(self): #} END interface - def seek(self, offset, whence=os.SEEK_SET): + def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): """Allows to reset the stream to restart reading :raise ValueError: If offset and whence are not 0""" if offset != 0 or whence != os.SEEK_SET: @@ -407,7 +407,7 @@ def read(self, count=0): self._br += len(data) return data - def seek(self, offset, whence=os.SEEK_SET): + def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): """Allows to reset the stream to restart reading :raise ValueError: If offset and whence are not 0""" @@ -517,7 +517,7 @@ def write(self, data): def close(self): self.buf.write(self.zip.flush()) - def seek(self, offset, whence=os.SEEK_SET): + def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): """Seeking currently only supports to rewind written data Multiple writes are not supported""" if offset != 0 or whence != os.SEEK_SET: From 18152febd428e67b86bb4fb68ec1691d4de75a9c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 9 Jul 2010 11:18:06 +0200 Subject: [PATCH 0055/2375] Bumped version to 0.5.1, added changelog to documentation --- doc/source/changes.rst | 12 ++++++++++++ doc/source/conf.py | 2 +- doc/source/index.rst | 1 + setup.py | 6 +++--- stream.py | 6 +++--- util.py | 43 ++++++++++++++++++++++++++++++++++++++---- 6 files changed, 59 insertions(+), 11 deletions(-) create mode 100644 doc/source/changes.rst diff --git a/doc/source/changes.rst b/doc/source/changes.rst new file mode 100644 index 000000000..84738ae05 --- /dev/null +++ b/doc/source/changes.rst @@ -0,0 +1,12 @@ +######### +Changelog +######### +***** +0.5.1 +***** +* Restored most basic python 2.4 compatibility, such that gitdb can be imported within python 2.4, pack access cannot work though. This at least allows Super-Projects to provide their own workarounds, or use everything but pack support. + +***** +0.5.0 +***** +Initial Release diff --git a/doc/source/conf.py b/doc/source/conf.py index 8e2585c2f..e10addb8d 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -47,7 +47,7 @@ # The short X.Y version. version = '0.5' # The full version, including alpha/beta/rc tags. -release = '0.5.0' +release = '0.5.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/source/index.rst b/doc/source/index.rst index 409c78e99..d414cb22f 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -14,6 +14,7 @@ Contents: intro tutorial api + changes Indices and tables ================== diff --git a/setup.py b/setup.py index 1afeb3e17..73d39d09f 100755 --- a/setup.py +++ b/setup.py @@ -56,7 +56,7 @@ def get_data_files(self): # END apply setuptools patch too setup(name = "gitdb", - version = "0.5.0", + version = "0.5.1", description = "Git Object Database", author = "Sebastian Thiel", author_email = "byronimo@gmail.com", @@ -67,7 +67,7 @@ def get_data_files(self): package_dir = {'gitdb':''}, ext_modules=[Extension('gitdb._fun', ['_fun.c'])], license = "BSD License", - requires=('async (>=0.6.0)',), - install_requires='async >= 0.6.0', + requires=('async (>=0.6.1)',), + install_requires='async >= 0.6.1', long_description = """GitDB is a pure-Python git object database""" ) diff --git a/stream.py b/stream.py index 90bfc996d..3e55c83a4 100644 --- a/stream.py +++ b/stream.py @@ -170,7 +170,7 @@ def compressed_bytes_read(self): def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): """Allows to reset the stream to restart reading :raise ValueError: If offset and whence are not 0""" - if offset != 0 or whence != os.SEEK_SET: + if offset != 0 or whence != getattr(os, 'SEEK_SET', 0): raise ValueError("Can only seek to position 0") # END handle offset @@ -411,7 +411,7 @@ def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): """Allows to reset the stream to restart reading :raise ValueError: If offset and whence are not 0""" - if offset != 0 or whence != os.SEEK_SET: + if offset != 0 or whence != getattr(os, 'SEEK_SET', 0): raise ValueError("Can only seek to position 0") # END handle offset self._br = 0 @@ -520,7 +520,7 @@ def close(self): def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): """Seeking currently only supports to rewind written data Multiple writes are not supported""" - if offset != 0 or whence != os.SEEK_SET: + if offset != 0 or whence != getattr(os, 'SEEK_SET', 0): raise ValueError("Can only seek to position 0") # END handle offset self.buf.seek(0) diff --git a/util.py b/util.py index 6b2f91073..3316c24f7 100644 --- a/util.py +++ b/util.py @@ -3,7 +3,14 @@ import mmap import sys import errno -import cStringIO + +from cStringIO import StringIO + +# in py 2.4, StringIO is only StringI, without write support. +# Hence we must use the python implementation for this +if sys.version_info[1] < 5: + from StringIO import StringIO +# END handle python 2.4 try: import async.mod.zlib as zlib @@ -73,6 +80,29 @@ def unpack_from(fmt, data, offset=0): #} END Aliases +#{ compatibility stuff ... + +class _RandomAccessStringIO(object): + """Wrapper to provide required functionality in case memory maps cannot or may + not be used. This is only really required in python 2.4""" + __slots__ = '_sio' + + def __init__(self, buf=''): + self._sio = StringIO(buf) + + def __getattr__(self, attr): + return getattr(self._sio, attr) + + def __len__(self): + return len(self.getvalue()) + + def __getitem__(self, i): + return self.getvalue()[i] + + def __getslice__(self, start, end): + return self.getvalue()[start:end] + +#} END compatibility stuff ... #{ Routines @@ -94,7 +124,7 @@ def allocate_memory(size): # this of course may fail if the amount of memory is not available in # one chunk - would only be the case in python 2.4, being more likely on # 32 bit systems. - return cStringIO.StringIO("\0"*size) + return _RandomAccessStringIO("\0"*size) # END handle memory allocation @@ -109,7 +139,12 @@ def file_contents_ro(fd, stream=False, allow_mmap=True): try: if allow_mmap: # supports stream and random access - return mmap.mmap(fd, 0, access=mmap.ACCESS_READ) + try: + return mmap.mmap(fd, 0, access=mmap.ACCESS_READ) + except EnvironmentError: + # python 2.4 issue, 0 wants to be the actual size + return mmap.mmap(fd, os.fstat(fd).st_size, access=mmap.ACCESS_READ) + # END handle python 2.4 except OSError: pass # END exception handling @@ -117,7 +152,7 @@ def file_contents_ro(fd, stream=False, allow_mmap=True): # read manully contents = os.read(fd, os.fstat(fd).st_size) if stream: - return cStringIO.StringIO(contents) + return _RandomAccessStringIO(contents) return contents def file_contents_ro_filepath(filepath, stream=False, allow_mmap=True, flags=0): From 449e80bf5f04c9ccc3b1b8926b833227d5fe2d5b Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 13 Jul 2010 10:06:27 +0200 Subject: [PATCH 0056/2375] byteswapping in offsets method will only be done if required - previously it was always performed even though the byte order of the system didn't require it --- pack.py | 5 ++++- test/test_example.py | 10 +++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/pack.py b/pack.py index 6966c295f..91323fcce 100644 --- a/pack.py +++ b/pack.py @@ -52,6 +52,8 @@ from itertools import izip import array import os +import sys + __all__ = ('PackIndexFile', 'PackFile', 'PackEntity') @@ -272,7 +274,8 @@ def offsets(self): a.fromstring(buffer(self._data, self._pack_offset, self._pack_64_offset - self._pack_offset)) # networkbyteorder to something array likes more - a.byteswap() + if sys.byteorder == 'little': + a.byteswap() return a else: return tuple(self.offset(index) for index in xrange(self.size())) diff --git a/test/test_example.py b/test/test_example.py index dc82436ec..3fc3fcf5e 100644 --- a/test/test_example.py +++ b/test/test_example.py @@ -22,9 +22,13 @@ def test_base(self): assert ldb.has_object(oinfo.binsha) # END for each sha in database # assure we close all files - del(ostream) - del(oinfo) - + try: + del(ostream) + del(oinfo) + except UnboundLocalError: + pass + # END ignore exception if there are no loose objects + data = "my data" istream = IStream("blob", len(data), StringIO(data)) From 425ecf04aa5038c3d46b01ca20de17c51ef6c4e5 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 13 Jul 2010 10:52:11 +0200 Subject: [PATCH 0057/2375] Adjusted setup.py to deal more gracefully with build failures of our optional extensions --- setup.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 73d39d09f..265156df2 100755 --- a/setup.py +++ b/setup.py @@ -1,6 +1,7 @@ #!/usr/bin/env python from distutils.core import setup, Extension from distutils.command.build_py import build_py +from distutils.command.build_ext import build_ext import os, sys @@ -10,9 +11,19 @@ # don't pull it in if we don't have to if 'setuptools' in sys.modules: import setuptools.command.build_py as setuptools_build_py_module + from setuptools.command.build_ext import build_ext except ImportError: pass +class build_ext_nofail(build_ext): + """Doesn't fail when build our optional extensions""" + def run(self): + try: + build_ext.run(self) + except Exception: + print "Ignored failure when building extensions, pure python modules will be used instead" + # END ignore errors + def get_data_files(self): """Can you feel the pain ? So, in python2.5 and python2.4 coming with maya, the line dealing with the ``plen`` has a bug which causes it to truncate too much. @@ -55,7 +66,8 @@ def get_data_files(self): setuptools_build_py_module.build_py._get_data_files = get_data_files # END apply setuptools patch too -setup(name = "gitdb", +setup(cmdclass={'build_ext':build_ext_nofail}, + name = "gitdb", version = "0.5.1", description = "Git Object Database", author = "Sebastian Thiel", From 274c5c89ba973b0ae7ee56424b160417f33d1d5e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 7 Oct 2010 18:56:53 +0200 Subject: [PATCH 0058/2375] Added frame for actual implementation of the aggregation - for now we just implement a forward-merge of the chunks, then the reverse version once there is some more knowledge on how this works --- ext/async | 2 +- fun.py | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- stream.py | 26 +++++++++++++++-- util.py | 4 +++ 4 files changed, 109 insertions(+), 6 deletions(-) diff --git a/ext/async b/ext/async index 2842d1eae..5992bb6c8 160000 --- a/ext/async +++ b/ext/async @@ -1 +1 @@ -Subproject commit 2842d1eaee8411f7d09c6dc533465b2a404740ec +Subproject commit 5992bb6c85973ed81c54c71fef42e2413cd29e88 diff --git a/fun.py b/fun.py index e8bc35531..f18d567ac 100644 --- a/fun.py +++ b/fun.py @@ -41,7 +41,48 @@ __all__ = ('is_loose_object', 'loose_object_header_info', 'msb_size', 'pack_object_header_info', 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data', - 'is_equal_canonical_sha' ) + 'is_equal_canonical_sha', 'apply_delta_chunks', 'reverse_merge_deltas', + 'merge_deltas') + + +#{ Structures + +class DeltaChunk(object): + """Represents a piece of a delta, it can either add new data, or copy existing + one from a source buffer""" + __slots__ = ( + 'to', # start offset in the target buffer in bytes + 'ts', # size of this chunk in the target buffer in bytes + 'so', # start offset in the source buffer in bytes or None + 'data' # chunk of bytes to be added to the target buffer or None + ) + + def __init__(self, to, ts, so, data): + self.to = to + self.ts = ts + self.so = so + self.data = data + + #{ Interface + + def abssize(self): + return self.to + self.ts + + def apply(self, source, target): + """Apply own data to the target buffer + :param source: buffer providing source bytes for copy operations + :param target: target buffer large enough to contain all the changes to be applied""" + if self.data is not None: + # APPEND DATA + pass + else: + # COPY DATA FROM SOURCE + pass + # END handle chunk mode + + #} END interface + +#} END structures #{ Routines @@ -164,10 +205,46 @@ def stream_copy(read, write, size, chunk_size): return dbw +def reverse_merge_deltas(dcl, dstreams): + """Read the condensed delta chunk information from dstream and merge its information + into a list of existing delta chunks + :param dcl: list of DeltaChunk objects, may be empty initially, and will be changed + during the merge process + :param dstreams: iterable of delta stream objects. They must be ordered latest first, + hence the delta to be applied last comes first, then its ancestors + :return: None""" + raise NotImplementedError("This is left out up until we actually iterate the dstreams - they are prefetched right now") + +def merge_deltas(dcl, dstreams): + """Read the condensed delta chunk information from dstream and merge its information + into a list of existing delta chunks + :param dcl: list of DeltaChunk objects, may be empty initially, and will be changed + during the merge process + :param dstreams: iterable of delta stream objects. They must be ordered latest last, + hence the delta to be applied last comes last, its oldest ancestor first + :return: None""" + for ds in dstreams: + buf = ds.read() + i, src_size = msb_size(buf) + i, target_size = msb_size(buf, i) + + # parse the commands + + # END for each delta stream + +def apply_delta_chunks(src_buf, src_buf_size, dcl, target): + """ + Apply data from a delta chunk list and a source buffer to the target stream + + :param src_buf: random access data from which the delta was created + :param src_buf_size: size of the source buffer in bytes + :param delta_buf_size: size fo the delta buffer in bytes + :param target: ostream with a write method""" + + def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_file): """ - Apply data from a delta buffer using a source buffer to the target file, - which will be written to + Apply data from a delta buffer using a source buffer to the target file :param src_buf: random access data from which the delta was created :param src_buf_size: size of the source buffer in bytes diff --git a/stream.py b/stream.py index 3e55c83a4..74dc2b3c4 100644 --- a/stream.py +++ b/stream.py @@ -7,7 +7,9 @@ from fun import ( msb_size, stream_copy, - apply_delta_data, + apply_delta_data, + apply_delta_chunks, + merge_deltas, delta_types ) @@ -320,9 +322,29 @@ def __init__(self, stream_list): self._br = 0 def _set_cache_(self, attr): + # Aggregate all deltas into one delta in reverse order. Hence we take + # the last delta, and reverse-merge its ancestor delta, until we receive + # the final delta data stream. + dcl = list() + reverse_merge_deltas(dcl, self._dstreams) + + if len(dcl) == 0: + self._size = 0 + self._mm_target = allocate_memory(0) + return + # END handle empty list + + self._size = dcl[-1].abssize() + self._mm_target = allocate_memory(self._size) + + bbuf = allocate_memory(self._bstream.size) + stream_copy(self._bstream.read, bbuf.write, base_size, 256 * mmap.PAGESIZE) + + apply_delta_chunks(bbuf, self._bstream.size, dcl, self._mm_target) + + def _set_cache_old(self, attr): """If we are here, we apply the actual deltas""" - # prefetch information buffer_info_list = list() max_target_size = 0 for dstream in self._dstreams: diff --git a/util.py b/util.py index 3316c24f7..1ea182025 100644 --- a/util.py +++ b/util.py @@ -117,6 +117,10 @@ def make_sha(source=''): def allocate_memory(size): """:return: a file-protocol accessible memory block of the given size""" + if size == 0: + return _RandomAccessStringIO('') + # END handle empty chunks gracefully + try: return mmap.mmap(-1, size) # read-write by default except EnvironmentError: From afefae6de6fee561842c1a09069f9593b6bd62aa Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 7 Oct 2010 22:46:51 +0200 Subject: [PATCH 0059/2375] Implemented everything around the actual merge-algorithm, which appears to be the heart of the whole thing --- fun.py | 236 +++++++++++++++++++++++++++++++++++++++++++++++------- stream.py | 14 ++-- 2 files changed, 214 insertions(+), 36 deletions(-) diff --git a/fun.py b/fun.py index f18d567ac..c2cbed504 100644 --- a/fun.py +++ b/fun.py @@ -41,12 +41,42 @@ __all__ = ('is_loose_object', 'loose_object_header_info', 'msb_size', 'pack_object_header_info', 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data', - 'is_equal_canonical_sha', 'apply_delta_chunks', 'reverse_merge_deltas', - 'merge_deltas') + 'is_equal_canonical_sha', 'reverse_merge_deltas', + 'merge_deltas', 'DeltaChunkList') #{ Structures +def _trunc_delta(d, size): + """Truncate the given delta to the given size + :param size: size relative to our target offset, may not be 0, must be smaller or equal + to our size""" + if size == 0: + raise ValueError("size to truncate to must not be 0") + if d.ts == size: + return + if size > d.ts: + raise ValueError("Cannot truncate delta 'larger'") + + d.ts = size + + # NOTE: data is truncated automatically when applying the delta + # MUST NOT DO THIS HERE, see _split_delta + +def _move_delta_offset(d, bytes): + """Move the delta by the given amount of bytes, reducing its size so that its + right bound stays static + :param bytes: amount of bytes to move, must be smaller than delta size""" + if bytes >= d.ts: + raise ValueError("Cannot move offset that much") + + d.to += bytes + d.ts -= bytes + if d.data: + d.data = d.data[bytes:] + # END handle data + + class DeltaChunk(object): """Represents a piece of a delta, it can either add new data, or copy existing one from a source buffer""" @@ -68,20 +98,120 @@ def __init__(self, to, ts, so, data): def abssize(self): return self.to + self.ts - def apply(self, source, target): + def apply(self, source, write): """Apply own data to the target buffer :param source: buffer providing source bytes for copy operations - :param target: target buffer large enough to contain all the changes to be applied""" - if self.data is not None: - # APPEND DATA - pass - else: + :param write: write method to call with data to write""" + if self.data is None: # COPY DATA FROM SOURCE - pass + write(buffer(source, self.so, self.ts)) + else: + # APPEND DATA + # whats faster: if + 4 function calls or just a write with a slice ? + if self.ts < len(self.data): + write(self.data[:self.ts]) + else: + write(self.data) + # END handle truncation # END handle chunk mode #} END interface +def _closest_index(dcl, absofs): + """:return: index at which the given absofs should be inserted. The index points + to the DeltaChunk with a target buffer absofs that equals or is greater than + absofs + :note: global method for performance only, it belongs to DeltaChunkList""" + # TODO: binary search !! + for i,d in enumerate(dcl): + if absofs >= d.to: + return i + # END for each delta absofs + raise AssertionError("Should never be here") + +def _split_delta(dcl, absofs, di=None): + """Split the delta at di into two deltas, adjusting their sizes, absofss and data + accordingly and adding them to the dcl. + :param absofs: absolute absofs at which to split the delta + :param di: a pre-determined delta-index, or None if it should be retrieved + :note: it will not split if it + :return: the closest index which has been split ( usually di if given) + :note: belongs to DeltaChunkList""" + if di is None: + di = _closest_index(dcl, absofs) + + d = dcl[di] + if d.to == absofs or d.abssize() == absofs: + return di + + _trunc_delta(d, absofs - d.to) + + # insert new one + ds = d.abssize() + relsize = absofs - ds + + self.insert(di+1, DeltaChunk( ds, + relsize, + (d.so and ds) or None, + (d.data and d.data[relsize:]) or None)) + # END adjust next one + return di + +def _merge_delta(dcl, d): + """Merge the given DeltaChunk instance into the dcl""" + index = _closest_index(dcl, d.to) + od = dcl[index] + + if d.data is None: + if od.data: + # OVERWRITE DATA + pass + else: + # MERGE SOURCE AREA + pass + # END overwrite data + else: + if od.data: + # MERGE DATA WITH DATA + pass + else: + # INSERT DATA INTO COPY AREA + pass + # END combine or insert data + # END handle chunk mode + + +class DeltaChunkList(list): + """List with special functionality to deal with DeltaChunks""" + + def init(self, size): + """Intialize this instance with chunks defining to fill up size from a base + buffer of equal size""" + if len(self) != 0: + return + # pretend we have one huge delta chunk, which just copies everything + # from source to destination + maxint32 = 2**32 + for x in range(0, size, maxint32): + self.append(DeltaChunk(x, maxint32, x, None)) + # END create copy chunks + offset = x*maxint32 + remainder = size-offset + if remainder: + self.append(DeltaChunk(offset, remainder, offset, None)) + # END handle all done in loop + + def terminate_at(self, size): + """Chops the list at the given size, splitting and removing DeltaNodes + as required""" + di = _closest_index(self, size) + d = self[di] + rsize = size - d.to + if rsize: + _trunc_delta(d, rsize) + # END truncate last node if possible + del(self[di+(rsize!=0):]) + #} END structures #{ Routines @@ -204,12 +334,10 @@ def stream_copy(read, write, size, chunk_size): # END duplicate data return dbw - def reverse_merge_deltas(dcl, dstreams): """Read the condensed delta chunk information from dstream and merge its information into a list of existing delta chunks - :param dcl: list of DeltaChunk objects, may be empty initially, and will be changed - during the merge process + :param dcl: see merge_deltas :param dstreams: iterable of delta stream objects. They must be ordered latest first, hence the delta to be applied last comes first, then its ancestors :return: None""" @@ -218,31 +346,78 @@ def reverse_merge_deltas(dcl, dstreams): def merge_deltas(dcl, dstreams): """Read the condensed delta chunk information from dstream and merge its information into a list of existing delta chunks - :param dcl: list of DeltaChunk objects, may be empty initially, and will be changed + :param dcl: DeltaChunkList, may be empty initially, and will be changed during the merge process :param dstreams: iterable of delta stream objects. They must be ordered latest last, hence the delta to be applied last comes last, its oldest ancestor first :return: None""" for ds in dstreams: - buf = ds.read() - i, src_size = msb_size(buf) - i, target_size = msb_size(buf, i) + db = ds.read() + delta_buf_size = ds.size + + # read header + i, src_size = msb_size(db) + i, target_size = msb_size(db, i) - # parse the commands + if len(dcl) == 0: + dcl.init(target_size) + # END handle empty list + + # interpret opcodes + tbw = 0 # amount of target bytes written + while i < delta_buf_size: + c = ord(db[i]) + i += 1 + if c & 0x80: + cp_off, cp_size = 0, 0 + if (c & 0x01): + cp_off = ord(db[i]) + i += 1 + if (c & 0x02): + cp_off |= (ord(db[i]) << 8) + i += 1 + if (c & 0x04): + cp_off |= (ord(db[i]) << 16) + i += 1 + if (c & 0x08): + cp_off |= (ord(db[i]) << 24) + i += 1 + if (c & 0x10): + cp_size = ord(db[i]) + i += 1 + if (c & 0x20): + cp_size |= (ord(db[i]) << 8) + i += 1 + if (c & 0x40): + cp_size |= (ord(db[i]) << 16) + i += 1 + + if not cp_size: + cp_size = 0x10000 + + rbound = cp_off + cp_size + if (rbound < cp_size or + rbound > src_size): + break + + _merge_delta(dcl, DeltaChunk(tbw, cp_size, cp_off, None)) + tbw += cp_size + elif c: + # TODO: Concatenate multiple deltachunks + _merge_delta(dcl, DeltaChunk(tbw, c, None, db[i:i+c])) + i += c + tbw += c + else: + raise ValueError("unexpected delta opcode 0") + # END handle command byte + # END while processing delta data + + dcl.terminate_at(target_size) # END for each delta stream -def apply_delta_chunks(src_buf, src_buf_size, dcl, target): - """ - Apply data from a delta chunk list and a source buffer to the target stream - - :param src_buf: random access data from which the delta was created - :param src_buf_size: size of the source buffer in bytes - :param delta_buf_size: size fo the delta buffer in bytes - :param target: ostream with a write method""" - -def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_file): +def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): """ Apply data from a delta buffer using a source buffer to the target file @@ -250,10 +425,9 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_fi :param src_buf_size: size of the source buffer in bytes :param delta_buf_size: size fo the delta buffer in bytes :param delta_buf: random access delta data - :param target_file: file like object to write the result to + :param write: write method taking a chunk of bytes :note: transcribed to python from the similar routine in patch-delta.c""" i = 0 - twrite = target_file.write db = delta_buf while i < delta_buf_size: c = ord(db[i]) @@ -289,9 +463,9 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, target_fi if (rbound < cp_size or rbound > src_buf_size): break - twrite(buffer(src_buf, cp_off, cp_size)) + write(buffer(src_buf, cp_off, cp_size)) elif c: - twrite(db[i:i+c]) + write(db[i:i+c]) i += c else: raise ValueError("unexpected delta opcode 0") diff --git a/stream.py b/stream.py index 74dc2b3c4..9e507c83b 100644 --- a/stream.py +++ b/stream.py @@ -8,8 +8,8 @@ msb_size, stream_copy, apply_delta_data, - apply_delta_chunks, merge_deltas, + DeltaChunkList, delta_types ) @@ -325,8 +325,8 @@ def _set_cache_(self, attr): # Aggregate all deltas into one delta in reverse order. Hence we take # the last delta, and reverse-merge its ancestor delta, until we receive # the final delta data stream. - dcl = list() - reverse_merge_deltas(dcl, self._dstreams) + dcl = DeltaChunkList() + merge_deltas(dcl, self._dstreams) if len(dcl) == 0: self._size = 0 @@ -338,9 +338,13 @@ def _set_cache_(self, attr): self._mm_target = allocate_memory(self._size) bbuf = allocate_memory(self._bstream.size) - stream_copy(self._bstream.read, bbuf.write, base_size, 256 * mmap.PAGESIZE) + stream_copy(self._bstream.read, bbuf.write, self._bstream.size, 256 * mmap.PAGESIZE) - apply_delta_chunks(bbuf, self._bstream.size, dcl, self._mm_target) + # APPLY CHUNKS + write = self._mm_target.write + for dc in dcl: + dc.apply(bbuf, write) + # END for each deltachunk to apply def _set_cache_old(self, attr): """If we are here, we apply the actual deltas""" From 4d41a878bf0f9171d9a1a44ef885a58c6a025e0d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 8 Oct 2010 01:07:38 +0200 Subject: [PATCH 0060/2375] Initial version of the merge algorithm - the current implementation will lead to quite some fragementation, but that can be improved on once it works --- fun.py | 131 +++++++++++++++++++++++++++++++++++++++++------------- stream.py | 4 +- 2 files changed, 103 insertions(+), 32 deletions(-) diff --git a/fun.py b/fun.py index c2cbed504..2b1419cbb 100644 --- a/fun.py +++ b/fun.py @@ -47,7 +47,7 @@ #{ Structures -def _trunc_delta(d, size): +def _set_delta_rbound(d, size): """Truncate the given delta to the given size :param size: size relative to our target offset, may not be 0, must be smaller or equal to our size""" @@ -63,7 +63,7 @@ def _trunc_delta(d, size): # NOTE: data is truncated automatically when applying the delta # MUST NOT DO THIS HERE, see _split_delta -def _move_delta_offset(d, bytes): +def _move_delta_lbound(d, bytes): """Move the delta by the given amount of bytes, reducing its size so that its right bound stays static :param bytes: amount of bytes to move, must be smaller than delta size""" @@ -71,6 +71,7 @@ def _move_delta_offset(d, bytes): raise ValueError("Cannot move offset that much") d.to += bytes + d.so += bytes d.ts -= bytes if d.data: d.data = d.data[bytes:] @@ -95,7 +96,7 @@ def __init__(self, to, ts, so, data): #{ Interface - def abssize(self): + def rbound(self): return self.to + self.ts def apply(self, source, write): @@ -129,39 +130,35 @@ def _closest_index(dcl, absofs): # END for each delta absofs raise AssertionError("Should never be here") -def _split_delta(dcl, absofs, di=None): - """Split the delta at di into two deltas, adjusting their sizes, absofss and data - accordingly and adding them to the dcl. - :param absofs: absolute absofs at which to split the delta - :param di: a pre-determined delta-index, or None if it should be retrieved - :note: it will not split if it - :return: the closest index which has been split ( usually di if given) +def _split_delta(dcl, d, di, relofs, insert_offset=0): + """Split the delta at di into two deltas, adjusting their sizes, offsets and data + accordingly and adding the new part to the dcl + :param relofs: relative offset at which to split the delta + :param d: delta chunk to split + :param di: index of d in dcl + :param insert_offset: offset for the new split id + :return: newly created DeltaChunk :note: belongs to DeltaChunkList""" - if di is None: - di = _closest_index(dcl, absofs) - - d = dcl[di] - if d.to == absofs or d.abssize() == absofs: - return di + if relofs > d.ts: + raise ValueError("Cannot split behinds a chunks rbound") - _trunc_delta(d, absofs - d.to) + osize = d.ts - relofs + _set_delta_rbound(d, relofs) # insert new one - ds = d.abssize() - relsize = absofs - ds + drb = d.rbound() - self.insert(di+1, DeltaChunk( ds, - relsize, - (d.so and ds) or None, - (d.data and d.data[relsize:]) or None)) - # END adjust next one - return di + nd = DeltaChunk( drb, + osize, + (d.so and d.so + osize) or None, + (d.data and d.data[osize:]) or None ) -def _merge_delta(dcl, d): - """Merge the given DeltaChunk instance into the dcl""" - index = _closest_index(dcl, d.to) - od = dcl[index] + self.insert(di+1+insert_offset, nd) + return nd +def _handle_merge(ld, rd): + """Optimize the layout of the lhs delta and the rhs delta + TODO: Once the default implementation is working""" if d.data is None: if od.data: # OVERWRITE DATA @@ -173,6 +170,7 @@ def _merge_delta(dcl, d): else: if od.data: # MERGE DATA WITH DATA + # overwrite the data at the respective spot pass else: # INSERT DATA INTO COPY AREA @@ -180,6 +178,79 @@ def _merge_delta(dcl, d): # END combine or insert data # END handle chunk mode +def _merge_delta(dcl, d): + """Merge the given DeltaChunk instance into the dcl + :param d: the DeltaChunk to merge""" + cdi = _closest_index(dcl, d.to) # current delta index + cd = dcl[cdi] # current delta + + # either we go at his spot, or after + # cdi either moves one up, or stays + dcl.insert(di + (d.to > cd.to), d) + cdi += d.to == cd.to + + while True: + # are we larger than the current block + if d.to < cd.to: + if d.rbound() >= cd.rbound(): + # xxx|xxx|x + # remove the current item completely + dcl.pop(cdi) + cdi -= 1 + elif d.rbound() > cd.to: + # MOVE ITS LBOUND + # xxx|x--| + _move_delta_lbound(cd, d.rbound() - cd.to) + break + else: + # WE DON'T OVERLAP IT + # this can possibly happen + assert False, "Wow, this can really happen" + break + # END rbound overlap handling + # END lbound overlap handling + else: + if d.to >= cd.rbound(): + #|---|...xx + break + # END + + if d.rbound() >= cd.rbound(): + if d.to == cd.to: + #|xxx|x + # REMOVE CD + dcl.pop(cdi) + cdi -= 1 + else: + # TRUNCATE CD + #|-xx| + _set_delta_rbound(cd, d.to - cd.to) + # END handle offset special case + elif d.to == cd.to: + #|x--| + # we shift it by our size + _move_delta_lbound(cd, d.ts) + else: + #|-x-| + # SPLIT CD AND LBOUND MOVE ITS SECOND PART + # insert offset is required to insert it after us + nd = _split_delta(dcl, cd, cdi, 1) + _move_delta_lbound(nd, d.ts) + break + # END handle rbound overlap + # END handle overlap + + cdi += 1 + if cdi < len(dcl): + cd = dcl[cdi] + else: + break + # END check for end of list + # while our chunk is not completely done + + + + class DeltaChunkList(list): """List with special functionality to deal with DeltaChunks""" @@ -208,7 +279,7 @@ def terminate_at(self, size): d = self[di] rsize = size - d.to if rsize: - _trunc_delta(d, rsize) + _set_delta_rbound(d, rsize) # END truncate last node if possible del(self[di+(rsize!=0):]) diff --git a/stream.py b/stream.py index 9e507c83b..3248ae464 100644 --- a/stream.py +++ b/stream.py @@ -326,7 +326,7 @@ def _set_cache_(self, attr): # the last delta, and reverse-merge its ancestor delta, until we receive # the final delta data stream. dcl = DeltaChunkList() - merge_deltas(dcl, self._dstreams) + merge_deltas(dcl, reversed(self._dstreams)) if len(dcl) == 0: self._size = 0 @@ -334,7 +334,7 @@ def _set_cache_(self, attr): return # END handle empty list - self._size = dcl[-1].abssize() + self._size = dcl[-1].rbound() self._mm_target = allocate_memory(self._size) bbuf = allocate_memory(self._bstream.size) From 48fdcf44c536e9ca1008749cf6cd4547303ca519 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 8 Oct 2010 12:02:15 +0200 Subject: [PATCH 0061/2375] Added new pack to test database to get some ascii deltas, which may possibly help visual debugging ( but probably not ) added plenty of debug code, to realize that the copy operations are not yet correct --- fun.py | 120 +++++++++++------- stream.py | 15 ++- ...bf8e71d8c18879e499335762dd95119d93d9f1.idx | Bin 0 -> 2248 bytes ...f8e71d8c18879e499335762dd95119d93d9f1.pack | Bin 0 -> 3732 bytes test/test_pack.py | 7 +- 5 files changed, 93 insertions(+), 49 deletions(-) create mode 100644 test/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx create mode 100644 test/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.pack diff --git a/fun.py b/fun.py index 2b1419cbb..2d51f62eb 100644 --- a/fun.py +++ b/fun.py @@ -10,6 +10,7 @@ decompressobj = zlib.decompressobj import mmap +from itertools import islice, izip # INVARIANTS OFS_DELTA = 6 @@ -93,7 +94,10 @@ def __init__(self, to, ts, so, data): self.ts = ts self.so = so self.data = data - + + def __repr__(self): + return "DeltaChunk(%i, %i, %s, %s)" % (self.to, self.ts, self.so, self.data or "") + #{ Interface def rbound(self): @@ -105,6 +109,7 @@ def apply(self, source, write): :param write: write method to call with data to write""" if self.data is None: # COPY DATA FROM SOURCE + assert len(source) - self.so - self.ts > 0 write(buffer(source, self.so, self.ts)) else: # APPEND DATA @@ -121,14 +126,16 @@ def apply(self, source, write): def _closest_index(dcl, absofs): """:return: index at which the given absofs should be inserted. The index points to the DeltaChunk with a target buffer absofs that equals or is greater than - absofs + absofs. :note: global method for performance only, it belongs to DeltaChunkList""" # TODO: binary search !! for i,d in enumerate(dcl): - if absofs >= d.to: + if absofs < d.to: + return i-1 + elif absofs == d.to: return i # END for each delta absofs - raise AssertionError("Should never be here") + return len(dcl)-1 def _split_delta(dcl, d, di, relofs, insert_offset=0): """Split the delta at di into two deltas, adjusting their sizes, offsets and data @@ -150,7 +157,7 @@ def _split_delta(dcl, d, di, relofs, insert_offset=0): nd = DeltaChunk( drb, osize, - (d.so and d.so + osize) or None, + d.so + osize, (d.data and d.data[osize:]) or None ) self.insert(di+1+insert_offset, nd) @@ -178,45 +185,51 @@ def _handle_merge(ld, rd): # END combine or insert data # END handle chunk mode -def _merge_delta(dcl, d): +def _merge_delta(dcl, dc): """Merge the given DeltaChunk instance into the dcl :param d: the DeltaChunk to merge""" - cdi = _closest_index(dcl, d.to) # current delta index + if len(dcl) == 0: + dcl.append(dc) + return + # END early return on empty list + + cdi = _closest_index(dcl, dc.to) # current delta index cd = dcl[cdi] # current delta # either we go at his spot, or after # cdi either moves one up, or stays - dcl.insert(di + (d.to > cd.to), d) - cdi += d.to == cd.to + #print "insert at %i" % (cdi + (dc.to > cd.to)) + #print cd, dc + dcl.insert(cdi + (dc.to > cd.to), dc) + cdi += dc.to == cd.to while True: # are we larger than the current block - if d.to < cd.to: - if d.rbound() >= cd.rbound(): + if dc.to < cd.to: + if dc.rbound() >= cd.rbound(): # xxx|xxx|x # remove the current item completely dcl.pop(cdi) cdi -= 1 - elif d.rbound() > cd.to: + elif dc.rbound() > cd.to: # MOVE ITS LBOUND # xxx|x--| - _move_delta_lbound(cd, d.rbound() - cd.to) + _move_delta_lbound(cd, dc.rbound() - cd.to) break else: # WE DON'T OVERLAP IT - # this can possibly happen - assert False, "Wow, this can really happen" + # this can actually happen, once multiple streams are merged break # END rbound overlap handling # END lbound overlap handling else: - if d.to >= cd.rbound(): + if dc.to >= cd.rbound(): #|---|...xx break # END - if d.rbound() >= cd.rbound(): - if d.to == cd.to: + if dc.rbound() >= cd.rbound(): + if dc.to == cd.to: #|xxx|x # REMOVE CD dcl.pop(cdi) @@ -224,18 +237,18 @@ def _merge_delta(dcl, d): else: # TRUNCATE CD #|-xx| - _set_delta_rbound(cd, d.to - cd.to) + _set_delta_rbound(cd, dc.to - cd.to) # END handle offset special case - elif d.to == cd.to: + elif dc.to == cd.to: #|x--| # we shift it by our size - _move_delta_lbound(cd, d.ts) + _move_delta_lbound(cd, dc.ts) else: #|-x-| # SPLIT CD AND LBOUND MOVE ITS SECOND PART # insert offset is required to insert it after us nd = _split_delta(dcl, cd, cdi, 1) - _move_delta_lbound(nd, d.ts) + _move_delta_lbound(nd, dc.ts) break # END handle rbound overlap # END handle overlap @@ -248,30 +261,14 @@ def _merge_delta(dcl, d): # END check for end of list # while our chunk is not completely done - + ## DEBUG ## + dcl.check_integrity() class DeltaChunkList(list): """List with special functionality to deal with DeltaChunks""" - def init(self, size): - """Intialize this instance with chunks defining to fill up size from a base - buffer of equal size""" - if len(self) != 0: - return - # pretend we have one huge delta chunk, which just copies everything - # from source to destination - maxint32 = 2**32 - for x in range(0, size, maxint32): - self.append(DeltaChunk(x, maxint32, x, None)) - # END create copy chunks - offset = x*maxint32 - remainder = size-offset - if remainder: - self.append(DeltaChunk(offset, remainder, offset, None)) - # END handle all done in loop - def terminate_at(self, size): """Chops the list at the given size, splitting and removing DeltaNodes as required""" @@ -283,6 +280,38 @@ def terminate_at(self, size): # END truncate last node if possible del(self[di+(rsize!=0):]) + ## DEBUG ## + self.check_integrity(size) + + def check_integrity(self, target_size=-1): + """Verify the list has non-overlapping chunks only, and the total size matches + target_size + :param target_size: if not -1, the total size of the chain must be target_size + :raise AssertionError: if the size doen't match""" + if target_size > -1: + assert self[-1].rbound() == target_size + assert reduce(lambda x,y: x+y, (d.ts for d in self), 0) == target_size + # END target size verification + + if len(self) < 2: + return + + # check data + for dc in self: + if dc.data: + assert len(dc.data) >= dc.ts + # END for each dc + + left = islice(self, 0, len(self)-1) + right = iter(self) + right.next() + # this is very pythonic - we might have just use index based access here, + # but this could actually be faster + for lft,rgt in izip(left, right): + assert lft.rbound() == rgt.to + assert lft.to + lft.ts == rgt.to + # END for each pair + #} END structures #{ Routines @@ -422,7 +451,8 @@ def merge_deltas(dcl, dstreams): :param dstreams: iterable of delta stream objects. They must be ordered latest last, hence the delta to be applied last comes last, its oldest ancestor first :return: None""" - for ds in dstreams: + for dsi, ds in enumerate(dstreams): + # print "Stream", dsi db = ds.read() delta_buf_size = ds.size @@ -430,10 +460,6 @@ def merge_deltas(dcl, dstreams): i, src_size = msb_size(db) i, target_size = msb_size(db, i) - if len(dcl) == 0: - dcl.init(target_size) - # END handle empty list - # interpret opcodes tbw = 0 # amount of target bytes written while i < delta_buf_size: @@ -475,7 +501,7 @@ def merge_deltas(dcl, dstreams): tbw += cp_size elif c: # TODO: Concatenate multiple deltachunks - _merge_delta(dcl, DeltaChunk(tbw, c, None, db[i:i+c])) + _merge_delta(dcl, DeltaChunk(tbw, c, 0, db[i:i+c])) i += c tbw += c else: @@ -487,6 +513,8 @@ def merge_deltas(dcl, dstreams): # END for each delta stream + # print dcl + def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): """ diff --git a/stream.py b/stream.py index 3248ae464..0cb558d78 100644 --- a/stream.py +++ b/stream.py @@ -346,6 +346,19 @@ def _set_cache_(self, attr): dc.apply(bbuf, write) # END for each deltachunk to apply + self._mm_target.seek(0) + + ## DEBUG ## + mt = self._mm_target + for ds in self._dstreams: + ds.stream.seek(0) + self._bstream.stream.seek(0) + self._set_cache_old(attr) + + import chardet + if chardet.detect(mt[:])['encoding'] == 'ascii': + assert self._mm_target[:] == mt[:] + def _set_cache_old(self, attr): """If we are here, we apply the actual deltas""" @@ -399,7 +412,7 @@ def _set_cache_old(self, attr): stream_copy(dstream.read, ddata.write, dstream.size, 256*mmap.PAGESIZE) ####################################################################### - apply_delta_data(bbuf, src_size, ddata, len(ddata), tbuf) + apply_delta_data(bbuf, src_size, ddata, len(ddata), tbuf.write) ####################################################################### # finally, swap out source and target buffers. The target is now the diff --git a/test/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx b/test/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx new file mode 100644 index 0000000000000000000000000000000000000000..a7d6c7177ef3ca68b3b93adafa738b190db9e7ac GIT binary patch literal 2248 zcmciEdo&Yz902g;F|X~SRHBG!gxeyIOi6J{XiJoEkwg!9v}mk#)KDpOOOoa!k4*Ad znD;C0xLvwl6=OGfg>ht98CUMtIXTB4?l~RZb9c_??ECxve!uT;e|^834l zlFur*v=R&Nt&}L-{Sjhte~~!ED}jW23nYN#GNd85NCx8XfrfM6>nAw7lq{^5l85zD zt6{z7f2IKM{hM{Lw`e`YixeSV&IZW;C?%+|NEzY<8^75E-~TlgsJTEDY+gbQ;^nAA zegS3~8jxGCWf_`~Tcic?Qd?oYls2rFg^tHg&S9KhKc%fF5m)DGnogOgE9cK~C$WMO z={v>5H?FddyT-|R+8ooZDBBr13G1l(`p)Ymb>YL2_#VbKKEM81Z7lAfb>6yClP)cX z-IsDY8|>}twxKz{$YXc+p$a9R@%Bg9mg5Tp4rL`o3VqnD7g*Ed zx{~AUaaP1Wf~#7IlMkEUflgG5BzXJlX8JYSt7Hf%31j_Amx4J&h32mG<5X|^mz-{v z0B59Ma3tS(ZEeW(Yc-E!!vfb&{P`Nxc%yf*cSCyNO)v6^nzI!_*UE zHlJ`}=uB4W$owt6!*Tv3&qS3bDHnu~FH@nsskcqQ6^Yh)9+XEqU`6y#DxaF#AZomY zb}y}-5-aWau}k?PMsCu_N;ASjne>oFj_GZo;teiRSbcX;+Erd-iiUKOk!4JEa1c4s z!LBr^S8l#V;F>2g;BJ>SniX8xCf#Ug7>;DgZ%!F(eS{i$_wv4a&{e)^jB2xX(bwHY zi5&V?f{?C5NQ?EzRn+3yqhb`_8sHyd8T2N7Ssh||WaC{-qpdi17NhQM^7uf$-~0J$ z2gSUa_3c+BN8gJ5Ws_VKaPso7d>UqT&E$6EnqQ`vt0)Yli(9;s@9m>ET%$f4q^6QY zo@0tLJu1VCqC=a$+#Kq#G(Z39f__z*S3r>t@yYu=X&X=Xbu%qrl(a-w>@VBnQt*d^ z9vMY^FJU+v*+!eJ61g1v)%WKMe;v2nJ#tkAY9j*5n1 zim~2UzDj5TgYDjft#h5;xmG4}2iJygVxpjtQHROSp4b_cQ*Y+>>vb1FM%;j4SF6tu z7FR~L8KoABNT>=c>vCIdshyb|Capo-GR2nm$$kQNJD2W3&>yFDTWH(7c4Tj=HJ!8G zJJCPwUFCJ8WvpYD!HtQYpQm*L(1MB!g5fN>U6+P%?>x&-y#3An^8;APnTL4ijRQuE z$WwdiRFOkHADyPoiJAH^oRaO>Vxig8bk7gI?Cr)DTIXk*lc-7k%4_>eTax^wRjchg z^0wjYKPz$8JQ$9>b?k6-OJ$VmrJG+$)i0FOtwzW}RBHArJC;5D&w6AwZlDG4yHVHRv13FtSg280tXZ zK|8`4da4BUaB&A1dmK1&4(fb>z287M)c6~6(32#Xu>TUkTdV$r_n;@D;dh|nJv1NA x9D{pqvSt~!EoI3lZP9k4v=g3(X<=qg4%Q^Gr|y1tEW5xf@2?fh{cJ?LVl%wKv z^pxJP5=oIZLnI0yh!DSQ+o$<{4#sushM+vou1idydElvH&GMXOwm=VaD??kqO4F_>M_4D*c7}Y%lbdGD7|jlqFbS6b4L_o(2mi^lhrBYBPaBMy20l0zJFs?4ruEBO)n+=jL#_VJqdSJ*20b8ViH{ zwuoTfEIXr<+|m*;6O>E8sC)u#e8JiX>3^v>T18;+nFFhyyy=G{@z)2~*u5*n1C{rz zLiJB?Mn@K=_;jWZ@Y$&d@-4nom^MhLwdiE(Dng#Ba8g{Wf}U#A=gw7cn@eWQl*U;a zA%Ad-&Us{bx93$>Kc})Z8PB_(%a$!|Dng+!lM}12LR|a9D9@u>r*j$j3UwJk#f3rP z?At$`R7-?K2lea!V3~tkm0-X?^!ap>$WT|E$n1$9p!*hYnIAYJUC&PClBwGT!*zMW9Kp(3|Mt9OFsRKKv`Ih0`j{gy98aS<2@FF~Oa>wU zS>YZPeCB{^+gIfnY(H1`z5Ez0<&+f~Njlhu4i?lk&Ql!iJEyNMuo@P7S&d6^wid3o zF*5=eHwqLe0}`P`e4Lk;zi9fHhW48{P8(!5gQTeRZC%gth9B5S*#FD&mu7`_HnFd#N=vNyRVPbT?k?jcZ$ShF6;FjVBt;oo*@jNHr{N&U3Ta4{DqBqd|WWei=TbAWvb_RqhpC5 z$6th{GQK6A2cW+)6g<2_A6-+B#_Qpfd(y_)m``LFyGX|4CQPMOis2qLCh^%`HG?p0 z=(NC%g%K9=u~v+u#+GMk^>?-y<8yw?byu;k^XyPg3J$^kNW`>Meu76zt(Mep%FCiL zXn!Lj?vGbC;C-lpSgV;>SYc_QzQOfkHvH!RxjDfr!jnyX15~VfQnH&F{H{I`GS72L zL{NVjH+I})NuKGYq>Ytel~v%gA_>Zo6|@8+OvrGdIp4aC$X}Sjol)@fBYnWB>&Jtv zh-ga5*&i~oMpORF_b`QYjZoCpzyJesT&kOJGpIPPR_p1n9UkWmrkMsr#bGL~H9UB~ z9hAQQU#cT)W8BKN-Srb(7C3=`Ri3NK%v8>}XlzGR1K|-|CC%{sKQ9AMH^788N~O%2(xw3$ybV#!P%A?&tjj z-|a<&+#jm{eucsYjaWAi$=osckQx3@H?$mgHQ2ceUPPwka`7Jo zjsEu)Di}nAj#wwvYTf#^<6yMG_{0Tq^ADBfe^r*1sPbFwC8nG&9;RmhsjPWSVak#T z5u$HYbzj3^K_mZiEql<6g%6CRZbP!Y7wrSZ>%LcMP~tSN;2QWF-5KcyoCQUxINHlN^&xQTdE!~$W6gR&H9e-KMeP`0wquA@r#MJ$AAYAI8iN*sA?ljAkLtlGW1yE;@t zWQPQ@gfOB6{DOpQ-DM^_JWN_rN9?wkQMY{#1E{LMT>`)(=TsL)R$Vh1jk9`n7fMn{ zdrj)>N?Cnn=1O=~?v!#39CNPT0}2POyzoDP*xiuK*k)K8)tCC$t^Fqbx3e;)y5f@e z`rTpz52?P>R{w2tlRZdy>Ntrzmr4FgsO?z`83cy`!Gh~iyRpR*4usq5cW>dSg&Xk2 zvxy$<7t@wbaWS9HydfP@+nW4%OEr6BgX9&H+TCzarFY4s)o}m1#kb))R)GzEo_6dU z&3j8^drWvetlUi|Kfu!&dQf__hirTQXuLKUqzr@a5Rp-O$Ov_1k(Bb9y>MxVu+ZZ9 z_rleD{DKbpn;Ys~vm3_Kw1EK}FJxFZb5@aa{B6AW!!?tI|86r;UW074U0Pb(>@ zD%-GzhF@C`_uhI%9iyA;o~d)3{5Wv!!LWC_)zFRyFnI$iKw?4@B|2J;#wo#$G{=^V zfdde+6Z#*p@(Dy2$F?Z56^)mj7IRNCZWc<)J)H(#5{TM0Dlb`N#o! z+IxfI3uAJn!^*MdP=h>C*kOXP>0An@7jl_WH81*93j@RFIH)93G%?(+D~O^5(@Anyu2U#}#%!3@3g@`J z{6znRRE5yo1#7NTmHC>oro#hM*G)_-hpM%3Zz9=*lboD}I)XCE)M)H2*AponveGP| zi5d6ORxkyz=*4tWPe8F;T1O}o6{qCkopL_1+Dz-82h8OxALCKtAF?N;^u0ZXcyuxy z!B!uC^wicTVdQd+RWX?(CTy+t6+ZGII^fTZJWZmUo4RIXCac~fge!g9OuKE0GbdIF zydz8E@0h=9S9@rCWP=eX9? zlTwG*y=x;ynHRb=J+FE;pQk^c4`gkN%s->; zSyaOO0IQ^1L`dZ0&Jj@xUmG+_Yn7Sok5_)2>i9b~oxyLOg;w8gTg)x-^md;dSAgNR zxF1cFojbJXB(#C=$+4)azmVi_-}MUDn{uU0DRsA@zk~u$jCO?-UGPgg?=M;|%frgw zLp`aMB7r&MgL0`5WRd3RLFHFVpN>?SiSjL|2nzxEY?RCCHs|M?KOpk)LT9oIS_WNo zTA2NLW4qrsSU-YfXJqs}kwfEl=3duThlD1GT=Zjqc8#!*xP=|O0M2$ln){6^V`&*r zi_;j{HT)+0o1BiHd@?TUJk>1QQ>WMwsD*ET9^PnFR)Z&2-X&IfMgCKfuqx?#!#&8Y z;_MK2OY(%+Xh{&OVJf^ja1KMD&Hkc&pI?b=yGwe%-eT4!9mw=-;K`n>V%Zk}Pv-!JYHwmpvG^M0RM2*)HK7<0FK`<6yhXXOe7pov9#s|RS zL8!y}t=Gt}Lod|sRk;^`p(^~0v3rTdxt;_*3_}uq<9PN5sNo{t7#JBT0GxK9`ojY% zqUv3!pF2LwL9Ir9{+JN2?V;5gu>##-h~L#X$Nd4D1aHL2V*msVS~@J3em+63&olOq z{i=O*Xx#9MLNtr48ADwoyRUCN_W^%m_?s(|d)IS~fp!n;(RCM}$Mnz&*P+9N_J1m1 z^J}M@K0|;G4hX+*{DA>#xq(=I)jb2C1t8=9XF#y=(^;CEbGkV(z+dhn-}3h`voZjv z*#d7IK3tDnYgIZEX|rJY%3(AmV$t{?q;Bw0poR>w@JW*2U*UF=XCV^820)RZ--q?Z zW7qF5)XCtFmMSz;45Us<9w|snM3aVyvXcIMg@=+rv>QWvK@Iru^ zYWBuCP_n@OZR5SKTJG6&DoaSb6jwc$n$k0*sL?jqk>nqCR*diSf}f;>B+#P{K6!XJ zYqsoaUk6 vEUvU}!6G)gfHqQi+dFJwW&vClgS>$17F!H9R$XG(1^|! literal 0 HcmV?d00001 diff --git a/test/test_pack.py b/test/test_pack.py index 717d07e46..770a78bad 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -34,8 +34,10 @@ class TestPack(TestBase): packindexfile_v1 = (fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx'), 1, 67) packindexfile_v2 = (fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx'), 2, 30) + packindexfile_v2_3_ascii = (fixture_path('packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx'), 2, 42) packfile_v2_1 = (fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack'), 2, packindexfile_v1[2]) packfile_v2_2 = (fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.pack'), 2, packindexfile_v2[2]) + packfile_v2_3_ascii = (fixture_path('packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.pack'), 2, packindexfile_v2_3_ascii[2]) def _assert_index_file(self, index, version, size): @@ -123,14 +125,15 @@ def test_pack_index(self): def test_pack(self): # there is this special version 3, but apparently its like 2 ... - for packfile, version, size in (self.packfile_v2_1, self.packfile_v2_2): + for packfile, version, size in (self.packfile_v2_3_ascii, self.packfile_v2_1, self.packfile_v2_2): pack = PackFile(packfile) self._assert_pack_file(pack, version, size) # END for each pack to test def test_pack_entity(self): for packinfo, indexinfo in ( (self.packfile_v2_1, self.packindexfile_v1), - (self.packfile_v2_2, self.packindexfile_v2)): + (self.packfile_v2_2, self.packindexfile_v2), + (self.packfile_v2_3_ascii, self.packindexfile_v2_3_ascii)): packfile, version, size = packinfo indexfile, version, size = indexinfo entity = PackEntity(packfile) From 4cf3eac8e9ed6ac2b0bac4a617a08fdf194da4ef Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 8 Oct 2010 19:01:24 +0200 Subject: [PATCH 0062/2375] initial frame for design change - now chunks can refer to DeltaLists as well, which is required to get the copying right. This surely makes things more coplex, but should still result in a performance improvement --- fun.py | 91 ++++++++++++++++++++++++++++++++++++++++++++----------- stream.py | 7 ++--- 2 files changed, 75 insertions(+), 23 deletions(-) diff --git a/fun.py b/fun.py index 2d51f62eb..a0835746e 100644 --- a/fun.py +++ b/fun.py @@ -86,13 +86,14 @@ class DeltaChunk(object): 'to', # start offset in the target buffer in bytes 'ts', # size of this chunk in the target buffer in bytes 'so', # start offset in the source buffer in bytes or None - 'data' # chunk of bytes to be added to the target buffer or None + 'data' # chunk of bytes to be added to the target buffer, + # DeltaChunkList to use as base, or None ) def __init__(self, to, ts, so, data): self.to = to self.ts = ts - self.so = so + self.so = sos self.data = data def __repr__(self): @@ -103,11 +104,15 @@ def __repr__(self): def rbound(self): return self.to + self.ts + def has_data(self): + """:return: True if the instance has data to add to the target stream""" + return self.data is None or not isinstance(self.data, DeltaChunkList) + def apply(self, source, write): """Apply own data to the target buffer :param source: buffer providing source bytes for copy operations :param write: write method to call with data to write""" - if self.data is None: + if self.has_data(): # COPY DATA FROM SOURCE assert len(source) - self.so - self.ts > 0 write(buffer(source, self.so, self.ts)) @@ -166,7 +171,7 @@ def _split_delta(dcl, d, di, relofs, insert_offset=0): def _handle_merge(ld, rd): """Optimize the layout of the lhs delta and the rhs delta TODO: Once the default implementation is working""" - if d.data is None: + if d.has_data(): if od.data: # OVERWRITE DATA pass @@ -217,6 +222,7 @@ def _merge_delta(dcl, dc): _move_delta_lbound(cd, dc.rbound() - cd.to) break else: + # xx.|---| # WE DON'T OVERLAP IT # this can actually happen, once multiple streams are merged break @@ -224,7 +230,7 @@ def _merge_delta(dcl, dc): # END lbound overlap handling else: if dc.to >= cd.rbound(): - #|---|...xx + #|---|xx break # END @@ -269,9 +275,30 @@ def _merge_delta(dcl, dc): class DeltaChunkList(list): """List with special functionality to deal with DeltaChunks""" - def terminate_at(self, size): + def init(self, size): + """Intialize this instance with chunks defining to fill up size from a base + buffer of equal size + :return: self""" + if len(self) != 0: + return + # pretend we have one huge delta chunk, which just copies everything + # from source to destination + maxint32 = 2**32 + for x in range(0, size, maxint32): + self.append(DeltaChunk(x, maxint32, x, None)) + # END create copy chunks + offset = x*maxint32 + remainder = size-offset + if remainder: + self.append(DeltaChunk(offset, remainder, offset, None)) + # END handle all done in loop + + return self + + def set_rbound(self, size): """Chops the list at the given size, splitting and removing DeltaNodes - as required""" + as required + :return: self""" di = _closest_index(self, size) d = self[di] rsize = size - d.to @@ -283,6 +310,26 @@ def terminate_at(self, size): ## DEBUG ## self.check_integrity(size) + return self + + def connect_with(self, bdlc): + """Connect this instance's delta chunks virtually with the given base. + This means that all copy deltas will simply apply to the given region + of the given base. Afterwards, the base is optimized so that add-deltas + will be truncated to the region actually used, or removed completely where + adequate. This way, memory usage is reduced. + :param bdlc: DeltaChunkList to serve as base""" + raise NotImplementedError("todo") + + def apply(self, bbuf, write): + """Apply the chain's changes and write the final result using the passed + write function. + :param bbuf: base buffer containing the base of all deltas contained in this + list. It will only be used if the chunk in question does not have a base + chain. + :param write: function taking a string of bytes to write to the output""" + raise NotImplementedError("todo") + def check_integrity(self, target_size=-1): """Verify the list has non-overlapping chunks only, and the total size matches target_size @@ -437,31 +484,31 @@ def stream_copy(read, write, size, chunk_size): def reverse_merge_deltas(dcl, dstreams): """Read the condensed delta chunk information from dstream and merge its information into a list of existing delta chunks - :param dcl: see merge_deltas + :param dcl: see 3 :param dstreams: iterable of delta stream objects. They must be ordered latest first, hence the delta to be applied last comes first, then its ancestors :return: None""" raise NotImplementedError("This is left out up until we actually iterate the dstreams - they are prefetched right now") -def merge_deltas(dcl, dstreams): +def merge_deltas(dstreams): """Read the condensed delta chunk information from dstream and merge its information into a list of existing delta chunks - :param dcl: DeltaChunkList, may be empty initially, and will be changed - during the merge process :param dstreams: iterable of delta stream objects. They must be ordered latest last, hence the delta to be applied last comes last, its oldest ancestor first - :return: None""" + :return: DeltaChunkList, containing all operations to apply""" + bdcl = None # data chunk list for initial base + dcl = DeltaChunkList() for dsi, ds in enumerate(dstreams): # print "Stream", dsi db = ds.read() delta_buf_size = ds.size # read header - i, src_size = msb_size(db) + i, base_size = msb_size(db) i, target_size = msb_size(db, i) # interpret opcodes - tbw = 0 # amount of target bytes written + tbw = 0 # amount of target bytes written while i < delta_buf_size: c = ord(db[i]) i += 1 @@ -494,14 +541,16 @@ def merge_deltas(dcl, dstreams): rbound = cp_off + cp_size if (rbound < cp_size or - rbound > src_size): + rbound > base_size): break - _merge_delta(dcl, DeltaChunk(tbw, cp_size, cp_off, None)) + # _merge_delta(dcl, DeltaChunk(tbw, cp_size, cp_off, None)) + dcl.append(DeltaChunk(tbw, cp_size, cp_off, None)) tbw += cp_size elif c: # TODO: Concatenate multiple deltachunks - _merge_delta(dcl, DeltaChunk(tbw, c, 0, db[i:i+c])) + # _merge_delta(dcl, DeltaChunk(tbw, c, 0, db[i:i+c])) + dcl.append(DeltaChunk(tbw, c, 0, db[i:i+c])) i += c tbw += c else: @@ -509,8 +558,14 @@ def merge_deltas(dcl, dstreams): # END handle command byte # END while processing delta data - dcl.terminate_at(target_size) + # merge the lists ! + if base is not None: + dcl.connect_with(base) + # END handle merge + # prepare next base + base = dcl + dcl = DeltaChunkList() # END for each delta stream # print dcl diff --git a/stream.py b/stream.py index 0cb558d78..efb99d218 100644 --- a/stream.py +++ b/stream.py @@ -325,8 +325,7 @@ def _set_cache_(self, attr): # Aggregate all deltas into one delta in reverse order. Hence we take # the last delta, and reverse-merge its ancestor delta, until we receive # the final delta data stream. - dcl = DeltaChunkList() - merge_deltas(dcl, reversed(self._dstreams)) + dcl = merge_deltas(reversed(self._dstreams)) if len(dcl) == 0: self._size = 0 @@ -342,9 +341,7 @@ def _set_cache_(self, attr): # APPLY CHUNKS write = self._mm_target.write - for dc in dcl: - dc.apply(bbuf, write) - # END for each deltachunk to apply + dcl.apply(bbuf, write) self._mm_target.seek(0) From fbf8f3221ea58de54567e034d8a7b4e23833e14b Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 10 Oct 2010 12:35:35 +0200 Subject: [PATCH 0063/2375] Filled in first implementation of all missing methods. Its untested, and currently the lists are truncated physically, which would work, but it would be easier to just remember the changed bounds, and apply it later with these bounds in mind --- fun.py | 190 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 168 insertions(+), 22 deletions(-) diff --git a/fun.py b/fun.py index a0835746e..3e126c3e4 100644 --- a/fun.py +++ b/fun.py @@ -12,6 +12,8 @@ import mmap from itertools import islice, izip +from copy import copy + # INVARIANTS OFS_DELTA = 6 REF_DELTA = 7 @@ -51,33 +53,48 @@ def _set_delta_rbound(d, size): """Truncate the given delta to the given size :param size: size relative to our target offset, may not be 0, must be smaller or equal - to our size""" + to our size + :return: d""" if size == 0: raise ValueError("size to truncate to must not be 0") if d.ts == size: return if size > d.ts: - raise ValueError("Cannot truncate delta 'larger'") + raise ValueError("Cannot extend rbound") d.ts = size # NOTE: data is truncated automatically when applying the delta # MUST NOT DO THIS HERE, see _split_delta + + if d.has_copy_chunklist(): + d.data.set_rbound(size) + # END truncate chunklist + + return d def _move_delta_lbound(d, bytes): """Move the delta by the given amount of bytes, reducing its size so that its right bound stays static - :param bytes: amount of bytes to move, must be smaller than delta size""" + :param bytes: amount of bytes to move, must be smaller than delta size + :return: d""" + if bytes == 0: + return if bytes >= d.ts: raise ValueError("Cannot move offset that much") d.to += bytes d.so += bytes d.ts -= bytes - if d.data: - d.data = d.data[bytes:] + if d.data is not None: + if isinstance(d.data, DeltaChunkList): + d.data.move_lbound(bytes) + else: + d.data = d.data[bytes:] + # END handle data type # END handle data + return d class DeltaChunk(object): """Represents a piece of a delta, it can either add new data, or copy existing @@ -106,16 +123,22 @@ def rbound(self): def has_data(self): """:return: True if the instance has data to add to the target stream""" - return self.data is None or not isinstance(self.data, DeltaChunkList) + return self.data is not None and not isinstance(self.data, DeltaChunkList) - def apply(self, source, write): + def has_copy_chunklist(self): + """:return: True if we copy our data from a chunklist""" + return return self.data is not None and isinstance(self.data, DeltaChunkList) + + def apply(self, bbuf, write): """Apply own data to the target buffer - :param source: buffer providing source bytes for copy operations + :param bbuf: buffer providing source bytes for copy operations :param write: write method to call with data to write""" - if self.has_data(): + if self.data is None: # COPY DATA FROM SOURCE - assert len(source) - self.so - self.ts > 0 - write(buffer(source, self.so, self.ts)) + assert len(bbuf) - self.so - self.ts > 0 + write(buffer(bbuf, self.so, self.ts)) + elif isinstance(self.data, DeltaChunkList): + self.data.apply(bbuf, write) else: # APPEND DATA # whats faster: if + 4 function calls or just a write with a slice ? @@ -153,6 +176,8 @@ def _split_delta(dcl, d, di, relofs, insert_offset=0): :note: belongs to DeltaChunkList""" if relofs > d.ts: raise ValueError("Cannot split behinds a chunks rbound") + if relofs < 1: + raise ValueError("Cannot split delta with %i" % relofs) osize = d.ts - relofs _set_delta_rbound(d, relofs) @@ -295,23 +320,65 @@ def init(self, size): return self - def set_rbound(self, size): - """Chops the list at the given size, splitting and removing DeltaNodes + def set_rbound(self, relofs): + """Chops the list at the given relative offset, splitting and removing DeltaNodes as required + :param relofs: offset relative to the start of the chain :return: self""" - di = _closest_index(self, size) + if len(self) == 0: + raise AssertionError("Cannot change bound of empty list") + if relofs == 0: + raise ValueError("Size to truncate to must not be 0") + absofs = self.lbound() + relofs + if absofs > self.rbound(): + raise ValueError("Cannot extend chunk list") + di = _closest_index(self, absofs) d = self[di] - rsize = size - d.to + rsize = absofs - d.to if rsize: _set_delta_rbound(d, rsize) # END truncate last node if possible del(self[di+(rsize!=0):]) ## DEBUG ## - self.check_integrity(size) + self.check_integrity(absofs) return self + def move_lbound(self, bytes): + """Offset the left bound of the list by the given amount of bytes. + This effectively truncates the list + :return: self""" + if len(self) == 0: + raise AssertionError("Cannot change bound of empty list") + if bytes == 0: + return + abslbound = self.lbound() + bytes + if abslbound >= self.rbound(): + raise ValueError("Cannot move lbound that much") + + dsi = _closest_index(self, abslbound) + d = self[dsi] + _move_delta_lbound(d, abslbound - d.to) + + if dsi: + del(self[:dsi]) + # END remove all skipped nodes + + return self + + def rbound(self): + """:return: rightmost extend in bytes, absolute""" + if len(self) == 0: + return 0 + return self[-1].rbound() + + def lbound(self): + """:return: leftmost byte at which this chunklist starts""" + if len(self) == 0: + return 0 + return self[0].to + def connect_with(self, bdlc): """Connect this instance's delta chunks virtually with the given base. This means that all copy deltas will simply apply to the given region @@ -319,7 +386,11 @@ def connect_with(self, bdlc): will be truncated to the region actually used, or removed completely where adequate. This way, memory usage is reduced. :param bdlc: DeltaChunkList to serve as base""" - raise NotImplementedError("todo") + for dc in self: + if not dc.has_data(): + dc.data = bdcl[dc.to, dc.ts] + # END handle overlap + # END for each dc def apply(self, bbuf, write): """Apply the chain's changes and write the final result using the passed @@ -328,7 +399,10 @@ def apply(self, bbuf, write): list. It will only be used if the chunk in question does not have a base chain. :param write: function taking a string of bytes to write to the output""" - raise NotImplementedError("todo") + dapply = DeltaChunk.apply + for dc in self: + dapply(dc, bbuf, write) + # END for each dc def check_integrity(self, target_size=-1): """Verify the list has non-overlapping chunks only, and the total size matches @@ -345,6 +419,7 @@ def check_integrity(self, target_size=-1): # check data for dc in self: + assert dc.ts > 0 if dc.data: assert len(dc.data) >= dc.ts # END for each dc @@ -359,6 +434,77 @@ def check_integrity(self, target_size=-1): assert lft.to + lft.ts == rgt.to # END for each pair + def __getslice__(self, absofs, size): + """:return: Subsection of this list at the given absolute offset, with the given + size in bytes. + :return: DeltaChunkList (copy) which represents the given chunk""" + cdi = _closest_index(self, absofs) # delta start index + slen = len(self) + ndcl = self.__class__() + rbound = absofs + size + + while cdi < slen: + # are we larger than the current block + cd = self[cdi] + if absofs < cd.to: + if rbound >= cd.rbound(): + # xxx|xxx|x + # cd is fully contained in the range + ndcl.append(copy(cd)) + elif rbound > cd.to: + # partially contained + # xxx|x--| + cd = copy(cd) + _set_delta_rbound(cd, cd.rbound() - rbound) + ndcl.append(cd) + break + else: + # xx.|---| + # WE DON'T OVERLAP IT + break + # END rbound overlap handling + # END lbound overlap handling + else: + if absofs >= cd.rbound(): + # happens if slice is out of bound + #|---|xx + break + # END + + if rbound >= cd.rbound(): + if absofs == cd.to: + #|xxx|x + # fully contained + ndcl.append(copy(cd)) + else: + # shift + #|-xx| + cd = copy(cd) + _move_delta_lbound(cd, absofs - cd.to) + ndcl.append(cd) + # END handle offset special case + elif absofs == cd.to: + #|x--| + # we truncate it to our size + cd = copy(cd) + _set_delta_rbound(cd, size) + ndcl.append(cd) + break + else: + #|-x-| + # adjust both ends + cd = copy(cd) + _move_delta_lbound(cd, absofs - cd.to) + _set_delta_rbound(cd, size) + ndcl.append(cd) + break + # END handle rbound overlap + # END handle overlap + # END for each chunk + return ndcl + + + #} END structures #{ Routines @@ -559,16 +705,16 @@ def merge_deltas(dstreams): # END while processing delta data # merge the lists ! - if base is not None: - dcl.connect_with(base) + if bdcl is not None: + dcl.connect_with(bdcl) # END handle merge # prepare next base - base = dcl + bdcl = dcl dcl = DeltaChunkList() # END for each delta stream - # print dcl + return base def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): From 1c2caf590d85866d95c3d1470eba692a61de3622 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 10 Oct 2010 19:37:22 +0200 Subject: [PATCH 0064/2375] Forward Delta Application now appears to work --- fun.py | 419 +++++++++++++++++------------------------------------- stream.py | 18 ++- 2 files changed, 146 insertions(+), 291 deletions(-) diff --git a/fun.py b/fun.py index 3e126c3e4..ac0b1c098 100644 --- a/fun.py +++ b/fun.py @@ -44,8 +44,8 @@ __all__ = ('is_loose_object', 'loose_object_header_info', 'msb_size', 'pack_object_header_info', 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data', - 'is_equal_canonical_sha', 'reverse_merge_deltas', - 'merge_deltas', 'DeltaChunkList') + 'is_equal_canonical_sha', 'reverse_connect_deltas', + 'connect_deltas', 'DeltaChunkList') #{ Structures @@ -55,21 +55,17 @@ def _set_delta_rbound(d, size): :param size: size relative to our target offset, may not be 0, must be smaller or equal to our size :return: d""" - if size == 0: - raise ValueError("size to truncate to must not be 0") if d.ts == size: return + if size == 0: + raise ValueError("size to truncate to must not be 0") if size > d.ts: raise ValueError("Cannot extend rbound") d.ts = size # NOTE: data is truncated automatically when applying the delta - # MUST NOT DO THIS HERE, see _split_delta - - if d.has_copy_chunklist(): - d.data.set_rbound(size) - # END truncate chunklist + # MUST NOT DO THIS HERE return d @@ -85,13 +81,10 @@ def _move_delta_lbound(d, bytes): d.to += bytes d.so += bytes + d.sob += bytes d.ts -= bytes - if d.data is not None: - if isinstance(d.data, DeltaChunkList): - d.data.move_lbound(bytes) - else: - d.data = d.data[bytes:] - # END handle data type + if d.has_data(): + d.data = d.data[bytes:] # END handle data return d @@ -103,14 +96,16 @@ class DeltaChunk(object): 'to', # start offset in the target buffer in bytes 'ts', # size of this chunk in the target buffer in bytes 'so', # start offset in the source buffer in bytes or None - 'data' # chunk of bytes to be added to the target buffer, + 'data', # chunk of bytes to be added to the target buffer, # DeltaChunkList to use as base, or None + 'sob' # DEBUG: Backup ) def __init__(self, to, ts, so, data): self.to = to self.ts = ts - self.so = sos + self.so = so + self.sob = so self.data = data def __repr__(self): @@ -118,6 +113,18 @@ def __repr__(self): #{ Interface + def copy_offset(self): + """:return: offset to apply when copying from a base buffer, or 0 + if this is not a copying delta chunk""" + + if self.data is not None: + if isinstance(self.data, DeltaChunkList): + return self.data.lbound() + self.so + else: + return self.so + # END handle data type + return 0 + def rbound(self): return self.to + self.ts @@ -127,7 +134,15 @@ def has_data(self): def has_copy_chunklist(self): """:return: True if we copy our data from a chunklist""" - return return self.data is not None and isinstance(self.data, DeltaChunkList) + return self.data is not None and isinstance(self.data, DeltaChunkList) + + def set_copy_chunklist(self, dcl): + """Set the deltachunk list to be used as basis for copying. + :note: only works if this chunk is a copy delta chunk""" + assert self.data is None, "Cannot assign chain to add delta chunk" + self.data = dcl + self.sob = self.so + self.so = 0 # allows lbound moves to be virtual def apply(self, bbuf, write): """Apply own data to the target buffer @@ -135,10 +150,10 @@ def apply(self, bbuf, write): :param write: write method to call with data to write""" if self.data is None: # COPY DATA FROM SOURCE - assert len(bbuf) - self.so - self.ts > 0 + assert len(bbuf) - self.so - self.ts > -1 write(buffer(bbuf, self.so, self.ts)) elif isinstance(self.data, DeltaChunkList): - self.data.apply(bbuf, write) + self.data.apply(bbuf, write, self.so, self.ts) else: # APPEND DATA # whats faster: if + 4 function calls or just a write with a slice ? @@ -165,208 +180,10 @@ def _closest_index(dcl, absofs): # END for each delta absofs return len(dcl)-1 -def _split_delta(dcl, d, di, relofs, insert_offset=0): - """Split the delta at di into two deltas, adjusting their sizes, offsets and data - accordingly and adding the new part to the dcl - :param relofs: relative offset at which to split the delta - :param d: delta chunk to split - :param di: index of d in dcl - :param insert_offset: offset for the new split id - :return: newly created DeltaChunk - :note: belongs to DeltaChunkList""" - if relofs > d.ts: - raise ValueError("Cannot split behinds a chunks rbound") - if relofs < 1: - raise ValueError("Cannot split delta with %i" % relofs) - - osize = d.ts - relofs - _set_delta_rbound(d, relofs) - - # insert new one - drb = d.rbound() - - nd = DeltaChunk( drb, - osize, - d.so + osize, - (d.data and d.data[osize:]) or None ) - - self.insert(di+1+insert_offset, nd) - return nd - -def _handle_merge(ld, rd): - """Optimize the layout of the lhs delta and the rhs delta - TODO: Once the default implementation is working""" - if d.has_data(): - if od.data: - # OVERWRITE DATA - pass - else: - # MERGE SOURCE AREA - pass - # END overwrite data - else: - if od.data: - # MERGE DATA WITH DATA - # overwrite the data at the respective spot - pass - else: - # INSERT DATA INTO COPY AREA - pass - # END combine or insert data - # END handle chunk mode - -def _merge_delta(dcl, dc): - """Merge the given DeltaChunk instance into the dcl - :param d: the DeltaChunk to merge""" - if len(dcl) == 0: - dcl.append(dc) - return - # END early return on empty list - - cdi = _closest_index(dcl, dc.to) # current delta index - cd = dcl[cdi] # current delta - - # either we go at his spot, or after - # cdi either moves one up, or stays - #print "insert at %i" % (cdi + (dc.to > cd.to)) - #print cd, dc - dcl.insert(cdi + (dc.to > cd.to), dc) - cdi += dc.to == cd.to - - while True: - # are we larger than the current block - if dc.to < cd.to: - if dc.rbound() >= cd.rbound(): - # xxx|xxx|x - # remove the current item completely - dcl.pop(cdi) - cdi -= 1 - elif dc.rbound() > cd.to: - # MOVE ITS LBOUND - # xxx|x--| - _move_delta_lbound(cd, dc.rbound() - cd.to) - break - else: - # xx.|---| - # WE DON'T OVERLAP IT - # this can actually happen, once multiple streams are merged - break - # END rbound overlap handling - # END lbound overlap handling - else: - if dc.to >= cd.rbound(): - #|---|xx - break - # END - - if dc.rbound() >= cd.rbound(): - if dc.to == cd.to: - #|xxx|x - # REMOVE CD - dcl.pop(cdi) - cdi -= 1 - else: - # TRUNCATE CD - #|-xx| - _set_delta_rbound(cd, dc.to - cd.to) - # END handle offset special case - elif dc.to == cd.to: - #|x--| - # we shift it by our size - _move_delta_lbound(cd, dc.ts) - else: - #|-x-| - # SPLIT CD AND LBOUND MOVE ITS SECOND PART - # insert offset is required to insert it after us - nd = _split_delta(dcl, cd, cdi, 1) - _move_delta_lbound(nd, dc.ts) - break - # END handle rbound overlap - # END handle overlap - - cdi += 1 - if cdi < len(dcl): - cd = dcl[cdi] - else: - break - # END check for end of list - # while our chunk is not completely done - - ## DEBUG ## - dcl.check_integrity() - - class DeltaChunkList(list): """List with special functionality to deal with DeltaChunks""" - def init(self, size): - """Intialize this instance with chunks defining to fill up size from a base - buffer of equal size - :return: self""" - if len(self) != 0: - return - # pretend we have one huge delta chunk, which just copies everything - # from source to destination - maxint32 = 2**32 - for x in range(0, size, maxint32): - self.append(DeltaChunk(x, maxint32, x, None)) - # END create copy chunks - offset = x*maxint32 - remainder = size-offset - if remainder: - self.append(DeltaChunk(offset, remainder, offset, None)) - # END handle all done in loop - - return self - - def set_rbound(self, relofs): - """Chops the list at the given relative offset, splitting and removing DeltaNodes - as required - :param relofs: offset relative to the start of the chain - :return: self""" - if len(self) == 0: - raise AssertionError("Cannot change bound of empty list") - if relofs == 0: - raise ValueError("Size to truncate to must not be 0") - absofs = self.lbound() + relofs - if absofs > self.rbound(): - raise ValueError("Cannot extend chunk list") - di = _closest_index(self, absofs) - d = self[di] - rsize = absofs - d.to - if rsize: - _set_delta_rbound(d, rsize) - # END truncate last node if possible - del(self[di+(rsize!=0):]) - - ## DEBUG ## - self.check_integrity(absofs) - - return self - - def move_lbound(self, bytes): - """Offset the left bound of the list by the given amount of bytes. - This effectively truncates the list - :return: self""" - if len(self) == 0: - raise AssertionError("Cannot change bound of empty list") - if bytes == 0: - return - abslbound = self.lbound() + bytes - if abslbound >= self.rbound(): - raise ValueError("Cannot move lbound that much") - - dsi = _closest_index(self, abslbound) - d = self[dsi] - _move_delta_lbound(d, abslbound - d.to) - - if dsi: - del(self[:dsi]) - # END remove all skipped nodes - - return self - def rbound(self): """:return: rightmost extend in bytes, absolute""" if len(self) == 0: @@ -379,30 +196,84 @@ def lbound(self): return 0 return self[0].to - def connect_with(self, bdlc): + def size(self): + """:return: size of bytes as measured by our delta chunks""" + return self.rbound() - self.lbound() + + def connect_with(self, bdcl): """Connect this instance's delta chunks virtually with the given base. This means that all copy deltas will simply apply to the given region of the given base. Afterwards, the base is optimized so that add-deltas will be truncated to the region actually used, or removed completely where adequate. This way, memory usage is reduced. - :param bdlc: DeltaChunkList to serve as base""" + :param bdcl: DeltaChunkList to serve as base""" for dc in self: if not dc.has_data(): - dc.data = bdcl[dc.to, dc.ts] + # dc.set_copy_chunklist(bdcl[dc.copy_offset():dc.ts]) + dc.set_copy_chunklist(bdcl[dc.so:dc.ts]) # END handle overlap # END for each dc - def apply(self, bbuf, write): + def apply(self, bbuf, write, lbound_offset=0, size=0): """Apply the chain's changes and write the final result using the passed write function. :param bbuf: base buffer containing the base of all deltas contained in this list. It will only be used if the chunk in question does not have a base chain. + :param lbound_offset: offset at which to start applying the delta, relative to + our lbound + :param size: if larger than 0, only the given amount of bytes will be applied :param write: function taking a string of bytes to write to the output""" + slen = len(self) + if slen == 0: + return + # END early abort + absofs = self.lbound() + lbound_offset + if size == 0: + size = self.rbound() - absofs + # END initialize size + if absofs + size > self.rbound(): + raise ValueError("Cannot apply more bytes than there are in this chain") + # END sanity check + + if size > self.rbound() - absofs: + raise ValueError("Trying to apply more than there is available") + dapply = DeltaChunk.apply - for dc in self: - dapply(dc, bbuf, write) - # END for each dc + if lbound_offset or absofs + size != self.rbound(): + cdi = _closest_index(self, absofs) + cd = self[cdi] + if cd.to != absofs: + tcd = copy(cd) + _move_delta_lbound(tcd, absofs - cd.to) + _set_delta_rbound(tcd, min(tcd.ts, size)) + dapply(tcd, bbuf, write) + size -= tcd.ts + cdi += 1 + # END handle first chunk + + # here we have to either apply full chunks, or smaller ones, but + # we always start at the chunks target offset + while cdi < slen and size: + cd = self[cdi] + if cd.ts <= size: + dapply(cd, bbuf, write) + size -= cd.ts + else: + tcd = copy(cd) + _set_delta_rbound(tcd, size) + dapply(tcd, bbuf, write) + size -= tcd.ts + break + # END handle bytes to apply + cdi += 1 + # END handle rest + assert size == 0 + else: + for dc in self: + dapply(dc, bbuf, write) + # END for each dc + # END handle application values def check_integrity(self, target_size=-1): """Verify the list has non-overlapping chunks only, and the total size matches @@ -420,8 +291,10 @@ def check_integrity(self, target_size=-1): # check data for dc in self: assert dc.ts > 0 - if dc.data: + if dc.has_data(): assert len(dc.data) >= dc.ts + if dc.has_copy_chunklist(): + assert dc.ts <= dc.data.size() # END for each dc left = islice(self, 0, len(self)-1) @@ -438,69 +311,43 @@ def __getslice__(self, absofs, size): """:return: Subsection of this list at the given absolute offset, with the given size in bytes. :return: DeltaChunkList (copy) which represents the given chunk""" + if len(self) == 0: + return DeltaChunkList() + + absofs = max(absofs, self.lbound()) + size = min(self.rbound() - self.lbound(), size) cdi = _closest_index(self, absofs) # delta start index + cd = self[cdi] slen = len(self) ndcl = self.__class__() - rbound = absofs + size - while cdi < slen: + if cd.to != absofs: + tcd = copy(cd) + _move_delta_lbound(tcd, absofs - cd.to) + _set_delta_rbound(tcd, min(tcd.ts, size)) + ndcl.append(tcd) + size -= tcd.ts + cdi += 1 + # END lbound overlap handling + + while cdi < slen and size: # are we larger than the current block cd = self[cdi] - if absofs < cd.to: - if rbound >= cd.rbound(): - # xxx|xxx|x - # cd is fully contained in the range - ndcl.append(copy(cd)) - elif rbound > cd.to: - # partially contained - # xxx|x--| - cd = copy(cd) - _set_delta_rbound(cd, cd.rbound() - rbound) - ndcl.append(cd) - break - else: - # xx.|---| - # WE DON'T OVERLAP IT - break - # END rbound overlap handling - # END lbound overlap handling + if cd.ts <= size: + ndcl.append(copy(cd)) + size -= cd.ts else: - if absofs >= cd.rbound(): - # happens if slice is out of bound - #|---|xx - break - # END - - if rbound >= cd.rbound(): - if absofs == cd.to: - #|xxx|x - # fully contained - ndcl.append(copy(cd)) - else: - # shift - #|-xx| - cd = copy(cd) - _move_delta_lbound(cd, absofs - cd.to) - ndcl.append(cd) - # END handle offset special case - elif absofs == cd.to: - #|x--| - # we truncate it to our size - cd = copy(cd) - _set_delta_rbound(cd, size) - ndcl.append(cd) - break - else: - #|-x-| - # adjust both ends - cd = copy(cd) - _move_delta_lbound(cd, absofs - cd.to) - _set_delta_rbound(cd, size) - ndcl.append(cd) - break - # END handle rbound overlap - # END handle overlap + tcd = copy(cd) + _set_delta_rbound(tcd, size) + ndcl.append(tcd) + size -= tcd.ts + break + # END hadle size + cdi += 1 # END for each chunk + assert size == 0, "size was %i" % size + + ndcl.check_integrity() return ndcl @@ -627,7 +474,7 @@ def stream_copy(read, write, size, chunk_size): # END duplicate data return dbw -def reverse_merge_deltas(dcl, dstreams): +def reverse_connect_deltas(dcl, dstreams): """Read the condensed delta chunk information from dstream and merge its information into a list of existing delta chunks :param dcl: see 3 @@ -636,7 +483,7 @@ def reverse_merge_deltas(dcl, dstreams): :return: None""" raise NotImplementedError("This is left out up until we actually iterate the dstreams - they are prefetched right now") -def merge_deltas(dstreams): +def connect_deltas(dstreams): """Read the condensed delta chunk information from dstream and merge its information into a list of existing delta chunks :param dstreams: iterable of delta stream objects. They must be ordered latest last, @@ -690,12 +537,10 @@ def merge_deltas(dstreams): rbound > base_size): break - # _merge_delta(dcl, DeltaChunk(tbw, cp_size, cp_off, None)) dcl.append(DeltaChunk(tbw, cp_size, cp_off, None)) tbw += cp_size elif c: # TODO: Concatenate multiple deltachunks - # _merge_delta(dcl, DeltaChunk(tbw, c, 0, db[i:i+c])) dcl.append(DeltaChunk(tbw, c, 0, db[i:i+c])) i += c tbw += c @@ -709,12 +554,14 @@ def merge_deltas(dstreams): dcl.connect_with(bdcl) # END handle merge + dcl.check_integrity() + # prepare next base bdcl = dcl dcl = DeltaChunkList() # END for each delta stream - return base + return bdcl def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): diff --git a/stream.py b/stream.py index efb99d218..8b8655e86 100644 --- a/stream.py +++ b/stream.py @@ -8,7 +8,7 @@ msb_size, stream_copy, apply_delta_data, - merge_deltas, + connect_deltas, DeltaChunkList, delta_types ) @@ -325,7 +325,7 @@ def _set_cache_(self, attr): # Aggregate all deltas into one delta in reverse order. Hence we take # the last delta, and reverse-merge its ancestor delta, until we receive # the final delta data stream. - dcl = merge_deltas(reversed(self._dstreams)) + dcl = connect_deltas(reversed(self._dstreams)) if len(dcl) == 0: self._size = 0 @@ -333,7 +333,7 @@ def _set_cache_(self, attr): return # END handle empty list - self._size = dcl[-1].rbound() + self._size = dcl.rbound() self._mm_target = allocate_memory(self._size) bbuf = allocate_memory(self._bstream.size) @@ -353,8 +353,16 @@ def _set_cache_(self, attr): self._set_cache_old(attr) import chardet - if chardet.detect(mt[:])['encoding'] == 'ascii': - assert self._mm_target[:] == mt[:] + + print "num dstreams", len(self._dstreams) + #if chardet.detect(mt[:self._size])['encoding'] == 'ascii': + if self._mm_target[:self._size] != mt[:]: + open("working.txt", "w").write(self._mm_target[:self._size]) + open("incorrect.txt", "w").write(mt[:]) + raise AssertionError("Output didn't match") + # END debug + print "success" + def _set_cache_old(self, attr): """If we are here, we apply the actual deltas""" From 834f081232cb51c251e8f2d3931c9e1fd5eff457 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 10 Oct 2010 23:07:28 +0200 Subject: [PATCH 0065/2375] Implemented add-chunk compression, which clearly reduces chain size, but might not really be worth it in python --- fun.py | 70 +++++++++++++++++++++++++++++++++++++++++-------------- stream.py | 29 +++++++---------------- 2 files changed, 61 insertions(+), 38 deletions(-) diff --git a/fun.py b/fun.py index ac0b1c098..170b3db15 100644 --- a/fun.py +++ b/fun.py @@ -13,6 +13,7 @@ from itertools import islice, izip from copy import copy +from cStringIO import StringIO # INVARIANTS OFS_DELTA = 6 @@ -57,10 +58,6 @@ def _set_delta_rbound(d, size): :return: d""" if d.ts == size: return - if size == 0: - raise ValueError("size to truncate to must not be 0") - if size > d.ts: - raise ValueError("Cannot extend rbound") d.ts = size @@ -76,8 +73,6 @@ def _move_delta_lbound(d, bytes): :return: d""" if bytes == 0: return - if bytes >= d.ts: - raise ValueError("Cannot move offset that much") d.to += bytes d.so += bytes @@ -139,7 +134,6 @@ def has_copy_chunklist(self): def set_copy_chunklist(self, dcl): """Set the deltachunk list to be used as basis for copying. :note: only works if this chunk is a copy delta chunk""" - assert self.data is None, "Cannot assign chain to add delta chunk" self.data = dcl self.sob = self.so self.so = 0 # allows lbound moves to be virtual @@ -150,13 +144,13 @@ def apply(self, bbuf, write): :param write: write method to call with data to write""" if self.data is None: # COPY DATA FROM SOURCE - assert len(bbuf) - self.so - self.ts > -1 write(buffer(bbuf, self.so, self.ts)) elif isinstance(self.data, DeltaChunkList): self.data.apply(bbuf, write, self.so, self.ts) else: # APPEND DATA # whats faster: if + 4 function calls or just a write with a slice ? + # Considering data can be larger than 127 bytes now, it should be worth it if self.ts < len(self.data): write(self.data[:self.ts]) else: @@ -209,11 +203,54 @@ def connect_with(self, bdcl): :param bdcl: DeltaChunkList to serve as base""" for dc in self: if not dc.has_data(): - # dc.set_copy_chunklist(bdcl[dc.copy_offset():dc.ts]) dc.set_copy_chunklist(bdcl[dc.so:dc.ts]) # END handle overlap # END for each dc + def compress(self): + """Alter the list to reduce the amount of nodes. Currently we concatenate + add-chunks + :return: self""" + slen = len(self) + if slen < 2: + return self + i = 0 + slen_orig = slen + + first_data_index = None + while i < slen: + dc = self[i] + i += 1 + if not dc.has_data(): + if first_data_index is not None and i-2-first_data_index > 1: + #if first_data_index is not None: + nd = StringIO() # new data + so = self[first_data_index].to # start offset in target buffer + for x in xrange(first_data_index, i-1): + xdc = self[x] + nd.write(xdc.data[:xdc.ts]) + # END collect data + + del(self[first_data_index:i-1]) + buf = nd.getvalue() + self.insert(first_data_index, DeltaChunk(so, len(buf), 0, buf)) + + slen = len(self) + i = first_data_index + 1 + + # END concatenate data + first_data_index = None + continue + # END skip non-data chunks + + if first_data_index is None: + first_data_index = i-1 + # END iterate list + + #if slen_orig != len(self): + # print "INFO: Reduced delta list len to %f %% of former size" % ((float(len(self)) / slen_orig) * 100) + return self + def apply(self, bbuf, write, lbound_offset=0, size=0): """Apply the chain's changes and write the final result using the passed write function. @@ -232,12 +269,6 @@ def apply(self, bbuf, write, lbound_offset=0, size=0): if size == 0: size = self.rbound() - absofs # END initialize size - if absofs + size > self.rbound(): - raise ValueError("Cannot apply more bytes than there are in this chain") - # END sanity check - - if size > self.rbound() - absofs: - raise ValueError("Trying to apply more than there is available") dapply = DeltaChunk.apply if lbound_offset or absofs + size != self.rbound(): @@ -347,7 +378,7 @@ def __getslice__(self, absofs, size): # END for each chunk assert size == 0, "size was %i" % size - ndcl.check_integrity() + # ndcl.check_integrity() return ndcl @@ -540,7 +571,8 @@ def connect_deltas(dstreams): dcl.append(DeltaChunk(tbw, cp_size, cp_off, None)) tbw += cp_size elif c: - # TODO: Concatenate multiple deltachunks + # NOTE: in C, the data chunks should probably be concatenated here. + # In python, we do it as a post-process dcl.append(DeltaChunk(tbw, c, 0, db[i:i+c])) i += c tbw += c @@ -549,12 +581,14 @@ def connect_deltas(dstreams): # END handle command byte # END while processing delta data + dcl.compress() + # merge the lists ! if bdcl is not None: dcl.connect_with(bdcl) # END handle merge - dcl.check_integrity() + # dcl.check_integrity() # prepare next base bdcl = dcl diff --git a/stream.py b/stream.py index 8b8655e86..098d27a2b 100644 --- a/stream.py +++ b/stream.py @@ -322,6 +322,14 @@ def __init__(self, stream_list): self._br = 0 def _set_cache_(self, attr): + # the direct algorithm is fastest and most direct if there is only one + # delta. Also, the extra overhead might not be worth it for items smaller + # than X - definitely the case in python + #print "num streams", len(self._dstreams) + #if len(self._dstreams) == 1 or (len(self._dstreams) * self._dstreams.size) > 25*1000*1000: + if len(self._dstreams) == 1: + return self._set_cache_brute_(attr) + # Aggregate all deltas into one delta in reverse order. Hence we take # the last delta, and reverse-merge its ancestor delta, until we receive # the final delta data stream. @@ -345,26 +353,7 @@ def _set_cache_(self, attr): self._mm_target.seek(0) - ## DEBUG ## - mt = self._mm_target - for ds in self._dstreams: - ds.stream.seek(0) - self._bstream.stream.seek(0) - self._set_cache_old(attr) - - import chardet - - print "num dstreams", len(self._dstreams) - #if chardet.detect(mt[:self._size])['encoding'] == 'ascii': - if self._mm_target[:self._size] != mt[:]: - open("working.txt", "w").write(self._mm_target[:self._size]) - open("incorrect.txt", "w").write(mt[:]) - raise AssertionError("Output didn't match") - # END debug - print "success" - - - def _set_cache_old(self, attr): + def _set_cache_brute_(self, attr): """If we are here, we apply the actual deltas""" buffer_info_list = list() From bda5ef5e94161c304d6151785b34a20bdb306389 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 10 Oct 2010 23:32:01 +0200 Subject: [PATCH 0066/2375] implemented binary tree search to get the closest deltachunk by offset --- fun.py | 18 ++++++++++++------ test/test_pack.py | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/fun.py b/fun.py index 170b3db15..8f38fa467 100644 --- a/fun.py +++ b/fun.py @@ -165,12 +165,18 @@ def _closest_index(dcl, absofs): to the DeltaChunk with a target buffer absofs that equals or is greater than absofs. :note: global method for performance only, it belongs to DeltaChunkList""" - # TODO: binary search !! - for i,d in enumerate(dcl): - if absofs < d.to: - return i-1 - elif absofs == d.to: - return i + lo = 0 + hi = len(dcl) + while lo < hi: + mid = (lo + hi) / 2 + dc = dcl[mid] + if dc.to > absofs: + hi = mid + elif dc.rbound() > absofs or dc.to == absofs: + return mid + else: + lo = mid + 1 + # END handle bound # END for each delta absofs return len(dcl)-1 diff --git a/test/test_pack.py b/test/test_pack.py index 770a78bad..6e598d755 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -130,7 +130,7 @@ def test_pack(self): self._assert_pack_file(pack, version, size) # END for each pack to test - def test_pack_entity(self): + def _test_pack_entity(self): for packinfo, indexinfo in ( (self.packfile_v2_1, self.packindexfile_v1), (self.packfile_v2_2, self.packindexfile_v2), (self.packfile_v2_3_ascii, self.packindexfile_v2_3_ascii)): From 5d18685948602de69eb950d0238fcf80f0413b68 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 10 Oct 2010 23:53:11 +0200 Subject: [PATCH 0067/2375] Disabled delta-aggregation as it is reduces the throughput to 540KiB/s compared to 9.4MiB compared to the previous brute-force algorithm. Compression helps, but it would probably be more efficient if done right away, not as post-process. It might help to implement the reversed version of this algorithm, as initially intended, but currently the overhead is the actual application --- fun.py | 4 ---- stream.py | 11 ++++++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/fun.py b/fun.py index 8f38fa467..bc67e0fce 100644 --- a/fun.py +++ b/fun.py @@ -76,7 +76,6 @@ def _move_delta_lbound(d, bytes): d.to += bytes d.so += bytes - d.sob += bytes d.ts -= bytes if d.has_data(): d.data = d.data[bytes:] @@ -93,14 +92,12 @@ class DeltaChunk(object): 'so', # start offset in the source buffer in bytes or None 'data', # chunk of bytes to be added to the target buffer, # DeltaChunkList to use as base, or None - 'sob' # DEBUG: Backup ) def __init__(self, to, ts, so, data): self.to = to self.ts = ts self.so = so - self.sob = so self.data = data def __repr__(self): @@ -135,7 +132,6 @@ def set_copy_chunklist(self, dcl): """Set the deltachunk list to be used as basis for copying. :note: only works if this chunk is a copy delta chunk""" self.data = dcl - self.sob = self.so self.so = 0 # allows lbound moves to be virtual def apply(self, bbuf, write): diff --git a/stream.py b/stream.py index 098d27a2b..7347f527c 100644 --- a/stream.py +++ b/stream.py @@ -311,6 +311,10 @@ class DeltaApplyReader(LazyMixin): "_br" # number of bytes read ) + #{ Configuration + k_max_memory_move = 250*1000*1000 + #} END configuration + def __init__(self, stream_list): """Initialize this instance with a list of streams, the first stream being the delta to apply on top of all following deltas, the last stream being the @@ -325,8 +329,9 @@ def _set_cache_(self, attr): # the direct algorithm is fastest and most direct if there is only one # delta. Also, the extra overhead might not be worth it for items smaller # than X - definitely the case in python - #print "num streams", len(self._dstreams) - #if len(self._dstreams) == 1 or (len(self._dstreams) * self._dstreams.size) > 25*1000*1000: + # hence we apply a worst-case scenario here + # TODO: read the final size from the deltastream - have to partly unpack + # if len(self._dstreams) * self._size < self.k_max_memory_move: if len(self._dstreams) == 1: return self._set_cache_brute_(attr) @@ -353,7 +358,7 @@ def _set_cache_(self, attr): self._mm_target.seek(0) - def _set_cache_brute_(self, attr): + def _set_cache_(self, attr): """If we are here, we apply the actual deltas""" buffer_info_list = list() From 682f483fa61c77fd6121ae860002094eb517bbd4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 11 Oct 2010 00:07:37 +0200 Subject: [PATCH 0068/2375] First profiling run revealed that the copy function was a serious slowdown. Now its twice as fast compared to the previous version, but still about 8 times slower than the brute force approach --- fun.py | 14 ++++++++------ stream.py | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/fun.py b/fun.py index bc67e0fce..9f2c9b6be 100644 --- a/fun.py +++ b/fun.py @@ -12,7 +12,6 @@ import mmap from itertools import islice, izip -from copy import copy from cStringIO import StringIO # INVARIANTS @@ -82,6 +81,9 @@ def _move_delta_lbound(d, bytes): # END handle data return d + +def delta_duplicate(src): + return DeltaChunk(src.to, src.ts, src.so, src.data) class DeltaChunk(object): """Represents a piece of a delta, it can either add new data, or copy existing @@ -277,7 +279,7 @@ def apply(self, bbuf, write, lbound_offset=0, size=0): cdi = _closest_index(self, absofs) cd = self[cdi] if cd.to != absofs: - tcd = copy(cd) + tcd = delta_duplicate(cd) _move_delta_lbound(tcd, absofs - cd.to) _set_delta_rbound(tcd, min(tcd.ts, size)) dapply(tcd, bbuf, write) @@ -293,7 +295,7 @@ def apply(self, bbuf, write, lbound_offset=0, size=0): dapply(cd, bbuf, write) size -= cd.ts else: - tcd = copy(cd) + tcd = delta_duplicate(cd) _set_delta_rbound(tcd, size) dapply(tcd, bbuf, write) size -= tcd.ts @@ -355,7 +357,7 @@ def __getslice__(self, absofs, size): ndcl = self.__class__() if cd.to != absofs: - tcd = copy(cd) + tcd = delta_duplicate(cd) _move_delta_lbound(tcd, absofs - cd.to) _set_delta_rbound(tcd, min(tcd.ts, size)) ndcl.append(tcd) @@ -367,10 +369,10 @@ def __getslice__(self, absofs, size): # are we larger than the current block cd = self[cdi] if cd.ts <= size: - ndcl.append(copy(cd)) + ndcl.append(delta_duplicate(cd)) size -= cd.ts else: - tcd = copy(cd) + tcd = delta_duplicate(cd) _set_delta_rbound(tcd, size) ndcl.append(tcd) size -= tcd.ts diff --git a/stream.py b/stream.py index 7347f527c..16c917a97 100644 --- a/stream.py +++ b/stream.py @@ -358,7 +358,7 @@ def _set_cache_(self, attr): self._mm_target.seek(0) - def _set_cache_(self, attr): + def _set_cache_brute_(self, attr): """If we are here, we apply the actual deltas""" buffer_info_list = list() From a064007f0e25b8a4af04c30fe329e345edc8092e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 11 Oct 2010 08:08:09 +0200 Subject: [PATCH 0069/2375] Made heavliy called methods global, its brings a second, which is nearly 10 percent more performance just by eliminating two method calls --- fun.py | 154 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 79 insertions(+), 75 deletions(-) diff --git a/fun.py b/fun.py index 9f2c9b6be..253e64092 100644 --- a/fun.py +++ b/fun.py @@ -84,6 +84,26 @@ def _move_delta_lbound(d, bytes): def delta_duplicate(src): return DeltaChunk(src.to, src.ts, src.so, src.data) + +def delta_chunk_apply(dc, bbuf, write): + """Apply own data to the target buffer + :param bbuf: buffer providing source bytes for copy operations + :param write: write method to call with data to write""" + if dc.data is None: + # COPY DATA FROM SOURCE + write(buffer(bbuf, dc.so, dc.ts)) + elif isinstance(dc.data, DeltaChunkList): + delta_list_apply(dc.data, bbuf, write, dc.so, dc.ts) + else: + # APPEND DATA + # whats faster: if + 4 function calls or just a write with a slice ? + # Considering data can be larger than 127 bytes now, it should be worth it + if dc.ts < len(dc.data): + write(dc.data[:dc.ts]) + else: + write(dc.data) + # END handle truncation + # END handle chunk mode class DeltaChunk(object): """Represents a piece of a delta, it can either add new data, or copy existing @@ -136,25 +156,7 @@ def set_copy_chunklist(self, dcl): self.data = dcl self.so = 0 # allows lbound moves to be virtual - def apply(self, bbuf, write): - """Apply own data to the target buffer - :param bbuf: buffer providing source bytes for copy operations - :param write: write method to call with data to write""" - if self.data is None: - # COPY DATA FROM SOURCE - write(buffer(bbuf, self.so, self.ts)) - elif isinstance(self.data, DeltaChunkList): - self.data.apply(bbuf, write, self.so, self.ts) - else: - # APPEND DATA - # whats faster: if + 4 function calls or just a write with a slice ? - # Considering data can be larger than 127 bytes now, it should be worth it - if self.ts < len(self.data): - write(self.data[:self.ts]) - else: - write(self.data) - # END handle truncation - # END handle chunk mode + #} END interface @@ -178,6 +180,59 @@ def _closest_index(dcl, absofs): # END for each delta absofs return len(dcl)-1 +def delta_list_apply(dcl, bbuf, write, lbound_offset=0, size=0): + """Apply the chain's changes and write the final result using the passed + write function. + :param bbuf: base buffer containing the base of all deltas contained in this + list. It will only be used if the chunk in question does not have a base + chain. + :param lbound_offset: offset at which to start applying the delta, relative to + our lbound + :param size: if larger than 0, only the given amount of bytes will be applied + :param write: function taking a string of bytes to write to the output""" + slen = len(dcl) + if slen == 0: + return + # END early abort + absofs = dcl.lbound() + lbound_offset + if size == 0: + size = dcl.rbound() - absofs + # END initialize size + + if lbound_offset or absofs + size != dcl.rbound(): + cdi = _closest_index(dcl, absofs) + cd = dcl[cdi] + if cd.to != absofs: + tcd = delta_duplicate(cd) + _move_delta_lbound(tcd, absofs - cd.to) + _set_delta_rbound(tcd, min(tcd.ts, size)) + delta_chunk_apply(tcd, bbuf, write) + size -= tcd.ts + cdi += 1 + # END handle first chunk + + # here we have to either apply full chunks, or smaller ones, but + # we always start at the chunks target offset + while cdi < slen and size: + cd = dcl[cdi] + if cd.ts <= size: + delta_chunk_apply(cd, bbuf, write) + size -= cd.ts + else: + tcd = delta_duplicate(cd) + _set_delta_rbound(tcd, size) + delta_chunk_apply(tcd, bbuf, write) + size -= tcd.ts + break + # END handle bytes to apply + cdi += 1 + # END handle rest + else: + for dc in dcl: + delta_chunk_apply(dc, bbuf, write) + # END for each dc + # END handle application values + class DeltaChunkList(list): """List with special functionality to deal with DeltaChunks""" @@ -211,6 +266,11 @@ def connect_with(self, bdcl): # END handle overlap # END for each dc + def apply(self, bbuf, write, lbound_offset=0, size=0): + """Only used by public clients, internally we only use the global routines + for performance""" + return delta_list_apply(self, bbuf, write, lbound_offset, size) + def compress(self): """Alter the list to reduce the amount of nodes. Currently we concatenate add-chunks @@ -255,61 +315,6 @@ def compress(self): # print "INFO: Reduced delta list len to %f %% of former size" % ((float(len(self)) / slen_orig) * 100) return self - def apply(self, bbuf, write, lbound_offset=0, size=0): - """Apply the chain's changes and write the final result using the passed - write function. - :param bbuf: base buffer containing the base of all deltas contained in this - list. It will only be used if the chunk in question does not have a base - chain. - :param lbound_offset: offset at which to start applying the delta, relative to - our lbound - :param size: if larger than 0, only the given amount of bytes will be applied - :param write: function taking a string of bytes to write to the output""" - slen = len(self) - if slen == 0: - return - # END early abort - absofs = self.lbound() + lbound_offset - if size == 0: - size = self.rbound() - absofs - # END initialize size - - dapply = DeltaChunk.apply - if lbound_offset or absofs + size != self.rbound(): - cdi = _closest_index(self, absofs) - cd = self[cdi] - if cd.to != absofs: - tcd = delta_duplicate(cd) - _move_delta_lbound(tcd, absofs - cd.to) - _set_delta_rbound(tcd, min(tcd.ts, size)) - dapply(tcd, bbuf, write) - size -= tcd.ts - cdi += 1 - # END handle first chunk - - # here we have to either apply full chunks, or smaller ones, but - # we always start at the chunks target offset - while cdi < slen and size: - cd = self[cdi] - if cd.ts <= size: - dapply(cd, bbuf, write) - size -= cd.ts - else: - tcd = delta_duplicate(cd) - _set_delta_rbound(tcd, size) - dapply(tcd, bbuf, write) - size -= tcd.ts - break - # END handle bytes to apply - cdi += 1 - # END handle rest - assert size == 0 - else: - for dc in self: - dapply(dc, bbuf, write) - # END for each dc - # END handle application values - def check_integrity(self, target_size=-1): """Verify the list has non-overlapping chunks only, and the total size matches target_size @@ -380,7 +385,6 @@ def __getslice__(self, absofs, size): # END hadle size cdi += 1 # END for each chunk - assert size == 0, "size was %i" % size # ndcl.check_integrity() return ndcl From e814fda2ef0b2de172fe06c2cbd1bc539a368262 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 11 Oct 2010 12:04:59 +0200 Subject: [PATCH 0070/2375] First frame to implement the actual data aggregation, but ... its probbaly going to change quite a lot again --- fun.py | 46 +++++++++++++++++++++++++++++++--------------- stream.py | 2 +- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/fun.py b/fun.py index 253e64092..ec3662fe4 100644 --- a/fun.py +++ b/fun.py @@ -83,7 +83,7 @@ def _move_delta_lbound(d, bytes): return d def delta_duplicate(src): - return DeltaChunk(src.to, src.ts, src.so, src.data) + return DeltaChunk(src.to, src.ts, src.so, src.data, src.flags) def delta_chunk_apply(dc, bbuf, write): """Apply own data to the target buffer @@ -114,16 +114,18 @@ class DeltaChunk(object): 'so', # start offset in the source buffer in bytes or None 'data', # chunk of bytes to be added to the target buffer, # DeltaChunkList to use as base, or None + 'flags' # currently only True or False ) - def __init__(self, to, ts, so, data): + def __init__(self, to, ts, so, data, flags): self.to = to self.ts = ts self.so = so self.data = data + self.flags = flags def __repr__(self): - return "DeltaChunk(%i, %i, %s, %s)" % (self.to, self.ts, self.so, self.data or "") + return "DeltaChunk(%i, %i, %s, %s, %i)" % (self.to, self.ts, self.so, self.data or "", self.flags) #{ Interface @@ -253,18 +255,24 @@ def size(self): """:return: size of bytes as measured by our delta chunks""" return self.rbound() - self.lbound() - def connect_with(self, bdcl): + def connect_with(self, bdcl, tdcl): """Connect this instance's delta chunks virtually with the given base. This means that all copy deltas will simply apply to the given region of the given base. Afterwards, the base is optimized so that add-deltas will be truncated to the region actually used, or removed completely where adequate. This way, memory usage is reduced. - :param bdcl: DeltaChunkList to serve as base""" - for dc in self: - if not dc.has_data(): - dc.set_copy_chunklist(bdcl[dc.so:dc.ts]) - # END handle overlap - # END for each dc + :param bdcl: DeltaChunkList to serve as base + :param tdcl: topmost delta chunk list. If set, reverse order is assumed + and the list is connected more efficiently""" + if tdcl is None: + for dc in self: + if not dc.has_data(): + dc.set_copy_chunklist(bdcl[dc.so:dc.ts]) + # END handle overlap + # END for each dc + else: + raise NotImplementedError("todo") + # END handle order def apply(self, bbuf, write, lbound_offset=0, size=0): """Only used by public clients, internally we only use the global routines @@ -297,7 +305,7 @@ def compress(self): del(self[first_data_index:i-1]) buf = nd.getvalue() - self.insert(first_data_index, DeltaChunk(so, len(buf), 0, buf)) + self.insert(first_data_index, DeltaChunk(so, len(buf), 0, buf, False)) slen = len(self) i = first_data_index + 1 @@ -522,14 +530,18 @@ def reverse_connect_deltas(dcl, dstreams): :return: None""" raise NotImplementedError("This is left out up until we actually iterate the dstreams - they are prefetched right now") -def connect_deltas(dstreams): +def connect_deltas(dstreams, reverse): """Read the condensed delta chunk information from dstream and merge its information into a list of existing delta chunks :param dstreams: iterable of delta stream objects. They must be ordered latest last, hence the delta to be applied last comes last, its oldest ancestor first + :param reverse: If False, the given iterable of delta-streams returns + items in from latest ancestor to the last delta. + If True, deltas are ordered so that the one to be applied last comes first. :return: DeltaChunkList, containing all operations to apply""" bdcl = None # data chunk list for initial base dcl = DeltaChunkList() + tdcl = None # topmost dcl, only effective if reverse is True for dsi, ds in enumerate(dstreams): # print "Stream", dsi db = ds.read() @@ -576,12 +588,12 @@ def connect_deltas(dstreams): rbound > base_size): break - dcl.append(DeltaChunk(tbw, cp_size, cp_off, None)) + dcl.append(DeltaChunk(tbw, cp_size, cp_off, None, False)) tbw += cp_size elif c: # NOTE: in C, the data chunks should probably be concatenated here. # In python, we do it as a post-process - dcl.append(DeltaChunk(tbw, c, 0, db[i:i+c])) + dcl.append(DeltaChunk(tbw, c, 0, db[i:i+c], False)) i += c tbw += c else: @@ -591,9 +603,13 @@ def connect_deltas(dstreams): dcl.compress() + if reverse and tdcl is None: + tdcl = dcl + # END handle reverse + # merge the lists ! if bdcl is not None: - dcl.connect_with(bdcl) + dcl.connect_with(bdcl, tdcl) # END handle merge # dcl.check_integrity() diff --git a/stream.py b/stream.py index 16c917a97..40a0c6c6a 100644 --- a/stream.py +++ b/stream.py @@ -338,7 +338,7 @@ def _set_cache_(self, attr): # Aggregate all deltas into one delta in reverse order. Hence we take # the last delta, and reverse-merge its ancestor delta, until we receive # the final delta data stream. - dcl = connect_deltas(reversed(self._dstreams)) + dcl = connect_deltas(self._dstreams, reverse=True) if len(dcl) == 0: self._size = 0 From 2e19424354d03a5351ac374dc8dd36f6b65b0d5e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 11 Oct 2010 12:33:14 +0200 Subject: [PATCH 0071/2375] New Frame uses a distinct type to express the different mode of operation. This is clean enough to get going --- fun.py | 85 ++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 62 insertions(+), 23 deletions(-) diff --git a/fun.py b/fun.py index ec3662fe4..05925721c 100644 --- a/fun.py +++ b/fun.py @@ -237,7 +237,13 @@ def delta_list_apply(dcl, bbuf, write, lbound_offset=0, size=0): class DeltaChunkList(list): - """List with special functionality to deal with DeltaChunks""" + """List with special functionality to deal with DeltaChunks. + There are two types of lists we represent. The one was created bottom-up, working + towards the latest delta, the other kind was created top-down, working from the + latest delta down to the earliest ancestor. This attribute is queryable + after all processing with is_reversed.""" + + __slots__ = tuple() def rbound(self): """:return: rightmost extend in bytes, absolute""" @@ -255,24 +261,18 @@ def size(self): """:return: size of bytes as measured by our delta chunks""" return self.rbound() - self.lbound() - def connect_with(self, bdcl, tdcl): + def connect_with(self, bdcl): """Connect this instance's delta chunks virtually with the given base. This means that all copy deltas will simply apply to the given region of the given base. Afterwards, the base is optimized so that add-deltas will be truncated to the region actually used, or removed completely where adequate. This way, memory usage is reduced. - :param bdcl: DeltaChunkList to serve as base - :param tdcl: topmost delta chunk list. If set, reverse order is assumed - and the list is connected more efficiently""" - if tdcl is None: - for dc in self: - if not dc.has_data(): - dc.set_copy_chunklist(bdcl[dc.so:dc.ts]) - # END handle overlap - # END for each dc - else: - raise NotImplementedError("todo") - # END handle order + :param bdcl: DeltaChunkList to serve as base""" + for dc in self: + if not dc.has_data(): + dc.set_copy_chunklist(bdcl[dc.so:dc.ts]) + # END handle overlap + # END for each dc def apply(self, bbuf, write, lbound_offset=0, size=0): """Only used by public clients, internally we only use the global routines @@ -396,8 +396,37 @@ def __getslice__(self, absofs, size): # ndcl.check_integrity() return ndcl - - + + +class TopdownDeltaChunkList(DeltaChunkList): + """Represents a list which is generated by feeding its ancestor streams one by + one""" + __slots__ = ('frozen', ) # if True, the list is frozen and can reproduce all data + # Will only be set in lists which where processed top-down + + def __init__(self): + self.frozen = False + + def connect_with_next_base(self, bdcl): + """Connect this chain with the next level of our base delta chunklist. + The goal in this game is to mark as many of our chunks rigid, hence they + cannot be changed by any of the upcoming bases anymore. Once all our + chunks are marked like that, we can stop all processing + :param bdcl: data chunk list being one of our bases. They must be fed in + consequtively and in order, towards the earliest ancestor delta + :return: True if processing was done. Use it to abort processing of + remaining streams""" + if self.frozen == 1: + # Can that ever be hit ? + return False + # END early abort + # mark us so that the is_reversed method returns True, without us thinking + # we are frozen + self.frozen = -1 + + raise NotImplementedError("todo") + return True + #} END structures @@ -540,8 +569,14 @@ def connect_deltas(dstreams, reverse): If True, deltas are ordered so that the one to be applied last comes first. :return: DeltaChunkList, containing all operations to apply""" bdcl = None # data chunk list for initial base - dcl = DeltaChunkList() tdcl = None # topmost dcl, only effective if reverse is True + + if reverse: + dcl = tdcl = TopdownDeltaChunkList() + else: + dcl = DeltaChunkList() + # END handle type of first chunk list + for dsi, ds in enumerate(dstreams): # print "Stream", dsi db = ds.read() @@ -603,13 +638,14 @@ def connect_deltas(dstreams, reverse): dcl.compress() - if reverse and tdcl is None: - tdcl = dcl - # END handle reverse - # merge the lists ! if bdcl is not None: - dcl.connect_with(bdcl, tdcl) + if tdcl: + if not tdcl.connect_with_next_base(dcl): + break + # END early abort + else: + dcl.connect_with(bdcl) # END handle merge # dcl.check_integrity() @@ -619,7 +655,10 @@ def connect_deltas(dstreams, reverse): dcl = DeltaChunkList() # END for each delta stream - return bdcl + if tdcl: + return tdcl + else: + return bdcl def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): From f6bd67ce92257c9b5191b58de960cedda5159778 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 11 Oct 2010 14:56:07 +0200 Subject: [PATCH 0072/2375] Reverse delta aggregration appears to be working --- fun.py | 155 +++++++++++++++++++++++++++++++--------------- test/test_pack.py | 2 +- 2 files changed, 107 insertions(+), 50 deletions(-) diff --git a/fun.py b/fun.py index 05925721c..9e4671a09 100644 --- a/fun.py +++ b/fun.py @@ -235,6 +235,46 @@ def delta_list_apply(dcl, bbuf, write, lbound_offset=0, size=0): # END for each dc # END handle application values +def delta_list_slice(dcl, absofs, size): + """:return: Subsection of this list at the given absolute offset, with the given + size in bytes. + :return: DeltaChunkList (copy) which represents the given chunk""" + if len(dcl) == 0: + return DeltaChunkList() + + absofs = max(absofs, dcl.lbound()) + size = min(dcl.rbound() - dcl.lbound(), size) + cdi = _closest_index(dcl, absofs) # delta start index + cd = dcl[cdi] + slen = len(dcl) + ndcl = dcl.__class__() + + if cd.to != absofs: + tcd = delta_duplicate(cd) + _move_delta_lbound(tcd, absofs - cd.to) + _set_delta_rbound(tcd, min(tcd.ts, size)) + ndcl.append(tcd) + size -= tcd.ts + cdi += 1 + # END lbound overlap handling + + while cdi < slen and size: + # are we larger than the current block + cd = dcl[cdi] + if cd.ts <= size: + ndcl.append(delta_duplicate(cd)) + size -= cd.ts + else: + tcd = delta_duplicate(cd) + _set_delta_rbound(tcd, size) + ndcl.append(tcd) + size -= tcd.ts + break + # END hadle size + cdi += 1 + # END for each chunk + + return ndcl class DeltaChunkList(list): """List with special functionality to deal with DeltaChunks. @@ -270,7 +310,7 @@ def connect_with(self, bdcl): :param bdcl: DeltaChunkList to serve as base""" for dc in self: if not dc.has_data(): - dc.set_copy_chunklist(bdcl[dc.so:dc.ts]) + dc.set_copy_chunklist(delta_list_slice(bdcl, dc.so, dc.ts)) # END handle overlap # END for each dc @@ -355,49 +395,7 @@ def check_integrity(self, target_size=-1): assert lft.to + lft.ts == rgt.to # END for each pair - def __getslice__(self, absofs, size): - """:return: Subsection of this list at the given absolute offset, with the given - size in bytes. - :return: DeltaChunkList (copy) which represents the given chunk""" - if len(self) == 0: - return DeltaChunkList() - - absofs = max(absofs, self.lbound()) - size = min(self.rbound() - self.lbound(), size) - cdi = _closest_index(self, absofs) # delta start index - cd = self[cdi] - slen = len(self) - ndcl = self.__class__() - - if cd.to != absofs: - tcd = delta_duplicate(cd) - _move_delta_lbound(tcd, absofs - cd.to) - _set_delta_rbound(tcd, min(tcd.ts, size)) - ndcl.append(tcd) - size -= tcd.ts - cdi += 1 - # END lbound overlap handling - - while cdi < slen and size: - # are we larger than the current block - cd = self[cdi] - if cd.ts <= size: - ndcl.append(delta_duplicate(cd)) - size -= cd.ts - else: - tcd = delta_duplicate(cd) - _set_delta_rbound(tcd, size) - ndcl.append(tcd) - size -= tcd.ts - break - # END hadle size - cdi += 1 - # END for each chunk - - # ndcl.check_integrity() - return ndcl - class TopdownDeltaChunkList(DeltaChunkList): """Represents a list which is generated by feeding its ancestor streams one by one""" @@ -416,15 +414,76 @@ def connect_with_next_base(self, bdcl): consequtively and in order, towards the earliest ancestor delta :return: True if processing was done. Use it to abort processing of remaining streams""" + assert self is not bdcl if self.frozen == 1: # Can that ever be hit ? return False # END early abort - # mark us so that the is_reversed method returns True, without us thinking - # we are frozen - self.frozen = -1 - raise NotImplementedError("todo") + nfc = 0 # number of frozen chunks + dci = 0 # delta chunk index + slen = len(self) # len of self + sold = slen + while dci < slen: + dc = self[dci] + dci += 1 + + if dc.flags: + nfc += 1 + continue + # END skip frozen chunks + + # all data chunks must be frozen, we are topmost already + # (Also if its a copy operation onto the lowest base, but we cannot + # determine that without the number of deltas to come) + if dc.has_data(): + dc.flags = True + nfc += 1 + continue + # END skip add chunks + + # copy chunks + # integrate the portion of the base list into ourselves. Lists + # dont support efficient insertion ( just one at a time ), but for now + # we live with it. Internally, its all just a 32/64bit pointer, and + # the portions of moved memory should be smallish. Maybe we just rebuild + # ourselves in order to reduce the amount of insertions ... + ccl = delta_list_slice(bdcl, dc.so, dc.ts) + + # move the target bounds into place to match with our chunk + ofs = dc.to - dc.so + for cdc in ccl: + cdc.to += ofs + # END update target bounds + + + assert dc.to == ccl.lbound() and dc.rbound() == cdc.rbound() + + if len(ccl) == 1: + self[dci-1] = ccl[0] + else: + + # maybe try to compute the expenses here, and pick the right algorithm + # It would normally be faster than copying everything physically though + # TODO: Use a deque here, and decide by the index whether to extend + # or extend left ! + post_dci = self[dci:] + del(self[dci-1:]) # include deletion of dc + self.extend(ccl) + self.extend(post_dci) + + slen = len(self) + dci += len(ccl)-1 # deleted dc, added rest + + # END handle chunk replacement + + # END for each chunk + + if nfc == slen: + self.frozen = True + return False + # END handle completeness + return True @@ -648,8 +707,6 @@ def connect_deltas(dstreams, reverse): dcl.connect_with(bdcl) # END handle merge - # dcl.check_integrity() - # prepare next base bdcl = dcl dcl = DeltaChunkList() diff --git a/test/test_pack.py b/test/test_pack.py index 6e598d755..770a78bad 100644 --- a/test/test_pack.py +++ b/test/test_pack.py @@ -130,7 +130,7 @@ def test_pack(self): self._assert_pack_file(pack, version, size) # END for each pack to test - def _test_pack_entity(self): + def test_pack_entity(self): for packinfo, indexinfo in ( (self.packfile_v2_1, self.packindexfile_v1), (self.packfile_v2_2, self.packindexfile_v2), (self.packfile_v2_3_ascii, self.packindexfile_v2_3_ascii)): From 0381cae63284e237a7023e9d40c7772690a2f84e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 11 Oct 2010 15:11:02 +0200 Subject: [PATCH 0073/2375] Removed debugging code --- fun.py | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/fun.py b/fun.py index 9e4671a09..814c22a6a 100644 --- a/fun.py +++ b/fun.py @@ -399,11 +399,7 @@ def check_integrity(self, target_size=-1): class TopdownDeltaChunkList(DeltaChunkList): """Represents a list which is generated by feeding its ancestor streams one by one""" - __slots__ = ('frozen', ) # if True, the list is frozen and can reproduce all data - # Will only be set in lists which where processed top-down - - def __init__(self): - self.frozen = False + __slots__ = tuple() def connect_with_next_base(self, bdcl): """Connect this chain with the next level of our base delta chunklist. @@ -413,17 +409,10 @@ def connect_with_next_base(self, bdcl): :param bdcl: data chunk list being one of our bases. They must be fed in consequtively and in order, towards the earliest ancestor delta :return: True if processing was done. Use it to abort processing of - remaining streams""" - assert self is not bdcl - if self.frozen == 1: - # Can that ever be hit ? - return False - # END early abort - + remaining streams if False is returned""" nfc = 0 # number of frozen chunks dci = 0 # delta chunk index slen = len(self) # len of self - sold = slen while dci < slen: dc = self[dci] dci += 1 @@ -456,9 +445,6 @@ def connect_with_next_base(self, bdcl): cdc.to += ofs # END update target bounds - - assert dc.to == ccl.lbound() and dc.rbound() == cdc.rbound() - if len(ccl) == 1: self[dci-1] = ccl[0] else: @@ -476,14 +462,11 @@ def connect_with_next_base(self, bdcl): dci += len(ccl)-1 # deleted dc, added rest # END handle chunk replacement - # END for each chunk if nfc == slen: - self.frozen = True return False # END handle completeness - return True From 9b0773b92df4b4a2a53497efc9c1489028d403d7 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 11 Oct 2010 15:32:14 +0200 Subject: [PATCH 0074/2375] Removed previous non-reverse delta-application functionality. Although it was slightly faster, this new version only needs a faster slicing, which consumes ridiculous amounts of time --- fun.py | 134 ++++++++++++------------------------------------------ stream.py | 9 ++-- 2 files changed, 32 insertions(+), 111 deletions(-) diff --git a/fun.py b/fun.py index 814c22a6a..4d5edda9c 100644 --- a/fun.py +++ b/fun.py @@ -62,7 +62,6 @@ def _set_delta_rbound(d, size): # NOTE: data is truncated automatically when applying the delta # MUST NOT DO THIS HERE - return d def _move_delta_lbound(d, bytes): @@ -76,14 +75,14 @@ def _move_delta_lbound(d, bytes): d.to += bytes d.so += bytes d.ts -= bytes - if d.has_data(): + if d.data is not None: d.data = d.data[bytes:] # END handle data return d def delta_duplicate(src): - return DeltaChunk(src.to, src.ts, src.so, src.data, src.flags) + return DeltaChunk(src.to, src.ts, src.so, src.data) def delta_chunk_apply(dc, bbuf, write): """Apply own data to the target buffer @@ -92,8 +91,6 @@ def delta_chunk_apply(dc, bbuf, write): if dc.data is None: # COPY DATA FROM SOURCE write(buffer(bbuf, dc.so, dc.ts)) - elif isinstance(dc.data, DeltaChunkList): - delta_list_apply(dc.data, bbuf, write, dc.so, dc.ts) else: # APPEND DATA # whats faster: if + 4 function calls or just a write with a slice ? @@ -105,6 +102,7 @@ def delta_chunk_apply(dc, bbuf, write): # END handle truncation # END handle chunk mode + class DeltaChunk(object): """Represents a piece of a delta, it can either add new data, or copy existing one from a source buffer""" @@ -114,51 +112,25 @@ class DeltaChunk(object): 'so', # start offset in the source buffer in bytes or None 'data', # chunk of bytes to be added to the target buffer, # DeltaChunkList to use as base, or None - 'flags' # currently only True or False ) - def __init__(self, to, ts, so, data, flags): + def __init__(self, to, ts, so, data): self.to = to self.ts = ts self.so = so self.data = data - self.flags = flags def __repr__(self): - return "DeltaChunk(%i, %i, %s, %s, %i)" % (self.to, self.ts, self.so, self.data or "", self.flags) + return "DeltaChunk(%i, %i, %s, %s)" % (self.to, self.ts, self.so, self.data or "") #{ Interface - def copy_offset(self): - """:return: offset to apply when copying from a base buffer, or 0 - if this is not a copying delta chunk""" - - if self.data is not None: - if isinstance(self.data, DeltaChunkList): - return self.data.lbound() + self.so - else: - return self.so - # END handle data type - return 0 - def rbound(self): return self.to + self.ts def has_data(self): """:return: True if the instance has data to add to the target stream""" - return self.data is not None and not isinstance(self.data, DeltaChunkList) - - def has_copy_chunklist(self): - """:return: True if we copy our data from a chunklist""" - return self.data is not None and isinstance(self.data, DeltaChunkList) - - def set_copy_chunklist(self, dcl): - """Set the deltachunk list to be used as basis for copying. - :note: only works if this chunk is a copy delta chunk""" - self.data = dcl - self.so = 0 # allows lbound moves to be virtual - - + return self.data is not None #} END interface @@ -239,21 +211,20 @@ def delta_list_slice(dcl, absofs, size): """:return: Subsection of this list at the given absolute offset, with the given size in bytes. :return: DeltaChunkList (copy) which represents the given chunk""" - if len(dcl) == 0: - return DeltaChunkList() - - absofs = max(absofs, dcl.lbound()) - size = min(dcl.rbound() - dcl.lbound(), size) + dcllbound = dcl.lbound() + absofs = max(absofs, dcllbound) + size = min(dcl.rbound() - dcllbound, size) cdi = _closest_index(dcl, absofs) # delta start index cd = dcl[cdi] slen = len(dcl) - ndcl = dcl.__class__() + ndcl = DeltaChunkList() + lappend = ndcl.append if cd.to != absofs: tcd = delta_duplicate(cd) _move_delta_lbound(tcd, absofs - cd.to) _set_delta_rbound(tcd, min(tcd.ts, size)) - ndcl.append(tcd) + lappend(tcd) size -= tcd.ts cdi += 1 # END lbound overlap handling @@ -262,12 +233,12 @@ def delta_list_slice(dcl, absofs, size): # are we larger than the current block cd = dcl[cdi] if cd.ts <= size: - ndcl.append(delta_duplicate(cd)) + lappend(delta_duplicate(cd)) size -= cd.ts else: tcd = delta_duplicate(cd) _set_delta_rbound(tcd, size) - ndcl.append(tcd) + lappend(tcd) size -= tcd.ts break # END hadle size @@ -301,19 +272,6 @@ def size(self): """:return: size of bytes as measured by our delta chunks""" return self.rbound() - self.lbound() - def connect_with(self, bdcl): - """Connect this instance's delta chunks virtually with the given base. - This means that all copy deltas will simply apply to the given region - of the given base. Afterwards, the base is optimized so that add-deltas - will be truncated to the region actually used, or removed completely where - adequate. This way, memory usage is reduced. - :param bdcl: DeltaChunkList to serve as base""" - for dc in self: - if not dc.has_data(): - dc.set_copy_chunklist(delta_list_slice(bdcl, dc.so, dc.ts)) - # END handle overlap - # END for each dc - def apply(self, bbuf, write, lbound_offset=0, size=0): """Only used by public clients, internally we only use the global routines for performance""" @@ -333,7 +291,7 @@ def compress(self): while i < slen: dc = self[i] i += 1 - if not dc.has_data(): + if dc.data is None: if first_data_index is not None and i-2-first_data_index > 1: #if first_data_index is not None: nd = StringIO() # new data @@ -345,7 +303,7 @@ def compress(self): del(self[first_data_index:i-1]) buf = nd.getvalue() - self.insert(first_data_index, DeltaChunk(so, len(buf), 0, buf, False)) + self.insert(first_data_index, DeltaChunk(so, len(buf), 0, buf)) slen = len(self) i = first_data_index + 1 @@ -381,8 +339,6 @@ def check_integrity(self, target_size=-1): assert dc.ts > 0 if dc.has_data(): assert len(dc.data) >= dc.ts - if dc.has_copy_chunklist(): - assert dc.ts <= dc.data.size() # END for each dc left = islice(self, 0, len(self)-1) @@ -417,16 +373,8 @@ def connect_with_next_base(self, bdcl): dc = self[dci] dci += 1 - if dc.flags: - nfc += 1 - continue - # END skip frozen chunks - - # all data chunks must be frozen, we are topmost already - # (Also if its a copy operation onto the lowest base, but we cannot - # determine that without the number of deltas to come) - if dc.has_data(): - dc.flags = True + # all add-chunks which are already topmost don't need additional processing + if dc.data is not None: nfc += 1 continue # END skip add chunks @@ -448,7 +396,6 @@ def connect_with_next_base(self, bdcl): if len(ccl) == 1: self[dci-1] = ccl[0] else: - # maybe try to compute the expenses here, and pick the right algorithm # It would normally be faster than copying everything physically though # TODO: Use a deque here, and decide by the index whether to extend @@ -592,33 +539,16 @@ def stream_copy(read, write, size, chunk_size): # END duplicate data return dbw -def reverse_connect_deltas(dcl, dstreams): +def connect_deltas(dstreams): """Read the condensed delta chunk information from dstream and merge its information into a list of existing delta chunks - :param dcl: see 3 - :param dstreams: iterable of delta stream objects. They must be ordered latest first, - hence the delta to be applied last comes first, then its ancestors - :return: None""" - raise NotImplementedError("This is left out up until we actually iterate the dstreams - they are prefetched right now") - -def connect_deltas(dstreams, reverse): - """Read the condensed delta chunk information from dstream and merge its information - into a list of existing delta chunks - :param dstreams: iterable of delta stream objects. They must be ordered latest last, - hence the delta to be applied last comes last, its oldest ancestor first - :param reverse: If False, the given iterable of delta-streams returns - items in from latest ancestor to the last delta. - If True, deltas are ordered so that the one to be applied last comes first. + :param dstreams: iterable of delta stream objects, the delta to be applied last + comes first, then all its ancestors in order :return: DeltaChunkList, containing all operations to apply""" bdcl = None # data chunk list for initial base - tdcl = None # topmost dcl, only effective if reverse is True - - if reverse: - dcl = tdcl = TopdownDeltaChunkList() - else: - dcl = DeltaChunkList() - # END handle type of first chunk list + tdcl = None # topmost dcl + dcl = tdcl = TopdownDeltaChunkList() for dsi, ds in enumerate(dstreams): # print "Stream", dsi db = ds.read() @@ -665,12 +595,12 @@ def connect_deltas(dstreams, reverse): rbound > base_size): break - dcl.append(DeltaChunk(tbw, cp_size, cp_off, None, False)) + dcl.append(DeltaChunk(tbw, cp_size, cp_off, None)) tbw += cp_size elif c: # NOTE: in C, the data chunks should probably be concatenated here. # In python, we do it as a post-process - dcl.append(DeltaChunk(tbw, c, 0, db[i:i+c], False)) + dcl.append(DeltaChunk(tbw, c, 0, db[i:i+c])) i += c tbw += c else: @@ -682,12 +612,8 @@ def connect_deltas(dstreams, reverse): # merge the lists ! if bdcl is not None: - if tdcl: - if not tdcl.connect_with_next_base(dcl): - break - # END early abort - else: - dcl.connect_with(bdcl) + if not tdcl.connect_with_next_base(dcl): + break # END handle merge # prepare next base @@ -695,11 +621,7 @@ def connect_deltas(dstreams, reverse): dcl = DeltaChunkList() # END for each delta stream - if tdcl: - return tdcl - else: - return bdcl - + return tdcl def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): """ diff --git a/stream.py b/stream.py index 40a0c6c6a..5292ce512 100644 --- a/stream.py +++ b/stream.py @@ -328,17 +328,16 @@ def __init__(self, stream_list): def _set_cache_(self, attr): # the direct algorithm is fastest and most direct if there is only one # delta. Also, the extra overhead might not be worth it for items smaller - # than X - definitely the case in python - # hence we apply a worst-case scenario here - # TODO: read the final size from the deltastream - have to partly unpack - # if len(self._dstreams) * self._size < self.k_max_memory_move: + # than X - definitely the case in python, every function call costs + # huge amounts of time + # if len(self._dstreams) * self._bstream.size < self.k_max_memory_move: if len(self._dstreams) == 1: return self._set_cache_brute_(attr) # Aggregate all deltas into one delta in reverse order. Hence we take # the last delta, and reverse-merge its ancestor delta, until we receive # the final delta data stream. - dcl = connect_deltas(self._dstreams, reverse=True) + dcl = connect_deltas(self._dstreams) if len(dcl) == 0: self._size = 0 From 3837806673b992c1c0cb64203b50d9f1054e44db Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 11 Oct 2010 15:45:54 +0200 Subject: [PATCH 0075/2375] Improved performance of delta_chunk_slice method a tiny bit, but it really needs to go to c --- fun.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fun.py b/fun.py index 4d5edda9c..75ff800be 100644 --- a/fun.py +++ b/fun.py @@ -210,14 +210,14 @@ def delta_list_apply(dcl, bbuf, write, lbound_offset=0, size=0): def delta_list_slice(dcl, absofs, size): """:return: Subsection of this list at the given absolute offset, with the given size in bytes. - :return: DeltaChunkList (copy) which represents the given chunk""" + :return: list (copy) which represents the given chunk""" dcllbound = dcl.lbound() absofs = max(absofs, dcllbound) size = min(dcl.rbound() - dcllbound, size) cdi = _closest_index(dcl, absofs) # delta start index cd = dcl[cdi] slen = len(dcl) - ndcl = DeltaChunkList() + ndcl = list() lappend = ndcl.append if cd.to != absofs: From 89408f8ec351c1d14f66caf53a2c1e163bde0f27 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 11 Oct 2010 23:08:57 +0200 Subject: [PATCH 0076/2375] Initial frame of the connect_delta method, which seems to do something. Debugging is hellish, you really have to use python exception to get information out of there, printf doesn't do anything for some reason --- Makefile | 24 +++++ _fun.c | 279 +++++++++++++++++++++++++++++++++++++++++++++++++++++- fun.py | 5 + stream.py | 5 +- 4 files changed, 310 insertions(+), 3 deletions(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..190a66b03 --- /dev/null +++ b/Makefile @@ -0,0 +1,24 @@ +PYTHON = python +SETUP = $(PYTHON) setup.py +TESTRUNNER = $(shell which nosetests) +TESTFLAGS = + +all: build + +doc:: + make -C doc/ html + +build:: + $(SETUP) build + $(SETUP) build_ext -i + +install:: + $(SETUP) install + +clean:: + $(SETUP) clean --all + rm -f *.so + +coverage:: build + PYTHONPATH=. $(PYTHON) $(TESTRUNNER) --cover-package=dulwich --with-coverage --cover-erase --cover-inclusive gitdb + diff --git a/_fun.c b/_fun.c index ce9f25b16..e9f769daa 100644 --- a/_fun.c +++ b/_fun.c @@ -1,5 +1,7 @@ #include #include +#include +#include static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) { @@ -82,16 +84,289 @@ static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) } +typedef unsigned long long ull; + +// Internal Delta Chunk Objects +typedef struct { + ull to; + ull ts; + ull so; + PyObject* data; + + void* next; +} DeltaChunk; + + +void DC_init(DeltaChunk* dc, ull to, ull ts, ull so, PyObject* data, DeltaChunk* next) +{ + dc->to = to; + dc->ts = ts; + dc->so = so; + Py_XINCREF(data); + dc->data = data; + + dc->next = next; +} + +void DC_destroy(DeltaChunk* dc) +{ + Py_XDECREF(dc->data); +} + +typedef struct { + PyObject_HEAD + // ----------- + DeltaChunk* head; + DeltaChunk* tail; + ull size; + +} DeltaChunkList; + +ull DC_rbound(DeltaChunk* dc) +{ + return dc->to + dc->ts; +} + + +static +int DCL_init(DeltaChunkList *self, PyObject *args, PyObject *kwds) +{ + ((DeltaChunkList*)self)->head = NULL; + return 1; +} + +static +void DCL_dealloc(DeltaChunkList* self) +{ + // TODO: deallocate linked list + if (self->head){ + self->head = NULL; + self->tail = NULL; + self->size = 0; + } +} + +static +PyObject* DCL_len(PyObject* self) +{ + return PyLong_FromUnsignedLongLong(0); +} + +static +PyObject* DCL_rbound(DeltaChunkList* self) +{ + if (!self->head) + return PyLong_FromUnsignedLongLong(0); + return PyLong_FromUnsignedLongLong(DC_rbound(self->tail)); +} + +static +PyObject* DCL_apply(PyObject* self, PyObject* args) +{ + + Py_RETURN_NONE; +} + + + +static PyMethodDef DCL_methods[] = { + {"apply", (PyCFunction)DCL_apply, METH_VARARGS, "Apply the given iterable of delta streams" }, + {"__len__", (PyCFunction)DCL_len, METH_NOARGS, NULL}, + {"rbound", (PyCFunction)DCL_rbound, METH_NOARGS, NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject DeltaChunkListType = { + PyObject_HEAD_INIT(NULL) + 0, /*ob_size*/ + "DeltaChunkList", /*tp_name*/ + sizeof(DeltaChunkList), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor)DCL_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + "Minimal Delta Chunk List",/* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DCL_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc)DCL_init, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ +}; + + +static inline +ull msb_size(const char* data, Py_ssize_t dlen, Py_ssize_t offset, Py_ssize_t* out_bytes_read){ + ull size = 0; + Py_ssize_t i = 0; + const char* dend = data + dlen; + for (data = data + offset; data < dend; data+=1, i+=1){ + char c = *data; + size |= (c & 0x7f) << i*7; + if (!(c & 0x80)){ + break; + } + }// END while in range + + *out_bytes_read = i+offset; + return size; +} + +static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) +{ + // obtain iterator + PyObject* stream_iter = 0; + if (!PyIter_Check(dstreams)){ + stream_iter = PyObject_GetIter(dstreams); + if (!stream_iter){ + PyErr_SetString(PyExc_RuntimeError, "Couldn't obtain iterator for streams"); + return NULL; + } + } else { + stream_iter = dstreams; + } + + DeltaChunkList* bdcl = 0; + DeltaChunkList* tdcl = 0; + DeltaChunkList* dcl = 0; + + dcl = tdcl = PyObject_New(DeltaChunkList, &DeltaChunkListType); + if (!dcl){ + PyErr_SetString(PyExc_RuntimeError, "Couldn't allocate list"); + return NULL; + } + + unsigned int dsi; + PyObject* ds; + int error = 0; + for (ds = PyIter_Next(stream_iter), dsi = 0; ds != NULL; ++dsi, ds = PyIter_Next(stream_iter)) + { + PyObject* db = PyObject_CallMethod(ds, "read", 0); + if (!PyObject_CheckReadBuffer(db)){ + error = 1; + PyErr_SetString(PyExc_RuntimeError, "Returned buffer didn't support the buffer protocol"); + goto loop_end; + } + + const char* data; + Py_ssize_t dlen; + PyObject_AsReadBuffer(db, (const void**)&data, &dlen); + + // read header + Py_ssize_t ofs = 0; + const ull base_size = msb_size(data, dlen, 0, &ofs); + const ull target_size = msb_size(data, dlen, ofs, &ofs); + + // parse command stream + const char* dend = data + dlen; + ull tbw = 0; // Amount of target bytes written + for (data = data + ofs; data < dend; ++data) + { + const char cmd = *data; + + if (cmd & 0x80) + { + unsigned long cp_off = 0, cp_size = 0; + if (cmd & 0x01) cp_off = *data++; + if (cmd & 0x02) cp_off |= (*data++ << 8); + if (cmd & 0x04) cp_off |= (*data++ << 16); + if (cmd & 0x08) cp_off |= ((unsigned) *data++ << 24); + if (cmd & 0x10) cp_size = *data++; + if (cmd & 0x20) cp_size |= (*data++ << 8); + if (cmd & 0x40) cp_size |= (*data++ << 16); + if (cp_size == 0) cp_size = 0x10000; + + const unsigned long rbound = cp_off + cp_size; + if (rbound < cp_size || + rbound > base_size){ + goto loop_end; + } + + // TODO: Add node + tbw += cp_size; + + } else if (cmd) { + // TODO: Add node + tbw += cmd; + } else { + error = 1; + PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); + goto loop_end; + } + }// END handle command opcodes + + assert(tbw == target_size); + +loop_end: + // perform cleanup + Py_DECREF(ds); + Py_DECREF(db); + + if (error){ + break; + } + }// END for each stream object + + if (dsi == 0 && ! error){ + PyErr_SetString(PyExc_ValueError, "No streams provided"); + } + + if (stream_iter != dstreams){ + Py_DECREF(stream_iter); + } + + if (error){ + return NULL; + } + + return (PyObject*)tdcl; +} + static PyMethodDef py_fun[] = { - { "PackIndexFile_sha_to_index", (PyCFunction)PackIndexFile_sha_to_index, METH_VARARGS, NULL }, + { "PackIndexFile_sha_to_index", (PyCFunction)PackIndexFile_sha_to_index, METH_VARARGS, "TODO" }, + { "connect_deltas", (PyCFunction)connect_deltas, METH_O, "TODO" }, { NULL, NULL, 0, NULL } }; -void init_fun(void) +#ifndef PyMODINIT_FUNC /* declarations for DLL import/export */ +#define PyMODINIT_FUNC void +#endif +PyMODINIT_FUNC init_fun(void) { PyObject *m; + DeltaChunkListType.tp_new = PyType_GenericNew; + if (PyType_Ready(&DeltaChunkListType) < 0) + return; + m = Py_InitModule3("_fun", py_fun, NULL); if (m == NULL) return; + + Py_INCREF(&DeltaChunkListType); + PyModule_AddObject(m, "Noddy", (PyObject *)&DeltaChunkListType); } diff --git a/fun.py b/fun.py index 75ff800be..a4da30903 100644 --- a/fun.py +++ b/fun.py @@ -701,3 +701,8 @@ def is_equal_canonical_sha(canonical_length, match, sha1): #} END routines + +try: + from _fun import connect_deltas +except ImportError: + pass diff --git a/stream.py b/stream.py index 5292ce512..169104625 100644 --- a/stream.py +++ b/stream.py @@ -338,8 +338,11 @@ def _set_cache_(self, attr): # the last delta, and reverse-merge its ancestor delta, until we receive # the final delta data stream. dcl = connect_deltas(self._dstreams) + assert dcl is not None - if len(dcl) == 0: + # call len directly, as the (optional) c version doesn't implement the sequence + # protocol + if dcl.__len__() == 0: self._size = 0 self._mm_target = allocate_memory(0) return From 2409fafca6f0518500571bcf82e92554f2c50b85 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 12 Oct 2010 09:19:12 +0200 Subject: [PATCH 0077/2375] Implemented a few more functions, but I realize the vector implementation actually wants to be in a separate structure --- _fun.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 64 insertions(+), 13 deletions(-) diff --git a/_fun.c b/_fun.c index e9f769daa..8abc5bcbb 100644 --- a/_fun.c +++ b/_fun.c @@ -116,9 +116,9 @@ void DC_destroy(DeltaChunk* dc) typedef struct { PyObject_HEAD // ----------- - DeltaChunk* head; - DeltaChunk* tail; + DeltaChunk* mem; ull size; + ull reserved_size; } DeltaChunkList; @@ -127,22 +127,65 @@ ull DC_rbound(DeltaChunk* dc) return dc->to + dc->ts; } +static +int DCL_new(DeltaChunkList* self, PyObject* args, PyObject* kwds) +{ + self->mem = NULL; // Memory + self->size = 0; // Size in DeltaChunks + self->reserved_size = 0; // Reserve in DeltaChunks + return 1; +} + +/* +Grow the delta chunk list by the given amount of bytes. +This may trigger a realloc, but will do nothing if the reserved size is already +large enough. +Return 1 on success, 0 on failure +*/ +static +int DCL_grow(DeltaChunkList* self, ull num_dc) +{ + const ull grow_by_chunks = (self->size + num_dc) - self->reserved_size; + if (grow_by_chunks <= 0){ + return 1; + } + + if (self->mem){ + self->mem = PyMem_Malloc(grow_by_chunks*sizeof(DeltaChunk)); + } else { + self->mem = PyMem_Realloc(self->mem, (self->size + grow_by_chunks)*sizeof(DeltaChunk)); + } + + return self->mem != NULL; +} + static int DCL_init(DeltaChunkList *self, PyObject *args, PyObject *kwds) { - ((DeltaChunkList*)self)->head = NULL; - return 1; + if(PySequence_Size(args) > 1){ + PyErr_SetString(PyExc_ValueError, "Zero or one arguments are allowed, providing the initial size of the queue in DeltaChunks"); + return 0; + } + + ull init_size = 0; + PyArg_ParseTuple(args, "K", &init_size); + if (init_size == 0){ + init_size = 125000; + } + + return DCL_grow(self, init_size); } static void DCL_dealloc(DeltaChunkList* self) { // TODO: deallocate linked list - if (self->head){ - self->head = NULL; - self->tail = NULL; + if (self->mem){ + PyMem_Free(self->mem); self->size = 0; + self->reserved_size = 0; + self->mem = 0; } } @@ -153,11 +196,18 @@ PyObject* DCL_len(PyObject* self) } static -PyObject* DCL_rbound(DeltaChunkList* self) +inline +ull DCL_rbound(DeltaChunkList* self) +{ + if (!self->mem | !self->size) + return 0; + return DC_rbound(&(self->mem[self->size-1])); +} + +static +PyObject* DCL_py_rbound(DeltaChunkList* self) { - if (!self->head) - return PyLong_FromUnsignedLongLong(0); - return PyLong_FromUnsignedLongLong(DC_rbound(self->tail)); + return PyLong_FromUnsignedLongLong(DCL_rbound(self)); } static @@ -172,7 +222,7 @@ PyObject* DCL_apply(PyObject* self, PyObject* args) static PyMethodDef DCL_methods[] = { {"apply", (PyCFunction)DCL_apply, METH_VARARGS, "Apply the given iterable of delta streams" }, {"__len__", (PyCFunction)DCL_len, METH_NOARGS, NULL}, - {"rbound", (PyCFunction)DCL_rbound, METH_NOARGS, NULL}, + {"rbound", (PyCFunction)DCL_py_rbound, METH_NOARGS, NULL}, {NULL} /* Sentinel */ }; @@ -215,7 +265,7 @@ static PyTypeObject DeltaChunkListType = { 0, /* tp_dictoffset */ (initproc)DCL_init, /* tp_init */ 0, /* tp_alloc */ - 0, /* tp_new */ + (newfunc)DCL_new, /* tp_new */ }; @@ -233,6 +283,7 @@ ull msb_size(const char* data, Py_ssize_t dlen, Py_ssize_t offset, Py_ssize_t* o }// END while in range *out_bytes_read = i+offset; + assert((*out_bytes_read * 8) - (*out_bytes_read - 1) <= sizeof(ull)); return size; } From 511a29dab7c7a507abc3bc656b5e9f5ab2db85a3 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 12 Oct 2010 09:54:15 +0200 Subject: [PATCH 0078/2375] DeltaChunkVector is now a separate structure. I wished I had c++, but ... its probably a good exercise --- _fun.c | 126 +++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 83 insertions(+), 43 deletions(-) diff --git a/_fun.c b/_fun.c index 8abc5bcbb..fb83f26a6 100644 --- a/_fun.c +++ b/_fun.c @@ -85,27 +85,26 @@ static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) typedef unsigned long long ull; +typedef unsigned int uint; + +// DELTA CHUNK +//////////////// // Internal Delta Chunk Objects typedef struct { ull to; ull ts; ull so; PyObject* data; - - void* next; } DeltaChunk; - -void DC_init(DeltaChunk* dc, ull to, ull ts, ull so, PyObject* data, DeltaChunk* next) +void DC_init(DeltaChunk* dc, ull to, ull ts, ull so, PyObject* data) { dc->to = to; dc->ts = ts; dc->so = so; Py_XINCREF(data); dc->data = data; - - dc->next = next; } void DC_destroy(DeltaChunk* dc) @@ -113,28 +112,20 @@ void DC_destroy(DeltaChunk* dc) Py_XDECREF(dc->data); } -typedef struct { - PyObject_HEAD - // ----------- - DeltaChunk* mem; - ull size; - ull reserved_size; - -} DeltaChunkList; - ull DC_rbound(DeltaChunk* dc) { return dc->to + dc->ts; } -static -int DCL_new(DeltaChunkList* self, PyObject* args, PyObject* kwds) -{ - self->mem = NULL; // Memory - self->size = 0; // Size in DeltaChunks - self->reserved_size = 0; // Reserve in DeltaChunks - return 1; -} + +// DELTA CHUNK VECTOR +///////////////////// + +typedef struct { + DeltaChunk* mem; // Memory + Py_ssize_t size; // Size in DeltaChunks + Py_ssize_t reserved_size; // Reserve in DeltaChunks +} DeltaChunkVector; /* Grow the delta chunk list by the given amount of bytes. @@ -143,20 +134,76 @@ large enough. Return 1 on success, 0 on failure */ static -int DCL_grow(DeltaChunkList* self, ull num_dc) +int DCV_grow(DeltaChunkVector* vec, uint num_dc) { - const ull grow_by_chunks = (self->size + num_dc) - self->reserved_size; + const ull grow_by_chunks = (vec->size + num_dc) - vec->reserved_size; if (grow_by_chunks <= 0){ return 1; } - if (self->mem){ - self->mem = PyMem_Malloc(grow_by_chunks*sizeof(DeltaChunk)); + if (vec->mem){ + vec->mem = PyMem_Malloc(grow_by_chunks*sizeof(DeltaChunk)); } else { - self->mem = PyMem_Realloc(self->mem, (self->size + grow_by_chunks)*sizeof(DeltaChunk)); + vec->mem = PyMem_Realloc(vec->mem, (vec->size + grow_by_chunks)*sizeof(DeltaChunk)); } - return self->mem != NULL; + return vec->mem != NULL; +} + +int DCV_init(DeltaChunkVector* vec, ull initial_size) +{ + vec->mem = NULL; + vec->size = 0; + vec->reserved_size = 0; + + return DCV_grow(vec, initial_size); +} + + +void DCV_dealloc(DeltaChunkVector* vec) +{ + if (vec->mem){ + PyMem_Free(vec->mem); + vec->size = 0; + vec->reserved_size = 0; + vec->mem = 0; + } +} + +static inline +ull DCV_len(DeltaChunkVector* vec) +{ + return vec->size; +} + +// Return item at index +static inline +DeltaChunk* DCV_get(DeltaChunkVector* vec, Py_ssize_t i) +{ + assert(i < vec->size && vec->mem); + return &(vec->mem[i]); +} + +static inline +int DCV_empty(DeltaChunkVector* vec) +{ + return vec->size == 0; +} + +// DELTA CHUNK LIST (PYTHON) +///////////////////////////// + +typedef struct { + PyObject_HEAD + // ----------- + DeltaChunkVector vec; + +} DeltaChunkList; + +static +int DCL_new(DeltaChunkList* self, PyObject* args, PyObject* kwds) +{ + return DCV_init(&self->vec, 0); } @@ -174,34 +221,27 @@ int DCL_init(DeltaChunkList *self, PyObject *args, PyObject *kwds) init_size = 125000; } - return DCL_grow(self, init_size); + return DCV_grow(&self->vec, init_size); } static void DCL_dealloc(DeltaChunkList* self) { - // TODO: deallocate linked list - if (self->mem){ - PyMem_Free(self->mem); - self->size = 0; - self->reserved_size = 0; - self->mem = 0; - } + DCV_dealloc(&self->vec); } static -PyObject* DCL_len(PyObject* self) +PyObject* DCL_len(DeltaChunkList* self) { - return PyLong_FromUnsignedLongLong(0); + return PyLong_FromUnsignedLongLong(DCV_len(&self->vec)); } -static -inline +static inline ull DCL_rbound(DeltaChunkList* self) { - if (!self->mem | !self->size) + if (DCV_empty(&self->vec)) return 0; - return DC_rbound(&(self->mem[self->size-1])); + return DC_rbound(DCV_get(&self->vec, self->vec.size - 1)); } static From f030fa1d7ef6a43cc05b11e3be2108f83d9683f9 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 12 Oct 2010 11:25:23 +0200 Subject: [PATCH 0079/2375] Weird bug causes crash, its memory related of course. GDB tells me where, but the why is still a mystery --- _fun.c | 82 +++++++++++++++++++++++++++++++++++++------------------ stream.py | 3 ++ 2 files changed, 58 insertions(+), 27 deletions(-) diff --git a/_fun.c b/_fun.c index fb83f26a6..47f5d8ecf 100644 --- a/_fun.c +++ b/_fun.c @@ -136,16 +136,18 @@ Return 1 on success, 0 on failure static int DCV_grow(DeltaChunkVector* vec, uint num_dc) { - const ull grow_by_chunks = (vec->size + num_dc) - vec->reserved_size; + const uint grow_by_chunks = (vec->size + num_dc) - vec->reserved_size; if (grow_by_chunks <= 0){ return 1; } - if (vec->mem){ - vec->mem = PyMem_Malloc(grow_by_chunks*sizeof(DeltaChunk)); + if (vec->mem == NULL){ + vec->mem = PyMem_Malloc(grow_by_chunks * sizeof(vec->mem)); } else { - vec->mem = PyMem_Realloc(vec->mem, (vec->size + grow_by_chunks)*sizeof(DeltaChunk)); + vec->mem = PyMem_Realloc(vec->mem, (vec->reserved_size + grow_by_chunks) * sizeof(vec->mem)); } + assert(vec->mem != NULL); + vec->reserved_size = vec->reserved_size + grow_by_chunks; return vec->mem != NULL; } @@ -159,17 +161,6 @@ int DCV_init(DeltaChunkVector* vec, ull initial_size) return DCV_grow(vec, initial_size); } - -void DCV_dealloc(DeltaChunkVector* vec) -{ - if (vec->mem){ - PyMem_Free(vec->mem); - vec->size = 0; - vec->reserved_size = 0; - vec->mem = 0; - } -} - static inline ull DCV_len(DeltaChunkVector* vec) { @@ -181,7 +172,7 @@ static inline DeltaChunk* DCV_get(DeltaChunkVector* vec, Py_ssize_t i) { assert(i < vec->size && vec->mem); - return &(vec->mem[i]); + return &vec->mem[i]; } static inline @@ -190,6 +181,48 @@ int DCV_empty(DeltaChunkVector* vec) return vec->size == 0; } +// Return end pointer of the vector +static inline +DeltaChunk* DCV_end(DeltaChunkVector* vec) +{ + assert(!DCV_empty(vec)); + return &vec->mem[vec->size]; +} + +void DCV_dealloc(DeltaChunkVector* vec) +{ + if (vec->mem){ + if (vec->size){ + const DeltaChunk* end = DCV_end(vec); + DeltaChunk* i; + for(i = &vec->mem[0]; i < end; i++){ + DC_destroy(i); + } + } + PyMem_Free(vec->mem); + vec->size = 0; + vec->reserved_size = 0; + vec->mem = 0; + } +} + +// Append num-chunks to the end of the list, possibly reallocating existing ones +// Return a pointer to the first of the added items. They are not yet initialized +// If num-chunks == 0, it returns the end pointer of the allocated memory +static inline +DeltaChunk* DCV_append_multiple(DeltaChunkVector* vec, uint num_chunks) +{ + if (vec->size + num_chunks > vec->reserved_size){ + if (!DCV_grow(vec, (vec->size + num_chunks) - vec->reserved_size)){ + Py_FatalError("Could not allocate memory for append operation"); + } + } + Py_FatalError("Could not allocate memory for append operation"); + Py_ssize_t old_size = vec->size; + vec->size += num_chunks; + return &vec->mem[old_size]; +} + // DELTA CHUNK LIST (PYTHON) ///////////////////////////// @@ -200,12 +233,6 @@ typedef struct { } DeltaChunkList; -static -int DCL_new(DeltaChunkList* self, PyObject* args, PyObject* kwds) -{ - return DCV_init(&self->vec, 0); -} - static int DCL_init(DeltaChunkList *self, PyObject *args, PyObject *kwds) @@ -215,19 +242,20 @@ int DCL_init(DeltaChunkList *self, PyObject *args, PyObject *kwds) return 0; } + assert(self->vec.mem == NULL); + ull init_size = 0; PyArg_ParseTuple(args, "K", &init_size); if (init_size == 0){ - init_size = 125000; + init_size = 12500; } - - return DCV_grow(&self->vec, init_size); + return DCV_init(&self->vec, init_size); } static void DCL_dealloc(DeltaChunkList* self) { - DCV_dealloc(&self->vec); + DCV_dealloc(&(self->vec)); } static @@ -305,7 +333,7 @@ static PyTypeObject DeltaChunkListType = { 0, /* tp_dictoffset */ (initproc)DCL_init, /* tp_init */ 0, /* tp_alloc */ - (newfunc)DCL_new, /* tp_new */ + 0, /* tp_new */ }; diff --git a/stream.py b/stream.py index 169104625..6d7479d1c 100644 --- a/stream.py +++ b/stream.py @@ -339,6 +339,9 @@ def _set_cache_(self, attr): # the final delta data stream. dcl = connect_deltas(self._dstreams) assert dcl is not None + print "got dcl" + del(dcl) + print "dealloc worked" # call len directly, as the (optional) c version doesn't implement the sequence # protocol From 445b71637576649fd6f1f3c287f50eec24d4fbf4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 12 Oct 2010 12:43:57 +0200 Subject: [PATCH 0080/2375] Wow, this was a lesson. My full hatred goes to python, and C, and everything ... cool if you control everything, but not cool if an Object_New call doesn't do anything for you - creating a new instance of an own type in python doesn't appear to be that easy after all, at least not if you want your initializers/new procs to be called --- _fun.c | 60 +++++++++++++++++++++++++++++++------------------------ stream.py | 3 --- 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/_fun.c b/_fun.c index 47f5d8ecf..3a1bd0355 100644 --- a/_fun.c +++ b/_fun.c @@ -192,13 +192,12 @@ DeltaChunk* DCV_end(DeltaChunkVector* vec) void DCV_dealloc(DeltaChunkVector* vec) { if (vec->mem){ - if (vec->size){ - const DeltaChunk* end = DCV_end(vec); - DeltaChunk* i; - for(i = &vec->mem[0]; i < end; i++){ - DC_destroy(i); - } + const DeltaChunk* end = DCV_end(vec); + DeltaChunk* i; + for(i = vec->mem; i < end; i++){ + DC_destroy(i); } + PyMem_Free(vec->mem); vec->size = 0; vec->reserved_size = 0; @@ -207,7 +206,7 @@ void DCV_dealloc(DeltaChunkVector* vec) } // Append num-chunks to the end of the list, possibly reallocating existing ones -// Return a pointer to the first of the added items. They are not yet initialized +// Return a pointer to the first of the added items. They are already null initialized // If num-chunks == 0, it returns the end pointer of the allocated memory static inline DeltaChunk* DCV_append_multiple(DeltaChunkVector* vec, uint num_chunks) @@ -220,6 +219,11 @@ DeltaChunk* DCV_append_multiple(DeltaChunkVector* vec, uint num_chunks) Py_FatalError("Could not allocate memory for append operation"); Py_ssize_t old_size = vec->size; vec->size += num_chunks; + + for(;old_size < vec->size; ++old_size){ + DC_init(DCV_get(vec, old_size), 0, 0, 0, NULL); + } + return &vec->mem[old_size]; } @@ -235,21 +239,15 @@ typedef struct { static -int DCL_init(DeltaChunkList *self, PyObject *args, PyObject *kwds) +int DCL_init(DeltaChunkList*self, PyObject *args, PyObject *kwds) { - if(PySequence_Size(args) > 1){ - PyErr_SetString(PyExc_ValueError, "Zero or one arguments are allowed, providing the initial size of the queue in DeltaChunks"); - return 0; + if(args && PySequence_Size(args) > 0){ + PyErr_SetString(PyExc_ValueError, "Too many arguments"); + return -1; } - assert(self->vec.mem == NULL); - - ull init_size = 0; - PyArg_ParseTuple(args, "K", &init_size); - if (init_size == 0){ - init_size = 12500; - } - return DCV_init(&self->vec, init_size); + DCV_init(&self->vec, 0); + return 0; } static @@ -285,8 +283,6 @@ PyObject* DCL_apply(PyObject* self, PyObject* args) Py_RETURN_NONE; } - - static PyMethodDef DCL_methods[] = { {"apply", (PyCFunction)DCL_apply, METH_VARARGS, "Apply the given iterable of delta streams" }, {"__len__", (PyCFunction)DCL_len, METH_NOARGS, NULL}, @@ -331,12 +327,24 @@ static PyTypeObject DeltaChunkListType = { 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ - (initproc)DCL_init, /* tp_init */ + (initproc)DCL_init, /* tp_init */ 0, /* tp_alloc */ - 0, /* tp_new */ + 0, /* tp_new */ }; +// Makes a new copy of the DeltaChunkList - you have to do everything yourselve +// in C ... want C++ !! +DeltaChunkList* DCL_new_instance(void) +{ + DeltaChunkList* dcl = (DeltaChunkList*) PyType_GenericNew(&DeltaChunkListType, 0, 0); + assert(dcl); + + DCL_init(dcl, 0, 0); + assert(dcl->vec.size == 0); + return dcl; +} + static inline ull msb_size(const char* data, Py_ssize_t dlen, Py_ssize_t offset, Py_ssize_t* out_bytes_read){ ull size = 0; @@ -351,7 +359,7 @@ ull msb_size(const char* data, Py_ssize_t dlen, Py_ssize_t offset, Py_ssize_t* o }// END while in range *out_bytes_read = i+offset; - assert((*out_bytes_read * 8) - (*out_bytes_read - 1) <= sizeof(ull)); + assert((*out_bytes_read * 8) - (*out_bytes_read - 1) <= sizeof(ull) * 8); return size; } @@ -373,7 +381,8 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) DeltaChunkList* tdcl = 0; DeltaChunkList* dcl = 0; - dcl = tdcl = PyObject_New(DeltaChunkList, &DeltaChunkListType); + dcl = tdcl = DCL_new_instance(); + assert(dcl != NULL); if (!dcl){ PyErr_SetString(PyExc_RuntimeError, "Couldn't allocate list"); return NULL; @@ -478,7 +487,6 @@ PyMODINIT_FUNC init_fun(void) { PyObject *m; - DeltaChunkListType.tp_new = PyType_GenericNew; if (PyType_Ready(&DeltaChunkListType) < 0) return; diff --git a/stream.py b/stream.py index 6d7479d1c..169104625 100644 --- a/stream.py +++ b/stream.py @@ -339,9 +339,6 @@ def _set_cache_(self, attr): # the final delta data stream. dcl = connect_deltas(self._dstreams) assert dcl is not None - print "got dcl" - del(dcl) - print "dealloc worked" # call len directly, as the (optional) c version doesn't implement the sequence # protocol From 9ba93c0deb4f46b524e28c8103b35f408a936e04 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 12 Oct 2010 14:58:38 +0200 Subject: [PATCH 0081/2375] Apparently, the most serious memory bugs are fixed for now, lets get back to the actual thing --- _fun.c | 73 +++++++++++++++++++++++++++++++++++++++++++------------ stream.py | 1 - 2 files changed, 57 insertions(+), 17 deletions(-) diff --git a/_fun.c b/_fun.c index 3a1bd0355..7089cfe3d 100644 --- a/_fun.c +++ b/_fun.c @@ -2,6 +2,7 @@ #include #include #include +#include static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) { @@ -87,7 +88,6 @@ static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) typedef unsigned long long ull; typedef unsigned int uint; - // DELTA CHUNK //////////////// // Internal Delta Chunk Objects @@ -142,13 +142,17 @@ int DCV_grow(DeltaChunkVector* vec, uint num_dc) } if (vec->mem == NULL){ - vec->mem = PyMem_Malloc(grow_by_chunks * sizeof(vec->mem)); + vec->mem = PyMem_Malloc(grow_by_chunks * sizeof(DeltaChunk)); } else { - vec->mem = PyMem_Realloc(vec->mem, (vec->reserved_size + grow_by_chunks) * sizeof(vec->mem)); + vec->mem = PyMem_Realloc(vec->mem, (vec->reserved_size + grow_by_chunks) * sizeof(DeltaChunk)); } assert(vec->mem != NULL); vec->reserved_size = vec->reserved_size + grow_by_chunks; +#ifdef DEBUG + fprintf(stderr, "Allocated %i bytes at %p, to hold up to %i chunks\n", (int)((vec->reserved_size + grow_by_chunks) * sizeof(DeltaChunk)), vec->mem, (int)(vec->reserved_size + grow_by_chunks)); +#endif + return vec->mem != NULL; } @@ -192,7 +196,11 @@ DeltaChunk* DCV_end(DeltaChunkVector* vec) void DCV_dealloc(DeltaChunkVector* vec) { if (vec->mem){ - const DeltaChunk* end = DCV_end(vec); +#ifdef DEBUG + fprintf(stderr, "Freeing %p\n", (void*)vec->mem); +#endif + + const DeltaChunk* end = &vec->mem[vec->size]; DeltaChunk* i; for(i = vec->mem; i < end; i++){ DC_destroy(i); @@ -342,6 +350,7 @@ DeltaChunkList* DCL_new_instance(void) DCL_init(dcl, 0, 0); assert(dcl->vec.size == 0); + assert(dcl->vec.mem == NULL); return dcl; } @@ -377,16 +386,13 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) stream_iter = dstreams; } - DeltaChunkList* bdcl = 0; - DeltaChunkList* tdcl = 0; - DeltaChunkList* dcl = 0; + DeltaChunkVector bdcv; + DeltaChunkVector tdcv; + DeltaChunkVector dcv; + DCV_init(&bdcv, 0); + DCV_init(&dcv, 0); + DCV_init(&tdcv, 0); - dcl = tdcl = DCL_new_instance(); - assert(dcl != NULL); - if (!dcl){ - PyErr_SetString(PyExc_RuntimeError, "Couldn't allocate list"); - return NULL; - } unsigned int dsi; PyObject* ds; @@ -408,6 +414,10 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) Py_ssize_t ofs = 0; const ull base_size = msb_size(data, dlen, 0, &ofs); const ull target_size = msb_size(data, dlen, ofs, &ofs); + + // estimate number of ops - assume one third adds, half two byte (size+offset) copies + const uint approx_num_cmds = (dlen / 3) + (((dlen / 3) * 2) / (2+2+1)); + DCV_grow(&dcv, approx_num_cmds); // parse command stream const char* dend = data + dlen; @@ -431,7 +441,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) const unsigned long rbound = cp_off + cp_size; if (rbound < cp_size || rbound > base_size){ - goto loop_end; + break; } // TODO: Add node @@ -446,8 +456,19 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) goto loop_end; } }// END handle command opcodes - assert(tbw == target_size); + + // swap the vector + // Skip the first vector, as it is also used as top chunk vector + if (bdcv.mem != tdcv.mem){ + DCV_dealloc(&bdcv); + } + bdcv = dcv; + if (dsi == 0){ + tdcv = dcv; + } + DCV_init(&dcv, 0); + loop_end: // perform cleanup @@ -467,11 +488,31 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) Py_DECREF(stream_iter); } + DCV_dealloc(&bdcv); + if (dsi > 1){ + // otherwise dcv equals tcl + DCV_dealloc(&dcv); + } + + // Return the actual python object - its just a container + DeltaChunkList* dcl = DCL_new_instance(); + if (!dcl){ + PyErr_SetString(PyExc_RuntimeError, "Couldn't allocate list"); + // Otherwise tdcv would be deallocated by the chunk list + DCV_dealloc(&tdcv); + error = 1; + } else { + // Plain copy, don't deallocate + dcl->vec = tdcv; + } + if (error){ + // Will dealloc tdcv + Py_XDECREF(dcl); return NULL; } - return (PyObject*)tdcl; + return (PyObject*)dcl; } static PyMethodDef py_fun[] = { diff --git a/stream.py b/stream.py index 169104625..af4591f85 100644 --- a/stream.py +++ b/stream.py @@ -338,7 +338,6 @@ def _set_cache_(self, attr): # the last delta, and reverse-merge its ancestor delta, until we receive # the final delta data stream. dcl = connect_deltas(self._dstreams) - assert dcl is not None # call len directly, as the (optional) c version doesn't implement the sequence # protocol From 489f763308d4982a5220a648b92ecb2cc82f4ae4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 12 Oct 2010 16:04:55 +0200 Subject: [PATCH 0082/2375] Now adding chunks to the vectors, next up is to implement the actual chunk merging --- _fun.c | 104 ++++++++++++++++++++++++++++++++++++++------------------- fun.py | 1 + 2 files changed, 71 insertions(+), 34 deletions(-) diff --git a/_fun.c b/_fun.c index 7089cfe3d..2ad8d641d 100644 --- a/_fun.c +++ b/_fun.c @@ -3,6 +3,7 @@ #include #include #include +#include static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) { @@ -87,6 +88,7 @@ static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) typedef unsigned long long ull; typedef unsigned int uint; +typedef unsigned char uchar; // DELTA CHUNK //////////////// @@ -95,21 +97,38 @@ typedef struct { ull to; ull ts; ull so; - PyObject* data; + uchar* data; } DeltaChunk; -void DC_init(DeltaChunk* dc, ull to, ull ts, ull so, PyObject* data) +void DC_init(DeltaChunk* dc, ull to, ull ts, ull so) { dc->to = to; dc->ts = ts; dc->so = so; - Py_XINCREF(data); - dc->data = data; + dc->data = NULL; } void DC_destroy(DeltaChunk* dc) { - Py_XDECREF(dc->data); + if (dc->data){ + PyMem_Free((void*)dc->data); + } +} + +// Store a copy of data in our instance +void DC_set_data(DeltaChunk* dc, const uchar* data, Py_ssize_t dlen) +{ + if (dc->data){ + PyMem_Free((void*)dc->data); + } + + if (data == 0){ + dc->data = NULL; + return; + } + + dc->data = (uchar*)PyMem_Malloc(dlen); + memcpy(dc->data, data, dlen); } ull DC_rbound(DeltaChunk* dc) @@ -146,7 +165,11 @@ int DCV_grow(DeltaChunkVector* vec, uint num_dc) } else { vec->mem = PyMem_Realloc(vec->mem, (vec->reserved_size + grow_by_chunks) * sizeof(DeltaChunk)); } - assert(vec->mem != NULL); + + if (vec->mem == NULL){ + Py_FatalError("Could not allocate memory for append operation"); + } + vec->reserved_size = vec->reserved_size + grow_by_chunks; #ifdef DEBUG @@ -220,21 +243,33 @@ static inline DeltaChunk* DCV_append_multiple(DeltaChunkVector* vec, uint num_chunks) { if (vec->size + num_chunks > vec->reserved_size){ - if (!DCV_grow(vec, (vec->size + num_chunks) - vec->reserved_size)){ - Py_FatalError("Could not allocate memory for append operation"); - } + DCV_grow(vec, (vec->size + num_chunks) - vec->reserved_size); } Py_FatalError("Could not allocate memory for append operation"); Py_ssize_t old_size = vec->size; vec->size += num_chunks; for(;old_size < vec->size; ++old_size){ - DC_init(DCV_get(vec, old_size), 0, 0, 0, NULL); + DC_init(DCV_get(vec, old_size), 0, 0, 0); } return &vec->mem[old_size]; } +// Append one chunk to the end of the list, and return a pointer to it +// It will have been initialized. +static inline +DeltaChunk* DCV_append(DeltaChunkVector* vec) +{ + if (vec->size + 1 > vec->reserved_size){ + DCV_grow(vec, 1); + } + + DeltaChunk* next = vec->mem + vec->size; + vec->size += 1; + return next; +} + // DELTA CHUNK LIST (PYTHON) ///////////////////////////// @@ -354,21 +389,18 @@ DeltaChunkList* DCL_new_instance(void) return dcl; } -static inline -ull msb_size(const char* data, Py_ssize_t dlen, Py_ssize_t offset, Py_ssize_t* out_bytes_read){ - ull size = 0; - Py_ssize_t i = 0; - const char* dend = data + dlen; - for (data = data + offset; data < dend; data+=1, i+=1){ - char c = *data; - size |= (c & 0x7f) << i*7; - if (!(c & 0x80)){ - break; - } - }// END while in range - - *out_bytes_read = i+offset; - assert((*out_bytes_read * 8) - (*out_bytes_read - 1) <= sizeof(ull) * 8); +inline +ull msb_size(const uchar** datap, const uchar* top) +{ + const uchar *data = *datap; + ull cmd, size = 0; + uint i = 0; + do { + cmd = *data++; + size |= (cmd & 0x7f) << i; + i += 7; + } while (cmd & 0x80 && data < top); + *datap = data; return size; } @@ -406,25 +438,25 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) goto loop_end; } - const char* data; + const uchar* data; Py_ssize_t dlen; PyObject_AsReadBuffer(db, (const void**)&data, &dlen); + const uchar* dend = data + dlen; // read header - Py_ssize_t ofs = 0; - const ull base_size = msb_size(data, dlen, 0, &ofs); - const ull target_size = msb_size(data, dlen, ofs, &ofs); + const ull base_size = msb_size(&data, dend); + const ull target_size = msb_size(&data, dend); // estimate number of ops - assume one third adds, half two byte (size+offset) copies const uint approx_num_cmds = (dlen / 3) + (((dlen / 3) * 2) / (2+2+1)); DCV_grow(&dcv, approx_num_cmds); // parse command stream - const char* dend = data + dlen; ull tbw = 0; // Amount of target bytes written - for (data = data + ofs; data < dend; ++data) + assert(data < dend); + while (data < dend) { - const char cmd = *data; + const char cmd = *data++; if (cmd & 0x80) { @@ -444,12 +476,16 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) break; } - // TODO: Add node + DC_init(DCV_append(&dcv), tbw, cp_size, cp_off); tbw += cp_size; } else if (cmd) { - // TODO: Add node + // TODO: Compress nodes by parsing them in advance + DeltaChunk* dc = DCV_append(&dcv); + DC_init(dc, tbw, cmd, 0); + DC_set_data(dc, data, cmd); tbw += cmd; + data += cmd; } else { error = 1; PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); diff --git a/fun.py b/fun.py index a4da30903..e6262b4bc 100644 --- a/fun.py +++ b/fun.py @@ -703,6 +703,7 @@ def is_equal_canonical_sha(canonical_length, match, sha1): try: + # raise ImportError; # DEBUG from _fun import connect_deltas except ImportError: pass From a93363cffb225520869d737de1081c1ff77ed108 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 12 Oct 2010 17:45:42 +0200 Subject: [PATCH 0083/2375] prepared the slicing, as well as a few accompanying methods. There is still quite a lot functionality missing --- _fun.c | 194 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 166 insertions(+), 28 deletions(-) diff --git a/_fun.c b/_fun.c index 2ad8d641d..1186c6d11 100644 --- a/_fun.c +++ b/_fun.c @@ -89,6 +89,7 @@ static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) typedef unsigned long long ull; typedef unsigned int uint; typedef unsigned char uchar; +typedef uchar bool; // DELTA CHUNK //////////////// @@ -97,45 +98,96 @@ typedef struct { ull to; ull ts; ull so; - uchar* data; + const uchar* data; + bool data_shared; } DeltaChunk; +inline void DC_init(DeltaChunk* dc, ull to, ull ts, ull so) { dc->to = to; dc->ts = ts; dc->so = so; dc->data = NULL; + dc->data_shared = 0; } -void DC_destroy(DeltaChunk* dc) +inline +void DC_deallocate_data(DeltaChunk* dc) { - if (dc->data){ + if (!dc->data_shared && dc->data){ PyMem_Free((void*)dc->data); } + dc->data = NULL; } -// Store a copy of data in our instance -void DC_set_data(DeltaChunk* dc, const uchar* data, Py_ssize_t dlen) +inline +void DC_destroy(DeltaChunk* dc) { - if (dc->data){ - PyMem_Free((void*)dc->data); - } + DC_deallocate_data(dc); +} + +// Store a copy of data in our instance. If shared is 1, the data will be shared, +// hence it will only be stored, but the memory will not be touched, or copied. +inline +void DC_set_data(DeltaChunk* dc, const uchar* data, Py_ssize_t dlen, bool shared) +{ + DC_deallocate_data(dc); if (data == 0){ dc->data = NULL; + dc->data_shared = 0; return; } - dc->data = (uchar*)PyMem_Malloc(dlen); - memcpy(dc->data, data, dlen); + dc->data_shared = shared; + if (shared){ + dc->data = data; + } else { + dc->data = (uchar*)PyMem_Malloc(dlen); + memcpy((void*)dc->data, (void*)data, dlen); + } + } +inline ull DC_rbound(DeltaChunk* dc) { return dc->to + dc->ts; } +// Copy all data from src to dest, the data pointer will be copied too +inline +void DC_copy_to(DeltaChunk* src, DeltaChunk* dest) +{ + dest->to = src->to; + dest->ts = src->ts; + dest->so = src->so; + dest->data_shared = 0; + + DC_set_data(dest, src->data, src->ts, 0); +} + +// Copy all data with the given offset and size. The source offset, as well +// as the data will be truncated accordingly +inline +void DC_offset_copy_to(DeltaChunk* src, DeltaChunk* dest, ull ofs, ull size) +{ + assert(size <= src->ts); + assert(src->to + ofs + size <= DC_rbound(src)); + + dest->to = src->to + ofs; + dest->ts = size; + dest->so = src->so + ofs; + + if (src->data){ + DC_set_data(dest, src->data + ofs, size, 0); + } else { + dest->data = NULL; + dest->data_shared = 0; + } +} + // DELTA CHUNK VECTOR ///////////////////// @@ -152,7 +204,7 @@ This may trigger a realloc, but will do nothing if the reserved size is already large enough. Return 1 on success, 0 on failure */ -static +inline int DCV_grow(DeltaChunkVector* vec, uint num_dc) { const uint grow_by_chunks = (vec->size + num_dc) - vec->reserved_size; @@ -188,35 +240,48 @@ int DCV_init(DeltaChunkVector* vec, ull initial_size) return DCV_grow(vec, initial_size); } -static inline +inline ull DCV_len(DeltaChunkVector* vec) { return vec->size; } +inline +ull DCV_lbound(DeltaChunkVector* vec) +{ + assert(vec->size && vec->mem); + return vec->mem->to; +} + // Return item at index -static inline +inline DeltaChunk* DCV_get(DeltaChunkVector* vec, Py_ssize_t i) { assert(i < vec->size && vec->mem); return &vec->mem[i]; } -static inline +inline +ull DCV_rbound(DeltaChunkVector* vec) +{ + return DC_rbound(DCV_get(vec, vec->size-1)); +} + +inline int DCV_empty(DeltaChunkVector* vec) { return vec->size == 0; } // Return end pointer of the vector -static inline +inline DeltaChunk* DCV_end(DeltaChunkVector* vec) { assert(!DCV_empty(vec)); return &vec->mem[vec->size]; } -void DCV_dealloc(DeltaChunkVector* vec) +void DCV_destroy(DeltaChunkVector* vec) { if (vec->mem){ #ifdef DEBUG @@ -236,6 +301,14 @@ void DCV_dealloc(DeltaChunkVector* vec) } } +// Reset this vector so that its existing memory can be filled again. +// Memory will be kept, but not cleaned up +inline +void DCV_forget_members(DeltaChunkVector* vec) +{ + vec->size = 0; +} + // Append num-chunks to the end of the list, possibly reallocating existing ones // Return a pointer to the first of the added items. They are already null initialized // If num-chunks == 0, it returns the end pointer of the allocated memory @@ -249,15 +322,17 @@ DeltaChunk* DCV_append_multiple(DeltaChunkVector* vec, uint num_chunks) Py_ssize_t old_size = vec->size; vec->size += num_chunks; +#ifdef DEBUG for(;old_size < vec->size; ++old_size){ DC_init(DCV_get(vec, old_size), 0, 0, 0); } +#endif return &vec->mem[old_size]; } // Append one chunk to the end of the list, and return a pointer to it -// It will have been initialized. +// It will not have been initialized ! static inline DeltaChunk* DCV_append(DeltaChunkVector* vec) { @@ -270,6 +345,59 @@ DeltaChunk* DCV_append(DeltaChunkVector* vec) return next; } +// Write a slice as defined by its absolute offset in bytes and its size into the given +// destination. The individual chunks written will be a deep copy of the source +// data chunks +// TODO: this could trigger copying many smallish add-chunk pieces - maybe some sort +// of append-only memory pool would improve performance +inline +void DCV_copy_slice_to(DeltaChunkVector* src, DeltaChunkVector* dest, ull ofs, ull size) +{ + +} + + +// Take slices of bdcv into the corresponding area of the tdcv, which is the topmost +// delta to apply. tmpl is used as temporary space and must be initialzed and destroyed by the +// caller +static +void DCV_connect_with_base(DeltaChunkVector* tdcv, DeltaChunkVector* bdcv, DeltaChunkVector* tmpl) +{ + DeltaChunk* dc = tdcv->mem; + DeltaChunk* end = tdcv->mem + tdcv->size; + assert(dc); + + for (;dc < end; dc++) + { + // Data chunks don't need processing + if (dc->data){ + continue; + } + + // Copy Chunk Handling + DCV_copy_slice_to(bdcv, tmpl, dc->so, dc->ts); + // assert(tmpl->size); + + // move target bounds + DeltaChunk* cdc = tmpl->mem; + DeltaChunk* cdcend = tmpl->mem + tmpl->size; + const ull ofs = dc->to - dc->so; + for(;cdc < cdcend; cdc++){ + cdc->to += ofs; + } + + // insert slice into our list, replacing our current chunk + if (tmpl->size == 1){ + *dc = *DCV_get(tmpl, 0); + } else { + + } + + // make sure the members will not be deallocated by the list + DCV_forget_members(tmpl); + } +} + // DELTA CHUNK LIST (PYTHON) ///////////////////////////// @@ -296,7 +424,7 @@ int DCL_init(DeltaChunkList*self, PyObject *args, PyObject *kwds) static void DCL_dealloc(DeltaChunkList* self) { - DCV_dealloc(&(self->vec)); + DCV_destroy(&(self->vec)); } static @@ -310,7 +438,7 @@ ull DCL_rbound(DeltaChunkList* self) { if (DCV_empty(&self->vec)) return 0; - return DC_rbound(DCV_get(&self->vec, self->vec.size - 1)); + return DCV_rbound(&self->vec); } static @@ -421,10 +549,11 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) DeltaChunkVector bdcv; DeltaChunkVector tdcv; DeltaChunkVector dcv; + DeltaChunkVector tmpl; DCV_init(&bdcv, 0); DCV_init(&dcv, 0); DCV_init(&tdcv, 0); - + DCV_init(&tmpl, 200); unsigned int dsi; PyObject* ds; @@ -453,6 +582,9 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) // parse command stream ull tbw = 0; // Amount of target bytes written + bool shared_data = dsi != 0; + bool is_first_run = dsi == 0; + assert(data < dend); while (data < dend) { @@ -481,9 +613,12 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) } else if (cmd) { // TODO: Compress nodes by parsing them in advance + // NOTE: Compression only necessary for all other deltas, not + // for the first one, as we will share the data. It really depends + // What's faster DeltaChunk* dc = DCV_append(&dcv); DC_init(dc, tbw, cmd, 0); - DC_set_data(dc, data, cmd); + DC_set_data(dc, data, cmd, shared_data); tbw += cmd; data += cmd; } else { @@ -493,18 +628,20 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) } }// END handle command opcodes assert(tbw == target_size); - + + if (!is_first_run){ + DCV_connect_with_base(&tdcv, &dcv, &tmpl); + } // swap the vector // Skip the first vector, as it is also used as top chunk vector if (bdcv.mem != tdcv.mem){ - DCV_dealloc(&bdcv); + DCV_destroy(&bdcv); } bdcv = dcv; - if (dsi == 0){ + if (is_first_run){ tdcv = dcv; } DCV_init(&dcv, 0); - loop_end: // perform cleanup @@ -524,10 +661,11 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) Py_DECREF(stream_iter); } - DCV_dealloc(&bdcv); + DCV_destroy(&tmpl); + DCV_destroy(&bdcv); if (dsi > 1){ // otherwise dcv equals tcl - DCV_dealloc(&dcv); + DCV_destroy(&dcv); } // Return the actual python object - its just a container @@ -535,7 +673,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) if (!dcl){ PyErr_SetString(PyExc_RuntimeError, "Couldn't allocate list"); // Otherwise tdcv would be deallocated by the chunk list - DCV_dealloc(&tdcv); + DCV_destroy(&tdcv); error = 1; } else { // Plain copy, don't deallocate From 166e538f9aab8db7ab30b6e8b3be407200a7e3c1 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 12 Oct 2010 18:17:19 +0200 Subject: [PATCH 0084/2375] Enhanced memory handling within the delta-stream parsing method. Removed the base delta chunk vector, which was a reminder of old (python) times which are long gone --- _fun.c | 88 +++++++++++++++++++++++++++++++++++++++------------------- fun.py | 4 +-- 2 files changed, 60 insertions(+), 32 deletions(-) diff --git a/_fun.c b/_fun.c index 1186c6d11..142795e6c 100644 --- a/_fun.c +++ b/_fun.c @@ -198,46 +198,62 @@ typedef struct { Py_ssize_t reserved_size; // Reserve in DeltaChunks } DeltaChunkVector; -/* -Grow the delta chunk list by the given amount of bytes. -This may trigger a realloc, but will do nothing if the reserved size is already -large enough. -Return 1 on success, 0 on failure -*/ + + +// Reserve enough memory to hold the given amount of delta chunks +// Return 1 on success inline -int DCV_grow(DeltaChunkVector* vec, uint num_dc) +int DCV_reserve_memory(DeltaChunkVector* vec, uint num_dc) { - const uint grow_by_chunks = (vec->size + num_dc) - vec->reserved_size; - if (grow_by_chunks <= 0){ + if (num_dc <= vec->reserved_size){ return 1; } +#ifdef DEBUG + bool was_null = vec->mem == NULL; +#endif + if (vec->mem == NULL){ - vec->mem = PyMem_Malloc(grow_by_chunks * sizeof(DeltaChunk)); + vec->mem = PyMem_Malloc(num_dc * sizeof(DeltaChunk)); } else { - vec->mem = PyMem_Realloc(vec->mem, (vec->reserved_size + grow_by_chunks) * sizeof(DeltaChunk)); + vec->mem = PyMem_Realloc(vec->mem, num_dc * sizeof(DeltaChunk)); } if (vec->mem == NULL){ Py_FatalError("Could not allocate memory for append operation"); } - vec->reserved_size = vec->reserved_size + grow_by_chunks; + vec->reserved_size = num_dc; #ifdef DEBUG - fprintf(stderr, "Allocated %i bytes at %p, to hold up to %i chunks\n", (int)((vec->reserved_size + grow_by_chunks) * sizeof(DeltaChunk)), vec->mem, (int)(vec->reserved_size + grow_by_chunks)); + const char* format = "Allocated %i bytes at %p, to hold up to %i chunks\n"; + if (!was_null) + format = "Re-allocated %i bytes at %p, to hold up to %i chunks\n"; + fprintf(stderr, format, (int)(vec->reserved_size * sizeof(DeltaChunk)), vec->mem, (int)vec->reserved_size); #endif return vec->mem != NULL; } +/* +Grow the delta chunk list by the given amount of bytes. +This may trigger a realloc, but will do nothing if the reserved size is already +large enough. +Return 1 on success, 0 on failure +*/ +inline +int DCV_grow_by(DeltaChunkVector* vec, uint num_dc) +{ + return DCV_reserve_memory(vec, vec->reserved_size + num_dc); +} + int DCV_init(DeltaChunkVector* vec, ull initial_size) { vec->mem = NULL; vec->size = 0; vec->reserved_size = 0; - return DCV_grow(vec, initial_size); + return DCV_grow_by(vec, initial_size); } inline @@ -309,6 +325,24 @@ void DCV_forget_members(DeltaChunkVector* vec) vec->size = 0; } +// Reset the vector so that its size will be zero, and its members will +// have been deallocated properly. +// It will keep its memory though, and hence can be filled again +inline +void DCV_reset(DeltaChunkVector* vec) +{ + if (vec->size == 0) + return; + + DeltaChunk* dc = vec->mem; + DeltaChunk* dcend = DCV_end(vec); + for(;dc < dcend; dc++){ + DC_destroy(dc); + } + + vec->size = 0; +} + // Append num-chunks to the end of the list, possibly reallocating existing ones // Return a pointer to the first of the added items. They are already null initialized // If num-chunks == 0, it returns the end pointer of the allocated memory @@ -316,7 +350,7 @@ static inline DeltaChunk* DCV_append_multiple(DeltaChunkVector* vec, uint num_chunks) { if (vec->size + num_chunks > vec->reserved_size){ - DCV_grow(vec, (vec->size + num_chunks) - vec->reserved_size); + DCV_grow_by(vec, (vec->size + num_chunks) - vec->reserved_size); } Py_FatalError("Could not allocate memory for append operation"); Py_ssize_t old_size = vec->size; @@ -337,7 +371,7 @@ static inline DeltaChunk* DCV_append(DeltaChunkVector* vec) { if (vec->size + 1 > vec->reserved_size){ - DCV_grow(vec, 1); + DCV_grow_by(vec, 1); } DeltaChunk* next = vec->mem + vec->size; @@ -546,12 +580,10 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) stream_iter = dstreams; } - DeltaChunkVector bdcv; - DeltaChunkVector tdcv; DeltaChunkVector dcv; + DeltaChunkVector tdcv; DeltaChunkVector tmpl; - DCV_init(&bdcv, 0); - DCV_init(&dcv, 0); + DCV_init(&dcv, 100); // should be enough to keep the average text file DCV_init(&tdcv, 0); DCV_init(&tmpl, 200); @@ -578,7 +610,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) // estimate number of ops - assume one third adds, half two byte (size+offset) copies const uint approx_num_cmds = (dlen / 3) + (((dlen / 3) * 2) / (2+2+1)); - DCV_grow(&dcv, approx_num_cmds); + DCV_reserve_memory(&dcv, approx_num_cmds); // parse command stream ull tbw = 0; // Amount of target bytes written @@ -632,16 +664,15 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) if (!is_first_run){ DCV_connect_with_base(&tdcv, &dcv, &tmpl); } - // swap the vector - // Skip the first vector, as it is also used as top chunk vector - if (bdcv.mem != tdcv.mem){ - DCV_destroy(&bdcv); - } - bdcv = dcv; + if (is_first_run){ tdcv = dcv; + // wipe out dcv without destroying the members, get its own memory + DCV_init(&dcv, tdcv.size); + } else { + // destroy members, but keep memory + DCV_reset(&dcv); } - DCV_init(&dcv, 0); loop_end: // perform cleanup @@ -662,7 +693,6 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) } DCV_destroy(&tmpl); - DCV_destroy(&bdcv); if (dsi > 1){ // otherwise dcv equals tcl DCV_destroy(&dcv); diff --git a/fun.py b/fun.py index e6262b4bc..13a3c627f 100644 --- a/fun.py +++ b/fun.py @@ -545,7 +545,6 @@ def connect_deltas(dstreams): :param dstreams: iterable of delta stream objects, the delta to be applied last comes first, then all its ancestors in order :return: DeltaChunkList, containing all operations to apply""" - bdcl = None # data chunk list for initial base tdcl = None # topmost dcl dcl = tdcl = TopdownDeltaChunkList() @@ -611,13 +610,12 @@ def connect_deltas(dstreams): dcl.compress() # merge the lists ! - if bdcl is not None: + if dsi > 0: if not tdcl.connect_with_next_base(dcl): break # END handle merge # prepare next base - bdcl = dcl dcl = DeltaChunkList() # END for each delta stream From 60f7768ed00ad666317c1877abe52906d6014d50 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 12 Oct 2010 19:46:24 +0200 Subject: [PATCH 0085/2375] Implemented everything about the merging of the bases into the topmost delta list. Its not yet working, but at least its not crashing --- _fun.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 101 insertions(+), 9 deletions(-) diff --git a/_fun.c b/_fun.c index 142795e6c..eb4b6b865 100644 --- a/_fun.c +++ b/_fun.c @@ -91,6 +91,9 @@ typedef unsigned int uint; typedef unsigned char uchar; typedef uchar bool; +// Constants +const ull gDVC_grow_by = 50; + // DELTA CHUNK //////////////// // Internal Delta Chunk Objects @@ -277,10 +280,17 @@ DeltaChunk* DCV_get(DeltaChunkVector* vec, Py_ssize_t i) return &vec->mem[i]; } +// Return last item +inline +DeltaChunk* DCV_last(DeltaChunkVector* vec) +{ + return DCV_get(vec, vec->size-1); +} + inline ull DCV_rbound(DeltaChunkVector* vec) { - return DC_rbound(DCV_get(vec, vec->size-1)); + return DC_rbound(DCV_last(vec)); } inline @@ -371,7 +381,7 @@ static inline DeltaChunk* DCV_append(DeltaChunkVector* vec) { if (vec->size + 1 > vec->reserved_size){ - DCV_grow_by(vec, 1); + DCV_grow_by(vec, gDVC_grow_by); } DeltaChunk* next = vec->mem + vec->size; @@ -379,6 +389,33 @@ DeltaChunk* DCV_append(DeltaChunkVector* vec) return next; } +// Return delta chunk being closest to the given absolute offset +inline +DeltaChunk* DCV_closest_chunk(DeltaChunkVector* vec, ull ofs) +{ + assert(vec->mem); + + ull lo = 0; + ull hi = vec->size; + ull mid; + DeltaChunk* dc; + + while (lo < hi) + { + mid = (lo + hi) / 2; + dc = vec->mem + mid; + if (dc->to > ofs){ + hi = mid; + } else if ((DC_rbound(dc) > ofs) | (dc->to == ofs)) { + return dc; + } else { + lo = mid + 1; + } + } + + return DCV_last(vec); +} + // Write a slice as defined by its absolute offset in bytes and its size into the given // destination. The individual chunks written will be a deep copy of the source // data chunks @@ -387,14 +424,67 @@ DeltaChunk* DCV_append(DeltaChunkVector* vec) inline void DCV_copy_slice_to(DeltaChunkVector* src, DeltaChunkVector* dest, ull ofs, ull size) { + assert(DCV_lbound(src) <= ofs); + assert(DCV_rbound(src) <= ofs + size); + DeltaChunk* cdc = DCV_closest_chunk(src, ofs); + + // partial overlap + if (cdc->to != ofs) { + DeltaChunk* destc = DCV_append(dest); + const ull relofs = ofs - cdc->to; + DC_offset_copy_to(cdc, destc, relofs, cdc->ts - relofs < size ? cdc->ts - relofs : size); + cdc += 1; + size -= destc->ts; + + if (size == 0){ + return; + } + } + + DeltaChunk* vecend = DCV_end(src); + for( ;(cdc < vecend) && size; ++cdc) + { + if (cdc->ts < size) { + DC_copy_to(cdc, DCV_append(dest)); + size -= cdc->ts; + } else { + DC_offset_copy_to(cdc, DCV_append(dest), 0, size); + size = 0; + break; + } + } + + assert(size == 0); } +// Insert all chunks in 'from' to 'to', starting at the delta chunk named 'at' which +// originates in to +// 'at' will be replaced by the items to insert ( special purpose ) +// 'at' will be properly destroyed, but all items will just be copied bytewise +// using memcpy. Hence from must just forget about them ! +inline +void DCV_replace_one_by_many(DeltaChunkVector* from, DeltaChunkVector* to, DeltaChunk* at) +{ + assert(from->size > 1); + + DCV_reserve_memory(to, to->size + from->size - 1); // -1 because we replace at + DC_destroy(at); + to->size -= 1 + from->size; + + // If we are somewhere in the middle, we have to make some space + if (DCV_last(to) != at) { + memmove((void*)at+from->size, (void*)(at+1), (size_t)(DCV_end(to) - (at+1))); + } + + // Finally copy all the items in + memcpy((void*) at, (void*)from->mem, from->size*sizeof(DeltaChunk)); +} + // Take slices of bdcv into the corresponding area of the tdcv, which is the topmost // delta to apply. tmpl is used as temporary space and must be initialzed and destroyed by the // caller -static void DCV_connect_with_base(DeltaChunkVector* tdcv, DeltaChunkVector* bdcv, DeltaChunkVector* tmpl) { DeltaChunk* dc = tdcv->mem; @@ -413,18 +503,20 @@ void DCV_connect_with_base(DeltaChunkVector* tdcv, DeltaChunkVector* bdcv, Delta // assert(tmpl->size); // move target bounds - DeltaChunk* cdc = tmpl->mem; - DeltaChunk* cdcend = tmpl->mem + tmpl->size; + DeltaChunk* tdc = tmpl->mem; + DeltaChunk* tdcend = tmpl->mem + tmpl->size; const ull ofs = dc->to - dc->so; - for(;cdc < cdcend; cdc++){ - cdc->to += ofs; + for(;tdc < tdcend; tdc++){ + tdc->to += ofs; } - // insert slice into our list, replacing our current chunk + // insert slice into our list if (tmpl->size == 1){ + // Its not data, so destroy is not really required, anyhow ... + DC_destroy(dc); *dc = *DCV_get(tmpl, 0); } else { - + DCV_replace_one_by_many(tmpl, tdcv, dc); } // make sure the members will not be deallocated by the list From 60b4f37a8b17c8f89b1b0ba7a0268f375469033d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 12 Oct 2010 22:06:27 +0200 Subject: [PATCH 0086/2375] Improved performance of python implementation by 10 percent, just by removing function calls and object creations --- fun.py | 82 ++++++++++++---------------------------------------------- 1 file changed, 17 insertions(+), 65 deletions(-) diff --git a/fun.py b/fun.py index 13a3c627f..038b4c761 100644 --- a/fun.py +++ b/fun.py @@ -55,9 +55,6 @@ def _set_delta_rbound(d, size): :param size: size relative to our target offset, may not be 0, must be smaller or equal to our size :return: d""" - if d.ts == size: - return - d.ts = size # NOTE: data is truncated automatically when applying the delta @@ -154,76 +151,30 @@ def _closest_index(dcl, absofs): # END for each delta absofs return len(dcl)-1 -def delta_list_apply(dcl, bbuf, write, lbound_offset=0, size=0): +def delta_list_apply(dcl, bbuf, write): """Apply the chain's changes and write the final result using the passed write function. :param bbuf: base buffer containing the base of all deltas contained in this list. It will only be used if the chunk in question does not have a base chain. - :param lbound_offset: offset at which to start applying the delta, relative to - our lbound - :param size: if larger than 0, only the given amount of bytes will be applied :param write: function taking a string of bytes to write to the output""" - slen = len(dcl) - if slen == 0: - return - # END early abort - absofs = dcl.lbound() + lbound_offset - if size == 0: - size = dcl.rbound() - absofs - # END initialize size - - if lbound_offset or absofs + size != dcl.rbound(): - cdi = _closest_index(dcl, absofs) - cd = dcl[cdi] - if cd.to != absofs: - tcd = delta_duplicate(cd) - _move_delta_lbound(tcd, absofs - cd.to) - _set_delta_rbound(tcd, min(tcd.ts, size)) - delta_chunk_apply(tcd, bbuf, write) - size -= tcd.ts - cdi += 1 - # END handle first chunk - - # here we have to either apply full chunks, or smaller ones, but - # we always start at the chunks target offset - while cdi < slen and size: - cd = dcl[cdi] - if cd.ts <= size: - delta_chunk_apply(cd, bbuf, write) - size -= cd.ts - else: - tcd = delta_duplicate(cd) - _set_delta_rbound(tcd, size) - delta_chunk_apply(tcd, bbuf, write) - size -= tcd.ts - break - # END handle bytes to apply - cdi += 1 - # END handle rest - else: - for dc in dcl: - delta_chunk_apply(dc, bbuf, write) - # END for each dc - # END handle application values + for dc in dcl: + delta_chunk_apply(dc, bbuf, write) + # END for each dc -def delta_list_slice(dcl, absofs, size): +def delta_list_slice(dcl, absofs, size, ndcl): """:return: Subsection of this list at the given absolute offset, with the given size in bytes. - :return: list (copy) which represents the given chunk""" - dcllbound = dcl.lbound() - absofs = max(absofs, dcllbound) - size = min(dcl.rbound() - dcllbound, size) + :return: None""" cdi = _closest_index(dcl, absofs) # delta start index cd = dcl[cdi] slen = len(dcl) - ndcl = list() lappend = ndcl.append if cd.to != absofs: - tcd = delta_duplicate(cd) + tcd = DeltaChunk(cd.to, cd.ts, cd.so, cd.data) _move_delta_lbound(tcd, absofs - cd.to) - _set_delta_rbound(tcd, min(tcd.ts, size)) + tcd.ts = min(tcd.ts, size) lappend(tcd) size -= tcd.ts cdi += 1 @@ -233,11 +184,11 @@ def delta_list_slice(dcl, absofs, size): # are we larger than the current block cd = dcl[cdi] if cd.ts <= size: - lappend(delta_duplicate(cd)) + lappend(DeltaChunk(cd.to, cd.ts, cd.so, cd.data)) size -= cd.ts else: - tcd = delta_duplicate(cd) - _set_delta_rbound(tcd, size) + tcd = DeltaChunk(cd.to, cd.ts, cd.so, cd.data) + tcd.ts = size lappend(tcd) size -= tcd.ts break @@ -245,7 +196,6 @@ def delta_list_slice(dcl, absofs, size): cdi += 1 # END for each chunk - return ndcl class DeltaChunkList(list): """List with special functionality to deal with DeltaChunks. @@ -272,10 +222,10 @@ def size(self): """:return: size of bytes as measured by our delta chunks""" return self.rbound() - self.lbound() - def apply(self, bbuf, write, lbound_offset=0, size=0): + def apply(self, bbuf, write): """Only used by public clients, internally we only use the global routines for performance""" - return delta_list_apply(self, bbuf, write, lbound_offset, size) + return delta_list_apply(self, bbuf, write) def compress(self): """Alter the list to reduce the amount of nodes. Currently we concatenate @@ -369,6 +319,7 @@ def connect_with_next_base(self, bdcl): nfc = 0 # number of frozen chunks dci = 0 # delta chunk index slen = len(self) # len of self + ccl = list() # temporary list while dci < slen: dc = self[dci] dci += 1 @@ -384,8 +335,9 @@ def connect_with_next_base(self, bdcl): # dont support efficient insertion ( just one at a time ), but for now # we live with it. Internally, its all just a 32/64bit pointer, and # the portions of moved memory should be smallish. Maybe we just rebuild - # ourselves in order to reduce the amount of insertions ... - ccl = delta_list_slice(bdcl, dc.so, dc.ts) + # ourselves in order to reduce the amount of insertions ... + del(ccl[:]) + delta_list_slice(bdcl, dc.so, dc.ts, ccl) # move the target bounds into place to match with our chunk ofs = dc.to - dc.so From a63ee1d034a6677bc3ab408d1a16593bbb6078ca Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 12 Oct 2010 23:55:45 +0200 Subject: [PATCH 0087/2375] Currently there is a weird memory bug, valgrind says it is writing one byte too much. Perhaps its because of the use of PyMem --- _fun.c | 115 ++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 82 insertions(+), 33 deletions(-) diff --git a/_fun.c b/_fun.c index eb4b6b865..fc4ee1edc 100644 --- a/_fun.c +++ b/_fun.c @@ -94,6 +94,12 @@ typedef uchar bool; // Constants const ull gDVC_grow_by = 50; +#ifdef DEBUG +#define DBG_check(vec) DCV_dbg_check_integrity(vec) +#else +#define DBG_check(vec) +#endif + // DELTA CHUNK //////////////// // Internal Delta Chunk Objects @@ -154,19 +160,20 @@ void DC_set_data(DeltaChunk* dc, const uchar* data, Py_ssize_t dlen, bool shared } inline -ull DC_rbound(DeltaChunk* dc) +ull DC_rbound(const DeltaChunk* dc) { return dc->to + dc->ts; } // Copy all data from src to dest, the data pointer will be copied too inline -void DC_copy_to(DeltaChunk* src, DeltaChunk* dest) +void DC_copy_to(const DeltaChunk* src, DeltaChunk* dest) { dest->to = src->to; dest->ts = src->ts; dest->so = src->so; dest->data_shared = 0; + dest->data = NULL; DC_set_data(dest, src->data, src->ts, 0); } @@ -174,7 +181,7 @@ void DC_copy_to(DeltaChunk* src, DeltaChunk* dest) // Copy all data with the given offset and size. The source offset, as well // as the data will be truncated accordingly inline -void DC_offset_copy_to(DeltaChunk* src, DeltaChunk* dest, ull ofs, ull size) +void DC_offset_copy_to(const DeltaChunk* src, DeltaChunk* dest, ull ofs, ull size) { assert(size <= src->ts); assert(src->to + ofs + size <= DC_rbound(src)); @@ -182,6 +189,7 @@ void DC_offset_copy_to(DeltaChunk* src, DeltaChunk* dest, ull ofs, ull size) dest->to = src->to + ofs; dest->ts = size; dest->so = src->so + ofs; + dest->data = NULL; if (src->data){ DC_set_data(dest, src->data + ofs, size, 0); @@ -260,13 +268,13 @@ int DCV_init(DeltaChunkVector* vec, ull initial_size) } inline -ull DCV_len(DeltaChunkVector* vec) +ull DCV_len(const DeltaChunkVector* vec) { return vec->size; } inline -ull DCV_lbound(DeltaChunkVector* vec) +ull DCV_lbound(const DeltaChunkVector* vec) { assert(vec->size && vec->mem); return vec->mem->to; @@ -274,7 +282,7 @@ ull DCV_lbound(DeltaChunkVector* vec) // Return item at index inline -DeltaChunk* DCV_get(DeltaChunkVector* vec, Py_ssize_t i) +DeltaChunk* DCV_get(const DeltaChunkVector* vec, Py_ssize_t i) { assert(i < vec->size && vec->mem); return &vec->mem[i]; @@ -282,29 +290,29 @@ DeltaChunk* DCV_get(DeltaChunkVector* vec, Py_ssize_t i) // Return last item inline -DeltaChunk* DCV_last(DeltaChunkVector* vec) +DeltaChunk* DCV_last(const DeltaChunkVector* vec) { return DCV_get(vec, vec->size-1); } inline -ull DCV_rbound(DeltaChunkVector* vec) +ull DCV_rbound(const DeltaChunkVector* vec) { return DC_rbound(DCV_last(vec)); } inline -int DCV_empty(DeltaChunkVector* vec) +int DCV_empty(const DeltaChunkVector* vec) { return vec->size == 0; } // Return end pointer of the vector inline -DeltaChunk* DCV_end(DeltaChunkVector* vec) +const DeltaChunk* DCV_end(const DeltaChunkVector* vec) { assert(!DCV_empty(vec)); - return &vec->mem[vec->size]; + return vec->mem + vec->size; } void DCV_destroy(DeltaChunkVector* vec) @@ -345,7 +353,7 @@ void DCV_reset(DeltaChunkVector* vec) return; DeltaChunk* dc = vec->mem; - DeltaChunk* dcend = DCV_end(vec); + const DeltaChunk* dcend = DCV_end(vec); for(;dc < dcend; dc++){ DC_destroy(dc); } @@ -366,11 +374,9 @@ DeltaChunk* DCV_append_multiple(DeltaChunkVector* vec, uint num_chunks) Py_ssize_t old_size = vec->size; vec->size += num_chunks; -#ifdef DEBUG for(;old_size < vec->size; ++old_size){ DC_init(DCV_get(vec, old_size), 0, 0, 0); } -#endif return &vec->mem[old_size]; } @@ -391,7 +397,7 @@ DeltaChunk* DCV_append(DeltaChunkVector* vec) // Return delta chunk being closest to the given absolute offset inline -DeltaChunk* DCV_closest_chunk(DeltaChunkVector* vec, ull ofs) +DeltaChunk* DCV_closest_chunk(const DeltaChunkVector* vec, ull ofs) { assert(vec->mem); @@ -416,16 +422,43 @@ DeltaChunk* DCV_closest_chunk(DeltaChunkVector* vec, ull ofs) return DCV_last(vec); } +// Assert the given vector has correct datachunks +void DCV_dbg_check_integrity(const DeltaChunkVector* vec) +{ + assert(!DCV_empty(vec)); + const DeltaChunk* i = vec->mem; + const DeltaChunk* end = DCV_end(vec); + + ull aparent_size = DCV_rbound(vec) - DCV_lbound(vec); + ull acc_size = 0; + for(; i < end; i++){ + acc_size += i->ts; + } + assert(acc_size == aparent_size); + + if (vec->size < 2){ + return; + } + + const DeltaChunk* endm1 = DCV_end(vec) - 1; + for(i = vec->mem; i < endm1; i++){ + const DeltaChunk* n = i+1; + assert(DC_rbound(i) == n->to); + } + +} + // Write a slice as defined by its absolute offset in bytes and its size into the given // destination. The individual chunks written will be a deep copy of the source // data chunks // TODO: this could trigger copying many smallish add-chunk pieces - maybe some sort // of append-only memory pool would improve performance inline -void DCV_copy_slice_to(DeltaChunkVector* src, DeltaChunkVector* dest, ull ofs, ull size) +void DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunkVector* dest, ull ofs, ull size) { + //fprintf(stderr, "Copy Slice To: src->size = %i, ofs = %i, size=%i\n", (int)src->size, (int)ofs, (int)size); assert(DCV_lbound(src) <= ofs); - assert(DCV_rbound(src) <= ofs + size); + assert((ofs + size) <= DCV_rbound(src)); DeltaChunk* cdc = DCV_closest_chunk(src, ofs); @@ -442,7 +475,7 @@ void DCV_copy_slice_to(DeltaChunkVector* src, DeltaChunkVector* dest, ull ofs, u } } - DeltaChunk* vecend = DCV_end(src); + const DeltaChunk* vecend = DCV_end(src); for( ;(cdc < vecend) && size; ++cdc) { if (cdc->ts < size) { @@ -464,18 +497,22 @@ void DCV_copy_slice_to(DeltaChunkVector* src, DeltaChunkVector* dest, ull ofs, u // 'at' will be replaced by the items to insert ( special purpose ) // 'at' will be properly destroyed, but all items will just be copied bytewise // using memcpy. Hence from must just forget about them ! +// IMPORTANT: to must have an appropriate size already inline -void DCV_replace_one_by_many(DeltaChunkVector* from, DeltaChunkVector* to, DeltaChunk* at) +void DCV_replace_one_by_many(const DeltaChunkVector* from, DeltaChunkVector* to, DeltaChunk* at) { + fprintf(stderr, "Replace one by many: from->size = %i, to->size = %i, to->reserved = %i\n", (int)from->size, (int)to->size, (int)to->reserved_size); assert(from->size > 1); + assert(to->size + from->size - 1 <= to->reserved_size); - DCV_reserve_memory(to, to->size + from->size - 1); // -1 because we replace at + // -1 because we replace 'at' DC_destroy(at); - to->size -= 1 + from->size; + to->size += from->size - 1; // If we are somewhere in the middle, we have to make some space if (DCV_last(to) != at) { - memmove((void*)at+from->size, (void*)(at+1), (size_t)(DCV_end(to) - (at+1))); + fprintf(stderr, "moving to %p from %p, num bytes = %i\n", at+from->size, at+1, (int)((DCV_end(to) - (at+1)) * sizeof(DeltaChunk))); + memmove((void*)(at+from->size), (void*)(at+1), (size_t)(DCV_end(to) - (at+1)) * sizeof(DeltaChunk)); } // Finally copy all the items in @@ -485,22 +522,27 @@ void DCV_replace_one_by_many(DeltaChunkVector* from, DeltaChunkVector* to, Delta // Take slices of bdcv into the corresponding area of the tdcv, which is the topmost // delta to apply. tmpl is used as temporary space and must be initialzed and destroyed by the // caller -void DCV_connect_with_base(DeltaChunkVector* tdcv, DeltaChunkVector* bdcv, DeltaChunkVector* tmpl) +void DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv, DeltaChunkVector* tmpl) { - DeltaChunk* dc = tdcv->mem; - DeltaChunk* end = tdcv->mem + tdcv->size; - assert(dc); + Py_ssize_t dci = 0; + Py_ssize_t iend = tdcv->size; + DeltaChunk* dc; - for (;dc < end; dc++) + DBG_check(tdcv); + DBG_check(bdcv); + + for (;dci < iend; dci++) { // Data chunks don't need processing + dc = DCV_get(tdcv, dci); if (dc->data){ continue; } // Copy Chunk Handling DCV_copy_slice_to(bdcv, tmpl, dc->so, dc->ts); - // assert(tmpl->size); + DBG_check(tmpl); + assert(tmpl->size); // move target bounds DeltaChunk* tdc = tmpl->mem; @@ -516,8 +558,15 @@ void DCV_connect_with_base(DeltaChunkVector* tdcv, DeltaChunkVector* bdcv, Delta DC_destroy(dc); *dc = *DCV_get(tmpl, 0); } else { + DCV_reserve_memory(tdcv, tdcv->size + tmpl->size - 1 + gDVC_grow_by); + dc = DCV_get(tdcv, dci); DCV_replace_one_by_many(tmpl, tdcv, dc); + // Compensate for us being replaced + dci += tmpl->size-1; + iend += tmpl->size-1; } + + DBG_check(tdcv); // make sure the members will not be deallocated by the list DCV_forget_members(tmpl); @@ -679,8 +728,8 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) DCV_init(&tdcv, 0); DCV_init(&tmpl, 200); - unsigned int dsi; - PyObject* ds; + unsigned int dsi = 0; + PyObject* ds = 0; int error = 0; for (ds = PyIter_Next(stream_iter), dsi = 0; ds != NULL; ++dsi, ds = PyIter_Next(stream_iter)) { @@ -706,7 +755,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) // parse command stream ull tbw = 0; // Amount of target bytes written - bool shared_data = dsi != 0; + bool is_shared_data = dsi != 0; bool is_first_run = dsi == 0; assert(data < dend); @@ -742,10 +791,10 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) // What's faster DeltaChunk* dc = DCV_append(&dcv); DC_init(dc, tbw, cmd, 0); - DC_set_data(dc, data, cmd, shared_data); + DC_set_data(dc, data, cmd, is_shared_data); tbw += cmd; data += cmd; - } else { + } else { error = 1; PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); goto loop_end; From 4098056f4fe101f1e50d924ab3ba40650d563b9d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 13 Oct 2010 00:14:06 +0200 Subject: [PATCH 0088/2375] Fixed terrible bug, which happened due to a change of the size of the vector, but too early actually, so a memmove would use incorrect values --- _fun.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/_fun.c b/_fun.c index fc4ee1edc..3be3bccab 100644 --- a/_fun.c +++ b/_fun.c @@ -501,22 +501,24 @@ void DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunkVector* dest, ull inline void DCV_replace_one_by_many(const DeltaChunkVector* from, DeltaChunkVector* to, DeltaChunk* at) { - fprintf(stderr, "Replace one by many: from->size = %i, to->size = %i, to->reserved = %i\n", (int)from->size, (int)to->size, (int)to->reserved_size); + //fprintf(stderr, "Replace one by many: from->size = %i, to->size = %i, to->reserved = %i\n", (int)from->size, (int)to->size, (int)to->reserved_size); assert(from->size > 1); assert(to->size + from->size - 1 <= to->reserved_size); // -1 because we replace 'at' DC_destroy(at); - to->size += from->size - 1; // If we are somewhere in the middle, we have to make some space if (DCV_last(to) != at) { - fprintf(stderr, "moving to %p from %p, num bytes = %i\n", at+from->size, at+1, (int)((DCV_end(to) - (at+1)) * sizeof(DeltaChunk))); - memmove((void*)(at+from->size), (void*)(at+1), (size_t)(DCV_end(to) - (at+1)) * sizeof(DeltaChunk)); + //fprintf(stderr, "moving to %i from %i, num chunks = %i\n", (int)((at+from->size)-to->mem), (int)((at+1)-to->mem), (int)(DCV_end(to) - (at+1))); + memmove((void*)(at+from->size), (void*)(at+1), (size_t)((DCV_end(to) - (at+1)) * sizeof(DeltaChunk))); } - + // Finally copy all the items in memcpy((void*) at, (void*)from->mem, from->size*sizeof(DeltaChunk)); + + // FINALLY: update size + to->size += from->size - 1; } // Take slices of bdcv into the corresponding area of the tdcv, which is the topmost From f563a9db73a24c6353794c8e093cc604be9c7d7b Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 13 Oct 2010 00:49:27 +0200 Subject: [PATCH 0089/2375] Fixed integrity check function, finalized code, so far it is working, and its very efficient as well as the amount of data-copies is minimized --- _fun.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 65 insertions(+), 7 deletions(-) diff --git a/_fun.c b/_fun.c index 3be3bccab..0b485473f 100644 --- a/_fun.c +++ b/_fun.c @@ -95,7 +95,7 @@ typedef uchar bool; const ull gDVC_grow_by = 50; #ifdef DEBUG -#define DBG_check(vec) DCV_dbg_check_integrity(vec) +#define DBG_check(vec) asser(DCV_dbg_check_integrity(vec)) #else #define DBG_check(vec) #endif @@ -165,6 +165,26 @@ ull DC_rbound(const DeltaChunk* dc) return dc->to + dc->ts; } +// Apply +inline +void DC_apply(const DeltaChunk* dc, const uchar* base, PyObject* writer, PyObject* tmpargs) +{ + PyObject* buffer = 0; + if (dc->data){ + buffer = PyBuffer_FromMemory((void*)dc->data, dc->ts); + } else { + buffer = PyBuffer_FromMemory((void*)(base + dc->so), dc->ts); + } + + if (PyTuple_SetItem(tmpargs, 0, buffer)){ + assert(0); + } + + // tuple steals reference, and will take care about the deallocation + PyObject_Call(writer, tmpargs, NULL); + +} + // Copy all data from src to dest, the data pointer will be copied too inline void DC_copy_to(const DeltaChunk* src, DeltaChunk* dest) @@ -423,9 +443,12 @@ DeltaChunk* DCV_closest_chunk(const DeltaChunkVector* vec, ull ofs) } // Assert the given vector has correct datachunks -void DCV_dbg_check_integrity(const DeltaChunkVector* vec) +// return 1 on success +int DCV_dbg_check_integrity(const DeltaChunkVector* vec) { - assert(!DCV_empty(vec)); + if(DCV_empty(vec)){ + return 0; + } const DeltaChunk* i = vec->mem; const DeltaChunk* end = DCV_end(vec); @@ -434,18 +457,22 @@ void DCV_dbg_check_integrity(const DeltaChunkVector* vec) for(; i < end; i++){ acc_size += i->ts; } - assert(acc_size == aparent_size); + if (acc_size != aparent_size) + return 0; if (vec->size < 2){ - return; + return 1; } const DeltaChunk* endm1 = DCV_end(vec) - 1; for(i = vec->mem; i < endm1; i++){ const DeltaChunk* n = i+1; - assert(DC_rbound(i) == n->to); + if (DC_rbound(i) != n->to){ + return 0; + } } + return 1; } // Write a slice as defined by its absolute offset in bytes and its size into the given @@ -624,10 +651,41 @@ PyObject* DCL_py_rbound(DeltaChunkList* self) return PyLong_FromUnsignedLongLong(DCL_rbound(self)); } +// Write using a write function, taking remaining bytes from a base buffer static -PyObject* DCL_apply(PyObject* self, PyObject* args) +PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) { + PyObject* pybuf = 0; + PyObject* writeproc = 0; + if (!PyArg_ParseTuple(args, "OO", &pybuf, &writeproc)){ + PyErr_BadArgument(); + return NULL; + } + + if (!PyObject_CheckReadBuffer(pybuf)){ + PyErr_SetString(PyExc_ValueError, "First argument must be a buffer-compatible object, like a string, or a memory map"); + return NULL; + } + + if (!PyCallable_Check(writeproc)){ + PyErr_SetString(PyExc_ValueError, "Second argument must be a writer method with signature write(buf)"); + return NULL; + } + + const DeltaChunk* i = self->vec.mem; + const DeltaChunk* end = DCV_end(&self->vec); + + const uchar* data; + Py_ssize_t dlen; + PyObject_AsReadBuffer(pybuf, (const void**)&data, &dlen); + + PyObject* tmpargs = PyTuple_New(1); + + for(; i < end; i++){ + DC_apply(i, data, writeproc, tmpargs); + } + Py_DECREF(tmpargs); Py_RETURN_NONE; } From 64992444e9a2b2936cea4d2cba235e59e703cac9 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 13 Oct 2010 10:46:21 +0200 Subject: [PATCH 0090/2375] optimized reallocation count, which improves speed a little bit. Previously it would easily get into the habbit of reallocating the vector just to add a single item --- _fun.c | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/_fun.c b/_fun.c index 0b485473f..1373a5c60 100644 --- a/_fun.c +++ b/_fun.c @@ -92,10 +92,10 @@ typedef unsigned char uchar; typedef uchar bool; // Constants -const ull gDVC_grow_by = 50; +const ull gDVC_grow_by = 100; #ifdef DEBUG -#define DBG_check(vec) asser(DCV_dbg_check_integrity(vec)) +#define DBG_check(vec) assert(DCV_dbg_check_integrity(vec)) #else #define DBG_check(vec) #endif @@ -233,6 +233,8 @@ typedef struct { // Reserve enough memory to hold the given amount of delta chunks // Return 1 on success +// NOTE: added a minimum allocation to assure reallocation is not done +// just for a single additional entry. DCVs change often, and reallocs are expensive inline int DCV_reserve_memory(DeltaChunkVector* vec, uint num_dc) { @@ -240,6 +242,10 @@ int DCV_reserve_memory(DeltaChunkVector* vec, uint num_dc) return 1; } + if (num_dc - vec->reserved_size){ + num_dc += gDVC_grow_by; + } + #ifdef DEBUG bool was_null = vec->mem == NULL; #endif @@ -381,25 +387,6 @@ void DCV_reset(DeltaChunkVector* vec) vec->size = 0; } -// Append num-chunks to the end of the list, possibly reallocating existing ones -// Return a pointer to the first of the added items. They are already null initialized -// If num-chunks == 0, it returns the end pointer of the allocated memory -static inline -DeltaChunk* DCV_append_multiple(DeltaChunkVector* vec, uint num_chunks) -{ - if (vec->size + num_chunks > vec->reserved_size){ - DCV_grow_by(vec, (vec->size + num_chunks) - vec->reserved_size); - } - Py_FatalError("Could not allocate memory for append operation"); - Py_ssize_t old_size = vec->size; - vec->size += num_chunks; - - for(;old_size < vec->size; ++old_size){ - DC_init(DCV_get(vec, old_size), 0, 0, 0); - } - - return &vec->mem[old_size]; -} // Append one chunk to the end of the list, and return a pointer to it // It will not have been initialized ! @@ -838,6 +825,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) const unsigned long rbound = cp_off + cp_size; if (rbound < cp_size || rbound > base_size){ + assert(0); break; } @@ -849,6 +837,8 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) // NOTE: Compression only necessary for all other deltas, not // for the first one, as we will share the data. It really depends // What's faster + // Compression reduces fragmentation though, which is why we do it + // in all cases. DeltaChunk* dc = DCV_append(&dcv); DC_init(dc, tbw, cmd, 0); DC_set_data(dc, data, cmd, is_shared_data); @@ -860,7 +850,10 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) goto loop_end; } }// END handle command opcodes - assert(tbw == target_size); + if (tbw != target_size){ + PyErr_SetString(PyExc_RuntimeError, "Failed to parse delta stream"); + error = 1; + } if (!is_first_run){ DCV_connect_with_base(&tdcv, &dcv, &tmpl); From a7253b8d08ffc69bf3afdec98619044c84c64f75 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 13 Oct 2010 12:19:06 +0200 Subject: [PATCH 0091/2375] implemented memory compression, but got evil memory bug once again ... probably its just as stupid as previously --- _fun.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 8 deletions(-) diff --git a/_fun.c b/_fun.c index 1373a5c60..cf1f5b629 100644 --- a/_fun.c +++ b/_fun.c @@ -159,6 +159,16 @@ void DC_set_data(DeltaChunk* dc, const uchar* data, Py_ssize_t dlen, bool shared } +// Make the given data our own. It is assumed to have the size stored in our instance +// and will be managed by us. +inline +void DC_set_data_with_ownership(DeltaChunk* dc, const uchar* data) +{ + assert(data); + DC_deallocate_data(dc); + dc->data = data; +} + inline ull DC_rbound(const DeltaChunk* dc) { @@ -214,7 +224,6 @@ void DC_offset_copy_to(const DeltaChunk* src, DeltaChunk* dest, ull ofs, ull siz if (src->data){ DC_set_data(dest, src->data + ofs, size, 0); } else { - dest->data = NULL; dest->data_shared = 0; } } @@ -825,6 +834,8 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) const unsigned long rbound = cp_off + cp_size; if (rbound < cp_size || rbound > base_size){ + // this really shouldn't happen + error = 1; assert(0); break; } @@ -834,16 +845,53 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) } else if (cmd) { // TODO: Compress nodes by parsing them in advance - // NOTE: Compression only necessary for all other deltas, not - // for the first one, as we will share the data. It really depends - // What's faster // Compression reduces fragmentation though, which is why we do it // in all cases. - DeltaChunk* dc = DCV_append(&dcv); - DC_init(dc, tbw, cmd, 0); - DC_set_data(dc, data, cmd, is_shared_data); - tbw += cmd; + const uchar* add_start = data - 1; + const uchar* add_end = dend; + ull num_bytes = cmd; data += cmd; + ull num_chunks = 1; + while (data < dend){ + fprintf(stderr, "looping\n"); + const char c = *data; + if (c & 0x80){ + add_end = data; + break; + } else { + num_chunks += 1; + data += c + 1; // advance by 1 to skip add cmd + num_bytes += c; + } + } + + fprintf(stderr, "add bytes = %i\n", (int)num_bytes); + #ifdef DEBUG + assert(add_end - add_start > 0); + if (num_chunks > 1){ + fprintf(stderr, "Compression worked, got %i bytes of %i chunks\n", (int)num_bytes, (int)num_chunks); + } + #endif + + DeltaChunk* dc = DCV_append(&dcv); + DC_init(dc, tbw, num_bytes, 0); + + // gather the data, or (possibly) share single blocks + if (num_chunks > 1){ + uchar* dcdata = PyMem_Malloc(num_bytes); + while (add_start < add_end){ + const char bytes = *add_start++; + fprintf(stderr, "Copying %i bytes\n", bytes); + memcpy((void*)dcdata, (void*)add_start, bytes); + dcdata += bytes; + add_start += bytes; + } + DC_set_data_with_ownership(dc, dcdata); + } else { + DC_set_data(dc, data - cmd, cmd, is_shared_data); + } + + tbw += num_bytes; } else { error = 1; PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); From bd01f6932c12fe2b7010884d339cc4831cc7ec59 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 13 Oct 2010 13:27:38 +0200 Subject: [PATCH 0092/2375] Fixed memory bug, it was a small tiny thing, as well as stupid. --- _fun.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/_fun.c b/_fun.c index cf1f5b629..247008682 100644 --- a/_fun.c +++ b/_fun.c @@ -844,32 +844,32 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) tbw += cp_size; } else if (cmd) { - // TODO: Compress nodes by parsing them in advance // Compression reduces fragmentation though, which is why we do it // in all cases. + // It makes the more sense the more consecutive add-chunks we have, + // its more likely in big deltas, for big binary files const uchar* add_start = data - 1; const uchar* add_end = dend; ull num_bytes = cmd; data += cmd; ull num_chunks = 1; while (data < dend){ - fprintf(stderr, "looping\n"); + //while (0){ const char c = *data; if (c & 0x80){ add_end = data; break; } else { - num_chunks += 1; - data += c + 1; // advance by 1 to skip add cmd + data += 1 + c; // advance by 1 to skip add cmd num_bytes += c; + num_chunks += 1; } } - fprintf(stderr, "add bytes = %i\n", (int)num_bytes); #ifdef DEBUG assert(add_end - add_start > 0); if (num_chunks > 1){ - fprintf(stderr, "Compression worked, got %i bytes of %i chunks\n", (int)num_bytes, (int)num_chunks); + fprintf(stderr, "Compression: got %i bytes of %i chunks\n", (int)num_bytes, (int)num_chunks); } #endif @@ -881,12 +881,11 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) uchar* dcdata = PyMem_Malloc(num_bytes); while (add_start < add_end){ const char bytes = *add_start++; - fprintf(stderr, "Copying %i bytes\n", bytes); memcpy((void*)dcdata, (void*)add_start, bytes); dcdata += bytes; add_start += bytes; } - DC_set_data_with_ownership(dc, dcdata); + DC_set_data_with_ownership(dc, dcdata-num_bytes); } else { DC_set_data(dc, data - cmd, cmd, is_shared_data); } From 5442e4aec5741d5b346ab9a7cd091976a8f5e9f4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 13 Oct 2010 13:48:44 +0200 Subject: [PATCH 0093/2375] Put delta-apply code into separate function. Would have preferred to to have just one dynamic module, lets see whether includes are possible --- Makefile | 3 + _delta_apply.c | 903 +++++++++++++++++++++++++++++++++++++++++++++++++ _fun.c | 885 ------------------------------------------------ fun.py | 2 +- setup.py | 5 +- 5 files changed, 911 insertions(+), 887 deletions(-) create mode 100644 _delta_apply.c diff --git a/Makefile b/Makefile index 190a66b03..e65c55a6d 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,9 @@ build:: $(SETUP) build $(SETUP) build_ext -i +build_ext:: + $(SETUP) build_ext -i + install:: $(SETUP) install diff --git a/_delta_apply.c b/_delta_apply.c new file mode 100644 index 000000000..40ea60c56 --- /dev/null +++ b/_delta_apply.c @@ -0,0 +1,903 @@ +#include +#include +#include +#include +#include +#include + +typedef unsigned long long ull; +typedef unsigned int uint; +typedef unsigned char uchar; +typedef uchar bool; + +// Constants +const ull gDVC_grow_by = 100; + +#ifdef DEBUG +#define DBG_check(vec) assert(DCV_dbg_check_integrity(vec)) +#else +#define DBG_check(vec) +#endif + +// DELTA CHUNK +//////////////// +// Internal Delta Chunk Objects +typedef struct { + ull to; + ull ts; + ull so; + const uchar* data; + bool data_shared; +} DeltaChunk; + +inline +void DC_init(DeltaChunk* dc, ull to, ull ts, ull so) +{ + dc->to = to; + dc->ts = ts; + dc->so = so; + dc->data = NULL; + dc->data_shared = 0; +} + +inline +void DC_deallocate_data(DeltaChunk* dc) +{ + if (!dc->data_shared && dc->data){ + PyMem_Free((void*)dc->data); + } + dc->data = NULL; +} + +inline +void DC_destroy(DeltaChunk* dc) +{ + DC_deallocate_data(dc); +} + +// Store a copy of data in our instance. If shared is 1, the data will be shared, +// hence it will only be stored, but the memory will not be touched, or copied. +inline +void DC_set_data(DeltaChunk* dc, const uchar* data, Py_ssize_t dlen, bool shared) +{ + DC_deallocate_data(dc); + + if (data == 0){ + dc->data = NULL; + dc->data_shared = 0; + return; + } + + dc->data_shared = shared; + if (shared){ + dc->data = data; + } else { + dc->data = (uchar*)PyMem_Malloc(dlen); + memcpy((void*)dc->data, (void*)data, dlen); + } + +} + +// Make the given data our own. It is assumed to have the size stored in our instance +// and will be managed by us. +inline +void DC_set_data_with_ownership(DeltaChunk* dc, const uchar* data) +{ + assert(data); + DC_deallocate_data(dc); + dc->data = data; +} + +inline +ull DC_rbound(const DeltaChunk* dc) +{ + return dc->to + dc->ts; +} + +// Apply +inline +void DC_apply(const DeltaChunk* dc, const uchar* base, PyObject* writer, PyObject* tmpargs) +{ + PyObject* buffer = 0; + if (dc->data){ + buffer = PyBuffer_FromMemory((void*)dc->data, dc->ts); + } else { + buffer = PyBuffer_FromMemory((void*)(base + dc->so), dc->ts); + } + + if (PyTuple_SetItem(tmpargs, 0, buffer)){ + assert(0); + } + + // tuple steals reference, and will take care about the deallocation + PyObject_Call(writer, tmpargs, NULL); + +} + +// Copy all data from src to dest, the data pointer will be copied too +inline +void DC_copy_to(const DeltaChunk* src, DeltaChunk* dest) +{ + dest->to = src->to; + dest->ts = src->ts; + dest->so = src->so; + dest->data_shared = 0; + dest->data = NULL; + + DC_set_data(dest, src->data, src->ts, 0); +} + +// Copy all data with the given offset and size. The source offset, as well +// as the data will be truncated accordingly +inline +void DC_offset_copy_to(const DeltaChunk* src, DeltaChunk* dest, ull ofs, ull size) +{ + assert(size <= src->ts); + assert(src->to + ofs + size <= DC_rbound(src)); + + dest->to = src->to + ofs; + dest->ts = size; + dest->so = src->so + ofs; + dest->data = NULL; + + if (src->data){ + DC_set_data(dest, src->data + ofs, size, 0); + } else { + dest->data_shared = 0; + } +} + + +// DELTA CHUNK VECTOR +///////////////////// + +typedef struct { + DeltaChunk* mem; // Memory + Py_ssize_t size; // Size in DeltaChunks + Py_ssize_t reserved_size; // Reserve in DeltaChunks +} DeltaChunkVector; + + + +// Reserve enough memory to hold the given amount of delta chunks +// Return 1 on success +// NOTE: added a minimum allocation to assure reallocation is not done +// just for a single additional entry. DCVs change often, and reallocs are expensive +inline +int DCV_reserve_memory(DeltaChunkVector* vec, uint num_dc) +{ + if (num_dc <= vec->reserved_size){ + return 1; + } + + if (num_dc - vec->reserved_size){ + num_dc += gDVC_grow_by; + } + +#ifdef DEBUG + bool was_null = vec->mem == NULL; +#endif + + if (vec->mem == NULL){ + vec->mem = PyMem_Malloc(num_dc * sizeof(DeltaChunk)); + } else { + vec->mem = PyMem_Realloc(vec->mem, num_dc * sizeof(DeltaChunk)); + } + + if (vec->mem == NULL){ + Py_FatalError("Could not allocate memory for append operation"); + } + + vec->reserved_size = num_dc; + +#ifdef DEBUG + const char* format = "Allocated %i bytes at %p, to hold up to %i chunks\n"; + if (!was_null) + format = "Re-allocated %i bytes at %p, to hold up to %i chunks\n"; + fprintf(stderr, format, (int)(vec->reserved_size * sizeof(DeltaChunk)), vec->mem, (int)vec->reserved_size); +#endif + + return vec->mem != NULL; +} + +/* +Grow the delta chunk list by the given amount of bytes. +This may trigger a realloc, but will do nothing if the reserved size is already +large enough. +Return 1 on success, 0 on failure +*/ +inline +int DCV_grow_by(DeltaChunkVector* vec, uint num_dc) +{ + return DCV_reserve_memory(vec, vec->reserved_size + num_dc); +} + +int DCV_init(DeltaChunkVector* vec, ull initial_size) +{ + vec->mem = NULL; + vec->size = 0; + vec->reserved_size = 0; + + return DCV_grow_by(vec, initial_size); +} + +inline +ull DCV_len(const DeltaChunkVector* vec) +{ + return vec->size; +} + +inline +ull DCV_lbound(const DeltaChunkVector* vec) +{ + assert(vec->size && vec->mem); + return vec->mem->to; +} + +// Return item at index +inline +DeltaChunk* DCV_get(const DeltaChunkVector* vec, Py_ssize_t i) +{ + assert(i < vec->size && vec->mem); + return &vec->mem[i]; +} + +// Return last item +inline +DeltaChunk* DCV_last(const DeltaChunkVector* vec) +{ + return DCV_get(vec, vec->size-1); +} + +inline +ull DCV_rbound(const DeltaChunkVector* vec) +{ + return DC_rbound(DCV_last(vec)); +} + +inline +int DCV_empty(const DeltaChunkVector* vec) +{ + return vec->size == 0; +} + +// Return end pointer of the vector +inline +const DeltaChunk* DCV_end(const DeltaChunkVector* vec) +{ + assert(!DCV_empty(vec)); + return vec->mem + vec->size; +} + +void DCV_destroy(DeltaChunkVector* vec) +{ + if (vec->mem){ +#ifdef DEBUG + fprintf(stderr, "Freeing %p\n", (void*)vec->mem); +#endif + + const DeltaChunk* end = &vec->mem[vec->size]; + DeltaChunk* i; + for(i = vec->mem; i < end; i++){ + DC_destroy(i); + } + + PyMem_Free(vec->mem); + vec->size = 0; + vec->reserved_size = 0; + vec->mem = 0; + } +} + +// Reset this vector so that its existing memory can be filled again. +// Memory will be kept, but not cleaned up +inline +void DCV_forget_members(DeltaChunkVector* vec) +{ + vec->size = 0; +} + +// Reset the vector so that its size will be zero, and its members will +// have been deallocated properly. +// It will keep its memory though, and hence can be filled again +inline +void DCV_reset(DeltaChunkVector* vec) +{ + if (vec->size == 0) + return; + + DeltaChunk* dc = vec->mem; + const DeltaChunk* dcend = DCV_end(vec); + for(;dc < dcend; dc++){ + DC_destroy(dc); + } + + vec->size = 0; +} + + +// Append one chunk to the end of the list, and return a pointer to it +// It will not have been initialized ! +static inline +DeltaChunk* DCV_append(DeltaChunkVector* vec) +{ + if (vec->size + 1 > vec->reserved_size){ + DCV_grow_by(vec, gDVC_grow_by); + } + + DeltaChunk* next = vec->mem + vec->size; + vec->size += 1; + return next; +} + +// Return delta chunk being closest to the given absolute offset +inline +DeltaChunk* DCV_closest_chunk(const DeltaChunkVector* vec, ull ofs) +{ + assert(vec->mem); + + ull lo = 0; + ull hi = vec->size; + ull mid; + DeltaChunk* dc; + + while (lo < hi) + { + mid = (lo + hi) / 2; + dc = vec->mem + mid; + if (dc->to > ofs){ + hi = mid; + } else if ((DC_rbound(dc) > ofs) | (dc->to == ofs)) { + return dc; + } else { + lo = mid + 1; + } + } + + return DCV_last(vec); +} + +// Assert the given vector has correct datachunks +// return 1 on success +int DCV_dbg_check_integrity(const DeltaChunkVector* vec) +{ + if(DCV_empty(vec)){ + return 0; + } + const DeltaChunk* i = vec->mem; + const DeltaChunk* end = DCV_end(vec); + + ull aparent_size = DCV_rbound(vec) - DCV_lbound(vec); + ull acc_size = 0; + for(; i < end; i++){ + acc_size += i->ts; + } + if (acc_size != aparent_size) + return 0; + + if (vec->size < 2){ + return 1; + } + + const DeltaChunk* endm1 = DCV_end(vec) - 1; + for(i = vec->mem; i < endm1; i++){ + const DeltaChunk* n = i+1; + if (DC_rbound(i) != n->to){ + return 0; + } + } + + return 1; +} + +// Write a slice as defined by its absolute offset in bytes and its size into the given +// destination. The individual chunks written will be a deep copy of the source +// data chunks +// TODO: this could trigger copying many smallish add-chunk pieces - maybe some sort +// of append-only memory pool would improve performance +inline +void DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunkVector* dest, ull ofs, ull size) +{ + //fprintf(stderr, "Copy Slice To: src->size = %i, ofs = %i, size=%i\n", (int)src->size, (int)ofs, (int)size); + assert(DCV_lbound(src) <= ofs); + assert((ofs + size) <= DCV_rbound(src)); + + DeltaChunk* cdc = DCV_closest_chunk(src, ofs); + + // partial overlap + if (cdc->to != ofs) { + DeltaChunk* destc = DCV_append(dest); + const ull relofs = ofs - cdc->to; + DC_offset_copy_to(cdc, destc, relofs, cdc->ts - relofs < size ? cdc->ts - relofs : size); + cdc += 1; + size -= destc->ts; + + if (size == 0){ + return; + } + } + + const DeltaChunk* vecend = DCV_end(src); + for( ;(cdc < vecend) && size; ++cdc) + { + if (cdc->ts < size) { + DC_copy_to(cdc, DCV_append(dest)); + size -= cdc->ts; + } else { + DC_offset_copy_to(cdc, DCV_append(dest), 0, size); + size = 0; + break; + } + } + + assert(size == 0); +} + + +// Insert all chunks in 'from' to 'to', starting at the delta chunk named 'at' which +// originates in to +// 'at' will be replaced by the items to insert ( special purpose ) +// 'at' will be properly destroyed, but all items will just be copied bytewise +// using memcpy. Hence from must just forget about them ! +// IMPORTANT: to must have an appropriate size already +inline +void DCV_replace_one_by_many(const DeltaChunkVector* from, DeltaChunkVector* to, DeltaChunk* at) +{ + //fprintf(stderr, "Replace one by many: from->size = %i, to->size = %i, to->reserved = %i\n", (int)from->size, (int)to->size, (int)to->reserved_size); + assert(from->size > 1); + assert(to->size + from->size - 1 <= to->reserved_size); + + // -1 because we replace 'at' + DC_destroy(at); + + // If we are somewhere in the middle, we have to make some space + if (DCV_last(to) != at) { + //fprintf(stderr, "moving to %i from %i, num chunks = %i\n", (int)((at+from->size)-to->mem), (int)((at+1)-to->mem), (int)(DCV_end(to) - (at+1))); + memmove((void*)(at+from->size), (void*)(at+1), (size_t)((DCV_end(to) - (at+1)) * sizeof(DeltaChunk))); + } + + // Finally copy all the items in + memcpy((void*) at, (void*)from->mem, from->size*sizeof(DeltaChunk)); + + // FINALLY: update size + to->size += from->size - 1; +} + +// Take slices of bdcv into the corresponding area of the tdcv, which is the topmost +// delta to apply. tmpl is used as temporary space and must be initialzed and destroyed by the +// caller +void DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv, DeltaChunkVector* tmpl) +{ + Py_ssize_t dci = 0; + Py_ssize_t iend = tdcv->size; + DeltaChunk* dc; + + DBG_check(tdcv); + DBG_check(bdcv); + + for (;dci < iend; dci++) + { + // Data chunks don't need processing + dc = DCV_get(tdcv, dci); + if (dc->data){ + continue; + } + + // Copy Chunk Handling + DCV_copy_slice_to(bdcv, tmpl, dc->so, dc->ts); + DBG_check(tmpl); + assert(tmpl->size); + + // move target bounds + DeltaChunk* tdc = tmpl->mem; + DeltaChunk* tdcend = tmpl->mem + tmpl->size; + const ull ofs = dc->to - dc->so; + for(;tdc < tdcend; tdc++){ + tdc->to += ofs; + } + + // insert slice into our list + if (tmpl->size == 1){ + // Its not data, so destroy is not really required, anyhow ... + DC_destroy(dc); + *dc = *DCV_get(tmpl, 0); + } else { + DCV_reserve_memory(tdcv, tdcv->size + tmpl->size - 1 + gDVC_grow_by); + dc = DCV_get(tdcv, dci); + DCV_replace_one_by_many(tmpl, tdcv, dc); + // Compensate for us being replaced + dci += tmpl->size-1; + iend += tmpl->size-1; + } + + DBG_check(tdcv); + + // make sure the members will not be deallocated by the list + DCV_forget_members(tmpl); + } +} + +// DELTA CHUNK LIST (PYTHON) +///////////////////////////// + +typedef struct { + PyObject_HEAD + // ----------- + DeltaChunkVector vec; + +} DeltaChunkList; + + +static +int DCL_init(DeltaChunkList*self, PyObject *args, PyObject *kwds) +{ + if(args && PySequence_Size(args) > 0){ + PyErr_SetString(PyExc_ValueError, "Too many arguments"); + return -1; + } + + DCV_init(&self->vec, 0); + return 0; +} + +static +void DCL_dealloc(DeltaChunkList* self) +{ + DCV_destroy(&(self->vec)); +} + +static +PyObject* DCL_len(DeltaChunkList* self) +{ + return PyLong_FromUnsignedLongLong(DCV_len(&self->vec)); +} + +static inline +ull DCL_rbound(DeltaChunkList* self) +{ + if (DCV_empty(&self->vec)) + return 0; + return DCV_rbound(&self->vec); +} + +static +PyObject* DCL_py_rbound(DeltaChunkList* self) +{ + return PyLong_FromUnsignedLongLong(DCL_rbound(self)); +} + +// Write using a write function, taking remaining bytes from a base buffer +static +PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) +{ + PyObject* pybuf = 0; + PyObject* writeproc = 0; + if (!PyArg_ParseTuple(args, "OO", &pybuf, &writeproc)){ + PyErr_BadArgument(); + return NULL; + } + + if (!PyObject_CheckReadBuffer(pybuf)){ + PyErr_SetString(PyExc_ValueError, "First argument must be a buffer-compatible object, like a string, or a memory map"); + return NULL; + } + + if (!PyCallable_Check(writeproc)){ + PyErr_SetString(PyExc_ValueError, "Second argument must be a writer method with signature write(buf)"); + return NULL; + } + + const DeltaChunk* i = self->vec.mem; + const DeltaChunk* end = DCV_end(&self->vec); + + const uchar* data; + Py_ssize_t dlen; + PyObject_AsReadBuffer(pybuf, (const void**)&data, &dlen); + + PyObject* tmpargs = PyTuple_New(1); + + for(; i < end; i++){ + DC_apply(i, data, writeproc, tmpargs); + } + + Py_DECREF(tmpargs); + Py_RETURN_NONE; +} + +static PyMethodDef DCL_methods[] = { + {"apply", (PyCFunction)DCL_apply, METH_VARARGS, "Apply the given iterable of delta streams" }, + {"__len__", (PyCFunction)DCL_len, METH_NOARGS, NULL}, + {"rbound", (PyCFunction)DCL_py_rbound, METH_NOARGS, NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject DeltaChunkListType = { + PyObject_HEAD_INIT(NULL) + 0, /*ob_size*/ + "DeltaChunkList", /*tp_name*/ + sizeof(DeltaChunkList), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor)DCL_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + "Minimal Delta Chunk List",/* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DCL_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc)DCL_init, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ +}; + + +// Makes a new copy of the DeltaChunkList - you have to do everything yourselve +// in C ... want C++ !! +DeltaChunkList* DCL_new_instance(void) +{ + DeltaChunkList* dcl = (DeltaChunkList*) PyType_GenericNew(&DeltaChunkListType, 0, 0); + assert(dcl); + + DCL_init(dcl, 0, 0); + assert(dcl->vec.size == 0); + assert(dcl->vec.mem == NULL); + return dcl; +} + +inline +ull msb_size(const uchar** datap, const uchar* top) +{ + const uchar *data = *datap; + ull cmd, size = 0; + uint i = 0; + do { + cmd = *data++; + size |= (cmd & 0x7f) << i; + i += 7; + } while (cmd & 0x80 && data < top); + *datap = data; + return size; +} + +static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) +{ + // obtain iterator + PyObject* stream_iter = 0; + if (!PyIter_Check(dstreams)){ + stream_iter = PyObject_GetIter(dstreams); + if (!stream_iter){ + PyErr_SetString(PyExc_RuntimeError, "Couldn't obtain iterator for streams"); + return NULL; + } + } else { + stream_iter = dstreams; + } + + DeltaChunkVector dcv; + DeltaChunkVector tdcv; + DeltaChunkVector tmpl; + DCV_init(&dcv, 100); // should be enough to keep the average text file + DCV_init(&tdcv, 0); + DCV_init(&tmpl, 200); + + unsigned int dsi = 0; + PyObject* ds = 0; + int error = 0; + for (ds = PyIter_Next(stream_iter), dsi = 0; ds != NULL; ++dsi, ds = PyIter_Next(stream_iter)) + { + PyObject* db = PyObject_CallMethod(ds, "read", 0); + if (!PyObject_CheckReadBuffer(db)){ + error = 1; + PyErr_SetString(PyExc_RuntimeError, "Returned buffer didn't support the buffer protocol"); + goto loop_end; + } + + const uchar* data; + Py_ssize_t dlen; + PyObject_AsReadBuffer(db, (const void**)&data, &dlen); + const uchar* dend = data + dlen; + + // read header + const ull base_size = msb_size(&data, dend); + const ull target_size = msb_size(&data, dend); + + // estimate number of ops - assume one third adds, half two byte (size+offset) copies + const uint approx_num_cmds = (dlen / 3) + (((dlen / 3) * 2) / (2+2+1)); + DCV_reserve_memory(&dcv, approx_num_cmds); + + // parse command stream + ull tbw = 0; // Amount of target bytes written + bool is_shared_data = dsi != 0; + bool is_first_run = dsi == 0; + + assert(data < dend); + while (data < dend) + { + const char cmd = *data++; + + if (cmd & 0x80) + { + unsigned long cp_off = 0, cp_size = 0; + if (cmd & 0x01) cp_off = *data++; + if (cmd & 0x02) cp_off |= (*data++ << 8); + if (cmd & 0x04) cp_off |= (*data++ << 16); + if (cmd & 0x08) cp_off |= ((unsigned) *data++ << 24); + if (cmd & 0x10) cp_size = *data++; + if (cmd & 0x20) cp_size |= (*data++ << 8); + if (cmd & 0x40) cp_size |= (*data++ << 16); + if (cp_size == 0) cp_size = 0x10000; + + const unsigned long rbound = cp_off + cp_size; + if (rbound < cp_size || + rbound > base_size){ + // this really shouldn't happen + error = 1; + assert(0); + break; + } + + DC_init(DCV_append(&dcv), tbw, cp_size, cp_off); + tbw += cp_size; + + } else if (cmd) { + // Compression reduces fragmentation though, which is why we do it + // in all cases. + // It makes the more sense the more consecutive add-chunks we have, + // its more likely in big deltas, for big binary files + const uchar* add_start = data - 1; + const uchar* add_end = dend; + ull num_bytes = cmd; + data += cmd; + ull num_chunks = 1; + while (data < dend){ + //while (0){ + const char c = *data; + if (c & 0x80){ + add_end = data; + break; + } else { + data += 1 + c; // advance by 1 to skip add cmd + num_bytes += c; + num_chunks += 1; + } + } + + #ifdef DEBUG + assert(add_end - add_start > 0); + if (num_chunks > 1){ + fprintf(stderr, "Compression: got %i bytes of %i chunks\n", (int)num_bytes, (int)num_chunks); + } + #endif + + DeltaChunk* dc = DCV_append(&dcv); + DC_init(dc, tbw, num_bytes, 0); + + // gather the data, or (possibly) share single blocks + if (num_chunks > 1){ + uchar* dcdata = PyMem_Malloc(num_bytes); + while (add_start < add_end){ + const char bytes = *add_start++; + memcpy((void*)dcdata, (void*)add_start, bytes); + dcdata += bytes; + add_start += bytes; + } + DC_set_data_with_ownership(dc, dcdata-num_bytes); + } else { + DC_set_data(dc, data - cmd, cmd, is_shared_data); + } + + tbw += num_bytes; + } else { + error = 1; + PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); + goto loop_end; + } + }// END handle command opcodes + if (tbw != target_size){ + PyErr_SetString(PyExc_RuntimeError, "Failed to parse delta stream"); + error = 1; + } + + if (!is_first_run){ + DCV_connect_with_base(&tdcv, &dcv, &tmpl); + } + + if (is_first_run){ + tdcv = dcv; + // wipe out dcv without destroying the members, get its own memory + DCV_init(&dcv, tdcv.size); + } else { + // destroy members, but keep memory + DCV_reset(&dcv); + } + +loop_end: + // perform cleanup + Py_DECREF(ds); + Py_DECREF(db); + + if (error){ + break; + } + }// END for each stream object + + if (dsi == 0 && ! error){ + PyErr_SetString(PyExc_ValueError, "No streams provided"); + } + + if (stream_iter != dstreams){ + Py_DECREF(stream_iter); + } + + DCV_destroy(&tmpl); + if (dsi > 1){ + // otherwise dcv equals tcl + DCV_destroy(&dcv); + } + + // Return the actual python object - its just a container + DeltaChunkList* dcl = DCL_new_instance(); + if (!dcl){ + PyErr_SetString(PyExc_RuntimeError, "Couldn't allocate list"); + // Otherwise tdcv would be deallocated by the chunk list + DCV_destroy(&tdcv); + error = 1; + } else { + // Plain copy, don't deallocate + dcl->vec = tdcv; + } + + if (error){ + // Will dealloc tdcv + Py_XDECREF(dcl); + return NULL; + } + + return (PyObject*)dcl; +} + +static PyMethodDef py_fun[] = { + { "connect_deltas", (PyCFunction)connect_deltas, METH_O, "TODO" }, + { NULL, NULL, 0, NULL } +}; + +#ifndef PyMODINIT_FUNC /* declarations for DLL import/export */ +#define PyMODINIT_FUNC void +#endif +PyMODINIT_FUNC init_delta_apply(void) +{ + PyObject *m; + + if (PyType_Ready(&DeltaChunkListType) < 0) + return; + + m = Py_InitModule3("_delta_apply", py_fun, NULL); + if (m == NULL) + return; + + Py_INCREF(&DeltaChunkListType); + PyModule_AddObject(m, "DeltaChunkList", (PyObject *)&DeltaChunkListType); +} diff --git a/_fun.c b/_fun.c index 247008682..1881bfb05 100644 --- a/_fun.c +++ b/_fun.c @@ -1,9 +1,4 @@ #include -#include -#include -#include -#include -#include static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) { @@ -86,883 +81,8 @@ static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) } -typedef unsigned long long ull; -typedef unsigned int uint; -typedef unsigned char uchar; -typedef uchar bool; - -// Constants -const ull gDVC_grow_by = 100; - -#ifdef DEBUG -#define DBG_check(vec) assert(DCV_dbg_check_integrity(vec)) -#else -#define DBG_check(vec) -#endif - -// DELTA CHUNK -//////////////// -// Internal Delta Chunk Objects -typedef struct { - ull to; - ull ts; - ull so; - const uchar* data; - bool data_shared; -} DeltaChunk; - -inline -void DC_init(DeltaChunk* dc, ull to, ull ts, ull so) -{ - dc->to = to; - dc->ts = ts; - dc->so = so; - dc->data = NULL; - dc->data_shared = 0; -} - -inline -void DC_deallocate_data(DeltaChunk* dc) -{ - if (!dc->data_shared && dc->data){ - PyMem_Free((void*)dc->data); - } - dc->data = NULL; -} - -inline -void DC_destroy(DeltaChunk* dc) -{ - DC_deallocate_data(dc); -} - -// Store a copy of data in our instance. If shared is 1, the data will be shared, -// hence it will only be stored, but the memory will not be touched, or copied. -inline -void DC_set_data(DeltaChunk* dc, const uchar* data, Py_ssize_t dlen, bool shared) -{ - DC_deallocate_data(dc); - - if (data == 0){ - dc->data = NULL; - dc->data_shared = 0; - return; - } - - dc->data_shared = shared; - if (shared){ - dc->data = data; - } else { - dc->data = (uchar*)PyMem_Malloc(dlen); - memcpy((void*)dc->data, (void*)data, dlen); - } - -} - -// Make the given data our own. It is assumed to have the size stored in our instance -// and will be managed by us. -inline -void DC_set_data_with_ownership(DeltaChunk* dc, const uchar* data) -{ - assert(data); - DC_deallocate_data(dc); - dc->data = data; -} - -inline -ull DC_rbound(const DeltaChunk* dc) -{ - return dc->to + dc->ts; -} - -// Apply -inline -void DC_apply(const DeltaChunk* dc, const uchar* base, PyObject* writer, PyObject* tmpargs) -{ - PyObject* buffer = 0; - if (dc->data){ - buffer = PyBuffer_FromMemory((void*)dc->data, dc->ts); - } else { - buffer = PyBuffer_FromMemory((void*)(base + dc->so), dc->ts); - } - - if (PyTuple_SetItem(tmpargs, 0, buffer)){ - assert(0); - } - - // tuple steals reference, and will take care about the deallocation - PyObject_Call(writer, tmpargs, NULL); - -} - -// Copy all data from src to dest, the data pointer will be copied too -inline -void DC_copy_to(const DeltaChunk* src, DeltaChunk* dest) -{ - dest->to = src->to; - dest->ts = src->ts; - dest->so = src->so; - dest->data_shared = 0; - dest->data = NULL; - - DC_set_data(dest, src->data, src->ts, 0); -} - -// Copy all data with the given offset and size. The source offset, as well -// as the data will be truncated accordingly -inline -void DC_offset_copy_to(const DeltaChunk* src, DeltaChunk* dest, ull ofs, ull size) -{ - assert(size <= src->ts); - assert(src->to + ofs + size <= DC_rbound(src)); - - dest->to = src->to + ofs; - dest->ts = size; - dest->so = src->so + ofs; - dest->data = NULL; - - if (src->data){ - DC_set_data(dest, src->data + ofs, size, 0); - } else { - dest->data_shared = 0; - } -} - - -// DELTA CHUNK VECTOR -///////////////////// - -typedef struct { - DeltaChunk* mem; // Memory - Py_ssize_t size; // Size in DeltaChunks - Py_ssize_t reserved_size; // Reserve in DeltaChunks -} DeltaChunkVector; - - - -// Reserve enough memory to hold the given amount of delta chunks -// Return 1 on success -// NOTE: added a minimum allocation to assure reallocation is not done -// just for a single additional entry. DCVs change often, and reallocs are expensive -inline -int DCV_reserve_memory(DeltaChunkVector* vec, uint num_dc) -{ - if (num_dc <= vec->reserved_size){ - return 1; - } - - if (num_dc - vec->reserved_size){ - num_dc += gDVC_grow_by; - } - -#ifdef DEBUG - bool was_null = vec->mem == NULL; -#endif - - if (vec->mem == NULL){ - vec->mem = PyMem_Malloc(num_dc * sizeof(DeltaChunk)); - } else { - vec->mem = PyMem_Realloc(vec->mem, num_dc * sizeof(DeltaChunk)); - } - - if (vec->mem == NULL){ - Py_FatalError("Could not allocate memory for append operation"); - } - - vec->reserved_size = num_dc; - -#ifdef DEBUG - const char* format = "Allocated %i bytes at %p, to hold up to %i chunks\n"; - if (!was_null) - format = "Re-allocated %i bytes at %p, to hold up to %i chunks\n"; - fprintf(stderr, format, (int)(vec->reserved_size * sizeof(DeltaChunk)), vec->mem, (int)vec->reserved_size); -#endif - - return vec->mem != NULL; -} - -/* -Grow the delta chunk list by the given amount of bytes. -This may trigger a realloc, but will do nothing if the reserved size is already -large enough. -Return 1 on success, 0 on failure -*/ -inline -int DCV_grow_by(DeltaChunkVector* vec, uint num_dc) -{ - return DCV_reserve_memory(vec, vec->reserved_size + num_dc); -} - -int DCV_init(DeltaChunkVector* vec, ull initial_size) -{ - vec->mem = NULL; - vec->size = 0; - vec->reserved_size = 0; - - return DCV_grow_by(vec, initial_size); -} - -inline -ull DCV_len(const DeltaChunkVector* vec) -{ - return vec->size; -} - -inline -ull DCV_lbound(const DeltaChunkVector* vec) -{ - assert(vec->size && vec->mem); - return vec->mem->to; -} - -// Return item at index -inline -DeltaChunk* DCV_get(const DeltaChunkVector* vec, Py_ssize_t i) -{ - assert(i < vec->size && vec->mem); - return &vec->mem[i]; -} - -// Return last item -inline -DeltaChunk* DCV_last(const DeltaChunkVector* vec) -{ - return DCV_get(vec, vec->size-1); -} - -inline -ull DCV_rbound(const DeltaChunkVector* vec) -{ - return DC_rbound(DCV_last(vec)); -} - -inline -int DCV_empty(const DeltaChunkVector* vec) -{ - return vec->size == 0; -} - -// Return end pointer of the vector -inline -const DeltaChunk* DCV_end(const DeltaChunkVector* vec) -{ - assert(!DCV_empty(vec)); - return vec->mem + vec->size; -} - -void DCV_destroy(DeltaChunkVector* vec) -{ - if (vec->mem){ -#ifdef DEBUG - fprintf(stderr, "Freeing %p\n", (void*)vec->mem); -#endif - - const DeltaChunk* end = &vec->mem[vec->size]; - DeltaChunk* i; - for(i = vec->mem; i < end; i++){ - DC_destroy(i); - } - - PyMem_Free(vec->mem); - vec->size = 0; - vec->reserved_size = 0; - vec->mem = 0; - } -} - -// Reset this vector so that its existing memory can be filled again. -// Memory will be kept, but not cleaned up -inline -void DCV_forget_members(DeltaChunkVector* vec) -{ - vec->size = 0; -} - -// Reset the vector so that its size will be zero, and its members will -// have been deallocated properly. -// It will keep its memory though, and hence can be filled again -inline -void DCV_reset(DeltaChunkVector* vec) -{ - if (vec->size == 0) - return; - - DeltaChunk* dc = vec->mem; - const DeltaChunk* dcend = DCV_end(vec); - for(;dc < dcend; dc++){ - DC_destroy(dc); - } - - vec->size = 0; -} - - -// Append one chunk to the end of the list, and return a pointer to it -// It will not have been initialized ! -static inline -DeltaChunk* DCV_append(DeltaChunkVector* vec) -{ - if (vec->size + 1 > vec->reserved_size){ - DCV_grow_by(vec, gDVC_grow_by); - } - - DeltaChunk* next = vec->mem + vec->size; - vec->size += 1; - return next; -} - -// Return delta chunk being closest to the given absolute offset -inline -DeltaChunk* DCV_closest_chunk(const DeltaChunkVector* vec, ull ofs) -{ - assert(vec->mem); - - ull lo = 0; - ull hi = vec->size; - ull mid; - DeltaChunk* dc; - - while (lo < hi) - { - mid = (lo + hi) / 2; - dc = vec->mem + mid; - if (dc->to > ofs){ - hi = mid; - } else if ((DC_rbound(dc) > ofs) | (dc->to == ofs)) { - return dc; - } else { - lo = mid + 1; - } - } - - return DCV_last(vec); -} - -// Assert the given vector has correct datachunks -// return 1 on success -int DCV_dbg_check_integrity(const DeltaChunkVector* vec) -{ - if(DCV_empty(vec)){ - return 0; - } - const DeltaChunk* i = vec->mem; - const DeltaChunk* end = DCV_end(vec); - - ull aparent_size = DCV_rbound(vec) - DCV_lbound(vec); - ull acc_size = 0; - for(; i < end; i++){ - acc_size += i->ts; - } - if (acc_size != aparent_size) - return 0; - - if (vec->size < 2){ - return 1; - } - - const DeltaChunk* endm1 = DCV_end(vec) - 1; - for(i = vec->mem; i < endm1; i++){ - const DeltaChunk* n = i+1; - if (DC_rbound(i) != n->to){ - return 0; - } - } - - return 1; -} - -// Write a slice as defined by its absolute offset in bytes and its size into the given -// destination. The individual chunks written will be a deep copy of the source -// data chunks -// TODO: this could trigger copying many smallish add-chunk pieces - maybe some sort -// of append-only memory pool would improve performance -inline -void DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunkVector* dest, ull ofs, ull size) -{ - //fprintf(stderr, "Copy Slice To: src->size = %i, ofs = %i, size=%i\n", (int)src->size, (int)ofs, (int)size); - assert(DCV_lbound(src) <= ofs); - assert((ofs + size) <= DCV_rbound(src)); - - DeltaChunk* cdc = DCV_closest_chunk(src, ofs); - - // partial overlap - if (cdc->to != ofs) { - DeltaChunk* destc = DCV_append(dest); - const ull relofs = ofs - cdc->to; - DC_offset_copy_to(cdc, destc, relofs, cdc->ts - relofs < size ? cdc->ts - relofs : size); - cdc += 1; - size -= destc->ts; - - if (size == 0){ - return; - } - } - - const DeltaChunk* vecend = DCV_end(src); - for( ;(cdc < vecend) && size; ++cdc) - { - if (cdc->ts < size) { - DC_copy_to(cdc, DCV_append(dest)); - size -= cdc->ts; - } else { - DC_offset_copy_to(cdc, DCV_append(dest), 0, size); - size = 0; - break; - } - } - - assert(size == 0); -} - - -// Insert all chunks in 'from' to 'to', starting at the delta chunk named 'at' which -// originates in to -// 'at' will be replaced by the items to insert ( special purpose ) -// 'at' will be properly destroyed, but all items will just be copied bytewise -// using memcpy. Hence from must just forget about them ! -// IMPORTANT: to must have an appropriate size already -inline -void DCV_replace_one_by_many(const DeltaChunkVector* from, DeltaChunkVector* to, DeltaChunk* at) -{ - //fprintf(stderr, "Replace one by many: from->size = %i, to->size = %i, to->reserved = %i\n", (int)from->size, (int)to->size, (int)to->reserved_size); - assert(from->size > 1); - assert(to->size + from->size - 1 <= to->reserved_size); - - // -1 because we replace 'at' - DC_destroy(at); - - // If we are somewhere in the middle, we have to make some space - if (DCV_last(to) != at) { - //fprintf(stderr, "moving to %i from %i, num chunks = %i\n", (int)((at+from->size)-to->mem), (int)((at+1)-to->mem), (int)(DCV_end(to) - (at+1))); - memmove((void*)(at+from->size), (void*)(at+1), (size_t)((DCV_end(to) - (at+1)) * sizeof(DeltaChunk))); - } - - // Finally copy all the items in - memcpy((void*) at, (void*)from->mem, from->size*sizeof(DeltaChunk)); - - // FINALLY: update size - to->size += from->size - 1; -} - -// Take slices of bdcv into the corresponding area of the tdcv, which is the topmost -// delta to apply. tmpl is used as temporary space and must be initialzed and destroyed by the -// caller -void DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv, DeltaChunkVector* tmpl) -{ - Py_ssize_t dci = 0; - Py_ssize_t iend = tdcv->size; - DeltaChunk* dc; - - DBG_check(tdcv); - DBG_check(bdcv); - - for (;dci < iend; dci++) - { - // Data chunks don't need processing - dc = DCV_get(tdcv, dci); - if (dc->data){ - continue; - } - - // Copy Chunk Handling - DCV_copy_slice_to(bdcv, tmpl, dc->so, dc->ts); - DBG_check(tmpl); - assert(tmpl->size); - - // move target bounds - DeltaChunk* tdc = tmpl->mem; - DeltaChunk* tdcend = tmpl->mem + tmpl->size; - const ull ofs = dc->to - dc->so; - for(;tdc < tdcend; tdc++){ - tdc->to += ofs; - } - - // insert slice into our list - if (tmpl->size == 1){ - // Its not data, so destroy is not really required, anyhow ... - DC_destroy(dc); - *dc = *DCV_get(tmpl, 0); - } else { - DCV_reserve_memory(tdcv, tdcv->size + tmpl->size - 1 + gDVC_grow_by); - dc = DCV_get(tdcv, dci); - DCV_replace_one_by_many(tmpl, tdcv, dc); - // Compensate for us being replaced - dci += tmpl->size-1; - iend += tmpl->size-1; - } - - DBG_check(tdcv); - - // make sure the members will not be deallocated by the list - DCV_forget_members(tmpl); - } -} - -// DELTA CHUNK LIST (PYTHON) -///////////////////////////// - -typedef struct { - PyObject_HEAD - // ----------- - DeltaChunkVector vec; - -} DeltaChunkList; - - -static -int DCL_init(DeltaChunkList*self, PyObject *args, PyObject *kwds) -{ - if(args && PySequence_Size(args) > 0){ - PyErr_SetString(PyExc_ValueError, "Too many arguments"); - return -1; - } - - DCV_init(&self->vec, 0); - return 0; -} - -static -void DCL_dealloc(DeltaChunkList* self) -{ - DCV_destroy(&(self->vec)); -} - -static -PyObject* DCL_len(DeltaChunkList* self) -{ - return PyLong_FromUnsignedLongLong(DCV_len(&self->vec)); -} - -static inline -ull DCL_rbound(DeltaChunkList* self) -{ - if (DCV_empty(&self->vec)) - return 0; - return DCV_rbound(&self->vec); -} - -static -PyObject* DCL_py_rbound(DeltaChunkList* self) -{ - return PyLong_FromUnsignedLongLong(DCL_rbound(self)); -} - -// Write using a write function, taking remaining bytes from a base buffer -static -PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) -{ - PyObject* pybuf = 0; - PyObject* writeproc = 0; - if (!PyArg_ParseTuple(args, "OO", &pybuf, &writeproc)){ - PyErr_BadArgument(); - return NULL; - } - - if (!PyObject_CheckReadBuffer(pybuf)){ - PyErr_SetString(PyExc_ValueError, "First argument must be a buffer-compatible object, like a string, or a memory map"); - return NULL; - } - - if (!PyCallable_Check(writeproc)){ - PyErr_SetString(PyExc_ValueError, "Second argument must be a writer method with signature write(buf)"); - return NULL; - } - - const DeltaChunk* i = self->vec.mem; - const DeltaChunk* end = DCV_end(&self->vec); - - const uchar* data; - Py_ssize_t dlen; - PyObject_AsReadBuffer(pybuf, (const void**)&data, &dlen); - - PyObject* tmpargs = PyTuple_New(1); - - for(; i < end; i++){ - DC_apply(i, data, writeproc, tmpargs); - } - - Py_DECREF(tmpargs); - Py_RETURN_NONE; -} - -static PyMethodDef DCL_methods[] = { - {"apply", (PyCFunction)DCL_apply, METH_VARARGS, "Apply the given iterable of delta streams" }, - {"__len__", (PyCFunction)DCL_len, METH_NOARGS, NULL}, - {"rbound", (PyCFunction)DCL_py_rbound, METH_NOARGS, NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject DeltaChunkListType = { - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ - "DeltaChunkList", /*tp_name*/ - sizeof(DeltaChunkList), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor)DCL_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - "Minimal Delta Chunk List",/* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - DCL_methods, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - (initproc)DCL_init, /* tp_init */ - 0, /* tp_alloc */ - 0, /* tp_new */ -}; - - -// Makes a new copy of the DeltaChunkList - you have to do everything yourselve -// in C ... want C++ !! -DeltaChunkList* DCL_new_instance(void) -{ - DeltaChunkList* dcl = (DeltaChunkList*) PyType_GenericNew(&DeltaChunkListType, 0, 0); - assert(dcl); - - DCL_init(dcl, 0, 0); - assert(dcl->vec.size == 0); - assert(dcl->vec.mem == NULL); - return dcl; -} - -inline -ull msb_size(const uchar** datap, const uchar* top) -{ - const uchar *data = *datap; - ull cmd, size = 0; - uint i = 0; - do { - cmd = *data++; - size |= (cmd & 0x7f) << i; - i += 7; - } while (cmd & 0x80 && data < top); - *datap = data; - return size; -} - -static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) -{ - // obtain iterator - PyObject* stream_iter = 0; - if (!PyIter_Check(dstreams)){ - stream_iter = PyObject_GetIter(dstreams); - if (!stream_iter){ - PyErr_SetString(PyExc_RuntimeError, "Couldn't obtain iterator for streams"); - return NULL; - } - } else { - stream_iter = dstreams; - } - - DeltaChunkVector dcv; - DeltaChunkVector tdcv; - DeltaChunkVector tmpl; - DCV_init(&dcv, 100); // should be enough to keep the average text file - DCV_init(&tdcv, 0); - DCV_init(&tmpl, 200); - - unsigned int dsi = 0; - PyObject* ds = 0; - int error = 0; - for (ds = PyIter_Next(stream_iter), dsi = 0; ds != NULL; ++dsi, ds = PyIter_Next(stream_iter)) - { - PyObject* db = PyObject_CallMethod(ds, "read", 0); - if (!PyObject_CheckReadBuffer(db)){ - error = 1; - PyErr_SetString(PyExc_RuntimeError, "Returned buffer didn't support the buffer protocol"); - goto loop_end; - } - - const uchar* data; - Py_ssize_t dlen; - PyObject_AsReadBuffer(db, (const void**)&data, &dlen); - const uchar* dend = data + dlen; - - // read header - const ull base_size = msb_size(&data, dend); - const ull target_size = msb_size(&data, dend); - - // estimate number of ops - assume one third adds, half two byte (size+offset) copies - const uint approx_num_cmds = (dlen / 3) + (((dlen / 3) * 2) / (2+2+1)); - DCV_reserve_memory(&dcv, approx_num_cmds); - - // parse command stream - ull tbw = 0; // Amount of target bytes written - bool is_shared_data = dsi != 0; - bool is_first_run = dsi == 0; - - assert(data < dend); - while (data < dend) - { - const char cmd = *data++; - - if (cmd & 0x80) - { - unsigned long cp_off = 0, cp_size = 0; - if (cmd & 0x01) cp_off = *data++; - if (cmd & 0x02) cp_off |= (*data++ << 8); - if (cmd & 0x04) cp_off |= (*data++ << 16); - if (cmd & 0x08) cp_off |= ((unsigned) *data++ << 24); - if (cmd & 0x10) cp_size = *data++; - if (cmd & 0x20) cp_size |= (*data++ << 8); - if (cmd & 0x40) cp_size |= (*data++ << 16); - if (cp_size == 0) cp_size = 0x10000; - - const unsigned long rbound = cp_off + cp_size; - if (rbound < cp_size || - rbound > base_size){ - // this really shouldn't happen - error = 1; - assert(0); - break; - } - - DC_init(DCV_append(&dcv), tbw, cp_size, cp_off); - tbw += cp_size; - - } else if (cmd) { - // Compression reduces fragmentation though, which is why we do it - // in all cases. - // It makes the more sense the more consecutive add-chunks we have, - // its more likely in big deltas, for big binary files - const uchar* add_start = data - 1; - const uchar* add_end = dend; - ull num_bytes = cmd; - data += cmd; - ull num_chunks = 1; - while (data < dend){ - //while (0){ - const char c = *data; - if (c & 0x80){ - add_end = data; - break; - } else { - data += 1 + c; // advance by 1 to skip add cmd - num_bytes += c; - num_chunks += 1; - } - } - - #ifdef DEBUG - assert(add_end - add_start > 0); - if (num_chunks > 1){ - fprintf(stderr, "Compression: got %i bytes of %i chunks\n", (int)num_bytes, (int)num_chunks); - } - #endif - - DeltaChunk* dc = DCV_append(&dcv); - DC_init(dc, tbw, num_bytes, 0); - - // gather the data, or (possibly) share single blocks - if (num_chunks > 1){ - uchar* dcdata = PyMem_Malloc(num_bytes); - while (add_start < add_end){ - const char bytes = *add_start++; - memcpy((void*)dcdata, (void*)add_start, bytes); - dcdata += bytes; - add_start += bytes; - } - DC_set_data_with_ownership(dc, dcdata-num_bytes); - } else { - DC_set_data(dc, data - cmd, cmd, is_shared_data); - } - - tbw += num_bytes; - } else { - error = 1; - PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); - goto loop_end; - } - }// END handle command opcodes - if (tbw != target_size){ - PyErr_SetString(PyExc_RuntimeError, "Failed to parse delta stream"); - error = 1; - } - - if (!is_first_run){ - DCV_connect_with_base(&tdcv, &dcv, &tmpl); - } - - if (is_first_run){ - tdcv = dcv; - // wipe out dcv without destroying the members, get its own memory - DCV_init(&dcv, tdcv.size); - } else { - // destroy members, but keep memory - DCV_reset(&dcv); - } - -loop_end: - // perform cleanup - Py_DECREF(ds); - Py_DECREF(db); - - if (error){ - break; - } - }// END for each stream object - - if (dsi == 0 && ! error){ - PyErr_SetString(PyExc_ValueError, "No streams provided"); - } - - if (stream_iter != dstreams){ - Py_DECREF(stream_iter); - } - - DCV_destroy(&tmpl); - if (dsi > 1){ - // otherwise dcv equals tcl - DCV_destroy(&dcv); - } - - // Return the actual python object - its just a container - DeltaChunkList* dcl = DCL_new_instance(); - if (!dcl){ - PyErr_SetString(PyExc_RuntimeError, "Couldn't allocate list"); - // Otherwise tdcv would be deallocated by the chunk list - DCV_destroy(&tdcv); - error = 1; - } else { - // Plain copy, don't deallocate - dcl->vec = tdcv; - } - - if (error){ - // Will dealloc tdcv - Py_XDECREF(dcl); - return NULL; - } - - return (PyObject*)dcl; -} - static PyMethodDef py_fun[] = { { "PackIndexFile_sha_to_index", (PyCFunction)PackIndexFile_sha_to_index, METH_VARARGS, "TODO" }, - { "connect_deltas", (PyCFunction)connect_deltas, METH_O, "TODO" }, { NULL, NULL, 0, NULL } }; @@ -973,13 +93,8 @@ PyMODINIT_FUNC init_fun(void) { PyObject *m; - if (PyType_Ready(&DeltaChunkListType) < 0) - return; - m = Py_InitModule3("_fun", py_fun, NULL); if (m == NULL) return; - Py_INCREF(&DeltaChunkListType); - PyModule_AddObject(m, "Noddy", (PyObject *)&DeltaChunkListType); } diff --git a/fun.py b/fun.py index 038b4c761..e17460bf6 100644 --- a/fun.py +++ b/fun.py @@ -654,6 +654,6 @@ def is_equal_canonical_sha(canonical_length, match, sha1): try: # raise ImportError; # DEBUG - from _fun import connect_deltas + from _delta_apply import connect_deltas except ImportError: pass diff --git a/setup.py b/setup.py index 265156df2..7146ea833 100755 --- a/setup.py +++ b/setup.py @@ -77,7 +77,10 @@ def get_data_files(self): package_data={'gitdb' : ['AUTHORS', 'README'], 'gitdb.test' : ['fixtures/packs/*', 'fixtures/objects/7b/*']}, package_dir = {'gitdb':''}, - ext_modules=[Extension('gitdb._fun', ['_fun.c'])], + ext_modules=[ + Extension('gitdb._fun', ['_fun.c']), + Extension('gitdb._delta_apply', ['_delta_apply.c']) + ], license = "BSD License", requires=('async (>=0.6.1)',), install_requires='async >= 0.6.1', From 9c5672e1b0cf56f1cf5151d60acb35d610e904a8 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 13 Oct 2010 13:55:22 +0200 Subject: [PATCH 0094/2375] Now building a single module called _perf which contains all the performance enhancements, which increases loadtimes, less is more --- _delta_apply.c | 22 ---------------------- _fun.c | 12 +++++++++--- fun.py | 2 +- pack.py | 2 +- setup.py | 5 +---- 5 files changed, 12 insertions(+), 31 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index 40ea60c56..d81e65d15 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -879,25 +879,3 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) return (PyObject*)dcl; } -static PyMethodDef py_fun[] = { - { "connect_deltas", (PyCFunction)connect_deltas, METH_O, "TODO" }, - { NULL, NULL, 0, NULL } -}; - -#ifndef PyMODINIT_FUNC /* declarations for DLL import/export */ -#define PyMODINIT_FUNC void -#endif -PyMODINIT_FUNC init_delta_apply(void) -{ - PyObject *m; - - if (PyType_Ready(&DeltaChunkListType) < 0) - return; - - m = Py_InitModule3("_delta_apply", py_fun, NULL); - if (m == NULL) - return; - - Py_INCREF(&DeltaChunkListType); - PyModule_AddObject(m, "DeltaChunkList", (PyObject *)&DeltaChunkListType); -} diff --git a/_fun.c b/_fun.c index 1881bfb05..386068577 100644 --- a/_fun.c +++ b/_fun.c @@ -1,4 +1,5 @@ #include +#include "_delta_apply.c" static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) { @@ -80,21 +81,26 @@ static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) Py_RETURN_NONE; } - static PyMethodDef py_fun[] = { { "PackIndexFile_sha_to_index", (PyCFunction)PackIndexFile_sha_to_index, METH_VARARGS, "TODO" }, + { "connect_deltas", (PyCFunction)connect_deltas, METH_O, "TODO" }, { NULL, NULL, 0, NULL } }; #ifndef PyMODINIT_FUNC /* declarations for DLL import/export */ #define PyMODINIT_FUNC void #endif -PyMODINIT_FUNC init_fun(void) +PyMODINIT_FUNC init_perf(void) { PyObject *m; - m = Py_InitModule3("_fun", py_fun, NULL); + if (PyType_Ready(&DeltaChunkListType) < 0) + return; + + m = Py_InitModule3("_perf", py_fun, NULL); if (m == NULL) return; + Py_INCREF(&DeltaChunkListType); + PyModule_AddObject(m, "DeltaChunkList", (PyObject *)&DeltaChunkListType); } diff --git a/fun.py b/fun.py index e17460bf6..0b14f82ac 100644 --- a/fun.py +++ b/fun.py @@ -654,6 +654,6 @@ def is_equal_canonical_sha(canonical_length, match, sha1): try: # raise ImportError; # DEBUG - from _delta_apply import connect_deltas + from _perf import connect_deltas except ImportError: pass diff --git a/pack.py b/pack.py index 91323fcce..79ffcc217 100644 --- a/pack.py +++ b/pack.py @@ -24,7 +24,7 @@ ) try: - from _fun import PackIndexFile_sha_to_index + from _perf import PackIndexFile_sha_to_index except ImportError: pass # END try c module diff --git a/setup.py b/setup.py index 7146ea833..7e50e0fe7 100755 --- a/setup.py +++ b/setup.py @@ -77,10 +77,7 @@ def get_data_files(self): package_data={'gitdb' : ['AUTHORS', 'README'], 'gitdb.test' : ['fixtures/packs/*', 'fixtures/objects/7b/*']}, package_dir = {'gitdb':''}, - ext_modules=[ - Extension('gitdb._fun', ['_fun.c']), - Extension('gitdb._delta_apply', ['_delta_apply.c']) - ], + ext_modules=[Extension('gitdb._perf', ['_fun.c'])], license = "BSD License", requires=('async (>=0.6.1)',), install_requires='async >= 0.6.1', From fa03f746746df99763deb45943988d68fb450b4b Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 13 Oct 2010 15:51:04 +0200 Subject: [PATCH 0095/2375] Reverse Delta Application was a nice experiment, as it has one major flaw: Currently it integrates chunks from its base into the topmost delta chunk list, which causes plenty of mem-move operations. Plenty means, many many many, and its getting worse the more deltas you have of course. The algorithm was supposed to reduce the amount of memory activity, but failed at this point, making it worse than before. Probably it would just be fastest to implement the previous python algorithm, which swaps two buffers, in c --- _delta_apply.c | 11 +++++++---- stream.py | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index d81e65d15..e667a2eda 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -398,7 +398,6 @@ int DCV_dbg_check_integrity(const DeltaChunkVector* vec) inline void DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunkVector* dest, ull ofs, ull size) { - //fprintf(stderr, "Copy Slice To: src->size = %i, ofs = %i, size=%i\n", (int)src->size, (int)ofs, (int)size); assert(DCV_lbound(src) <= ofs); assert((ofs + size) <= DCV_rbound(src)); @@ -443,7 +442,6 @@ void DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunkVector* dest, ull inline void DCV_replace_one_by_many(const DeltaChunkVector* from, DeltaChunkVector* to, DeltaChunk* at) { - //fprintf(stderr, "Replace one by many: from->size = %i, to->size = %i, to->reserved = %i\n", (int)from->size, (int)to->size, (int)to->reserved_size); assert(from->size > 1); assert(to->size + from->size - 1 <= to->reserved_size); @@ -452,7 +450,6 @@ void DCV_replace_one_by_many(const DeltaChunkVector* from, DeltaChunkVector* to, // If we are somewhere in the middle, we have to make some space if (DCV_last(to) != at) { - //fprintf(stderr, "moving to %i from %i, num chunks = %i\n", (int)((at+from->size)-to->mem), (int)((at+1)-to->mem), (int)(DCV_end(to) - (at+1))); memmove((void*)(at+from->size), (void*)(at+1), (size_t)((DCV_end(to) - (at+1)) * sizeof(DeltaChunk))); } @@ -725,7 +722,8 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) const ull target_size = msb_size(&data, dend); // estimate number of ops - assume one third adds, half two byte (size+offset) copies - const uint approx_num_cmds = (dlen / 3) + (((dlen / 3) * 2) / (2+2+1)); + // Assume good compression for the adds + const uint approx_num_cmds = ((dlen / 3) / 10) + (((dlen / 3) * 2) / (2+2+1)); DCV_reserve_memory(&dcv, approx_num_cmds); // parse command stream @@ -825,6 +823,11 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) DCV_connect_with_base(&tdcv, &dcv, &tmpl); } + #ifdef DEBUG + fprintf(stderr, "tdcv->size = %i, tdcv->reserved_size = %i\n", (int)tdcv.size, (int)tdcv.reserved_size); + fprintf(stderr, "dcv->size = %i, dcv->reserved_size = %i\n", (int)dcv.size, (int)dcv.reserved_size); + #endif + if (is_first_run){ tdcv = dcv; // wipe out dcv without destroying the members, get its own memory diff --git a/stream.py b/stream.py index af4591f85..8f9f9c386 100644 --- a/stream.py +++ b/stream.py @@ -337,6 +337,7 @@ def _set_cache_(self, attr): # Aggregate all deltas into one delta in reverse order. Hence we take # the last delta, and reverse-merge its ancestor delta, until we receive # the final delta data stream. + # print "Handling %i delta streams, sizes: %s" % (len(self._dstreams), [ds.size for ds in self._dstreams]) dcl = connect_deltas(self._dstreams) # call len directly, as the (optional) c version doesn't implement the sequence From ff9c83a3fea26653d725686a692d0100efb63382 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 13 Oct 2010 16:28:07 +0200 Subject: [PATCH 0096/2375] Disabled new implementation in favor of the old one - all that's needed is a c implementation of apply delta data --- _delta_apply.c | 4 ++++ stream.py | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index e667a2eda..51f55e892 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -450,6 +450,10 @@ void DCV_replace_one_by_many(const DeltaChunkVector* from, DeltaChunkVector* to, // If we are somewhere in the middle, we have to make some space if (DCV_last(to) != at) { + // IMPORTANT: This memmove kills the performance in case of large deltas + // Causing everything to slow down enormously. Its logical, as the memory + // gets shifted each time we insert nodes, for each chunk, for ever smaller + // chunks depending on the deltas memmove((void*)(at+from->size), (void*)(at+1), (size_t)((DCV_end(to) - (at+1)) * sizeof(DeltaChunk))); } diff --git a/stream.py b/stream.py index 8f9f9c386..2c24426c6 100644 --- a/stream.py +++ b/stream.py @@ -325,7 +325,7 @@ def __init__(self, stream_list): self._dstreams = tuple(stream_list[:-1]) self._br = 0 - def _set_cache_(self, attr): + def _set_cache_too_slow(self, attr): # the direct algorithm is fastest and most direct if there is only one # delta. Also, the extra overhead might not be worth it for items smaller # than X - definitely the case in python, every function call costs @@ -360,7 +360,7 @@ def _set_cache_(self, attr): self._mm_target.seek(0) - def _set_cache_brute_(self, attr): + def _set_cache_(self, attr): """If we are here, we apply the actual deltas""" buffer_info_list = list() From 95d820239d5444d59ae67f50de715f1574c7213b Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 13 Oct 2010 17:38:53 +0200 Subject: [PATCH 0097/2375] apply_delta now has a C implementation, which is only 25 percent faster for small files ( the overhead of all the rest is very high ), but 4 times faster for large files, where the enormous call overhead coming in with python really starts to show --- _delta_apply.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ _fun.c | 3 ++- stream.py | 17 ++++++------ 3 files changed, 81 insertions(+), 9 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index 51f55e892..dfb0a94c3 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -886,3 +886,73 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) return (PyObject*)dcl; } + +// Write using a write function, taking remaining bytes from a base buffer +// replaces the corresponding method in python +static +PyObject* apply_delta(PyObject* self, PyObject* args) +{ + PyObject* pybbuf = 0; + PyObject* pydbuf = 0; + PyObject* pytbuf = 0; + if (!PyArg_ParseTuple(args, "OOO", &pybbuf, &pydbuf, &pytbuf)){ + PyErr_BadArgument(); + return NULL; + } + + PyObject* objects[] = { pybbuf, pydbuf, pytbuf }; + assert(sizeof(objects) / sizeof(PyObject*) == 3); + + uint i; + for(i = 0; i < 3; i++){ + if (!PyObject_CheckReadBuffer(objects[i])){ + PyErr_SetString(PyExc_ValueError, "Argument must be a buffer-compatible object, like a string, or a memory map"); + return NULL; + } + } + + Py_ssize_t lbbuf; Py_ssize_t ldbuf; Py_ssize_t ltbuf; + const uchar* bbuf; const uchar* dbuf; + uchar* tbuf; + PyObject_AsReadBuffer(pybbuf, (const void**)(&bbuf), &lbbuf); + PyObject_AsReadBuffer(pydbuf, (const void**)(&dbuf), &ldbuf); + + if (PyObject_AsWriteBuffer(pytbuf, (void**)(&tbuf), <buf)){ + PyErr_SetString(PyExc_ValueError, "Argument 3 must be a writable buffer"); + return NULL; + } + + const uchar* data = dbuf; + const uchar* dend = dbuf + ldbuf; + + while (data < dend) + { + const char cmd = *data++; + + if (cmd & 0x80) + { + unsigned long cp_off = 0, cp_size = 0; + if (cmd & 0x01) cp_off = *data++; + if (cmd & 0x02) cp_off |= (*data++ << 8); + if (cmd & 0x04) cp_off |= (*data++ << 16); + if (cmd & 0x08) cp_off |= ((unsigned) *data++ << 24); + if (cmd & 0x10) cp_size = *data++; + if (cmd & 0x20) cp_size |= (*data++ << 8); + if (cmd & 0x40) cp_size |= (*data++ << 16); + if (cp_size == 0) cp_size = 0x10000; + + memcpy(tbuf, bbuf + cp_off, cp_size); + tbuf += cp_size; + + } else if (cmd) { + memcpy(tbuf, data, cmd); + tbuf += cmd; + data += cmd; + } else { + PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); + return NULL; + } + }// END handle command opcodes + + Py_RETURN_NONE; +} diff --git a/_fun.c b/_fun.c index 386068577..befee4ec4 100644 --- a/_fun.c +++ b/_fun.c @@ -83,7 +83,8 @@ static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) static PyMethodDef py_fun[] = { { "PackIndexFile_sha_to_index", (PyCFunction)PackIndexFile_sha_to_index, METH_VARARGS, "TODO" }, - { "connect_deltas", (PyCFunction)connect_deltas, METH_O, "TODO" }, + { "connect_deltas", (PyCFunction)connect_deltas, METH_O, "See python implementation" }, + { "apply_delta", (PyCFunction)apply_delta, METH_VARARGS, "See python implementation" }, { NULL, NULL, 0, NULL } }; diff --git a/stream.py b/stream.py index 2c24426c6..cedb70cf3 100644 --- a/stream.py +++ b/stream.py @@ -22,6 +22,11 @@ zlib ) +try: + from _perf import apply_delta as c_apply_delta +except ImportError: + pass + __all__ = ('DecompressMemMapReader', 'FDCompressedSha1Writer', 'DeltaApplyReader') @@ -413,7 +418,10 @@ def _set_cache_(self, attr): stream_copy(dstream.read, ddata.write, dstream.size, 256*mmap.PAGESIZE) ####################################################################### - apply_delta_data(bbuf, src_size, ddata, len(ddata), tbuf.write) + if 'c_apply_delta' in globals(): + c_apply_delta(bbuf, ddata, tbuf); + else: + apply_delta_data(bbuf, src_size, ddata, len(ddata), tbuf.write) ####################################################################### # finally, swap out source and target buffers. The target is now the @@ -430,13 +438,6 @@ def _set_cache_(self, attr): self._mm_target = bbuf self._size = final_target_size - # TODO: Once that works, figure out the ordering of the opcodes. If they - # are always in-order/sequential, an alternate implementation could - # use stream access only. Of course this would mean we would read - # all deltas in advance, analyse the opcode ranges to determine a final - # concatenated opcode list which indicates what to copy from which delta - # to which position. This preprocessing would allow true streaming - def read(self, count=0): bl = self._size - self._br # bytes left if count < 1 or count > bl: From f3284c1edf3670dca0cf7fb11ad50a36fe53e782 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 13 Oct 2010 19:21:48 +0200 Subject: [PATCH 0098/2375] Integrated new algorithm into the stream class, it will now be chosen depending on the context to figure out which one to use. For some reason, the c version that is slow for big files really rocks when its about small files. Its better than the respective c implementation of the normal delta apply --- stream.py | 23 ++++++++++++++++++++++- test/performance/test_pack.py | 33 +++++++++++---------------------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/stream.py b/stream.py index cedb70cf3..f5e05e114 100644 --- a/stream.py +++ b/stream.py @@ -22,8 +22,10 @@ zlib ) +has_perf_mod = False try: from _perf import apply_delta as c_apply_delta + has_perf_mod = True except ImportError: pass @@ -330,7 +332,7 @@ def __init__(self, stream_list): self._dstreams = tuple(stream_list[:-1]) self._br = 0 - def _set_cache_too_slow(self, attr): + def _set_cache_too_slow_without_c(self, attr): # the direct algorithm is fastest and most direct if there is only one # delta. Also, the extra overhead might not be worth it for items smaller # than X - definitely the case in python, every function call costs @@ -366,6 +368,15 @@ def _set_cache_too_slow(self, attr): self._mm_target.seek(0) def _set_cache_(self, attr): + """Determine which version to use depending on the configuration of the deltas + :note: we are only called if we have the performance module""" + # otherwise it depends on the amount of memory to shift around + if len(self._dstreams) > 1 and self._bstream.size < 150000: + return self._set_cache_too_slow_without_c(attr) + else: + return self._set_cache_brute_(attr) + + def _set_cache_brute_(self, attr): """If we are here, we apply the actual deltas""" buffer_info_list = list() @@ -438,6 +449,13 @@ def _set_cache_(self, attr): self._mm_target = bbuf self._size = final_target_size + + #{ Configuration + if not has_perf_mod: + _set_cache_ = _set_cache_brute_ + + #} END configuration + def read(self, count=0): bl = self._size - self._br # bytes left if count < 1 or count > bl: @@ -654,4 +672,7 @@ def close(self): def write(self, data): return len(data) + #} END W streams + + diff --git a/test/performance/test_pack.py b/test/performance/test_pack.py index af468b0be..f9169ffb0 100644 --- a/test/performance/test_pack.py +++ b/test/performance/test_pack.py @@ -25,29 +25,18 @@ def test_pack_random_access(self): # sha lookup: best-case and worst case access pdb_pack_info = pdb._pack_info - access_times = list() - for rand in range(2): - if rand: - random.shuffle(sha_list) - # END shuffle shas - st = time() - for sha in sha_list: - pdb_pack_info(sha) - # END for each sha to look up - elapsed = time() - st - access_times.append(elapsed) - - # discard cache - del(pdb._entities) - pdb.entities() - print >> sys.stderr, "PDB: looked up %i sha in %i packs (random=%i) in %f s ( %f shas/s )" % (ns, len(pdb.entities()), rand, elapsed, ns / elapsed) - # END for each random mode - elapsed_order, elapsed_rand = access_times - - # well, its never really sequencial regarding the memory patterns, but it - # shows how well the prioriy cache performs - print >> sys.stderr, "PDB: sequential access is %f %% faster than random-access" % (100 - ((elapsed_order / elapsed_rand) * 100)) + # END shuffle shas + st = time() + for sha in sha_list: + pdb_pack_info(sha) + # END for each sha to look up + elapsed = time() - st + # discard cache + del(pdb._entities) + pdb.entities() + print >> sys.stderr, "PDB: looked up %i sha in %i packs in %f s ( %f shas/s )" % (ns, len(pdb.entities()), elapsed, ns / elapsed) + # END for each random mode # query info and streams only max_items = 10000 # can wait longer when testing memory From f59c58d9478ddc49964b5bcd0711d06a957e4680 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 13 Oct 2010 21:46:05 +0200 Subject: [PATCH 0099/2375] Added new stream type which will request its size from its stream. This triggers full decompression, currently, but allows work to be delayed even further.If people want a stream, they usually read it anyway. Then it doesn't matter which attriubute they query first --- base.py | 17 +++++++++++++++++ pack.py | 8 ++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/base.py b/base.py index 938a09242..d0bcc0866 100644 --- a/base.py +++ b/base.py @@ -135,6 +135,23 @@ def read(self, size=-1): @property def stream(self): return self[3] + + #} END stream reader interface + + +class ODeltaStream(OStream): + """Uses size info of its stream, delaying reads""" + + def __new__(cls, sha, type, size, stream, *args, **kwargs): + """Helps with the initialization of subclasses""" + return tuple.__new__(cls, (sha, type, size, stream)) + + #{ Stream Reader Interface + + @property + def size(self): + return self[3].size + #} END stream reader interface diff --git a/pack.py b/pack.py index 79ffcc217..30da52c63 100644 --- a/pack.py +++ b/pack.py @@ -34,6 +34,7 @@ OStream, OPackInfo, OPackStream, + ODeltaStream, ODeltaPackInfo, ODeltaPackStream, ) @@ -584,14 +585,9 @@ def _object(self, sha, as_stream, index=-1): # To prevent it from applying the deltas when querying the size, # we extract it from the delta stream ourselves streams = self.collect_streams_at_offset(offset) - buf = streams[0].read(512) - offset, src_size = msb_size(buf) - offset, target_size = msb_size(buf, offset) - - streams[0].stream.seek(0) # assure it can be read by the delta reader dstream = DeltaApplyReader.new(streams) - return OStream(sha, dstream.type, target_size, dstream) + return ODeltaStream(sha, dstream.type, None, dstream) else: if type_id not in delta_types: return OInfo(sha, type_id_to_type_map[type_id], uncomp_size) From dcdd0fd9aa8aea6989cbf1530e73c6c86fc95761 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 14 Oct 2010 19:17:22 +0200 Subject: [PATCH 0100/2375] Added initial version of a document to show possible ways to stream delta data most efficiently --- doc/source/algorithm.rst | 101 +++++++++++++++++++++++++++++++++++++++ doc/source/index.rst | 1 + stream.py | 3 ++ 3 files changed, 105 insertions(+) create mode 100644 doc/source/algorithm.rst diff --git a/doc/source/algorithm.rst b/doc/source/algorithm.rst new file mode 100644 index 000000000..d1e4a9ba1 --- /dev/null +++ b/doc/source/algorithm.rst @@ -0,0 +1,101 @@ +######################## +Discussion of Algorithms +######################## + +************ +Introduction +************ +As you know, the pure-python object database support for GitPython is provided by the GitDB project. It is meant to be my backup plan to ensure that the DataVault (http://www.youtube.com/user/ByronBates99?feature=mhum#p/c/2A5C6EF5BDA8DB5C ) can handle reading huge files, especially those which were consolidated into packs. A nearly fully packed state is anticipated for the data-vaults repository, and reading these packs efficiently is an essential task. + +This document informs you about my findings in the struggle to improve the way packs are read to reduce memory usage required to handle huge files. It will try to conclude where future development could go to assure big delta-packed files can be read without the need of 8GB+ RAM. + +GitDB's main feature is the use of streams, hence the amount of memory used to read a database object is minimized, at the cost of some additional processing overhead to keep track of the stream state. This works great for legacy objects, which are essentially a zip-compressed byte-stream. + +Streaming data from delta-packed objects is far more difficult though, and only technically possible within certain limits, and at relatively high processing costs. My first observation was that there doesn't appear to be 'the one and only' algorithm which is generally superior. They all have their pros and cons, but fortunately this allows the implementation to choose the one most suited based on the amount of delta streams, as well as the size of the base, which allows an early and cheap estimate of the target size of the final data. + +********************************** +Traditional Delta-Apply-Algorithms +********************************** + +The brute-force CGit delta-apply algorithm +========================================== +CGit employs a simple and relatively brute-force algorithm, which resolves all delta streams recursively. When the recursion reaches the base level of the deltas, it will be decompressed into a buffer, then the first delta gets decompressed into a second buffer. From that, the target size of the delta can be extracted, to allocated a third buffer to hold the result of the operation, which consists of reading the delta stream byte-wise, to apply the operations in order, as described by single-byte opcodes. During recursion, each target buffer of the preceding delta-apply operation is used as base buffer for the next delta-apply operation, until the last delta was applied, leaving the final target buffer as result. + +About Delta-Opcodes +------------------- +There are only two kinds of opcodes, 'add-bytes' and 'copy-from-base'. One 'add-bytes' opcode can encode up to 7 bit of additional bytes to be copied from the delta stream into the target buffer. +A 'copy-from-base' opcode encodes a 32 bit offset into the base buffer, as well as the amount of bytes to be copied, which are up to 2^24 bytes. We may conclude that delta-bases may not be larger than 2^32+2^24 bytes in the current, extensible, implementation. +When generating the delta, git prefers copy operations over add operations, as they are much more efficient. Usually, the most recent, or biggest version of a file is used as base, whereas older and smaller versions of the file are expressed by copying only portions of the newest file. As it is not efficiently possible to represent all changes that way, add-bytes operations fill the gap where needed. All this explains why git can only add 128 bytes with one opcode, as it tries to minimize their use. +This implies that recent file history can usually be extracted faster than old history, which may involve many more deltas. + +Performance considerations +-------------------------- +The performance bottleneck of this algorithm appear to be the throughput of your RAM, as both opcodes will just trigger memcpy operations from one memory location to another, times the amount of deltas to apply. This in fact is very fast, even for big files above 100 MB. +Memory allocation could become an issue as you need the base buffer, the target buffer as well as the decompressed delta stream in memory at the same time. The continuous allocation and deallocation of possibly big buffers may support memory fragmentation. Whether it really kicks in, especially on 64 bit machines, is unproven though. +Nonetheless, the cgit implementation is currently the fastest one. + +The brute-force GitDB algorithm +=============================== +Despite of working essentially the same way as the CGit brute-force algorithm, GitDB minimizes the amount of allocations to 2 + num of deltas. The amount memory allocated peaks whiles the deltas are applied, as the base and target buffer, as well as the decompressed stream, are held in memory. +To achieve this, GitDB retrieves all delta-streams in advance, and peaks into their header information to determine the maximum size of the target buffer, just by reading 512 bytes of the compressed stream. If there is more than one delta to apply, the base buffer is set large enough to hold the biggest target buffer required by the delta streams. +Now it is possible to iterate all deltas, oldest first, newest last, and apply them using the buffers. At the end of each iteration, the buffers are swapped. + +Performance Results +------------------- +The performance test is performed on an aggressively packed repository with the history of cgit. 5000 sha's are extracted and read one after another. The delta-chains have a length of 0 to about 35. The pure-python implementation can stream the data of all objects (totaling 62,2 MiB) with an average rate of 8.1 MiB/s, which equals about 654 streams/s. +There are two bottlenecks: The major is the collection of the delta streams, which involves plenty of pack-lookup. This lookup is expensive in python, and is overly expensive. Its not overly critical though, as it only limits the amount of streams per second, not the actual data rate when applying the deltas. +Applying the deltas happens to be the second bottleneck, if the files to be processed get bigger. The more opcodes have to be processed, the more python slow function calls will dominate the result. As an example, it takes nearly 8 seconds to unpack a 125 MB file, where cgit only takes 2.4 s. + +To eliminate a few performance concerns, some key routines were rewritten in C. This changes the numbers of this particular test significantly, but not drastically, as the major bottleneck (delta collection) is still in place. Another performance reduction is due to the fact that plenty of other code related to the deltas is still pure-python. +Now all 5000 objects can be read at a rate of 11.1 MiB /s, or 892 streams/s. Fortunately, unpacking a big object is now done in 2.5s, which is just a tad slower than cgit, but with possibly less memory fragmentation. + + +************************************** +Paving the way towards delta streaming +************************************** + +GitDB's reverse delta aggregation algorithm +=========================================== +The idea of this algorithm is to merge all delta streams into one, which can then be applied in just one go. + +In the current implementation, delta streams are parsed into DeltaChunks (->**DC**), which are kept in vectors. Each DC represents one copy-from-base operation, or one or multiple consecutive add-bytes operations. DeltaChunks know about their target offset in the target buffer, and their size. Their target offsets are consecutive, i.e. one chunk ends where the next one begins, regarding their logical extend in the target buffer. +Add-bytes DCs additional store their data to apply, copy-from-base DCs store the offset into the base buffer from which to copy bytes. + +During processing, one starts with the latest (i.e. topmost) delta stream (->**TDS**), and iterates through its ancestor delta streams (->ADS) to merge them into the growing toplevel delta stream. + +The merging works by following a set of rules: + * Merge into the top-level delta from the youngest ancestor delta to the oldest one + * When merging one ADS, iterate from the first to the last chunk in TDS, then: + + * skip all add-bytes DCs. If bytes are added, these will always overwrite any operation coming from any ADS at the same offset. + * copy-from-base DCs will copy a slice of the respective portion of the ADS ( as defined by their base offset ) and use it to replace the original chunk. This acts as a 'virtual' copy-from-base operation. + + * Finish the merge once all ADS have been handled, or once the TDS only consists of add-byte DCs. The remaining copy-from-base DCs will copy from the original base buffer accordingly. + +Applying the TDS is as straightforward as applying any other DS. The base buffer is required to be kept in memory. In the current implementation, a full-size target buffer is allocated to hold the result of applying the chunk information. + +The memory consumption during the TDS processing are the uncompressed delta-bytes, the parsed DS, as well as the TDS. Afterwards one requires an allocated base buffer, the target buffer, as well as the TDS. +It is clearly visible that the current implementation does not at all reduce memory consumption, but the opposite is true as the TDS can be large for large files. + +Performance Results +------------------- +The benchmarking context was the same as for the brute-force GitDB algorithm. This implementation is far more complex than the said brute-force implementation, which clearly reflects in the numbers. It's pure-python throughput is at only 1.1 MiB/s, which equals 89 streams/s. +The biggest performance bottleneck is the slicing of the parsed delta streams, where the program spends most of its time due to hundred thousands of calls. + +To get a more usable version of the algorithm, it was implemented in C, such that python must do no more than two calls to get all the work done. The first prepares the TDS, the second applies it, writing it into a target buffer. +The throughput reaches 15.6 MiB/s, which equals 1267 streams/s, which makes it 14 times faster than the pure python version, and amazingly even 1.4 times faster than the brute-force C implementation. + +*TODO* +All this comes at a relatively high memory consumption, and heavily degrading performance with raising file sizes. A 125 MB file took 8 seconds to unpack for instance. The reason for this is the current implementation's brute-force algorithm to insert ADS slices into the TDS, which triggers an enormous amount of memmove operations of large portions of overlapping memory portions. + +Additionally, with each new level being merged, not only are more DCs inserted, but the new chunks may get smaller as well. This can reach a point where one chunk only represents an individual byte, so the size of the data structure outweighs the logical chunk size by far. + + +Future work +=========== +* Analyse TDS to determine which sections from base buffer need to be copied. Read these in order of lowest to highest offset from base stream, and copy them into a smaller memory map. Relink source offsets to point to the new location in the new buffer. +* recompress TDS into bytestream to minimize the memory footprint when streaming, allocate the stream into a memory map. + +With that in place, streaming becomes trivial. Memory consumption + + diff --git a/doc/source/index.rst b/doc/source/index.rst index d414cb22f..5223e6bd9 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -14,6 +14,7 @@ Contents: intro tutorial api + algorithm changes Indices and tables diff --git a/stream.py b/stream.py index f5e05e114..38c86dae7 100644 --- a/stream.py +++ b/stream.py @@ -379,6 +379,9 @@ def _set_cache_(self, attr): def _set_cache_brute_(self, attr): """If we are here, we apply the actual deltas""" + # TODO: There should be a special case if there is only one stream + # Then the default-git algorithm should perform a tad faster, as the + # delta is not peaked into, causing less overhead. buffer_info_list = list() max_target_size = 0 for dstream in self._dstreams: From 6656c66f7edcf746132ce52d9ed714283140eaa0 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 14 Oct 2010 20:39:20 +0200 Subject: [PATCH 0101/2375] Implemented simple pre-pass to count offsets to help calculate where each chunk is going to be. This way, memmove becomes memcpy, and only one grow is required --- _delta_apply.c | 189 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 129 insertions(+), 60 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index dfb0a94c3..76d482b0d 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -11,7 +11,7 @@ typedef unsigned char uchar; typedef uchar bool; // Constants -const ull gDVC_grow_by = 100; +const ull gDCV_grow_by = 100; #ifdef DEBUG #define DBG_check(vec) assert(DCV_dbg_check_integrity(vec)) @@ -170,8 +170,8 @@ int DCV_reserve_memory(DeltaChunkVector* vec, uint num_dc) return 1; } - if (num_dc - vec->reserved_size){ - num_dc += gDVC_grow_by; + if (num_dc - vec->reserved_size < 10){ + num_dc += gDCV_grow_by; } #ifdef DEBUG @@ -255,6 +255,12 @@ ull DCV_rbound(const DeltaChunkVector* vec) return DC_rbound(DCV_last(vec)); } +inline +ull DCV_size(const DeltaChunkVector* vec) +{ + return DCV_rbound(vec) - DCV_lbound(vec); +} + inline int DCV_empty(const DeltaChunkVector* vec) { @@ -269,6 +275,14 @@ const DeltaChunk* DCV_end(const DeltaChunkVector* vec) return vec->mem + vec->size; } +// return first item in vector +inline +DeltaChunk* DCV_first(const DeltaChunkVector* vec) +{ + assert(!DCV_empty(vec)); + return vec->mem; +} + void DCV_destroy(DeltaChunkVector* vec) { if (vec->mem){ @@ -306,7 +320,7 @@ void DCV_reset(DeltaChunkVector* vec) if (vec->size == 0) return; - DeltaChunk* dc = vec->mem; + DeltaChunk* dc = DCV_first(vec); const DeltaChunk* dcend = DCV_end(vec); for(;dc < dcend; dc++){ DC_destroy(dc); @@ -322,7 +336,7 @@ static inline DeltaChunk* DCV_append(DeltaChunkVector* vec) { if (vec->size + 1 > vec->reserved_size){ - DCV_grow_by(vec, gDVC_grow_by); + DCV_grow_by(vec, gDCV_grow_by); } DeltaChunk* next = vec->mem + vec->size; @@ -364,7 +378,7 @@ int DCV_dbg_check_integrity(const DeltaChunkVector* vec) if(DCV_empty(vec)){ return 0; } - const DeltaChunk* i = vec->mem; + const DeltaChunk* i = DCV_first(vec); const DeltaChunk* end = DCV_end(vec); ull aparent_size = DCV_rbound(vec) - DCV_lbound(vec); @@ -380,7 +394,7 @@ int DCV_dbg_check_integrity(const DeltaChunkVector* vec) } const DeltaChunk* endm1 = DCV_end(vec) - 1; - for(i = vec->mem; i < endm1; i++){ + for(i = DCV_first(vec); i < endm1; i++){ const DeltaChunk* n = i+1; if (DC_rbound(i) != n->to){ return 0; @@ -390,46 +404,82 @@ int DCV_dbg_check_integrity(const DeltaChunkVector* vec) return 1; } +// Return the amount of chunks a slice at the given spot would have +inline +uint DCV_count_slice_chunks(const DeltaChunkVector* src, ull ofs, ull size) +{ + uint num_dc = 0; + DeltaChunk* cdc = DCV_closest_chunk(src, ofs); + + // partial overlap + if (cdc->to != ofs) { + const ull relofs = ofs - cdc->to; + size -= cdc->ts - relofs < size ? cdc->ts - relofs : size; + num_dc += 1; + cdc += 1; + + if (size == 0){ + return num_dc; + } + } + + const DeltaChunk* vecend = DCV_end(src); + for( ;(cdc < vecend) && size; ++cdc){ + num_dc += 1; + if (cdc->ts < size) { + size -= cdc->ts; + } else { + size = 0; + break; + } + } + + return num_dc; +} + // Write a slice as defined by its absolute offset in bytes and its size into the given -// destination. The individual chunks written will be a deep copy of the source +// destination memory. The individual chunks written will be a deep copy of the source // data chunks -// TODO: this could trigger copying many smallish add-chunk pieces - maybe some sort -// of append-only memory pool would improve performance +// Return: number of chunks in the slice inline -void DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunkVector* dest, ull ofs, ull size) +uint DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunk* dest, ull ofs, ull size) { assert(DCV_lbound(src) <= ofs); assert((ofs + size) <= DCV_rbound(src)); DeltaChunk* cdc = DCV_closest_chunk(src, ofs); + uint num_chunks = 0; // partial overlap if (cdc->to != ofs) { - DeltaChunk* destc = DCV_append(dest); const ull relofs = ofs - cdc->to; - DC_offset_copy_to(cdc, destc, relofs, cdc->ts - relofs < size ? cdc->ts - relofs : size); + DC_offset_copy_to(cdc, dest, relofs, cdc->ts - relofs < size ? cdc->ts - relofs : size); cdc += 1; - size -= destc->ts; + size -= dest->ts; + dest += 1; + num_chunks += 1; if (size == 0){ - return; + return num_chunks; } } const DeltaChunk* vecend = DCV_end(src); for( ;(cdc < vecend) && size; ++cdc) { + num_chunks += 1; if (cdc->ts < size) { - DC_copy_to(cdc, DCV_append(dest)); + DC_copy_to(cdc, dest++); size -= cdc->ts; } else { - DC_offset_copy_to(cdc, DCV_append(dest), 0, size); + DC_offset_copy_to(cdc, dest++, 0, size); size = 0; break; } } assert(size == 0); + return num_chunks; } @@ -458,64 +508,85 @@ void DCV_replace_one_by_many(const DeltaChunkVector* from, DeltaChunkVector* to, } // Finally copy all the items in - memcpy((void*) at, (void*)from->mem, from->size*sizeof(DeltaChunk)); + memcpy((void*) at, (void*)DCV_first(from), from->size*sizeof(DeltaChunk)); // FINALLY: update size to->size += from->size - 1; } // Take slices of bdcv into the corresponding area of the tdcv, which is the topmost -// delta to apply. tmpl is used as temporary space and must be initialzed and destroyed by the -// caller -void DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv, DeltaChunkVector* tmpl) +// delta to apply. +bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv) { - Py_ssize_t dci = 0; - Py_ssize_t iend = tdcv->size; - DeltaChunk* dc; - DBG_check(tdcv); DBG_check(bdcv); - for (;dci < iend; dci++) + uint* offset_array = PyMem_Malloc(tdcv->size * sizeof(uint)); + if (!offset_array){ + return 0; + } + + fprintf(stderr, "old size = %i\n", (int)tdcv->size); + uint* pofs = offset_array; + uint num_addchunks = 0; + + DeltaChunk* dc = DCV_first(tdcv); + const DeltaChunk* dcend = DCV_end(tdcv); + const ull oldsize = DCV_size(tdcv); + + // OFFSET RUN + for (;dc < dcend; dc++, pofs++) { // Data chunks don't need processing - dc = DCV_get(tdcv, dci); + *pofs = num_addchunks; if (dc->data){ continue; } - // Copy Chunk Handling - DCV_copy_slice_to(bdcv, tmpl, dc->so, dc->ts); - DBG_check(tmpl); - assert(tmpl->size); - - // move target bounds - DeltaChunk* tdc = tmpl->mem; - DeltaChunk* tdcend = tmpl->mem + tmpl->size; - const ull ofs = dc->to - dc->so; - for(;tdc < tdcend; tdc++){ - tdc->to += ofs; + // offset the next chunk by the amount of chunks in the slice + // - 1, because we replace our own chunk + num_addchunks += DCV_count_slice_chunks(bdcv, dc->so, dc->ts) - 1; + } + + // reserve enough memory to hold all the new chunks + // reinit pointers, array could have been reallocated + DCV_reserve_memory(tdcv, tdcv->size + num_addchunks); + dc = DCV_last(tdcv); + dcend = DCV_first(tdcv) - 1; + + // now, that we have our pointers with the old size + tdcv->size += num_addchunks; + + // Insert slices, from the end to the beginning, which allows memcpy + // to be used, with a little help of the offset array + for (pofs -= 1; dc > dcend; dc--, pofs-- ) + { + // Data chunks don't need processing + const uint ofs = *pofs; + if (dc->data){ + // TODO: peak the preceeding chunks to figure out whether they are + // all just moved by ofs. In that case, they can move as a whole! + // just copy the chunk according to its offset + if (ofs){ + memcpy((void*)(dc + ofs), (void*)dc, sizeof(DeltaChunk)); + } + continue; } - // insert slice into our list - if (tmpl->size == 1){ - // Its not data, so destroy is not really required, anyhow ... - DC_destroy(dc); - *dc = *DCV_get(tmpl, 0); - } else { - DCV_reserve_memory(tdcv, tdcv->size + tmpl->size - 1 + gDVC_grow_by); - dc = DCV_get(tdcv, dci); - DCV_replace_one_by_many(tmpl, tdcv, dc); - // Compensate for us being replaced - dci += tmpl->size-1; - iend += tmpl->size-1; + // Copy Chunks, and move their target offset into place + DeltaChunk* tdc = dc + ofs; + DeltaChunk* tdcend = tdc + DCV_copy_slice_to(bdcv, tdc, dc->so, dc->ts); + const ull relofs = dc->to - dc->so; + for(;tdc < tdcend; tdc++){ + tdc->to += relofs; } - - DBG_check(tdcv); - - // make sure the members will not be deallocated by the list - DCV_forget_members(tmpl); } + + fprintf(stderr, "NEW size = %i\n", (int)tdcv->size); + DBG_check(tdcv); + assert(DCV_size(tdcv) == oldsize); + PyMem_Free(offset_array); + return 1; } // DELTA CHUNK LIST (PYTHON) @@ -699,10 +770,8 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) DeltaChunkVector dcv; DeltaChunkVector tdcv; - DeltaChunkVector tmpl; DCV_init(&dcv, 100); // should be enough to keep the average text file DCV_init(&tdcv, 0); - DCV_init(&tmpl, 200); unsigned int dsi = 0; PyObject* ds = 0; @@ -725,7 +794,6 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) const ull base_size = msb_size(&data, dend); const ull target_size = msb_size(&data, dend); - // estimate number of ops - assume one third adds, half two byte (size+offset) copies // Assume good compression for the adds const uint approx_num_cmds = ((dlen / 3) / 10) + (((dlen / 3) * 2) / (2+2+1)); DCV_reserve_memory(&dcv, approx_num_cmds); @@ -824,7 +892,9 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) } if (!is_first_run){ - DCV_connect_with_base(&tdcv, &dcv, &tmpl); + if (!DCV_connect_with_base(&tdcv, &dcv)){ + error = 1; + } } #ifdef DEBUG @@ -859,7 +929,6 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) Py_DECREF(stream_iter); } - DCV_destroy(&tmpl); if (dsi > 1){ // otherwise dcv equals tcl DCV_destroy(&dcv); From c03a46bea58d9b108cb314f9a1f0c422c05bb3bf Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 14 Oct 2010 21:07:21 +0200 Subject: [PATCH 0102/2375] Fixed tiny little bug that would cause our own chunk to be overridden before we make one last computation with its unaltered values --- _delta_apply.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index 76d482b0d..4cdb654f2 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -456,7 +456,7 @@ uint DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunk* dest, ull ofs, u DC_offset_copy_to(cdc, dest, relofs, cdc->ts - relofs < size ? cdc->ts - relofs : size); cdc += 1; size -= dest->ts; - dest += 1; + dest += 1; // must be here, we are reading the size ! num_chunks += 1; if (size == 0){ @@ -472,7 +472,7 @@ uint DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunk* dest, ull ofs, u DC_copy_to(cdc, dest++); size -= cdc->ts; } else { - DC_offset_copy_to(cdc, dest++, 0, size); + DC_offset_copy_to(cdc, dest, 0, size); size = 0; break; } @@ -526,7 +526,6 @@ bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv) return 0; } - fprintf(stderr, "old size = %i\n", (int)tdcv->size); uint* pofs = offset_array; uint num_addchunks = 0; @@ -574,17 +573,19 @@ bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv) } // Copy Chunks, and move their target offset into place + // As we could override dc when slicing, we get the data here + const ull relofs = dc->to - dc->so; + DeltaChunk* tdc = dc + ofs; DeltaChunk* tdcend = tdc + DCV_copy_slice_to(bdcv, tdc, dc->so, dc->ts); - const ull relofs = dc->to - dc->so; for(;tdc < tdcend; tdc++){ tdc->to += relofs; } } - fprintf(stderr, "NEW size = %i\n", (int)tdcv->size); DBG_check(tdcv); assert(DCV_size(tdcv) == oldsize); + PyMem_Free(offset_array); return 1; } From 65c9abfde0eae317c6c6dcf91918258e5e6ca33c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 14 Oct 2010 21:38:48 +0200 Subject: [PATCH 0103/2375] removed some debug code --- _delta_apply.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index 4cdb654f2..8cfb3f2e8 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -521,7 +521,7 @@ bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv) DBG_check(tdcv); DBG_check(bdcv); - uint* offset_array = PyMem_Malloc(tdcv->size * sizeof(uint)); + uint *const offset_array = PyMem_Malloc(tdcv->size * sizeof(uint)); if (!offset_array){ return 0; } @@ -531,7 +531,6 @@ bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv) DeltaChunk* dc = DCV_first(tdcv); const DeltaChunk* dcend = DCV_end(tdcv); - const ull oldsize = DCV_size(tdcv); // OFFSET RUN for (;dc < dcend; dc++, pofs++) @@ -563,9 +562,10 @@ bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv) // Data chunks don't need processing const uint ofs = *pofs; if (dc->data){ - // TODO: peak the preceeding chunks to figure out whether they are + // NOTE: could peek the preceeding chunks to figure out whether they are // all just moved by ofs. In that case, they can move as a whole! - // just copy the chunk according to its offset + // tests showed that this is very rare though, even in huge deltas, so its + // not worth the extra effort if (ofs){ memcpy((void*)(dc + ofs), (void*)dc, sizeof(DeltaChunk)); } @@ -584,7 +584,6 @@ bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv) } DBG_check(tdcv); - assert(DCV_size(tdcv) == oldsize); PyMem_Free(offset_array); return 1; From 78665b13ff4125f4ce3e5311d040c027bdc92a9a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 14 Oct 2010 22:59:19 +0200 Subject: [PATCH 0104/2375] Updated draft with latest data, finished it by defining future ways to improve the algorithm --- doc/source/algorithm.rst | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/doc/source/algorithm.rst b/doc/source/algorithm.rst index d1e4a9ba1..55207b67b 100644 --- a/doc/source/algorithm.rst +++ b/doc/source/algorithm.rst @@ -83,19 +83,17 @@ The benchmarking context was the same as for the brute-force GitDB algorithm. Th The biggest performance bottleneck is the slicing of the parsed delta streams, where the program spends most of its time due to hundred thousands of calls. To get a more usable version of the algorithm, it was implemented in C, such that python must do no more than two calls to get all the work done. The first prepares the TDS, the second applies it, writing it into a target buffer. -The throughput reaches 15.6 MiB/s, which equals 1267 streams/s, which makes it 14 times faster than the pure python version, and amazingly even 1.4 times faster than the brute-force C implementation. +The throughput reaches 16.7 MiB/s, which equals 1344 streams/s, which makes it 15 times faster than the pure python version, and amazingly even 1.5 times faster than the brute-force C implementation. As a comparison, cgit is able to stream about 20 MiB when controlling it through a pipe. GitDBs performance may still improve once pack access is reimplemented in C as well. -*TODO* -All this comes at a relatively high memory consumption, and heavily degrading performance with raising file sizes. A 125 MB file took 8 seconds to unpack for instance. The reason for this is the current implementation's brute-force algorithm to insert ADS slices into the TDS, which triggers an enormous amount of memmove operations of large portions of overlapping memory portions. +All this comes at a relatively high memory consumption.Additionally, with each new level being merged, not only are more DCs inserted, but the new chunks may get smaller as well. This can reach a point where one chunk only represents an individual byte, so the size of the data structure outweighs the logical chunk size by far. -Additionally, with each new level being merged, not only are more DCs inserted, but the new chunks may get smaller as well. This can reach a point where one chunk only represents an individual byte, so the size of the data structure outweighs the logical chunk size by far. +A 125 MB file took 3.1 seconds to unpack for instance, which is only 33% slower than the c implementation of the brute-force algorithm. Future work =========== -* Analyse TDS to determine which sections from base buffer need to be copied. Read these in order of lowest to highest offset from base stream, and copy them into a smaller memory map. Relink source offsets to point to the new location in the new buffer. -* recompress TDS into bytestream to minimize the memory footprint when streaming, allocate the stream into a memory map. - -With that in place, streaming becomes trivial. Memory consumption +The current implementation of the reverse delta aggregation algorithm is already working well and fast, but leaves room for improvement in the realm of its memory consumption. One way to considerably reduce it would be to index the delta stream to determine bounds, instead of parsing it into a separate data structure +Another very promising option is that streaming of delta data is indeed possible. Depending on the configuration of the copy-from-base operations, different optimizations could be applied to reduce the amount of memory required for the final processed delta stream. Some configurations may even allow it to stream data from the base buffer, instead of pre-loading it for random access. +The ability to stream files at reduced memory costs would only be feasible for big files, and would have to be payed with extra pre-processing time. From ffafb2e998220344f4674b25b6760254b2ec453e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 15 Oct 2010 16:04:17 +0200 Subject: [PATCH 0105/2375] First adjustment to prepare the algorithm to work on deltastreams directly, without an intermediate conversion into far-too-large DeltaChunks. The new style just uses a single index, using one-fourth of the memory --- _delta_apply.c | 329 ++++++++++++++----------------------------------- 1 file changed, 93 insertions(+), 236 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index 8cfb3f2e8..9768b5264 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -11,82 +11,38 @@ typedef unsigned char uchar; typedef uchar bool; // Constants -const ull gDCV_grow_by = 100; +const ull gDIV_grow_by = 100; + + +// DELTA INFO +///////////// +typedef struct { + uint dso; // delta stream offset + uint to; // target offset (cache) +} DeltaInfo; -#ifdef DEBUG -#define DBG_check(vec) assert(DCV_dbg_check_integrity(vec)) -#else -#define DBG_check(vec) -#endif // DELTA CHUNK //////////////// // Internal Delta Chunk Objects +// They are just used to keep information parsed from a stream +// The data pointer is always shared typedef struct { ull to; ull ts; ull so; const uchar* data; - bool data_shared; } DeltaChunk; inline -void DC_init(DeltaChunk* dc, ull to, ull ts, ull so) +void DC_init(DeltaChunk* dc, ull to, ull ts, ull so, const uchar* data) { dc->to = to; dc->ts = ts; dc->so = so; dc->data = NULL; - dc->data_shared = 0; -} - -inline -void DC_deallocate_data(DeltaChunk* dc) -{ - if (!dc->data_shared && dc->data){ - PyMem_Free((void*)dc->data); - } - dc->data = NULL; } -inline -void DC_destroy(DeltaChunk* dc) -{ - DC_deallocate_data(dc); -} - -// Store a copy of data in our instance. If shared is 1, the data will be shared, -// hence it will only be stored, but the memory will not be touched, or copied. -inline -void DC_set_data(DeltaChunk* dc, const uchar* data, Py_ssize_t dlen, bool shared) -{ - DC_deallocate_data(dc); - - if (data == 0){ - dc->data = NULL; - dc->data_shared = 0; - return; - } - - dc->data_shared = shared; - if (shared){ - dc->data = data; - } else { - dc->data = (uchar*)PyMem_Malloc(dlen); - memcpy((void*)dc->data, (void*)data, dlen); - } - -} - -// Make the given data our own. It is assumed to have the size stored in our instance -// and will be managed by us. -inline -void DC_set_data_with_ownership(DeltaChunk* dc, const uchar* data) -{ - assert(data); - DC_deallocate_data(dc); - dc->data = data; -} inline ull DC_rbound(const DeltaChunk* dc) @@ -94,7 +50,8 @@ ull DC_rbound(const DeltaChunk* dc) return dc->to + dc->ts; } -// Apply +// Apply +// TODO: remove, just left it for reference inline void DC_apply(const DeltaChunk* dc, const uchar* base, PyObject* writer, PyObject* tmpargs) { @@ -114,48 +71,16 @@ void DC_apply(const DeltaChunk* dc, const uchar* base, PyObject* writer, PyObjec } -// Copy all data from src to dest, the data pointer will be copied too -inline -void DC_copy_to(const DeltaChunk* src, DeltaChunk* dest) -{ - dest->to = src->to; - dest->ts = src->ts; - dest->so = src->so; - dest->data_shared = 0; - dest->data = NULL; - - DC_set_data(dest, src->data, src->ts, 0); -} - -// Copy all data with the given offset and size. The source offset, as well -// as the data will be truncated accordingly -inline -void DC_offset_copy_to(const DeltaChunk* src, DeltaChunk* dest, ull ofs, ull size) -{ - assert(size <= src->ts); - assert(src->to + ofs + size <= DC_rbound(src)); - - dest->to = src->to + ofs; - dest->ts = size; - dest->so = src->so + ofs; - dest->data = NULL; - - if (src->data){ - DC_set_data(dest, src->data + ofs, size, 0); - } else { - dest->data_shared = 0; - } -} - // DELTA CHUNK VECTOR ///////////////////// typedef struct { - DeltaChunk* mem; // Memory - Py_ssize_t size; // Size in DeltaChunks - Py_ssize_t reserved_size; // Reserve in DeltaChunks -} DeltaChunkVector; + DeltaInfo* mem; // Memory + const uchar* dstream; // pointer to delta stream we index + Py_ssize_t size; // Size in DeltaInfos + Py_ssize_t reserved_size; // Reserve in DeltaInfos +} DeltaInfoVector; @@ -164,14 +89,14 @@ typedef struct { // NOTE: added a minimum allocation to assure reallocation is not done // just for a single additional entry. DCVs change often, and reallocs are expensive inline -int DCV_reserve_memory(DeltaChunkVector* vec, uint num_dc) +int DIV_reserve_memory(DeltaInfoVector* vec, uint num_dc) { if (num_dc <= vec->reserved_size){ return 1; } if (num_dc - vec->reserved_size < 10){ - num_dc += gDCV_grow_by; + num_dc += gDIV_grow_by; } #ifdef DEBUG @@ -179,9 +104,9 @@ int DCV_reserve_memory(DeltaChunkVector* vec, uint num_dc) #endif if (vec->mem == NULL){ - vec->mem = PyMem_Malloc(num_dc * sizeof(DeltaChunk)); + vec->mem = PyMem_Malloc(num_dc * sizeof(DeltaInfo)); } else { - vec->mem = PyMem_Realloc(vec->mem, num_dc * sizeof(DeltaChunk)); + vec->mem = PyMem_Realloc(vec->mem, num_dc * sizeof(DeltaInfo)); } if (vec->mem == NULL){ @@ -194,7 +119,7 @@ int DCV_reserve_memory(DeltaChunkVector* vec, uint num_dc) const char* format = "Allocated %i bytes at %p, to hold up to %i chunks\n"; if (!was_null) format = "Re-allocated %i bytes at %p, to hold up to %i chunks\n"; - fprintf(stderr, format, (int)(vec->reserved_size * sizeof(DeltaChunk)), vec->mem, (int)vec->reserved_size); + fprintf(stderr, format, (int)(vec->reserved_size * sizeof(DeltaInfo)), vec->mem, (int)vec->reserved_size); #endif return vec->mem != NULL; @@ -207,28 +132,28 @@ large enough. Return 1 on success, 0 on failure */ inline -int DCV_grow_by(DeltaChunkVector* vec, uint num_dc) +int DIV_grow_by(DeltaInfoVector* vec, uint num_dc) { - return DCV_reserve_memory(vec, vec->reserved_size + num_dc); + return DIV_reserve_memory(vec, vec->reserved_size + num_dc); } -int DCV_init(DeltaChunkVector* vec, ull initial_size) +int DIV_init(DeltaInfoVector* vec, ull initial_size) { vec->mem = NULL; vec->size = 0; vec->reserved_size = 0; - return DCV_grow_by(vec, initial_size); + return DIV_grow_by(vec, initial_size); } inline -ull DCV_len(const DeltaChunkVector* vec) +ull DIV_len(const DeltaInfoVector* vec) { return vec->size; } inline -ull DCV_lbound(const DeltaChunkVector* vec) +ull DIV_lbound(const DeltaInfoVector* vec) { assert(vec->size && vec->mem); return vec->mem->to; @@ -236,7 +161,7 @@ ull DCV_lbound(const DeltaChunkVector* vec) // Return item at index inline -DeltaChunk* DCV_get(const DeltaChunkVector* vec, Py_ssize_t i) +DeltaInfo* DIV_get(const DeltaInfoVector* vec, Py_ssize_t i) { assert(i < vec->size && vec->mem); return &vec->mem[i]; @@ -244,54 +169,54 @@ DeltaChunk* DCV_get(const DeltaChunkVector* vec, Py_ssize_t i) // Return last item inline -DeltaChunk* DCV_last(const DeltaChunkVector* vec) +DeltaInfo* DIV_last(const DeltaInfoVector* vec) { - return DCV_get(vec, vec->size-1); + return DIV_get(vec, vec->size-1); } inline -ull DCV_rbound(const DeltaChunkVector* vec) +ull DIV_rbound(const DeltaInfoVector* vec) { - return DC_rbound(DCV_last(vec)); + return DC_rbound(DIV_last(vec)); } inline -ull DCV_size(const DeltaChunkVector* vec) +ull DIV_size(const DeltaInfoVector* vec) { - return DCV_rbound(vec) - DCV_lbound(vec); + return DIV_rbound(vec) - DIV_lbound(vec); } inline -int DCV_empty(const DeltaChunkVector* vec) +int DIV_empty(const DeltaInfoVector* vec) { return vec->size == 0; } // Return end pointer of the vector inline -const DeltaChunk* DCV_end(const DeltaChunkVector* vec) +const DeltaInfo* DIV_end(const DeltaInfoVector* vec) { - assert(!DCV_empty(vec)); + assert(!DIV_empty(vec)); return vec->mem + vec->size; } // return first item in vector inline -DeltaChunk* DCV_first(const DeltaChunkVector* vec) +DeltaInfo* DIV_first(const DeltaInfoVector* vec) { - assert(!DCV_empty(vec)); + assert(!DIV_empty(vec)); return vec->mem; } -void DCV_destroy(DeltaChunkVector* vec) +void DIV_destroy(DeltaInfoVector* vec) { if (vec->mem){ #ifdef DEBUG fprintf(stderr, "Freeing %p\n", (void*)vec->mem); #endif - const DeltaChunk* end = &vec->mem[vec->size]; - DeltaChunk* i; + const DeltaInfo* end = &vec->mem[vec->size]; + DeltaInfo* i; for(i = vec->mem; i < end; i++){ DC_destroy(i); } @@ -306,7 +231,7 @@ void DCV_destroy(DeltaChunkVector* vec) // Reset this vector so that its existing memory can be filled again. // Memory will be kept, but not cleaned up inline -void DCV_forget_members(DeltaChunkVector* vec) +void DIV_forget_members(DeltaInfoVector* vec) { vec->size = 0; } @@ -315,13 +240,13 @@ void DCV_forget_members(DeltaChunkVector* vec) // have been deallocated properly. // It will keep its memory though, and hence can be filled again inline -void DCV_reset(DeltaChunkVector* vec) +void DIV_reset(DeltaInfoVector* vec) { if (vec->size == 0) return; - DeltaChunk* dc = DCV_first(vec); - const DeltaChunk* dcend = DCV_end(vec); + DeltaInfo* dc = DIV_first(vec); + const DeltaInfo* dcend = DIV_end(vec); for(;dc < dcend; dc++){ DC_destroy(dc); } @@ -333,27 +258,27 @@ void DCV_reset(DeltaChunkVector* vec) // Append one chunk to the end of the list, and return a pointer to it // It will not have been initialized ! static inline -DeltaChunk* DCV_append(DeltaChunkVector* vec) +DeltaInfo* DIV_append(DeltaInfoVector* vec) { if (vec->size + 1 > vec->reserved_size){ - DCV_grow_by(vec, gDCV_grow_by); + DIV_grow_by(vec, gDIV_grow_by); } - DeltaChunk* next = vec->mem + vec->size; + DeltaInfo* next = vec->mem + vec->size; vec->size += 1; return next; } // Return delta chunk being closest to the given absolute offset inline -DeltaChunk* DCV_closest_chunk(const DeltaChunkVector* vec, ull ofs) +DeltaInfo* DIV_closest_chunk(const DeltaInfoVector* vec, ull ofs) { assert(vec->mem); ull lo = 0; ull hi = vec->size; ull mid; - DeltaChunk* dc; + DeltaInfo* dc; while (lo < hi) { @@ -368,48 +293,16 @@ DeltaChunk* DCV_closest_chunk(const DeltaChunkVector* vec, ull ofs) } } - return DCV_last(vec); + return DIV_last(vec); } -// Assert the given vector has correct datachunks -// return 1 on success -int DCV_dbg_check_integrity(const DeltaChunkVector* vec) -{ - if(DCV_empty(vec)){ - return 0; - } - const DeltaChunk* i = DCV_first(vec); - const DeltaChunk* end = DCV_end(vec); - - ull aparent_size = DCV_rbound(vec) - DCV_lbound(vec); - ull acc_size = 0; - for(; i < end; i++){ - acc_size += i->ts; - } - if (acc_size != aparent_size) - return 0; - - if (vec->size < 2){ - return 1; - } - - const DeltaChunk* endm1 = DCV_end(vec) - 1; - for(i = DCV_first(vec); i < endm1; i++){ - const DeltaChunk* n = i+1; - if (DC_rbound(i) != n->to){ - return 0; - } - } - - return 1; -} // Return the amount of chunks a slice at the given spot would have inline -uint DCV_count_slice_chunks(const DeltaChunkVector* src, ull ofs, ull size) +uint DIV_count_slice_chunks(const DeltaInfoVector* src, ull ofs, ull size) { uint num_dc = 0; - DeltaChunk* cdc = DCV_closest_chunk(src, ofs); + DeltaInfo* cdc = DIV_closest_chunk(src, ofs); // partial overlap if (cdc->to != ofs) { @@ -423,7 +316,7 @@ uint DCV_count_slice_chunks(const DeltaChunkVector* src, ull ofs, ull size) } } - const DeltaChunk* vecend = DCV_end(src); + const DeltaInfo* vecend = DIV_end(src); for( ;(cdc < vecend) && size; ++cdc){ num_dc += 1; if (cdc->ts < size) { @@ -442,12 +335,12 @@ uint DCV_count_slice_chunks(const DeltaChunkVector* src, ull ofs, ull size) // data chunks // Return: number of chunks in the slice inline -uint DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunk* dest, ull ofs, ull size) +uint DIV_copy_slice_to(const DeltaInfoVector* src, DeltaInfo* dest, ull ofs, ull size) { - assert(DCV_lbound(src) <= ofs); - assert((ofs + size) <= DCV_rbound(src)); + assert(DIV_lbound(src) <= ofs); + assert((ofs + size) <= DIV_rbound(src)); - DeltaChunk* cdc = DCV_closest_chunk(src, ofs); + DeltaInfo* cdc = DIV_closest_chunk(src, ofs); uint num_chunks = 0; // partial overlap @@ -464,7 +357,7 @@ uint DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunk* dest, ull ofs, u } } - const DeltaChunk* vecend = DCV_end(src); + const DeltaInfo* vecend = DIV_end(src); for( ;(cdc < vecend) && size; ++cdc) { num_chunks += 1; @@ -483,44 +376,10 @@ uint DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunk* dest, ull ofs, u } -// Insert all chunks in 'from' to 'to', starting at the delta chunk named 'at' which -// originates in to -// 'at' will be replaced by the items to insert ( special purpose ) -// 'at' will be properly destroyed, but all items will just be copied bytewise -// using memcpy. Hence from must just forget about them ! -// IMPORTANT: to must have an appropriate size already -inline -void DCV_replace_one_by_many(const DeltaChunkVector* from, DeltaChunkVector* to, DeltaChunk* at) -{ - assert(from->size > 1); - assert(to->size + from->size - 1 <= to->reserved_size); - - // -1 because we replace 'at' - DC_destroy(at); - - // If we are somewhere in the middle, we have to make some space - if (DCV_last(to) != at) { - // IMPORTANT: This memmove kills the performance in case of large deltas - // Causing everything to slow down enormously. Its logical, as the memory - // gets shifted each time we insert nodes, for each chunk, for ever smaller - // chunks depending on the deltas - memmove((void*)(at+from->size), (void*)(at+1), (size_t)((DCV_end(to) - (at+1)) * sizeof(DeltaChunk))); - } - - // Finally copy all the items in - memcpy((void*) at, (void*)DCV_first(from), from->size*sizeof(DeltaChunk)); - - // FINALLY: update size - to->size += from->size - 1; -} - // Take slices of bdcv into the corresponding area of the tdcv, which is the topmost // delta to apply. -bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv) +bool DIV_connect_with_base(DeltaInfoVector* tdcv, const DeltaInfoVector* bdcv) { - DBG_check(tdcv); - DBG_check(bdcv); - uint *const offset_array = PyMem_Malloc(tdcv->size * sizeof(uint)); if (!offset_array){ return 0; @@ -529,8 +388,8 @@ bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv) uint* pofs = offset_array; uint num_addchunks = 0; - DeltaChunk* dc = DCV_first(tdcv); - const DeltaChunk* dcend = DCV_end(tdcv); + DeltaInfo* dc = DIV_first(tdcv); + const DeltaInfo* dcend = DIV_end(tdcv); // OFFSET RUN for (;dc < dcend; dc++, pofs++) @@ -543,14 +402,14 @@ bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv) // offset the next chunk by the amount of chunks in the slice // - 1, because we replace our own chunk - num_addchunks += DCV_count_slice_chunks(bdcv, dc->so, dc->ts) - 1; + num_addchunks += DIV_count_slice_chunks(bdcv, dc->so, dc->ts) - 1; } // reserve enough memory to hold all the new chunks // reinit pointers, array could have been reallocated - DCV_reserve_memory(tdcv, tdcv->size + num_addchunks); - dc = DCV_last(tdcv); - dcend = DCV_first(tdcv) - 1; + DIV_reserve_memory(tdcv, tdcv->size + num_addchunks); + dc = DIV_last(tdcv); + dcend = DIV_first(tdcv) - 1; // now, that we have our pointers with the old size tdcv->size += num_addchunks; @@ -567,7 +426,7 @@ bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv) // tests showed that this is very rare though, even in huge deltas, so its // not worth the extra effort if (ofs){ - memcpy((void*)(dc + ofs), (void*)dc, sizeof(DeltaChunk)); + memcpy((void*)(dc + ofs), (void*)dc, sizeof(DeltaInfo)); } continue; } @@ -576,26 +435,24 @@ bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv) // As we could override dc when slicing, we get the data here const ull relofs = dc->to - dc->so; - DeltaChunk* tdc = dc + ofs; - DeltaChunk* tdcend = tdc + DCV_copy_slice_to(bdcv, tdc, dc->so, dc->ts); + DeltaInfo* tdc = dc + ofs; + DeltaInfo* tdcend = tdc + DIV_copy_slice_to(bdcv, tdc, dc->so, dc->ts); for(;tdc < tdcend; tdc++){ tdc->to += relofs; } } - DBG_check(tdcv); - PyMem_Free(offset_array); return 1; } // DELTA CHUNK LIST (PYTHON) ///////////////////////////// - +// Internally, it has nothing to do with a ChunkList anymore though typedef struct { PyObject_HEAD // ----------- - DeltaChunkVector vec; + DeltaInfoVector vec; } DeltaChunkList; @@ -608,28 +465,28 @@ int DCL_init(DeltaChunkList*self, PyObject *args, PyObject *kwds) return -1; } - DCV_init(&self->vec, 0); + DIV_init(&self->vec, 0); return 0; } static void DCL_dealloc(DeltaChunkList* self) { - DCV_destroy(&(self->vec)); + DIV_destroy(&(self->vec)); } static PyObject* DCL_len(DeltaChunkList* self) { - return PyLong_FromUnsignedLongLong(DCV_len(&self->vec)); + return PyLong_FromUnsignedLongLong(DIV_len(&self->vec)); } static inline ull DCL_rbound(DeltaChunkList* self) { - if (DCV_empty(&self->vec)) + if (DIV_empty(&self->vec)) return 0; - return DCV_rbound(&self->vec); + return DIV_rbound(&self->vec); } static @@ -660,7 +517,7 @@ PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) } const DeltaChunk* i = self->vec.mem; - const DeltaChunk* end = DCV_end(&self->vec); + const DeltaChunk* end = DIV_end(&self->vec); const uchar* data; Py_ssize_t dlen; @@ -768,10 +625,10 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) stream_iter = dstreams; } - DeltaChunkVector dcv; - DeltaChunkVector tdcv; - DCV_init(&dcv, 100); // should be enough to keep the average text file - DCV_init(&tdcv, 0); + DeltaInfoVector dcv; + DeltaInfoVector tdcv; + DIV_init(&dcv, 100); // should be enough to keep the average text file + DIV_init(&tdcv, 0); unsigned int dsi = 0; PyObject* ds = 0; @@ -796,7 +653,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) // Assume good compression for the adds const uint approx_num_cmds = ((dlen / 3) / 10) + (((dlen / 3) * 2) / (2+2+1)); - DCV_reserve_memory(&dcv, approx_num_cmds); + DIV_reserve_memory(&dcv, approx_num_cmds); // parse command stream ull tbw = 0; // Amount of target bytes written @@ -829,7 +686,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) break; } - DC_init(DCV_append(&dcv), tbw, cp_size, cp_off); + DC_init(DIV_append(&dcv), tbw, cp_size, cp_off); tbw += cp_size; } else if (cmd) { @@ -862,7 +719,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) } #endif - DeltaChunk* dc = DCV_append(&dcv); + DeltaChunk* dc = DIV_append(&dcv); DC_init(dc, tbw, num_bytes, 0); // gather the data, or (possibly) share single blocks @@ -892,7 +749,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) } if (!is_first_run){ - if (!DCV_connect_with_base(&tdcv, &dcv)){ + if (!DIV_connect_with_base(&tdcv, &dcv)){ error = 1; } } @@ -905,10 +762,10 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) if (is_first_run){ tdcv = dcv; // wipe out dcv without destroying the members, get its own memory - DCV_init(&dcv, tdcv.size); + DIV_init(&dcv, tdcv.size); } else { // destroy members, but keep memory - DCV_reset(&dcv); + DIV_reset(&dcv); } loop_end: @@ -931,7 +788,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) if (dsi > 1){ // otherwise dcv equals tcl - DCV_destroy(&dcv); + DIV_destroy(&dcv); } // Return the actual python object - its just a container @@ -939,7 +796,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) if (!dcl){ PyErr_SetString(PyExc_RuntimeError, "Couldn't allocate list"); // Otherwise tdcv would be deallocated by the chunk list - DCV_destroy(&tdcv); + DIV_destroy(&tdcv); error = 1; } else { // Plain copy, don't deallocate From 29fe629dfc11103398f97f0886d79a6f59deeb75 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 15 Oct 2010 18:37:52 +0200 Subject: [PATCH 0106/2375] Intermediate commit, working my way through the code, step by step. Didn't even try to compile it yet --- _delta_apply.c | 183 +++++++++++++++++++++++++++++++++++++------------ stream.py | 13 +--- 2 files changed, 144 insertions(+), 52 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index 9768b5264..bd09bc5ed 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -14,6 +14,24 @@ typedef uchar bool; const ull gDIV_grow_by = 100; +// DELTA STREAM ACCESS +/////////////////////// +inline +ull msb_size(const uchar** datap, const uchar* top) +{ + const uchar *data = *datap; + ull cmd, size = 0; + uint i = 0; + do { + cmd = *data++; + size |= (cmd & 0x7f) << i; + i += 7; + } while (cmd & 0x80 && data < top); + *datap = data; + return size; +} + + // DELTA INFO ///////////// typedef struct { @@ -22,6 +40,65 @@ typedef struct { } DeltaInfo; +// TOP LEVEL STREAM INFO +///////////////////////////// +typedef struct { + const uchar* tds; + Py_ssize_t* tdslen; + Py_ssize_t target_size; // size of the target buffer which can hold all data + PyObject* parent_object; +} ToplevelStreamInfo; + + +void TSI_init(ToplevelStreamInfo* info) +{ + info->tds = 0; + info->tdslen = 0; + info->target_size = 0; + info->parent_object = 0; + +} + +void TSI_destroy(ToplevelStreamInfo* info) +{ + if (info->parent_object){ + Py_DECREF(info->parent_object); + info->parent_object = 0; + } else if (info->tds){ + PyMem_Free(info->tds); + } +} + +// initialize our set stream to point to the first chunk +// Fill in the header information, which is the base and target size +void TSI_init_stream(ToplevelStreamInfo* info) +{ + assert(info->tds && info->tdslen) + + // init stream + const uchar* tdsend = info->tds + info->tdslen; + msb_size(&info->tds, tdsend); + info->target_size = msb_size(&info->tds, tdsend); +} + +// duplicate the data currently owned by the parent object drop its refcount +// return 1 on success +bool TSI_copy_stream_from_object(ToplevelStreamInfo* info) +{ + assert(info.parent_object); + + uchar* ptmp = PyMem_Malloc(info.tdslen); + if (!ptmp){ + return 0; + } + memcpy((void*)ptmp, info.tds, info.tdslen); + tds = ptmp; + Py_DECREF(info.parent_object); + info.parent_object = 0; + + return 1; +} + // DELTA CHUNK //////////////// // Internal Delta Chunk Objects @@ -452,7 +529,7 @@ bool DIV_connect_with_base(DeltaInfoVector* tdcv, const DeltaInfoVector* bdcv) typedef struct { PyObject_HEAD // ----------- - DeltaInfoVector vec; + ToplevelStreamInfo istream; } DeltaChunkList; @@ -465,34 +542,20 @@ int DCL_init(DeltaChunkList*self, PyObject *args, PyObject *kwds) return -1; } - DIV_init(&self->vec, 0); + TSI_init(&self->istream, 0); return 0; } static void DCL_dealloc(DeltaChunkList* self) { - DIV_destroy(&(self->vec)); -} - -static -PyObject* DCL_len(DeltaChunkList* self) -{ - return PyLong_FromUnsignedLongLong(DIV_len(&self->vec)); -} - -static inline -ull DCL_rbound(DeltaChunkList* self) -{ - if (DIV_empty(&self->vec)) - return 0; - return DIV_rbound(&self->vec); + TSI_destroy(&(self->istream)); } static PyObject* DCL_py_rbound(DeltaChunkList* self) { - return PyLong_FromUnsignedLongLong(DCL_rbound(self)); + return PyLong_FromUnsignedLongLong(self->istream->target_size); } // Write using a write function, taking remaining bytes from a base buffer @@ -535,7 +598,6 @@ PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) static PyMethodDef DCL_methods[] = { {"apply", (PyCFunction)DCL_apply, METH_VARARGS, "Apply the given iterable of delta streams" }, - {"__len__", (PyCFunction)DCL_len, METH_NOARGS, NULL}, {"rbound", (PyCFunction)DCL_py_rbound, METH_NOARGS, NULL}, {NULL} /* Sentinel */ }; @@ -596,21 +658,6 @@ DeltaChunkList* DCL_new_instance(void) return dcl; } -inline -ull msb_size(const uchar** datap, const uchar* top) -{ - const uchar *data = *datap; - ull cmd, size = 0; - uint i = 0; - do { - cmd = *data++; - size |= (cmd & 0x7f) << i; - i += 7; - } while (cmd & 0x80 && data < top); - *datap = data; - return size; -} - static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) { // obtain iterator @@ -626,22 +673,71 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) } DeltaInfoVector dcv; - DeltaInfoVector tdcv; + ToplevelStreamInfo tdsinfo; + TSI_init(&tdsinfo); DIV_init(&dcv, 100); // should be enough to keep the average text file - DIV_init(&tdcv, 0); - unsigned int dsi = 0; - PyObject* ds = 0; + + // GET TOPLEVEL DELTA STREAM int error = 0; - for (ds = PyIter_Next(stream_iter), dsi = 0; ds != NULL; ++dsi, ds = PyIter_Next(stream_iter)) + PyObject* ds = 0; + unsigned int dsi = 0; + ds = PyIter_Next(stream_iter); + if (!ds){ + error = 1; + goto _error; + } + + dsi += 1; + tdsinfo.parent_object = PyObject_CallMethod(ds, "read", 0); + if (!PyObject_CheckReadBuffer(tdsinfo.parent_object)){ + Py_DECREF(ds); + error = 1; + goto _error; + } + + PyObject_AsReadBuffer(tdsinfo.parent_object, (const void**)&tdsinfo.tds, &tdsinfo.tdslen); + if (tdslen > pow(2, 32)){ + // parent object is deallocated by info structure + Py_DECREF(ds); + PyErr_SetString(PyExc_RuntimeError("Cannot handle deltas larger than 4GB")); + tdsinfo.tdb = 0; + + error = 1; + goto _error; + } + Py_DECREF(ds); + + // INTEGRATE ANCESTOR DELTA STREAMS + PyObject* db = 0; + TSI_init_stream(&tdsinfo, tdb); + + + for (ds = PyIter_Next(stream_iter); ds != NULL; ++dsi, ds = PyIter_Next(stream_iter)) { - PyObject* db = PyObject_CallMethod(ds, "read", 0); + // Its important to initialize this before the next block which can jump + // to code who needs this to exist ! + PyObject* db = 0; + + // When processing the first delta, we know we will have to alter the tds + // Hence we copy it and deallocate the parent object + if (ds == 1) { + if (!TSI_copy_stream_from_object(&tdsinfo)){ + PyErr_SetString(PyExc_RuntimeError, "Could not allocate memory to copy toplevel buffer"); + // info structure takes care of the parent_object + error = 1; + goto loop_end; + } + } + + db = PyObject_CallMethod(ds, "read", 0); if (!PyObject_CheckReadBuffer(db)){ error = 1; PyErr_SetString(PyExc_RuntimeError, "Returned buffer didn't support the buffer protocol"); goto loop_end; } + // Fill the stream info structure const uchar* data; Py_ssize_t dlen; PyObject_AsReadBuffer(db, (const void**)&data, &dlen); @@ -778,10 +874,13 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) } }// END for each stream object - if (dsi == 0 && ! error){ + if (dsi == 0){ PyErr_SetString(PyExc_ValueError, "No streams provided"); } + +_error: + if (stream_iter != dstreams){ Py_DECREF(stream_iter); } @@ -800,7 +899,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) error = 1; } else { // Plain copy, don't deallocate - dcl->vec = tdcv; + dcl->istream = tdsinfo; } if (error){ diff --git a/stream.py b/stream.py index 38c86dae7..0d8972898 100644 --- a/stream.py +++ b/stream.py @@ -349,7 +349,7 @@ def _set_cache_too_slow_without_c(self, attr): # call len directly, as the (optional) c version doesn't implement the sequence # protocol - if dcl.__len__() == 0: + if dcl.rbound() == 0: self._size = 0 self._mm_target = allocate_memory(0) return @@ -367,15 +367,6 @@ def _set_cache_too_slow_without_c(self, attr): self._mm_target.seek(0) - def _set_cache_(self, attr): - """Determine which version to use depending on the configuration of the deltas - :note: we are only called if we have the performance module""" - # otherwise it depends on the amount of memory to shift around - if len(self._dstreams) > 1 and self._bstream.size < 150000: - return self._set_cache_too_slow_without_c(attr) - else: - return self._set_cache_brute_(attr) - def _set_cache_brute_(self, attr): """If we are here, we apply the actual deltas""" @@ -456,6 +447,8 @@ def _set_cache_brute_(self, attr): #{ Configuration if not has_perf_mod: _set_cache_ = _set_cache_brute_ + else: + _set_cache_ = _set_cache_too_slow_without_c #} END configuration From 2414fd48969bf5bff510c8ded83edd7b4900626b Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 17 Oct 2010 21:06:17 +0200 Subject: [PATCH 0107/2375] Brutally made code compile, most of the major functions are still commented out, but it should just be a matter of time until its back and working --- _delta_apply.c | 324 ++++++++++++++++++++++--------------------------- 1 file changed, 142 insertions(+), 182 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index bd09bc5ed..abeaed5f1 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -32,31 +32,24 @@ ull msb_size(const uchar** datap, const uchar* top) } -// DELTA INFO -///////////// -typedef struct { - uint dso; // delta stream offset - uint to; // target offset (cache) -} DeltaInfo; - - // TOP LEVEL STREAM INFO ///////////////////////////// typedef struct { - const uchar* tds; - Py_ssize_t* tdslen; - Py_ssize_t target_size; // size of the target buffer which can hold all data - PyObject* parent_object; + const uchar *tds; + Py_ssize_t tdslen; // size of tds in bytes + Py_ssize_t target_size; // size of the target buffer which can hold all data + uint numChunks; // amount of chunks in the delta stream + PyObject *parent_object; } ToplevelStreamInfo; void TSI_init(ToplevelStreamInfo* info) { - info->tds = 0; + info->tds = NULL; info->tdslen = 0; + info->numChunks = 0; info->target_size = 0; info->parent_object = 0; - } void TSI_destroy(ToplevelStreamInfo* info) @@ -65,7 +58,7 @@ void TSI_destroy(ToplevelStreamInfo* info) Py_DECREF(info->parent_object); info->parent_object = 0; } else if (info->tds){ - PyMem_Free(info->tds); + PyMem_Free((void*)info->tds); } } @@ -73,7 +66,7 @@ void TSI_destroy(ToplevelStreamInfo* info) // Fill in the header information, which is the base and target size void TSI_init_stream(ToplevelStreamInfo* info) { - assert(info->tds && info->tdslen) + assert(info->tds && info->tdslen); // init stream const uchar* tdsend = info->tds + info->tdslen; @@ -85,16 +78,16 @@ void TSI_init_stream(ToplevelStreamInfo* info) // return 1 on success bool TSI_copy_stream_from_object(ToplevelStreamInfo* info) { - assert(info.parent_object); + assert(info->parent_object); - uchar* ptmp = PyMem_Malloc(info.tdslen); + uchar* ptmp = PyMem_Malloc(info->tdslen); if (!ptmp){ return 0; } - memcpy((void*)ptmp, info.tds, info.tdslen); - tds = ptmp; - Py_DECREF(info.parent_object); - info.parent_object = 0; + memcpy((void*)ptmp, info->tds, info->tdslen); + info->tds = ptmp; + Py_DECREF(info->parent_object); + info->parent_object = 0; return 1; } @@ -152,11 +145,21 @@ void DC_apply(const DeltaChunk* dc, const uchar* base, PyObject* writer, PyObjec // DELTA CHUNK VECTOR ///////////////////// + +// DELTA INFO +///////////// +typedef struct { + uint dso; // delta stream offset + uint to; // target offset (cache) +} DeltaInfo; + + typedef struct { - DeltaInfo* mem; // Memory - const uchar* dstream; // pointer to delta stream we index - Py_ssize_t size; // Size in DeltaInfos - Py_ssize_t reserved_size; // Reserve in DeltaInfos + DeltaInfo *mem; // Memory + uint di_last_size; // size of the last element - we can't compute it using the next bound + const uchar *dstream; // pointer to delta stream we index - its borrowed + Py_ssize_t size; // Amount of DeltaInfos + Py_ssize_t reserved_size; // Reserved amount of DeltaInfos } DeltaInfoVector; @@ -164,7 +167,7 @@ typedef struct { // Reserve enough memory to hold the given amount of delta chunks // Return 1 on success // NOTE: added a minimum allocation to assure reallocation is not done -// just for a single additional entry. DCVs change often, and reallocs are expensive +// just for a single additional entry. DIVs change often, and reallocs are expensive inline int DIV_reserve_memory(DeltaInfoVector* vec, uint num_dc) { @@ -219,18 +222,19 @@ int DIV_init(DeltaInfoVector* vec, ull initial_size) vec->mem = NULL; vec->size = 0; vec->reserved_size = 0; + vec->di_last_size = 0; return DIV_grow_by(vec, initial_size); } inline -ull DIV_len(const DeltaInfoVector* vec) +Py_ssize_t DIV_len(const DeltaInfoVector* vec) { return vec->size; } inline -ull DIV_lbound(const DeltaInfoVector* vec) +uint DIV_lbound(const DeltaInfoVector* vec) { assert(vec->size && vec->mem); return vec->mem->to; @@ -251,18 +255,6 @@ DeltaInfo* DIV_last(const DeltaInfoVector* vec) return DIV_get(vec, vec->size-1); } -inline -ull DIV_rbound(const DeltaInfoVector* vec) -{ - return DC_rbound(DIV_last(vec)); -} - -inline -ull DIV_size(const DeltaInfoVector* vec) -{ - return DIV_rbound(vec) - DIV_lbound(vec); -} - inline int DIV_empty(const DeltaInfoVector* vec) { @@ -285,19 +277,24 @@ DeltaInfo* DIV_first(const DeltaInfoVector* vec) return vec->mem; } +// return rbound offset in bytes. We use information contained in the +// vec to do that +inline +uint DIV_info_rbound(const DeltaInfoVector* vec, const DeltaInfo* di) +{ + if (DIV_last(vec) == di){ + return di->to + vec->di_last_size; + } else { + return (di+1)->to; + } +} + void DIV_destroy(DeltaInfoVector* vec) { if (vec->mem){ #ifdef DEBUG fprintf(stderr, "Freeing %p\n", (void*)vec->mem); #endif - - const DeltaInfo* end = &vec->mem[vec->size]; - DeltaInfo* i; - for(i = vec->mem; i < end; i++){ - DC_destroy(i); - } - PyMem_Free(vec->mem); vec->size = 0; vec->reserved_size = 0; @@ -313,21 +310,13 @@ void DIV_forget_members(DeltaInfoVector* vec) vec->size = 0; } -// Reset the vector so that its size will be zero, and its members will -// have been deallocated properly. +// Reset the vector so that its size will be zero // It will keep its memory though, and hence can be filled again inline void DIV_reset(DeltaInfoVector* vec) { if (vec->size == 0) return; - - DeltaInfo* dc = DIV_first(vec); - const DeltaInfo* dcend = DIV_end(vec); - for(;dc < dcend; dc++){ - DC_destroy(dc); - } - vec->size = 0; } @@ -363,7 +352,7 @@ DeltaInfo* DIV_closest_chunk(const DeltaInfoVector* vec, ull ofs) dc = vec->mem + mid; if (dc->to > ofs){ hi = mid; - } else if ((DC_rbound(dc) > ofs) | (dc->to == ofs)) { + } else if ((DIV_info_rbound(vec, dc) > ofs) | (dc->to == ofs)) { return dc; } else { lo = mid + 1; @@ -378,7 +367,7 @@ DeltaInfo* DIV_closest_chunk(const DeltaInfoVector* vec, ull ofs) inline uint DIV_count_slice_chunks(const DeltaInfoVector* src, ull ofs, ull size) { - uint num_dc = 0; + /*uint num_dc = 0; DeltaInfo* cdc = DIV_closest_chunk(src, ofs); // partial overlap @@ -404,7 +393,9 @@ uint DIV_count_slice_chunks(const DeltaInfoVector* src, ull ofs, ull size) } } - return num_dc; + return num_dc;*/ + assert(0); // TODO + return 0; } // Write a slice as defined by its absolute offset in bytes and its size into the given @@ -414,8 +405,9 @@ uint DIV_count_slice_chunks(const DeltaInfoVector* src, ull ofs, ull size) inline uint DIV_copy_slice_to(const DeltaInfoVector* src, DeltaInfo* dest, ull ofs, ull size) { + /* assert(DIV_lbound(src) <= ofs); - assert((ofs + size) <= DIV_rbound(src)); + assert((ofs + size) <= DIV_last(src)->to + src->di_last_size); DeltaInfo* cdc = DIV_closest_chunk(src, ofs); uint num_chunks = 0; @@ -450,13 +442,17 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, DeltaInfo* dest, ull ofs, ull assert(size == 0); return num_chunks; + */ + assert(0); // TODO + return 0; } -// Take slices of bdcv into the corresponding area of the tdcv, which is the topmost -// delta to apply. -bool DIV_connect_with_base(DeltaInfoVector* tdcv, const DeltaInfoVector* bdcv) +// Take slices of div into the corresponding area of the tsi, which is the topmost +// delta to apply. +bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) { + /* uint *const offset_array = PyMem_Malloc(tdcv->size * sizeof(uint)); if (!offset_array){ return 0; @@ -521,6 +517,9 @@ bool DIV_connect_with_base(DeltaInfoVector* tdcv, const DeltaInfoVector* bdcv) PyMem_Free(offset_array); return 1; + */ + assert(0); // TODO + return 0; } // DELTA CHUNK LIST (PYTHON) @@ -542,7 +541,7 @@ int DCL_init(DeltaChunkList*self, PyObject *args, PyObject *kwds) return -1; } - TSI_init(&self->istream, 0); + TSI_init(&self->istream); return 0; } @@ -555,13 +554,14 @@ void DCL_dealloc(DeltaChunkList* self) static PyObject* DCL_py_rbound(DeltaChunkList* self) { - return PyLong_FromUnsignedLongLong(self->istream->target_size); + return PyLong_FromUnsignedLongLong(self->istream.target_size); } // Write using a write function, taking remaining bytes from a base buffer static PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) { + /* PyObject* pybuf = 0; PyObject* writeproc = 0; if (!PyArg_ParseTuple(args, "OO", &pybuf, &writeproc)){ @@ -593,6 +593,9 @@ PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) } Py_DECREF(tmpargs); + */ + // TODO + assert(0); Py_RETURN_NONE; } @@ -653,11 +656,51 @@ DeltaChunkList* DCL_new_instance(void) assert(dcl); DCL_init(dcl, 0, 0); - assert(dcl->vec.size == 0); - assert(dcl->vec.mem == NULL); return dcl; } +// Read the next delta chunk from the given stream and advance it +// dc will contain the parsed information, its offset must be set by +// the previous call of next_delta_info, which implies it should remain the +// same instance between the calls. +// Return 1 on success, 0 on failure +inline +bool next_delta_info(const uchar** dstream, DeltaChunk* dc) +{ + const uchar* data = *dstream; + const char cmd = *data++; + + if (cmd & 0x80) + { + unsigned long cp_off = 0, cp_size = 0; + if (cmd & 0x01) cp_off = *data++; + if (cmd & 0x02) cp_off |= (*data++ << 8); + if (cmd & 0x04) cp_off |= (*data++ << 16); + if (cmd & 0x08) cp_off |= ((unsigned) *data++ << 24); + if (cmd & 0x10) cp_size = *data++; + if (cmd & 0x20) cp_size |= (*data++ << 8); + if (cmd & 0x40) cp_size |= (*data++ << 16); + if (cp_size == 0) cp_size = 0x10000; + + dc->to += dc->ts; + dc->data = 0; + dc->so = cp_off; + dc->ts = cp_size; + + } else if (cmd) { + // Just share the data + dc->to += dc->ts; + dc->data = data; + dc->ts = cmd; + dc->so = 0; + } else { + PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); + return 0; + } + + return 1; +} + static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) { // obtain iterator @@ -672,16 +715,16 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) stream_iter = dstreams; } - DeltaInfoVector dcv; + DeltaInfoVector div; ToplevelStreamInfo tdsinfo; TSI_init(&tdsinfo); - DIV_init(&dcv, 100); // should be enough to keep the average text file + DIV_init(&div, 100); // should be enough to keep the average text file // GET TOPLEVEL DELTA STREAM int error = 0; PyObject* ds = 0; - unsigned int dsi = 0; + unsigned int dsi = 0; // delta stream index we process ds = PyIter_Next(stream_iter); if (!ds){ error = 1; @@ -697,11 +740,11 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) } PyObject_AsReadBuffer(tdsinfo.parent_object, (const void**)&tdsinfo.tds, &tdsinfo.tdslen); - if (tdslen > pow(2, 32)){ + if (tdsinfo.tdslen > pow(2, 32)){ // parent object is deallocated by info structure Py_DECREF(ds); - PyErr_SetString(PyExc_RuntimeError("Cannot handle deltas larger than 4GB")); - tdsinfo.tdb = 0; + PyErr_SetString(PyExc_RuntimeError, "Cannot handle deltas larger than 4GB"); + tdsinfo.parent_object = 0; error = 1; goto _error; @@ -709,11 +752,10 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) Py_DECREF(ds); // INTEGRATE ANCESTOR DELTA STREAMS - PyObject* db = 0; - TSI_init_stream(&tdsinfo, tdb); + TSI_init_stream(&tdsinfo); - for (ds = PyIter_Next(stream_iter); ds != NULL; ++dsi, ds = PyIter_Next(stream_iter)) + for (ds = PyIter_Next(stream_iter); ds != NULL; ds = PyIter_Next(stream_iter), ++dsi) { // Its important to initialize this before the next block which can jump // to code who needs this to exist ! @@ -721,7 +763,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) // When processing the first delta, we know we will have to alter the tds // Hence we copy it and deallocate the parent object - if (ds == 1) { + if (dsi == 1) { if (!TSI_copy_stream_from_object(&tdsinfo)){ PyErr_SetString(PyExc_RuntimeError, "Could not allocate memory to copy toplevel buffer"); // info structure takes care of the parent_object @@ -744,125 +786,45 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) const uchar* dend = data + dlen; // read header - const ull base_size = msb_size(&data, dend); + msb_size(&data, dend); const ull target_size = msb_size(&data, dend); // Assume good compression for the adds const uint approx_num_cmds = ((dlen / 3) / 10) + (((dlen / 3) * 2) / (2+2+1)); - DIV_reserve_memory(&dcv, approx_num_cmds); + DIV_reserve_memory(&div, approx_num_cmds); // parse command stream - ull tbw = 0; // Amount of target bytes written - bool is_shared_data = dsi != 0; - bool is_first_run = dsi == 0; + DeltaChunk dc; + DC_init(&dc, 0, 0, 0, NULL); assert(data < dend); while (data < dend) { - const char cmd = *data++; - - if (cmd & 0x80) - { - unsigned long cp_off = 0, cp_size = 0; - if (cmd & 0x01) cp_off = *data++; - if (cmd & 0x02) cp_off |= (*data++ << 8); - if (cmd & 0x04) cp_off |= (*data++ << 16); - if (cmd & 0x08) cp_off |= ((unsigned) *data++ << 24); - if (cmd & 0x10) cp_size = *data++; - if (cmd & 0x20) cp_size |= (*data++ << 8); - if (cmd & 0x40) cp_size |= (*data++ << 16); - if (cp_size == 0) cp_size = 0x10000; - - const unsigned long rbound = cp_off + cp_size; - if (rbound < cp_size || - rbound > base_size){ - // this really shouldn't happen - error = 1; - assert(0); - break; - } - - DC_init(DIV_append(&dcv), tbw, cp_size, cp_off); - tbw += cp_size; - - } else if (cmd) { - // Compression reduces fragmentation though, which is why we do it - // in all cases. - // It makes the more sense the more consecutive add-chunks we have, - // its more likely in big deltas, for big binary files - const uchar* add_start = data - 1; - const uchar* add_end = dend; - ull num_bytes = cmd; - data += cmd; - ull num_chunks = 1; - while (data < dend){ - //while (0){ - const char c = *data; - if (c & 0x80){ - add_end = data; - break; - } else { - data += 1 + c; // advance by 1 to skip add cmd - num_bytes += c; - num_chunks += 1; - } - } - - #ifdef DEBUG - assert(add_end - add_start > 0); - if (num_chunks > 1){ - fprintf(stderr, "Compression: got %i bytes of %i chunks\n", (int)num_bytes, (int)num_chunks); - } - #endif - - DeltaChunk* dc = DIV_append(&dcv); - DC_init(dc, tbw, num_bytes, 0); - - // gather the data, or (possibly) share single blocks - if (num_chunks > 1){ - uchar* dcdata = PyMem_Malloc(num_bytes); - while (add_start < add_end){ - const char bytes = *add_start++; - memcpy((void*)dcdata, (void*)add_start, bytes); - dcdata += bytes; - add_start += bytes; - } - DC_set_data_with_ownership(dc, dcdata-num_bytes); - } else { - DC_set_data(dc, data - cmd, cmd, is_shared_data); - } - - tbw += num_bytes; - } else { + if (next_delta_info(&data, &dc)){ + // TODO + assert(0); + } else { error = 1; - PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); goto loop_end; } }// END handle command opcodes - if (tbw != target_size){ + + if (DC_rbound(&dc) != target_size){ PyErr_SetString(PyExc_RuntimeError, "Failed to parse delta stream"); error = 1; } - if (!is_first_run){ - if (!DIV_connect_with_base(&tdcv, &dcv)){ - error = 1; - } + if (!DIV_connect_with_base(&tdsinfo, &div)){ + error = 1; } - + #ifdef DEBUG - fprintf(stderr, "tdcv->size = %i, tdcv->reserved_size = %i\n", (int)tdcv.size, (int)tdcv.reserved_size); - fprintf(stderr, "dcv->size = %i, dcv->reserved_size = %i\n", (int)dcv.size, (int)dcv.reserved_size); + fprintf(stderr, "tdsinfo->len = %i\n", (int)tdsinfo.tdslen); + fprintf(stderr, "div->size = %i, div->reserved_size = %i\n", (int)div.size, (int)div.reserved_size); #endif - if (is_first_run){ - tdcv = dcv; - // wipe out dcv without destroying the members, get its own memory - DIV_init(&dcv, tdcv.size); - } else { - // destroy members, but keep memory - DIV_reset(&dcv); - } + // destroy members, but keep memory + DIV_reset(&div); loop_end: // perform cleanup @@ -885,20 +847,18 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) Py_DECREF(stream_iter); } - if (dsi > 1){ - // otherwise dcv equals tcl - DIV_destroy(&dcv); - } + + DIV_destroy(&div); // Return the actual python object - its just a container DeltaChunkList* dcl = DCL_new_instance(); if (!dcl){ PyErr_SetString(PyExc_RuntimeError, "Couldn't allocate list"); - // Otherwise tdcv would be deallocated by the chunk list - DIV_destroy(&tdcv); + // Otherwise tdsinfo would be deallocated by the chunk list + TSI_destroy(&tdsinfo); error = 1; } else { - // Plain copy, don't deallocate + // Plain copy, transfer ownership to dcl dcl->istream = tdsinfo; } From 9e62c5481fefcc9e8adf0b6387952e214295223c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 18 Oct 2010 00:52:43 +0200 Subject: [PATCH 0108/2375] Worked my way up to re-encoding delta chunks, connect_with method still needs some work, intermediate commit --- _delta_apply.c | 309 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 243 insertions(+), 66 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index abeaed5f1..d35cb7ebc 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -8,6 +8,7 @@ typedef unsigned long long ull; typedef unsigned int uint; typedef unsigned char uchar; +typedef unsigned short ushort; typedef uchar bool; // Constants @@ -35,10 +36,11 @@ ull msb_size(const uchar** datap, const uchar* top) // TOP LEVEL STREAM INFO ///////////////////////////// typedef struct { - const uchar *tds; + const uchar *tds; // Toplevel delta stream + const uchar *cstart; // start of the chunks Py_ssize_t tdslen; // size of tds in bytes Py_ssize_t target_size; // size of the target buffer which can hold all data - uint numChunks; // amount of chunks in the delta stream + uint num_chunks; // amount of chunks in the delta stream PyObject *parent_object; } ToplevelStreamInfo; @@ -46,8 +48,9 @@ typedef struct { void TSI_init(ToplevelStreamInfo* info) { info->tds = NULL; + info->cstart = NULL; info->tdslen = 0; - info->numChunks = 0; + info->num_chunks = 0; info->target_size = 0; info->parent_object = 0; } @@ -62,18 +65,37 @@ void TSI_destroy(ToplevelStreamInfo* info) } } +inline +const uchar* TSI_end(ToplevelStreamInfo* info) +{ + return info->tds + info->tdslen; +} + +inline +const uchar* TSI_first(ToplevelStreamInfo* info) +{ + return info->cstart; +} + +// set the stream, and initialize it // initialize our set stream to point to the first chunk // Fill in the header information, which is the base and target size -void TSI_init_stream(ToplevelStreamInfo* info) +inline +void TSI_set_stream(ToplevelStreamInfo* info, const uchar* stream) { + info->tds = stream; + info->cstart = stream; + assert(info->tds && info->tdslen); // init stream - const uchar* tdsend = info->tds + info->tdslen; - msb_size(&info->tds, tdsend); - info->target_size = msb_size(&info->tds, tdsend); + const uchar* tdsend = TSI_end(info); + msb_size(&info->cstart, tdsend); // base size + info->target_size = msb_size(&info->cstart, tdsend); } + + // duplicate the data currently owned by the parent object drop its refcount // return 1 on success bool TSI_copy_stream_from_object(ToplevelStreamInfo* info) @@ -86,12 +108,29 @@ bool TSI_copy_stream_from_object(ToplevelStreamInfo* info) } memcpy((void*)ptmp, info->tds, info->tdslen); info->tds = ptmp; + info->cstart = ptmp; Py_DECREF(info->parent_object); info->parent_object = 0; return 1; } +// make sure we have the given amount of memory available. This will change +// our official length in bytes right away, its up to the caller +// to do something useful with the freed space +// Return true on success +bool TSI_resize(ToplevelStreamInfo* info, uint num_bytes) +{ + assert(info->tds); + if (num_bytes <= info->tdslen){ + return 1; + } + info->tds = PyMem_Realloc((void*)info->tds, num_bytes); + info->cstart = info->tds; + + return info->tds != NULL; +} + // DELTA CHUNK //////////////// // Internal Delta Chunk Objects @@ -99,8 +138,8 @@ bool TSI_copy_stream_from_object(ToplevelStreamInfo* info) // The data pointer is always shared typedef struct { ull to; - ull ts; - ull so; + uint ts; + uint so; const uchar* data; } DeltaChunk; @@ -141,9 +180,66 @@ void DC_apply(const DeltaChunk* dc, const uchar* base, PyObject* writer, PyObjec } +// Encode the information in the given delta chunk and write the byte-stream +// into the given output stream +inline +void DC_encode_to(const DeltaChunk* dc, uchar** pout) +{ + uchar* out = *pout; + if (dc->data){ + *out++ = (uchar)dc->ts; + memcpy(out, dc->data, dc->ts); + out += dc->ts; + } else { + uchar i = 0x80; + uchar* op = out++; + uint moff = dc->so; + uint msize = dc->ts; + + if (moff & 0x000000ff) + *out++ = moff >> 0, i |= 0x01; + if (moff & 0x0000ff00) + *out++ = moff >> 8, i |= 0x02; + if (moff & 0x00ff0000) + *out++ = moff >> 16, i |= 0x04; + if (moff & 0xff000000) + *out++ = moff >> 24, i |= 0x08; + + if (msize & 0x00ff) + *out++ = msize >> 0, i |= 0x10; + if (msize & 0xff00) + *out++ = msize >> 8, i |= 0x20; + + *op = i; + } + *pout = out; +} + +// Return: amount of bytes one would need to encode dc +inline +ushort DC_count_encode_bytes(const DeltaChunk* dc) +{ + if (dc->data){ + return 1 + dc->ts; // cmd byte + actual data bytes + } else { + ushort c = 1; // cmd byte + uint ts = dc->ts; + ull to = dc->to; + + // offset + c += to & 0x000000FF; + c += to & 0x0000FF00; + c += to & 0x00FF0000; + c += to & 0xFF000000; + + // size - max size is 0x10000, its encoded with 0 size bits + c += ts & 0x000000FF; + c += ts & 0x0000FF00; + + return c; + } +} -// DELTA CHUNK VECTOR -///////////////////// // DELTA INFO @@ -154,10 +250,13 @@ typedef struct { } DeltaInfo; +// DELTA INFO VECTOR +////////////////////// + typedef struct { - DeltaInfo *mem; // Memory - uint di_last_size; // size of the last element - we can't compute it using the next bound - const uchar *dstream; // pointer to delta stream we index - its borrowed + DeltaInfo *mem; // Memory for delta infos + uint di_last_size; // size of the last element - we can't compute it using the next bound + const uchar *dstream; // borrowed ointer to delta stream we index Py_ssize_t size; // Amount of DeltaInfos Py_ssize_t reserved_size; // Reserved amount of DeltaInfos } DeltaInfoVector; @@ -220,6 +319,7 @@ int DIV_grow_by(DeltaInfoVector* vec, uint num_dc) int DIV_init(DeltaInfoVector* vec, ull initial_size) { vec->mem = NULL; + vec->dstream = NULL; vec->size = 0; vec->reserved_size = 0; vec->di_last_size = 0; @@ -289,6 +389,24 @@ uint DIV_info_rbound(const DeltaInfoVector* vec, const DeltaInfo* di) } } +// return size of the given delta info item +inline +uint DIV_info_size2(const DeltaInfoVector* vec, const DeltaInfo* di, const DeltaInfo const* veclast) +{ + if (veclast == di){ + return vec->di_last_size; + } else { + return (di+1)->to - di->to; + } +} + +// return size of the given delta info item +inline +uint DIV_info_size(const DeltaInfoVector* vec, const DeltaInfo* di) +{ + return DIV_info_size2(vec, di, DIV_last(vec)); +} + void DIV_destroy(DeltaInfoVector* vec) { if (vec->mem){ @@ -344,16 +462,16 @@ DeltaInfo* DIV_closest_chunk(const DeltaInfoVector* vec, ull ofs) ull lo = 0; ull hi = vec->size; ull mid; - DeltaInfo* dc; + DeltaInfo* di; while (lo < hi) { mid = (lo + hi) / 2; - dc = vec->mem + mid; - if (dc->to > ofs){ + di = vec->mem + mid; + if (di->to > ofs){ hi = mid; - } else if ((DIV_info_rbound(vec, dc) > ofs) | (dc->to == ofs)) { - return dc; + } else if ((DIV_info_rbound(vec, di) > ofs) | (di->to == ofs)) { + return di; } else { lo = mid + 1; } @@ -362,40 +480,58 @@ DeltaInfo* DIV_closest_chunk(const DeltaInfoVector* vec, ull ofs) return DIV_last(vec); } +// forward declaration +const uchar* next_delta_info(const uchar*, DeltaChunk*); -// Return the amount of chunks a slice at the given spot would have +// Return the amount of chunks a slice at the given spot would have, as well as +// its size in bytes it would have if the possibly partial chunks would be encoded +// The bytes will be added inline -uint DIV_count_slice_chunks(const DeltaInfoVector* src, ull ofs, ull size) +uint DIV_count_slice_chunks_and_bytes(const DeltaInfoVector* src, ull ofs, ull size, uint* out_bytes) { - /*uint num_dc = 0; - DeltaInfo* cdc = DIV_closest_chunk(src, ofs); + uint num_dc = 0; + DeltaInfo* cdi = DIV_closest_chunk(src, ofs); + + DeltaChunk dc; + DC_init(&dc, 0, 0, 0, NULL); // partial overlap - if (cdc->to != ofs) { - const ull relofs = ofs - cdc->to; - size -= cdc->ts - relofs < size ? cdc->ts - relofs : size; + if (cdi->to != ofs) { + const ull relofs = ofs - cdi->to; + const uint cdisize = DIV_info_size(src, cdi); + size -= cdisize - relofs < size ? cdisize - relofs : size; num_dc += 1; - cdc += 1; + cdi += 1; + + // get the size in bytes the info would have + next_delta_info(src->dstream + cdi->dso, &dc); + *out_bytes += DC_count_encode_bytes(&dc); if (size == 0){ return num_dc; } } - const DeltaInfo* vecend = DIV_end(src); - for( ;(cdc < vecend) && size; ++cdc){ + const DeltaInfo const* vecend = DIV_end(src); + const DeltaInfo const* veclast = DIV_last(src); + for( ;(cdi < vecend) && size; ++cdi){ num_dc += 1; - if (cdc->ts < size) { - size -= cdc->ts; + + const uint cdisize = DIV_info_size2(src, cdi, veclast); + + next_delta_info(src->dstream + cdi->dso, &dc); + *out_bytes += DC_count_encode_bytes(&dc); + + if (cdisize < size) { + size -= cdisize; } else { size = 0; break; } } - return num_dc;*/ - assert(0); // TODO - return 0; + *out_bytes += 0; + return num_dc; } // Write a slice as defined by its absolute offset in bytes and its size into the given @@ -447,40 +583,47 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, DeltaInfo* dest, ull ofs, ull return 0; } - // Take slices of div into the corresponding area of the tsi, which is the topmost // delta to apply. bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) { - /* - uint *const offset_array = PyMem_Malloc(tdcv->size * sizeof(uint)); + assert(tsi->num_chunks); + + uint *const offset_array = PyMem_Malloc(tsi->num_chunks * sizeof(uint)); if (!offset_array){ return 0; } uint* pofs = offset_array; uint num_addchunks = 0; + uint num_addbytes = 0; - DeltaInfo* dc = DIV_first(tdcv); - const DeltaInfo* dcend = DIV_end(tdcv); + const uchar* data = TSI_first(tsi); + const uchar const* dend = TSI_end(tsi); + DeltaChunk dc; + DC_init(&dc, 0, 0, 0, NULL); // OFFSET RUN - for (;dc < dcend; dc++, pofs++) + for (;data < dend; pofs++) { // Data chunks don't need processing *pofs = num_addchunks; - if (dc->data){ + data = next_delta_info(data, &dc); + + if (dc.data){ continue; } // offset the next chunk by the amount of chunks in the slice // - 1, because we replace our own chunk - num_addchunks += DIV_count_slice_chunks(bdcv, dc->so, dc->ts) - 1; + num_addchunks += DIV_count_slice_chunks_and_bytes(div, dc.so, dc.ts, &num_addbytes) - 1; + assert(num_addbytes); } + /* // reserve enough memory to hold all the new chunks // reinit pointers, array could have been reallocated - DIV_reserve_memory(tdcv, tdcv->size + num_addchunks); + TSI_resize(tsis, tsi->tdslen + num_addbytes); dc = DIV_last(tdcv); dcend = DIV_first(tdcv) - 1; @@ -514,12 +657,10 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) tdc->to += relofs; } } - + */ PyMem_Free(offset_array); return 1; - */ - assert(0); // TODO - return 0; + } // DELTA CHUNK LIST (PYTHON) @@ -663,23 +804,22 @@ DeltaChunkList* DCL_new_instance(void) // dc will contain the parsed information, its offset must be set by // the previous call of next_delta_info, which implies it should remain the // same instance between the calls. -// Return 1 on success, 0 on failure +// Return the altered uchar pointer, reassign it to the input data inline -bool next_delta_info(const uchar** dstream, DeltaChunk* dc) +const uchar* next_delta_info(const uchar* data, DeltaChunk* dc) { - const uchar* data = *dstream; const char cmd = *data++; if (cmd & 0x80) { - unsigned long cp_off = 0, cp_size = 0; + uint cp_off = 0, cp_size = 0; if (cmd & 0x01) cp_off = *data++; if (cmd & 0x02) cp_off |= (*data++ << 8); if (cmd & 0x04) cp_off |= (*data++ << 16); if (cmd & 0x08) cp_off |= ((unsigned) *data++ << 24); if (cmd & 0x10) cp_size = *data++; if (cmd & 0x20) cp_size |= (*data++ << 8); - if (cmd & 0x40) cp_size |= (*data++ << 16); + if (cmd & 0x40) cp_size |= (*data++ << 16); // this should never get hit with current deltas ... if (cp_size == 0) cp_size = 0x10000; dc->to += dc->ts; @@ -695,10 +835,34 @@ bool next_delta_info(const uchar** dstream, DeltaChunk* dc) dc->so = 0; } else { PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); - return 0; + return NULL; } - return 1; + return data; +} + +// Return amount of chunks encoded in the given delta stream +// If read_header is True, then the header msb chunks will be read first. +// Otherwise, the stream is assumed to be scrubbed one past the header +uint compute_chunk_count(const uchar* data, const uchar* dend, bool read_header) +{ + // read header + if (read_header){ + msb_size(&data, dend); + msb_size(&data, dend); + } + + DeltaChunk dc; + DC_init(&dc, 0, 0, 0, NULL); + uint num_chunks = 0; + + while (data < dend) + { + data = next_delta_info(data, &dc); + num_chunks += 1; + }// END handle command opcodes + + return num_chunks; } static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) @@ -751,10 +915,10 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) } Py_DECREF(ds); - // INTEGRATE ANCESTOR DELTA STREAMS - TSI_init_stream(&tdsinfo); - + // let it officially know, and initialize its internal state + TSI_set_stream(&tdsinfo, tdsinfo.tds); + // INTEGRATE ANCESTOR DELTA STREAMS for (ds = PyIter_Next(stream_iter); ds != NULL; ds = PyIter_Next(stream_iter), ++dsi) { // Its important to initialize this before the next block which can jump @@ -770,6 +934,8 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) error = 1; goto loop_end; } + + tdsinfo.num_chunks = compute_chunk_count(tdsinfo.cstart, TSI_end(&tdsinfo), 0); } db = PyObject_CallMethod(ds, "read", 0); @@ -783,37 +949,48 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) const uchar* data; Py_ssize_t dlen; PyObject_AsReadBuffer(db, (const void**)&data, &dlen); - const uchar* dend = data + dlen; + const uchar const* dstart = data; + const uchar const* dend = data + dlen; + div.dstream = dstart; + + if (dlen > pow(2, 32)){ + error = 1; + PyErr_SetString(PyExc_RuntimeError, "Cannot currently handle deltas larger than 4GB"); + goto loop_end; + } - // read header + // READ HEADER msb_size(&data, dend); const ull target_size = msb_size(&data, dend); - // Assume good compression for the adds - const uint approx_num_cmds = ((dlen / 3) / 10) + (((dlen / 3) * 2) / (2+2+1)); - DIV_reserve_memory(&div, approx_num_cmds); + DIV_reserve_memory(&div, compute_chunk_count(data, dend, 0)); // parse command stream DeltaChunk dc; + DeltaInfo* di = 0; // temporary pointer DC_init(&dc, 0, 0, 0, NULL); assert(data < dend); while (data < dend) { - if (next_delta_info(&data, &dc)){ - // TODO - assert(0); + di = DIV_append(&div); + di->dso = data - dstart; + if ((data = next_delta_info(data, &dc))){ + di->to = dc.to; } else { error = 1; goto loop_end; } }// END handle command opcodes + // finalize information + div.di_last_size = dc.ts; + if (DC_rbound(&dc) != target_size){ PyErr_SetString(PyExc_RuntimeError, "Failed to parse delta stream"); error = 1; } - + if (!DIV_connect_with_base(&tdsinfo, &div)){ error = 1; } From 8693a7e37af03cd5d36f36fcc5ed01e938798905 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 18 Oct 2010 12:26:07 +0200 Subject: [PATCH 0109/2375] Implemented connect_with which includes all the slicing functions, which now operate on the delta stream data directly, its yet to be tested though, and I am afraid of this --- _delta_apply.c | 207 ++++++++++++++++++++++++++++--------------------- 1 file changed, 118 insertions(+), 89 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index d35cb7ebc..5f1d9c379 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -106,9 +106,12 @@ bool TSI_copy_stream_from_object(ToplevelStreamInfo* info) if (!ptmp){ return 0; } + uint ofs = (uint)(info->cstart - info->tds); memcpy((void*)ptmp, info->tds, info->tdslen); + info->tds = ptmp; - info->cstart = ptmp; + info->cstart = ptmp + ofs; + Py_DECREF(info->parent_object); info->parent_object = 0; @@ -125,8 +128,10 @@ bool TSI_resize(ToplevelStreamInfo* info, uint num_bytes) if (num_bytes <= info->tdslen){ return 1; } + uint ofs = (uint)(info->cstart - info->tds); info->tds = PyMem_Realloc((void*)info->tds, num_bytes); - info->cstart = info->tds; + info->tdslen = num_bytes; + info->cstart = info->tds + ofs; return info->tds != NULL; } @@ -182,19 +187,21 @@ void DC_apply(const DeltaChunk* dc, const uchar* base, PyObject* writer, PyObjec // Encode the information in the given delta chunk and write the byte-stream // into the given output stream +// It will be copied into the given bounds, the given size must be the final size +// and work with the given relative offset - hence the bounds are assumed to be +// correct and to fit within the unaltered dc inline -void DC_encode_to(const DeltaChunk* dc, uchar** pout) +void DC_encode_to(const DeltaChunk* dc, uchar** pout, uint ofs, uint size) { uchar* out = *pout; if (dc->data){ - *out++ = (uchar)dc->ts; - memcpy(out, dc->data, dc->ts); - out += dc->ts; + *out++ = (uchar)size; + memcpy(out, dc->data+ofs, size); + out += size; } else { uchar i = 0x80; uchar* op = out++; - uint moff = dc->so; - uint msize = dc->ts; + uint moff = dc->so+ofs; if (moff & 0x000000ff) *out++ = moff >> 0, i |= 0x01; @@ -205,10 +212,10 @@ void DC_encode_to(const DeltaChunk* dc, uchar** pout) if (moff & 0xff000000) *out++ = moff >> 24, i |= 0x08; - if (msize & 0x00ff) - *out++ = msize >> 0, i |= 0x10; - if (msize & 0xff00) - *out++ = msize >> 8, i |= 0x20; + if (size & 0x00ff) + *out++ = size >> 0, i |= 0x10; + if (size & 0xff00) + *out++ = size >> 8, i |= 0x20; *op = i; } @@ -224,13 +231,13 @@ ushort DC_count_encode_bytes(const DeltaChunk* dc) } else { ushort c = 1; // cmd byte uint ts = dc->ts; - ull to = dc->to; + ull so = dc->so; // offset - c += to & 0x000000FF; - c += to & 0x0000FF00; - c += to & 0x00FF0000; - c += to & 0xFF000000; + c += so & 0x000000FF; + c += so & 0x0000FF00; + c += so & 0x00FF0000; + c += so & 0xFF000000; // size - max size is 0x10000, its encoded with 0 size bits c += ts & 0x000000FF; @@ -485,13 +492,15 @@ const uchar* next_delta_info(const uchar*, DeltaChunk*); // Return the amount of chunks a slice at the given spot would have, as well as // its size in bytes it would have if the possibly partial chunks would be encoded -// The bytes will be added +// and added to the spot marked by sdc inline -uint DIV_count_slice_chunks_and_bytes(const DeltaInfoVector* src, ull ofs, ull size, uint* out_bytes) +uint DIV_count_slice_bytes(const DeltaInfoVector* src, uint ofs, uint size) { - uint num_dc = 0; + uint num_bytes = 0; DeltaInfo* cdi = DIV_closest_chunk(src, ofs); + + DeltaChunk dc; DC_init(&dc, 0, 0, 0, NULL); @@ -499,63 +508,72 @@ uint DIV_count_slice_chunks_and_bytes(const DeltaInfoVector* src, ull ofs, ull s if (cdi->to != ofs) { const ull relofs = ofs - cdi->to; const uint cdisize = DIV_info_size(src, cdi); - size -= cdisize - relofs < size ? cdisize - relofs : size; - num_dc += 1; - cdi += 1; + const uint actual_size = cdisize - relofs < size ? cdisize - relofs : size; + size -= actual_size; // get the size in bytes the info would have next_delta_info(src->dstream + cdi->dso, &dc); - *out_bytes += DC_count_encode_bytes(&dc); + dc.so += relofs; + dc.ts = actual_size; + num_bytes += DC_count_encode_bytes(&dc); + + cdi += 1; if (size == 0){ - return num_dc; + return num_bytes; } } const DeltaInfo const* vecend = DIV_end(src); - const DeltaInfo const* veclast = DIV_last(src); - for( ;(cdi < vecend) && size; ++cdi){ - num_dc += 1; - - const uint cdisize = DIV_info_size2(src, cdi, veclast); - + for( ;cdi < vecend; ++cdi){ next_delta_info(src->dstream + cdi->dso, &dc); - *out_bytes += DC_count_encode_bytes(&dc); - if (cdisize < size) { - size -= cdisize; + if (dc.ts < size) { + num_bytes += DC_count_encode_bytes(&dc); + size -= dc.ts; } else { + dc.ts = size; + num_bytes += DC_count_encode_bytes(&dc); size = 0; break; } } - *out_bytes += 0; - return num_dc; + assert(size == 0); + return num_bytes; } // Write a slice as defined by its absolute offset in bytes and its size into the given -// destination memory. The individual chunks written will be a deep copy of the source -// data chunks +// destination memory. The individual chunks written will be a byte copy of the source +// data chunk stream // Return: number of chunks in the slice inline -uint DIV_copy_slice_to(const DeltaInfoVector* src, DeltaInfo* dest, ull ofs, ull size) +uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar* dest, ull tofs, uint size) { - /* - assert(DIV_lbound(src) <= ofs); - assert((ofs + size) <= DIV_last(src)->to + src->di_last_size); + assert(DIV_lbound(src) <= tofs); + assert((tofs + size) <= DIV_last(src)->to + src->di_last_size); - DeltaInfo* cdc = DIV_closest_chunk(src, ofs); + DeltaChunk dc; + DC_init(&dc, 0, 0, 0, NULL); + + DeltaInfo* cdi = DIV_closest_chunk(src, tofs); uint num_chunks = 0; // partial overlap - if (cdc->to != ofs) { - const ull relofs = ofs - cdc->to; - DC_offset_copy_to(cdc, dest, relofs, cdc->ts - relofs < size ? cdc->ts - relofs : size); - cdc += 1; - size -= dest->ts; - dest += 1; // must be here, we are reading the size ! + if (cdi->to != tofs) { + const uint relofs = tofs - cdi->to; + next_delta_info(src->dstream + cdi->dso, &dc); + const uint cdisize = dc.ts; + const uint actual_size = cdisize - relofs < size ? cdisize - relofs : size; + + size -= actual_size; + + // adjust dc proportions + + DC_encode_to(&dc, &dest, relofs, actual_size); + num_chunks += 1; + cdi += 1; if (size == 0){ return num_chunks; @@ -563,14 +581,18 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, DeltaInfo* dest, ull ofs, ull } const DeltaInfo* vecend = DIV_end(src); - for( ;(cdc < vecend) && size; ++cdc) + for( ;cdi < vecend; ++cdi) { num_chunks += 1; - if (cdc->ts < size) { - DC_copy_to(cdc, dest++); - size -= cdc->ts; + next_delta_info(src->dstream + cdi->dso, &dc); + if (dc.ts < size) { + // Full copy would be possible, but the final length of the dstream + // needs to be used as well to know how many bytes to copy + // TODO: make a DIV_ function for this + DC_encode_to(&dc, &dest, 0, dc.ts); + size -= dc.ts; } else { - DC_offset_copy_to(cdc, dest, 0, size); + DC_encode_to(&dc, &dest, 0, size); size = 0; break; } @@ -578,36 +600,44 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, DeltaInfo* dest, ull ofs, ull assert(size == 0); return num_chunks; - */ - assert(0); // TODO - return 0; } + // Take slices of div into the corresponding area of the tsi, which is the topmost // delta to apply. bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) { assert(tsi->num_chunks); - uint *const offset_array = PyMem_Malloc(tsi->num_chunks * sizeof(uint)); + typedef struct { + uint bofs; // byte-offset of delta stream + uint dofs; // delta stream offset relative to tsi->cstart + } OffsetInfo; + + + OffsetInfo *const offset_array = PyMem_Malloc(tsi->num_chunks * sizeof(OffsetInfo)); if (!offset_array){ return 0; } - uint* pofs = offset_array; - uint num_addchunks = 0; + OffsetInfo* pofs = offset_array; uint num_addbytes = 0; const uchar* data = TSI_first(tsi); + const uchar* prev_data = data; const uchar const* dend = TSI_end(tsi); + DeltaChunk dc; DC_init(&dc, 0, 0, 0, NULL); // OFFSET RUN - for (;data < dend; pofs++) + for (;data < dend; pofs++, prev_data = data) { + + pofs->bofs = num_addbytes; + pofs->dofs = (uint)(prev_data - data); + // Data chunks don't need processing - *pofs = num_addchunks; data = next_delta_info(data, &dc); if (dc.data){ @@ -615,49 +645,48 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) } // offset the next chunk by the amount of chunks in the slice - // - 1, because we replace our own chunk - num_addchunks += DIV_count_slice_chunks_and_bytes(div, dc.so, dc.ts, &num_addbytes) - 1; - assert(num_addbytes); + // - N, because we replace our own chunk's bytes + num_addbytes += DIV_count_slice_bytes(div, dc.so, dc.ts) - (data - prev_data); } - /* - // reserve enough memory to hold all the new chunks - // reinit pointers, array could have been reallocated - TSI_resize(tsis, tsi->tdslen + num_addbytes); - dc = DIV_last(tdcv); - dcend = DIV_first(tdcv) - 1; - // now, that we have our pointers with the old size - tdcv->size += num_addchunks; + + // reserve enough memory to hold all the new chunks + TSI_resize(tsi, tsi->tdslen + num_addbytes); + const OffsetInfo const* pofs_start = offset_array - 1; + const OffsetInfo* cpofs; + uchar* ds; // pointer into the delta stream + const uchar* nds; // next pointer, used for size retrieving the size + uint num_addchunks = 0; // total amount of chunks added // Insert slices, from the end to the beginning, which allows memcpy // to be used, with a little help of the offset array - for (pofs -= 1; dc > dcend; dc--, pofs-- ) + for (cpofs = pofs - 1; cpofs > pofs_start; cpofs--) { + ds = (uchar*)(tsi->cstart + cpofs->dofs); + nds = next_delta_info(ds, &dc); + // Data chunks don't need processing - const uint ofs = *pofs; - if (dc->data){ + if (dc.data){ // NOTE: could peek the preceeding chunks to figure out whether they are // all just moved by ofs. In that case, they can move as a whole! // tests showed that this is very rare though, even in huge deltas, so its // not worth the extra effort - if (ofs){ - memcpy((void*)(dc + ofs), (void*)dc, sizeof(DeltaInfo)); + if (pofs->bofs){ + memcpy((void*)(ds + cpofs->bofs), (void*)ds, nds - ds); } continue; } - // Copy Chunks, and move their target offset into place - // As we could override dc when slicing, we get the data here - const ull relofs = dc->to - dc->so; - - DeltaInfo* tdc = dc + ofs; - DeltaInfo* tdcend = tdc + DIV_copy_slice_to(bdcv, tdc, dc->so, dc->ts); - for(;tdc < tdcend; tdc++){ - tdc->to += relofs; - } + // Copy Chunks - target offset is determined by their location and size + // hence it doesn't need specific adjustment + // -1 chunks because we overwrite our own chunk ( by not copying it ) + num_addchunks += DIV_copy_slice_to(div, ds + cpofs->bofs, dc.so, dc.ts); + num_addchunks -= 1; } - */ + + tsi->num_chunks += num_addchunks; + PyMem_Free(offset_array); return 1; @@ -823,7 +852,7 @@ const uchar* next_delta_info(const uchar* data, DeltaChunk* dc) if (cp_size == 0) cp_size = 0x10000; dc->to += dc->ts; - dc->data = 0; + dc->data = NULL; dc->so = cp_off; dc->ts = cp_size; From c16de40fccf84d066194d2bf95dea56aa76dafd1 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 18 Oct 2010 14:34:00 +0200 Subject: [PATCH 0110/2375] Implemented apply - there are still some issues to work out though --- _delta_apply.c | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index 5f1d9c379..6d7c4c9d0 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -165,7 +165,6 @@ ull DC_rbound(const DeltaChunk* dc) } // Apply -// TODO: remove, just left it for reference inline void DC_apply(const DeltaChunk* dc, const uchar* base, PyObject* writer, PyObject* tmpargs) { @@ -252,7 +251,7 @@ ushort DC_count_encode_bytes(const DeltaChunk* dc) // DELTA INFO ///////////// typedef struct { - uint dso; // delta stream offset + uint dso; // delta stream offset, relative to the very start of the stream uint to; // target offset (cache) } DeltaInfo; @@ -281,10 +280,6 @@ int DIV_reserve_memory(DeltaInfoVector* vec, uint num_dc) return 1; } - if (num_dc - vec->reserved_size < 10){ - num_dc += gDIV_grow_by; - } - #ifdef DEBUG bool was_null = vec->mem == NULL; #endif @@ -529,6 +524,8 @@ uint DIV_count_slice_bytes(const DeltaInfoVector* src, uint ofs, uint size) next_delta_info(src->dstream + cdi->dso, &dc); if (dc.ts < size) { + // TODO: could just count size of the delta chunk in the stream instead + // of reencoding num_bytes += DC_count_encode_bytes(&dc); size -= dc.ts; } else { @@ -731,7 +728,7 @@ PyObject* DCL_py_rbound(DeltaChunkList* self) static PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) { - /* + PyObject* pybuf = 0; PyObject* writeproc = 0; if (!PyArg_ParseTuple(args, "OO", &pybuf, &writeproc)){ @@ -749,23 +746,24 @@ PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) return NULL; } - const DeltaChunk* i = self->vec.mem; - const DeltaChunk* end = DIV_end(&self->vec); - - const uchar* data; - Py_ssize_t dlen; - PyObject_AsReadBuffer(pybuf, (const void**)&data, &dlen); + const uchar* base; + Py_ssize_t baselen; + PyObject_AsReadBuffer(pybuf, (const void**)&base, &baselen); PyObject* tmpargs = PyTuple_New(1); - for(; i < end; i++){ - DC_apply(i, data, writeproc, tmpargs); + const uchar* data = TSI_first(&self->istream); + const uchar const* dend = TSI_end(&self->istream); + + DeltaChunk dc; + DC_init(&dc, 0, 0, 0, NULL); + + while (data < dend){ + data = next_delta_info(data, &dc); + DC_apply(&dc, base, writeproc, tmpargs); } Py_DECREF(tmpargs); - */ - // TODO - assert(0); Py_RETURN_NONE; } @@ -911,7 +909,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) DeltaInfoVector div; ToplevelStreamInfo tdsinfo; TSI_init(&tdsinfo); - DIV_init(&div, 100); // should be enough to keep the average text file + DIV_init(&div, 0); // GET TOPLEVEL DELTA STREAM @@ -1020,13 +1018,17 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) error = 1; } + #ifdef DEBUG + fprintf(stderr, "Before Connect: tdsinfo->num_chunks = %i, tdsinfo->bytelen = %i\n", (int)tdsinfo.num_chunks, (int)tdsinfo.tdslen); + #endif + if (!DIV_connect_with_base(&tdsinfo, &div)){ error = 1; } #ifdef DEBUG - fprintf(stderr, "tdsinfo->len = %i\n", (int)tdsinfo.tdslen); - fprintf(stderr, "div->size = %i, div->reserved_size = %i\n", (int)div.size, (int)div.reserved_size); + fprintf(stderr, "after connect: tdsinfo->num_chunks = %i, tdsinfo->bytelen = %i\n", (int)tdsinfo.num_chunks, (int)tdsinfo.tdslen); + fprintf(stderr, "div->num_chunks = %i, div->reserved_size = %i, div->bytelen=%i\n", (int)div.size, (int)div.reserved_size, (int)dlen); #endif // destroy members, but keep memory From dc85535de371762503496313f5e753d61997dcfd Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 18 Oct 2010 16:22:59 +0200 Subject: [PATCH 0111/2375] Its much closer to a working state now, but still not quite there. Probably just a small thing --- _delta_apply.c | 72 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 22 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index 6d7c4c9d0..65e949a04 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -57,6 +57,7 @@ void TSI_init(ToplevelStreamInfo* info) void TSI_destroy(ToplevelStreamInfo* info) { + fprintf(stderr, "TSI_destroy: %p\n", info); if (info->parent_object){ Py_DECREF(info->parent_object); info->parent_object = 0; @@ -164,6 +165,12 @@ ull DC_rbound(const DeltaChunk* dc) return dc->to + dc->ts; } +inline +void DC_print(const DeltaChunk* dc, const char* prefix) +{ + fprintf(stderr, "%s-dc: to = %i, ts = %i, so = %i, data = %p\n", prefix, (int)dc->to, dc->ts, dc->so, dc->data); +} + // Apply inline void DC_apply(const DeltaChunk* dc, const uchar* base, PyObject* writer, PyObject* tmpargs) @@ -179,6 +186,8 @@ void DC_apply(const DeltaChunk* dc, const uchar* base, PyObject* writer, PyObjec assert(0); } + DC_print(dc, "DC_apply"); + // tuple steals reference, and will take care about the deallocation PyObject_Call(writer, tmpargs, NULL); @@ -233,14 +242,14 @@ ushort DC_count_encode_bytes(const DeltaChunk* dc) ull so = dc->so; // offset - c += so & 0x000000FF; - c += so & 0x0000FF00; - c += so & 0x00FF0000; - c += so & 0xFF000000; + c += (so & 0x000000FF) > 0; + c += (so & 0x0000FF00) > 0; + c += (so & 0x00FF0000) > 0; + c += (so & 0xFF000000) > 0; // size - max size is 0x10000, its encoded with 0 size bits - c += ts & 0x000000FF; - c += ts & 0x0000FF00; + c += (ts & 0x000000FF) > 0; + c += (ts & 0x0000FF00) > 0; return c; } @@ -413,7 +422,7 @@ void DIV_destroy(DeltaInfoVector* vec) { if (vec->mem){ #ifdef DEBUG - fprintf(stderr, "Freeing %p\n", (void*)vec->mem); + fprintf(stderr, "DIV_destroy: %p\n", (void*)vec->mem); #endif PyMem_Free(vec->mem); vec->size = 0; @@ -494,8 +503,6 @@ uint DIV_count_slice_bytes(const DeltaInfoVector* src, uint ofs, uint size) uint num_bytes = 0; DeltaInfo* cdi = DIV_closest_chunk(src, ofs); - - DeltaChunk dc; DC_init(&dc, 0, 0, 0, NULL); @@ -503,13 +510,13 @@ uint DIV_count_slice_bytes(const DeltaInfoVector* src, uint ofs, uint size) if (cdi->to != ofs) { const ull relofs = ofs - cdi->to; const uint cdisize = DIV_info_size(src, cdi); - const uint actual_size = cdisize - relofs < size ? cdisize - relofs : size; - size -= actual_size; + const uint max_size = cdisize - relofs < size ? cdisize - relofs : size; + size -= max_size; // get the size in bytes the info would have next_delta_info(src->dstream + cdi->dso, &dc); dc.so += relofs; - dc.ts = actual_size; + dc.ts = max_size; num_bytes += DC_count_encode_bytes(&dc); cdi += 1; @@ -547,8 +554,9 @@ uint DIV_count_slice_bytes(const DeltaInfoVector* src, uint ofs, uint size) inline uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar* dest, ull tofs, uint size) { + fprintf(stderr, "copy slice: ofs = %i, size = %i\n", (int)tofs, size); assert(DIV_lbound(src) <= tofs); - assert((tofs + size) <= DIV_last(src)->to + src->di_last_size); + assert((tofs + size) <= DIV_info_rbound(src, DIV_last(src))); DeltaChunk dc; DC_init(&dc, 0, 0, 0, NULL); @@ -556,18 +564,22 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar* dest, ull tofs, uint s DeltaInfo* cdi = DIV_closest_chunk(src, tofs); uint num_chunks = 0; +#ifdef DEBUG + const uchar* deststart = dest; +#endif + // partial overlap if (cdi->to != tofs) { const uint relofs = tofs - cdi->to; next_delta_info(src->dstream + cdi->dso, &dc); const uint cdisize = dc.ts; - const uint actual_size = cdisize - relofs < size ? cdisize - relofs : size; + const uint max_size = cdisize - relofs < size ? cdisize - relofs : size; - size -= actual_size; + size -= max_size; // adjust dc proportions - DC_encode_to(&dc, &dest, relofs, actual_size); + DC_encode_to(&dc, &dest, relofs, max_size); num_chunks += 1; cdi += 1; @@ -580,6 +592,7 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar* dest, ull tofs, uint s const DeltaInfo* vecend = DIV_end(src); for( ;cdi < vecend; ++cdi) { + fprintf(stderr, "copy slice: cdi: to = %i, dso = %i\n", (int)cdi->to, (int)cdi->dso); num_chunks += 1; next_delta_info(src->dstream + cdi->dso, &dc); if (dc.ts < size) { @@ -595,6 +608,10 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar* dest, ull tofs, uint s } } +#ifdef DEBUG + fprintf(stderr, "copy slice: Wrote %i bytes\n", (int)(dest - deststart)); +#endif + assert(size == 0); return num_chunks; } @@ -619,6 +636,7 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) OffsetInfo* pofs = offset_array; uint num_addbytes = 0; + uint dofs = 0; const uchar* data = TSI_first(tsi); const uchar* prev_data = data; @@ -627,16 +645,19 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) DeltaChunk dc; DC_init(&dc, 0, 0, 0, NULL); + // OFFSET RUN for (;data < dend; pofs++, prev_data = data) { - pofs->bofs = num_addbytes; - pofs->dofs = (uint)(prev_data - data); - - // Data chunks don't need processing data = next_delta_info(data, &dc); + pofs->dofs = dofs; + dofs += (uint)(data-prev_data); + + fprintf(stderr, "pofs->bofs = %i, ->dofs = %i\n", pofs->bofs, pofs->dofs); + DC_print(&dc, "count-run"); + // Data chunks don't need processing if (dc.data){ continue; } @@ -646,6 +667,8 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) num_addbytes += DIV_count_slice_bytes(div, dc.so, dc.ts) - (data - prev_data); } + fprintf(stderr, "num_addbytes = %i\n", num_addbytes); + assert(DC_rbound(&dc) == tsi->target_size); // reserve enough memory to hold all the new chunks @@ -655,6 +678,7 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) uchar* ds; // pointer into the delta stream const uchar* nds; // next pointer, used for size retrieving the size uint num_addchunks = 0; // total amount of chunks added + DC_init(&dc, 0, 0, 0, NULL); // Insert slices, from the end to the beginning, which allows memcpy // to be used, with a little help of the offset array @@ -682,6 +706,7 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) num_addchunks -= 1; } + fprintf(stderr, "num_addchunks = %i\n", num_addchunks); tsi->num_chunks += num_addchunks; PyMem_Free(offset_array); @@ -860,6 +885,8 @@ const uchar* next_delta_info(const uchar* data, DeltaChunk* dc) dc->data = data; dc->ts = cmd; dc->so = 0; + + data += cmd; } else { PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); return NULL; @@ -993,8 +1020,8 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) DIV_reserve_memory(&div, compute_chunk_count(data, dend, 0)); // parse command stream - DeltaChunk dc; DeltaInfo* di = 0; // temporary pointer + DeltaChunk dc; DC_init(&dc, 0, 0, 0, NULL); assert(data < dend); @@ -1019,7 +1046,9 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) } #ifdef DEBUG + fprintf(stderr, "------------ Stream %i --------\n ", (int)dsi); fprintf(stderr, "Before Connect: tdsinfo->num_chunks = %i, tdsinfo->bytelen = %i\n", (int)tdsinfo.num_chunks, (int)tdsinfo.tdslen); + fprintf(stderr, "div->num_chunks = %i, div->reserved_size = %i, div->bytelen=%i\n", (int)div.size, (int)div.reserved_size, (int)dlen); #endif if (!DIV_connect_with_base(&tdsinfo, &div)){ @@ -1028,7 +1057,6 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) #ifdef DEBUG fprintf(stderr, "after connect: tdsinfo->num_chunks = %i, tdsinfo->bytelen = %i\n", (int)tdsinfo.num_chunks, (int)tdsinfo.tdslen); - fprintf(stderr, "div->num_chunks = %i, div->reserved_size = %i, div->bytelen=%i\n", (int)div.size, (int)div.reserved_size, (int)dlen); #endif // destroy members, but keep memory From c077f3f9ac56aa1019273c7ea548ae047e5974f6 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 18 Oct 2010 16:28:28 +0200 Subject: [PATCH 0112/2375] now it appears to work completely, still plenty of debug printing though --- _delta_apply.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_delta_apply.c b/_delta_apply.c index 65e949a04..350a2493d 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -693,7 +693,7 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) // all just moved by ofs. In that case, they can move as a whole! // tests showed that this is very rare though, even in huge deltas, so its // not worth the extra effort - if (pofs->bofs){ + if (cpofs->bofs){ memcpy((void*)(ds + cpofs->bofs), (void*)ds, nds - ds); } continue; From 28263c97bca171d84b4f4ea022d6638076b903a4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 18 Oct 2010 17:32:31 +0200 Subject: [PATCH 0113/2375] When using it with deeper chains, it can still crash as it can actually (try to) shrink a chunk. This is currently not handled. In that case, we had to virtually move everything x bytes, which should be much like an offset --- _delta_apply.c | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index 350a2493d..2632fbb27 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -57,7 +57,10 @@ void TSI_init(ToplevelStreamInfo* info) void TSI_destroy(ToplevelStreamInfo* info) { +#ifdef DEBUG fprintf(stderr, "TSI_destroy: %p\n", info); +#endif + if (info->parent_object){ Py_DECREF(info->parent_object); info->parent_object = 0; @@ -129,6 +132,10 @@ bool TSI_resize(ToplevelStreamInfo* info, uint num_bytes) if (num_bytes <= info->tdslen){ return 1; } + +#ifdef DEBUG + fprintf(stderr, "TSI_resize: to %i bytes\n", num_bytes); +#endif uint ofs = (uint)(info->cstart - info->tds); info->tds = PyMem_Realloc((void*)info->tds, num_bytes); info->tdslen = num_bytes; @@ -186,7 +193,6 @@ void DC_apply(const DeltaChunk* dc, const uchar* base, PyObject* writer, PyObjec assert(0); } - DC_print(dc, "DC_apply"); // tuple steals reference, and will take care about the deallocation PyObject_Call(writer, tmpargs, NULL); @@ -554,7 +560,6 @@ uint DIV_count_slice_bytes(const DeltaInfoVector* src, uint ofs, uint size) inline uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar* dest, ull tofs, uint size) { - fprintf(stderr, "copy slice: ofs = %i, size = %i\n", (int)tofs, size); assert(DIV_lbound(src) <= tofs); assert((tofs + size) <= DIV_info_rbound(src, DIV_last(src))); @@ -564,10 +569,6 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar* dest, ull tofs, uint s DeltaInfo* cdi = DIV_closest_chunk(src, tofs); uint num_chunks = 0; -#ifdef DEBUG - const uchar* deststart = dest; -#endif - // partial overlap if (cdi->to != tofs) { const uint relofs = tofs - cdi->to; @@ -592,7 +593,6 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar* dest, ull tofs, uint s const DeltaInfo* vecend = DIV_end(src); for( ;cdi < vecend; ++cdi) { - fprintf(stderr, "copy slice: cdi: to = %i, dso = %i\n", (int)cdi->to, (int)cdi->dso); num_chunks += 1; next_delta_info(src->dstream + cdi->dso, &dc); if (dc.ts < size) { @@ -608,10 +608,6 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar* dest, ull tofs, uint s } } -#ifdef DEBUG - fprintf(stderr, "copy slice: Wrote %i bytes\n", (int)(dest - deststart)); -#endif - assert(size == 0); return num_chunks; } @@ -624,7 +620,7 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) assert(tsi->num_chunks); typedef struct { - uint bofs; // byte-offset of delta stream + int bofs; // byte-offset of delta stream uint dofs; // delta stream offset relative to tsi->cstart } OffsetInfo; @@ -635,7 +631,7 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) } OffsetInfo* pofs = offset_array; - uint num_addbytes = 0; + int num_addbytes = 0; uint dofs = 0; const uchar* data = TSI_first(tsi); @@ -651,12 +647,10 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) { pofs->bofs = num_addbytes; data = next_delta_info(data, &dc); + assert(data); pofs->dofs = dofs; dofs += (uint)(data-prev_data); - fprintf(stderr, "pofs->bofs = %i, ->dofs = %i\n", pofs->bofs, pofs->dofs); - DC_print(&dc, "count-run"); - // Data chunks don't need processing if (dc.data){ continue; @@ -667,7 +661,12 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) num_addbytes += DIV_count_slice_bytes(div, dc.so, dc.ts) - (data - prev_data); } - fprintf(stderr, "num_addbytes = %i\n", num_addbytes); + /* + uint i = 0; + for (; i < tsi->num_chunks; i++){ + fprintf(stderr, "%i: bofs: %i, dofs: %i\n", i, offset_array[i].bofs, offset_array[i].dofs); + } + */ assert(DC_rbound(&dc) == tsi->target_size); @@ -695,6 +694,7 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) // not worth the extra effort if (cpofs->bofs){ memcpy((void*)(ds + cpofs->bofs), (void*)ds, nds - ds); + // memmove((void*)(ds + cpofs->bofs), (void*)ds, nds - ds); } continue; } @@ -706,7 +706,6 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) num_addchunks -= 1; } - fprintf(stderr, "num_addchunks = %i\n", num_addchunks); tsi->num_chunks += num_addchunks; PyMem_Free(offset_array); From 1a57dc133ec31c409819b2b40866529ed95a555b Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 18 Oct 2010 17:53:12 +0200 Subject: [PATCH 0114/2375] Well, the virtual movement doesn't work - the algorithm really worked only with a fixed chunk size. Now the only chance we have is to allocate an appropriately sized buffer, and work through it directly. This makes things easier, and will make things work \! --- _delta_apply.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index 2632fbb27..9df0191e4 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -620,7 +620,7 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) assert(tsi->num_chunks); typedef struct { - int bofs; // byte-offset of delta stream + uint bofs; // byte-offset of delta stream uint dofs; // delta stream offset relative to tsi->cstart } OffsetInfo; @@ -631,7 +631,8 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) } OffsetInfo* pofs = offset_array; - int num_addbytes = 0; + uint num_addbytes = 0; + int bytes = 0; uint dofs = 0; const uchar* data = TSI_first(tsi); @@ -658,15 +659,16 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) // offset the next chunk by the amount of chunks in the slice // - N, because we replace our own chunk's bytes - num_addbytes += DIV_count_slice_bytes(div, dc.so, dc.ts) - (data - prev_data); + bytes = DIV_count_slice_bytes(div, dc.so, dc.ts) - (data - prev_data); + // if we shrink in size, compensate this by moving the start virtually + // + if (bytes < 0){ + fprintf(stderr, "hit negative bytes: %i\n", bytes); + tsi->cstart += abs(bytes); + } + num_addbytes += abs(bytes); } - /* - uint i = 0; - for (; i < tsi->num_chunks; i++){ - fprintf(stderr, "%i: bofs: %i, dofs: %i\n", i, offset_array[i].bofs, offset_array[i].dofs); - } - */ assert(DC_rbound(&dc) == tsi->target_size); @@ -701,8 +703,8 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) // Copy Chunks - target offset is determined by their location and size // hence it doesn't need specific adjustment - // -1 chunks because we overwrite our own chunk ( by not copying it ) num_addchunks += DIV_copy_slice_to(div, ds + cpofs->bofs, dc.so, dc.ts); + // -1 chunks because we overwrite our own chunk ( by not copying it ) num_addchunks -= 1; } From a7892bc7ebc99d2fe726287cc69716a3494b5ea2 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 18 Oct 2010 20:25:01 +0200 Subject: [PATCH 0115/2375] goooosh, it took so long to find a tiny nasty bug ... aarggghhh, lots of debug printing still in there, ... this one better be faster than anything else \! --- _delta_apply.c | 182 ++++++++++++++++++++++++++----------------------- 1 file changed, 95 insertions(+), 87 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index 9df0191e4..71d5b5f8c 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -15,6 +15,7 @@ typedef uchar bool; const ull gDIV_grow_by = 100; + // DELTA STREAM ACCESS /////////////////////// inline @@ -63,10 +64,14 @@ void TSI_destroy(ToplevelStreamInfo* info) if (info->parent_object){ Py_DECREF(info->parent_object); - info->parent_object = 0; + info->parent_object = NULL; } else if (info->tds){ PyMem_Free((void*)info->tds); } + info->tds = NULL; + info->cstart = NULL; + info->tdslen = 0; + info->num_chunks = 0; } inline @@ -122,26 +127,21 @@ bool TSI_copy_stream_from_object(ToplevelStreamInfo* info) return 1; } -// make sure we have the given amount of memory available. This will change -// our official length in bytes right away, its up to the caller -// to do something useful with the freed space -// Return true on success -bool TSI_resize(ToplevelStreamInfo* info, uint num_bytes) +// Transfer ownership of the given stream into our instance. The amount of chunks +// remains the same, and needs to be set by the caller +void TSI_replace_stream(ToplevelStreamInfo* info, const uchar* stream, uint streamlen) { - assert(info->tds); - if (num_bytes <= info->tdslen){ - return 1; - } + assert(info->parent_object == 0); + fprintf(stderr, "TSI_replace_stream\n"); -#ifdef DEBUG - fprintf(stderr, "TSI_resize: to %i bytes\n", num_bytes); -#endif uint ofs = (uint)(info->cstart - info->tds); - info->tds = PyMem_Realloc((void*)info->tds, num_bytes); - info->tdslen = num_bytes; + if (info->tds){ + PyMem_Free((void*)info->tds); + } + info->tds = stream; info->cstart = info->tds + ofs; + info->tdslen = streamlen; - return info->tds != NULL; } // DELTA CHUNK @@ -156,6 +156,9 @@ typedef struct { const uchar* data; } DeltaChunk; +// forward declarations +const uchar* next_delta_info(const uchar*, DeltaChunk*); + inline void DC_init(DeltaChunk* dc, ull to, ull ts, ull so, const uchar* data) { @@ -208,6 +211,8 @@ inline void DC_encode_to(const DeltaChunk* dc, uchar** pout, uint ofs, uint size) { uchar* out = *pout; + DC_print(dc, "DC_encode_to"); + fprintf(stderr, "DC_encode_to: ofs = %i, size = %i\n" , ofs, size); if (dc->data){ *out++ = (uchar)size; memcpy(out, dc->data+ofs, size); @@ -233,6 +238,18 @@ void DC_encode_to(const DeltaChunk* dc, uchar** pout, uint ofs, uint size) *op = i; } + +#ifdef DEBUG + DeltaChunk mdc; + DC_init(&mdc, 0, 0, 0, NULL); + next_delta_info(*pout, &mdc); + assert(mdc.ts == size); + if (mdc.data) + assert(mdc.data); + else + assert(mdc.so == dc->so+ofs); +#endif + *pout = out; } @@ -497,8 +514,6 @@ DeltaInfo* DIV_closest_chunk(const DeltaInfoVector* vec, ull ofs) return DIV_last(vec); } -// forward declaration -const uchar* next_delta_info(const uchar*, DeltaChunk*); // Return the amount of chunks a slice at the given spot would have, as well as // its size in bytes it would have if the possibly partial chunks would be encoded @@ -558,10 +573,11 @@ uint DIV_count_slice_bytes(const DeltaInfoVector* src, uint ofs, uint size) // data chunk stream // Return: number of chunks in the slice inline -uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar* dest, ull tofs, uint size) +uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar** dest, ull tofs, uint size) { assert(DIV_lbound(src) <= tofs); assert((tofs + size) <= DIV_info_rbound(src, DIV_last(src))); + fprintf(stderr, "copy_slice: ofs = %i, size = %i\n", (int)tofs, size); DeltaChunk dc; DC_init(&dc, 0, 0, 0, NULL); @@ -573,14 +589,12 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar* dest, ull tofs, uint s if (cdi->to != tofs) { const uint relofs = tofs - cdi->to; next_delta_info(src->dstream + cdi->dso, &dc); - const uint cdisize = dc.ts; - const uint max_size = cdisize - relofs < size ? cdisize - relofs : size; + const uint max_size = dc.ts - relofs < size ? dc.ts - relofs : size; size -= max_size; // adjust dc proportions - - DC_encode_to(&dc, &dest, relofs, max_size); + DC_encode_to(&dc, dest, relofs, max_size); num_chunks += 1; cdi += 1; @@ -599,10 +613,10 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar* dest, ull tofs, uint s // Full copy would be possible, but the final length of the dstream // needs to be used as well to know how many bytes to copy // TODO: make a DIV_ function for this - DC_encode_to(&dc, &dest, 0, dc.ts); + DC_encode_to(&dc, dest, 0, dc.ts); size -= dc.ts; } else { - DC_encode_to(&dc, &dest, 0, size); + DC_encode_to(&dc, dest, 0, size); size = 0; break; } @@ -619,98 +633,90 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) { assert(tsi->num_chunks); - typedef struct { - uint bofs; // byte-offset of delta stream - uint dofs; // delta stream offset relative to tsi->cstart - } OffsetInfo; - - - OffsetInfo *const offset_array = PyMem_Malloc(tsi->num_chunks * sizeof(OffsetInfo)); - if (!offset_array){ - return 0; - } - - OffsetInfo* pofs = offset_array; - uint num_addbytes = 0; - int bytes = 0; - uint dofs = 0; + uint num_bytes = 0; const uchar* data = TSI_first(tsi); - const uchar* prev_data = data; - const uchar const* dend = TSI_end(tsi); + const uchar* dend = TSI_end(tsi); DeltaChunk dc; DC_init(&dc, 0, 0, 0, NULL); - // OFFSET RUN - for (;data < dend; pofs++, prev_data = data) + // COMPUTE SIZE OF TARGET STREAM + ///////////////////////////////// + for (;data < dend;) { - pofs->bofs = num_addbytes; data = next_delta_info(data, &dc); - assert(data); - pofs->dofs = dofs; - dofs += (uint)(data-prev_data); + DC_print(&dc, "count"); // Data chunks don't need processing if (dc.data){ + num_bytes += 1 + dc.ts; continue; } - // offset the next chunk by the amount of chunks in the slice - // - N, because we replace our own chunk's bytes - bytes = DIV_count_slice_bytes(div, dc.so, dc.ts) - (data - prev_data); - // if we shrink in size, compensate this by moving the start virtually - // - if (bytes < 0){ - fprintf(stderr, "hit negative bytes: %i\n", bytes); - tsi->cstart += abs(bytes); - } - num_addbytes += abs(bytes); + num_bytes += DIV_count_slice_bytes(div, dc.so, dc.ts); } - assert(DC_rbound(&dc) == tsi->target_size); - // reserve enough memory to hold all the new chunks - TSI_resize(tsi, tsi->tdslen + num_addbytes); - const OffsetInfo const* pofs_start = offset_array - 1; - const OffsetInfo* cpofs; - uchar* ds; // pointer into the delta stream - const uchar* nds; // next pointer, used for size retrieving the size - uint num_addchunks = 0; // total amount of chunks added + // GET NEW DELTA BUFFER + //////////////////////// + uchar *const dstream = PyMem_Malloc(num_bytes); + if (!dstream){ + return 0; + } + + + data = TSI_first(tsi); + const uchar *ndata = data; + dend = TSI_end(tsi); + + uint num_chunks = 0; + uchar* ds = dstream; DC_init(&dc, 0, 0, 0, NULL); - // Insert slices, from the end to the beginning, which allows memcpy - // to be used, with a little help of the offset array - for (cpofs = pofs - 1; cpofs > pofs_start; cpofs--) + // pick slices from the delta and put them into the new stream + for (; data < dend; data = ndata) { - ds = (uchar*)(tsi->cstart + cpofs->dofs); - nds = next_delta_info(ds, &dc); + ndata = next_delta_info(data, &dc); + + DC_print(&dc, "slice"); // Data chunks don't need processing if (dc.data){ - // NOTE: could peek the preceeding chunks to figure out whether they are - // all just moved by ofs. In that case, they can move as a whole! - // tests showed that this is very rare though, even in huge deltas, so its - // not worth the extra effort - if (cpofs->bofs){ - memcpy((void*)(ds + cpofs->bofs), (void*)ds, nds - ds); - // memmove((void*)(ds + cpofs->bofs), (void*)ds, nds - ds); - } + // just copy it over + memcpy((void*)ds, (void*)data, ndata - data); + ds += ndata - data; + num_chunks += 1; continue; } - // Copy Chunks - target offset is determined by their location and size - // hence it doesn't need specific adjustment - num_addchunks += DIV_copy_slice_to(div, ds + cpofs->bofs, dc.so, dc.ts); - // -1 chunks because we overwrite our own chunk ( by not copying it ) - num_addchunks -= 1; + // Copy Chunks + num_chunks += DIV_copy_slice_to(div, &ds, dc.so, dc.ts); } + assert(ds - dstream == num_bytes); + assert(num_chunks >= tsi->num_chunks); + assert(DC_rbound(&dc) == tsi->target_size); + + // finally, replace the streams + TSI_replace_stream(tsi, dstream, num_bytes); + tsi->cstart = dstream; // we have NO header ! + assert(tsi->tds == dstream); + tsi->num_chunks = num_chunks; - tsi->num_chunks += num_addchunks; +#ifdef DEBUG + data = TSI_first(tsi); + dend = TSI_end(tsi); + + DC_init(&dc, 0, 0, 0, NULL); + + while (data < dend){ + data = next_delta_info(data, &dc); + DC_print(&dc, "debug"); + } +#endif - PyMem_Free(offset_array); return 1; } @@ -754,6 +760,7 @@ PyObject* DCL_py_rbound(DeltaChunkList* self) static PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) { + fprintf(stderr, "DCL_apply\n"); PyObject* pybuf = 0; PyObject* writeproc = 0; @@ -890,6 +897,7 @@ const uchar* next_delta_info(const uchar* data, DeltaChunk* dc) data += cmd; } else { PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); + assert(0); return NULL; } @@ -1048,7 +1056,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) #ifdef DEBUG fprintf(stderr, "------------ Stream %i --------\n ", (int)dsi); - fprintf(stderr, "Before Connect: tdsinfo->num_chunks = %i, tdsinfo->bytelen = %i\n", (int)tdsinfo.num_chunks, (int)tdsinfo.tdslen); + fprintf(stderr, "Before Connect: tdsinfo: num_chunks = %i, bytelen = %i, target_size = %i\n", (int)tdsinfo.num_chunks, (int)tdsinfo.tdslen, (int)tdsinfo.target_size); fprintf(stderr, "div->num_chunks = %i, div->reserved_size = %i, div->bytelen=%i\n", (int)div.size, (int)div.reserved_size, (int)dlen); #endif From 81a96250f1758844a1c95f0293083c18c4ce98dc Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 18 Oct 2010 20:37:39 +0200 Subject: [PATCH 0116/2375] Removed all debug code, it now runs about as fast as the previous version, but with less memory, still slower than the brute force version though --- _delta_apply.c | 37 +++---------------------------------- 1 file changed, 3 insertions(+), 34 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index 71d5b5f8c..068d89a17 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -132,7 +132,6 @@ bool TSI_copy_stream_from_object(ToplevelStreamInfo* info) void TSI_replace_stream(ToplevelStreamInfo* info, const uchar* stream, uint streamlen) { assert(info->parent_object == 0); - fprintf(stderr, "TSI_replace_stream\n"); uint ofs = (uint)(info->cstart - info->tds); if (info->tds){ @@ -211,8 +210,6 @@ inline void DC_encode_to(const DeltaChunk* dc, uchar** pout, uint ofs, uint size) { uchar* out = *pout; - DC_print(dc, "DC_encode_to"); - fprintf(stderr, "DC_encode_to: ofs = %i, size = %i\n" , ofs, size); if (dc->data){ *out++ = (uchar)size; memcpy(out, dc->data+ofs, size); @@ -239,17 +236,6 @@ void DC_encode_to(const DeltaChunk* dc, uchar** pout, uint ofs, uint size) *op = i; } -#ifdef DEBUG - DeltaChunk mdc; - DC_init(&mdc, 0, 0, 0, NULL); - next_delta_info(*pout, &mdc); - assert(mdc.ts == size); - if (mdc.data) - assert(mdc.data); - else - assert(mdc.so == dc->so+ofs); -#endif - *pout = out; } @@ -577,7 +563,6 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar** dest, ull tofs, uint { assert(DIV_lbound(src) <= tofs); assert((tofs + size) <= DIV_info_rbound(src, DIV_last(src))); - fprintf(stderr, "copy_slice: ofs = %i, size = %i\n", (int)tofs, size); DeltaChunk dc; DC_init(&dc, 0, 0, 0, NULL); @@ -647,7 +632,6 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) for (;data < dend;) { data = next_delta_info(data, &dc); - DC_print(&dc, "count"); // Data chunks don't need processing if (dc.data){ @@ -681,8 +665,6 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) { ndata = next_delta_info(data, &dc); - DC_print(&dc, "slice"); - // Data chunks don't need processing if (dc.data){ // just copy it over @@ -705,17 +687,6 @@ bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) assert(tsi->tds == dstream); tsi->num_chunks = num_chunks; -#ifdef DEBUG - data = TSI_first(tsi); - dend = TSI_end(tsi); - - DC_init(&dc, 0, 0, 0, NULL); - - while (data < dend){ - data = next_delta_info(data, &dc); - DC_print(&dc, "debug"); - } -#endif return 1; @@ -760,8 +731,6 @@ PyObject* DCL_py_rbound(DeltaChunkList* self) static PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) { - fprintf(stderr, "DCL_apply\n"); - PyObject* pybuf = 0; PyObject* writeproc = 0; if (!PyArg_ParseTuple(args, "OO", &pybuf, &writeproc)){ @@ -1056,8 +1025,8 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) #ifdef DEBUG fprintf(stderr, "------------ Stream %i --------\n ", (int)dsi); - fprintf(stderr, "Before Connect: tdsinfo: num_chunks = %i, bytelen = %i, target_size = %i\n", (int)tdsinfo.num_chunks, (int)tdsinfo.tdslen, (int)tdsinfo.target_size); - fprintf(stderr, "div->num_chunks = %i, div->reserved_size = %i, div->bytelen=%i\n", (int)div.size, (int)div.reserved_size, (int)dlen); + fprintf(stderr, "Before Connect: tdsinfo: num_chunks = %i, bytelen = %i KiB, target_size = %i KiB\n", (int)tdsinfo.num_chunks, (int)tdsinfo.tdslen/1000, (int)tdsinfo.target_size/1000); + fprintf(stderr, "div->num_chunks = %i, div->reserved_size = %i, div->bytelen=%i KiB\n", (int)div.size, (int)div.reserved_size, (int)dlen/1000); #endif if (!DIV_connect_with_base(&tdsinfo, &div)){ @@ -1065,7 +1034,7 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) } #ifdef DEBUG - fprintf(stderr, "after connect: tdsinfo->num_chunks = %i, tdsinfo->bytelen = %i\n", (int)tdsinfo.num_chunks, (int)tdsinfo.tdslen); + fprintf(stderr, "after connect: tdsinfo->num_chunks = %i, tdsinfo->bytelen = %i KiB\n", (int)tdsinfo.num_chunks, (int)tdsinfo.tdslen/1000); #endif // destroy members, but keep memory From ca829e0b341dd5c3ae1408b24702f2c75db6ec73 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 18 Oct 2010 21:12:42 +0200 Subject: [PATCH 0117/2375] now byte-copying a few chunks where possible when slicing, which gives a few percent of performance --- _delta_apply.c | 20 +++++++++----------- stream.py | 2 +- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/_delta_apply.c b/_delta_apply.c index 068d89a17..e99a803be 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -534,13 +534,12 @@ uint DIV_count_slice_bytes(const DeltaInfoVector* src, uint ofs, uint size) } const DeltaInfo const* vecend = DIV_end(src); + const uchar* nstream; for( ;cdi < vecend; ++cdi){ - next_delta_info(src->dstream + cdi->dso, &dc); + nstream = next_delta_info(src->dstream + cdi->dso, &dc); if (dc.ts < size) { - // TODO: could just count size of the delta chunk in the stream instead - // of reencoding - num_bytes += DC_count_encode_bytes(&dc); + num_bytes += nstream - (src->dstream + cdi->dso); size -= dc.ts; } else { dc.ts = size; @@ -589,16 +588,15 @@ uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar** dest, ull tofs, uint } } - const DeltaInfo* vecend = DIV_end(src); - for( ;cdi < vecend; ++cdi) + const uchar* dstream = src->dstream + cdi->dso; + const uchar* nstream = dstream; + for( ; nstream; dstream = nstream) { num_chunks += 1; - next_delta_info(src->dstream + cdi->dso, &dc); + nstream = next_delta_info(dstream, &dc); if (dc.ts < size) { - // Full copy would be possible, but the final length of the dstream - // needs to be used as well to know how many bytes to copy - // TODO: make a DIV_ function for this - DC_encode_to(&dc, dest, 0, dc.ts); + memcpy(*dest, dstream, nstream - dstream); + *dest += nstream - dstream; size -= dc.ts; } else { DC_encode_to(&dc, dest, 0, size); diff --git a/stream.py b/stream.py index 0d8972898..f522bd318 100644 --- a/stream.py +++ b/stream.py @@ -445,7 +445,7 @@ def _set_cache_brute_(self, attr): #{ Configuration - if not has_perf_mod: + if has_perf_mod: _set_cache_ = _set_cache_brute_ else: _set_cache_ = _set_cache_too_slow_without_c From 21e2b5db748f18f70f16cd94ee9fd5adf16ce433 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 18 Oct 2010 21:31:41 +0200 Subject: [PATCH 0118/2375] Updated algorithm paper with the latest changes - thats it for now --- doc/source/algorithm.rst | 18 ++++++++---------- test/performance/test_pack.py | 4 ++-- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/doc/source/algorithm.rst b/doc/source/algorithm.rst index 55207b67b..4374cb820 100644 --- a/doc/source/algorithm.rst +++ b/doc/source/algorithm.rst @@ -58,10 +58,10 @@ GitDB's reverse delta aggregation algorithm =========================================== The idea of this algorithm is to merge all delta streams into one, which can then be applied in just one go. -In the current implementation, delta streams are parsed into DeltaChunks (->**DC**), which are kept in vectors. Each DC represents one copy-from-base operation, or one or multiple consecutive add-bytes operations. DeltaChunks know about their target offset in the target buffer, and their size. Their target offsets are consecutive, i.e. one chunk ends where the next one begins, regarding their logical extend in the target buffer. +In the current implementation, delta streams are parsed into DeltaChunks (->**DC**). Each DC represents one copy-from-base operation, or one or multiple consecutive add-bytes operations. DeltaChunks know about their target offset in the target buffer, and their size. Their target offsets are consecutive, i.e. one chunk ends where the next one begins, regarding their logical extend in the target buffer. Add-bytes DCs additional store their data to apply, copy-from-base DCs store the offset into the base buffer from which to copy bytes. -During processing, one starts with the latest (i.e. topmost) delta stream (->**TDS**), and iterates through its ancestor delta streams (->ADS) to merge them into the growing toplevel delta stream. +During processing, one starts with the latest (i.e. topmost) delta stream (->**TDS**), and iterates through its ancestor delta streams (->ADS) to merge them into the growing toplevel delta stream.. The merging works by following a set of rules: * Merge into the top-level delta from the youngest ancestor delta to the oldest one @@ -72,10 +72,9 @@ The merging works by following a set of rules: * Finish the merge once all ADS have been handled, or once the TDS only consists of add-byte DCs. The remaining copy-from-base DCs will copy from the original base buffer accordingly. -Applying the TDS is as straightforward as applying any other DS. The base buffer is required to be kept in memory. In the current implementation, a full-size target buffer is allocated to hold the result of applying the chunk information. +Applying the TDS is as straightforward as applying any other DS. The base buffer is required to be kept in memory. In the current implementation, a full-size target buffer is allocated to hold the result of applying the chunk information. Here it is already possible to stream the result, which is feasible only if the memory of the base buffer + the memory of the TDS are smaller than a full size target buffer. Streaming will always make sense if the peak resulting from having the base, target and TDS buffers in memory together is unaffordable. -The memory consumption during the TDS processing are the uncompressed delta-bytes, the parsed DS, as well as the TDS. Afterwards one requires an allocated base buffer, the target buffer, as well as the TDS. -It is clearly visible that the current implementation does not at all reduce memory consumption, but the opposite is true as the TDS can be large for large files. +The memory consumption during the TDS processing is only the condensed delta-bytes, for each ADS an additional index is required which costs 8 byte per DC. When applying the TDS, one requires an allocated base buffer too.The target buffer can be allocated, but may be a writer as well. Performance Results ------------------- @@ -83,17 +82,16 @@ The benchmarking context was the same as for the brute-force GitDB algorithm. Th The biggest performance bottleneck is the slicing of the parsed delta streams, where the program spends most of its time due to hundred thousands of calls. To get a more usable version of the algorithm, it was implemented in C, such that python must do no more than two calls to get all the work done. The first prepares the TDS, the second applies it, writing it into a target buffer. -The throughput reaches 16.7 MiB/s, which equals 1344 streams/s, which makes it 15 times faster than the pure python version, and amazingly even 1.5 times faster than the brute-force C implementation. As a comparison, cgit is able to stream about 20 MiB when controlling it through a pipe. GitDBs performance may still improve once pack access is reimplemented in C as well. +The throughput reaches 15.2 MiB/s, which equals 1221 streams/s, which makes it nearly 14 times faster than the pure python version, and amazingly even 1.35 times faster than the brute-force C implementation. As a comparison, cgit is able to stream about 20 MiB when controlling it through a pipe. GitDBs performance may still improve once pack access is reimplemented in C as well. -All this comes at a relatively high memory consumption.Additionally, with each new level being merged, not only are more DCs inserted, but the new chunks may get smaller as well. This can reach a point where one chunk only represents an individual byte, so the size of the data structure outweighs the logical chunk size by far. - -A 125 MB file took 3.1 seconds to unpack for instance, which is only 33% slower than the c implementation of the brute-force algorithm. +A 125 MB file took 2.5 seconds to unpack for instance, which is only 20% slower than the c implementation of the brute-force algorithm. Future work =========== -The current implementation of the reverse delta aggregation algorithm is already working well and fast, but leaves room for improvement in the realm of its memory consumption. One way to considerably reduce it would be to index the delta stream to determine bounds, instead of parsing it into a separate data structure Another very promising option is that streaming of delta data is indeed possible. Depending on the configuration of the copy-from-base operations, different optimizations could be applied to reduce the amount of memory required for the final processed delta stream. Some configurations may even allow it to stream data from the base buffer, instead of pre-loading it for random access. The ability to stream files at reduced memory costs would only be feasible for big files, and would have to be payed with extra pre-processing time. + +A very first and simple implementation could avoid memory peaks by streaming the TDS in conjunction with a base buffer, instead of writing everything into a fully allocated target buffer. diff --git a/test/performance/test_pack.py b/test/performance/test_pack.py index f9169ffb0..32890dcb3 100644 --- a/test/performance/test_pack.py +++ b/test/performance/test_pack.py @@ -13,7 +13,7 @@ class TestPackedDBPerformance(TestBigRepoR): - def test_pack_random_access(self): + def _test_pack_random_access(self): pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) # sha lookup @@ -61,7 +61,7 @@ def test_pack_random_access(self): total_kib = total_size / 1000 print >> sys.stderr, "PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (max_items, total_kib, total_kib/elapsed , elapsed, max_items / elapsed) - def _disabled_test_correctness(self): + def test_correctness(self): pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) # disabled for now as it used to work perfectly, checking big repositories takes a long time print >> sys.stderr, "Endurance run: verify streaming of objects (crc and sha)" From 2ddc5bad224d8f545ef3bb2ab3df98dfe063c5b6 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 12 Nov 2010 18:49:01 +0100 Subject: [PATCH 0119/2375] Updated to latest revision of async to support new thread-shutdown functionality --- ext/async | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/async b/ext/async index 5992bb6c8..7298742e1 160000 --- a/ext/async +++ b/ext/async @@ -1 +1 @@ -Subproject commit 5992bb6c85973ed81c54c71fef42e2413cd29e88 +Subproject commit 7298742e1b7236f2a4e369f915722a6618cef736 From 2a048f43d89112ff1f78ee05b59a9663e981f63f Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 18 Nov 2010 23:42:14 +0100 Subject: [PATCH 0120/2375] Changed name/id of async submodule to something that doesn't look like a path --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 45ddc0b4c..9adc6121b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "ext/async"] +[submodule "async"] path = ext/async url = git://gitorious.org/git-python/async.git From 479ac8efc6aa6c579cba48bbb87f85f1cd0654f5 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 20 Nov 2010 22:51:56 +0100 Subject: [PATCH 0121/2375] bumped version to 0.5.2 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 7e50e0fe7..6ebef0fa7 100755 --- a/setup.py +++ b/setup.py @@ -68,7 +68,7 @@ def get_data_files(self): setup(cmdclass={'build_ext':build_ext_nofail}, name = "gitdb", - version = "0.5.1", + version = "0.5.2", description = "Git Object Database", author = "Sebastian Thiel", author_email = "byronimo@gmail.com", From dd4704095dbdc2770b9289b491bb166fa1d36a8d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 20 Nov 2010 22:59:24 +0100 Subject: [PATCH 0122/2375] Updated changelog for 0.5.2 --- doc/source/changes.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 84738ae05..7b8ebecc6 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -1,6 +1,12 @@ ######### Changelog ######### + +***** +0.5.2 +***** +* Improved performance of the c implementation, which now uses reverse-delta-aggregation to make a memory bound operation CPU bound. + ***** 0.5.1 ***** From 5d91a53372caa54cf7110cfa7fe1166956edc9c8 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 21 Nov 2010 11:37:20 +0100 Subject: [PATCH 0123/2375] setup: added missing _delta_apply.c file to setup script, allowing the performance module to be compiled --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 6ebef0fa7..c7d0bd81c 100755 --- a/setup.py +++ b/setup.py @@ -77,7 +77,7 @@ def get_data_files(self): package_data={'gitdb' : ['AUTHORS', 'README'], 'gitdb.test' : ['fixtures/packs/*', 'fixtures/objects/7b/*']}, package_dir = {'gitdb':''}, - ext_modules=[Extension('gitdb._perf', ['_fun.c'])], + ext_modules=[Extension('gitdb._perf', ['_fun.c', '_delta_apply.c'])], license = "BSD License", requires=('async (>=0.6.1)',), install_requires='async >= 0.6.1', From 6edc28d6ab8b3f88673fd701b2c40104825a95df Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 21 Nov 2010 11:54:00 +0100 Subject: [PATCH 0124/2375] Added delta_apply.h file to make more native use of python's build system, which should hopefully fix the easy_install trouble --- MANIFEST.in | 2 ++ _delta_apply.c | 4 +++- _delta_apply.h | 6 ++++++ _fun.c | 2 +- setup.py | 3 ++- 5 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 _delta_apply.h diff --git a/MANIFEST.in b/MANIFEST.in index a01acc452..7693cabf8 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -5,6 +5,8 @@ include AUTHORS include README include _fun.c +include _delta_apply.c +include _delta_apply.h graft test diff --git a/_delta_apply.c b/_delta_apply.c index e99a803be..96ab30af9 100644 --- a/_delta_apply.c +++ b/_delta_apply.c @@ -1,10 +1,12 @@ -#include +#include "_delta_apply.h" #include #include #include #include #include + + typedef unsigned long long ull; typedef unsigned int uint; typedef unsigned char uchar; diff --git a/_delta_apply.h b/_delta_apply.h new file mode 100644 index 000000000..3e7e5f926 --- /dev/null +++ b/_delta_apply.h @@ -0,0 +1,6 @@ +#include + +static PyObject* connect_deltas(PyObject *self, PyObject *dstreams); +static PyObject* apply_delta(PyObject* self, PyObject* args); + +static PyTypeObject DeltaChunkListType; diff --git a/_fun.c b/_fun.c index befee4ec4..49970386f 100644 --- a/_fun.c +++ b/_fun.c @@ -1,5 +1,5 @@ #include -#include "_delta_apply.c" +#include "_delta_apply.h" static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) { diff --git a/setup.py b/setup.py index c7d0bd81c..3a95ac845 100755 --- a/setup.py +++ b/setup.py @@ -23,6 +23,7 @@ def run(self): except Exception: print "Ignored failure when building extensions, pure python modules will be used instead" # END ignore errors + def get_data_files(self): """Can you feel the pain ? So, in python2.5 and python2.4 coming with maya, @@ -77,7 +78,7 @@ def get_data_files(self): package_data={'gitdb' : ['AUTHORS', 'README'], 'gitdb.test' : ['fixtures/packs/*', 'fixtures/objects/7b/*']}, package_dir = {'gitdb':''}, - ext_modules=[Extension('gitdb._perf', ['_fun.c', '_delta_apply.c'])], + ext_modules=[Extension('gitdb._perf', ['_fun.c', '_delta_apply.c'], include_dirs=['.'])], license = "BSD License", requires=('async (>=0.6.1)',), install_requires='async >= 0.6.1', From 1bc281d31b8d31fd4dcbcd9b441b5c7b2c1b0bb5 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 21 Nov 2010 13:09:09 +0100 Subject: [PATCH 0125/2375] Added zip_safe flag to setup.py --- ext/async | 2 +- setup.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ext/async b/ext/async index 7298742e1..eccf3d63c 160000 --- a/ext/async +++ b/ext/async @@ -1 +1 @@ -Subproject commit 7298742e1b7236f2a4e369f915722a6618cef736 +Subproject commit eccf3d63c655e7a184ba339d747c98e965c1a63b diff --git a/setup.py b/setup.py index 3a95ac845..d235c91df 100755 --- a/setup.py +++ b/setup.py @@ -80,6 +80,7 @@ def get_data_files(self): package_dir = {'gitdb':''}, ext_modules=[Extension('gitdb._perf', ['_fun.c', '_delta_apply.c'], include_dirs=['.'])], license = "BSD License", + zip_safe=False, requires=('async (>=0.6.1)',), install_requires='async >= 0.6.1', long_description = """GitDB is a pure-Python git object database""" From 9f977b8baaf9cbe9b38f3bdf4887cef5370b2229 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 25 Nov 2010 17:04:55 +0100 Subject: [PATCH 0126/2375] Switched async submodule to using github instead of gitorious --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 9adc6121b..42efc2ed6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "async"] path = ext/async - url = git://gitorious.org/git-python/async.git + url = git://github.com/Byron/async.git From c0d5448fcd5ed6427ea96be01ef2d3ee509f3924 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 30 Nov 2010 23:09:53 +0100 Subject: [PATCH 0127/2375] Ajusted all links to point to new repository on github --- README => README.rst | 5 ++--- doc/source/intro.rst | 5 ++--- ext/async | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) rename README => README.rst (84%) diff --git a/README b/README.rst similarity index 84% rename from README rename to README.rst index 33a566d86..753eb701c 100644 --- a/README +++ b/README.rst @@ -15,8 +15,7 @@ SOURCE ====== The source is available in a git repository at gitorious and github: -git://gitorious.org/git-python/gitdb.git -git://github.com/Byron/gitdb.git +git://github.com/gitpython-developers/gitdb.git Once the clone is complete, please be sure to initialize the submodules using @@ -33,7 +32,7 @@ http://groups.google.com/group/git-python ISSUE TRACKER ============= -http://byronimo.lighthouseapp.com/projects/51787-gitpython +https://github.com/gitpython-developers/gitdb/issues LICENSE ======= diff --git a/doc/source/intro.rst b/doc/source/intro.rst index 4d675cbc4..8fc0ec098 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -29,10 +29,9 @@ It is advised to have a look at the :ref:`Usage Guide ` for a br ================= Source Repository ================= -The latest source can be cloned using git from one of the following locations: +The latest source can be cloned using git from github: - * git://gitorious.org/git-python/gitdb.git - * git://github.com/Byron/gitdb.git + * git://github.com/gitpython-developers/gitdb.git License Information =================== diff --git a/ext/async b/ext/async index eccf3d63c..89790abd2 160000 --- a/ext/async +++ b/ext/async @@ -1 +1 @@ -Subproject commit eccf3d63c655e7a184ba339d747c98e965c1a63b +Subproject commit 89790abd29bb4be851095b2f2c4c624b896b6e20 From 9fbc59da76b15cecb1ee37a8e48617fab58a077c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 30 Nov 2010 23:24:07 +0100 Subject: [PATCH 0128/2375] moved all relevant files into the gitdb folder. Submodule relinked to point to new github location, and moved as well --- .gitmodules | 4 ++-- __init__.py => gitdb/__init__.py | 0 _delta_apply.c => gitdb/_delta_apply.c | 0 _delta_apply.h => gitdb/_delta_apply.h | 0 _fun.c => gitdb/_fun.c | 0 base.py => gitdb/base.py | 0 {db => gitdb/db}/__init__.py | 0 {db => gitdb/db}/base.py | 0 {db => gitdb/db}/git.py | 0 {db => gitdb/db}/loose.py | 0 {db => gitdb/db}/mem.py | 0 {db => gitdb/db}/pack.py | 0 {db => gitdb/db}/ref.py | 0 exc.py => gitdb/exc.py | 0 {ext => gitdb/ext}/async | 0 fun.py => gitdb/fun.py | 0 pack.py => gitdb/pack.py | 0 stream.py => gitdb/stream.py | 0 {test => gitdb/test}/__init__.py | 0 {test => gitdb/test}/db/__init__.py | 0 {test => gitdb/test}/db/lib.py | 0 {test => gitdb/test}/db/test_git.py | 0 {test => gitdb/test}/db/test_loose.py | 0 {test => gitdb/test}/db/test_mem.py | 0 {test => gitdb/test}/db/test_pack.py | 0 {test => gitdb/test}/db/test_ref.py | 0 .../7b/b839852ed5e3a069966281bb08d50012fb309b | Bin ...ack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx | Bin ...ck-11fdfa9e156ab73caae3b6da867192221f2089c2.pack | Bin ...ack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx | Bin ...ck-a2bf8e71d8c18879e499335762dd95119d93d9f1.pack | Bin ...ack-c0438c19fb16422b6bbcce24387b3264416d485b.idx | Bin ...ck-c0438c19fb16422b6bbcce24387b3264416d485b.pack | Bin {test => gitdb/test}/lib.py | 0 {test => gitdb/test}/performance/lib.py | 0 {test => gitdb/test}/performance/test_pack.py | 0 .../test}/performance/test_pack_streaming.py | 0 {test => gitdb/test}/performance/test_stream.py | 0 {test => gitdb/test}/test_base.py | 0 {test => gitdb/test}/test_example.py | 0 {test => gitdb/test}/test_pack.py | 0 {test => gitdb/test}/test_stream.py | 0 {test => gitdb/test}/test_util.py | 0 typ.py => gitdb/typ.py | 0 util.py => gitdb/util.py | 0 45 files changed, 2 insertions(+), 2 deletions(-) rename __init__.py => gitdb/__init__.py (100%) rename _delta_apply.c => gitdb/_delta_apply.c (100%) rename _delta_apply.h => gitdb/_delta_apply.h (100%) rename _fun.c => gitdb/_fun.c (100%) rename base.py => gitdb/base.py (100%) rename {db => gitdb/db}/__init__.py (100%) rename {db => gitdb/db}/base.py (100%) rename {db => gitdb/db}/git.py (100%) rename {db => gitdb/db}/loose.py (100%) rename {db => gitdb/db}/mem.py (100%) rename {db => gitdb/db}/pack.py (100%) rename {db => gitdb/db}/ref.py (100%) rename exc.py => gitdb/exc.py (100%) rename {ext => gitdb/ext}/async (100%) rename fun.py => gitdb/fun.py (100%) rename pack.py => gitdb/pack.py (100%) rename stream.py => gitdb/stream.py (100%) rename {test => gitdb/test}/__init__.py (100%) rename {test => gitdb/test}/db/__init__.py (100%) rename {test => gitdb/test}/db/lib.py (100%) rename {test => gitdb/test}/db/test_git.py (100%) rename {test => gitdb/test}/db/test_loose.py (100%) rename {test => gitdb/test}/db/test_mem.py (100%) rename {test => gitdb/test}/db/test_pack.py (100%) rename {test => gitdb/test}/db/test_ref.py (100%) rename {test => gitdb/test}/fixtures/objects/7b/b839852ed5e3a069966281bb08d50012fb309b (100%) rename {test => gitdb/test}/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx (100%) rename {test => gitdb/test}/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.pack (100%) rename {test => gitdb/test}/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx (100%) rename {test => gitdb/test}/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.pack (100%) rename {test => gitdb/test}/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx (100%) rename {test => gitdb/test}/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack (100%) rename {test => gitdb/test}/lib.py (100%) rename {test => gitdb/test}/performance/lib.py (100%) rename {test => gitdb/test}/performance/test_pack.py (100%) rename {test => gitdb/test}/performance/test_pack_streaming.py (100%) rename {test => gitdb/test}/performance/test_stream.py (100%) rename {test => gitdb/test}/test_base.py (100%) rename {test => gitdb/test}/test_example.py (100%) rename {test => gitdb/test}/test_pack.py (100%) rename {test => gitdb/test}/test_stream.py (100%) rename {test => gitdb/test}/test_util.py (100%) rename typ.py => gitdb/typ.py (100%) rename util.py => gitdb/util.py (100%) diff --git a/.gitmodules b/.gitmodules index 42efc2ed6..9f06f7d07 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "async"] - path = ext/async - url = git://github.com/Byron/async.git + path = gitdb/ext/async + url = git://github.com/gitpython-developers/async.git diff --git a/__init__.py b/gitdb/__init__.py similarity index 100% rename from __init__.py rename to gitdb/__init__.py diff --git a/_delta_apply.c b/gitdb/_delta_apply.c similarity index 100% rename from _delta_apply.c rename to gitdb/_delta_apply.c diff --git a/_delta_apply.h b/gitdb/_delta_apply.h similarity index 100% rename from _delta_apply.h rename to gitdb/_delta_apply.h diff --git a/_fun.c b/gitdb/_fun.c similarity index 100% rename from _fun.c rename to gitdb/_fun.c diff --git a/base.py b/gitdb/base.py similarity index 100% rename from base.py rename to gitdb/base.py diff --git a/db/__init__.py b/gitdb/db/__init__.py similarity index 100% rename from db/__init__.py rename to gitdb/db/__init__.py diff --git a/db/base.py b/gitdb/db/base.py similarity index 100% rename from db/base.py rename to gitdb/db/base.py diff --git a/db/git.py b/gitdb/db/git.py similarity index 100% rename from db/git.py rename to gitdb/db/git.py diff --git a/db/loose.py b/gitdb/db/loose.py similarity index 100% rename from db/loose.py rename to gitdb/db/loose.py diff --git a/db/mem.py b/gitdb/db/mem.py similarity index 100% rename from db/mem.py rename to gitdb/db/mem.py diff --git a/db/pack.py b/gitdb/db/pack.py similarity index 100% rename from db/pack.py rename to gitdb/db/pack.py diff --git a/db/ref.py b/gitdb/db/ref.py similarity index 100% rename from db/ref.py rename to gitdb/db/ref.py diff --git a/exc.py b/gitdb/exc.py similarity index 100% rename from exc.py rename to gitdb/exc.py diff --git a/ext/async b/gitdb/ext/async similarity index 100% rename from ext/async rename to gitdb/ext/async diff --git a/fun.py b/gitdb/fun.py similarity index 100% rename from fun.py rename to gitdb/fun.py diff --git a/pack.py b/gitdb/pack.py similarity index 100% rename from pack.py rename to gitdb/pack.py diff --git a/stream.py b/gitdb/stream.py similarity index 100% rename from stream.py rename to gitdb/stream.py diff --git a/test/__init__.py b/gitdb/test/__init__.py similarity index 100% rename from test/__init__.py rename to gitdb/test/__init__.py diff --git a/test/db/__init__.py b/gitdb/test/db/__init__.py similarity index 100% rename from test/db/__init__.py rename to gitdb/test/db/__init__.py diff --git a/test/db/lib.py b/gitdb/test/db/lib.py similarity index 100% rename from test/db/lib.py rename to gitdb/test/db/lib.py diff --git a/test/db/test_git.py b/gitdb/test/db/test_git.py similarity index 100% rename from test/db/test_git.py rename to gitdb/test/db/test_git.py diff --git a/test/db/test_loose.py b/gitdb/test/db/test_loose.py similarity index 100% rename from test/db/test_loose.py rename to gitdb/test/db/test_loose.py diff --git a/test/db/test_mem.py b/gitdb/test/db/test_mem.py similarity index 100% rename from test/db/test_mem.py rename to gitdb/test/db/test_mem.py diff --git a/test/db/test_pack.py b/gitdb/test/db/test_pack.py similarity index 100% rename from test/db/test_pack.py rename to gitdb/test/db/test_pack.py diff --git a/test/db/test_ref.py b/gitdb/test/db/test_ref.py similarity index 100% rename from test/db/test_ref.py rename to gitdb/test/db/test_ref.py diff --git a/test/fixtures/objects/7b/b839852ed5e3a069966281bb08d50012fb309b b/gitdb/test/fixtures/objects/7b/b839852ed5e3a069966281bb08d50012fb309b similarity index 100% rename from test/fixtures/objects/7b/b839852ed5e3a069966281bb08d50012fb309b rename to gitdb/test/fixtures/objects/7b/b839852ed5e3a069966281bb08d50012fb309b diff --git a/test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx b/gitdb/test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx similarity index 100% rename from test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx rename to gitdb/test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx diff --git a/test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.pack b/gitdb/test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.pack similarity index 100% rename from test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.pack rename to gitdb/test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.pack diff --git a/test/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx b/gitdb/test/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx similarity index 100% rename from test/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx rename to gitdb/test/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx diff --git a/test/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.pack b/gitdb/test/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.pack similarity index 100% rename from test/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.pack rename to gitdb/test/fixtures/packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.pack diff --git a/test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx b/gitdb/test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx similarity index 100% rename from test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx rename to gitdb/test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx diff --git a/test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack b/gitdb/test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack similarity index 100% rename from test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack rename to gitdb/test/fixtures/packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack diff --git a/test/lib.py b/gitdb/test/lib.py similarity index 100% rename from test/lib.py rename to gitdb/test/lib.py diff --git a/test/performance/lib.py b/gitdb/test/performance/lib.py similarity index 100% rename from test/performance/lib.py rename to gitdb/test/performance/lib.py diff --git a/test/performance/test_pack.py b/gitdb/test/performance/test_pack.py similarity index 100% rename from test/performance/test_pack.py rename to gitdb/test/performance/test_pack.py diff --git a/test/performance/test_pack_streaming.py b/gitdb/test/performance/test_pack_streaming.py similarity index 100% rename from test/performance/test_pack_streaming.py rename to gitdb/test/performance/test_pack_streaming.py diff --git a/test/performance/test_stream.py b/gitdb/test/performance/test_stream.py similarity index 100% rename from test/performance/test_stream.py rename to gitdb/test/performance/test_stream.py diff --git a/test/test_base.py b/gitdb/test/test_base.py similarity index 100% rename from test/test_base.py rename to gitdb/test/test_base.py diff --git a/test/test_example.py b/gitdb/test/test_example.py similarity index 100% rename from test/test_example.py rename to gitdb/test/test_example.py diff --git a/test/test_pack.py b/gitdb/test/test_pack.py similarity index 100% rename from test/test_pack.py rename to gitdb/test/test_pack.py diff --git a/test/test_stream.py b/gitdb/test/test_stream.py similarity index 100% rename from test/test_stream.py rename to gitdb/test/test_stream.py diff --git a/test/test_util.py b/gitdb/test/test_util.py similarity index 100% rename from test/test_util.py rename to gitdb/test/test_util.py diff --git a/typ.py b/gitdb/typ.py similarity index 100% rename from typ.py rename to gitdb/typ.py diff --git a/util.py b/gitdb/util.py similarity index 100% rename from util.py rename to gitdb/util.py From 0300d0d6c4af63257d094813ceaab2302906680c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 30 Nov 2010 23:45:49 +0100 Subject: [PATCH 0129/2375] Fixed unittests --- doc/source/tutorial.rst | 2 +- gitdb/__init__.py | 8 +++++++- gitdb/test/db/test_git.py | 2 +- gitdb/test/db/test_pack.py | 3 +-- gitdb/test/db/test_ref.py | 2 +- gitdb/test/test_example.py | 2 +- 6 files changed, 12 insertions(+), 7 deletions(-) diff --git a/doc/source/tutorial.rst b/doc/source/tutorial.rst index cfe3fb284..55a737f6b 100644 --- a/doc/source/tutorial.rst +++ b/doc/source/tutorial.rst @@ -37,7 +37,7 @@ Both have two sets of methods, one of which allows interacting with single objec Acquiring information about an object from a database is easy if you have a SHA1 to refer to the object:: - ldb = LooseObjectDB(fixture_path("../../.git/objects")) + ldb = LooseObjectDB(fixture_path("../../../.git/objects")) for sha1 in ldb.sha_iter(): oinfo = ldb.info(sha1) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index d79788fc4..c8e77759e 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -6,7 +6,13 @@ #{ Initialization def _init_externals(): """Initialize external projects by putting them into the path""" - sys.path.append(os.path.join(os.path.dirname(__file__), 'ext')) + sys.path.append(os.path.join(os.path.dirname(__file__), 'ext', 'async')) + + try: + import async + except ImportError: + raise ImportError("'async' could not be imported, assure it is located in your PYTHONPATH") + #END verify import #} END initialization diff --git a/gitdb/test/db/test_git.py b/gitdb/test/db/test_git.py index d2ae10bad..bcab1fc55 100644 --- a/gitdb/test/db/test_git.py +++ b/gitdb/test/db/test_git.py @@ -7,7 +7,7 @@ class TestGitDB(TestDBBase): def test_reading(self): - gdb = GitDB(fixture_path('../../.git/objects')) + gdb = GitDB(fixture_path('../../../.git/objects')) # we have packs and loose objects, alternates doesn't necessarily exist assert 1 < len(gdb.databases()) < 4 diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index 0386b3f80..1d0cb96e7 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -15,8 +15,7 @@ def test_writing(self, path): pdb = PackedDB(path) # on demand, we init our pack cache - num_packs = 2 - assert len(pdb.entities()) == num_packs + num_packs = len(pdb.entities()) assert pdb._st_mtime != 0 # test pack directory changed: diff --git a/gitdb/test/db/test_ref.py b/gitdb/test/db/test_ref.py index 9df25cef6..af75016b0 100644 --- a/gitdb/test/db/test_ref.py +++ b/gitdb/test/db/test_ref.py @@ -34,7 +34,7 @@ def test_writing(self, path): # setup alternate file # add two, one is invalid - own_repo_path = fixture_path('../../.git/objects') # use own repo + own_repo_path = fixture_path('../../../.git/objects') # use own repo self.make_alt_file(alt_path, [own_repo_path, "invalid/path"]) rdb.update_cache() assert len(rdb.databases()) == 1 diff --git a/gitdb/test/test_example.py b/gitdb/test/test_example.py index 3fc3fcf5e..2d6096132 100644 --- a/gitdb/test/test_example.py +++ b/gitdb/test/test_example.py @@ -11,7 +11,7 @@ class TestExamples(TestBase): def test_base(self): - ldb = LooseObjectDB(fixture_path("../../.git/objects")) + ldb = LooseObjectDB(fixture_path("../../../.git/objects")) for sha1 in ldb.sha_iter(): oinfo = ldb.info(sha1) From 88d500edf2163be3b249ae288a06b725934560d9 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 30 Nov 2010 23:57:16 +0100 Subject: [PATCH 0130/2375] setup and doc generation works once again --- MANIFEST.in | 8 ++++---- doc/source/conf.py | 2 +- gitdb/fun.py | 9 +++++---- gitdb/pack.py | 2 +- setup.py | 7 +++---- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index 7693cabf8..b14aed9b3 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,11 +4,11 @@ include CHANGES include AUTHORS include README -include _fun.c -include _delta_apply.c -include _delta_apply.h +include gitdb/_fun.c +include gitdb/_delta_apply.c +include gitdb/_delta_apply.h -graft test +prune gitdb/test global-exclude .git* global-exclude *.pyc diff --git a/doc/source/conf.py b/doc/source/conf.py index e10addb8d..28deb3106 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -16,7 +16,7 @@ # 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('../../../')) +sys.path.append(os.path.abspath('../../')) # -- General configuration ----------------------------------------------------- diff --git a/gitdb/fun.py b/gitdb/fun.py index 0b14f82ac..fc4172040 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -44,8 +44,7 @@ __all__ = ('is_loose_object', 'loose_object_header_info', 'msb_size', 'pack_object_header_info', 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data', - 'is_equal_canonical_sha', 'reverse_connect_deltas', - 'connect_deltas', 'DeltaChunkList') + 'is_equal_canonical_sha', 'connect_deltas', 'DeltaChunkList') #{ Structures @@ -492,8 +491,10 @@ def stream_copy(read, write, size, chunk_size): return dbw def connect_deltas(dstreams): - """Read the condensed delta chunk information from dstream and merge its information - into a list of existing delta chunks + """ + Read the condensed delta chunk information from dstream and merge its information + into a list of existing delta chunks + :param dstreams: iterable of delta stream objects, the delta to be applied last comes first, then all its ancestors in order :return: DeltaChunkList, containing all operations to apply""" diff --git a/gitdb/pack.py b/gitdb/pack.py index 30da52c63..affcbe275 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -651,7 +651,7 @@ def is_valid_stream(self, sha, use_crc=False): :param use_crc: if True, the index' crc for the sha is used to determine :param sha: 20 byte sha1 of the object whose stream to verify - whether the compressed stream of the object is valid. If it is + whether the compressed stream of the object is valid. If it is a delta, this only verifies that the delta's data is valid, not the data of the actual undeltified object, as it depends on more than just this stream. diff --git a/setup.py b/setup.py index d235c91df..3c6617422 100755 --- a/setup.py +++ b/setup.py @@ -75,10 +75,9 @@ def get_data_files(self): author_email = "byronimo@gmail.com", url = "http://gitorious.org/git-python/gitdb", packages = ('gitdb', 'gitdb.db', 'gitdb.test', 'gitdb.test.db', 'gitdb.test.performance'), - package_data={'gitdb' : ['AUTHORS', 'README'], - 'gitdb.test' : ['fixtures/packs/*', 'fixtures/objects/7b/*']}, - package_dir = {'gitdb':''}, - ext_modules=[Extension('gitdb._perf', ['_fun.c', '_delta_apply.c'], include_dirs=['.'])], + package_data={ 'gitdb.test' : ['fixtures/packs/*', 'fixtures/objects/7b/*']}, + package_dir = {'gitdb':'gitdb'}, + ext_modules=[Extension('gitdb._perf', ['gitdb/_fun.c', 'gitdb/_delta_apply.c'], include_dirs=['gitdb'])], license = "BSD License", zip_safe=False, requires=('async (>=0.6.1)',), From 1fe2a9403fafa810af25062c7e6b20be8e6be480 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 1 Dec 2010 10:28:14 +0100 Subject: [PATCH 0131/2375] setup .gitmodules to use a trackin branch automatically --- .gitmodules | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitmodules b/.gitmodules index 9f06f7d07..3db4c676d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "async"] path = gitdb/ext/async url = git://github.com/gitpython-developers/async.git + branch = master From 6d315b8a92ae2cba936bd38e433592383f42cc10 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 23 Feb 2011 00:26:14 +0100 Subject: [PATCH 0132/2375] Added license information file --- LICENSE | 30 ++++++++++++++++++++++++++++++ gitdb/ext/async | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..be11e73c1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,30 @@ +Copyright (C) 2010, 2011 Sebastian Thiel and contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +* Neither the name of the GitDB project nor the names of +its contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/gitdb/ext/async b/gitdb/ext/async index 89790abd2..e91b46928 160000 --- a/gitdb/ext/async +++ b/gitdb/ext/async @@ -1 +1 @@ -Subproject commit 89790abd29bb4be851095b2f2c4c624b896b6e20 +Subproject commit e91b4692825e0121504262ba58ac0b2bcd09fea3 From df570f00f611073a20796128ca167474aa7826fc Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 23 Feb 2011 00:43:31 +0100 Subject: [PATCH 0133/2375] preprended all modules with licensing information --- gitdb/__init__.py | 4 ++++ gitdb/base.py | 4 ++++ gitdb/db/__init__.py | 4 ++++ gitdb/db/base.py | 4 ++++ gitdb/db/git.py | 4 ++++ gitdb/db/loose.py | 4 ++++ gitdb/db/mem.py | 4 ++++ gitdb/db/pack.py | 4 ++++ gitdb/db/ref.py | 4 ++++ gitdb/exc.py | 4 ++++ gitdb/ext/async | 2 +- gitdb/fun.py | 4 ++++ gitdb/pack.py | 4 ++++ gitdb/stream.py | 4 ++++ gitdb/test/__init__.py | 4 ++++ gitdb/test/db/__init__.py | 4 ++++ gitdb/test/db/lib.py | 4 ++++ gitdb/test/db/test_git.py | 4 ++++ gitdb/test/db/test_loose.py | 4 ++++ gitdb/test/db/test_mem.py | 4 ++++ gitdb/test/db/test_pack.py | 4 ++++ gitdb/test/db/test_ref.py | 4 ++++ gitdb/test/lib.py | 4 ++++ gitdb/test/performance/lib.py | 4 ++++ gitdb/test/performance/test_pack.py | 4 ++++ gitdb/test/performance/test_pack_streaming.py | 4 ++++ gitdb/test/performance/test_stream.py | 4 ++++ gitdb/test/test_base.py | 4 ++++ gitdb/test/test_example.py | 4 ++++ gitdb/test/test_pack.py | 4 ++++ gitdb/test/test_stream.py | 4 ++++ gitdb/test/test_util.py | 4 ++++ gitdb/typ.py | 4 ++++ gitdb/util.py | 4 ++++ 34 files changed, 133 insertions(+), 1 deletion(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index c8e77759e..a551f37dc 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Initialize the object database module""" import sys diff --git a/gitdb/base.py b/gitdb/base.py index d0bcc0866..ff1062bf6 100644 --- a/gitdb/base.py +++ b/gitdb/base.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module with basic data structures - they are designed to be lightweight and fast""" from util import ( bin_to_hex, diff --git a/gitdb/db/__init__.py b/gitdb/db/__init__.py index 85a0a6874..e5935b7c2 100644 --- a/gitdb/db/__init__.py +++ b/gitdb/db/__init__.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php from base import * from loose import * diff --git a/gitdb/db/base.py b/gitdb/db/base.py index 1914dbbce..2189d4193 100644 --- a/gitdb/db/base.py +++ b/gitdb/db/base.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains implementations of database retrieveing objects""" from gitdb.util import ( pool, diff --git a/gitdb/db/git.py b/gitdb/db/git.py index f0e63b15a..b8fc46aa0 100644 --- a/gitdb/db/git.py +++ b/gitdb/db/git.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php from base import ( CompoundDB, ObjectDBW, diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index 521be44c2..6cd1cefd5 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php from base import ( FileDBBase, ObjectDBR, diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index f361ab801..8012ad15e 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains the MemoryDatabase implementation""" from loose import LooseObjectDB from base import ( diff --git a/gitdb/db/pack.py b/gitdb/db/pack.py index 0ec8a4e3b..eef3f712e 100644 --- a/gitdb/db/pack.py +++ b/gitdb/db/pack.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module containing a database to deal with packs""" from base import ( FileDBBase, diff --git a/gitdb/db/ref.py b/gitdb/db/ref.py index c149c03d0..898984323 100644 --- a/gitdb/db/ref.py +++ b/gitdb/db/ref.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php from base import ( CompoundDB, ) diff --git a/gitdb/exc.py b/gitdb/exc.py index 012cdbc6b..96fa874e3 100644 --- a/gitdb/exc.py +++ b/gitdb/exc.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module with common exceptions""" from util import to_hex_sha diff --git a/gitdb/ext/async b/gitdb/ext/async index e91b46928..10310824c 160000 --- a/gitdb/ext/async +++ b/gitdb/ext/async @@ -1 +1 @@ -Subproject commit e91b4692825e0121504262ba58ac0b2bcd09fea3 +Subproject commit 10310824c001deab8fea85b88ebda0696f964b3e diff --git a/gitdb/fun.py b/gitdb/fun.py index fc4172040..3e035dbf1 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains basic c-functions which usually contain performance critical code Keeping this code separate from the beginning makes it easier to out-source it into c later, if required""" diff --git a/gitdb/pack.py b/gitdb/pack.py index affcbe275..09e7defc5 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains PackIndexFile and PackFile implementations""" from gitdb.exc import ( BadObject, diff --git a/gitdb/stream.py b/gitdb/stream.py index 0d8972898..6c3b8d31f 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php from cStringIO import StringIO import errno diff --git a/gitdb/test/__init__.py b/gitdb/test/__init__.py index 0dec7750f..760f531be 100644 --- a/gitdb/test/__init__.py +++ b/gitdb/test/__init__.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php import gitdb.util diff --git a/gitdb/test/db/__init__.py b/gitdb/test/db/__init__.py index e69de29bb..8a681e428 100644 --- a/gitdb/test/db/__init__.py +++ b/gitdb/test/db/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index 0080d919e..416c8c588 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Base classes for object db testing""" from gitdb.test.lib import ( with_rw_directory, diff --git a/gitdb/test/db/test_git.py b/gitdb/test/db/test_git.py index bcab1fc55..310116351 100644 --- a/gitdb/test/db/test_git.py +++ b/gitdb/test/db/test_git.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php from lib import * from gitdb.exc import BadObject from gitdb.db import GitDB diff --git a/gitdb/test/db/test_loose.py b/gitdb/test/db/test_loose.py index 8e8a9bfc3..ee2d78d08 100644 --- a/gitdb/test/db/test_loose.py +++ b/gitdb/test/db/test_loose.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php from lib import * from gitdb.db import LooseObjectDB from gitdb.exc import BadObject diff --git a/gitdb/test/db/test_mem.py b/gitdb/test/db/test_mem.py index 4a9b7ee12..188cb0a93 100644 --- a/gitdb/test/db/test_mem.py +++ b/gitdb/test/db/test_mem.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php from lib import * from gitdb.db import ( MemoryDB, diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index 1d0cb96e7..e8ba6f8fc 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php from lib import * from gitdb.db import PackedDB from gitdb.test.lib import fixture_path diff --git a/gitdb/test/db/test_ref.py b/gitdb/test/db/test_ref.py index af75016b0..0d8eeebb3 100644 --- a/gitdb/test/db/test_ref.py +++ b/gitdb/test/db/test_ref.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php from lib import * from gitdb.db import ReferenceDB diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index 3fb87d547..342234adc 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Utilities used in ODB testing""" from gitdb import ( OStream, diff --git a/gitdb/test/performance/lib.py b/gitdb/test/performance/lib.py index 45e0ca53f..761113d51 100644 --- a/gitdb/test/performance/lib.py +++ b/gitdb/test/performance/lib.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains library functions""" import os from gitdb.test.lib import * diff --git a/gitdb/test/performance/test_pack.py b/gitdb/test/performance/test_pack.py index 32890dcb3..da952b17a 100644 --- a/gitdb/test/performance/test_pack.py +++ b/gitdb/test/performance/test_pack.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Performance tests for object store""" from lib import ( TestBigRepoR diff --git a/gitdb/test/performance/test_pack_streaming.py b/gitdb/test/performance/test_pack_streaming.py index 4d47cdfcc..22a62a39d 100644 --- a/gitdb/test/performance/test_pack_streaming.py +++ b/gitdb/test/performance/test_pack_streaming.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Specific test for pack streams only""" from lib import ( TestBigRepoR diff --git a/gitdb/test/performance/test_stream.py b/gitdb/test/performance/test_stream.py index 1afc1a1a0..f5f2e2e4d 100644 --- a/gitdb/test/performance/test_stream.py +++ b/gitdb/test/performance/test_stream.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Performance data streaming performance""" from lib import TestBigRepoR from gitdb.db import * diff --git a/gitdb/test/test_base.py b/gitdb/test/test_base.py index 740e50bcd..1b20faf87 100644 --- a/gitdb/test/test_base.py +++ b/gitdb/test/test_base.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Test for object db""" from lib import ( TestBase, diff --git a/gitdb/test/test_example.py b/gitdb/test/test_example.py index 2d6096132..753177560 100644 --- a/gitdb/test/test_example.py +++ b/gitdb/test/test_example.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module with examples from the tutorial section of the docs""" from lib import * from gitdb import IStream diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index 770a78bad..928f0cd97 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Test everything about packs reading and writing""" from lib import ( TestBase, diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index 948cbe766..523f77056 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Test for object db""" from lib import ( TestBase, diff --git a/gitdb/test/test_util.py b/gitdb/test/test_util.py index 6a389d27c..90f4156b9 100644 --- a/gitdb/test/test_util.py +++ b/gitdb/test/test_util.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Test for object db""" import tempfile import os diff --git a/gitdb/typ.py b/gitdb/typ.py index 54a1f84be..e84dd2455 100644 --- a/gitdb/typ.py +++ b/gitdb/typ.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module containing information about types known to the database""" #{ String types diff --git a/gitdb/util.py b/gitdb/util.py index 1ea182025..4bb3c7352 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -1,3 +1,7 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php import binascii import os import mmap From 3bcb30f1916239f1af25b4d6d8934c64bb47f8ea Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 31 Mar 2011 11:06:36 +0200 Subject: [PATCH 0134/2375] Added qt creator project as it has advantages regarding the navigation over jEdit, although jedit has advantages regarding the syntax highlighting and whitespace visualization --- gitdb.pro | 48 +++++++++ gitdb.pro.user | 267 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 315 insertions(+) create mode 100644 gitdb.pro create mode 100644 gitdb.pro.user diff --git a/gitdb.pro b/gitdb.pro new file mode 100644 index 000000000..a682615c4 --- /dev/null +++ b/gitdb.pro @@ -0,0 +1,48 @@ + +OTHER_FILES += \ + setup.py \ + README.rst \ + MANIFEST \ + Makefile \ + LICENSE \ + AUTHORS \ + gitdb/util.py \ + gitdb/typ.py \ + gitdb/stream.py \ + gitdb/pack.py \ + gitdb/__init__.py \ + gitdb/fun.py \ + gitdb/exc.py \ + gitdb/base.py \ + doc/source/tutorial.rst \ + doc/source/intro.rst \ + doc/source/index.rst \ + doc/source/conf.py \ + doc/source/changes.rst \ + doc/source/api.rst \ + doc/source/algorithm.rst \ + gitdb/db/ref.py \ + gitdb/db/pack.py \ + gitdb/db/mem.py \ + gitdb/db/loose.py \ + gitdb/db/__init__.py \ + gitdb/db/git.py \ + gitdb/db/base.py \ + gitdb/test/test_util.py \ + gitdb/test/test_stream.py \ + gitdb/test/test_pack.py \ + gitdb/test/test_example.py \ + gitdb/test/test_base.py \ + gitdb/test/lib.py \ + gitdb/test/__init__.py \ + gitdb/test/performance/test_stream.py \ + gitdb/test/performance/test_pack_streaming.py \ + gitdb/test/performance/test_pack.py \ + gitdb/test/performance/lib.py + +HEADERS += \ + gitdb/_delta_apply.h + +SOURCES += \ + gitdb/_fun.c \ + gitdb/_delta_apply.c diff --git a/gitdb.pro.user b/gitdb.pro.user new file mode 100644 index 000000000..398cb70a1 --- /dev/null +++ b/gitdb.pro.user @@ -0,0 +1,267 @@ + + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + Default + + + + ProjectExplorer.Project.Target.0 + + Desktop + + Qt4ProjectManager.Target.DesktopTarget + 0 + 0 + 1 + + + 0 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Qt in PATH Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /home/byron/projects/git-python/git/ext/gitdb/gitdbpro-build-desktop + 3 + 0 + false + + + + + qmake + + QtProjectManager.QMakeBuildStep + + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Qt in PATH Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /home/byron/projects/git-python/git/ext/gitdb/gitdbpro-build-desktop + 3 + 0 + true + + + + + qmake + + QtProjectManager.QMakeBuildStep + + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Qt 4.6.2 OpenSource Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /home/byron/projects/git-python/git/ext/gitdb/gitdbpro-build-desktop + 2 + 0 + true + + + + + qmake + + QtProjectManager.QMakeBuildStep + + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Qt 4.6.2 OpenSource Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /home/byron/projects/git-python/git/ext/gitdb/gitdbpro-build-desktop + 2 + 0 + true + + 4 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + No deployment + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + gitdb + + Qt4ProjectManager.Qt4RunConfiguration + 2 + + gitdb.pro + false + false + + false + + 3768 + true + false + + + + /usr/bin/nosetests + -s + gitdb/test/test_pack.py + + 2 + python + false + + $BUILDDIR + Run python + test-pack + ProjectExplorer.CustomExecutableRunConfiguration + 3768 + true + false + + 2 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.EnvironmentId + {d38778e3-6b24-4419-8fc3-c8cc320f55e0} + + + ProjectExplorer.Project.Updater.FileVersion + 8 + + From 810d1e38315c6e886c1daef93670840b213ee78a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 31 Mar 2011 11:08:26 +0200 Subject: [PATCH 0135/2375] Added stub for pack writing implementation which should work for pack streaming over a transport as well --- gitdb/fun.py | 10 +--------- gitdb/pack.py | 25 +++++++++++++++++++------ gitdb/test/test_pack.py | 34 ++++++++++++++++++++++++++++++---- 3 files changed, 50 insertions(+), 19 deletions(-) diff --git a/gitdb/fun.py b/gitdb/fun.py index 3e035dbf1..34978cd97 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -411,15 +411,7 @@ def pack_object_header_info(data): size += (c & 0x7f) << s s += 7 # END character loop - - try: - return (type_id, size, i) - except KeyError: - # invalid object type - we could try to be smart now and decode part - # of the stream to get the info, problem is that we had trouble finding - # the exact start of the content stream - raise BadObjectType(type_id) - # END handle exceptions + return (type_id, size, i) def msb_size(data, offset=0): """ diff --git a/gitdb/pack.py b/gitdb/pack.py index 09e7defc5..335fe3c00 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -98,8 +98,7 @@ def pack_object_at(data, offset, as_stream): # REF DELTA elif type_id == REF_DELTA: total_rela_offset = data_rela_offset+20 - ref_sha = data[data_rela_offset:total_rela_offset] - delta_info = ref_sha + delta_info = data[data_rela_offset:total_rela_offset] # BASE OBJECT else: # assume its a base object @@ -561,11 +560,10 @@ def _sha_to_index(self, sha): def _iter_objects(self, as_stream): """Iterate over all objects in our index and yield their OInfo or OStream instences""" - indexfile = self._index + _sha = self._index.sha _object = self._object - for index in xrange(indexfile.size()): - sha = indexfile.sha(index) - yield _object(sha, as_stream, index) + for index in xrange(self._index.size()): + yield _object(_sha(index), as_stream, index) # END for each index def _object(self, sha, as_stream, index=-1): @@ -760,5 +758,20 @@ def collect_streams(self, sha): return self.collect_streams_at_offset(self._index.offset(self._sha_to_index(sha))) + @classmethod + def create(cls, object_iter, pack_write, index_write=None): + """ + Create a new pack by putting all objects obtained by the object_iterator + into a pack which is written using the pack_write method. + The respective index is produced as well if index_write is not Non. + + :param object_iter: iterator yielding odb output objects + :param pack_write: function to receive strings to write into the pack stream + :param indx_write: if not None, the function writes the index file corresponding + to the pack. + :note: The destination of the write functions is up to the user. It could + be a socket, or a file for instance""" + + #} END interface diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index 928f0cd97..8e98808c7 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -25,8 +25,12 @@ from gitdb.fun import delta_types from gitdb.exc import UnsupportedOperation from gitdb.util import to_bin_sha -from itertools import izip +from itertools import izip, chain +from nose import SkipTest + import os +import sys +import tempfile #{ Utilities @@ -134,7 +138,9 @@ def test_pack(self): self._assert_pack_file(pack, version, size) # END for each pack to test - def test_pack_entity(self): + @with_rw_directory + def test_pack_entity(self, rw_dir): + pack_iterators = list(); for packinfo, indexinfo in ( (self.packfile_v2_1, self.packindexfile_v1), (self.packfile_v2_2, self.packindexfile_v2), (self.packfile_v2_3_ascii, self.packindexfile_v2_3_ascii)): @@ -143,6 +149,7 @@ def test_pack_entity(self): entity = PackEntity(packfile) assert entity.pack().path() == packfile assert entity.index().path() == indexfile + pack_iterators.append(entity.stream_iter()) count = 0 for info, stream in izip(entity.info_iter(), entity.stream_iter()): @@ -174,9 +181,28 @@ def test_pack_entity(self): # END for each info, stream tuple assert count == size - # END for each entity + # END for each entity + + # pack writing - write all packs into one + # index path can be None + pack_path = tempfile.mktemp('', "pack", rw_dir) + index_path = tempfile.mktemp('', 'index', rw_dir) + for pp, ip in ((pack_path, )*2, (index_path, None)): + pfile = open(pp, 'wb') + ifile = None + if ip: + ifile = open(ip, 'wb') + #END handle ip + + PackEntity.create(chain(*pack_iterators), pfile, ifile) + assert os.path.getsize(pp) > 100 + if ip is not None: + assert os.path.getsize(ip) > 100 + #END verify files exist + #END for each packpath, indexpath pair + def test_pack_64(self): # TODO: hex-edit a pack helping us to verify that we can handle 64 byte offsets # of course without really needing such a huge pack - pass + raise SkipTest() From e83210d99aaac5768827c448909fa04d63776e64 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 31 Mar 2011 18:01:05 +0200 Subject: [PATCH 0136/2375] initial version of pack writing, which seems to work, but still needs some more testing and verification --- gitdb/exc.py | 3 + gitdb/fun.py | 20 +++- gitdb/pack.py | 196 ++++++++++++++++++++++++++++++++++++++-- gitdb/stream.py | 18 +++- gitdb/test/test_pack.py | 51 ++++++++--- 5 files changed, 266 insertions(+), 22 deletions(-) diff --git a/gitdb/exc.py b/gitdb/exc.py index 96fa874e3..e087047b4 100644 --- a/gitdb/exc.py +++ b/gitdb/exc.py @@ -17,6 +17,9 @@ class BadObject(ODBError): def __str__(self): return "BadObject: %s" % to_hex_sha(self.args[0]) + +class ParseError(ODBError): + """Thrown if the parsing of a file failed due to an invalid format""" class AmbiguousObjectName(ODBError): """Thrown if a possibly shortened name does not uniquely represent a single object diff --git a/gitdb/fun.py b/gitdb/fun.py index 34978cd97..5bbe8efc3 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -48,7 +48,7 @@ __all__ = ('is_loose_object', 'loose_object_header_info', 'msb_size', 'pack_object_header_info', 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data', - 'is_equal_canonical_sha', 'connect_deltas', 'DeltaChunkList') + 'is_equal_canonical_sha', 'connect_deltas', 'DeltaChunkList', 'create_pack_object_header') #{ Structures @@ -412,6 +412,24 @@ def pack_object_header_info(data): s += 7 # END character loop return (type_id, size, i) + +def create_pack_object_header(obj_type, obj_size): + """:return: string defining the pack header comprised of the object type + and its incompressed size in bytes + :parmam obj_type: pack type_id of the object + :param obj_size: uncompressed size in bytes of the following object stream""" + c = 0 # 1 byte + hdr = str() # output string + + c = (obj_type << 4) | (obj_size & 0xf) + obj_size >>= 4 + while obj_size: + hdr += chr(c | 0x80) + c = obj_size & 0x7f + obj_size >>= 7 + #END until size is consumed + hdr += chr(c) + return hdr def msb_size(data, offset=0): """ diff --git a/gitdb/pack.py b/gitdb/pack.py index 335fe3c00..6c32949d6 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -5,7 +5,8 @@ """Contains PackIndexFile and PackFile implementations""" from gitdb.exc import ( BadObject, - UnsupportedOperation + UnsupportedOperation, + ParseError ) from util import ( zlib, @@ -15,6 +16,7 @@ ) from fun import ( + create_pack_object_header, pack_object_header_info, is_equal_canonical_sha, type_id_to_type_map, @@ -47,6 +49,7 @@ DeltaApplyReader, Sha1Writer, NullStream, + FlexibleSha1Writer ) from struct import ( @@ -54,6 +57,8 @@ unpack, ) +from binascii import crc32 + from itertools import izip import array import os @@ -119,10 +124,113 @@ def pack_object_at(data, offset, as_stream): return abs_data_offset, ODeltaPackInfo(offset, type_id, uncomp_size, delta_info) # END handle info # END handle stream - + +def write_stream_to_pack(read, write, zstream, want_crc=False): + """Copy a stream as read from read function, zip it, and write the result. + Count the number of written bytes and return it + :param want_crc: if True, the crc will be generated over the compressed data. + :return: tuple(no bytes read, no bytes written, crc32) crc might be 0 if want_crc + was false""" + br = 0 # bytes read + bw = 0 # bytes written + crc = 0 + + while True: + chunk = read(chunk_size) + br += len(chunk) + compressed = zstream.compress(chunk) + bw += len(compressed) + write(compressed) # cannot assume return value + + if want_crc: + crc = crc32(compressed, crc) + #END handle crc + + if len(chunk) != chunk_size: + break + #END copy loop + + compressed = zstream.flush() + bw += len(compressed) + write(compressed) + if want_crc: + crc = crc32(compressed, crc) + #END handle crc + + return (br, bw, crc) + + #} END utilities +class IndexWriter(object): + """Utility to cache index information, allowing to write all information later + in one go to the given stream + :note: currently only writes v2 indices""" + __slots__ = '_objs' + + def __init__(self): + self._objs = list() + + def append(self, binsha, crc, offset): + """Append one piece of object information""" + self._objs.append((binsha, crc, offset)) + + def write(self, pack_binsha, write): + """Write the index file using the given write method + :param pack_binsha: sha over the whole pack that we index""" + # sort for sha1 hash + self._objs.sort(key=lambda o: o[0]) + + sha_writer = FlexibleSha1Writer(write) + sha_write = sha_writer.write + sha_write(PackIndexFile.index_v2_signature) + sha_write(pack(">L", PackIndexFile.index_version_default)) + + # fanout + tmplist = list((0,)*256) # fanout or list with 64 bit offsets + for t in self._objs: + tmplist[ord(t[0][0])] += 1 + #END prepare fanout + + for i in xrange(255): + v = tmplist[i] + sha_write(pack('>L', v)) + tmplist[i+1] = v + #END write each fanout entry + sha_write(pack('>L', tmplist[255])) + + # sha1 ordered + # save calls, that is push them into c + sha_write(''.join(t[0] for t in self._objs)) + + # crc32 + for t in self._objs: + sha_write(pack('>L', t[1]&0xffffffff)) + #END for each crc + + tmplist = list() + # offset 32 + for t in self._objs: + ofs = t[2] + if ofs > 0x7fffffff: + tmplist.append(ofs) + ofs = 0x80000000 + len(tmplist)-1 + #END hande 64 bit offsets + sha_write(pack('>L', ofs&0xffffffff)) + #END for each offset + + # offset 64 + for ofs in tmplist: + sha_write(pack(">Q", ofs)) + #END for each offset + + # trailer + assert(len(pack_binsha) == 20) + sha_write(pack_binsha) + write(sha_writer.sha(as_hex=False)) + + class PackIndexFile(LazyMixin): """A pack index provides offsets into the corresponding pack, allowing to find @@ -135,6 +243,8 @@ class PackIndexFile(LazyMixin): # used in v2 indices _sha_list_offset = 8 + 1024 + index_v2_signature = '\377tOc' + index_version_default = 2 def __init__(self, indexpath): super(PackIndexFile, self).__init__() @@ -155,7 +265,7 @@ def _set_cache_(self, attr): # to access the fanout table or related properties # CHECK VERSION - self._version = (self._data[:4] == '\377tOc' and 2) or 1 + self._version = (self._data[:4] == self.index_v2_signature and 2) or 1 if self._version == 2: version_id = unpack_from(">L", self._data, 4)[0] assert version_id == self._version, "Unsupported index version: %i" % version_id @@ -383,6 +493,8 @@ class PackFile(LazyMixin): case""" __slots__ = ('_packpath', '_data', '_size', '_version') + pack_signature = 0x5041434b # 'PACK' + pack_version_default = 2 # offset into our data at which the first object starts first_object_offset = 3*4 # header bytes @@ -396,15 +508,19 @@ def _set_cache_(self, attr): self._data = file_contents_ro_filepath(self._packpath) # read the header information - type_id, self._version, self._size = unpack_from(">4sLL", self._data, 0) + type_id, self._version, self._size = unpack_from(">LLL", self._data, 0) # TODO: figure out whether we should better keep the lock, or maybe # add a .keep file instead ? else: # must be '_size' or '_version' # read header info - we do that just with a file stream - type_id, self._version, self._size = unpack(">4sLL", open(self._packpath).read(12)) + type_id, self._version, self._size = unpack(">LLL", open(self._packpath).read(12)) # END handle header + if type_id != self.pack_signature: + raise ParseError("Invalid pack signature: %i" % type_id) + #END assert type id + def _iter_objects(self, start_offset, as_stream=True): """Handle the actual iteration of objects within this pack""" data = self._data @@ -759,7 +875,8 @@ def collect_streams(self, sha): @classmethod - def create(cls, object_iter, pack_write, index_write=None): + def write_pack(cls, object_iter, pack_write, index_write=None, + object_count = None, zlib_compression = zlib.Z_BEST_SPEED): """ Create a new pack by putting all objects obtained by the object_iterator into a pack which is written using the pack_write method. @@ -769,9 +886,74 @@ def create(cls, object_iter, pack_write, index_write=None): :param pack_write: function to receive strings to write into the pack stream :param indx_write: if not None, the function writes the index file corresponding to the pack. + :param object_count: if you can provide the amount of objects in your iteration, + this would be the place to put it. Otherwise we have to pre-iterate and store + all items into a list to get the number, which uses more memory than necessary. + :param zlib_compression: the zlib compression level to use + :return: binary sha over all the contents of the pack :note: The destination of the write functions is up to the user. It could - be a socket, or a file for instance""" + be a socket, or a file for instance + :note: writes only undeltified objects""" + objs = object_iter + if not object_count: + if not isinstance(object_iter, (tuple, list)): + objs = list(object_iter) + #END handle list type + object_count = len(objs) + #END handle object + + pack_writer = FlexibleSha1Writer(pack_write) + pwrite = pack_writer.write + ofs = 0 # current offset into the pack file + index = None + wants_index = index_write is not None + + # write header + pwrite(pack('>LLL', PackFile.pack_signature, PackFile.pack_version_default, object_count)) + ofs += 12 + + if wants_index: + index = IndexWriter() + #END handle index header + + actual_count = 0 + for obj in objs: + actual_count += 1 + + # object header + hdr = create_pack_object_header(obj.type_id, obj.size) + pwrite(hdr) + + # data stream + zstream = zlib.compressobj(zlib_compression) + ostream = obj.stream + br, bw, crc = write_stream_to_pack(ostream.read, pwrite, zstream, want_crc = index_write) + assert(br == obj.size) + if wants_index: + index.append(obj.binsha, crc, ofs) + #END handle index + + ofs += len(hdr) + bw + if actual_count == object_count: + break + #END abort once we are done + #END for each object + + if actual_count != object_count: + raise ValueError("Expected to write %i objects into pack, but received only %i from iterators" % (object_count, actual_count)) + #END count assertion + + # write footer + binsha = pack_writer.sha(as_hex = False) + assert len(binsha) == 20 + pack_write(binsha) + ofs += len(binsha) # just for completeness ;) + + if wants_index: + index.write(binsha, index_write) + #END handle index + return binsha #} END interface diff --git a/gitdb/stream.py b/gitdb/stream.py index 6c3b8d31f..8010a0551 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -33,7 +33,9 @@ except ImportError: pass -__all__ = ('DecompressMemMapReader', 'FDCompressedSha1Writer', 'DeltaApplyReader') +__all__ = ( 'DecompressMemMapReader', 'FDCompressedSha1Writer', 'DeltaApplyReader', + 'Sha1Writer', 'FlexibleSha1Writer', 'ZippedStoreShaWriter', 'FDCompressedSha1Writer', + 'FDStream', 'NullStream') #{ RO Streams @@ -557,6 +559,20 @@ def sha(self, as_hex = False): #} END interface +class FlexibleSha1Writer(Sha1Writer): + """Writer producing a sha1 while passing on the written bytes to the given + write function""" + __slots__ = 'writer' + + def __init__(self, writer): + Sha1Writer.__init__(self) + self.writer = writer + + def write(self, data): + Sha1Writer.write(self, data) + self.writer(data) + + class ZippedStoreShaWriter(Sha1Writer): """Remembers everything someone writes to it and generates a sha""" __slots__ = ('buf', 'zip') diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index 8e98808c7..c4d8df165 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -140,7 +140,7 @@ def test_pack(self): @with_rw_directory def test_pack_entity(self, rw_dir): - pack_iterators = list(); + pack_objs = list() for packinfo, indexinfo in ( (self.packfile_v2_1, self.packindexfile_v1), (self.packfile_v2_2, self.packindexfile_v2), (self.packfile_v2_3_ascii, self.packindexfile_v2_3_ascii)): @@ -149,7 +149,7 @@ def test_pack_entity(self, rw_dir): entity = PackEntity(packfile) assert entity.pack().path() == packfile assert entity.index().path() == indexfile - pack_iterators.append(entity.stream_iter()) + pack_objs.extend(entity.stream_iter()) count = 0 for info, stream in izip(entity.info_iter(), entity.stream_iter()): @@ -182,24 +182,49 @@ def test_pack_entity(self, rw_dir): assert count == size # END for each entity - + # pack writing - write all packs into one # index path can be None pack_path = tempfile.mktemp('', "pack", rw_dir) index_path = tempfile.mktemp('', 'index', rw_dir) - for pp, ip in ((pack_path, )*2, (index_path, None)): - pfile = open(pp, 'wb') - ifile = None - if ip: - ifile = open(ip, 'wb') + iteration = 0 + for ppath, ipath, num_obj in zip((pack_path, )*2, (index_path, None), (len(pack_objs), None)): + pfile = open(ppath, 'wb') + iwrite = None + if ipath: + ifile = open(ipath, 'wb') + iwrite = ifile.write #END handle ip - PackEntity.create(chain(*pack_iterators), pfile, ifile) - assert os.path.getsize(pp) > 100 - if ip is not None: - assert os.path.getsize(ip) > 100 + # make sure we rewind the streams ... we work on the same objects over and over again + if iteration > 0: + for obj in pack_objs: + obj.stream.seek(0) + #END rewind streams + iteration += 1 + + binsha = PackEntity.write_pack(pack_objs, pfile.write, iwrite, object_count=num_obj) + pfile.close() + assert os.path.getsize(ppath) > 100 + + # verify pack + pf = PackFile(ppath) + assert pf.size() == len(pack_objs) + assert pf.version() == PackFile.pack_version_default + assert pf.checksum() == binsha + + # verify index + if ipath is not None: + assert os.path.getsize(ipath) > 100 + #END verify files exist - #END for each packpath, indexpath pair + + if ifile: + ifile.close() + #END handle index + #END for each packpath, indexpath pair + + # def test_pack_64(self): From 98a19ac1986b623277098263f01696827567c584 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 31 Mar 2011 18:49:22 +0200 Subject: [PATCH 0137/2375] Implemented remainder of the test, and it already shows that something is wrong with my packs. Probably something stupid ;) --- gitdb/pack.py | 62 +++++++++++++++++++++++++++++++---------- gitdb/test/lib.py | 7 +++-- gitdb/test/test_pack.py | 34 +++++++++++++++------- 3 files changed, 76 insertions(+), 27 deletions(-) diff --git a/gitdb/pack.py b/gitdb/pack.py index 6c32949d6..d90eeb991 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -12,6 +12,7 @@ zlib, LazyMixin, unpack_from, + bin_to_hex, file_contents_ro_filepath, ) @@ -60,6 +61,7 @@ from binascii import crc32 from itertools import izip +import tempfile import array import os import sys @@ -176,9 +178,10 @@ def append(self, binsha, crc, offset): """Append one piece of object information""" self._objs.append((binsha, crc, offset)) - def write(self, pack_binsha, write): + def write(self, pack_sha, write): """Write the index file using the given write method - :param pack_binsha: sha over the whole pack that we index""" + :param pack_sha: binary sha over the whole pack that we index + :return: sha1 binary sha over all index file contents""" # sort for sha1 hash self._objs.sort(key=lambda o: o[0]) @@ -192,11 +195,10 @@ def write(self, pack_binsha, write): for t in self._objs: tmplist[ord(t[0][0])] += 1 #END prepare fanout - for i in xrange(255): v = tmplist[i] sha_write(pack('>L', v)) - tmplist[i+1] = v + tmplist[i+1] += v #END write each fanout entry sha_write(pack('>L', tmplist[255])) @@ -226,9 +228,11 @@ def write(self, pack_binsha, write): #END for each offset # trailer - assert(len(pack_binsha) == 20) - sha_write(pack_binsha) - write(sha_writer.sha(as_hex=False)) + assert(len(pack_sha) == 20) + sha_write(pack_sha) + sha = sha_writer.sha(as_hex=False) + write(sha) + return sha @@ -767,7 +771,9 @@ def is_valid_stream(self, sha, use_crc=False): """ Verify that the stream at the given sha is valid. - :param use_crc: if True, the index' crc for the sha is used to determine + :param use_crc: if True, the index' crc is run over the compressed stream of + the object, which is much faster than checking the sha1. It is also + more prone to unnoticed corruption or manipulation. :param sha: 20 byte sha1 of the object whose stream to verify whether the compressed stream of the object is valid. If it is a delta, this only verifies that the delta's data is valid, not the @@ -890,7 +896,8 @@ def write_pack(cls, object_iter, pack_write, index_write=None, this would be the place to put it. Otherwise we have to pre-iterate and store all items into a list to get the number, which uses more memory than necessary. :param zlib_compression: the zlib compression level to use - :return: binary sha over all the contents of the pack + :return: tuple(pack_sha, index_binsha) binary sha over all the contents of the pack + and over all contents of the index. If index_write was None, index_binsha will be None :note: The destination of the write functions is up to the user. It could be a socket, or a file for instance :note: writes only undeltified objects""" @@ -944,16 +951,41 @@ def write_pack(cls, object_iter, pack_write, index_write=None, #END count assertion # write footer - binsha = pack_writer.sha(as_hex = False) - assert len(binsha) == 20 - pack_write(binsha) - ofs += len(binsha) # just for completeness ;) + pack_sha = pack_writer.sha(as_hex = False) + assert len(pack_sha) == 20 + pack_write(pack_sha) + ofs += len(pack_sha) # just for completeness ;) + index_sha = None if wants_index: - index.write(binsha, index_write) + index_sha = index.write(pack_sha, index_write) #END handle index - return binsha + return pack_sha, index_sha + + @classmethod + def create(cls, object_iter, base_dir, object_count = None, zlib_compression = zlib.Z_BEST_SPEED): + """Create a new on-disk entity comprised of a properly named pack file and a properly named + and corresponding index file. The pack contains all OStream objects contained in object iter. + :param base_dir: directory which is to contain the files + :return: PackEntity instance initialized with the new pack + :note: for more information on the other parameters see the write_pack method""" + pack_fd, pack_path = tempfile.mkstemp('', 'pack', base_dir) + index_fd, index_path = tempfile.mkstemp('', 'index', base_dir) + pack_write = lambda d: os.write(pack_fd, d) + index_write = lambda d: os.write(index_fd, d) + + pack_binsha, index_binsha = cls.write_pack(object_iter, pack_write, index_write, object_count, zlib_compression) + os.close(pack_fd) + os.close(index_fd) + + fmt = "pack-%s.%s" + new_pack_path = os.path.join(base_dir, fmt % (bin_to_hex(pack_binsha), 'pack')) + new_index_path = os.path.join(base_dir, fmt % (bin_to_hex(pack_binsha), 'idx')) + os.rename(pack_path, new_pack_path) + os.rename(index_path, new_index_path) + + return cls(new_pack_path) #} END interface diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index 342234adc..50645be65 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -42,19 +42,22 @@ def with_rw_directory(func): def wrapper(self): path = tempfile.mktemp(prefix=func.__name__) os.mkdir(path) + keep = False try: try: return func(self, path) except Exception: print >> sys.stderr, "Test %s.%s failed, output is at %r" % (type(self).__name__, func.__name__, path) + keep = True raise finally: # Need to collect here to be sure all handles have been closed. It appears # a windows-only issue. In fact things should be deleted, as well as # memory maps closed, once objects go out of scope. For some reason # though this is not the case here unless we collect explicitly. - gc.collect() - shutil.rmtree(path) + if not keep: + gc.collect() + shutil.rmtree(path) # END handle exception # END wrapper diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index c4d8df165..e9c933e15 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -188,6 +188,10 @@ def test_pack_entity(self, rw_dir): pack_path = tempfile.mktemp('', "pack", rw_dir) index_path = tempfile.mktemp('', 'index', rw_dir) iteration = 0 + def rewind_streams(): + for obj in pack_objs: + obj.stream.seek(0) + #END utility for ppath, ipath, num_obj in zip((pack_path, )*2, (index_path, None), (len(pack_objs), None)): pfile = open(ppath, 'wb') iwrite = None @@ -198,12 +202,11 @@ def test_pack_entity(self, rw_dir): # make sure we rewind the streams ... we work on the same objects over and over again if iteration > 0: - for obj in pack_objs: - obj.stream.seek(0) + rewind_streams() #END rewind streams iteration += 1 - binsha = PackEntity.write_pack(pack_objs, pfile.write, iwrite, object_count=num_obj) + pack_sha, index_sha = PackEntity.write_pack(pack_objs, pfile.write, iwrite, object_count=num_obj) pfile.close() assert os.path.getsize(ppath) > 100 @@ -211,20 +214,31 @@ def test_pack_entity(self, rw_dir): pf = PackFile(ppath) assert pf.size() == len(pack_objs) assert pf.version() == PackFile.pack_version_default - assert pf.checksum() == binsha + assert pf.checksum() == pack_sha # verify index if ipath is not None: + ifile.close() assert os.path.getsize(ipath) > 100 - + idx = PackIndexFile(ipath) + assert idx.version() == PackIndexFile.index_version_default + assert idx.packfile_checksum() == pack_sha + assert idx.indexfile_checksum() == index_sha + assert idx.size() == len(pack_objs) #END verify files exist - - if ifile: - ifile.close() - #END handle index #END for each packpath, indexpath pair - # + # verify the packs throughly + rewind_streams() + entity = PackEntity.create(pack_objs, rw_dir) + count = 0 + for info in entity.info_iter(): + count += 1 + for use_crc in reversed(range(2)): + assert entity.is_valid_stream(info.binsha, use_crc) + # END for each crc mode + #END for each info + assert count == len(pack_objs) def test_pack_64(self): From 184a776960efdc2a83eac571c9c046ffcee3e7c8 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 31 Mar 2011 20:27:44 +0200 Subject: [PATCH 0138/2375] crc needs to be done on the pack object header as well, of course --- gitdb/pack.py | 22 ++++++++++++++++++---- gitdb/test/test_pack.py | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/gitdb/pack.py b/gitdb/pack.py index d90eeb991..7ae9786e6 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -127,15 +127,20 @@ def pack_object_at(data, offset, as_stream): # END handle info # END handle stream -def write_stream_to_pack(read, write, zstream, want_crc=False): +def write_stream_to_pack(read, write, zstream, base_crc=None): """Copy a stream as read from read function, zip it, and write the result. Count the number of written bytes and return it - :param want_crc: if True, the crc will be generated over the compressed data. - :return: tuple(no bytes read, no bytes written, crc32) crc might be 0 if want_crc + :param base_crc: if not None, the crc will be the base for all compressed data + we consecutively write and generate a crc32 from. If None, no crc will be generated + :return: tuple(no bytes read, no bytes written, crc32) crc might be 0 if base_crc was false""" br = 0 # bytes read bw = 0 # bytes written + want_crc = base_crc is not None crc = 0 + if want_crc: + crc = base_crc + #END initialize crc while True: chunk = read(chunk_size) @@ -651,6 +656,9 @@ def __init__(self, pack_or_index_path): def _set_cache_(self, attr): # currently this can only be _offset_map + # TODO: make this a simple sorted offset array which can be bisected + # to find the respective entry, from which we can take a +1 easily + # This might be slower, but should also be much lighter in memory ! offsets_sorted = sorted(self._index.offsets()) last_offset = len(self._pack.data()) - self._pack.footer_size assert offsets_sorted, "Cannot handle empty indices" @@ -926,15 +934,21 @@ def write_pack(cls, object_iter, pack_write, index_write=None, actual_count = 0 for obj in objs: actual_count += 1 + crc = 0 # object header hdr = create_pack_object_header(obj.type_id, obj.size) + if index_write: + crc = crc32(hdr) + else: + crc = None + #END handle crc pwrite(hdr) # data stream zstream = zlib.compressobj(zlib_compression) ostream = obj.stream - br, bw, crc = write_stream_to_pack(ostream.read, pwrite, zstream, want_crc = index_write) + br, bw, crc = write_stream_to_pack(ostream.read, pwrite, zstream, base_crc = crc) assert(br == obj.size) if wants_index: index.append(obj.binsha, crc, ofs) diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index e9c933e15..4a7f1caf2 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -234,7 +234,7 @@ def rewind_streams(): count = 0 for info in entity.info_iter(): count += 1 - for use_crc in reversed(range(2)): + for use_crc in range(2): assert entity.is_valid_stream(info.binsha, use_crc) # END for each crc mode #END for each info From 0c7a3ec9829caa6632afd3e46901be67c63ae7fa Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 31 Mar 2011 23:40:04 +0200 Subject: [PATCH 0139/2375] Fixed _perf module, which built, but didn't link dynamically. All the time, I think it never successfully imported, but its hard to believe this slipped by. Added performance test for pack-writing, which isn't really showing what I want as it currently read data from a densly compressed pack which takes most of the time in the nearly pure python implementation. Compared to c++, all the measured performance is just below anything I'd want to use. But we shouldn't forget this is just a test implementation, writing packs is quite simple actually, if you leave out the delta compression part and the delta logic --- gitdb/_delta_apply.c | 19 ++++---- gitdb/_delta_apply.h | 6 +-- gitdb/test/performance/test_pack_streaming.py | 43 +++++++++++++++++++ 3 files changed, 55 insertions(+), 13 deletions(-) diff --git a/gitdb/_delta_apply.c b/gitdb/_delta_apply.c index 96ab30af9..f03e7ea6d 100644 --- a/gitdb/_delta_apply.c +++ b/gitdb/_delta_apply.c @@ -1,4 +1,4 @@ -#include "_delta_apply.h" +#include <_delta_apply.h> #include #include #include @@ -463,7 +463,7 @@ void DIV_reset(DeltaInfoVector* vec) // Append one chunk to the end of the list, and return a pointer to it // It will not have been initialized ! -static inline +inline DeltaInfo* DIV_append(DeltaInfoVector* vec) { if (vec->size + 1 > vec->reserved_size){ @@ -703,7 +703,7 @@ typedef struct { } DeltaChunkList; -static + int DCL_init(DeltaChunkList*self, PyObject *args, PyObject *kwds) { if(args && PySequence_Size(args) > 0){ @@ -715,20 +715,20 @@ int DCL_init(DeltaChunkList*self, PyObject *args, PyObject *kwds) return 0; } -static + void DCL_dealloc(DeltaChunkList* self) { TSI_destroy(&(self->istream)); } -static + PyObject* DCL_py_rbound(DeltaChunkList* self) { return PyLong_FromUnsignedLongLong(self->istream.target_size); } // Write using a write function, taking remaining bytes from a base buffer -static + PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) { PyObject* pybuf = 0; @@ -769,13 +769,13 @@ PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) Py_RETURN_NONE; } -static PyMethodDef DCL_methods[] = { +PyMethodDef DCL_methods[] = { {"apply", (PyCFunction)DCL_apply, METH_VARARGS, "Apply the given iterable of delta streams" }, {"rbound", (PyCFunction)DCL_py_rbound, METH_NOARGS, NULL}, {NULL} /* Sentinel */ }; -static PyTypeObject DeltaChunkListType = { +PyTypeObject DeltaChunkListType = { PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ "DeltaChunkList", /*tp_name*/ @@ -897,7 +897,7 @@ uint compute_chunk_count(const uchar* data, const uchar* dend, bool read_header) return num_chunks; } -static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) +PyObject* connect_deltas(PyObject *self, PyObject *dstreams) { // obtain iterator PyObject* stream_iter = 0; @@ -1088,7 +1088,6 @@ static PyObject* connect_deltas(PyObject *self, PyObject *dstreams) // Write using a write function, taking remaining bytes from a base buffer // replaces the corresponding method in python -static PyObject* apply_delta(PyObject* self, PyObject* args) { PyObject* pybbuf = 0; diff --git a/gitdb/_delta_apply.h b/gitdb/_delta_apply.h index 3e7e5f926..1fcd53832 100644 --- a/gitdb/_delta_apply.h +++ b/gitdb/_delta_apply.h @@ -1,6 +1,6 @@ #include -static PyObject* connect_deltas(PyObject *self, PyObject *dstreams); -static PyObject* apply_delta(PyObject* self, PyObject* args); +extern PyObject* connect_deltas(PyObject *self, PyObject *dstreams); +extern PyObject* apply_delta(PyObject* self, PyObject* args); -static PyTypeObject DeltaChunkListType; +extern PyTypeObject DeltaChunkListType; diff --git a/gitdb/test/performance/test_pack_streaming.py b/gitdb/test/performance/test_pack_streaming.py index 22a62a39d..795ed1e26 100644 --- a/gitdb/test/performance/test_pack_streaming.py +++ b/gitdb/test/performance/test_pack_streaming.py @@ -8,14 +8,57 @@ ) from gitdb.db.pack import PackedDB +from gitdb.stream import NullStream +from gitdb.pack import PackEntity import os import sys from time import time +from nose import SkipTest + +class CountedNullStream(NullStream): + __slots__ = '_bw' + def __init__(self): + self._bw = 0 + + def bytes_written(self): + return self._bw + + def write(self, d): + self._bw += NullStream.write(self, d) + class TestPackStreamingPerformance(TestBigRepoR): + def test_pack_writing(self): + # see how fast we can write a pack from object streams. + # This will not be fast, as we take time for decompressing the streams as well + ostream = CountedNullStream() + pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) + + ni = 5000 + count = 0 + total_size = 0 + st = time() + objs = list() + for sha in pdb.sha_iter(): + count += 1 + objs.append(pdb.stream(sha)) + if count == ni: + break + #END gather objects for pack-writing + elapsed = time() - st + print >> sys.stderr, "PDB Streaming: Got %i streams by sha in in %f s ( %f streams/s )" % (ni, elapsed, ni / elapsed) + + st = time() + PackEntity.write_pack(objs, ostream.write) + elapsed = time() - st + total_kb = ostream.bytes_written() / 1000 + print >> sys.stderr, "PDB Streaming: Wrote pack of size %i kb in %f s (%f kb/s)" % (total_kb, elapsed, total_kb/elapsed) + + def test_stream_reading(self): + raise SkipTest() pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) # streaming only, meant for --with-profile runs From 03767cc17c6111c4c39cd4dde0517f5415515598 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 8 Jun 2011 15:08:59 +0200 Subject: [PATCH 0140/2375] Initial setup for the testing framework; includes setup tools configuration and readme --- .gitignore | 6 +++++ Makefile | 37 +++++++++++++++++++++++++++++ README.rst | 50 +++++++++++++++++++++++++++++++++++++++ setup.py | 49 ++++++++++++++++++++++++++++++++++++++ smmap/__init__.py | 7 ++++++ smmap/mman.py | 3 +++ smmap/stream.py | 7 ++++++ smmap/test/__init__.py | 0 smmap/test/lib.py | 24 +++++++++++++++++++ smmap/test/test_mman.py | 7 ++++++ smmap/test/test_stream.py | 7 ++++++ 11 files changed, 197 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.rst create mode 100755 setup.py create mode 100644 smmap/__init__.py create mode 100644 smmap/mman.py create mode 100644 smmap/stream.py create mode 100644 smmap/test/__init__.py create mode 100644 smmap/test/lib.py create mode 100644 smmap/test/test_mman.py create mode 100644 smmap/test/test_stream.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..6cfb58df1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +*.pyc +build/ +.coverage +coverage +dist/ +MANIFEST diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..ca3051dd4 --- /dev/null +++ b/Makefile @@ -0,0 +1,37 @@ +.PHONY: build sdist cover test clean-files clean-docs doc all + +all: + $(info Possible targets:) + $(info doc) + $(info clean-docs) + $(info clean-files) + $(info clean) + $(info test) + $(info coverage) + $(info build) + $(info sdist) + +doc: + cd docs && make html + +clean-docs: + cd docs && make clean + +clean-files: + git clean -fx + +clean: clean-files clean-docs + +test: + nosetests + +coverage: + nosetests --with-coverage --cover-package=smmap + +build: + ./setup.py build + +sdist: + ./setup.py sdist + + diff --git a/README.rst b/README.rst new file mode 100644 index 000000000..08dc7111f --- /dev/null +++ b/README.rst @@ -0,0 +1,50 @@ +#################### +Sliding MMap (smmap) +#################### +A straight forward implementation of a slidinging memory map. +The idea is that every access to a file goes through a memory map manager, which will on demand map a region of a file and provide a string-like object for reading. + +When reading from it, you will have to check whether you are still within your window boundary, and possibly obtain a new window as required. + +The great benefit of this system is that you can use it to map files of any size even on 32 bit systems. Additionally it will be able to close unused windows right away to return system resources. If there are multiple clients for the same file and location, the same window will be reused as well. + +As there is a global management facility, you are also able to forcibly free all open handles which is handy on windows, which would otherwise prevent the deletion of the involved files. + +For convenience, a stream class is provided which hides the usage of the memory manager behind a simple stream interface. + +************ +LIMITATIONS +************ +The access is readonly by design. + +************ +REQUIREMENTS +************ +* Python 2.4 or higher + +******* +Install +******* +TODO + +****** +Source +****** +The source is available at git://github.com/Byron/smmap.git and can be cloned using:: + + git clone git://github.com/Byron/smmap.git + +************ +MAILING LIST +************ +http://groups.google.com/group/git-python + +************* +ISSUE TRACKER +************* +https://github.com/Byron/smmap/issues + +******* +LICENSE +******* +New BSD License diff --git a/setup.py b/setup.py new file mode 100755 index 000000000..e2bb622fd --- /dev/null +++ b/setup.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +import os +import codecs +try: + from setuptools import setup, find_packages +except ImportError: + from ez_setup import use_setuptools + use_setuptools() + from setuptools import setup, find_packages + +import smmap + +if os.path.exists("README.rst"): + long_description = codecs.open('README.rst', "r", "utf-8").read() +else: + long_description = "See http://github.com/nvie/smmap/tree/master" + +setup( + name="smmap", + version=smmap.__version__, + description="A pure git implementation of a sliding window memory map manager", + author=smmap.__author__, + author_email=smmap.__contact__, + url=smmap.__homepage__, + platforms=["any"], + license="BSD", + packages=find_packages(), + zip_safe=True, + classifiers=[ + # Picked from + # http://pypi.python.org/pypi?:action=list_classifiers + #"Development Status :: 1 - Planning", + #"Development Status :: 2 - Pre-Alpha", + #"Development Status :: 3 - Alpha", + "Development Status :: 4 - Beta", + #"Development Status :: 5 - Production/Stable", + #"Development Status :: 6 - Mature", + #"Development Status :: 7 - Inactive", + "Environment :: Console", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Operating System :: POSIX", + "Operating System :: Windows", + "Operating System :: OSX", + "Programming Language :: Python", + ], + long_description=long_description, +) diff --git a/smmap/__init__.py b/smmap/__init__.py new file mode 100644 index 000000000..82cff638c --- /dev/null +++ b/smmap/__init__.py @@ -0,0 +1,7 @@ +"""Intialize the smmap package""" + +__author__ = "Sebastian Thiel" +__contact__ = "byronimo@gmail.com" +__homepage__ = "https://github.com/Byron/smmap" +version_info = (0, 8, 0) +__version__ = '.'.join(str(i) for i in version_info) diff --git a/smmap/mman.py b/smmap/mman.py new file mode 100644 index 000000000..dfa39db8c --- /dev/null +++ b/smmap/mman.py @@ -0,0 +1,3 @@ +"""Module containnig a memory memory manager which provides a sliding window on a number of memory mapped files""" + +__all__ = [] diff --git a/smmap/stream.py b/smmap/stream.py new file mode 100644 index 000000000..bc5e568ea --- /dev/null +++ b/smmap/stream.py @@ -0,0 +1,7 @@ +"""Module with a simple stream implementation using the memory manager""" + +from mman import * + +__all__ = [] + + diff --git a/smmap/test/__init__.py b/smmap/test/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/smmap/test/lib.py b/smmap/test/lib.py new file mode 100644 index 000000000..450dd9dda --- /dev/null +++ b/smmap/test/lib.py @@ -0,0 +1,24 @@ +"""Provide base classes for the test system""" +from unittest import TestCase + +__all__ = ['TestBase'] + + +class TestBase(TestCase): + """Foundation used by all tests""" + + #{ Configuration + + #} END configuration + + #{ Overrides + @classmethod + def setUpAll(cls): + # nothing for now + pass + + #END overrides + + #{ Interface + + #} END interface diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py new file mode 100644 index 000000000..43aef7771 --- /dev/null +++ b/smmap/test/test_mman.py @@ -0,0 +1,7 @@ +from lib import TestBase + +from smmap.mman import * + +class TestMMan(TestBase): + def test_basics(self): + assert False diff --git a/smmap/test/test_stream.py b/smmap/test/test_stream.py new file mode 100644 index 000000000..fae928d9a --- /dev/null +++ b/smmap/test/test_stream.py @@ -0,0 +1,7 @@ +from lib import TestBase + +from smmap.stream import * + +class TestStream(TestBase): + def test_basics(self): + assert False From b75a09b997e278e5351b60bc17b738cf62594fe0 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 8 Jun 2011 15:19:45 +0200 Subject: [PATCH 0141/2375] Added docs framework --- doc/.gitignore | 2 + doc/Makefile | 89 +++++++++++++++++++ doc/make.bat | 113 ++++++++++++++++++++++++ doc/source/changes.rst | 9 ++ doc/source/conf.py | 194 +++++++++++++++++++++++++++++++++++++++++ doc/source/index.rst | 23 +++++ 6 files changed, 430 insertions(+) create mode 100644 doc/.gitignore create mode 100644 doc/Makefile create mode 100644 doc/make.bat create mode 100644 doc/source/changes.rst create mode 100644 doc/source/conf.py create mode 100644 doc/source/index.rst diff --git a/doc/.gitignore b/doc/.gitignore new file mode 100644 index 000000000..32060acdd --- /dev/null +++ b/doc/.gitignore @@ -0,0 +1,2 @@ +build +*.version_info diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 000000000..675ec2094 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,89 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/smmap.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/smmap.qhc" + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ + "run these through (pdf)latex." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/doc/make.bat b/doc/make.bat new file mode 100644 index 000000000..6900a2a46 --- /dev/null +++ b/doc/make.bat @@ -0,0 +1,113 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +set SPHINXBUILD=sphinx-build +set BUILDDIR=build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. changes to make an overview over all changed/added/deprecated items + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\smmap.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\smmap.ghc + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +:end diff --git a/doc/source/changes.rst b/doc/source/changes.rst new file mode 100644 index 000000000..ee17e0af0 --- /dev/null +++ b/doc/source/changes.rst @@ -0,0 +1,9 @@ +######### +Changelog +######### + +********** +v0.8.0 +********** + +- Initial Release diff --git a/doc/source/conf.py b/doc/source/conf.py new file mode 100644 index 000000000..a0dac1166 --- /dev/null +++ b/doc/source/conf.py @@ -0,0 +1,194 @@ +# -*- coding: utf-8 -*- +# +# smmap documentation build configuration file, created by +# sphinx-quickstart on Wed Jun 8 15:14:25 2011. +# +# 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('.')) + +# -- 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.todo'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['.templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'smmap' +copyright = u'2011, Sebastian Thiel' + +# 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 = '0.8.0' +# The full version, including alpha/beta/rc tags. +release = '0.8.0' + +# 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 = [] + +# List of directories, relative to source directory, that shouldn't be searched +# for source files. +exclude_trees = [] + +# 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 = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# 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 = None + +# 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 = True + +# 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 = True + +# 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 = 'smmapdoc' + + +# -- 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', 'smmap.tex', u'smmap Documentation', + u'Sebastian Thiel', '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 diff --git a/doc/source/index.rst b/doc/source/index.rst new file mode 100644 index 000000000..cb03044e0 --- /dev/null +++ b/doc/source/index.rst @@ -0,0 +1,23 @@ +.. smmap documentation master file, created by + sphinx-quickstart on Wed Jun 8 15:14:25 2011. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to smmap's documentation! +================================= +**smmap** is a pure python implementation of a sliding memory map to help unifying memory mapped access on 32 and 64 bit systems and to help managing resources more efficiently. + +Contents: + +.. toctree:: + :maxdepth: 2 + + changes + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + From 2156e9ab02ea27289e6b26c11b024685b3816935 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 8 Jun 2011 19:15:41 +0200 Subject: [PATCH 0142/2375] Implemented Window including test. Started Region implementation as well as test, but noticed that a critical feature, the mmap's offset, doesn't exist prior to python 2.6. Its total crap, so is python --- README.rst | 5 +- smmap/mman.py | 110 +++++++++++++++++++++++++++++++++++++++- smmap/test/lib.py | 43 +++++++++++++++- smmap/test/test_mman.py | 67 +++++++++++++++++++++++- 4 files changed, 219 insertions(+), 6 deletions(-) diff --git a/README.rst b/README.rst index 08dc7111f..4c22eed2b 100644 --- a/README.rst +++ b/README.rst @@ -15,12 +15,13 @@ For convenience, a stream class is provided which hides the usage of the memory ************ LIMITATIONS ************ -The access is readonly by design. +* The access is readonly by design. +* In python below 2.6, memory maps will be created in compatability mode which works, but creates inefficient memory maps as they always start at offset 0. ************ REQUIREMENTS ************ -* Python 2.4 or higher +* runs Python 2.4 or higher, but needs Python 2.6 or higher to run properly as it needs the offset parameter of the mmap.mmap function. ******* Install diff --git a/smmap/mman.py b/smmap/mman.py index dfa39db8c..004987a8f 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -1,3 +1,111 @@ """Module containnig a memory memory manager which provides a sliding window on a number of memory mapped files""" -__all__ = [] +__all__ = ["MappedMemoryManager"] + +import os +import mmap + +from mmap import PAGESIZE + +#{ Utilities + +def align_to_page(num, round_up): + """Align the given integer number to the closest page offset, which usually is 4096 bytes. + :param round_up: if True, the next higher multiple of page size is used, otherwise + the lower page_size will be used (i.e. if True, 1 becomes 4096, otherwise it becomes 0) + :return: num rounded to closest page""" + res = (num / PAGESIZE) * PAGESIZE; + if round_up and (res != num): + res += PAGESIZE; + #END handle size + return res; + +#}END utilities + +class Window(object): + """Utility type which is used to snap windows towards each other, and to adjust their size""" + __slots__ = ( + 'ofs', # offset into the file in bytes + 'size' # size of the window in bytes + ) + + def __init__(self, offset, size): + self.ofs = offset + self.size = size + + def __repr__(self): + return "Window(%i, %i)" % (self.ofs, self.size) + + @classmethod + def from_region(cls, region): + """:return: new window from a region""" + return cls(region.ofs_begin(), region.size()) + + def ofs_end(self): + return self.ofs + self.size + + def align(self): + self.ofs = align_to_page(self.ofs, 0) + self.size = align_to_page(self.size, 1) + + def extend_left_to(self, window, max_size): + """Adjust the offset to start where the given window on our left ends if possible, + but don't make yourself larger than max_size. + The resize will assure that the new window still contains the old window area""" + rofs = self.ofs - window.ofs_end() + nsize = rofs + self.size + rofs -= nsize - min(nsize, max_size) + self.ofs = self.ofs - rofs + self.size += rofs + + def extend_right_to(self, window, max_size): + """Adjust the size to make our window end where the right window begins, but don't + get larger than max_size""" + self.size = min(self.size + (window.ofs - self.ofs_end()), max_size) + + +class Region(object): + """Defines a mapped region of memory, aligned to pagesizes + :note: deallocates used region automatically on destruction""" + __slots__ = ( + '_b' , # beginning of mapping + '_mf', # mapped memory chunk (as returned by mmap) + '_nc', # number of clients using this region + '_uc' # total amount of usages + ) + + + def __init__(self, path, ofs, size): + """Initialize a region, allocate the memory map + :param path: path to the file to map + :param ofs: **aligned** offset into the file to be mapped + :param size: if size is larger then the file on disk, the whole file will be + allocated the the size automatically adjusted + :raise Exception: if no memory can be allocated""" + self._b = ofs + self._nc = 0 + self._uc = 0 + + fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)) + try: + self._mf = mmap.mmap(fd, size, access=mmap.ACCESS_READ, offset=ofs) + finally: + os.close(fd) + #END close file handle + + +class MappedMemoryManager(object): + """Maintains a list of ranges of mapped memory regions in one or more files and allows to easily + obtain additional regions assuring there is no overlap. + Once a certain memory limit is reached globally, or if there cannot be more open file handles + which result from each mmap call, the least recently used, and currently unused mapped regions + are unloaded automatically. + + :note: currently not thread-safe ! + :note: in the current implementation, we will automatically unload windows if we either cannot + create more memory maps (as the open file handles limit is hit) or if we have allocated more than + a safe amount of memory already, which would possibly cause memory allocations to fail as our address + space is full.""" + + __slots__ = tuple() + diff --git a/smmap/test/lib.py b/smmap/test/lib.py index 450dd9dda..0605313d3 100644 --- a/smmap/test/lib.py +++ b/smmap/test/lib.py @@ -1,9 +1,50 @@ """Provide base classes for the test system""" from unittest import TestCase +import os +import tempfile -__all__ = ['TestBase'] +__all__ = ['TestBase', 'FileCreator'] +#{ Utilities + +class FileCreator(object): + """A instance which creates a temporary file with a prefix and a given size + and provides this info to the user. + Once it gets deleted, it will remove the temporary file as well.""" + __slots__ = ("_size", "_path") + + def __init__(self, size, prefix=''): + assert size, "Require size to be larger 0" + + self._path = tempfile.mktemp(prefix=prefix) + self._size = size + + fp = open(self._path, "wb") + fp.seek(size-1) + fp.write('1') + fp.close() + + assert os.path.getsize(self.path) == size + + def __del__(self): + try: + os.remove(self.path) + except OSError: + pass + #END exception handling + + + @property + def path(self): + return self._path + + @property + def size(self): + return self._size + +#} END utilities + class TestBase(TestCase): """Foundation used by all tests""" diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 43aef7771..faee8c9cf 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -1,7 +1,70 @@ -from lib import TestBase +from lib import TestBase, FileCreator from smmap.mman import * +from smmap.mman import Region +from smmap.mman import Window + +import sys +import mmap class TestMMan(TestBase): + + _window_test_size = 1000 * 1000 * 8 + 5195 + + def test_window(self): + wl = Window(0, 1) # left + wc = Window(1, 1) # center + wc2 = Window(10, 5) # another center + wr = Window(8000, 50) # right + + assert wl.ofs_end() == 1 + assert wc.ofs_end() == 2 + assert wr.ofs_end() == 8050 + + # extension does nothing if already in place + maxsize = 100 + wc.extend_left_to(wl, maxsize) + assert wc.ofs == 1 and wc.size == 1 + wl.extend_right_to(wc, maxsize) + wl.extend_right_to(wc, maxsize) + assert wl.ofs == 0 and wl.size == 1 + + # an actual left extension + pofs_end = wc2.ofs_end() + wc2.extend_left_to(wc, maxsize) + assert wc2.ofs == wc.ofs_end() and pofs_end == wc2.ofs_end() + + + # respects maxsize + wc.extend_right_to(wr, maxsize) + assert wc.ofs == 1 and wc.size == maxsize + wc.extend_right_to(wr, maxsize) + assert wc.ofs == 1 and wc.size == maxsize + + # without maxsize + wc.extend_right_to(wr, sys.maxint) + assert wc.ofs_end() == wr.ofs and wc.ofs == 1 + + # extend left + wr.extend_left_to(wc2, maxsize) + wr.extend_left_to(wc2, maxsize) + assert wr.size == maxsize + + wr.extend_left_to(wc2, sys.maxint) + assert wr.ofs == wc2.ofs_end() + + wc.align() + assert wc.ofs == 0 and wc.size == mmap.PAGESIZE*2 + + + def test_region(self): + fc = FileCreator(self._window_test_size, "window_test") + rfull = Region(fc.path, 0, fc.size) + + + + Window.from_region # todo + pass + def test_basics(self): - assert False + pass From 66a78db0127ed84e22cda5aed2009955765959e4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 8 Jun 2011 20:26:51 +0200 Subject: [PATCH 0143/2375] Implemented MappedRegion type including test --- smmap/mman.py | 73 ++++++++++++++++++++++++++++++++++++++--- smmap/test/test_mman.py | 23 ++++++++++--- 2 files changed, 87 insertions(+), 9 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 004987a8f..c5a388750 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -3,6 +3,7 @@ __all__ = ["MappedMemoryManager"] import os +import sys import mmap from mmap import PAGESIZE @@ -64,16 +65,22 @@ def extend_right_to(self, window, max_size): self.size = min(self.size + (window.ofs - self.ofs_end()), max_size) -class Region(object): +class MappedRegion(object): """Defines a mapped region of memory, aligned to pagesizes :note: deallocates used region automatically on destruction""" - __slots__ = ( + __slots__ = [ '_b' , # beginning of mapping '_mf', # mapped memory chunk (as returned by mmap) '_nc', # number of clients using this region - '_uc' # total amount of usages - ) + '_uc', # total amount of usages + '_ms' # actual size of the mapping + ] + _need_compat_layer = sys.version_info[1] < 6 + if _need_compat_layer: + __slots__.append('_mfb') # mapped memory buffer to provide offset + #END handle additional slot + def __init__(self, path, ofs, size): """Initialize a region, allocate the memory map @@ -88,10 +95,66 @@ def __init__(self, path, ofs, size): fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)) try: - self._mf = mmap.mmap(fd, size, access=mmap.ACCESS_READ, offset=ofs) + kwargs = dict(access=mmap.ACCESS_READ, offset=ofs) + corrected_size = size + if self._need_compat_layer: + del(kwargs['offset']) + corrected_size += ofs + # END handle python not supporting offset ! Arg + + # have to correct size, otherwise (instead of the c version) it will + # bark that the size is too large ... many extra file accesses because + # if this ... argh ! + self._mf = mmap.mmap(fd, min(os.fstat(fd).st_size, corrected_size), **kwargs) + + print len(self._mf) + if self._need_compat_layer: + self._mfb = buffer(self._mf, ofs, size) + #END handle buffer wrapping finally: os.close(fd) #END close file handle + + def ofs_begin(self): + """:return: absolute byte offset to the first byte of the mapping""" + return self._b + + def size(self): + """:return: total size of the mapped region in bytes""" + return len(self._mf) + + def ofs_end(self): + """:return: Absolute offset to one byte beyond the mapping into the file""" + return self._b + self.size() + + def includes_ofs(self, ofs): + """:return: True if the given offset can be read in our mapped region""" + return (ofs >= self.ofs_begin()) and (ofs <= self.ofs_end()) + + def client_count(self): + """:return: number of clients currently using this region""" + return self._nc + + def adjust_client_count(self, ofs): + """Adjust the client count by the given positive or negative offset""" + self._nc += ofs + + def usage_count(self): + """:return: amount of usages so far""" + return self._uc + + def adjust_usage_count(self, ofs): + """Adjust the usage count by the given positive or negative offset""" + self._uc += ofs + + # re-define all methods which need offset adjustments in compatibility mode + if _need_compat_layer: + def size(self): + return len(self._mf) - self._b + + def ofs_end(self): + return len(self._mf) + #END handle compat layer class MappedMemoryManager(object): diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index faee8c9cf..482ef923c 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -1,7 +1,7 @@ from lib import TestBase, FileCreator from smmap.mman import * -from smmap.mman import Region +from smmap.mman import MappedRegion from smmap.mman import Window import sys @@ -59,12 +59,27 @@ def test_window(self): def test_region(self): fc = FileCreator(self._window_test_size, "window_test") - rfull = Region(fc.path, 0, fc.size) + half_size = fc.size / 2 + rofs = 4000 + rfull = MappedRegion(fc.path, 0, fc.size) + rhalfofs = MappedRegion(fc.path, rofs, fc.size) + rhalfsize = MappedRegion(fc.path, 0, half_size) + # offsets + assert rfull.ofs_begin() == 0 and rfull.size() == fc.size + assert rfull.ofs_end() == fc.size # if this method works, it works always + assert rhalfofs.ofs_begin() == rofs and rhalfofs.size() == fc.size - rofs + assert rhalfsize.ofs_begin() == 0 and rhalfsize.size() == half_size + + assert rfull.includes_ofs(0) and rfull.includes_ofs(fc.size-1) and rfull.includes_ofs(half_size) + assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxint) + assert rhalfofs.includes_ofs(rofs) and not rhalfofs.includes_ofs(0) + + # window constructor + w = Window.from_region(rfull) + assert w.ofs == rfull.ofs_begin() and w.ofs_end() == rfull.ofs_end() - Window.from_region # todo - pass def test_basics(self): pass From 0bf73877f860a86d9cf601154e9a9f76292e63c9 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 8 Jun 2011 21:00:33 +0200 Subject: [PATCH 0144/2375] Fixed bug in test case as it didn't properly align its offset to a page --- smmap/mman.py | 20 +++++++++++++++----- smmap/test/test_mman.py | 18 +++++++++++++++--- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index c5a388750..27904f5d0 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -7,6 +7,7 @@ import mmap from mmap import PAGESIZE +from sys import getrefcount #{ Utilities @@ -71,7 +72,6 @@ class MappedRegion(object): __slots__ = [ '_b' , # beginning of mapping '_mf', # mapped memory chunk (as returned by mmap) - '_nc', # number of clients using this region '_uc', # total amount of usages '_ms' # actual size of the mapping ] @@ -90,24 +90,24 @@ def __init__(self, path, ofs, size): allocated the the size automatically adjusted :raise Exception: if no memory can be allocated""" self._b = ofs - self._nc = 0 self._uc = 0 fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)) try: kwargs = dict(access=mmap.ACCESS_READ, offset=ofs) corrected_size = size + sizeofs = ofs if self._need_compat_layer: del(kwargs['offset']) corrected_size += ofs + sizeofs = 0 # END handle python not supporting offset ! Arg # have to correct size, otherwise (instead of the c version) it will # bark that the size is too large ... many extra file accesses because # if this ... argh ! - self._mf = mmap.mmap(fd, min(os.fstat(fd).st_size, corrected_size), **kwargs) + self._mf = mmap.mmap(fd, min(os.fstat(fd).st_size - sizeofs, corrected_size - sizeofs), **kwargs) - print len(self._mf) if self._need_compat_layer: self._mfb = buffer(self._mf, ofs, size) #END handle buffer wrapping @@ -133,7 +133,8 @@ def includes_ofs(self, ofs): def client_count(self): """:return: number of clients currently using this region""" - return self._nc + # -1: self on stack, -1 self in this method, -1 self in getrefcount + return getrefcount(self)-3 def adjust_client_count(self, ofs): """Adjust the client count by the given positive or negative offset""" @@ -157,6 +158,15 @@ def ofs_end(self): #END handle compat layer +class Cursor(object): + """Pointer into the mapped region of the memory manager, keeping the current window + alive until it is destroyed""" + + +class MappedRegionList(list): + """List of MappedRegion instances with specific functionality""" + + class MappedMemoryManager(object): """Maintains a list of ranges of mapped memory regions in one or more files and allows to easily obtain additional regions assuring there is no overlap. diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 482ef923c..00c9d90e8 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -1,8 +1,11 @@ from lib import TestBase, FileCreator from smmap.mman import * -from smmap.mman import MappedRegion +from smmap.mman import align_to_page from smmap.mman import Window +from smmap.mman import MappedRegion +from smmap.mman import MappedRegionList +from smmap.mman import Cursor import sys import mmap @@ -56,11 +59,10 @@ def test_window(self): wc.align() assert wc.ofs == 0 and wc.size == mmap.PAGESIZE*2 - def test_region(self): fc = FileCreator(self._window_test_size, "window_test") half_size = fc.size / 2 - rofs = 4000 + rofs = align_to_page(4200, False) rfull = MappedRegion(fc.path, 0, fc.size) rhalfofs = MappedRegion(fc.path, rofs, fc.size) rhalfsize = MappedRegion(fc.path, 0, half_size) @@ -76,10 +78,20 @@ def test_region(self): assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxint) assert rhalfofs.includes_ofs(rofs) and not rhalfofs.includes_ofs(0) + # auto-refcount + assert rfull.client_count() == 1 + rfull2 = rfull + assert rfull.client_count() == 2 + # window constructor w = Window.from_region(rfull) assert w.ofs == rfull.ofs_begin() and w.ofs_end() == rfull.ofs_end() + def test_region_list(self): + pass + + def test_cursor(self): + pass def test_basics(self): pass From 25e50356ab7c5392cece8132a8ee5b99c1789734 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 8 Jun 2011 21:25:07 +0200 Subject: [PATCH 0145/2375] Added rather trivial implementation for the region list, including test --- smmap/mman.py | 30 ++++++++++++++++++++++++++---- smmap/test/test_mman.py | 7 ++++++- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 27904f5d0..e0b4a5e64 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -158,15 +158,37 @@ def ofs_end(self): #END handle compat layer +class MappedRegionList(list): + """List of MappedRegion instances associating a path with a list of regions.""" + __slots__ = ( + '_path', # path which is mapped by all our regions + '_file_size' # total size of the file we map + ) + + def __new__(cls, path): + return super(MappedRegionList, cls).__new__(cls) + + def __init__(self, path): + self._path = path + self._file_size = None + + def path(self): + """:return: path to file whose regions we manage""" + return self._path + + def file_size(self): + """:return: size of file we manager""" + if self._file_size is None: + self._file_size = os.stat(self._path).st_size + #END update file size + return self._file_size + + class Cursor(object): """Pointer into the mapped region of the memory manager, keeping the current window alive until it is destroyed""" - -class MappedRegionList(list): - """List of MappedRegion instances with specific functionality""" - class MappedMemoryManager(object): """Maintains a list of ranges of mapped memory regions in one or more files and allows to easily obtain additional regions assuring there is no overlap. diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 00c9d90e8..2027d9004 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -88,7 +88,12 @@ def test_region(self): assert w.ofs == rfull.ofs_begin() and w.ofs_end() == rfull.ofs_end() def test_region_list(self): - pass + fc = FileCreator(100, "sample_file") + ml = MappedRegionList(fc.path) + + assert len(ml) == 0 + assert ml.path() == fc.path + assert ml.file_size() == fc.size def test_cursor(self): pass From cab0e3d6d995b7814e09157086d07c3ca2c901d4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 8 Jun 2011 22:36:11 +0200 Subject: [PATCH 0146/2375] Moved all utility types into their own module --- smmap/mman.py | 204 ++++++---------------------------------- smmap/test/lib.py | 2 +- smmap/test/test_mman.py | 93 +----------------- smmap/test/test_util.py | 89 ++++++++++++++++++ smmap/util.py | 189 +++++++++++++++++++++++++++++++++++++ 5 files changed, 309 insertions(+), 268 deletions(-) create mode 100644 smmap/test/test_util.py create mode 100644 smmap/util.py diff --git a/smmap/mman.py b/smmap/mman.py index e0b4a5e64..0ecc1aad1 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -1,192 +1,46 @@ """Module containnig a memory memory manager which provides a sliding window on a number of memory mapped files""" -__all__ = ["MappedMemoryManager"] +__all__ = ["MappedMemoryManager", "MemoryCursor"] -import os -import sys -import mmap - -from mmap import PAGESIZE -from sys import getrefcount - -#{ Utilities - -def align_to_page(num, round_up): - """Align the given integer number to the closest page offset, which usually is 4096 bytes. - :param round_up: if True, the next higher multiple of page size is used, otherwise - the lower page_size will be used (i.e. if True, 1 becomes 4096, otherwise it becomes 0) - :return: num rounded to closest page""" - res = (num / PAGESIZE) * PAGESIZE; - if round_up and (res != num): - res += PAGESIZE; - #END handle size - return res; - -#}END utilities - -class Window(object): - """Utility type which is used to snap windows towards each other, and to adjust their size""" - __slots__ = ( - 'ofs', # offset into the file in bytes - 'size' # size of the window in bytes +from util import ( + MemoryWindow, + MappedRegion, + MappedRegionList, ) - def __init__(self, offset, size): - self.ofs = offset - self.size = size - - def __repr__(self): - return "Window(%i, %i)" % (self.ofs, self.size) - - @classmethod - def from_region(cls, region): - """:return: new window from a region""" - return cls(region.ofs_begin(), region.size()) - - def ofs_end(self): - return self.ofs + self.size - def align(self): - self.ofs = align_to_page(self.ofs, 0) - self.size = align_to_page(self.size, 1) - - def extend_left_to(self, window, max_size): - """Adjust the offset to start where the given window on our left ends if possible, - but don't make yourself larger than max_size. - The resize will assure that the new window still contains the old window area""" - rofs = self.ofs - window.ofs_end() - nsize = rofs + self.size - rofs -= nsize - min(nsize, max_size) - self.ofs = self.ofs - rofs - self.size += rofs - - def extend_right_to(self, window, max_size): - """Adjust the size to make our window end where the right window begins, but don't - get larger than max_size""" - self.size = min(self.size + (window.ofs - self.ofs_end()), max_size) - - -class MappedRegion(object): - """Defines a mapped region of memory, aligned to pagesizes - :note: deallocates used region automatically on destruction""" - __slots__ = [ - '_b' , # beginning of mapping - '_mf', # mapped memory chunk (as returned by mmap) - '_uc', # total amount of usages - '_ms' # actual size of the mapping - ] - _need_compat_layer = sys.version_info[1] < 6 - - if _need_compat_layer: - __slots__.append('_mfb') # mapped memory buffer to provide offset - #END handle additional slot - +class MemoryCursor(object): + """Pointer into the mapped region of the memory manager, keeping the current window + alive until it is destroyed""" + __slots__ = ( + '_manager', # the manger keeping all file regions + '_regions', # a regions list with regions for our file + '_region', # WEAK REF to our current region + '_ofs', # relative offset from the actually mapped area to our start area + '_size' # maximum size we should provide + ) - def __init__(self, path, ofs, size): - """Initialize a region, allocate the memory map - :param path: path to the file to map - :param ofs: **aligned** offset into the file to be mapped - :param size: if size is larger then the file on disk, the whole file will be - allocated the the size automatically adjusted - :raise Exception: if no memory can be allocated""" - self._b = ofs - self._uc = 0 - - fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)) - try: - kwargs = dict(access=mmap.ACCESS_READ, offset=ofs) - corrected_size = size - sizeofs = ofs - if self._need_compat_layer: - del(kwargs['offset']) - corrected_size += ofs - sizeofs = 0 - # END handle python not supporting offset ! Arg - - # have to correct size, otherwise (instead of the c version) it will - # bark that the size is too large ... many extra file accesses because - # if this ... argh ! - self._mf = mmap.mmap(fd, min(os.fstat(fd).st_size - sizeofs, corrected_size - sizeofs), **kwargs) - - if self._need_compat_layer: - self._mfb = buffer(self._mf, ofs, size) - #END handle buffer wrapping - finally: - os.close(fd) - #END close file handle - - def ofs_begin(self): - """:return: absolute byte offset to the first byte of the mapping""" - return self._b - - def size(self): - """:return: total size of the mapped region in bytes""" - return len(self._mf) + def __init__(self, manager = None, regions = None): + self._manager = manager + self._regions = regions + self._region = region + self._ofs = 0 + self._size = 0 - def ofs_end(self): - """:return: Absolute offset to one byte beyond the mapping into the file""" - return self._b + self.size() + def __del__(self): + self._destroy() - def includes_ofs(self, ofs): - """:return: True if the given offset can be read in our mapped region""" - return (ofs >= self.ofs_begin()) and (ofs <= self.ofs_end()) + def _destroy(self): + """Destruction code to decrement counters""" - def client_count(self): - """:return: number of clients currently using this region""" - # -1: self on stack, -1 self in this method, -1 self in getrefcount - return getrefcount(self)-3 + def _copy_from(self, rhs): + """Copy all data from rhs into this instance, handles usage count""" - def adjust_client_count(self, ofs): - """Adjust the client count by the given positive or negative offset""" - self._nc += ofs - - def usage_count(self): - """:return: amount of usages so far""" - return self._uc - - def adjust_usage_count(self, ofs): - """Adjust the usage count by the given positive or negative offset""" - self._uc += ofs - - # re-define all methods which need offset adjustments in compatibility mode - if _need_compat_layer: - def size(self): - return len(self._mf) - self._b - - def ofs_end(self): - return len(self._mf) - #END handle compat layer + #{ Interface - -class MappedRegionList(list): - """List of MappedRegion instances associating a path with a list of regions.""" - __slots__ = ( - '_path', # path which is mapped by all our regions - '_file_size' # total size of the file we map - ) - - def __new__(cls, path): - return super(MappedRegionList, cls).__new__(cls) - def __init__(self, path): - self._path = path - self._file_size = None - - def path(self): - """:return: path to file whose regions we manage""" - return self._path - - def file_size(self): - """:return: size of file we manager""" - if self._file_size is None: - self._file_size = os.stat(self._path).st_size - #END update file size - return self._file_size + #} END interface - -class Cursor(object): - """Pointer into the mapped region of the memory manager, keeping the current window - alive until it is destroyed""" class MappedMemoryManager(object): diff --git a/smmap/test/lib.py b/smmap/test/lib.py index 0605313d3..6957dcab0 100644 --- a/smmap/test/lib.py +++ b/smmap/test/lib.py @@ -49,7 +49,7 @@ class TestBase(TestCase): """Foundation used by all tests""" #{ Configuration - + k_window_test_size = 1000 * 1000 * 8 + 5195 #} END configuration #{ Overrides diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 2027d9004..edc2ec2fe 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -1,102 +1,11 @@ from lib import TestBase, FileCreator from smmap.mman import * -from smmap.mman import align_to_page -from smmap.mman import Window -from smmap.mman import MappedRegion -from smmap.mman import MappedRegionList -from smmap.mman import Cursor - -import sys -import mmap class TestMMan(TestBase): - _window_test_size = 1000 * 1000 * 8 + 5195 - - def test_window(self): - wl = Window(0, 1) # left - wc = Window(1, 1) # center - wc2 = Window(10, 5) # another center - wr = Window(8000, 50) # right - - assert wl.ofs_end() == 1 - assert wc.ofs_end() == 2 - assert wr.ofs_end() == 8050 - - # extension does nothing if already in place - maxsize = 100 - wc.extend_left_to(wl, maxsize) - assert wc.ofs == 1 and wc.size == 1 - wl.extend_right_to(wc, maxsize) - wl.extend_right_to(wc, maxsize) - assert wl.ofs == 0 and wl.size == 1 - - # an actual left extension - pofs_end = wc2.ofs_end() - wc2.extend_left_to(wc, maxsize) - assert wc2.ofs == wc.ofs_end() and pofs_end == wc2.ofs_end() - - - # respects maxsize - wc.extend_right_to(wr, maxsize) - assert wc.ofs == 1 and wc.size == maxsize - wc.extend_right_to(wr, maxsize) - assert wc.ofs == 1 and wc.size == maxsize - - # without maxsize - wc.extend_right_to(wr, sys.maxint) - assert wc.ofs_end() == wr.ofs and wc.ofs == 1 - - # extend left - wr.extend_left_to(wc2, maxsize) - wr.extend_left_to(wc2, maxsize) - assert wr.size == maxsize - - wr.extend_left_to(wc2, sys.maxint) - assert wr.ofs == wc2.ofs_end() - - wc.align() - assert wc.ofs == 0 and wc.size == mmap.PAGESIZE*2 - - def test_region(self): - fc = FileCreator(self._window_test_size, "window_test") - half_size = fc.size / 2 - rofs = align_to_page(4200, False) - rfull = MappedRegion(fc.path, 0, fc.size) - rhalfofs = MappedRegion(fc.path, rofs, fc.size) - rhalfsize = MappedRegion(fc.path, 0, half_size) - - # offsets - assert rfull.ofs_begin() == 0 and rfull.size() == fc.size - assert rfull.ofs_end() == fc.size # if this method works, it works always - - assert rhalfofs.ofs_begin() == rofs and rhalfofs.size() == fc.size - rofs - assert rhalfsize.ofs_begin() == 0 and rhalfsize.size() == half_size - - assert rfull.includes_ofs(0) and rfull.includes_ofs(fc.size-1) and rfull.includes_ofs(half_size) - assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxint) - assert rhalfofs.includes_ofs(rofs) and not rhalfofs.includes_ofs(0) - - # auto-refcount - assert rfull.client_count() == 1 - rfull2 = rfull - assert rfull.client_count() == 2 - - # window constructor - w = Window.from_region(rfull) - assert w.ofs == rfull.ofs_begin() and w.ofs_end() == rfull.ofs_end() - - def test_region_list(self): - fc = FileCreator(100, "sample_file") - ml = MappedRegionList(fc.path) - - assert len(ml) == 0 - assert ml.path() == fc.path - assert ml.file_size() == fc.size - def test_cursor(self): - pass + man = MappedMemoryManager() def test_basics(self): pass diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py new file mode 100644 index 000000000..815391613 --- /dev/null +++ b/smmap/test/test_util.py @@ -0,0 +1,89 @@ +from lib import TestBase, FileCreator + +from smmap.util import * + +import sys + +class TestMMan(TestBase): + + def test_window(self): + wl = MemoryWindow(0, 1) # left + wc = MemoryWindow(1, 1) # center + wc2 = MemoryWindow(10, 5) # another center + wr = MemoryWindow(8000, 50) # right + + assert wl.ofs_end() == 1 + assert wc.ofs_end() == 2 + assert wr.ofs_end() == 8050 + + # extension does nothing if already in place + maxsize = 100 + wc.extend_left_to(wl, maxsize) + assert wc.ofs == 1 and wc.size == 1 + wl.extend_right_to(wc, maxsize) + wl.extend_right_to(wc, maxsize) + assert wl.ofs == 0 and wl.size == 1 + + # an actual left extension + pofs_end = wc2.ofs_end() + wc2.extend_left_to(wc, maxsize) + assert wc2.ofs == wc.ofs_end() and pofs_end == wc2.ofs_end() + + + # respects maxsize + wc.extend_right_to(wr, maxsize) + assert wc.ofs == 1 and wc.size == maxsize + wc.extend_right_to(wr, maxsize) + assert wc.ofs == 1 and wc.size == maxsize + + # without maxsize + wc.extend_right_to(wr, sys.maxint) + assert wc.ofs_end() == wr.ofs and wc.ofs == 1 + + # extend left + wr.extend_left_to(wc2, maxsize) + wr.extend_left_to(wc2, maxsize) + assert wr.size == maxsize + + wr.extend_left_to(wc2, sys.maxint) + assert wr.ofs == wc2.ofs_end() + + wc.align() + assert wc.ofs == 0 and wc.size == PAGESIZE*2 + + def test_region(self): + fc = FileCreator(self.k_window_test_size, "window_test") + half_size = fc.size / 2 + rofs = align_to_page(4200, False) + rfull = MappedRegion(fc.path, 0, fc.size) + rhalfofs = MappedRegion(fc.path, rofs, fc.size) + rhalfsize = MappedRegion(fc.path, 0, half_size) + + # offsets + assert rfull.ofs_begin() == 0 and rfull.size() == fc.size + assert rfull.ofs_end() == fc.size # if this method works, it works always + + assert rhalfofs.ofs_begin() == rofs and rhalfofs.size() == fc.size - rofs + assert rhalfsize.ofs_begin() == 0 and rhalfsize.size() == half_size + + assert rfull.includes_ofs(0) and rfull.includes_ofs(fc.size-1) and rfull.includes_ofs(half_size) + assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxint) + assert rhalfofs.includes_ofs(rofs) and not rhalfofs.includes_ofs(0) + + # auto-refcount + assert rfull.client_count() == 1 + rfull2 = rfull + assert rfull.client_count() == 2 + + # window constructor + w = MemoryWindow.from_region(rfull) + assert w.ofs == rfull.ofs_begin() and w.ofs_end() == rfull.ofs_end() + + def test_region_list(self): + fc = FileCreator(100, "sample_file") + ml = MappedRegionList(fc.path) + + assert len(ml) == 0 + assert ml.path() == fc.path + assert ml.file_size() == fc.size + diff --git a/smmap/util.py b/smmap/util.py new file mode 100644 index 000000000..784227752 --- /dev/null +++ b/smmap/util.py @@ -0,0 +1,189 @@ +"""Module containnig a memory memory manager which provides a sliding window on a number of memory mapped files""" +import os +import sys +import mmap + +from mmap import PAGESIZE +from sys import getrefcount + +__all__ = ["align_to_page", "MemoryWindow", "MappedRegion", "MappedRegionList", "PAGESIZE"] + +#{ Utilities + +def align_to_page(num, round_up): + """Align the given integer number to the closest page offset, which usually is 4096 bytes. + :param round_up: if True, the next higher multiple of page size is used, otherwise + the lower page_size will be used (i.e. if True, 1 becomes 4096, otherwise it becomes 0) + :return: num rounded to closest page""" + res = (num / PAGESIZE) * PAGESIZE; + if round_up and (res != num): + res += PAGESIZE; + #END handle size + return res; + +#}END utilities + + +#{ Utility Classes + +class MemoryWindow(object): + """Utility type which is used to snap windows towards each other, and to adjust their size""" + __slots__ = ( + 'ofs', # offset into the file in bytes + 'size' # size of the window in bytes + ) + + def __init__(self, offset, size): + self.ofs = offset + self.size = size + + def __repr__(self): + return "MemoryWindow(%i, %i)" % (self.ofs, self.size) + + @classmethod + def from_region(cls, region): + """:return: new window from a region""" + return cls(region.ofs_begin(), region.size()) + + def ofs_end(self): + return self.ofs + self.size + + def align(self): + self.ofs = align_to_page(self.ofs, 0) + self.size = align_to_page(self.size, 1) + + def extend_left_to(self, window, max_size): + """Adjust the offset to start where the given window on our left ends if possible, + but don't make yourself larger than max_size. + The resize will assure that the new window still contains the old window area""" + rofs = self.ofs - window.ofs_end() + nsize = rofs + self.size + rofs -= nsize - min(nsize, max_size) + self.ofs = self.ofs - rofs + self.size += rofs + + def extend_right_to(self, window, max_size): + """Adjust the size to make our window end where the right window begins, but don't + get larger than max_size""" + self.size = min(self.size + (window.ofs - self.ofs_end()), max_size) + + +class MappedRegion(object): + """Defines a mapped region of memory, aligned to pagesizes + :note: deallocates used region automatically on destruction""" + __slots__ = [ + '_b' , # beginning of mapping + '_mf', # mapped memory chunk (as returned by mmap) + '_uc', # total amount of usages + '_ms', # actual size of the mapping + '__weakref__' # allow weak references to a region + ] + _need_compat_layer = sys.version_info[1] < 6 + + if _need_compat_layer: + __slots__.append('_mfb') # mapped memory buffer to provide offset + #END handle additional slot + + + def __init__(self, path, ofs, size): + """Initialize a region, allocate the memory map + :param path: path to the file to map + :param ofs: **aligned** offset into the file to be mapped + :param size: if size is larger then the file on disk, the whole file will be + allocated the the size automatically adjusted + :raise Exception: if no memory can be allocated""" + self._b = ofs + self._uc = 0 + + fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)) + try: + kwargs = dict(access=mmap.ACCESS_READ, offset=ofs) + corrected_size = size + sizeofs = ofs + if self._need_compat_layer: + del(kwargs['offset']) + corrected_size += ofs + sizeofs = 0 + # END handle python not supporting offset ! Arg + + # have to correct size, otherwise (instead of the c version) it will + # bark that the size is too large ... many extra file accesses because + # if this ... argh ! + self._mf = mmap.mmap(fd, min(os.fstat(fd).st_size - sizeofs, corrected_size - sizeofs), **kwargs) + + if self._need_compat_layer: + self._mfb = buffer(self._mf, ofs, size) + #END handle buffer wrapping + finally: + os.close(fd) + #END close file handle + + def ofs_begin(self): + """:return: absolute byte offset to the first byte of the mapping""" + return self._b + + def size(self): + """:return: total size of the mapped region in bytes""" + return len(self._mf) + + def ofs_end(self): + """:return: Absolute offset to one byte beyond the mapping into the file""" + return self._b + self.size() + + def includes_ofs(self, ofs): + """:return: True if the given offset can be read in our mapped region""" + return (ofs >= self.ofs_begin()) and (ofs <= self.ofs_end()) + + def client_count(self): + """:return: number of clients currently using this region""" + # -1: self on stack, -1 self in this method, -1 self in getrefcount + return getrefcount(self)-3 + + def adjust_client_count(self, ofs): + """Adjust the client count by the given positive or negative offset""" + self._nc += ofs + + def usage_count(self): + """:return: amount of usages so far""" + return self._uc + + def adjust_usage_count(self, ofs): + """Adjust the usage count by the given positive or negative offset""" + self._uc += ofs + + # re-define all methods which need offset adjustments in compatibility mode + if _need_compat_layer: + def size(self): + return len(self._mf) - self._b + + def ofs_end(self): + return len(self._mf) + #END handle compat layer + + +class MappedRegionList(list): + """List of MappedRegion instances associating a path with a list of regions.""" + __slots__ = ( + '_path', # path which is mapped by all our regions + '_file_size' # total size of the file we map + ) + + def __new__(cls, path): + return super(MappedRegionList, cls).__new__(cls) + + def __init__(self, path): + self._path = path + self._file_size = None + + def path(self): + """:return: path to file whose regions we manage""" + return self._path + + def file_size(self): + """:return: size of file we manager""" + if self._file_size is None: + self._file_size = os.stat(self._path).st_size + #END update file size + return self._file_size + +#} END utilty classes From 9fe8f93439118c7ea6c4d5dece879b3849f0931e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 8 Jun 2011 23:50:19 +0200 Subject: [PATCH 0147/2375] Implemented first basic functionality of cursor, which is only complete once some more of the memory manager is implemented. Next up is its major use_window method --- smmap/mman.py | 106 +++++++++++++++++++++++++++++++++++++--- smmap/test/test_mman.py | 15 +++++- smmap/test/test_util.py | 5 ++ smmap/util.py | 12 ++--- 4 files changed, 120 insertions(+), 18 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 0ecc1aad1..af414eada 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -1,29 +1,34 @@ """Module containnig a memory memory manager which provides a sliding window on a number of memory mapped files""" - -__all__ = ["MappedMemoryManager", "MemoryCursor"] - from util import ( MemoryWindow, MappedRegion, MappedRegionList, ) +from weakref import proxy + +__all__ = ["MappedMemoryManager"] +#{ Utilities + +#}END utilities class MemoryCursor(object): """Pointer into the mapped region of the memory manager, keeping the current window - alive until it is destroyed""" + alive until it is destroyed. + + Cursors should not be created manually, but are instead returned by the MappedMemoryManager""" __slots__ = ( '_manager', # the manger keeping all file regions - '_regions', # a regions list with regions for our file - '_region', # WEAK REF to our current region + '_rlist', # a regions list with regions for our file + '_region', # our current region or None '_ofs', # relative offset from the actually mapped area to our start area '_size' # maximum size we should provide ) def __init__(self, manager = None, regions = None): self._manager = manager - self._regions = regions - self._region = region + self._rlist = regions + self._region = None self._ofs = 0 self._size = 0 @@ -32,12 +37,97 @@ def __del__(self): def _destroy(self): """Destruction code to decrement counters""" + self.unuse_region() + + if self._rlist is not None: + # Actual client count, which doesn't include the reference kept by the manager, nor ours + # as we are about to be deleted + num_clients = self._rlist.client_count() - 2 + if num_clients == 0 and len(self._rlist) == 0: + # Free all resources associated with the mapped file + self._manager._files.pop(self._rlist.path()) + #END remove regions list from manager + #END handle regions def _copy_from(self, rhs): """Copy all data from rhs into this instance, handles usage count""" + self._manager = rhs._manager + self._rlist = rhs._rlist + self._region = rhs._region + self._ofs = rhs._ofs + self._size = rhs._size + + if self._region is not None: + self._region.increment_usage_count(1) + # END handle regions + + def __copy__(self): + """copy module interface""" + cpy = type(self)() + cpy._copy_from(self) + return cpy #{ Interface + def assign(self, rhs): + """Assign rhs to this instance. This is required in order to get a real copy. + Alternativly, you can copy an existing instance using the copy module""" + self._destroy() + self._copy_from(rhs) + + def use_region(self, offset, size): + """Assure we point to a window which allows access to the given offset into the file + :param offset: absolute offset in bytes into the file + :param size: amount of bytes to map + :return: this instance - it should be queried for whether it points to a valid memory region. + This is not the case if the mapping failed becaues we reached the end of the file + :note: The size actually mapped may be smaller than the given size. If that is the case, + either the file has reached its end, or the map was created between two existing regions""" + + def unuse_region(self): + """Unuse the ucrrent region. Does nothing if we have no current region + :note: the cursor unuses the region automatically upon destruction. It is recommended + to unuse the region once you are done reading from it in persistent cursors as it + helps to free up resource more quickly""" + self._region = None + def is_valid(self): + """:return: True if we have a valid and usable region""" + return self._region is not None + + def is_associated(self): + """:return: True if we are associated with a specific file already""" + return self._rlist is not None + + def ofs_begin(self): + """:return: offset to the first byte pointed to by our cursor""" + return self._region.ofs_begin() + self._ofs + + def size(self): + """:return: amount of bytes we point to""" + return self._size + + def region_ref(self): + """:return: weak proxy to our mapped region. + :raise AssertionError: if we have no current region. This is only useful for debugging""" + if self._region is None: + raise AssertionError("region not set") + return proxy(self._region) + + def includes_ofs(self, ofs): + """:return: True if the given absolute offset is contained in the cursors + current region + :note: always False if the cursor does not point to a valid region""" + if self._region is None: + return False + return (self.ofs_begin() <= ofs) and (ofs < self.ofs_end()) + + def file_size(self): + """:return: size of the underlying file""" + return self._rlist.file_size() + + def path(self): + """:return: path of the underlying mapped file""" + return self._rlist.path() #} END interface diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index edc2ec2fe..85a0a1bf5 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -1,11 +1,22 @@ from lib import TestBase, FileCreator +from copy import copy from smmap.mman import * +from smmap.mman import MemoryCursor class TestMMan(TestBase): def test_cursor(self): - man = MappedMemoryManager() + man = MappedMemoryManager() + c = MemoryCursor(man) + assert not c.is_valid() + assert not c.is_associated() - def test_basics(self): + # copy module + + # assign method + + + + def test_memory_manager(self): pass diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 815391613..2a0e0551e 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -75,6 +75,11 @@ def test_region(self): rfull2 = rfull assert rfull.client_count() == 2 + # usage + assert rfull.usage_count() == 0 + rfull.increment_usage_count() + assert rfull.usage_count() == 1 + # window constructor w = MemoryWindow.from_region(rfull) assert w.ofs == rfull.ofs_begin() and w.ofs_end() == rfull.ofs_end() diff --git a/smmap/util.py b/smmap/util.py index 784227752..e4c5c82d6 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -75,8 +75,8 @@ class MappedRegion(object): '_b' , # beginning of mapping '_mf', # mapped memory chunk (as returned by mmap) '_uc', # total amount of usages - '_ms', # actual size of the mapping - '__weakref__' # allow weak references to a region + '_ms' # actual size of the mapping + '__weakref__' ] _need_compat_layer = sys.version_info[1] < 6 @@ -139,17 +139,13 @@ def client_count(self): # -1: self on stack, -1 self in this method, -1 self in getrefcount return getrefcount(self)-3 - def adjust_client_count(self, ofs): - """Adjust the client count by the given positive or negative offset""" - self._nc += ofs - def usage_count(self): """:return: amount of usages so far""" return self._uc - def adjust_usage_count(self, ofs): + def increment_usage_count(self): """Adjust the usage count by the given positive or negative offset""" - self._uc += ofs + self._uc += 1 # re-define all methods which need offset adjustments in compatibility mode if _need_compat_layer: From 226f42858faab545df0e0a9636c84791f0b3a080 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 9 Jun 2011 01:13:52 +0200 Subject: [PATCH 0148/2375] First bit of MappedMemoryManager started. Much more to come - got lost in git++ and improved it in the meanwhile --- smmap/exc.py | 7 +++++++ smmap/mman.py | 22 +++++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 smmap/exc.py diff --git a/smmap/exc.py b/smmap/exc.py new file mode 100644 index 000000000..a090d24d5 --- /dev/null +++ b/smmap/exc.py @@ -0,0 +1,7 @@ +"""Module with system exceptions""" + +class MemoryManagerError(Exception): + """Base class for all exceptions thrown by the memory manager""" + +class RegionCollectionError(MemoryManagerError): + """Thrown if a memory region could not be collected, or if no region for collection was found""" diff --git a/smmap/mman.py b/smmap/mman.py index af414eada..0d8c8dce4 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -5,6 +5,7 @@ MappedRegionList, ) +from exc import RegionCollectionError from weakref import proxy __all__ = ["MappedMemoryManager"] @@ -45,7 +46,7 @@ def _destroy(self): num_clients = self._rlist.client_count() - 2 if num_clients == 0 and len(self._rlist) == 0: # Free all resources associated with the mapped file - self._manager._files.pop(self._rlist.path()) + self._manager._fdict.pop(self._rlist.path()) #END remove regions list from manager #END handle regions @@ -82,6 +83,7 @@ def use_region(self, offset, size): This is not the case if the mapping failed becaues we reached the end of the file :note: The size actually mapped may be smaller than the given size. If that is the case, either the file has reached its end, or the map was created between two existing regions""" + def unuse_region(self): """Unuse the ucrrent region. Does nothing if we have no current region @@ -146,5 +148,19 @@ class MappedMemoryManager(object): a safe amount of memory already, which would possibly cause memory allocations to fail as our address space is full.""" - __slots__ = tuple() - + __slots__ = [ + '_fdict', # mapping of path -> MappedRegionList + '_max_window_size', # maximum size of a window + '_max_memory_size', # maximum amount ofmemory we may allocate + '_max_handles', # maximum amount of handles to keep open + '_memory_size', # currently allocated memory size + '_handle_count', # amount of currently allocated file handles + ] + + def _collect_one_lru_region(self, size): + """Unmap the region which was least-recently used and has no client + :param size: size of the region we want to map next (assuming its not already mapped partially or full + if 0, we try to free any available region + :raise RegionCollectionError: + :todo: implement a case where all unusued regions are discarded efficiently. Currently its only brute force""" + From 04b9ec1e2c0bf657bf575a72a27acdbf2935ecf4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 9 Jun 2011 11:14:06 +0200 Subject: [PATCH 0149/2375] Fully implemented the manager - now the cursor can be implenented as well --- smmap/mman.py | 102 +++++++++++++++++++++++++++++++++++++++- smmap/test/test_mman.py | 22 ++++++++- smmap/test/test_util.py | 5 ++ smmap/util.py | 7 ++- 4 files changed, 131 insertions(+), 5 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 0d8c8dce4..9c5432bd1 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -3,6 +3,8 @@ MemoryWindow, MappedRegion, MappedRegionList, + is_64_bit, + PAGESIZE ) from exc import RegionCollectionError @@ -150,17 +152,113 @@ class MappedMemoryManager(object): __slots__ = [ '_fdict', # mapping of path -> MappedRegionList - '_max_window_size', # maximum size of a window + '_window_size', # maximum size of a window '_max_memory_size', # maximum amount ofmemory we may allocate - '_max_handles', # maximum amount of handles to keep open + '_max_handle_count', # maximum amount of handles to keep open '_memory_size', # currently allocated memory size '_handle_count', # amount of currently allocated file handles ] + _MB_in_bytes = 1024 * 1024 + + def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = ~0): + """initialize the manager with the given parameters. + :param window_size: if 0, a default window size will be chosen depending on + the operating system's architechture. It will internally be quantified to a multiple of the page size + :param max_memory_size: maximum amount of memory we may map at once before releasing mapped regions. + If 0, a viable default iwll be set dependning on the system's architecture. + :param max_open_handles: if not ~0, lmit the amount of open file handles to the given number. + Otherwise the amount is only limited by the system iteself. If a system or soft limit is hit, + the manager will free as many handles as posisble""" + self._fdict = dict() + self._window_size = window_size + self._max_memory_size = max_memory_size + self._max_handle_count = max_open_handles + self._memory_size = 0 + self._handle_count = 0 + + if window_size == 0: + coeff = 32 + if is_64_bit(): + coeff = 1024 + #END handle arch + self._window_size = coeff * self._MB_in_bytes + # END handle max window size + + if max_memory_size == 0: + coeff = 512 + if is_64_bit(): + coeff = 8192 + #END handle arch + self._max_memory_size = coeff * self._MB_in_bytes + #END handle max memory size + def _collect_one_lru_region(self, size): """Unmap the region which was least-recently used and has no client :param size: size of the region we want to map next (assuming its not already mapped partially or full if 0, we try to free any available region :raise RegionCollectionError: :todo: implement a case where all unusued regions are discarded efficiently. Currently its only brute force""" + num_found = 0 + while (size == 0) or (self._memory_size + size > self._max_memory_size): + lru_region = None + lru_list = None + for regions in self._fdict.itervalues(): + for region in regions: + # check client count - consider that we keep one reference ourselves ! + if (region.client_count()-1 == 0 and + (lru_region is None or region.usage_count() < lru_region.usage_count())): + lru_region = region + lru_list = regions + # END update lru_region + #END for each region + #END for each regions list + + if lru_region is None: + if num_found == 0 and size != 0: + raise RegionCollectionError("Didn't find any region to free") + #END raise if necessary + break + #END handle region not found + + num_found += 1 + del(lru_list[lru_list.index(lru_region)]) + self._memory_size -= lru_region.size() + self._handle_count -= 1 + #END while there is more memory to free + + #{ Interface + def make_cursor(self, path): + """:return: a cursor pointing to the given path. It can be used to map new regions of the file into memory""" + regions = self._fdict.get(path) + if regions is None: + regions = MappedRegionList(path) + self._fdict[path] = regions + # END obtain region for path + return MemoryCursor(self, regions) + def num_file_handles(self): + """:return: amount of file handles in use. Each mapped region uses one file handle""" + return self._handle_count + + def num_open_files(self): + """Amount of opened files in the system""" + return reduce(lambda x,y: x+y, (1 for rlist in self._fdict.itervalues() if len(rlist) > 0), 0) + + def window_size(self): + """:return: size of each window when allocating new regions""" + return self._window_size + + def mapped_memory_size(self): + """:return: amount of bytes currently mapped in total""" + return self._memory_size + + def max_mapped_memory_size(self): + """:return: maximum amount of memory we may allocate""" + return self._max_memory_size + + def page_size(self): + """:return: size of a single memory page in bytes""" + return PAGESIZE + + #} END interface diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 85a0a1bf5..92c201c78 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -1,8 +1,13 @@ from lib import TestBase, FileCreator -from copy import copy from smmap.mman import * from smmap.mman import MemoryCursor +from smmap.util import PAGESIZE + +from smmap.exc import RegionCollectionError + +import sys +from copy import copy class TestMMan(TestBase): @@ -19,4 +24,17 @@ def test_cursor(self): def test_memory_manager(self): - pass + man = MappedMemoryManager() + assert man.num_file_handles() == 0 + assert man.num_open_files() == 0 + assert man.window_size() > 0 + assert man.mapped_memory_size() == 0 + assert man.max_mapped_memory_size() > 0 + assert man.page_size() == PAGESIZE + + # collection doesn't raise in 'any' mode + man._collect_one_lru_region(0) + # doesn't raise if we are within the limit + man._collect_one_lru_region(10) + # raises outside of limit + self.failUnlessRaises(RegionCollectionError, man._collect_one_lru_region, sys.maxint) diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 2a0e0551e..9866217d1 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -92,3 +92,8 @@ def test_region_list(self): assert ml.path() == fc.path assert ml.file_size() == fc.size + def test_util(self): + assert isinstance(is_64_bit(), bool) # just call it + assert align_to_page(1, False) == 0 + assert align_to_page(1, True) == PAGESIZE + diff --git a/smmap/util.py b/smmap/util.py index e4c5c82d6..7f42834c4 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -6,7 +6,8 @@ from mmap import PAGESIZE from sys import getrefcount -__all__ = ["align_to_page", "MemoryWindow", "MappedRegion", "MappedRegionList", "PAGESIZE"] +__all__ = [ "align_to_page", "is_64_bit", + "MemoryWindow", "MappedRegion", "MappedRegionList", "PAGESIZE"] #{ Utilities @@ -20,6 +21,10 @@ def align_to_page(num, round_up): res += PAGESIZE; #END handle size return res; + +def is_64_bit(): + """:return: True if the system is 64 bit. Otherwise it can be assumed to be 32 bit""" + return sys.maxint > (1<<32) - 1 #}END utilities From e7b0e1c2c55c52b144671a1f3a8433901e42804a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 9 Jun 2011 12:56:56 +0200 Subject: [PATCH 0150/2375] Implemented use_region. Let the testing begin. Especially the actual data handling will be interesting, which has to work exclusively through buffer objects. There are plenty of layers between the user and the data, which will always be copied when slicing it (as we have no memoryview). The latter one could be implemented on in case we use 2.7 at some point. Now, let the testing begin ! --- smmap/mman.py | 131 ++++++++++++++++++++++++++++++++++++++-- smmap/test/test_mman.py | 38 ++++++++++-- smmap/test/test_util.py | 2 + smmap/util.py | 16 ++++- 4 files changed, 174 insertions(+), 13 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 9c5432bd1..1261fc16c 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -9,6 +9,7 @@ from exc import RegionCollectionError from weakref import proxy +import sys __all__ = ["MappedMemoryManager"] #{ Utilities @@ -77,7 +78,7 @@ def assign(self, rhs): self._destroy() self._copy_from(rhs) - def use_region(self, offset, size): + def use_region(self, offset, size, _is_recursive=False): """Assure we point to a window which allows access to the given offset into the file :param offset: absolute offset in bytes into the file :param size: amount of bytes to map @@ -85,15 +86,130 @@ def use_region(self, offset, size): This is not the case if the mapping failed becaues we reached the end of the file :note: The size actually mapped may be smaller than the given size. If that is the case, either the file has reached its end, or the map was created between two existing regions""" + need_region = True + man = self._manager + size = min(size, man.window_size()) # clamp size to window size + if self._region is not None: + if self._region.includes_ofs(offset): + need_region = False + else: + self.unuse_region() + # END handle existing region + # END check existing region + + if need_region: + # abort on offsets beyond our mapped file's size - currently we are invalid + if offset > self.file_size(): + return self + # END handle offset too large + + existing_region = None + for region in self._rlist: + if region.includes_ofs(offset): + existing_region = region + break + #END handle existing region + #END for each existing region + if existing_region is None: + left = MemoryWindow(0, 0) + mid = MemoryWindow(offset, size) + right = MemoryWindow(self.file_size(), 0) + + # we want to honor the max memory size, and assure we have anough + # memory available + man._collect_lru_region(man.window_size()) + + # we assume the list remains sorted by offset + insert_pos = 0 + len_regions = len(self._rlist) + if len_regions == 1: + if self._rlist[0].ofs_begin() <= offset: + insert_pos = 1 + #END maintain sort + else: + # find insert position + insert_pos = len_regions + for i, region in enumerate(self._rlist): + if region.ofs_begin() > offset: + insert_pos = i + break + #END if insert position is correct + #END for each region + # END obtain insert pos + + # adjust the actual offset and size values to create the largest + # possible mapping + if insert_pos == 0: + if len_regions: + right = MemoryWindow.from_region(self._rlist[insert_pos]) + #END adjust right side + else: + if insert_pos != len_regions: + right = MemoryWindow.from_region(self._rlist[insert_pos]) + # END adjust right window + left = MemoryWindow.from_region(self._rlist[insert_pos - 1]) + #END adjust surrounding windows + + mid.extend_left_to(left, man._window_size) + mid.extend_right_to(right, man._window_size) + mid.align() + + # it can happen that we align beyond the end of the file + if mid.ofs_end() > right.ofs: + mid.size = right.ofs - mid.ofs + #END readjust size + + # insert new region at the right offset to keep the order + try: + if man._handle_count >= man._max_handle_count: + raise Exception + #END assert own imposed max file handles + self._region = MappedRegion(self._rlist.path(), mid.ofs, mid.size) + except Exception: + # apparently we are out of system resources or hit a limit + # As many more operations are likely to fail in that condition ( + # like reading a file from disk, etc) we free up as much as possible + # As this invalidates our insert position, we have to recurse here + # NOTE: The c++ version uses a linked list to curcumvent this, but + # using that in python is probably too slow anyway + if _is_recursive: + # we already tried this, and still have no success in obtaining + # a mapping. This is an exception, so we propagate it + raise + #END handle existing recursion + man._collect_lru_region(0) + return self.use_region(offset, size, True) + #END handle exceptions + + man._handle_count += 1 + man._memory_size += self._region.size() + self._rlist.insert(insert_pos, self._region) + else: + self._region = existing_region + #END need region handling + #END handle acquire region + + self._region.increment_usage_count() + self._ofs = offset - self._region.ofs_begin() + self._size = min(size, self._region.ofs_end() - offset) + + return self + def unuse_region(self): """Unuse the ucrrent region. Does nothing if we have no current region :note: the cursor unuses the region automatically upon destruction. It is recommended to unuse the region once you are done reading from it in persistent cursors as it helps to free up resource more quickly""" self._region = None - + + def buffer(self): + """Return a buffer object which allows access to our memory region from our offset + to the window size. Please note that it might be smaller than you requested + :note: You can only obtain a buffer if this instance is_valid() !""" + return buffer(self._region.buffer(), self._ofs, self._size) + def is_valid(self): """:return: True if we have a valid and usable region""" return self._region is not None @@ -136,7 +252,6 @@ def path(self): #} END interface - class MappedMemoryManager(object): """Maintains a list of ranges of mapped memory regions in one or more files and allows to easily obtain additional regions assuring there is no overlap. @@ -161,13 +276,13 @@ class MappedMemoryManager(object): _MB_in_bytes = 1024 * 1024 - def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = ~0): + def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys.maxint): """initialize the manager with the given parameters. :param window_size: if 0, a default window size will be chosen depending on the operating system's architechture. It will internally be quantified to a multiple of the page size :param max_memory_size: maximum amount of memory we may map at once before releasing mapped regions. If 0, a viable default iwll be set dependning on the system's architecture. - :param max_open_handles: if not ~0, lmit the amount of open file handles to the given number. + :param max_open_handles: if not maxin, limit the amount of open file handles to the given number. Otherwise the amount is only limited by the system iteself. If a system or soft limit is hit, the manager will free as many handles as posisble""" self._fdict = dict() @@ -193,7 +308,7 @@ def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = ~0): self._max_memory_size = coeff * self._MB_in_bytes #END handle max memory size - def _collect_one_lru_region(self, size): + def _collect_lru_region(self, size): """Unmap the region which was least-recently used and has no client :param size: size of the region we want to map next (assuming its not already mapped partially or full if 0, we try to free any available region @@ -253,6 +368,10 @@ def mapped_memory_size(self): """:return: amount of bytes currently mapped in total""" return self._memory_size + def max_file_handles(self): + """:return: maximium amount of handles we may have opened""" + return self._max_handle_count + def max_mapped_memory_size(self): """:return: maximum amount of memory we may allocate""" return self._max_memory_size diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 92c201c78..97cd8f62b 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -12,16 +12,36 @@ class TestMMan(TestBase): def test_cursor(self): + fc = FileCreator(self.k_window_test_size, "cursor_test") + man = MappedMemoryManager() - c = MemoryCursor(man) - assert not c.is_valid() - assert not c.is_associated() + ci = MemoryCursor(man) # invalid cursor + assert not ci.is_valid() + assert not ci.is_associated() + assert ci.size() == 0 # this is cached, so we can query it in invalid state + + cv = man.make_cursor(fc.path) + assert not cv.is_valid() # no region mapped yet + assert cv.is_associated()# but it know where to map it from + assert cv.file_size() == fc.size + assert cv.path() == fc.path # copy module + cio = copy(cv) + assert not cio.is_valid() and cio.is_associated() # assign method + assert not ci.is_associated() + ci.assign(cv) + assert not ci.is_valid() and ci.is_associated() + # unuse non-existing region is fine + cv.unuse_region() + cv.unuse_region() + # destruction is fine (even multiple times) + cv._destroy() + MemoryCursor(man)._destroy() def test_memory_manager(self): man = MappedMemoryManager() @@ -33,8 +53,14 @@ def test_memory_manager(self): assert man.page_size() == PAGESIZE # collection doesn't raise in 'any' mode - man._collect_one_lru_region(0) + man._collect_lru_region(0) # doesn't raise if we are within the limit - man._collect_one_lru_region(10) + man._collect_lru_region(10) # raises outside of limit - self.failUnlessRaises(RegionCollectionError, man._collect_one_lru_region, sys.maxint) + self.failUnlessRaises(RegionCollectionError, man._collect_lru_region, sys.maxint) + + + # use a region, verify most basic functionality + fc = FileCreator(self.k_window_test_size, "manager_test") + c = man.make_cursor(fc.path) + assert c.use_region(10, 10).is_valid() diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 9866217d1..136d99102 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -88,6 +88,8 @@ def test_region_list(self): fc = FileCreator(100, "sample_file") ml = MappedRegionList(fc.path) + assert ml.client_count() == 1 + assert len(ml) == 0 assert ml.path() == fc.path assert ml.file_size() == fc.size diff --git a/smmap/util.py b/smmap/util.py index 7f42834c4..456562a5f 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -54,7 +54,10 @@ def ofs_end(self): return self.ofs + self.size def align(self): - self.ofs = align_to_page(self.ofs, 0) + """Assures the previous window area is contained in the new one""" + nofs = align_to_page(self.ofs, 0) + self.size += self.ofs - nofs # keep size constant + self.ofs = nofs self.size = align_to_page(self.size, 1) def extend_left_to(self, window, max_size): @@ -123,6 +126,10 @@ def __init__(self, path, ofs, size): os.close(fd) #END close file handle + def buffer(self): + """:return: a sliceable buffer which can be used to access the mapped memory""" + return self._mf + def ofs_begin(self): """:return: absolute byte offset to the first byte of the mapping""" return self._b @@ -159,6 +166,9 @@ def size(self): def ofs_end(self): return len(self._mf) + + def buffer(self): + return self._mfb #END handle compat layer @@ -176,6 +186,10 @@ def __init__(self, path): self._path = path self._file_size = None + def client_count(self): + """:return: amount of clients which hold a reference to this instance""" + return getrefcount(self)-3 + def path(self): """:return: path to file whose regions we manage""" return self._path From 997a580c0a14cfa0bed11477cd64198199ef99b6 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 9 Jun 2011 15:29:52 +0200 Subject: [PATCH 0151/2375] implemented plenty of operational testing. It shows that its not yet working properly. Intersting, it was so promising, and went just a little bit too smooth. There we go :) --- smmap/mman.py | 13 ++++-- smmap/test/test_mman.py | 100 ++++++++++++++++++++++++++++++++++++++-- smmap/util.py | 1 - 3 files changed, 106 insertions(+), 8 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 1261fc16c..8a9066cdc 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -8,7 +8,7 @@ ) from exc import RegionCollectionError -from weakref import proxy +from weakref import ref import sys __all__ = ["MappedMemoryManager"] @@ -100,7 +100,7 @@ def use_region(self, offset, size, _is_recursive=False): if need_region: # abort on offsets beyond our mapped file's size - currently we are invalid - if offset > self.file_size(): + if offset >= self.file_size(): return self # END handle offset too large @@ -222,16 +222,21 @@ def ofs_begin(self): """:return: offset to the first byte pointed to by our cursor""" return self._region.ofs_begin() + self._ofs + def ofs_end(self): + """:return: offset to one past the last available byte""" + # unroll method calls for performance ! + return self._region.ofs_begin() + self._ofs + self._size + def size(self): """:return: amount of bytes we point to""" return self._size def region_ref(self): - """:return: weak proxy to our mapped region. + """:return: weak ref to our mapped region. :raise AssertionError: if we have no current region. This is only useful for debugging""" if self._region is None: raise AssertionError("region not set") - return proxy(self._region) + return ref(self._region) def includes_ofs(self, ofs): """:return: True if the given absolute offset is contained in the cursors diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 97cd8f62b..f592fc129 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -2,10 +2,11 @@ from smmap.mman import * from smmap.mman import MemoryCursor -from smmap.util import PAGESIZE - +from smmap.util import PAGESIZE, align_to_page from smmap.exc import RegionCollectionError +from random import randint +from time import time import sys from copy import copy @@ -59,8 +60,101 @@ def test_memory_manager(self): # raises outside of limit self.failUnlessRaises(RegionCollectionError, man._collect_lru_region, sys.maxint) - # use a region, verify most basic functionality fc = FileCreator(self.k_window_test_size, "manager_test") c = man.make_cursor(fc.path) assert c.use_region(10, 10).is_valid() + assert c.ofs_begin() == 10 + assert c.size() == 10 + assert c.buffer()[:] == open(fc.path, 'rb').read(20)[10:] + + def test_memman_operation(self): + # test more access, force it to actually unmap regions + fc = FileCreator(self.k_window_test_size, "manager_operation_test") + data = open(fc.path, 'rb').read() + assert len(data) == fc.size + + # small windows, a reasonable max memory. Not too many regions at once + man = MappedMemoryManager(fc.size / 100, fc.size / 3, 15) + c = man.make_cursor(fc.path) + + # still empty (more about that is tested in test_memory_manager() + assert man.num_open_files() == 0 + assert man.mapped_memory_size() == 0 + + base_offset = 5000 + size = man.window_size() / 2 + assert c.use_region(base_offset, size).is_valid() + rr = c.region_ref() + assert rr().client_count() == 2 # the manager and the cursor and us + + assert man.num_open_files() == 1 + assert man.num_file_handles() == 1 + assert man.mapped_memory_size() == rr().size() + assert c.size() == size + assert c.ofs_begin() == base_offset + assert rr().ofs_begin() == 0 # it was aligned and expanded + assert rr().size() == align_to_page(man.window_size(), True) # but isn't larger than the max window (aligned) + + assert c.buffer()[:] == data[base_offset:base_offset+size] + + # obtain second window, which spans the first part of the file - it is a still the same window + assert c.use_region(0, size-10).is_valid() + assert c.region_ref()() == rr() + assert man.num_file_handles() == 1 + assert c.size() == size-10 + assert c.ofs_begin() == 0 + assert c.buffer()[:] == data[:size-10] + + # map some part at the end, our requested size cannot be kept + overshoot = 4000 + base_offset = fc.size - size + overshoot + assert c.use_region(base_offset, size).is_valid() + assert man.num_file_handles() == 2 + assert c.size() < size + assert c.region_ref()() is not rr() # old region is still available, but has not curser ref anymore + assert rr().client_count() == 1 # only held by manager + rr = c.region_ref() + assert rr().client_count() == 2 # manager + cursor + assert rr().ofs_begin() < c.ofs_begin() # it should have extended itself to the left + assert rr().ofs_end() <= fc.size # it cannot be larger than the file + assert c.buffer()[:] == data[base_offset:base_offset+size] + + # unising a region makes the cursor invalid + c.unuse_region() + assert not c.is_valid() + # but doesn't change anything regarding the handle count - we cache it and only + # remove mapped regions if we have to + assert man.num_file_handles() == 2 + + # an offset as large as the size doesn't work ! + assert not c.use_region(fc.size, size).is_valid() + + # iterate through the windows, verify data contents + # this will trigger map collection after a while + max_random_accesses = 15000 + num_random_accesses = max_random_accesses + memory_read = 0 + st = time() + + while num_random_accesses: + num_random_accesses += 1 + base_offset = randint(0, fc.size - 1) + + # precondition + assert man.max_mapped_memory_size() >= man.mapped_memory_size() + assert man.max_file_handles() >= man.num_file_handles() + + assert c.use_region(base_offset, size).is_valid() + assert c.buffer()[:] == data[base_offset:base_offset+size] + memory_read += c.size() + + assert c.includes_ofs(base_offset) + assert c.includes_ofs(base_offset+c.size()-1) + assert not c.includes_ofs(base_offset+c.size()) + # END while we should do an access + elapsed = time() - st + mb = 1000 * 1000 + sys.stderr.write("Read %i mb of memory with %i random accesses in %f s(%f mb/s)\n" + % (memory_read/mb, max_random_accesses, elapsed, (memory_read/mb)/elapsed)) + diff --git a/smmap/util.py b/smmap/util.py index 456562a5f..55e007554 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -83,7 +83,6 @@ class MappedRegion(object): '_b' , # beginning of mapping '_mf', # mapped memory chunk (as returned by mmap) '_uc', # total amount of usages - '_ms' # actual size of the mapping '__weakref__' ] _need_compat_layer = sys.version_info[1] < 6 From c90cfef5597b403ae03edf021442f9f44139561f Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 9 Jun 2011 15:56:43 +0200 Subject: [PATCH 0152/2375] Fixed a few little issues, the random access test/perftest now work perfectly. Its not too slow either, 160MB/s compared to the 320MB/s that the c++ implementation gets in release mode. Its odd that for some reason, the Debug version of the c++ implementation is at 940MB/s, which is more like the performance i would have expected --- smmap/mman.py | 4 ++-- smmap/test/test_mman.py | 5 ++--- smmap/util.py | 11 +++++++++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 8a9066cdc..09fa8fcf9 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -244,7 +244,7 @@ def includes_ofs(self, ofs): :note: always False if the cursor does not point to a valid region""" if self._region is None: return False - return (self.ofs_begin() <= ofs) and (ofs < self.ofs_end()) + return self.ofs_begin() <= ofs < self.ofs_end() def file_size(self): """:return: size of the underlying file""" @@ -326,7 +326,7 @@ def _collect_lru_region(self, size): for regions in self._fdict.itervalues(): for region in regions: # check client count - consider that we keep one reference ourselves ! - if (region.client_count()-1 == 0 and + if (region.client_count()-2 == 0 and (lru_region is None or region.usage_count() < lru_region.usage_count())): lru_region = region lru_list = regions diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index f592fc129..071615269 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -138,15 +138,14 @@ def test_memman_operation(self): st = time() while num_random_accesses: - num_random_accesses += 1 + num_random_accesses -= 1 base_offset = randint(0, fc.size - 1) # precondition assert man.max_mapped_memory_size() >= man.mapped_memory_size() assert man.max_file_handles() >= man.num_file_handles() - assert c.use_region(base_offset, size).is_valid() - assert c.buffer()[:] == data[base_offset:base_offset+size] + assert c.buffer()[:] == data[base_offset:base_offset+c.size()] memory_read += c.size() assert c.includes_ofs(base_offset) diff --git a/smmap/util.py b/smmap/util.py index 55e007554..1aae4f534 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -116,7 +116,7 @@ def __init__(self, path, ofs, size): # have to correct size, otherwise (instead of the c version) it will # bark that the size is too large ... many extra file accesses because # if this ... argh ! - self._mf = mmap.mmap(fd, min(os.fstat(fd).st_size - sizeofs, corrected_size - sizeofs), **kwargs) + self._mf = mmap.mmap(fd, min(os.fstat(fd).st_size - sizeofs, corrected_size), **kwargs) if self._need_compat_layer: self._mfb = buffer(self._mf, ofs, size) @@ -125,6 +125,11 @@ def __init__(self, path, ofs, size): os.close(fd) #END close file handle + def __repr__(self): + return "MappedRegion<%i, %i>" % (self._b, self.size()) + + #{ Interface + def buffer(self): """:return: a sliceable buffer which can be used to access the mapped memory""" return self._mf @@ -143,7 +148,7 @@ def ofs_end(self): def includes_ofs(self, ofs): """:return: True if the given offset can be read in our mapped region""" - return (ofs >= self.ofs_begin()) and (ofs <= self.ofs_end()) + return self.ofs_begin() <= ofs < self.ofs_end() def client_count(self): """:return: number of clients currently using this region""" @@ -170,6 +175,8 @@ def buffer(self): return self._mfb #END handle compat layer + #} END interface + class MappedRegionList(list): """List of MappedRegion instances associating a path with a list of regions.""" From 4f3d1ad43740fde43a321abcf59676f8ab9c693f Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 9 Jun 2011 16:52:15 +0200 Subject: [PATCH 0153/2375] Applied some optimizations for performance. Python is very easily overwhelmed with plenty of calls, causing too much overhead --- smmap/mman.py | 66 +++++++++++++++++++++++++---------------- smmap/test/test_mman.py | 28 ++++++++++------- smmap/util.py | 19 +++++++----- 3 files changed, 68 insertions(+), 45 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 09fa8fcf9..c13ef6599 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -99,18 +99,30 @@ def use_region(self, offset, size, _is_recursive=False): # END check existing region if need_region: + window_size = man._window_size + # abort on offsets beyond our mapped file's size - currently we are invalid if offset >= self.file_size(): return self # END handle offset too large existing_region = None - for region in self._rlist: - if region.includes_ofs(offset): - existing_region = region - break - #END handle existing region - #END for each existing region + a = self._rlist + lo = 0 + hi = len(a) + while lo < hi: + mid = (lo+hi)//2 + ofs = a[mid]._b + if ofs <= offset: + if a[mid].includes_ofs(offset): + existing_region = a[mid] + break + #END have region + lo = mid+1 + else: + hi = mid + #END handle position + #END while bisecting if existing_region is None: left = MemoryWindow(0, 0) @@ -119,20 +131,23 @@ def use_region(self, offset, size, _is_recursive=False): # we want to honor the max memory size, and assure we have anough # memory available - man._collect_lru_region(man.window_size()) + # Save calls ! + if self._manager._memory_size + window_size > self._manager._max_memory_size: + man._collect_lru_region(window_size) + #END handle collection # we assume the list remains sorted by offset insert_pos = 0 - len_regions = len(self._rlist) + len_regions = len(a) if len_regions == 1: - if self._rlist[0].ofs_begin() <= offset: + if a[0]._b <= offset: insert_pos = 1 #END maintain sort else: # find insert position insert_pos = len_regions - for i, region in enumerate(self._rlist): - if region.ofs_begin() > offset: + for i, region in enumerate(a): + if region._b > offset: insert_pos = i break #END if insert position is correct @@ -143,17 +158,17 @@ def use_region(self, offset, size, _is_recursive=False): # possible mapping if insert_pos == 0: if len_regions: - right = MemoryWindow.from_region(self._rlist[insert_pos]) + right = MemoryWindow.from_region(a[insert_pos]) #END adjust right side else: if insert_pos != len_regions: - right = MemoryWindow.from_region(self._rlist[insert_pos]) + right = MemoryWindow.from_region(a[insert_pos]) # END adjust right window - left = MemoryWindow.from_region(self._rlist[insert_pos - 1]) + left = MemoryWindow.from_region(a[insert_pos - 1]) #END adjust surrounding windows - mid.extend_left_to(left, man._window_size) - mid.extend_right_to(right, man._window_size) + mid.extend_left_to(left, window_size) + mid.extend_right_to(right, window_size) mid.align() # it can happen that we align beyond the end of the file @@ -166,7 +181,7 @@ def use_region(self, offset, size, _is_recursive=False): if man._handle_count >= man._max_handle_count: raise Exception #END assert own imposed max file handles - self._region = MappedRegion(self._rlist.path(), mid.ofs, mid.size) + self._region = MappedRegion(a.path(), mid.ofs, mid.size) except Exception: # apparently we are out of system resources or hit a limit # As many more operations are likely to fail in that condition ( @@ -185,14 +200,14 @@ def use_region(self, offset, size, _is_recursive=False): man._handle_count += 1 man._memory_size += self._region.size() - self._rlist.insert(insert_pos, self._region) + a.insert(insert_pos, self._region) else: self._region = existing_region #END need region handling #END handle acquire region self._region.increment_usage_count() - self._ofs = offset - self._region.ofs_begin() + self._ofs = offset - self._region._b self._size = min(size, self._region.ofs_end() - offset) return self @@ -220,12 +235,12 @@ def is_associated(self): def ofs_begin(self): """:return: offset to the first byte pointed to by our cursor""" - return self._region.ofs_begin() + self._ofs + return self._region._b + self._ofs def ofs_end(self): """:return: offset to one past the last available byte""" # unroll method calls for performance ! - return self._region.ofs_begin() + self._ofs + self._size + return self._region._b + self._ofs + self._size def size(self): """:return: amount of bytes we point to""" @@ -241,10 +256,9 @@ def region_ref(self): def includes_ofs(self, ofs): """:return: True if the given absolute offset is contained in the cursors current region - :note: always False if the cursor does not point to a valid region""" - if self._region is None: - return False - return self.ofs_begin() <= ofs < self.ofs_end() + :note: cursor must be valid for this to work""" + # unroll methods + return (self._region._b + self._ofs) <= ofs < (self._region._b + self._ofs + self._size) def file_size(self): """:return: size of the underlying file""" @@ -327,7 +341,7 @@ def _collect_lru_region(self, size): for region in regions: # check client count - consider that we keep one reference ourselves ! if (region.client_count()-2 == 0 and - (lru_region is None or region.usage_count() < lru_region.usage_count())): + (lru_region is None or region._uc < lru_region._uc)): lru_region = region lru_list = regions # END update lru_region diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 071615269..6f3809979 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -127,9 +127,6 @@ def test_memman_operation(self): # remove mapped regions if we have to assert man.num_file_handles() == 2 - # an offset as large as the size doesn't work ! - assert not c.use_region(fc.size, size).is_valid() - # iterate through the windows, verify data contents # this will trigger map collection after a while max_random_accesses = 15000 @@ -137,23 +134,32 @@ def test_memman_operation(self): memory_read = 0 st = time() + # cache everything to get some more performance + includes_ofs = c.includes_ofs + max_mapped_memory_size = man.max_mapped_memory_size() + max_file_handles = man.max_file_handles() + mapped_memory_size = man.mapped_memory_size + num_file_handles = man.num_file_handles while num_random_accesses: num_random_accesses -= 1 base_offset = randint(0, fc.size - 1) # precondition - assert man.max_mapped_memory_size() >= man.mapped_memory_size() - assert man.max_file_handles() >= man.num_file_handles() + assert max_mapped_memory_size >= mapped_memory_size() + assert max_file_handles >= num_file_handles() assert c.use_region(base_offset, size).is_valid() - assert c.buffer()[:] == data[base_offset:base_offset+c.size()] - memory_read += c.size() + csize = c.size() + assert c.buffer()[:] == data[base_offset:base_offset+csize] + memory_read += csize - assert c.includes_ofs(base_offset) - assert c.includes_ofs(base_offset+c.size()-1) - assert not c.includes_ofs(base_offset+c.size()) + assert includes_ofs(base_offset) + assert includes_ofs(base_offset+csize-1) + assert not includes_ofs(base_offset+csize) # END while we should do an access elapsed = time() - st mb = 1000 * 1000 - sys.stderr.write("Read %i mb of memory with %i random accesses in %f s(%f mb/s)\n" + sys.stderr.write("Read %i mb of memory with %i random accesses in %fs (%f mb/s)\n" % (memory_read/mb, max_random_accesses, elapsed, (memory_read/mb)/elapsed)) + # an offset as large as the size doesn't work ! + assert not c.use_region(fc.size, size).is_valid() diff --git a/smmap/util.py b/smmap/util.py index 1aae4f534..6a2056b5d 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -3,7 +3,7 @@ import sys import mmap -from mmap import PAGESIZE +from mmap import PAGESIZE, mmap, ACCESS_READ from sys import getrefcount __all__ = [ "align_to_page", "is_64_bit", @@ -48,7 +48,7 @@ def __repr__(self): @classmethod def from_region(cls, region): """:return: new window from a region""" - return cls(region.ofs_begin(), region.size()) + return cls(region._b, region._size) def ofs_end(self): return self.ofs + self.size @@ -83,6 +83,7 @@ class MappedRegion(object): '_b' , # beginning of mapping '_mf', # mapped memory chunk (as returned by mmap) '_uc', # total amount of usages + '_size', # cached size of our memory map '__weakref__' ] _need_compat_layer = sys.version_info[1] < 6 @@ -100,11 +101,12 @@ def __init__(self, path, ofs, size): allocated the the size automatically adjusted :raise Exception: if no memory can be allocated""" self._b = ofs + self._size = 0 self._uc = 0 fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)) try: - kwargs = dict(access=mmap.ACCESS_READ, offset=ofs) + kwargs = dict(access=ACCESS_READ, offset=ofs) corrected_size = size sizeofs = ofs if self._need_compat_layer: @@ -116,7 +118,8 @@ def __init__(self, path, ofs, size): # have to correct size, otherwise (instead of the c version) it will # bark that the size is too large ... many extra file accesses because # if this ... argh ! - self._mf = mmap.mmap(fd, min(os.fstat(fd).st_size - sizeofs, corrected_size), **kwargs) + self._mf = mmap(fd, min(os.fstat(fd).st_size - sizeofs, corrected_size), **kwargs) + self._size = len(self._mf) if self._need_compat_layer: self._mfb = buffer(self._mf, ofs, size) @@ -126,7 +129,7 @@ def __init__(self, path, ofs, size): #END close file handle def __repr__(self): - return "MappedRegion<%i, %i>" % (self._b, self.size()) + return "MappedRegion<%i, %i>" % (self._b, self._size) #{ Interface @@ -140,15 +143,15 @@ def ofs_begin(self): def size(self): """:return: total size of the mapped region in bytes""" - return len(self._mf) + return self._size def ofs_end(self): """:return: Absolute offset to one byte beyond the mapping into the file""" - return self._b + self.size() + return self._b + self._size def includes_ofs(self, ofs): """:return: True if the given offset can be read in our mapped region""" - return self.ofs_begin() <= ofs < self.ofs_end() + return self._b <= ofs < self._b + self._size def client_count(self): """:return: number of clients currently using this region""" From 011343f6f43ea868c3efbd00a43757eb82196e1d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 9 Jun 2011 17:46:24 +0200 Subject: [PATCH 0154/2375] Cursor can now take additional flags when opening the file handle for mapping. Renamed stream to buf, as the first item will be a buffer which uses the cursor underneath. We should add a stream for good measure though --- smmap/{stream.py => buf.py} | 0 smmap/mman.py | 10 +++++++--- smmap/test/{test_stream.py => test_buf.py} | 4 ++-- smmap/util.py | 5 +++-- 4 files changed, 12 insertions(+), 7 deletions(-) rename smmap/{stream.py => buf.py} (100%) rename smmap/test/{test_stream.py => test_buf.py} (54%) diff --git a/smmap/stream.py b/smmap/buf.py similarity index 100% rename from smmap/stream.py rename to smmap/buf.py diff --git a/smmap/mman.py b/smmap/mman.py index c13ef6599..57e2d81b5 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -78,10 +78,12 @@ def assign(self, rhs): self._destroy() self._copy_from(rhs) - def use_region(self, offset, size, _is_recursive=False): + def use_region(self, offset, size, flags = 0, _is_recursive=False): """Assure we point to a window which allows access to the given offset into the file :param offset: absolute offset in bytes into the file :param size: amount of bytes to map + :param flags: additional flags to be given to os.open in case a file handle is initially opened + for mapping. Has no effect if a region can actually be reused. :return: this instance - it should be queried for whether it points to a valid memory region. This is not the case if the mapping failed becaues we reached the end of the file :note: The size actually mapped may be smaller than the given size. If that is the case, @@ -106,6 +108,8 @@ def use_region(self, offset, size, _is_recursive=False): return self # END handle offset too large + # bisect to find an existing region. The c++ implementation cannot + # do that as it uses a linked list for regions. existing_region = None a = self._rlist lo = 0 @@ -181,7 +185,7 @@ def use_region(self, offset, size, _is_recursive=False): if man._handle_count >= man._max_handle_count: raise Exception #END assert own imposed max file handles - self._region = MappedRegion(a.path(), mid.ofs, mid.size) + self._region = MappedRegion(a.path(), mid.ofs, mid.size, flags) except Exception: # apparently we are out of system resources or hit a limit # As many more operations are likely to fail in that condition ( @@ -195,7 +199,7 @@ def use_region(self, offset, size, _is_recursive=False): raise #END handle existing recursion man._collect_lru_region(0) - return self.use_region(offset, size, True) + return self.use_region(offset, size, flags, True) #END handle exceptions man._handle_count += 1 diff --git a/smmap/test/test_stream.py b/smmap/test/test_buf.py similarity index 54% rename from smmap/test/test_stream.py rename to smmap/test/test_buf.py index fae928d9a..231abcf5b 100644 --- a/smmap/test/test_stream.py +++ b/smmap/test/test_buf.py @@ -1,7 +1,7 @@ from lib import TestBase -from smmap.stream import * +from smmap.buf import * -class TestStream(TestBase): +class TestBuf(TestBase): def test_basics(self): assert False diff --git a/smmap/util.py b/smmap/util.py index 6c5282cb9..786622d9a 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -93,18 +93,19 @@ class MappedRegion(object): #END handle additional slot - def __init__(self, path, ofs, size): + def __init__(self, path, ofs, size, flags = 0): """Initialize a region, allocate the memory map :param path: path to the file to map :param ofs: **aligned** offset into the file to be mapped :param size: if size is larger then the file on disk, the whole file will be allocated the the size automatically adjusted + :param flags: additional flags to be given when opening the file. :raise Exception: if no memory can be allocated""" self._b = ofs self._size = 0 self._uc = 0 - fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)) + fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)|flags) try: kwargs = dict(access=ACCESS_READ, offset=ofs) corrected_size = size From 8670443c3919f5e71e5864717d93eeb7921432ee Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 9 Jun 2011 22:01:10 +0200 Subject: [PATCH 0155/2375] Implemented buffer interface and test to fully proove it. Its not yet fully properly implemented --- smmap/buf.py | 91 +++++++++++++++++++++++++++++++++++++++-- smmap/mman.py | 12 +++++- smmap/test/test_buf.py | 89 +++++++++++++++++++++++++++++++++++++++- smmap/test/test_mman.py | 14 +++++-- 4 files changed, 196 insertions(+), 10 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index bc5e568ea..f7db963ed 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -1,7 +1,92 @@ -"""Module with a simple stream implementation using the memory manager""" +"""Module with a simple buffer implementation using the memory manager""" +from mman import MemoryCursor -from mman import * +import sys -__all__ = [] +__all__ = ["MappedMemoryBuffer"] + +class MappedMemoryBuffer(object): + """A buffer like object which allows direct byte-wise object and slicing into + memory of a mapped file. The mapping is controlled by an underlying memory manager. + + A buffer, once initialized, stays put on providing access to eactly one path. + A custom interface allows you to change paths mid way, and to optimize + the resource usage. + + Please note that this type is only fully usable if you configure it with the + MappedMemoryManager to use. + + The buffer is relative, that is if you map an offset, index 0 will map to the + first byte at your given offset.""" + __slots__ = '_c' # our cursor + + #{ Configuration + # A subclass must provide an instance of a (usually global) MappedMemoryManager + manager = None + #}END configuration + + def __init__(self, path = None, offset = 0, size = sys.maxint, flags = 0): + """Initalize the instance to operate on the given path if given. + :param path: if not None, the path to the file you want to access + If None, you have call begin_access before using the buffer + :param offset: absolute offset in bytes + :param size: the total size of the mapping. Defaults to the maximum possible size + :param flags: Additional flags to be passed to os.open + :raise ValueError: if the buffer could not achieve a valid state""" + self._c = MemoryCursor(self.manager) + assert self.manager is not None, "Require the cls.manager variable to be set in subclass" + if path and not self.begin_access(path, offset, size, flags): + raise ValueError("Failed to allocate the buffer - probably the given offset is out of bounds") + # END handle offset + + def __del__(self): + self.end_access() + + def __getitem__(self, i): + c = self._c + if not c.includes_ofs(i): + c.use_region(i, 1) + # END handle region usage + assert c.is_valid() # TODO: remove for performance + return c.buffer()[i] + + def __getslice__(self, i, j): + c = self._c + # fast path, slice fully included - safes a concatenate operation and + # should be the default + if c.ofs_begin() >= i and j < c.ofs_end(): + return c.buffer()[i:j] + raise NotImplementedError() + #{ Interface + + def begin_access(self, path = None, offset = 0, size = sys.maxint, flags = 0): + """Call this before the first use of this instance. The method was already + called by the constructor in case sufficient information was provided. + + For more information no the parameters, see the __init__ method + :param path: if path is empty or None the existing path will be used if possible. + :return: True if the buffer can be used""" + if path and (not self._c.is_associated() or self._c.path() != path): + self._c = self.manager.make_cursor(path) + #END get associated cursor + + # reuse existing cursors if possible + if self._c.is_associated(): + return self._c.use_region(offset, size, flags).is_valid() + return False + + def end_access(self): + """Call this method once you are done using the instance. It is automatically + called on destruction, and should be called just in time to allow system + resources to be freed. + + Once you called end_access, you must call begin access before reusing this instance!""" + self._c.unuse_region() + + def cursor(self): + """:return: the currently set cursor which provides access to the data""" + return self._c + + #}END interface diff --git a/smmap/mman.py b/smmap/mman.py index 57e2d81b5..0fa9ef450 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -226,7 +226,9 @@ def unuse_region(self): def buffer(self): """Return a buffer object which allows access to our memory region from our offset to the window size. Please note that it might be smaller than you requested - :note: You can only obtain a buffer if this instance is_valid() !""" + :note: You can only obtain a buffer if this instance is_valid() ! + :note: buffers should not be cached passed the duration of your access as it will + prevent resources from being freed even though they might not be accounted for anymore !""" return buffer(self._region.buffer(), self._ofs, self._size) def is_valid(self): @@ -336,6 +338,7 @@ def _collect_lru_region(self, size): :param size: size of the region we want to map next (assuming its not already mapped partially or full if 0, we try to free any available region :raise RegionCollectionError: + :return: Amount of freed regions :todo: implement a case where all unusued regions are discarded efficiently. Currently its only brute force""" num_found = 0 while (size == 0) or (self._memory_size + size > self._max_memory_size): @@ -365,6 +368,8 @@ def _collect_lru_region(self, size): self._handle_count -= 1 #END while there is more memory to free + return num_found + #{ Interface def make_cursor(self, path): """:return: a cursor pointing to the given path. It can be used to map new regions of the file into memory""" @@ -375,6 +380,11 @@ def make_cursor(self, path): # END obtain region for path return MemoryCursor(self, regions) + def collect(self): + """Collect all available free-to-collect mapped regions + :return: Amount of freed handles""" + return self._collect_lru_region(0) + def num_file_handles(self): """:return: amount of file handles in use. Each mapped region uses one file handle""" return self._handle_count diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index 231abcf5b..a26c8bb09 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -1,7 +1,92 @@ -from lib import TestBase +from lib import TestBase, FileCreator +from smmap.mman import MappedMemoryManager from smmap.buf import * +from random import randint +from time import time +import sys + +class TestBuffer(MappedMemoryBuffer): + #{ Configuration + manager = MappedMemoryManager() + #} END configuration + + class TestBuf(TestBase): + def test_basics(self): - assert False + self.failUnlessRaises(AssertionError, MappedMemoryBuffer) # needs subclass + fc = FileCreator(self.k_window_test_size, "buffer_test") + + # invalid paths fail upon construction + self.failUnlessRaises(OSError, TestBuffer, "somefile") # invalid file + self.failUnlessRaises(ValueError, TestBuffer, fc.path, fc.size) # offset too large + + buf = TestBuffer() # can create uninitailized buffers + assert not buf.cursor().is_valid() and not buf.cursor().is_associated() + + # can call end access any time + buf.end_access() + buf.end_access() + + # begin access can revive it, if the offset is suitable + offset = 100 + assert buf.begin_access(fc.path, fc.size) == False + assert buf.begin_access(fc.path, offset) == True + + # empty begin access keeps it valid on the same path, but alters the offset + assert buf.begin_access() == True + assert buf.cursor().is_valid() + + # simple access + data = open(fc.path, 'rb').read() + assert data[offset] == buf[0] + assert data[offset:offset*2] == buf[0:offset] + + # end access makes its cursor invalid + buf.end_access() + assert not buf.cursor().is_valid() + assert buf.cursor().is_associated() # but it remains associated + + # an empty begin access fixes it up again + assert buf.begin_access() == True and buf.cursor().is_valid() + del(buf) # ends access automatically + + man = TestBuffer.manager + assert man.num_file_handles() == 1 + + # PERFORMANCE + # blast away with rnadom access and a full mapping - we don't want to + # exagerate the manager's overhead, but measure the buffer overhead + # We do it once with an optimal setting, and with a worse manager which + # will produce small mappings only ! + max_num_accesses = 5000 + num_accesses_left = max_num_accesses + + for manager in (MappedMemoryManager(window_size=fc.size/100, max_memory_size=fc.size/3, max_open_handles=15), man): + TestBuffer.manager = manager + st = time() + buf = TestBuffer(fc.path) + assert manager.num_file_handles() == 1 + num_bytes = 0 + fsize = fc.size + while num_accesses_left: + num_accesses_left -= 1 + ofs_start = randint(0, fsize) + ofs_end = randint(ofs_start, fsize) + d = buf[ofs_start:ofs_end] + assert len(d) == ofs_end - ofs_start + assert d == data[ofs_start:ofs_end] + num_bytes += len(d) + pos = randint(0, fsize) + assert buf[pos] == data[pos] + # END handle num accesses + buf.end_access() + assert manager.num_file_handles() == 1 + assert manager.collect() == 1 + assert manager.num_file_handles() == 0 + elapsed = time() - st + mb = 1000*1000 + sys.stderr.write("Made %i random slices to buffer reading a total of %f mb in %f s (%f mb/s)\n" % (max_num_accesses, num_bytes/mb, elapsed, (num_bytes/mb)/elapsed)) + # END for each manager diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 6f3809979..46a0f50fb 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -75,7 +75,8 @@ def test_memman_operation(self): assert len(data) == fc.size # small windows, a reasonable max memory. Not too many regions at once - man = MappedMemoryManager(fc.size / 100, fc.size / 3, 15) + max_num_handles = 15 + man = MappedMemoryManager(window_size=fc.size / 100, max_memory_size=fc.size / 3, max_open_handles=max_num_handles) c = man.make_cursor(fc.path) # still empty (more about that is tested in test_memory_manager() @@ -129,7 +130,7 @@ def test_memman_operation(self): # iterate through the windows, verify data contents # this will trigger map collection after a while - max_random_accesses = 15000 + max_random_accesses = 5000 num_random_accesses = max_random_accesses memory_read = 0 st = time() @@ -160,6 +161,11 @@ def test_memman_operation(self): mb = 1000 * 1000 sys.stderr.write("Read %i mb of memory with %i random accesses in %fs (%f mb/s)\n" % (memory_read/mb, max_random_accesses, elapsed, (memory_read/mb)/elapsed)) - + # an offset as large as the size doesn't work ! - assert not c.use_region(fc.size, size).is_valid() + assert not c.use_region(fc.size, size).is_valid() + + # collection - it should be able to collect all + assert man.num_file_handles() + assert man.collect() + assert man.num_file_handles() == 0 From b00bc5e4c0e8eb47d0bf59c0a2c1f5399f4c8f58 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 9 Jun 2011 23:15:42 +0200 Subject: [PATCH 0156/2375] Finished implementation of buffer including a test which shows the performance should be usable in the real world. Its actually not too bad --- smmap/buf.py | 31 +++++++++++++++++---- smmap/mman.py | 5 +++- smmap/test/test_buf.py | 60 ++++++++++++++++++++++++----------------- smmap/test/test_mman.py | 2 +- 4 files changed, 66 insertions(+), 32 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index f7db963ed..68e7c33b9 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -44,19 +44,40 @@ def __del__(self): def __getitem__(self, i): c = self._c + assert c.is_valid() if not c.includes_ofs(i): c.use_region(i, 1) # END handle region usage - assert c.is_valid() # TODO: remove for performance - return c.buffer()[i] + return c.buffer()[i-c.ofs_begin()] def __getslice__(self, i, j): c = self._c # fast path, slice fully included - safes a concatenate operation and # should be the default - if c.ofs_begin() >= i and j < c.ofs_end(): - return c.buffer()[i:j] - raise NotImplementedError() + assert c.is_valid() + if (c.ofs_begin() <= i) and (j < c.ofs_end()): + b = c.ofs_begin() + return c.buffer()[i-b:j-b] + else: + l = j-i # total length + ofs = i + # keep tokens, and join afterwards. This is faster + # as it can preallocate the total amoint of space needed + # (and its verified the implementation does that) + # Question is whether the list allocation doesn't counteract this, + # but lets see ... + tokens = list() + tappend = tokens.append + + while l: + c.use_region(ofs, l) + d = c.buffer()[:l] + ofs += len(d) + l -= len(d) + tappend(d) + #END while there are bytes to read + return ''.join(tokens) + # END fast or slow path #{ Interface def begin_access(self, path = None, offset = 0, size = sys.maxint, flags = 0): diff --git a/smmap/mman.py b/smmap/mman.py index 0fa9ef450..588a63563 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -222,6 +222,8 @@ def unuse_region(self): to unuse the region once you are done reading from it in persistent cursors as it helps to free up resource more quickly""" self._region = None + # note: should reset ofs and size, but we spare that for performance. Its not + # allowed to query information if we are not valid ! def buffer(self): """Return a buffer object which allows access to our memory region from our offset @@ -240,7 +242,8 @@ def is_associated(self): return self._rlist is not None def ofs_begin(self): - """:return: offset to the first byte pointed to by our cursor""" + """:return: offset to the first byte pointed to by our cursor + :note: only if is_valid() is True""" return self._region._b + self._ofs def ofs_end(self): diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index a26c8bb09..d7e6d6c96 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -61,32 +61,42 @@ def test_basics(self): # exagerate the manager's overhead, but measure the buffer overhead # We do it once with an optimal setting, and with a worse manager which # will produce small mappings only ! - max_num_accesses = 5000 - num_accesses_left = max_num_accesses - - for manager in (MappedMemoryManager(window_size=fc.size/100, max_memory_size=fc.size/3, max_open_handles=15), man): + max_num_accesses = 1000 + for manager, man_id in ( (man, 'optimal'), + (MappedMemoryManager(window_size=fc.size/100, max_memory_size=fc.size/3, max_open_handles=15), 'worst case')): TestBuffer.manager = manager - st = time() buf = TestBuffer(fc.path) assert manager.num_file_handles() == 1 - num_bytes = 0 - fsize = fc.size - while num_accesses_left: - num_accesses_left -= 1 - ofs_start = randint(0, fsize) - ofs_end = randint(ofs_start, fsize) - d = buf[ofs_start:ofs_end] - assert len(d) == ofs_end - ofs_start - assert d == data[ofs_start:ofs_end] - num_bytes += len(d) - pos = randint(0, fsize) - assert buf[pos] == data[pos] - # END handle num accesses - buf.end_access() - assert manager.num_file_handles() == 1 - assert manager.collect() == 1 - assert manager.num_file_handles() == 0 - elapsed = time() - st - mb = 1000*1000 - sys.stderr.write("Made %i random slices to buffer reading a total of %f mb in %f s (%f mb/s)\n" % (max_num_accesses, num_bytes/mb, elapsed, (num_bytes/mb)/elapsed)) + for access_mode in range(2): # single, multi + num_accesses_left = max_num_accesses + num_bytes = 0 + fsize = fc.size + + st = time() + buf.begin_access() + while num_accesses_left: + num_accesses_left -= 1 + if access_mode: # multi + ofs_start = randint(0, fsize) + ofs_end = randint(ofs_start, fsize) + d = buf[ofs_start:ofs_end] + assert len(d) == ofs_end - ofs_start + assert d == data[ofs_start:ofs_end] + num_bytes += len(d) + else: + pos = randint(0, fsize) + assert buf[pos] == data[pos] + num_bytes += 1 + #END handle mode + # END handle num accesses + + buf.end_access() + assert manager.num_file_handles() + assert manager.collect() + assert manager.num_file_handles() == 0 + elapsed = time() - st + mb = float(1000*1000) + mode_str = (access_mode and "slice") or "single byte" + sys.stderr.write("%s: Made %i random %s accesses to buffer reading a total of %f mb in %f s (%f mb/s)\n" % (man_id, max_num_accesses, mode_str, num_bytes/mb, elapsed, (num_bytes/mb)/elapsed)) + # END handle access mode # END for each manager diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 46a0f50fb..b1c8f68eb 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -158,7 +158,7 @@ def test_memman_operation(self): assert not includes_ofs(base_offset+csize) # END while we should do an access elapsed = time() - st - mb = 1000 * 1000 + mb = float(1000 * 1000) sys.stderr.write("Read %i mb of memory with %i random accesses in %fs (%f mb/s)\n" % (memory_read/mb, max_random_accesses, elapsed, (memory_read/mb)/elapsed)) From 68fba826cdfd0de532ccf14c9ad94bf035a36e1b Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 9 Jun 2011 23:22:46 +0200 Subject: [PATCH 0157/2375] Optimized __getslice__ implementation a bit --- smmap/buf.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index 68e7c33b9..d1be1b65a 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -61,22 +61,17 @@ def __getslice__(self, i, j): else: l = j-i # total length ofs = i - # keep tokens, and join afterwards. This is faster - # as it can preallocate the total amoint of space needed - # (and its verified the implementation does that) - # Question is whether the list allocation doesn't counteract this, - # but lets see ... - tokens = list() - tappend = tokens.append - + # Keeping tokens in a list could possible be faster, but the list + # overhead outweighs the benefits (tested) ! + md = str() while l: c.use_region(ofs, l) d = c.buffer()[:l] ofs += len(d) l -= len(d) - tappend(d) + md += d #END while there are bytes to read - return ''.join(tokens) + return md # END fast or slow path #{ Interface From c30e930bf06edc8f60ce3311d13f6a61de8ac0ce Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 9 Jun 2011 23:57:55 +0200 Subject: [PATCH 0158/2375] Changed buffer implementation to use a cursor right away instead of taking a path and a manager. This makes it much more flexible, as it doesn't have to care about the manager anymore, making it easier to use and making clear that it is meant for use with a mapped memory manager implementation. --- smmap/buf.py | 44 ++++++++++++++++-------------------------- smmap/test/test_buf.py | 36 +++++++++++++++++----------------- 2 files changed, 35 insertions(+), 45 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index d1be1b65a..b4f581316 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -7,35 +7,23 @@ class MappedMemoryBuffer(object): """A buffer like object which allows direct byte-wise object and slicing into - memory of a mapped file. The mapping is controlled by an underlying memory manager. - - A buffer, once initialized, stays put on providing access to eactly one path. - A custom interface allows you to change paths mid way, and to optimize - the resource usage. - - Please note that this type is only fully usable if you configure it with the - MappedMemoryManager to use. + memory of a mapped file. The mapping is controlled by the provided cursor. The buffer is relative, that is if you map an offset, index 0 will map to the - first byte at your given offset.""" + first byte at the offset you used during initialization or begin_access""" __slots__ = '_c' # our cursor - #{ Configuration - # A subclass must provide an instance of a (usually global) MappedMemoryManager - manager = None - #}END configuration - def __init__(self, path = None, offset = 0, size = sys.maxint, flags = 0): - """Initalize the instance to operate on the given path if given. - :param path: if not None, the path to the file you want to access - If None, you have call begin_access before using the buffer + def __init__(self, cursor = None, offset = 0, size = sys.maxint, flags = 0): + """Initalize the instance to operate on the given cursor. + :param cursor: if not None, the associated cursor to the file you want to access + If None, you have call begin_access before using the buffer and provide a cursor :param offset: absolute offset in bytes :param size: the total size of the mapping. Defaults to the maximum possible size :param flags: Additional flags to be passed to os.open :raise ValueError: if the buffer could not achieve a valid state""" - self._c = MemoryCursor(self.manager) - assert self.manager is not None, "Require the cls.manager variable to be set in subclass" - if path and not self.begin_access(path, offset, size, flags): + self._c = cursor + if cursor and not self.begin_access(cursor, offset, size, flags): raise ValueError("Failed to allocate the buffer - probably the given offset is out of bounds") # END handle offset @@ -75,19 +63,19 @@ def __getslice__(self, i, j): # END fast or slow path #{ Interface - def begin_access(self, path = None, offset = 0, size = sys.maxint, flags = 0): + def begin_access(self, cursor = None, offset = 0, size = sys.maxint, flags = 0): """Call this before the first use of this instance. The method was already called by the constructor in case sufficient information was provided. For more information no the parameters, see the __init__ method - :param path: if path is empty or None the existing path will be used if possible. + :param path: if cursor is None the existing one will be used. :return: True if the buffer can be used""" - if path and (not self._c.is_associated() or self._c.path() != path): - self._c = self.manager.make_cursor(path) - #END get associated cursor + if cursor: + self._c = cursor + #END update our cursor # reuse existing cursors if possible - if self._c.is_associated(): + if self._c is not None and self._c.is_associated(): return self._c.use_region(offset, size, flags).is_valid() return False @@ -97,7 +85,9 @@ def end_access(self): resources to be freed. Once you called end_access, you must call begin access before reusing this instance!""" - self._c.unuse_region() + if self._c is not None: + self._c.unuse_region() + #END unuse region def cursor(self): """:return: the currently set cursor which provides access to the data""" diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index d7e6d6c96..6192897bd 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -7,24 +7,24 @@ from time import time import sys -class TestBuffer(MappedMemoryBuffer): - #{ Configuration - manager = MappedMemoryManager() - #} END configuration - + +man_optimal = MappedMemoryManager() +man_worst_case = MappedMemoryManager( window_size=TestBase.k_window_test_size/100, + max_memory_size=TestBase.k_window_test_size/3, + max_open_handles=15) class TestBuf(TestBase): def test_basics(self): - self.failUnlessRaises(AssertionError, MappedMemoryBuffer) # needs subclass fc = FileCreator(self.k_window_test_size, "buffer_test") # invalid paths fail upon construction - self.failUnlessRaises(OSError, TestBuffer, "somefile") # invalid file - self.failUnlessRaises(ValueError, TestBuffer, fc.path, fc.size) # offset too large + c = man_optimal.make_cursor(fc.path) + self.failUnlessRaises(ValueError, MappedMemoryBuffer, type(c)()) # invalid cursor + self.failUnlessRaises(ValueError, MappedMemoryBuffer, c, fc.size) # offset too large - buf = TestBuffer() # can create uninitailized buffers - assert not buf.cursor().is_valid() and not buf.cursor().is_associated() + buf = MappedMemoryBuffer() # can create uninitailized buffers + assert buf.cursor() is None # can call end access any time buf.end_access() @@ -32,8 +32,9 @@ def test_basics(self): # begin access can revive it, if the offset is suitable offset = 100 - assert buf.begin_access(fc.path, fc.size) == False - assert buf.begin_access(fc.path, offset) == True + assert buf.begin_access(c, fc.size) == False + assert buf.begin_access(c, offset) == True + assert buf.cursor().is_valid() # empty begin access keeps it valid on the same path, but alters the offset assert buf.begin_access() == True @@ -52,9 +53,9 @@ def test_basics(self): # an empty begin access fixes it up again assert buf.begin_access() == True and buf.cursor().is_valid() del(buf) # ends access automatically + del(c) - man = TestBuffer.manager - assert man.num_file_handles() == 1 + assert man_optimal.num_file_handles() == 1 # PERFORMANCE # blast away with rnadom access and a full mapping - we don't want to @@ -62,10 +63,9 @@ def test_basics(self): # We do it once with an optimal setting, and with a worse manager which # will produce small mappings only ! max_num_accesses = 1000 - for manager, man_id in ( (man, 'optimal'), - (MappedMemoryManager(window_size=fc.size/100, max_memory_size=fc.size/3, max_open_handles=15), 'worst case')): - TestBuffer.manager = manager - buf = TestBuffer(fc.path) + for manager, man_id in ( (man_optimal, 'optimal'), + (man_worst_case, 'worst case')): + buf = MappedMemoryBuffer(manager.make_cursor(fc.path)) assert manager.num_file_handles() == 1 for access_mode in range(2): # single, multi num_accesses_left = max_num_accesses From aafc980e9cbb1b2ed08d374300e9916538136cc7 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 00:02:00 +0200 Subject: [PATCH 0159/2375] Added indirection level to internally used types to allow others to exchange them with their own implementations. --- smmap/mman.py | 25 +++++++++++++++++-------- smmap/test/test_buf.py | 2 +- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 588a63563..d8626d065 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -29,6 +29,11 @@ class MemoryCursor(object): '_size' # maximum size we should provide ) + #{ Configuration + MemoryWindowCls = MemoryWindow + MappedRegionCls = MappedRegion + #} END configuration + def __init__(self, manager = None, regions = None): self._manager = manager self._rlist = regions @@ -129,9 +134,9 @@ def use_region(self, offset, size, flags = 0, _is_recursive=False): #END while bisecting if existing_region is None: - left = MemoryWindow(0, 0) - mid = MemoryWindow(offset, size) - right = MemoryWindow(self.file_size(), 0) + left = self.MemoryWindowCls(0, 0) + mid = self.MemoryWindowCls(offset, size) + right = self.MemoryWindowCls(self.file_size(), 0) # we want to honor the max memory size, and assure we have anough # memory available @@ -162,13 +167,13 @@ def use_region(self, offset, size, flags = 0, _is_recursive=False): # possible mapping if insert_pos == 0: if len_regions: - right = MemoryWindow.from_region(a[insert_pos]) + right = self.MemoryWindowCls.from_region(a[insert_pos]) #END adjust right side else: if insert_pos != len_regions: - right = MemoryWindow.from_region(a[insert_pos]) + right = self.MemoryWindowCls.from_region(a[insert_pos]) # END adjust right window - left = MemoryWindow.from_region(a[insert_pos - 1]) + left = self.MemoryWindowCls.from_region(a[insert_pos - 1]) #END adjust surrounding windows mid.extend_left_to(left, window_size) @@ -185,7 +190,7 @@ def use_region(self, offset, size, flags = 0, _is_recursive=False): if man._handle_count >= man._max_handle_count: raise Exception #END assert own imposed max file handles - self._region = MappedRegion(a.path(), mid.ofs, mid.size, flags) + self._region = self.MappedRegionCls(a.path(), mid.ofs, mid.size, flags) except Exception: # apparently we are out of system resources or hit a limit # As many more operations are likely to fail in that condition ( @@ -302,6 +307,10 @@ class MappedMemoryManager(object): '_handle_count', # amount of currently allocated file handles ] + #{ Configuration + MappedRegionListCls = MappedRegionList + #} END configuration + _MB_in_bytes = 1024 * 1024 def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys.maxint): @@ -378,7 +387,7 @@ def make_cursor(self, path): """:return: a cursor pointing to the given path. It can be used to map new regions of the file into memory""" regions = self._fdict.get(path) if regions is None: - regions = MappedRegionList(path) + regions = self.MappedRegionListCls(path) self._fdict[path] = regions # END obtain region for path return MemoryCursor(self, regions) diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index 6192897bd..ae1a174d5 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -62,7 +62,7 @@ def test_basics(self): # exagerate the manager's overhead, but measure the buffer overhead # We do it once with an optimal setting, and with a worse manager which # will produce small mappings only ! - max_num_accesses = 1000 + max_num_accesses = 400 for manager, man_id in ( (man_optimal, 'optimal'), (man_worst_case, 'worst case')): buf = MappedMemoryBuffer(manager.make_cursor(fc.path)) From 8d64e74ed80f2818acad652a69615708f8f61104 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 00:38:48 +0200 Subject: [PATCH 0160/2375] Added very special purpose method to free memory maps. The whole reason for this is to make the windows test work after all \! --- smmap/mman.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/smmap/mman.py b/smmap/mman.py index d8626d065..44d985e28 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -426,3 +426,32 @@ def page_size(self): return PAGESIZE #} END interface + + #{ Special Purpose Interface + + def force_map_handle_removal_win(self, base_path): + """ONLY AVAILABLE ON WINDOWS + On windows removing files is not allowed if anybody still has it opened. + If this process is ourselves, and if the whole process uses this memory + manager (as far as the parent framework is concerned) we can enforce + closing all memory maps whose path matches the given base path to + allow the respective operation after all. + The respective system must NOT access the closed memory regions anymore ! + This really may only be used if you know that the items which keep + the cursors alive will not be using it anymore. They need to be recreated ! + :return: Amount of closed handles + :note: does nothing on non-windows platforms""" + if sys.platform != 'win32': + return + #END early bailout + + num_closed = 0 + for path, rlist in self._fdict.iteritems(): + if path.startswith(base_path): + for region in rlist: + region._mf.close() + num_closed += 1 + #END path matches + #END for each path + return num_closed + #} END special purpose interface From 4ad22313d8764bcc3645ba8d8ea3ff6f50bba7d1 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 09:42:55 +0200 Subject: [PATCH 0161/2375] System can now deal with file descriptors as input, but it still requires some more testing. Also fds need to remain open to be usable for new mapped regions --- smmap/mman.py | 41 ++++++++++++++++++++++++++++++++--------- smmap/test/test_util.py | 18 ++++++++++++------ smmap/util.py | 29 +++++++++++++++++++---------- 3 files changed, 63 insertions(+), 25 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 44d985e28..79f2de896 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -54,7 +54,7 @@ def _destroy(self): num_clients = self._rlist.client_count() - 2 if num_clients == 0 and len(self._rlist) == 0: # Free all resources associated with the mapped file - self._manager._fdict.pop(self._rlist.path()) + self._manager._fdict.pop(self._rlist.path_or_fd()) #END remove regions list from manager #END handle regions @@ -190,7 +190,7 @@ def use_region(self, offset, size, flags = 0, _is_recursive=False): if man._handle_count >= man._max_handle_count: raise Exception #END assert own imposed max file handles - self._region = self.MappedRegionCls(a.path(), mid.ofs, mid.size, flags) + self._region = self.MappedRegionCls(a.path_or_fd(), mid.ofs, mid.size, flags) except Exception: # apparently we are out of system resources or hit a limit # As many more operations are likely to fail in that condition ( @@ -278,9 +278,26 @@ def file_size(self): """:return: size of the underlying file""" return self._rlist.file_size() + def path_or_fd(self): + """:return: path or file decriptor of the underlying mapped file""" + return self._rlist.path_or_fd() + def path(self): - """:return: path of the underlying mapped file""" - return self._rlist.path() + """:return: path of the underlying mapped file + :raise ValueError: if attached path is not a path""" + if isinstance(self._rlist.path_or_fd(), int): + raise ValueError("Path queried although mapping was applied to a file descriptor") + # END handle type + return self._rlist.path_or_fd() + + def fd(self): + """:return: file descriptor used to create the underlying mapping. + :note: it is not required to be valid anymore + :raise ValueError: if the mapping was not created by a file descriptor""" + if isinstance(self._rlist.path_or_fd(), basestring): + return ValueError("File descriptor queried although mapping was generated from path") + #END handle type + return self._rlist.path_or_fd() #} END interface @@ -383,12 +400,18 @@ def _collect_lru_region(self, size): return num_found #{ Interface - def make_cursor(self, path): - """:return: a cursor pointing to the given path. It can be used to map new regions of the file into memory""" - regions = self._fdict.get(path) + def make_cursor(self, path_or_fd): + """:return: a cursor pointing to the given path or file descriptor. + It can be used to map new regions of the file into memory + :note: if a file descriptor is given, it is assumed to be open and valid, + but may be closed afterwards. To refer to the same file, you may reuse + your existing file descriptor, but keep in mind that new windows can only + be mapped as long as it stays valid. This is why the using actual file paths + are preferred unless you plan to keep the file descriptor open.""" + regions = self._fdict.get(path_or_fd) if regions is None: - regions = self.MappedRegionListCls(path) - self._fdict[path] = regions + regions = self.MappedRegionListCls(path_or_fd) + self._fdict[path_or_fd] = regions # END obtain region for path return MemoryCursor(self, regions) diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 136d99102..a5478cd7c 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -2,6 +2,7 @@ from smmap.util import * +import os import sys class TestMMan(TestBase): @@ -86,13 +87,18 @@ def test_region(self): def test_region_list(self): fc = FileCreator(100, "sample_file") - ml = MappedRegionList(fc.path) - assert ml.client_count() == 1 - - assert len(ml) == 0 - assert ml.path() == fc.path - assert ml.file_size() == fc.size + fd = os.open(fc.path, os.O_RDONLY) + for item in (fc.path, fd): + ml = MappedRegionList(item) + + assert ml.client_count() == 1 + + assert len(ml) == 0 + assert ml.path_or_fd() == item + assert ml.file_size() == fc.size + #END handle input + os.close(fd) def test_util(self): assert isinstance(is_64_bit(), bool) # just call it diff --git a/smmap/util.py b/smmap/util.py index 786622d9a..f3bb58b33 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -93,9 +93,9 @@ class MappedRegion(object): #END handle additional slot - def __init__(self, path, ofs, size, flags = 0): + def __init__(self, path_or_fd, ofs, size, flags = 0): """Initialize a region, allocate the memory map - :param path: path to the file to map + :param path_or_fd: path to the file to map, or the opened file descriptor :param ofs: **aligned** offset into the file to be mapped :param size: if size is larger then the file on disk, the whole file will be allocated the the size automatically adjusted @@ -105,7 +105,12 @@ def __init__(self, path, ofs, size, flags = 0): self._size = 0 self._uc = 0 - fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)|flags) + if isinstance(path_or_fd, int): + fd = path_or_fd + else: + fd = os.open(path_or_fd, os.O_RDONLY|getattr(os, 'O_BINARY', 0)|flags) + #END handle fd + try: kwargs = dict(access=ACCESS_READ, offset=ofs) corrected_size = size @@ -189,29 +194,33 @@ def includes_ofs(self, ofs): class MappedRegionList(list): """List of MappedRegion instances associating a path with a list of regions.""" __slots__ = ( - '_path', # path which is mapped by all our regions + '_path_or_fd', # path or file descriptor which is mapped by all our regions '_file_size' # total size of the file we map ) def __new__(cls, path): return super(MappedRegionList, cls).__new__(cls) - def __init__(self, path): - self._path = path + def __init__(self, path_or_fd): + self._path_or_fd = path_or_fd self._file_size = None def client_count(self): """:return: amount of clients which hold a reference to this instance""" return getrefcount(self)-3 - def path(self): - """:return: path to file whose regions we manage""" - return self._path + def path_or_fd(self): + """:return: path or file descriptor we are attached to""" + return self._path_or_fd def file_size(self): """:return: size of file we manager""" if self._file_size is None: - self._file_size = os.stat(self._path).st_size + if isinstance(self._path_or_fd, basestring): + self._file_size = os.stat(self._path_or_fd).st_size + else: + self._file_size = os.fstat(self._path_or_fd).st_size + #END handle path type #END update file size return self._file_size From a8a5e10835d71bb99993744777a06fc5573c892c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 09:53:10 +0200 Subject: [PATCH 0162/2375] Added tests for the fd case. It shows that this is measurably faster than the string path version because there is less system overhead. Good to know actally --- smmap/mman.py | 4 +- smmap/test/test_buf.py | 80 +++++++++------- smmap/test/test_mman.py | 207 +++++++++++++++++++++------------------- smmap/util.py | 4 +- 4 files changed, 157 insertions(+), 138 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 79f2de896..b15b9af7c 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -407,7 +407,9 @@ def make_cursor(self, path_or_fd): but may be closed afterwards. To refer to the same file, you may reuse your existing file descriptor, but keep in mind that new windows can only be mapped as long as it stays valid. This is why the using actual file paths - are preferred unless you plan to keep the file descriptor open.""" + are preferred unless you plan to keep the file descriptor open. + :note: Using file descriptors directly is faster once new windows are mapped as it + prevents the file to be opened again just for the purpose of mapping it.""" regions = self._fdict.get(path_or_fd) if regions is None: regions = self.MappedRegionListCls(path_or_fd) diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index ae1a174d5..efc1da60c 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -6,6 +6,7 @@ from random import randint from time import time import sys +import os man_optimal = MappedMemoryManager() @@ -63,40 +64,45 @@ def test_basics(self): # We do it once with an optimal setting, and with a worse manager which # will produce small mappings only ! max_num_accesses = 400 - for manager, man_id in ( (man_optimal, 'optimal'), - (man_worst_case, 'worst case')): - buf = MappedMemoryBuffer(manager.make_cursor(fc.path)) - assert manager.num_file_handles() == 1 - for access_mode in range(2): # single, multi - num_accesses_left = max_num_accesses - num_bytes = 0 - fsize = fc.size - - st = time() - buf.begin_access() - while num_accesses_left: - num_accesses_left -= 1 - if access_mode: # multi - ofs_start = randint(0, fsize) - ofs_end = randint(ofs_start, fsize) - d = buf[ofs_start:ofs_end] - assert len(d) == ofs_end - ofs_start - assert d == data[ofs_start:ofs_end] - num_bytes += len(d) - else: - pos = randint(0, fsize) - assert buf[pos] == data[pos] - num_bytes += 1 - #END handle mode - # END handle num accesses - - buf.end_access() - assert manager.num_file_handles() - assert manager.collect() - assert manager.num_file_handles() == 0 - elapsed = time() - st - mb = float(1000*1000) - mode_str = (access_mode and "slice") or "single byte" - sys.stderr.write("%s: Made %i random %s accesses to buffer reading a total of %f mb in %f s (%f mb/s)\n" % (man_id, max_num_accesses, mode_str, num_bytes/mb, elapsed, (num_bytes/mb)/elapsed)) - # END handle access mode - # END for each manager + fd = os.open(fc.path, os.O_RDONLY) + for item in (fc.path, fd): + for manager, man_id in ( (man_optimal, 'optimal'), + (man_worst_case, 'worst case')): + buf = MappedMemoryBuffer(manager.make_cursor(item)) + assert manager.num_file_handles() == 1 + for access_mode in range(2): # single, multi + num_accesses_left = max_num_accesses + num_bytes = 0 + fsize = fc.size + + st = time() + buf.begin_access() + while num_accesses_left: + num_accesses_left -= 1 + if access_mode: # multi + ofs_start = randint(0, fsize) + ofs_end = randint(ofs_start, fsize) + d = buf[ofs_start:ofs_end] + assert len(d) == ofs_end - ofs_start + assert d == data[ofs_start:ofs_end] + num_bytes += len(d) + else: + pos = randint(0, fsize) + assert buf[pos] == data[pos] + num_bytes += 1 + #END handle mode + # END handle num accesses + + buf.end_access() + assert manager.num_file_handles() + assert manager.collect() + assert manager.num_file_handles() == 0 + elapsed = time() - st + mb = float(1000*1000) + mode_str = (access_mode and "slice") or "single byte" + sys.stderr.write("%s: Made %i random %s accesses to buffer created from %s reading a total of %f mb in %f s (%f mb/s)\n" + % (man_id, max_num_accesses, mode_str, type(item), num_bytes/mb, elapsed, (num_bytes/mb)/elapsed)) + # END handle access mode + # END for each manager + # END for each input + os.close(fd) diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index b1c8f68eb..57d78d504 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -7,6 +7,7 @@ from random import randint from time import time +import os import sys from copy import copy @@ -62,110 +63,118 @@ def test_memory_manager(self): # use a region, verify most basic functionality fc = FileCreator(self.k_window_test_size, "manager_test") - c = man.make_cursor(fc.path) - assert c.use_region(10, 10).is_valid() - assert c.ofs_begin() == 10 - assert c.size() == 10 - assert c.buffer()[:] == open(fc.path, 'rb').read(20)[10:] + fd = os.open(fc.path, os.O_RDONLY) + for item in (fc.path, fd): + c = man.make_cursor(item) + assert c.use_region(10, 10).is_valid() + assert c.ofs_begin() == 10 + assert c.size() == 10 + assert c.buffer()[:] == open(fc.path, 'rb').read(20)[10:] + #END for each input + os.close(fd) def test_memman_operation(self): # test more access, force it to actually unmap regions fc = FileCreator(self.k_window_test_size, "manager_operation_test") data = open(fc.path, 'rb').read() - assert len(data) == fc.size - - # small windows, a reasonable max memory. Not too many regions at once - max_num_handles = 15 - man = MappedMemoryManager(window_size=fc.size / 100, max_memory_size=fc.size / 3, max_open_handles=max_num_handles) - c = man.make_cursor(fc.path) - - # still empty (more about that is tested in test_memory_manager() - assert man.num_open_files() == 0 - assert man.mapped_memory_size() == 0 - - base_offset = 5000 - size = man.window_size() / 2 - assert c.use_region(base_offset, size).is_valid() - rr = c.region_ref() - assert rr().client_count() == 2 # the manager and the cursor and us - - assert man.num_open_files() == 1 - assert man.num_file_handles() == 1 - assert man.mapped_memory_size() == rr().size() - assert c.size() == size - assert c.ofs_begin() == base_offset - assert rr().ofs_begin() == 0 # it was aligned and expanded - assert rr().size() == align_to_page(man.window_size(), True) # but isn't larger than the max window (aligned) - - assert c.buffer()[:] == data[base_offset:base_offset+size] - - # obtain second window, which spans the first part of the file - it is a still the same window - assert c.use_region(0, size-10).is_valid() - assert c.region_ref()() == rr() - assert man.num_file_handles() == 1 - assert c.size() == size-10 - assert c.ofs_begin() == 0 - assert c.buffer()[:] == data[:size-10] - - # map some part at the end, our requested size cannot be kept - overshoot = 4000 - base_offset = fc.size - size + overshoot - assert c.use_region(base_offset, size).is_valid() - assert man.num_file_handles() == 2 - assert c.size() < size - assert c.region_ref()() is not rr() # old region is still available, but has not curser ref anymore - assert rr().client_count() == 1 # only held by manager - rr = c.region_ref() - assert rr().client_count() == 2 # manager + cursor - assert rr().ofs_begin() < c.ofs_begin() # it should have extended itself to the left - assert rr().ofs_end() <= fc.size # it cannot be larger than the file - assert c.buffer()[:] == data[base_offset:base_offset+size] - - # unising a region makes the cursor invalid - c.unuse_region() - assert not c.is_valid() - # but doesn't change anything regarding the handle count - we cache it and only - # remove mapped regions if we have to - assert man.num_file_handles() == 2 - - # iterate through the windows, verify data contents - # this will trigger map collection after a while - max_random_accesses = 5000 - num_random_accesses = max_random_accesses - memory_read = 0 - st = time() - - # cache everything to get some more performance - includes_ofs = c.includes_ofs - max_mapped_memory_size = man.max_mapped_memory_size() - max_file_handles = man.max_file_handles() - mapped_memory_size = man.mapped_memory_size - num_file_handles = man.num_file_handles - while num_random_accesses: - num_random_accesses -= 1 - base_offset = randint(0, fc.size - 1) + fd = os.open(fc.path, os.O_RDONLY) + for item in (fc.path, fd): + assert len(data) == fc.size + + # small windows, a reasonable max memory. Not too many regions at once + max_num_handles = 15 + man = MappedMemoryManager(window_size=fc.size / 100, max_memory_size=fc.size / 3, max_open_handles=max_num_handles) + c = man.make_cursor(item) - # precondition - assert max_mapped_memory_size >= mapped_memory_size() - assert max_file_handles >= num_file_handles() + # still empty (more about that is tested in test_memory_manager() + assert man.num_open_files() == 0 + assert man.mapped_memory_size() == 0 + + base_offset = 5000 + size = man.window_size() / 2 assert c.use_region(base_offset, size).is_valid() - csize = c.size() - assert c.buffer()[:] == data[base_offset:base_offset+csize] - memory_read += csize + rr = c.region_ref() + assert rr().client_count() == 2 # the manager and the cursor and us - assert includes_ofs(base_offset) - assert includes_ofs(base_offset+csize-1) - assert not includes_ofs(base_offset+csize) - # END while we should do an access - elapsed = time() - st - mb = float(1000 * 1000) - sys.stderr.write("Read %i mb of memory with %i random accesses in %fs (%f mb/s)\n" - % (memory_read/mb, max_random_accesses, elapsed, (memory_read/mb)/elapsed)) - - # an offset as large as the size doesn't work ! - assert not c.use_region(fc.size, size).is_valid() - - # collection - it should be able to collect all - assert man.num_file_handles() - assert man.collect() - assert man.num_file_handles() == 0 + assert man.num_open_files() == 1 + assert man.num_file_handles() == 1 + assert man.mapped_memory_size() == rr().size() + assert c.size() == size + assert c.ofs_begin() == base_offset + assert rr().ofs_begin() == 0 # it was aligned and expanded + assert rr().size() == align_to_page(man.window_size(), True) # but isn't larger than the max window (aligned) + + assert c.buffer()[:] == data[base_offset:base_offset+size] + + # obtain second window, which spans the first part of the file - it is a still the same window + assert c.use_region(0, size-10).is_valid() + assert c.region_ref()() == rr() + assert man.num_file_handles() == 1 + assert c.size() == size-10 + assert c.ofs_begin() == 0 + assert c.buffer()[:] == data[:size-10] + + # map some part at the end, our requested size cannot be kept + overshoot = 4000 + base_offset = fc.size - size + overshoot + assert c.use_region(base_offset, size).is_valid() + assert man.num_file_handles() == 2 + assert c.size() < size + assert c.region_ref()() is not rr() # old region is still available, but has not curser ref anymore + assert rr().client_count() == 1 # only held by manager + rr = c.region_ref() + assert rr().client_count() == 2 # manager + cursor + assert rr().ofs_begin() < c.ofs_begin() # it should have extended itself to the left + assert rr().ofs_end() <= fc.size # it cannot be larger than the file + assert c.buffer()[:] == data[base_offset:base_offset+size] + + # unising a region makes the cursor invalid + c.unuse_region() + assert not c.is_valid() + # but doesn't change anything regarding the handle count - we cache it and only + # remove mapped regions if we have to + assert man.num_file_handles() == 2 + + # iterate through the windows, verify data contents + # this will trigger map collection after a while + max_random_accesses = 5000 + num_random_accesses = max_random_accesses + memory_read = 0 + st = time() + + # cache everything to get some more performance + includes_ofs = c.includes_ofs + max_mapped_memory_size = man.max_mapped_memory_size() + max_file_handles = man.max_file_handles() + mapped_memory_size = man.mapped_memory_size + num_file_handles = man.num_file_handles + while num_random_accesses: + num_random_accesses -= 1 + base_offset = randint(0, fc.size - 1) + + # precondition + assert max_mapped_memory_size >= mapped_memory_size() + assert max_file_handles >= num_file_handles() + assert c.use_region(base_offset, size).is_valid() + csize = c.size() + assert c.buffer()[:] == data[base_offset:base_offset+csize] + memory_read += csize + + assert includes_ofs(base_offset) + assert includes_ofs(base_offset+csize-1) + assert not includes_ofs(base_offset+csize) + # END while we should do an access + elapsed = time() - st + mb = float(1000 * 1000) + sys.stderr.write("Read %i mb of memory with %i random on cursor initialized with %s accesses in %fs (%f mb/s)\n" + % (memory_read/mb, max_random_accesses, type(item), elapsed, (memory_read/mb)/elapsed)) + + # an offset as large as the size doesn't work ! + assert not c.use_region(fc.size, size).is_valid() + + # collection - it should be able to collect all + assert man.num_file_handles() + assert man.collect() + assert man.num_file_handles() == 0 + #END for each item + os.close(fd) diff --git a/smmap/util.py b/smmap/util.py index f3bb58b33..2ba7a1d29 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -131,7 +131,9 @@ def __init__(self, path_or_fd, ofs, size, flags = 0): self._mfb = buffer(self._mf, ofs, size) #END handle buffer wrapping finally: - os.close(fd) + if isinstance(path_or_fd, basestring): + os.close(fd) + #END only close it if we opened it #END close file handle def __repr__(self): From 9f16040fb4cde025875e28b01d70cfba11c1d773 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 10:42:32 +0200 Subject: [PATCH 0163/2375] Fixed some mapping issues on windows. Fixed some tests to deal with the very different granularity --- smmap/mman.py | 5 ----- smmap/test/test_buf.py | 2 +- smmap/test/test_mman.py | 7 +++---- smmap/test/test_util.py | 17 ++++++++++++----- smmap/util.py | 16 ++++++++-------- 5 files changed, 24 insertions(+), 23 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index b15b9af7c..8e50a1445 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -4,7 +4,6 @@ MappedRegion, MappedRegionList, is_64_bit, - PAGESIZE ) from exc import RegionCollectionError @@ -446,10 +445,6 @@ def max_mapped_memory_size(self): """:return: maximum amount of memory we may allocate""" return self._max_memory_size - def page_size(self): - """:return: size of a single memory page in bytes""" - return PAGESIZE - #} END interface #{ Special Purpose Interface diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index efc1da60c..c772e4999 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -97,7 +97,7 @@ def test_basics(self): assert manager.num_file_handles() assert manager.collect() assert manager.num_file_handles() == 0 - elapsed = time() - st + elapsed = max(time() - st, 0.001) # prevent zero division errors on windows mb = float(1000*1000) mode_str = (access_mode and "slice") or "single byte" sys.stderr.write("%s: Made %i random %s accesses to buffer created from %s reading a total of %f mb in %f s (%f mb/s)\n" diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 57d78d504..e220f8bb2 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -2,7 +2,7 @@ from smmap.mman import * from smmap.mman import MemoryCursor -from smmap.util import PAGESIZE, align_to_page +from smmap.util import align_to_mmap from smmap.exc import RegionCollectionError from random import randint @@ -52,7 +52,6 @@ def test_memory_manager(self): assert man.window_size() > 0 assert man.mapped_memory_size() == 0 assert man.max_mapped_memory_size() > 0 - assert man.page_size() == PAGESIZE # collection doesn't raise in 'any' mode man._collect_lru_region(0) @@ -102,7 +101,7 @@ def test_memman_operation(self): assert c.size() == size assert c.ofs_begin() == base_offset assert rr().ofs_begin() == 0 # it was aligned and expanded - assert rr().size() == align_to_page(man.window_size(), True) # but isn't larger than the max window (aligned) + assert rr().size() == align_to_mmap(man.window_size(), True) # but isn't larger than the max window (aligned) assert c.buffer()[:] == data[base_offset:base_offset+size] @@ -164,7 +163,7 @@ def test_memman_operation(self): assert includes_ofs(base_offset+csize-1) assert not includes_ofs(base_offset+csize) # END while we should do an access - elapsed = time() - st + elapsed = max(time() - st, 0.001) # prevent zero divison errors on windows mb = float(1000 * 1000) sys.stderr.write("Read %i mb of memory with %i random on cursor initialized with %s accesses in %fs (%f mb/s)\n" % (memory_read/mb, max_random_accesses, type(item), elapsed, (memory_read/mb)/elapsed)) diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index a5478cd7c..7caa427ba 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -1,6 +1,7 @@ from lib import TestBase, FileCreator from smmap.util import * +from mmap import ALLOCATIONGRANULARITY import os import sys @@ -50,12 +51,12 @@ def test_window(self): assert wr.ofs == wc2.ofs_end() wc.align() - assert wc.ofs == 0 and wc.size == PAGESIZE*2 + assert wc.ofs == 0 and wc.size == align_to_mmap(wc.size, True) def test_region(self): fc = FileCreator(self.k_window_test_size, "window_test") half_size = fc.size / 2 - rofs = align_to_page(4200, False) + rofs = align_to_mmap(4200, False) rfull = MappedRegion(fc.path, 0, fc.size) rhalfofs = MappedRegion(fc.path, rofs, fc.size) rhalfsize = MappedRegion(fc.path, 0, half_size) @@ -69,7 +70,13 @@ def test_region(self): assert rfull.includes_ofs(0) and rfull.includes_ofs(fc.size-1) and rfull.includes_ofs(half_size) assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxint) - assert rhalfofs.includes_ofs(rofs) and not rhalfofs.includes_ofs(0) + # with the values we have, this test only works on windows where an alignment + # size of 4096 is assumed. + if sys.platform == 'win32': + assert rhalfofs.includes_ofs(rofs) and rhalfofs.includes_ofs(0) + else: + assert rhalfofs.includes_ofs(rofs) and not rhalfofs.includes_ofs(0) + #END handle platforms # auto-refcount assert rfull.client_count() == 1 @@ -102,6 +109,6 @@ def test_region_list(self): def test_util(self): assert isinstance(is_64_bit(), bool) # just call it - assert align_to_page(1, False) == 0 - assert align_to_page(1, True) == PAGESIZE + assert align_to_mmap(1, False) == 0 + assert align_to_mmap(1, True) == ALLOCATIONGRANULARITY diff --git a/smmap/util.py b/smmap/util.py index 2ba7a1d29..e1f786538 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -3,22 +3,22 @@ import sys import mmap -from mmap import PAGESIZE, mmap, ACCESS_READ +from mmap import ALLOCATIONGRANULARITY, mmap, ACCESS_READ from sys import getrefcount -__all__ = [ "align_to_page", "is_64_bit", - "MemoryWindow", "MappedRegion", "MappedRegionList", "PAGESIZE"] +__all__ = [ "align_to_mmap", "is_64_bit", + "MemoryWindow", "MappedRegion", "MappedRegionList", "ALLOCATIONGRANULARITY"] #{ Utilities -def align_to_page(num, round_up): +def align_to_mmap(num, round_up): """Align the given integer number to the closest page offset, which usually is 4096 bytes. :param round_up: if True, the next higher multiple of page size is used, otherwise the lower page_size will be used (i.e. if True, 1 becomes 4096, otherwise it becomes 0) :return: num rounded to closest page""" - res = (num / PAGESIZE) * PAGESIZE; + res = (num / ALLOCATIONGRANULARITY) * ALLOCATIONGRANULARITY; if round_up and (res != num): - res += PAGESIZE; + res += ALLOCATIONGRANULARITY #END handle size return res; @@ -55,10 +55,10 @@ def ofs_end(self): def align(self): """Assures the previous window area is contained in the new one""" - nofs = align_to_page(self.ofs, 0) + nofs = align_to_mmap(self.ofs, 0) self.size += self.ofs - nofs # keep size constant self.ofs = nofs - self.size = align_to_page(self.size, 1) + self.size = align_to_mmap(self.size, 1) def extend_left_to(self, window, max_size): """Adjust the offset to start where the given window on our left ends if possible, From 4466476cf576cf5936a11524e67345a80e2ec5a9 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 10:48:28 +0200 Subject: [PATCH 0164/2375] Fixed missing ALLOCATIONGRANULARIY in python <2.6. Python is as unportable as ever across versions with simple functionality --- smmap/test/test_util.py | 1 - smmap/util.py | 10 +++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 7caa427ba..4043cd83f 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -1,7 +1,6 @@ from lib import TestBase, FileCreator from smmap.util import * -from mmap import ALLOCATIONGRANULARITY import os import sys diff --git a/smmap/util.py b/smmap/util.py index e1f786538..667777861 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -3,7 +3,15 @@ import sys import mmap -from mmap import ALLOCATIONGRANULARITY, mmap, ACCESS_READ +from mmap import mmap, ACCESS_READ +try: + from mmap import ALLOCATIONGRANULARITY +except ImportError: + # in python pre 2.6, the ALLOCATIONGRANULARITY does not exist as it is mainly + # useful for aligning the offset. The offset argument doesn't exist there though + from mmap import PAGESIZE as ALLOCATIONGRANULARITY +#END handle pythons missing quality assurance + from sys import getrefcount __all__ = [ "align_to_mmap", "is_64_bit", From 064aa81076b8b2e08209aa6525ca22065703b41d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 12:35:32 +0200 Subject: [PATCH 0165/2375] Implemented __len__ method in buffer, including small test. This has its caveats, but should be fine for responsible clients --- smmap/buf.py | 26 ++++++++++++++++++++++++-- smmap/test/test_buf.py | 5 ++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index b4f581316..4fc78ea6f 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -11,7 +11,10 @@ class MappedMemoryBuffer(object): The buffer is relative, that is if you map an offset, index 0 will map to the first byte at the offset you used during initialization or begin_access""" - __slots__ = '_c' # our cursor + __slots__ = ( + '_c', # our cursor + '_size', # our supposed size + ) def __init__(self, cursor = None, offset = 0, size = sys.maxint, flags = 0): @@ -20,6 +23,10 @@ def __init__(self, cursor = None, offset = 0, size = sys.maxint, flags = 0): If None, you have call begin_access before using the buffer and provide a cursor :param offset: absolute offset in bytes :param size: the total size of the mapping. Defaults to the maximum possible size + From that point on, the __len__ of the buffer will be the given size or the file size. + If the size is larger than the mappable area, you can only access the actually available + area, although the length of the buffer is reported to be your given size. + Hence it is in your own interest to provide a proper size ! :param flags: Additional flags to be passed to os.open :raise ValueError: if the buffer could not achieve a valid state""" self._c = cursor @@ -30,6 +37,9 @@ def __init__(self, cursor = None, offset = 0, size = sys.maxint, flags = 0): def __del__(self): self.end_access() + def __len__(self): + return self._size + def __getitem__(self, i): c = self._c assert c.is_valid() @@ -76,7 +86,18 @@ def begin_access(self, cursor = None, offset = 0, size = sys.maxint, flags = 0): # reuse existing cursors if possible if self._c is not None and self._c.is_associated(): - return self._c.use_region(offset, size, flags).is_valid() + res = self._c.use_region(offset, size, flags).is_valid() + if res: + # if given size is too large or default, we computer a proper size + # If its smaller, we assume the combination between offset and size + # as chosen by the user is correct and use it ! + # If not, the user is in trouble. + if size > self._c.file_size(): + size = self._c.file_size() - offset + #END handle size + self._size = size + #END set size + return res return False def end_access(self): @@ -85,6 +106,7 @@ def end_access(self): resources to be freed. Once you called end_access, you must call begin access before reusing this instance!""" + self._size = 0 if self._c is not None: self._c.unuse_region() #END unuse region diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index c772e4999..48aeabb44 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -30,15 +30,18 @@ def test_basics(self): # can call end access any time buf.end_access() buf.end_access() + assert len(buf) == 0 # begin access can revive it, if the offset is suitable offset = 100 assert buf.begin_access(c, fc.size) == False assert buf.begin_access(c, offset) == True + assert len(buf) == fc.size - offset assert buf.cursor().is_valid() # empty begin access keeps it valid on the same path, but alters the offset assert buf.begin_access() == True + assert len(buf) == fc.size assert buf.cursor().is_valid() # simple access @@ -63,7 +66,7 @@ def test_basics(self): # exagerate the manager's overhead, but measure the buffer overhead # We do it once with an optimal setting, and with a worse manager which # will produce small mappings only ! - max_num_accesses = 400 + max_num_accesses = 100 fd = os.open(fc.path, os.O_RDONLY) for item in (fc.path, fd): for manager, man_id in ( (man_optimal, 'optimal'), From d7b486df99139ff867db01f6427408a12ff213b3 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 14:26:46 +0200 Subject: [PATCH 0166/2375] Added smmap as submodule, assured the sys path makes it available --- .gitmodules | 4 ++++ gitdb/__init__.py | 16 +++++++++------- gitdb/ext/smmap | 1 + 3 files changed, 14 insertions(+), 7 deletions(-) create mode 160000 gitdb/ext/smmap diff --git a/.gitmodules b/.gitmodules index 3db4c676d..1be8ccac9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,3 +2,7 @@ path = gitdb/ext/async url = git://github.com/gitpython-developers/async.git branch = master +[submodule "smmap"] + path = gitdb/ext/smmap + url = git://github.com/Byron/smmap.git + branch = master diff --git a/gitdb/__init__.py b/gitdb/__init__.py index a551f37dc..775c969cf 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -10,13 +10,15 @@ #{ Initialization def _init_externals(): """Initialize external projects by putting them into the path""" - sys.path.append(os.path.join(os.path.dirname(__file__), 'ext', 'async')) - - try: - import async - except ImportError: - raise ImportError("'async' could not be imported, assure it is located in your PYTHONPATH") - #END verify import + for module in ('async', 'smmap'): + sys.path.append(os.path.join(os.path.dirname(__file__), 'ext', module)) + + try: + __import__(module) + except ImportError: + raise ImportError("'%s' could not be imported, assure it is located in your PYTHONPATH" % module) + #END verify import + #END handel imports #} END initialization diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap new file mode 160000 index 000000000..4466476cf --- /dev/null +++ b/gitdb/ext/smmap @@ -0,0 +1 @@ +Subproject commit 4466476cf576cf5936a11524e67345a80e2ec5a9 From d09158f9029c564c97cc33f173efd376eca873d1 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 14:36:53 +0200 Subject: [PATCH 0167/2375] Made all types available in root package --- smmap/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/smmap/__init__.py b/smmap/__init__.py index 82cff638c..769858fa5 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -5,3 +5,7 @@ __homepage__ = "https://github.com/Byron/smmap" version_info = (0, 8, 0) __version__ = '.'.join(str(i) for i in version_info) + +# make everything available in root package for convenience +from mman import * +from buf import * From 9dc4a8dd154d15a243cd2d54f7d1631a913106f0 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 14:42:05 +0200 Subject: [PATCH 0168/2375] Changed names to be more descriptive, hopefully. This opens op the option to implement such a manager differently, without the sliding window mechanics, which would be quite simple and not much better than a map of mmaps in the end --- smmap/buf.py | 6 +++--- smmap/mman.py | 40 ++++++++++++++++++++-------------------- smmap/test/test_buf.py | 14 +++++++------- smmap/test/test_mman.py | 12 ++++++------ smmap/test/test_util.py | 18 +++++++++--------- smmap/util.py | 16 ++++++++-------- 6 files changed, 53 insertions(+), 53 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index 4fc78ea6f..94650a50c 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -1,11 +1,11 @@ """Module with a simple buffer implementation using the memory manager""" -from mman import MemoryCursor +from mman import SlidingCursor import sys -__all__ = ["MappedMemoryBuffer"] +__all__ = ["SlidingWindowMapBuffer"] -class MappedMemoryBuffer(object): +class SlidingWindowMapBuffer(object): """A buffer like object which allows direct byte-wise object and slicing into memory of a mapped file. The mapping is controlled by the provided cursor. diff --git a/smmap/mman.py b/smmap/mman.py index 8e50a1445..312612298 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -1,8 +1,8 @@ """Module containnig a memory memory manager which provides a sliding window on a number of memory mapped files""" from util import ( - MemoryWindow, - MappedRegion, - MappedRegionList, + MapWindow, + MapRegion, + MapRegionList, is_64_bit, ) @@ -10,16 +10,16 @@ from weakref import ref import sys -__all__ = ["MappedMemoryManager"] +__all__ = ["SlidingWindowMapManager"] #{ Utilities #}END utilities -class MemoryCursor(object): +class SlidingCursor(object): """Pointer into the mapped region of the memory manager, keeping the current window alive until it is destroyed. - Cursors should not be created manually, but are instead returned by the MappedMemoryManager""" + Cursors should not be created manually, but are instead returned by the SlidingWindowMapManager""" __slots__ = ( '_manager', # the manger keeping all file regions '_rlist', # a regions list with regions for our file @@ -29,8 +29,8 @@ class MemoryCursor(object): ) #{ Configuration - MemoryWindowCls = MemoryWindow - MappedRegionCls = MappedRegion + MapWindowCls = MapWindow + MapRegionCls = MapRegion #} END configuration def __init__(self, manager = None, regions = None): @@ -133,9 +133,9 @@ def use_region(self, offset, size, flags = 0, _is_recursive=False): #END while bisecting if existing_region is None: - left = self.MemoryWindowCls(0, 0) - mid = self.MemoryWindowCls(offset, size) - right = self.MemoryWindowCls(self.file_size(), 0) + left = self.MapWindowCls(0, 0) + mid = self.MapWindowCls(offset, size) + right = self.MapWindowCls(self.file_size(), 0) # we want to honor the max memory size, and assure we have anough # memory available @@ -166,13 +166,13 @@ def use_region(self, offset, size, flags = 0, _is_recursive=False): # possible mapping if insert_pos == 0: if len_regions: - right = self.MemoryWindowCls.from_region(a[insert_pos]) + right = self.MapWindowCls.from_region(a[insert_pos]) #END adjust right side else: if insert_pos != len_regions: - right = self.MemoryWindowCls.from_region(a[insert_pos]) + right = self.MapWindowCls.from_region(a[insert_pos]) # END adjust right window - left = self.MemoryWindowCls.from_region(a[insert_pos - 1]) + left = self.MapWindowCls.from_region(a[insert_pos - 1]) #END adjust surrounding windows mid.extend_left_to(left, window_size) @@ -189,7 +189,7 @@ def use_region(self, offset, size, flags = 0, _is_recursive=False): if man._handle_count >= man._max_handle_count: raise Exception #END assert own imposed max file handles - self._region = self.MappedRegionCls(a.path_or_fd(), mid.ofs, mid.size, flags) + self._region = self.MapRegionCls(a.path_or_fd(), mid.ofs, mid.size, flags) except Exception: # apparently we are out of system resources or hit a limit # As many more operations are likely to fail in that condition ( @@ -301,7 +301,7 @@ def fd(self): #} END interface -class MappedMemoryManager(object): +class SlidingWindowMapManager(object): """Maintains a list of ranges of mapped memory regions in one or more files and allows to easily obtain additional regions assuring there is no overlap. Once a certain memory limit is reached globally, or if there cannot be more open file handles @@ -315,7 +315,7 @@ class MappedMemoryManager(object): space is full.""" __slots__ = [ - '_fdict', # mapping of path -> MappedRegionList + '_fdict', # mapping of path -> MapRegionList '_window_size', # maximum size of a window '_max_memory_size', # maximum amount ofmemory we may allocate '_max_handle_count', # maximum amount of handles to keep open @@ -324,7 +324,7 @@ class MappedMemoryManager(object): ] #{ Configuration - MappedRegionListCls = MappedRegionList + MapRegionListCls = MapRegionList #} END configuration _MB_in_bytes = 1024 * 1024 @@ -411,10 +411,10 @@ def make_cursor(self, path_or_fd): prevents the file to be opened again just for the purpose of mapping it.""" regions = self._fdict.get(path_or_fd) if regions is None: - regions = self.MappedRegionListCls(path_or_fd) + regions = self.MapRegionListCls(path_or_fd) self._fdict[path_or_fd] = regions # END obtain region for path - return MemoryCursor(self, regions) + return SlidingCursor(self, regions) def collect(self): """Collect all available free-to-collect mapped regions diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index 48aeabb44..96ca4f882 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -1,6 +1,6 @@ from lib import TestBase, FileCreator -from smmap.mman import MappedMemoryManager +from smmap.mman import SlidingWindowMapManager from smmap.buf import * from random import randint @@ -9,8 +9,8 @@ import os -man_optimal = MappedMemoryManager() -man_worst_case = MappedMemoryManager( window_size=TestBase.k_window_test_size/100, +man_optimal = SlidingWindowMapManager() +man_worst_case = SlidingWindowMapManager( window_size=TestBase.k_window_test_size/100, max_memory_size=TestBase.k_window_test_size/3, max_open_handles=15) @@ -21,10 +21,10 @@ def test_basics(self): # invalid paths fail upon construction c = man_optimal.make_cursor(fc.path) - self.failUnlessRaises(ValueError, MappedMemoryBuffer, type(c)()) # invalid cursor - self.failUnlessRaises(ValueError, MappedMemoryBuffer, c, fc.size) # offset too large + self.failUnlessRaises(ValueError, SlidingWindowMapBuffer, type(c)()) # invalid cursor + self.failUnlessRaises(ValueError, SlidingWindowMapBuffer, c, fc.size) # offset too large - buf = MappedMemoryBuffer() # can create uninitailized buffers + buf = SlidingWindowMapBuffer() # can create uninitailized buffers assert buf.cursor() is None # can call end access any time @@ -71,7 +71,7 @@ def test_basics(self): for item in (fc.path, fd): for manager, man_id in ( (man_optimal, 'optimal'), (man_worst_case, 'worst case')): - buf = MappedMemoryBuffer(manager.make_cursor(item)) + buf = SlidingWindowMapBuffer(manager.make_cursor(item)) assert manager.num_file_handles() == 1 for access_mode in range(2): # single, multi num_accesses_left = max_num_accesses diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index e220f8bb2..dfe43e704 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -1,7 +1,7 @@ from lib import TestBase, FileCreator from smmap.mman import * -from smmap.mman import MemoryCursor +from smmap.mman import SlidingCursor from smmap.util import align_to_mmap from smmap.exc import RegionCollectionError @@ -16,8 +16,8 @@ class TestMMan(TestBase): def test_cursor(self): fc = FileCreator(self.k_window_test_size, "cursor_test") - man = MappedMemoryManager() - ci = MemoryCursor(man) # invalid cursor + man = SlidingWindowMapManager() + ci = SlidingCursor(man) # invalid cursor assert not ci.is_valid() assert not ci.is_associated() assert ci.size() == 0 # this is cached, so we can query it in invalid state @@ -43,10 +43,10 @@ def test_cursor(self): # destruction is fine (even multiple times) cv._destroy() - MemoryCursor(man)._destroy() + SlidingCursor(man)._destroy() def test_memory_manager(self): - man = MappedMemoryManager() + man = SlidingWindowMapManager() assert man.num_file_handles() == 0 assert man.num_open_files() == 0 assert man.window_size() > 0 @@ -82,7 +82,7 @@ def test_memman_operation(self): # small windows, a reasonable max memory. Not too many regions at once max_num_handles = 15 - man = MappedMemoryManager(window_size=fc.size / 100, max_memory_size=fc.size / 3, max_open_handles=max_num_handles) + man = SlidingWindowMapManager(window_size=fc.size / 100, max_memory_size=fc.size / 3, max_open_handles=max_num_handles) c = man.make_cursor(item) # still empty (more about that is tested in test_memory_manager() diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 4043cd83f..46de2ebaa 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -8,10 +8,10 @@ class TestMMan(TestBase): def test_window(self): - wl = MemoryWindow(0, 1) # left - wc = MemoryWindow(1, 1) # center - wc2 = MemoryWindow(10, 5) # another center - wr = MemoryWindow(8000, 50) # right + wl = MapWindow(0, 1) # left + wc = MapWindow(1, 1) # center + wc2 = MapWindow(10, 5) # another center + wr = MapWindow(8000, 50) # right assert wl.ofs_end() == 1 assert wc.ofs_end() == 2 @@ -56,9 +56,9 @@ def test_region(self): fc = FileCreator(self.k_window_test_size, "window_test") half_size = fc.size / 2 rofs = align_to_mmap(4200, False) - rfull = MappedRegion(fc.path, 0, fc.size) - rhalfofs = MappedRegion(fc.path, rofs, fc.size) - rhalfsize = MappedRegion(fc.path, 0, half_size) + rfull = MapRegion(fc.path, 0, fc.size) + rhalfofs = MapRegion(fc.path, rofs, fc.size) + rhalfsize = MapRegion(fc.path, 0, half_size) # offsets assert rfull.ofs_begin() == 0 and rfull.size() == fc.size @@ -88,7 +88,7 @@ def test_region(self): assert rfull.usage_count() == 1 # window constructor - w = MemoryWindow.from_region(rfull) + w = MapWindow.from_region(rfull) assert w.ofs == rfull.ofs_begin() and w.ofs_end() == rfull.ofs_end() def test_region_list(self): @@ -96,7 +96,7 @@ def test_region_list(self): fd = os.open(fc.path, os.O_RDONLY) for item in (fc.path, fd): - ml = MappedRegionList(item) + ml = MapRegionList(item) assert ml.client_count() == 1 diff --git a/smmap/util.py b/smmap/util.py index 667777861..6ead86479 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -15,7 +15,7 @@ from sys import getrefcount __all__ = [ "align_to_mmap", "is_64_bit", - "MemoryWindow", "MappedRegion", "MappedRegionList", "ALLOCATIONGRANULARITY"] + "MapWindow", "MapRegion", "MapRegionList", "ALLOCATIONGRANULARITY"] #{ Utilities @@ -39,7 +39,7 @@ def is_64_bit(): #{ Utility Classes -class MemoryWindow(object): +class MapWindow(object): """Utility type which is used to snap windows towards each other, and to adjust their size""" __slots__ = ( 'ofs', # offset into the file in bytes @@ -51,7 +51,7 @@ def __init__(self, offset, size): self.size = size def __repr__(self): - return "MemoryWindow(%i, %i)" % (self.ofs, self.size) + return "MapWindow(%i, %i)" % (self.ofs, self.size) @classmethod def from_region(cls, region): @@ -84,7 +84,7 @@ def extend_right_to(self, window, max_size): self.size = min(self.size + (window.ofs - self.ofs_end()), max_size) -class MappedRegion(object): +class MapRegion(object): """Defines a mapped region of memory, aligned to pagesizes :note: deallocates used region automatically on destruction""" __slots__ = [ @@ -145,7 +145,7 @@ def __init__(self, path_or_fd, ofs, size, flags = 0): #END close file handle def __repr__(self): - return "MappedRegion<%i, %i>" % (self._b, self.size()) + return "MapRegion<%i, %i>" % (self._b, self.size()) #{ Interface @@ -201,15 +201,15 @@ def includes_ofs(self, ofs): #} END interface -class MappedRegionList(list): - """List of MappedRegion instances associating a path with a list of regions.""" +class MapRegionList(list): + """List of MapRegion instances associating a path with a list of regions.""" __slots__ = ( '_path_or_fd', # path or file descriptor which is mapped by all our regions '_file_size' # total size of the file we map ) def __new__(cls, path): - return super(MappedRegionList, cls).__new__(cls) + return super(MapRegionList, cls).__new__(cls) def __init__(self, path_or_fd): self._path_or_fd = path_or_fd From bc78951823623f9a529d0b515d85d6a0a1a1d8ac Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 15:31:07 +0200 Subject: [PATCH 0169/2375] moved code from cursor into manager, as it belongs there. This is a design error inherited from c++, but actually it makes overrides a bit harder, or lets say, less native, as the sliding mechanics where implemented in a class which is just the handle to a memory map in the end, which doesn't have to care about its allocation --- smmap/buf.py | 2 +- smmap/mman.py | 234 ++++++++++++++++++++-------------------- smmap/test/test_mman.py | 6 +- 3 files changed, 122 insertions(+), 120 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index 94650a50c..741450303 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -1,5 +1,5 @@ """Module with a simple buffer implementation using the memory manager""" -from mman import SlidingCursor +from mman import MemoryCursor import sys diff --git a/smmap/mman.py b/smmap/mman.py index 312612298..16f878199 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -15,7 +15,7 @@ #}END utilities -class SlidingCursor(object): +class MemoryCursor(object): """Pointer into the mapped region of the memory manager, keeping the current window alive until it is destroyed. @@ -28,11 +28,6 @@ class SlidingCursor(object): '_size' # maximum size we should provide ) - #{ Configuration - MapWindowCls = MapWindow - MapRegionCls = MapRegion - #} END configuration - def __init__(self, manager = None, regions = None): self._manager = manager self._rlist = regions @@ -82,7 +77,7 @@ def assign(self, rhs): self._destroy() self._copy_from(rhs) - def use_region(self, offset, size, flags = 0, _is_recursive=False): + def use_region(self, offset, size, flags = 0): """Assure we point to a window which allows access to the given offset into the file :param offset: absolute offset in bytes into the file :param size: amount of bytes to map @@ -104,115 +99,14 @@ def use_region(self, offset, size, flags = 0, _is_recursive=False): # END handle existing region # END check existing region + # offset too large ? + if offset >= self._rlist.file_size(): + return self + #END handle offset + if need_region: - window_size = man._window_size - - # abort on offsets beyond our mapped file's size - currently we are invalid - if offset >= self.file_size(): - return self - # END handle offset too large - - # bisect to find an existing region. The c++ implementation cannot - # do that as it uses a linked list for regions. - existing_region = None - a = self._rlist - lo = 0 - hi = len(a) - while lo < hi: - mid = (lo+hi)//2 - ofs = a[mid]._b - if ofs <= offset: - if a[mid].includes_ofs(offset): - existing_region = a[mid] - break - #END have region - lo = mid+1 - else: - hi = mid - #END handle position - #END while bisecting - - if existing_region is None: - left = self.MapWindowCls(0, 0) - mid = self.MapWindowCls(offset, size) - right = self.MapWindowCls(self.file_size(), 0) - - # we want to honor the max memory size, and assure we have anough - # memory available - # Save calls ! - if self._manager._memory_size + window_size > self._manager._max_memory_size: - man._collect_lru_region(window_size) - #END handle collection - - # we assume the list remains sorted by offset - insert_pos = 0 - len_regions = len(a) - if len_regions == 1: - if a[0]._b <= offset: - insert_pos = 1 - #END maintain sort - else: - # find insert position - insert_pos = len_regions - for i, region in enumerate(a): - if region._b > offset: - insert_pos = i - break - #END if insert position is correct - #END for each region - # END obtain insert pos - - # adjust the actual offset and size values to create the largest - # possible mapping - if insert_pos == 0: - if len_regions: - right = self.MapWindowCls.from_region(a[insert_pos]) - #END adjust right side - else: - if insert_pos != len_regions: - right = self.MapWindowCls.from_region(a[insert_pos]) - # END adjust right window - left = self.MapWindowCls.from_region(a[insert_pos - 1]) - #END adjust surrounding windows - - mid.extend_left_to(left, window_size) - mid.extend_right_to(right, window_size) - mid.align() - - # it can happen that we align beyond the end of the file - if mid.ofs_end() > right.ofs: - mid.size = right.ofs - mid.ofs - #END readjust size - - # insert new region at the right offset to keep the order - try: - if man._handle_count >= man._max_handle_count: - raise Exception - #END assert own imposed max file handles - self._region = self.MapRegionCls(a.path_or_fd(), mid.ofs, mid.size, flags) - except Exception: - # apparently we are out of system resources or hit a limit - # As many more operations are likely to fail in that condition ( - # like reading a file from disk, etc) we free up as much as possible - # As this invalidates our insert position, we have to recurse here - # NOTE: The c++ version uses a linked list to curcumvent this, but - # using that in python is probably too slow anyway - if _is_recursive: - # we already tried this, and still have no success in obtaining - # a mapping. This is an exception, so we propagate it - raise - #END handle existing recursion - man._collect_lru_region(0) - return self.use_region(offset, size, flags, True) - #END handle exceptions - - man._handle_count += 1 - man._memory_size += self._region.size() - a.insert(insert_pos, self._region) - else: - self._region = existing_region - #END need region handling - #END handle acquire region + self._region = man._obtain_region(self._rlist, offset, size, flags, False) + #END need region handling self._region.increment_usage_count() self._ofs = offset - self._region._b @@ -301,6 +195,7 @@ def fd(self): #} END interface + class SlidingWindowMapManager(object): """Maintains a list of ranges of mapped memory regions in one or more files and allows to easily obtain additional regions assuring there is no overlap. @@ -325,6 +220,8 @@ class SlidingWindowMapManager(object): #{ Configuration MapRegionListCls = MapRegionList + MapWindowCls = MapWindow + MapRegionCls = MapRegion #} END configuration _MB_in_bytes = 1024 * 1024 @@ -398,6 +295,111 @@ def _collect_lru_region(self, size): return num_found + def _obtain_region(self, a, offset, size, flags, is_recursive): + """Utilty to create a new region - for more information on the parameters, + see MapCursor.use_region. + :param a: A regions (a)rray + :return: The newly created region""" + # bisect to find an existing region. The c++ implementation cannot + # do that as it uses a linked list for regions. + r = None + lo = 0 + hi = len(a) + while lo < hi: + mid = (lo+hi)//2 + ofs = a[mid]._b + if ofs <= offset: + if a[mid].includes_ofs(offset): + r = a[mid] + break + #END have region + lo = mid+1 + else: + hi = mid + #END handle position + #END while bisecting + + if r is None: + window_size = self._window_size + left = self.MapWindowCls(0, 0) + mid = self.MapWindowCls(offset, size) + right = self.MapWindowCls(a.file_size(), 0) + + # we want to honor the max memory size, and assure we have anough + # memory available + # Save calls ! + if self._memory_size + window_size > self._max_memory_size: + self._collect_lru_region(window_size) + #END handle collection + + # we assume the list remains sorted by offset + insert_pos = 0 + len_regions = len(a) + if len_regions == 1: + if a[0]._b <= offset: + insert_pos = 1 + #END maintain sort + else: + # find insert position + insert_pos = len_regions + for i, region in enumerate(a): + if region._b > offset: + insert_pos = i + break + #END if insert position is correct + #END for each region + # END obtain insert pos + + # adjust the actual offset and size values to create the largest + # possible mapping + if insert_pos == 0: + if len_regions: + right = self.MapWindowCls.from_region(a[insert_pos]) + #END adjust right side + else: + if insert_pos != len_regions: + right = self.MapWindowCls.from_region(a[insert_pos]) + # END adjust right window + left = self.MapWindowCls.from_region(a[insert_pos - 1]) + #END adjust surrounding windows + + mid.extend_left_to(left, window_size) + mid.extend_right_to(right, window_size) + mid.align() + + # it can happen that we align beyond the end of the file + if mid.ofs_end() > right.ofs: + mid.size = right.ofs - mid.ofs + #END readjust size + + # insert new region at the right offset to keep the order + try: + if self._handle_count >= self._max_handle_count: + raise Exception + #END assert own imposed max file handles + r = self.MapRegionCls(a.path_or_fd(), mid.ofs, mid.size, flags) + except Exception: + # apparently we are out of system resources or hit a limit + # As many more operations are likely to fail in that condition ( + # like reading a file from disk, etc) we free up as much as possible + # As this invalidates our insert position, we have to recurse here + # NOTE: The c++ version uses a linked list to curcumvent this, but + # using that in python is probably too slow anyway + if is_recursive: + # we already tried this, and still have no success in obtaining + # a mapping. This is an exception, so we propagate it + raise + #END handle existing recursion + self._collect_lru_region(0) + return self._obtain_region(a, offset, size, flags, True) + #END handle exceptions + + self._handle_count += 1 + self._memory_size += r.size() + a.insert(insert_pos, r) + # END create new region + return r + #{ Interface def make_cursor(self, path_or_fd): """:return: a cursor pointing to the given path or file descriptor. @@ -414,7 +416,7 @@ def make_cursor(self, path_or_fd): regions = self.MapRegionListCls(path_or_fd) self._fdict[path_or_fd] = regions # END obtain region for path - return SlidingCursor(self, regions) + return MemoryCursor(self, regions) def collect(self): """Collect all available free-to-collect mapped regions diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index dfe43e704..79c6f9892 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -1,7 +1,7 @@ from lib import TestBase, FileCreator from smmap.mman import * -from smmap.mman import SlidingCursor +from smmap.mman import MemoryCursor from smmap.util import align_to_mmap from smmap.exc import RegionCollectionError @@ -17,7 +17,7 @@ def test_cursor(self): fc = FileCreator(self.k_window_test_size, "cursor_test") man = SlidingWindowMapManager() - ci = SlidingCursor(man) # invalid cursor + ci = MemoryCursor(man) # invalid cursor assert not ci.is_valid() assert not ci.is_associated() assert ci.size() == 0 # this is cached, so we can query it in invalid state @@ -43,7 +43,7 @@ def test_cursor(self): # destruction is fine (even multiple times) cv._destroy() - SlidingCursor(man)._destroy() + MemoryCursor(man)._destroy() def test_memory_manager(self): man = SlidingWindowMapManager() From 03dd5ae25fe99b9b91212057ef57a09e40f23265 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 16:19:10 +0200 Subject: [PATCH 0170/2375] Changed design of memory managers to support different implementations. Currently there is a non-implemented static version, as well as the previous sliding window version. --- smmap/buf.py | 6 +- smmap/mman.py | 222 +++++++++++++++++++++++++++++--------------------- smmap/util.py | 4 +- 3 files changed, 134 insertions(+), 98 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index 741450303..772a268e6 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -10,7 +10,11 @@ class SlidingWindowMapBuffer(object): memory of a mapped file. The mapping is controlled by the provided cursor. The buffer is relative, that is if you map an offset, index 0 will map to the - first byte at the offset you used during initialization or begin_access""" + first byte at the offset you used during initialization or begin_access + + :note: Although this type effectively hides the fact that there are mapped windows + underneath, it can unfortunately not be used in any non-pure python method which + needs a buffer or string""" __slots__ = ( '_c', # our cursor '_size', # our supposed size diff --git a/smmap/mman.py b/smmap/mman.py index 16f878199..d799c77af 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -10,7 +10,7 @@ from weakref import ref import sys -__all__ = ["SlidingWindowMapManager"] +__all__ = ["StaticWindowMapManager", "SlidingWindowMapManager"] #{ Utilities #}END utilities @@ -125,11 +125,11 @@ def unuse_region(self): def buffer(self): """Return a buffer object which allows access to our memory region from our offset - to the window size. Please note that it might be smaller than you requested + to the window size. Please note that it might be smaller than you requested when calling use_region() :note: You can only obtain a buffer if this instance is_valid() ! :note: buffers should not be cached passed the duration of your access as it will prevent resources from being freed even though they might not be accounted for anymore !""" - return buffer(self._region.buffer(), self._ofs, self._size) + return buffer(self._region.map(), self._ofs, self._size) def is_valid(self): """:return: True if we have a valid and usable region""" @@ -195,19 +195,17 @@ def fd(self): #} END interface +class StaticWindowMapManager(object): + """Provides a manager which will produce single size cursors that are allowed + to always map the whole file. -class SlidingWindowMapManager(object): - """Maintains a list of ranges of mapped memory regions in one or more files and allows to easily - obtain additional regions assuring there is no overlap. - Once a certain memory limit is reached globally, or if there cannot be more open file handles - which result from each mmap call, the least recently used, and currently unused mapped regions - are unloaded automatically. + Clients must be written to specifically know that they are accessing their data + through a StaticWindowMapManager, as they otherwise have to deal with their window size. - :note: currently not thread-safe ! - :note: in the current implementation, we will automatically unload windows if we either cannot - create more memory maps (as the open file handles limit is hit) or if we have allocated more than - a safe amount of memory already, which would possibly cause memory allocations to fail as our address - space is full.""" + These clients would have to use a SlidingWindowMapBuffer to hide this fact. + + This type will always use a maximum window size, and optimize certain methods to + acomodate this fact""" __slots__ = [ '_fdict', # mapping of path -> MapRegionList @@ -222,11 +220,12 @@ class SlidingWindowMapManager(object): MapRegionListCls = MapRegionList MapWindowCls = MapWindow MapRegionCls = MapRegion + MemoryCursorCls = MemoryCursor #} END configuration _MB_in_bytes = 1024 * 1024 - def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys.maxint): + def __init__(self, window_size = sys.maxint, max_memory_size = 0, max_open_handles = sys.maxint): """initialize the manager with the given parameters. :param window_size: if 0, a default window size will be chosen depending on the operating system's architechture. It will internally be quantified to a multiple of the page size @@ -258,6 +257,8 @@ def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys. self._max_memory_size = coeff * self._MB_in_bytes #END handle max memory size + #{ Internal Methods + def _collect_lru_region(self, size): """Unmap the region which was least-recently used and has no client :param size: size of the region we want to map next (assuming its not already mapped partially or full @@ -265,6 +266,117 @@ def _collect_lru_region(self, size): :raise RegionCollectionError: :return: Amount of freed regions :todo: implement a case where all unusued regions are discarded efficiently. Currently its only brute force""" + raise NotImplementedError() + + def _obtain_region(self, a, offset, size, flags, is_recursive): + """Utilty to create a new region - for more information on the parameters, + see MapCursor.use_region. + :param a: A regions (a)rray + :return: The newly created region""" + raise NotImplementedError() + + #}END internal methods + + #{ Interface + def make_cursor(self, path_or_fd): + """:return: a cursor pointing to the given path or file descriptor. + It can be used to map new regions of the file into memory + :note: if a file descriptor is given, it is assumed to be open and valid, + but may be closed afterwards. To refer to the same file, you may reuse + your existing file descriptor, but keep in mind that new windows can only + be mapped as long as it stays valid. This is why the using actual file paths + are preferred unless you plan to keep the file descriptor open. + :note: Using file descriptors directly is faster once new windows are mapped as it + prevents the file to be opened again just for the purpose of mapping it.""" + regions = self._fdict.get(path_or_fd) + if regions is None: + regions = self.MapRegionListCls(path_or_fd) + self._fdict[path_or_fd] = regions + # END obtain region for path + return self.MemoryCursorCls(self, regions) + + def collect(self): + """Collect all available free-to-collect mapped regions + :return: Amount of freed handles""" + return self._collect_lru_region(0) + + def num_file_handles(self): + """:return: amount of file handles in use. Each mapped region uses one file handle""" + return self._handle_count + + def num_open_files(self): + """Amount of opened files in the system""" + return reduce(lambda x,y: x+y, (1 for rlist in self._fdict.itervalues() if len(rlist) > 0), 0) + + def window_size(self): + """:return: size of each window when allocating new regions""" + return self._window_size + + def mapped_memory_size(self): + """:return: amount of bytes currently mapped in total""" + return self._memory_size + + def max_file_handles(self): + """:return: maximium amount of handles we may have opened""" + return self._max_handle_count + + def max_mapped_memory_size(self): + """:return: maximum amount of memory we may allocate""" + return self._max_memory_size + + #} END interface + + #{ Special Purpose Interface + + def force_map_handle_removal_win(self, base_path): + """ONLY AVAILABLE ON WINDOWS + On windows removing files is not allowed if anybody still has it opened. + If this process is ourselves, and if the whole process uses this memory + manager (as far as the parent framework is concerned) we can enforce + closing all memory maps whose path matches the given base path to + allow the respective operation after all. + The respective system must NOT access the closed memory regions anymore ! + This really may only be used if you know that the items which keep + the cursors alive will not be using it anymore. They need to be recreated ! + :return: Amount of closed handles + :note: does nothing on non-windows platforms""" + if sys.platform != 'win32': + return + #END early bailout + + num_closed = 0 + for path, rlist in self._fdict.iteritems(): + if path.startswith(base_path): + for region in rlist: + region._mf.close() + num_closed += 1 + #END path matches + #END for each path + return num_closed + #} END special purpose interface + + + +class SlidingWindowMapManager(StaticWindowMapManager): + """Maintains a list of ranges of mapped memory regions in one or more files and allows to easily + obtain additional regions assuring there is no overlap. + Once a certain memory limit is reached globally, or if there cannot be more open file handles + which result from each mmap call, the least recently used, and currently unused mapped regions + are unloaded automatically. + + :note: currently not thread-safe ! + :note: in the current implementation, we will automatically unload windows if we either cannot + create more memory maps (as the open file handles limit is hit) or if we have allocated more than + a safe amount of memory already, which would possibly cause memory allocations to fail as our address + space is full.""" + + __slots__ = tuple() + + def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys.maxint): + """Adjusts the default window size to 0""" + super(SlidingWindowMapManager, self).__init__(window_size, max_memory_size, max_open_handles) + + def _collect_lru_region(self, size): num_found = 0 while (size == 0) or (self._memory_size + size > self._max_memory_size): lru_region = None @@ -296,10 +408,6 @@ def _collect_lru_region(self, size): return num_found def _obtain_region(self, a, offset, size, flags, is_recursive): - """Utilty to create a new region - for more information on the parameters, - see MapCursor.use_region. - :param a: A regions (a)rray - :return: The newly created region""" # bisect to find an existing region. The c++ implementation cannot # do that as it uses a linked list for regions. r = None @@ -400,80 +508,4 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): # END create new region return r - #{ Interface - def make_cursor(self, path_or_fd): - """:return: a cursor pointing to the given path or file descriptor. - It can be used to map new regions of the file into memory - :note: if a file descriptor is given, it is assumed to be open and valid, - but may be closed afterwards. To refer to the same file, you may reuse - your existing file descriptor, but keep in mind that new windows can only - be mapped as long as it stays valid. This is why the using actual file paths - are preferred unless you plan to keep the file descriptor open. - :note: Using file descriptors directly is faster once new windows are mapped as it - prevents the file to be opened again just for the purpose of mapping it.""" - regions = self._fdict.get(path_or_fd) - if regions is None: - regions = self.MapRegionListCls(path_or_fd) - self._fdict[path_or_fd] = regions - # END obtain region for path - return MemoryCursor(self, regions) - - def collect(self): - """Collect all available free-to-collect mapped regions - :return: Amount of freed handles""" - return self._collect_lru_region(0) - - def num_file_handles(self): - """:return: amount of file handles in use. Each mapped region uses one file handle""" - return self._handle_count - def num_open_files(self): - """Amount of opened files in the system""" - return reduce(lambda x,y: x+y, (1 for rlist in self._fdict.itervalues() if len(rlist) > 0), 0) - - def window_size(self): - """:return: size of each window when allocating new regions""" - return self._window_size - - def mapped_memory_size(self): - """:return: amount of bytes currently mapped in total""" - return self._memory_size - - def max_file_handles(self): - """:return: maximium amount of handles we may have opened""" - return self._max_handle_count - - def max_mapped_memory_size(self): - """:return: maximum amount of memory we may allocate""" - return self._max_memory_size - - #} END interface - - #{ Special Purpose Interface - - def force_map_handle_removal_win(self, base_path): - """ONLY AVAILABLE ON WINDOWS - On windows removing files is not allowed if anybody still has it opened. - If this process is ourselves, and if the whole process uses this memory - manager (as far as the parent framework is concerned) we can enforce - closing all memory maps whose path matches the given base path to - allow the respective operation after all. - The respective system must NOT access the closed memory regions anymore ! - This really may only be used if you know that the items which keep - the cursors alive will not be using it anymore. They need to be recreated ! - :return: Amount of closed handles - :note: does nothing on non-windows platforms""" - if sys.platform != 'win32': - return - #END early bailout - - num_closed = 0 - for path, rlist in self._fdict.iteritems(): - if path.startswith(base_path): - for region in rlist: - region._mf.close() - num_closed += 1 - #END path matches - #END for each path - return num_closed - #} END special purpose interface diff --git a/smmap/util.py b/smmap/util.py index 6ead86479..21e285559 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -149,8 +149,8 @@ def __repr__(self): #{ Interface - def buffer(self): - """:return: a sliceable buffer which can be used to access the mapped memory""" + def map(self): + """:return: a memory map containing the memory""" return self._mf def ofs_begin(self): From 631b9ea2edfb005b1d48d55b35370f82ac2de196 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 17:47:48 +0200 Subject: [PATCH 0171/2375] Implemented static memory manager, for now without test --- smmap/buf.py | 2 +- smmap/mman.py | 98 ++++++++++++++++++++++++++++++++++++----- smmap/test/test_mman.py | 14 ++++-- 3 files changed, 99 insertions(+), 15 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index 772a268e6..c4d252251 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -1,5 +1,5 @@ """Module with a simple buffer implementation using the memory manager""" -from mman import MemoryCursor +from mman import WindowCursor import sys diff --git a/smmap/mman.py b/smmap/mman.py index d799c77af..ba3a63f55 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -9,17 +9,23 @@ from exc import RegionCollectionError from weakref import ref import sys +from sys import getrefcount __all__ = ["StaticWindowMapManager", "SlidingWindowMapManager"] #{ Utilities #}END utilities -class MemoryCursor(object): - """Pointer into the mapped region of the memory manager, keeping the current window - alive until it is destroyed. + + +class WindowCursor(object): + """Pointer into the mapped region of the memory manager, keeping the map + alive until it is destroyed and no other client uses it. - Cursors should not be created manually, but are instead returned by the SlidingWindowMapManager""" + Cursors should not be created manually, but are instead returned by the SlidingWindowMapManager + :note: The current implementation is suited for static and sliding window managers, but it also means + that it must be suited for the somewhat quite different sliding manager. It could be improved, but + I see no real need to do so.""" __slots__ = ( '_manager', # the manger keeping all file regions '_rlist', # a regions list with regions for our file @@ -130,7 +136,14 @@ def buffer(self): :note: buffers should not be cached passed the duration of your access as it will prevent resources from being freed even though they might not be accounted for anymore !""" return buffer(self._region.map(), self._ofs, self._size) - + + def map(self): + """ + :return: the underlying raw memory map. Please not that the offset and size is likely to be different + to what you set as offset and size. Use it only if you are sure about the region it maps, which is the whole + file in case of StaticWindowMapManager""" + return self._region.map() + def is_valid(self): """:return: True if we have a valid and usable region""" return self._region is not None @@ -188,7 +201,7 @@ def fd(self): :note: it is not required to be valid anymore :raise ValueError: if the mapping was not created by a file descriptor""" if isinstance(self._rlist.path_or_fd(), basestring): - return ValueError("File descriptor queried although mapping was generated from path") + raise ValueError("File descriptor queried although mapping was generated from path") #END handle type return self._rlist.path_or_fd() @@ -208,7 +221,7 @@ class StaticWindowMapManager(object): acomodate this fact""" __slots__ = [ - '_fdict', # mapping of path -> MapRegionList + '_fdict', # mapping of path -> StorageHelper (of some kind '_window_size', # maximum size of a window '_max_memory_size', # maximum amount ofmemory we may allocate '_max_handle_count', # maximum amount of handles to keep open @@ -220,7 +233,7 @@ class StaticWindowMapManager(object): MapRegionListCls = MapRegionList MapWindowCls = MapWindow MapRegionCls = MapRegion - MemoryCursorCls = MemoryCursor + WindowCursorCls = WindowCursor #} END configuration _MB_in_bytes = 1024 * 1024 @@ -266,14 +279,77 @@ def _collect_lru_region(self, size): :raise RegionCollectionError: :return: Amount of freed regions :todo: implement a case where all unusued regions are discarded efficiently. Currently its only brute force""" - raise NotImplementedError() + num_found = 0 + while (size == 0) or (self._memory_size + size > self._max_memory_size): + for k, regions in self._fdict.iteritems(): + found_lonely_region = False + for region in regions: + # check client count - consider that we keep one reference ourselves ! + if (region.client_count()-2 == 0 and + (lru_region is None or region._uc < lru_region._uc)): + # remove whole list + found_lonely_region = True + num_found += 1 + self._memory_size -= region.size() + self._handle_count -= 1 + self._fdict.pop(k) + + break + # END update lru_region + #END for each region + if found_lonely_region: + continue + # END skip iteration and restart + #END for each regions list + + # still here ? + if num_found == 0 and size != 0: + raise RegionCollectionError("Didn't find any region to free") + #END raise if necessary + #END while there is more memory to free + + return num_found + def _obtain_region(self, a, offset, size, flags, is_recursive): """Utilty to create a new region - for more information on the parameters, see MapCursor.use_region. :param a: A regions (a)rray :return: The newly created region""" - raise NotImplementedError() + if self._memory_size + window_size > self._max_memory_size: + self._collect_lru_region(window_size) + #END handle collection + + r = None + if a: + assert len(a) == 1 + r = a[0] + else: + try: + r = self.MapRegionCls(a.path_or_fd(), 0, sys.maxint, flags) + except Exception: + # apparently we are out of system resources or hit a limit + # As many more operations are likely to fail in that condition ( + # like reading a file from disk, etc) we free up as much as possible + # As this invalidates our insert position, we have to recurse here + # NOTE: The c++ version uses a linked list to curcumvent this, but + # using that in python is probably too slow anyway + if is_recursive: + # we already tried this, and still have no success in obtaining + # a mapping. This is an exception, so we propagate it + raise + #END handle existing recursion + self._collect_lru_region(0) + return self._obtain_region(a, offset, size, flags, True) + #END handle exceptions + + self._handle_count += 1 + self._memory_size += r.size() + # END handle array + + assert a.includes_ofs(offset) + assert a.includes_ofs(offset + size-1) + return r #}END internal methods @@ -293,7 +369,7 @@ def make_cursor(self, path_or_fd): regions = self.MapRegionListCls(path_or_fd) self._fdict[path_or_fd] = regions # END obtain region for path - return self.MemoryCursorCls(self, regions) + return self.WindowCursorCls(self, regions) def collect(self): """Collect all available free-to-collect mapped regions diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 79c6f9892..e8266066c 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -1,7 +1,7 @@ from lib import TestBase, FileCreator from smmap.mman import * -from smmap.mman import MemoryCursor +from smmap.mman import WindowCursor from smmap.util import align_to_mmap from smmap.exc import RegionCollectionError @@ -17,7 +17,7 @@ def test_cursor(self): fc = FileCreator(self.k_window_test_size, "cursor_test") man = SlidingWindowMapManager() - ci = MemoryCursor(man) # invalid cursor + ci = WindowCursor(man) # invalid cursor assert not ci.is_valid() assert not ci.is_associated() assert ci.size() == 0 # this is cached, so we can query it in invalid state @@ -43,7 +43,7 @@ def test_cursor(self): # destruction is fine (even multiple times) cv._destroy() - MemoryCursor(man)._destroy() + WindowCursor(man)._destroy() def test_memory_manager(self): man = SlidingWindowMapManager() @@ -65,11 +65,19 @@ def test_memory_manager(self): fd = os.open(fc.path, os.O_RDONLY) for item in (fc.path, fd): c = man.make_cursor(item) + assert c.path_or_fd() is item assert c.use_region(10, 10).is_valid() assert c.ofs_begin() == 10 assert c.size() == 10 assert c.buffer()[:] == open(fc.path, 'rb').read(20)[10:] + + if isinstance(item, int): + self.failUnlessRaises(ValueError, c.path) + else: + self.failUnlessRaises(ValueError, c.fd) + #END handle value error #END for each input + os.close(fd) def test_memman_operation(self): From e010084b0f40d7762f029a7ac4109c9bb99818a6 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 18:28:37 +0200 Subject: [PATCH 0172/2375] test are running, once again, but not yet complete regarding the static manager --- smmap/mman.py | 92 ++++++++++++++--------------------------- smmap/test/test_mman.py | 71 +++++++++++++++++-------------- 2 files changed, 70 insertions(+), 93 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index ba3a63f55..bdefe2e81 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -95,7 +95,8 @@ def use_region(self, offset, size, flags = 0): either the file has reached its end, or the map was created between two existing regions""" need_region = True man = self._manager - size = min(size, man.window_size()) # clamp size to window size + fsize = self._rlist.file_size() + size = min(size, man.window_size() or fsize) # clamp size to window size if self._region is not None: if self._region.includes_ofs(offset): @@ -106,7 +107,7 @@ def use_region(self, offset, size, flags = 0): # END check existing region # offset too large ? - if offset >= self._rlist.file_size(): + if offset >= fsize: return self #END handle offset @@ -238,10 +239,11 @@ class StaticWindowMapManager(object): _MB_in_bytes = 1024 * 1024 - def __init__(self, window_size = sys.maxint, max_memory_size = 0, max_open_handles = sys.maxint): + def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys.maxint): """initialize the manager with the given parameters. - :param window_size: if 0, a default window size will be chosen depending on + :param window_size: if -1, a default window size will be chosen depending on the operating system's architechture. It will internally be quantified to a multiple of the page size + If 0, the window may have any size, which basically results in mapping the whole file at one :param max_memory_size: maximum amount of memory we may map at once before releasing mapped regions. If 0, a viable default iwll be set dependning on the system's architecture. :param max_open_handles: if not maxin, limit the amount of open file handles to the given number. @@ -254,7 +256,7 @@ def __init__(self, window_size = sys.maxint, max_memory_size = 0, max_open_handl self._memory_size = 0 self._handle_count = 0 - if window_size == 0: + if window_size < 0: coeff = 32 if is_64_bit(): coeff = 1024 @@ -281,43 +283,40 @@ def _collect_lru_region(self, size): :todo: implement a case where all unusued regions are discarded efficiently. Currently its only brute force""" num_found = 0 while (size == 0) or (self._memory_size + size > self._max_memory_size): - for k, regions in self._fdict.iteritems(): - found_lonely_region = False + lru_region = None + lru_list = None + for regions in self._fdict.itervalues(): for region in regions: # check client count - consider that we keep one reference ourselves ! if (region.client_count()-2 == 0 and (lru_region is None or region._uc < lru_region._uc)): - # remove whole list - found_lonely_region = True - num_found += 1 - self._memory_size -= region.size() - self._handle_count -= 1 - self._fdict.pop(k) - - break + lru_region = region + lru_list = regions # END update lru_region #END for each region - if found_lonely_region: - continue - # END skip iteration and restart #END for each regions list - # still here ? - if num_found == 0 and size != 0: - raise RegionCollectionError("Didn't find any region to free") - #END raise if necessary + if lru_region is None: + if num_found == 0 and size != 0: + raise RegionCollectionError("Didn't find any region to free") + #END raise if necessary + break + #END handle region not found + + num_found += 1 + del(lru_list[lru_list.index(lru_region)]) + self._memory_size -= lru_region.size() + self._handle_count -= 1 #END while there is more memory to free - return num_found - def _obtain_region(self, a, offset, size, flags, is_recursive): """Utilty to create a new region - for more information on the parameters, see MapCursor.use_region. :param a: A regions (a)rray :return: The newly created region""" - if self._memory_size + window_size > self._max_memory_size: - self._collect_lru_region(window_size) + if self._memory_size + size > self._max_memory_size: + self._collect_lru_region(size) #END handle collection r = None @@ -347,8 +346,8 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): self._memory_size += r.size() # END handle array - assert a.includes_ofs(offset) - assert a.includes_ofs(offset + size-1) + assert r.includes_ofs(offset) + assert r.includes_ofs(offset + size-1) return r #}END internal methods @@ -362,6 +361,8 @@ def make_cursor(self, path_or_fd): your existing file descriptor, but keep in mind that new windows can only be mapped as long as it stays valid. This is why the using actual file paths are preferred unless you plan to keep the file descriptor open. + :note: file descriptors are problematic as they are not necessarily unique, as two + different files opened and closed in succession might have the same file descriptor id. :note: Using file descriptors directly is faster once new windows are mapped as it prevents the file to be opened again just for the purpose of mapping it.""" regions = self._fdict.get(path_or_fd) @@ -448,41 +449,10 @@ class SlidingWindowMapManager(StaticWindowMapManager): __slots__ = tuple() - def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys.maxint): - """Adjusts the default window size to 0""" + def __init__(self, window_size = -1, max_memory_size = 0, max_open_handles = sys.maxint): + """Adjusts the default window size to -1""" super(SlidingWindowMapManager, self).__init__(window_size, max_memory_size, max_open_handles) - def _collect_lru_region(self, size): - num_found = 0 - while (size == 0) or (self._memory_size + size > self._max_memory_size): - lru_region = None - lru_list = None - for regions in self._fdict.itervalues(): - for region in regions: - # check client count - consider that we keep one reference ourselves ! - if (region.client_count()-2 == 0 and - (lru_region is None or region._uc < lru_region._uc)): - lru_region = region - lru_list = regions - # END update lru_region - #END for each region - #END for each regions list - - if lru_region is None: - if num_found == 0 and size != 0: - raise RegionCollectionError("Didn't find any region to free") - #END raise if necessary - break - #END handle region not found - - num_found += 1 - del(lru_list[lru_list.index(lru_region)]) - self._memory_size -= lru_region.size() - self._handle_count -= 1 - #END while there is more memory to free - - return num_found - def _obtain_region(self, a, offset, size, flags, is_recursive): # bisect to find an existing region. The c++ implementation cannot # do that as it uses a linked list for regions. diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index e8266066c..97866bbf9 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -46,40 +46,47 @@ def test_cursor(self): WindowCursor(man)._destroy() def test_memory_manager(self): - man = SlidingWindowMapManager() - assert man.num_file_handles() == 0 - assert man.num_open_files() == 0 - assert man.window_size() > 0 - assert man.mapped_memory_size() == 0 - assert man.max_mapped_memory_size() > 0 - - # collection doesn't raise in 'any' mode - man._collect_lru_region(0) - # doesn't raise if we are within the limit - man._collect_lru_region(10) - # raises outside of limit - self.failUnlessRaises(RegionCollectionError, man._collect_lru_region, sys.maxint) + slide_man = SlidingWindowMapManager() + static_man = StaticWindowMapManager() - # use a region, verify most basic functionality - fc = FileCreator(self.k_window_test_size, "manager_test") - fd = os.open(fc.path, os.O_RDONLY) - for item in (fc.path, fd): - c = man.make_cursor(item) - assert c.path_or_fd() is item - assert c.use_region(10, 10).is_valid() - assert c.ofs_begin() == 10 - assert c.size() == 10 - assert c.buffer()[:] == open(fc.path, 'rb').read(20)[10:] + for man in (static_man, slide_man): + assert man.num_file_handles() == 0 + assert man.num_open_files() == 0 + winsize_cmp_val = 0 + if isinstance(man, StaticWindowMapManager): + winsize_cmp_val = -1 + #END handle window size + assert man.window_size() > winsize_cmp_val + assert man.mapped_memory_size() == 0 + assert man.max_mapped_memory_size() > 0 + + # collection doesn't raise in 'any' mode + man._collect_lru_region(0) + # doesn't raise if we are within the limit + man._collect_lru_region(10) + # raises outside of limit + self.failUnlessRaises(RegionCollectionError, man._collect_lru_region, sys.maxint) + + # use a region, verify most basic functionality + fc = FileCreator(self.k_window_test_size, "manager_test") + fd = os.open(fc.path, os.O_RDONLY) + for item in (fc.path, fd): + c = man.make_cursor(item) + assert c.path_or_fd() is item + assert c.use_region(10, 10).is_valid() + assert c.ofs_begin() == 10 + assert c.size() == 10 + assert c.buffer()[:] == open(fc.path, 'rb').read(20)[10:] + + if isinstance(item, int): + self.failUnlessRaises(ValueError, c.path) + else: + self.failUnlessRaises(ValueError, c.fd) + #END handle value error + #END for each input + os.close(fd) + # END for each manager type - if isinstance(item, int): - self.failUnlessRaises(ValueError, c.path) - else: - self.failUnlessRaises(ValueError, c.fd) - #END handle value error - #END for each input - - os.close(fd) - def test_memman_operation(self): # test more access, force it to actually unmap regions fc = FileCreator(self.k_window_test_size, "manager_operation_test") From 101a4d39108c4b4731760456523fd0f0d565b6f2 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 19:50:43 +0200 Subject: [PATCH 0173/2375] Finally the mem manager and buffer tests run with the static one too --- smmap/mman.py | 18 ++-- smmap/test/test_buf.py | 6 +- smmap/test/test_mman.py | 216 ++++++++++++++++++++++------------------ 3 files changed, 131 insertions(+), 109 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index bdefe2e81..f1ce95d03 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -4,9 +4,9 @@ MapRegion, MapRegionList, is_64_bit, + align_to_mmap ) -from exc import RegionCollectionError from weakref import ref import sys from sys import getrefcount @@ -83,10 +83,10 @@ def assign(self, rhs): self._destroy() self._copy_from(rhs) - def use_region(self, offset, size, flags = 0): + def use_region(self, offset, size = 0, flags = 0): """Assure we point to a window which allows access to the given offset into the file :param offset: absolute offset in bytes into the file - :param size: amount of bytes to map + :param size: amount of bytes to map. If 0, all available bytes will be mapped :param flags: additional flags to be given to os.open in case a file handle is initially opened for mapping. Has no effect if a region can actually be reused. :return: this instance - it should be queried for whether it points to a valid memory region. @@ -96,7 +96,7 @@ def use_region(self, offset, size, flags = 0): need_region = True man = self._manager fsize = self._rlist.file_size() - size = min(size, man.window_size() or fsize) # clamp size to window size + size = min(size or fsize, man.window_size() or fsize) # clamp size to window size if self._region is not None: if self._region.includes_ofs(offset): @@ -246,6 +246,7 @@ def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys. If 0, the window may have any size, which basically results in mapping the whole file at one :param max_memory_size: maximum amount of memory we may map at once before releasing mapped regions. If 0, a viable default iwll be set dependning on the system's architecture. + It is a soft limit that is tried to be kept, but nothing bad happens if we have to overallocate :param max_open_handles: if not maxin, limit the amount of open file handles to the given number. Otherwise the amount is only limited by the system iteself. If a system or soft limit is hit, the manager will free as many handles as posisble""" @@ -278,8 +279,9 @@ def _collect_lru_region(self, size): """Unmap the region which was least-recently used and has no client :param size: size of the region we want to map next (assuming its not already mapped partially or full if 0, we try to free any available region - :raise RegionCollectionError: :return: Amount of freed regions + :note: We don't raise exceptions anymore, in order to keep the system working, allowing temporary overallocation. + If the system runs out of memory, it will tell. :todo: implement a case where all unusued regions are discarded efficiently. Currently its only brute force""" num_found = 0 while (size == 0) or (self._memory_size + size > self._max_memory_size): @@ -297,9 +299,6 @@ def _collect_lru_region(self, size): #END for each regions list if lru_region is None: - if num_found == 0 and size != 0: - raise RegionCollectionError("Didn't find any region to free") - #END raise if necessary break #END handle region not found @@ -344,10 +343,11 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): self._handle_count += 1 self._memory_size += r.size() + a.append(r) # END handle array assert r.includes_ofs(offset) - assert r.includes_ofs(offset + size-1) + #assert r.includes_ofs(offset+size-1) return r #}END internal methods diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index 96ca4f882..d8b7fbcab 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -1,6 +1,6 @@ from lib import TestBase, FileCreator -from smmap.mman import SlidingWindowMapManager +from smmap.mman import SlidingWindowMapManager, StaticWindowMapManager from smmap.buf import * from random import randint @@ -13,6 +13,7 @@ man_worst_case = SlidingWindowMapManager( window_size=TestBase.k_window_test_size/100, max_memory_size=TestBase.k_window_test_size/3, max_open_handles=15) +static_man = StaticWindowMapManager() class TestBuf(TestBase): @@ -70,7 +71,8 @@ def test_basics(self): fd = os.open(fc.path, os.O_RDONLY) for item in (fc.path, fd): for manager, man_id in ( (man_optimal, 'optimal'), - (man_worst_case, 'worst case')): + (man_worst_case, 'worst case'), + (static_man, 'static optimial')): buf = SlidingWindowMapBuffer(manager.make_cursor(item)) assert manager.num_file_handles() == 1 for access_mode in range(2): # single, multi diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 97866bbf9..27be686ad 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -64,8 +64,9 @@ def test_memory_manager(self): man._collect_lru_region(0) # doesn't raise if we are within the limit man._collect_lru_region(10) - # raises outside of limit - self.failUnlessRaises(RegionCollectionError, man._collect_lru_region, sys.maxint) + + # doesn't fail if we overallocate + assert man._collect_lru_region(sys.maxint) == 0 # use a region, verify most basic functionality fc = FileCreator(self.k_window_test_size, "manager_test") @@ -92,103 +93,122 @@ def test_memman_operation(self): fc = FileCreator(self.k_window_test_size, "manager_operation_test") data = open(fc.path, 'rb').read() fd = os.open(fc.path, os.O_RDONLY) - for item in (fc.path, fd): - assert len(data) == fc.size - - # small windows, a reasonable max memory. Not too many regions at once - max_num_handles = 15 - man = SlidingWindowMapManager(window_size=fc.size / 100, max_memory_size=fc.size / 3, max_open_handles=max_num_handles) - c = man.make_cursor(item) - - # still empty (more about that is tested in test_memory_manager() - assert man.num_open_files() == 0 - assert man.mapped_memory_size() == 0 - - base_offset = 5000 - size = man.window_size() / 2 - assert c.use_region(base_offset, size).is_valid() - rr = c.region_ref() - assert rr().client_count() == 2 # the manager and the cursor and us - - assert man.num_open_files() == 1 - assert man.num_file_handles() == 1 - assert man.mapped_memory_size() == rr().size() - assert c.size() == size - assert c.ofs_begin() == base_offset - assert rr().ofs_begin() == 0 # it was aligned and expanded - assert rr().size() == align_to_mmap(man.window_size(), True) # but isn't larger than the max window (aligned) - - assert c.buffer()[:] == data[base_offset:base_offset+size] - - # obtain second window, which spans the first part of the file - it is a still the same window - assert c.use_region(0, size-10).is_valid() - assert c.region_ref()() == rr() - assert man.num_file_handles() == 1 - assert c.size() == size-10 - assert c.ofs_begin() == 0 - assert c.buffer()[:] == data[:size-10] - - # map some part at the end, our requested size cannot be kept - overshoot = 4000 - base_offset = fc.size - size + overshoot - assert c.use_region(base_offset, size).is_valid() - assert man.num_file_handles() == 2 - assert c.size() < size - assert c.region_ref()() is not rr() # old region is still available, but has not curser ref anymore - assert rr().client_count() == 1 # only held by manager - rr = c.region_ref() - assert rr().client_count() == 2 # manager + cursor - assert rr().ofs_begin() < c.ofs_begin() # it should have extended itself to the left - assert rr().ofs_end() <= fc.size # it cannot be larger than the file - assert c.buffer()[:] == data[base_offset:base_offset+size] - - # unising a region makes the cursor invalid - c.unuse_region() - assert not c.is_valid() - # but doesn't change anything regarding the handle count - we cache it and only - # remove mapped regions if we have to - assert man.num_file_handles() == 2 - - # iterate through the windows, verify data contents - # this will trigger map collection after a while - max_random_accesses = 5000 - num_random_accesses = max_random_accesses - memory_read = 0 - st = time() - - # cache everything to get some more performance - includes_ofs = c.includes_ofs - max_mapped_memory_size = man.max_mapped_memory_size() - max_file_handles = man.max_file_handles() - mapped_memory_size = man.mapped_memory_size - num_file_handles = man.num_file_handles - while num_random_accesses: - num_random_accesses -= 1 - base_offset = randint(0, fc.size - 1) + max_num_handles = 15 + #small_size = + for mtype, args in ( (StaticWindowMapManager, (0, fc.size / 3, max_num_handles)), + (SlidingWindowMapManager, (fc.size / 100, fc.size / 3, max_num_handles)),): + for item in (fc.path, fd): + assert len(data) == fc.size + + # small windows, a reasonable max memory. Not too many regions at once + man = mtype(window_size=args[0], max_memory_size=args[1], max_open_handles=args[2]) + c = man.make_cursor(item) - # precondition - assert max_mapped_memory_size >= mapped_memory_size() - assert max_file_handles >= num_file_handles() + # still empty (more about that is tested in test_memory_manager() + assert man.num_open_files() == 0 + assert man.mapped_memory_size() == 0 + + base_offset = 5000 + # window size is 0 for static managers, hence size will be 0. We take that into consideration + size = man.window_size() / 2 assert c.use_region(base_offset, size).is_valid() - csize = c.size() - assert c.buffer()[:] == data[base_offset:base_offset+csize] - memory_read += csize + rr = c.region_ref() + assert rr().client_count() == 2 # the manager and the cursor and us - assert includes_ofs(base_offset) - assert includes_ofs(base_offset+csize-1) - assert not includes_ofs(base_offset+csize) - # END while we should do an access - elapsed = max(time() - st, 0.001) # prevent zero divison errors on windows - mb = float(1000 * 1000) - sys.stderr.write("Read %i mb of memory with %i random on cursor initialized with %s accesses in %fs (%f mb/s)\n" - % (memory_read/mb, max_random_accesses, type(item), elapsed, (memory_read/mb)/elapsed)) - - # an offset as large as the size doesn't work ! - assert not c.use_region(fc.size, size).is_valid() - - # collection - it should be able to collect all - assert man.num_file_handles() - assert man.collect() - assert man.num_file_handles() == 0 - #END for each item + assert man.num_open_files() == 1 + assert man.num_file_handles() == 1 + assert man.mapped_memory_size() == rr().size() + + #assert c.size() == size # the cursor may overallocate in its static version + assert c.ofs_begin() == base_offset + assert rr().ofs_begin() == 0 # it was aligned and expanded + if man.window_size(): + assert rr().size() == align_to_mmap(man.window_size(), True) # but isn't larger than the max window (aligned) + else: + assert rr().size() == fc.size + #END ignore static managers which dont use windows and are aligned to file boundaries + + assert c.buffer()[:] == data[base_offset:base_offset+(size or c.size())] + + # obtain second window, which spans the first part of the file - it is a still the same window + nsize = (size or fc.size) - 10 + assert c.use_region(0, nsize).is_valid() + assert c.region_ref()() == rr() + assert man.num_file_handles() == 1 + assert c.size() == nsize + assert c.ofs_begin() == 0 + assert c.buffer()[:] == data[:nsize] + + # map some part at the end, our requested size cannot be kept + overshoot = 4000 + base_offset = fc.size - (size or c.size()) + overshoot + assert c.use_region(base_offset, size).is_valid() + if man.window_size(): + assert man.num_file_handles() == 2 + assert c.size() < size + assert c.region_ref()() is not rr() # old region is still available, but has not curser ref anymore + assert rr().client_count() == 1 # only held by manager + else: + assert c.size() < fc.size + #END ignore static managers which only have one handle per file + rr = c.region_ref() + assert rr().client_count() == 2 # manager + cursor + assert rr().ofs_begin() < c.ofs_begin() # it should have extended itself to the left + assert rr().ofs_end() <= fc.size # it cannot be larger than the file + assert c.buffer()[:] == data[base_offset:base_offset+(size or c.size())] + + # unising a region makes the cursor invalid + c.unuse_region() + assert not c.is_valid() + if man.window_size(): + # but doesn't change anything regarding the handle count - we cache it and only + # remove mapped regions if we have to + assert man.num_file_handles() == 2 + #END ignore this for static managers + + # iterate through the windows, verify data contents + # this will trigger map collection after a while + max_random_accesses = 5000 + num_random_accesses = max_random_accesses + memory_read = 0 + st = time() + + # cache everything to get some more performance + includes_ofs = c.includes_ofs + max_mapped_memory_size = man.max_mapped_memory_size() + max_file_handles = man.max_file_handles() + mapped_memory_size = man.mapped_memory_size + num_file_handles = man.num_file_handles + while num_random_accesses: + num_random_accesses -= 1 + base_offset = randint(0, fc.size - 1) + + # precondition + if man.window_size(): + assert max_mapped_memory_size >= mapped_memory_size() + #END statics will overshoot, which is fine + assert max_file_handles >= num_file_handles() + assert c.use_region(base_offset, (size or c.size())).is_valid() + csize = c.size() + assert c.buffer()[:] == data[base_offset:base_offset+csize] + memory_read += csize + + assert includes_ofs(base_offset) + assert includes_ofs(base_offset+csize-1) + assert not includes_ofs(base_offset+csize) + # END while we should do an access + elapsed = max(time() - st, 0.001) # prevent zero divison errors on windows + mb = float(1000 * 1000) + sys.stderr.write("%s: Read %i mb of memory with %i random on cursor initialized with %s accesses in %fs (%f mb/s)\n" + % (mtype, memory_read/mb, max_random_accesses, type(item), elapsed, (memory_read/mb)/elapsed)) + + # an offset as large as the size doesn't work ! + assert not c.use_region(fc.size, size).is_valid() + + # collection - it should be able to collect all + assert man.num_file_handles() + assert man.collect() + assert man.num_file_handles() == 0 + #END for each item + # END for each manager type os.close(fd) From 82c97ea8f416bd99f501608b2aee8b7c4c5e78f5 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 20:12:40 +0200 Subject: [PATCH 0174/2375] Some more adjustments to make it work in all python versions --- smmap/mman.py | 2 +- smmap/util.py | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index f1ce95d03..fc6848413 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -136,7 +136,7 @@ def buffer(self): :note: You can only obtain a buffer if this instance is_valid() ! :note: buffers should not be cached passed the duration of your access as it will prevent resources from being freed even though they might not be accounted for anymore !""" - return buffer(self._region.map(), self._ofs, self._size) + return buffer(self._region.buffer(), self._ofs, self._size) def map(self): """ diff --git a/smmap/util.py b/smmap/util.py index 21e285559..80ba3c5b9 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -136,7 +136,7 @@ def __init__(self, path_or_fd, ofs, size, flags = 0): self._size = len(self._mf) if self._need_compat_layer: - self._mfb = buffer(self._mf, ofs, size) + self._mfb = buffer(self._mf, ofs, self._size) #END handle buffer wrapping finally: if isinstance(path_or_fd, basestring): @@ -148,7 +148,11 @@ def __repr__(self): return "MapRegion<%i, %i>" % (self._b, self.size()) #{ Interface - + + def buffer(self): + """:return: a buffer containing the memory""" + return self._mf + def map(self): """:return: a memory map containing the memory""" return self._mf From a33e8d55d4d77d842edea94a78d801b23bb90294 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 21:59:22 +0200 Subject: [PATCH 0175/2375] Switched git db to the non-sliding version of the memory manager which is a good tradeoff between performance loss and resource handling --- gitdb/ext/smmap | 2 +- gitdb/pack.py | 76 +++++++++++++++++++++++-------------------------- gitdb/util.py | 13 +++++++++ 3 files changed, 50 insertions(+), 41 deletions(-) diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 4466476cf..4cabaca18 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 4466476cf576cf5936a11524e67345a80e2ec5a9 +Subproject commit 4cabaca18cd30399288fc55863de412446ea51e7 diff --git a/gitdb/pack.py b/gitdb/pack.py index 7ae9786e6..0679a6ecf 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -10,10 +10,10 @@ ) from util import ( zlib, + mman, LazyMixin, unpack_from, bin_to_hex, - file_contents_ro_filepath, ) from fun import ( @@ -247,7 +247,7 @@ class PackIndexFile(LazyMixin): # Dont use slots as we dynamically bind functions for each version, need a dict for this # The slots you see here are just to keep track of our instance variables - # __slots__ = ('_indexpath', '_fanout_table', '_data', '_version', + # __slots__ = ('_indexpath', '_fanout_table', '_cursor', '_version', # '_sha_list_offset', '_crc_list_offset', '_pack_offset', '_pack_64_offset') # used in v2 indices @@ -261,22 +261,23 @@ def __init__(self, indexpath): def _set_cache_(self, attr): if attr == "_packfile_checksum": - self._packfile_checksum = self._data[-40:-20] + self._packfile_checksum = self._cursor.map()[-40:-20] elif attr == "_packfile_checksum": - self._packfile_checksum = self._data[-20:] - elif attr == "_data": + self._packfile_checksum = self._cursor.map()[-20:] + elif attr == "_cursor": # Note: We don't lock the file when reading as we cannot be sure # that we can actually write to the location - it could be a read-only # alternate for instance - self._data = file_contents_ro_filepath(self._indexpath) + self._cursor = mman.make_cursor(self._indexpath).use_region() else: # now its time to initialize everything - if we are here, someone wants # to access the fanout table or related properties # CHECK VERSION - self._version = (self._data[:4] == self.index_v2_signature and 2) or 1 + mmap = self._cursor.map() + self._version = (mmap[:4] == self.index_v2_signature and 2) or 1 if self._version == 2: - version_id = unpack_from(">L", self._data, 4)[0] + version_id = unpack_from(">L", mmap, 4)[0] assert version_id == self._version, "Unsupported index version: %i" % version_id # END assert version @@ -297,16 +298,16 @@ def _set_cache_(self, attr): def _entry_v1(self, i): """:return: tuple(offset, binsha, 0)""" - return unpack_from(">L20s", self._data, 1024 + i*24) + (0, ) + return unpack_from(">L20s", self._cursor.map(), 1024 + i*24) + (0, ) def _offset_v1(self, i): """see ``_offset_v2``""" - return unpack_from(">L", self._data, 1024 + i*24)[0] + return unpack_from(">L", self._cursor.map(), 1024 + i*24)[0] def _sha_v1(self, i): """see ``_sha_v2``""" base = 1024 + (i*24)+4 - return self._data[base:base+20] + return self._cursor.map()[base:base+20] def _crc_v1(self, i): """unsupported""" @@ -322,13 +323,13 @@ def _entry_v2(self, i): def _offset_v2(self, i): """:return: 32 or 64 byte offset into pack files. 64 byte offsets will only be returned if the pack is larger than 4 GiB, or 2^32""" - offset = unpack_from(">L", self._data, self._pack_offset + i * 4)[0] + offset = unpack_from(">L", self._cursor.map(), self._pack_offset + i * 4)[0] # if the high-bit is set, this indicates that we have to lookup the offset # in the 64 bit region of the file. The current offset ( lower 31 bits ) # are the index into it if offset & 0x80000000: - offset = unpack_from(">Q", self._data, self._pack_64_offset + (offset & ~0x80000000) * 8)[0] + offset = unpack_from(">Q", self._cursor.map(), self._pack_64_offset + (offset & ~0x80000000) * 8)[0] # END handle 64 bit offset return offset @@ -336,11 +337,11 @@ def _offset_v2(self, i): def _sha_v2(self, i): """:return: sha at the given index of this file index instance""" base = self._sha_list_offset + i * 20 - return self._data[base:base+20] + return self._cursor.map()[base:base+20] def _crc_v2(self, i): """:return: 4 bytes crc for the object at index i""" - return unpack_from(">L", self._data, self._crc_list_offset + i * 4)[0] + return unpack_from(">L", self._cursor.map(), self._crc_list_offset + i * 4)[0] #} END access V2 @@ -358,7 +359,7 @@ def _initialize(self): def _read_fanout(self, byte_offset): """Generate a fanout table from our data""" - d = self._data + d = self._cursor.map() out = list() append = out.append for i in range(256): @@ -382,11 +383,11 @@ def path(self): def packfile_checksum(self): """:return: 20 byte sha representing the sha1 hash of the pack file""" - return self._data[-40:-20] + return self._cursor.map()[-40:-20] def indexfile_checksum(self): """:return: 20 byte sha representing the sha1 hash of this index file""" - return self._data[-20:] + return self._cursor.map()[-20:] def offsets(self): """:return: sequence of all offsets in the order in which they were written @@ -394,7 +395,7 @@ def offsets(self): if self._version == 2: # read stream to array, convert to tuple a = array.array('I') # 4 byte unsigned int, long are 8 byte on 64 bit it appears - a.fromstring(buffer(self._data, self._pack_offset, self._pack_64_offset - self._pack_offset)) + a.fromstring(buffer(self._cursor.map(), self._pack_offset, self._pack_64_offset - self._pack_offset)) # networkbyteorder to something array likes more if sys.byteorder == 'little': @@ -501,7 +502,7 @@ class PackFile(LazyMixin): for some reason - one clearly doesn't want to read 10GB at once in that case""" - __slots__ = ('_packpath', '_data', '_size', '_version') + __slots__ = ('_packpath', '_cursor', '_size', '_version') pack_signature = 0x5041434b # 'PACK' pack_version_default = 2 @@ -513,26 +514,20 @@ def __init__(self, packpath): self._packpath = packpath def _set_cache_(self, attr): - if attr == '_data': - self._data = file_contents_ro_filepath(self._packpath) - - # read the header information - type_id, self._version, self._size = unpack_from(">LLL", self._data, 0) - - # TODO: figure out whether we should better keep the lock, or maybe - # add a .keep file instead ? - else: # must be '_size' or '_version' - # read header info - we do that just with a file stream - type_id, self._version, self._size = unpack(">LLL", open(self._packpath).read(12)) - # END handle header + # we fill the whole cache, whichever attribute gets queried first + self._cursor = mman.make_cursor(self._packpath).use_region() + # read the header information + type_id, self._version, self._size = unpack_from(">LLL", self._cursor.map(), 0) + + # TODO: figure out whether we should better keep the lock, or maybe + # add a .keep file instead ? if type_id != self.pack_signature: raise ParseError("Invalid pack signature: %i" % type_id) - #END assert type id def _iter_objects(self, start_offset, as_stream=True): """Handle the actual iteration of objects within this pack""" - data = self._data + data = self._cursor.map() content_size = len(data) - self.footer_size cur_offset = start_offset or self.first_object_offset @@ -568,11 +563,11 @@ def data(self): """ :return: read-only data of this pack. It provides random access and usually is a memory map""" - return self._data + return self._cursor.map() def checksum(self): """:return: 20 byte sha1 hash on all object sha's contained in this file""" - return self._data[-20:] + return self._cursor.map()[-20:] def path(self): """:return: path to the packfile""" @@ -591,8 +586,9 @@ def collect_streams(self, offset): If the object at offset is no delta, the size of the list is 1. :param offset: specifies the first byte of the object within this pack""" out = list() + data = self._cursor.map() while True: - ostream = pack_object_at(self._data, offset, True)[1] + ostream = pack_object_at(data, offset, True)[1] out.append(ostream) if ostream.type_id == OFS_DELTA: offset = ostream.pack_offset - ostream.delta_info @@ -614,14 +610,14 @@ def info(self, offset): :param offset: byte offset :return: OPackInfo instance, the actual type differs depending on the type_id attribute""" - return pack_object_at(self._data, offset or self.first_object_offset, False)[1] + return pack_object_at(self._cursor.map(), offset or self.first_object_offset, False)[1] def stream(self, offset): """Retrieve an object at the given file-relative offset as stream along with its information :param offset: byte offset :return: OPackStream instance, the actual type differs depending on the type_id attribute""" - return pack_object_at(self._data, offset or self.first_object_offset, True)[1] + return pack_object_at(self._cursor.map(), offset or self.first_object_offset, True)[1] def stream_iter(self, start_offset=0): """ @@ -704,7 +700,7 @@ def _object(self, sha, as_stream, index=-1): sha = self._index.sha(index) # END assure sha is present ( in output ) offset = self._index.offset(index) - type_id, uncomp_size, data_rela_offset = pack_object_header_info(buffer(self._pack._data, offset)) + type_id, uncomp_size, data_rela_offset = pack_object_header_info(buffer(self._pack._cursor.map(), offset)) if as_stream: if type_id not in delta_types: packstream = self._pack.stream(offset) diff --git a/gitdb/util.py b/gitdb/util.py index 4bb3c7352..4ce615585 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -23,6 +23,14 @@ # END try async zlib from async import ThreadPool +from smmap import ( + StaticWindowMapManager, + SlidingWindowMapBuffer + ) + +# initialize our global memory manager instance +# Use it to free cached (and unused) resources. +mman = StaticWindowMapManager() try: import hashlib @@ -180,6 +188,11 @@ def file_contents_ro_filepath(filepath, stream=False, allow_mmap=True, flags=0): close(fd) # END assure file is closed +def sliding_ro_buffer(filepath, flags=0): + """:return: a buffer compatible object which uses our mapped memory manager internally + ready to read the whole given filepath""" + return SlidingWindowMapBuffer(mman.make_cursor(filepath), flags=flags) + def to_hex_sha(sha): """:return: hexified version of sha""" if len(sha) == 40: From 34f01396b913220fe5b19e1f8e33f2d3f4ec2ce5 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 22:05:36 +0200 Subject: [PATCH 0176/2375] Added changelog information --- doc/source/changes.rst | 5 +++++ gitdb/test/performance/test_pack.py | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 7b8ebecc6..999cc1309 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,11 @@ Changelog ######### +***** +0.5.3 +***** +* Added support for smmap. SmartMMap allows resources to be managed and controlled. This brings the implementation closer to the way git handles memory maps, such that unused cached memory maps will automatically be freed once a resource limit is hit. The memory limit on 32 bit systems remains though as a sliding mmap implementation is not used for performance reasons. + ***** 0.5.2 ***** diff --git a/gitdb/test/performance/test_pack.py b/gitdb/test/performance/test_pack.py index da952b17a..20618024d 100644 --- a/gitdb/test/performance/test_pack.py +++ b/gitdb/test/performance/test_pack.py @@ -15,9 +15,11 @@ from time import time import random +from nose import SkipTest + class TestPackedDBPerformance(TestBigRepoR): - def _test_pack_random_access(self): + def test_pack_random_access(self): pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) # sha lookup @@ -66,6 +68,7 @@ def _test_pack_random_access(self): print >> sys.stderr, "PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (max_items, total_kib, total_kib/elapsed , elapsed, max_items / elapsed) def test_correctness(self): + raise SkipTest("Takes too long, enable it if you change the algorithm and want to be sure you decode packs correctly") pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) # disabled for now as it used to work perfectly, checking big repositories takes a long time print >> sys.stderr, "Endurance run: verify streaming of objects (crc and sha)" From cb4059bccea6d01e41d63c66fda502823a35220f Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 22:07:37 +0200 Subject: [PATCH 0177/2375] Bumped version info to 0.5.3 --- doc/source/conf.py | 4 ++-- setup.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 28deb3106..723a34503 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -38,7 +38,7 @@ # General information about the project. project = u'GitDB' -copyright = u'2010, Sebastian Thiel' +copyright = u'2011, Sebastian Thiel' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -47,7 +47,7 @@ # The short X.Y version. version = '0.5' # The full version, including alpha/beta/rc tags. -release = '0.5.1' +release = '0.5.3' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/setup.py b/setup.py index 3c6617422..86073971e 100755 --- a/setup.py +++ b/setup.py @@ -69,7 +69,7 @@ def get_data_files(self): setup(cmdclass={'build_ext':build_ext_nofail}, name = "gitdb", - version = "0.5.2", + version = "0.5.3", description = "Git Object Database", author = "Sebastian Thiel", author_email = "byronimo@gmail.com", @@ -80,7 +80,7 @@ def get_data_files(self): ext_modules=[Extension('gitdb._perf', ['gitdb/_fun.c', 'gitdb/_delta_apply.c'], include_dirs=['gitdb'])], license = "BSD License", zip_safe=False, - requires=('async (>=0.6.1)',), - install_requires='async >= 0.6.1', + requires=('async (>=0.6.1)', 'smmap (>=0.8.0)'), + install_requires=('async >= 0.6.1', 'smmap >= 0.8.0'), long_description = """GitDB is a pure-Python git object database""" ) From 09dd0eb9249493fc2d2897684035d753fc888acc Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Jun 2011 22:22:42 +0200 Subject: [PATCH 0178/2375] A tiny win32 fix, once again --- smmap/test/test_util.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 46de2ebaa..096c5f6df 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -71,9 +71,10 @@ def test_region(self): assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxint) # with the values we have, this test only works on windows where an alignment # size of 4096 is assumed. - if sys.platform == 'win32': - assert rhalfofs.includes_ofs(rofs) and rhalfofs.includes_ofs(0) - else: + # We only test on linux as it is inconsitent between the python versions + # as they use different mapping techniques to circumvent the missing offset + # argument of mmap. + if sys.platform != 'win32': assert rhalfofs.includes_ofs(rofs) and not rhalfofs.includes_ofs(0) #END handle platforms From 84eedc5d1def7bfefefc729d09c39a6a9cde81f2 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 13 Jun 2011 14:54:17 +0200 Subject: [PATCH 0179/2375] Added option to help test cases to succeed on windows. Its for test systems only --- smmap/util.py | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/smmap/util.py b/smmap/util.py index 80ba3c5b9..7ced28991 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -99,7 +99,13 @@ class MapRegion(object): if _need_compat_layer: __slots__.append('_mfb') # mapped memory buffer to provide offset #END handle additional slot - + + #{ Configuration + # Used for testing only. If True, all data will be loaded into memory at once. + # This makes sure no file handles will remain open. + _test_read_into_memory = False + #} END configuration + def __init__(self, path_or_fd, ofs, size, flags = 0): """Initialize a region, allocate the memory map @@ -132,7 +138,13 @@ def __init__(self, path_or_fd, ofs, size, flags = 0): # have to correct size, otherwise (instead of the c version) it will # bark that the size is too large ... many extra file accesses because # if this ... argh ! - self._mf = mmap(fd, min(os.fstat(fd).st_size - sizeofs, corrected_size), **kwargs) + actual_size = min(os.fstat(fd).st_size - sizeofs, corrected_size) + if self._test_read_into_memory: + self._mf = self._read_into_memory(fd, ofs, actual_size) + else: + self._mf = mmap(fd, actual_size, **kwargs) + #END handle memory mode + self._size = len(self._mf) if self._need_compat_layer: @@ -144,6 +156,19 @@ def __init__(self, path_or_fd, ofs, size, flags = 0): #END only close it if we opened it #END close file handle + def _read_into_memory(self, fd, offset, size): + """:return: string data as read from the given file descriptor, offset and size """ + os.lseek(fd, offset, os.SEEK_SET) + mf = '' + bytes_todo = size + while bytes_todo: + chunk = 1024*1024 + d = os.read(fd, chunk) + bytes_todo -= len(d) + mf += d + #END loop copy items + return mf + def __repr__(self): return "MapRegion<%i, %i>" % (self._b, self.size()) @@ -204,7 +229,7 @@ def includes_ofs(self, ofs): #} END interface - + class MapRegionList(list): """List of MapRegion instances associating a path with a list of regions.""" __slots__ = ( From 65dacbbd74a46698932cccdcab54f7558d1da169 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 13 Jun 2011 20:23:55 +0200 Subject: [PATCH 0180/2375] Fixed up configuration to create api documentation for the code. Improved some markup to be valid for sphinx. --- doc/source/conf.py | 2 +- smmap/mman.py | 5 +++-- smmap/util.py | 4 +++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index a0dac1166..90409a138 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -16,7 +16,7 @@ # 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('.')) +sys.path.append(os.path.abspath('../../')) # -- General configuration ----------------------------------------------------- diff --git a/smmap/mman.py b/smmap/mman.py index c6efc9496..9629eca46 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -354,8 +354,9 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): #{ Interface def make_cursor(self, path_or_fd): - """:return: a cursor pointing to the given path or file descriptor. - It can be used to map new regions of the file into memory + """ + :return: a cursor pointing to the given path or file descriptor. + It can be used to map new regions of the file into memory :note: if a file descriptor is given, it is assumed to be open and valid, but may be closed afterwards. To refer to the same file, you may reuse your existing file descriptor, but keep in mind that new windows can only diff --git a/smmap/util.py b/smmap/util.py index 7ced28991..07bdf7997 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -20,7 +20,9 @@ #{ Utilities def align_to_mmap(num, round_up): - """Align the given integer number to the closest page offset, which usually is 4096 bytes. + """ + Align the given integer number to the closest page offset, which usually is 4096 bytes. + :param round_up: if True, the next higher multiple of page size is used, otherwise the lower page_size will be used (i.e. if True, 1 becomes 4096, otherwise it becomes 0) :return: num rounded to closest page""" From 78cdb214fb6273169433fa662ad630afc26eb36a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 13 Jun 2011 21:07:03 +0200 Subject: [PATCH 0181/2375] Wrote introduction, readme.rst now points to the introduction page to keep things consistent --- README.rst | 52 +--------------------------- doc/source/api.rst | 42 +++++++++++++++++++++++ doc/source/index.rst | 3 ++ doc/source/intro.rst | 82 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 128 insertions(+), 51 deletions(-) mode change 100644 => 120000 README.rst create mode 100644 doc/source/api.rst create mode 100644 doc/source/intro.rst diff --git a/README.rst b/README.rst deleted file mode 100644 index 4c22eed2b..000000000 --- a/README.rst +++ /dev/null @@ -1,51 +0,0 @@ -#################### -Sliding MMap (smmap) -#################### -A straight forward implementation of a slidinging memory map. -The idea is that every access to a file goes through a memory map manager, which will on demand map a region of a file and provide a string-like object for reading. - -When reading from it, you will have to check whether you are still within your window boundary, and possibly obtain a new window as required. - -The great benefit of this system is that you can use it to map files of any size even on 32 bit systems. Additionally it will be able to close unused windows right away to return system resources. If there are multiple clients for the same file and location, the same window will be reused as well. - -As there is a global management facility, you are also able to forcibly free all open handles which is handy on windows, which would otherwise prevent the deletion of the involved files. - -For convenience, a stream class is provided which hides the usage of the memory manager behind a simple stream interface. - -************ -LIMITATIONS -************ -* The access is readonly by design. -* In python below 2.6, memory maps will be created in compatability mode which works, but creates inefficient memory maps as they always start at offset 0. - -************ -REQUIREMENTS -************ -* runs Python 2.4 or higher, but needs Python 2.6 or higher to run properly as it needs the offset parameter of the mmap.mmap function. - -******* -Install -******* -TODO - -****** -Source -****** -The source is available at git://github.com/Byron/smmap.git and can be cloned using:: - - git clone git://github.com/Byron/smmap.git - -************ -MAILING LIST -************ -http://groups.google.com/group/git-python - -************* -ISSUE TRACKER -************* -https://github.com/Byron/smmap/issues - -******* -LICENSE -******* -New BSD License diff --git a/README.rst b/README.rst new file mode 120000 index 000000000..7cafde78d --- /dev/null +++ b/README.rst @@ -0,0 +1 @@ +doc/source/intro.rst \ No newline at end of file diff --git a/doc/source/api.rst b/doc/source/api.rst new file mode 100644 index 000000000..7e2854afa --- /dev/null +++ b/doc/source/api.rst @@ -0,0 +1,42 @@ +.. _api-label: + +############# +API Reference +############# + +**************** +smmap.mman +**************** + +.. automodule:: smmap.mman + :members: + :undoc-members: + +**************** +smmap.buf +**************** + +.. automodule:: smmap.buf + :members: + :undoc-members: + +**************** +smmap.exc +**************** + +.. automodule:: smmap.exc + :members: + :undoc-members: + +**************** +smmap.util +**************** + +.. automodule:: smmap.util + :members: + :undoc-members: + + + + + diff --git a/doc/source/index.rst b/doc/source/index.rst index cb03044e0..d25ef8244 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -12,6 +12,9 @@ Contents: .. toctree:: :maxdepth: 2 + intro + tutorial + api changes Indices and tables diff --git a/doc/source/intro.rst b/doc/source/intro.rst new file mode 100644 index 000000000..b35e78569 --- /dev/null +++ b/doc/source/intro.rst @@ -0,0 +1,82 @@ +########### +Motivation +########### +When reading from many possibly large files in a fashion similar to random access, it is usually the fastest and most efficient to use memory maps. + +Although memory maps have many advantages, they represent a very limited system resource as every map uses one file descriptor, whose amount is limited per process. On 32 bit systems, the amount of memory you can have mapped at a time is naturally limited to theoretical 4GB of memory, which may not be enough for some applications. + +######## +Overview +######## + +Smmap wraps an interface around mmap and tracks the mapped files as well as the amount of clients who use it. If the system runs out of resources, or if a memory limit is reached, it will automatically unload unused maps to allow continued operation. + +To allow processing large files even on 32 bit systems, it allows only portions of the file to be mapped. Once the user reads beyond the mapped region, smmap will automatically map the next required region, unloading unused regions using a LRU algorithm. + +The interface also works around the missing offset parameter in python implementations up to python 2.5. + +Although the library can be used most efficiently with its native interface, a Buffer implementation is provided to hide these details behind a simple string-like interface. + +For performance critical 64 bit applications, a simplified version of memory mapping is provided which always maps the whole file, but still provides the benefit of unloading unused mappings on demand. + +############# +Prerequisites +############# +* Python 2.4, 2.5 or 2.6 +* OSX, Windows or Linux + +The package was tested on all of the previously mentioned configurations. + +########### +Limitations +########### +* The memory access is read-only by design. +* In python below 2.6, memory maps will be created in compatibility mode which works, but creates inefficient memory mappings as they always start at offset 0. +* It wasn't tested on python 2.7 and 3.x. + +############### +Getting Started +############### +It is advised to have a look at the :ref:`Usage Guide ` for a brief introduction on the different database implementations. + +################ +Installing smmap +################ +Its easiest to install smmap using the *easy_install* or *pip* program, which is part of the `setuptools`_ or `pip`_ respectively:: + + $ easy_install smmap + # or + $ pip install smmap + +As the command will install smmap in your respective python distribution, you will most likely need root permissions to authorize the required changes. + +If you have downloaded the source archive, the package can be installed by running the ``setup.py`` script:: + + $ python setup.py install + +################## +Homepage and Links +################## +The project is home on github at `https://github.com/Byron/smmap `_. + +The latest source can be cloned from github as well: + + * git://github.com/gitpython-developers/smmap.git + + +For support, please use the git-python mailing list: + + * http://groups.google.com/group/git-python + + +Issues can be filed on github: + + * https://github.com/Byron/smmap/issues + +################### +License Information +################### +*smmap* is licensed under the New BSD License. + +.. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools +.. _pip: http://www.pip-installer.org/en/latest/ From a51b65d35d402791f774efe95d4b848cc524a403 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 13 Jun 2011 22:48:55 +0200 Subject: [PATCH 0182/2375] Finished tutorial section, umproved capabilities of the buffer implementation to be more pythonic. Unfortunately, not all docs build yet because of some typical sphinx issue that results in an error which doesn't at all tell what the culprit actually is --- doc/source/intro.rst | 9 +-- doc/source/tutorial.rst | 118 ++++++++++++++++++++++++++++++++++++ smmap/buf.py | 10 +++ smmap/mman.py | 6 +- smmap/test/test_buf.py | 4 ++ smmap/test/test_tutorial.py | 83 +++++++++++++++++++++++++ 6 files changed, 221 insertions(+), 9 deletions(-) create mode 100644 doc/source/tutorial.rst create mode 100644 smmap/test/test_tutorial.py diff --git a/doc/source/intro.rst b/doc/source/intro.rst index b35e78569..30bff0ded 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -34,11 +34,6 @@ Limitations * In python below 2.6, memory maps will be created in compatibility mode which works, but creates inefficient memory mappings as they always start at offset 0. * It wasn't tested on python 2.7 and 3.x. -############### -Getting Started -############### -It is advised to have a look at the :ref:`Usage Guide ` for a brief introduction on the different database implementations. - ################ Installing smmap ################ @@ -53,7 +48,9 @@ As the command will install smmap in your respective python distribution, you wi If you have downloaded the source archive, the package can be installed by running the ``setup.py`` script:: $ python setup.py install - + +It is advised to have a look at the :ref:`Usage Guide ` for a brief introduction on the different database implementations. + ################## Homepage and Links ################## diff --git a/doc/source/tutorial.rst b/doc/source/tutorial.rst new file mode 100644 index 000000000..917b24594 --- /dev/null +++ b/doc/source/tutorial.rst @@ -0,0 +1,118 @@ +.. _tutorial-label: + +########### +Usage Guide +########### +This text briefly introduces you to the basic design decisions and accompanying classes. + +****** +Design +****** +Per application, there is *MemoryManager* which is held as static instance and used throughout the application. It can be configured to keep your resources within certain limits. + +To access mapped regions, you require a cursor. Cursors point to exactly one file and serve as handles into it. As long as it exists, the respective memory region will remain available. + +For convenience, a buffer implementation is provided which handles cursors and resource allocation behind its simple buffer like interface. + +*************** +Memory Managers +*************** +There are two types of memory managers, one uses *static* windows, the other one uses *sliding* windows. A window is a region of a file mapped into memory. Although the names might be somewhat misleading as technically windows are always static, the *sliding* version will allocate relatively small windows whereas the *static* version will always map the whole file. + +The *static* manager does nothing more than keeping a client count on the respective memory maps which always map the whole file, which allows to make some assumptions that can lead to simplified data access and increased performance, but reduces the compatibility to 32 bit systems or giant files. + +The *sliding* memory manager therefore should be the default manager when preparing an application for handling huge amounts of data on 32 bit and 64 bit platforms:: + + import smmap + # This instance should be globally available in your application + # It is configured to be well suitable for 32-bit or 64 bit applications. + mman = smmap.SlidingWindowMapManager() + + # the manager provides much useful information about its current state + # like the amount of open file handles or the amount of mapped memory + mman.num_file_handles() + mman.mapped_memory_size() + # and many more ... + + +Cursors +******* +*Cursors* are handles that point onto a window, i.e. a region of a file mapped into memory. From them you may obtain a buffer through which the data of that window can actually be accessed:: + + import smmap.test.lib + fc = smmap.test.lib.FileCreator(1024*1024*8, "test_file") + + # obtain a cursor to access some file. + c = mman.make_cursor(fc.path) + + # the cursor is now associated with the file, but not yet usable + assert c.is_associated() + assert not c.is_valid() + + # before you can use the cursor, you have to specify a window you want to + # access. The following just says you want as much data as possible starting + # from offset 0. + # To be sure your region could be mapped, query for validity + assert c.use_region().is_valid() # use_region returns self + + # once a region was mapped, you must query its dimension regularly + # to assure you don't try to access its buffer out of its bounds + assert c.size() + c.buffer()[0] # first byte + c.buffer()[1:10] # first 9 bytes + c.buffer()[c.size()-1] # last byte + + # its recommended not to create big slices when feeding the buffer + # into consumers (e.g. struct or zlib). + # Instead, either give the buffer directly, or use pythons buffer command. + buffer(c.buffer(), 1, 9) # first 9 bytes without copying them + + # you can query absolute offsets, and check whether an offset is included + # in the cursor's data. + assert c.ofs_begin() < c.ofs_end() + assert c.includes_ofs(100) + + # If you are over out of bounds with one of your region requests, the + # cursor will be come invalid. It cannot be used in that state + assert not c.use_region(fc.size, 100).is_valid() + # map as much as possible after skipping the first 100 bytes + assert c.use_region(100).is_valid() + + # You can explicitly free cursor resources by unusing the cursor's region + c.unuse_region() + assert not c.is_valid() + + +Now you would have to write your algorithms around this interface to properly slide through huge amounts of data. + +Alternatively you can use a convenience interface. + +******* +Buffers +******* +To make first use easier, at the expense of performance, there is a Buffer implementation which uses a cursor underneath. + +With it, you can access all data in a possibly huge file without having to take care of setting the cursor to different regions yourself:: + + # Create a default buffer which can operate on the whole file + buf = smmap.SlidingWindowMapBuffer(mman.make_cursor(fc.path)) + + # you can use it right away + assert buf.cursor().is_valid() + + buf[0] # access the first byte + buf[-1] # access the last ten bytes on the file + buf[-10:]# access the last ten bytes + + # If you want to keep the instance between different accesses, use the + # dedicated methods + buf.end_access() + assert not buf.cursor().is_valid() # you cannot use the buffer anymore + assert buf.begin_access(offset=10) # start using the buffer at an offset + + # it will stop using resources automatically once it goes out of scope + +Disadvantages +************* +Buffers cannot be used in place of strings or maps, hence you have to slice them to have valid input for the sorts of struct and zlib. A slice means a lot of data handling overhead which makes buffers slower compared to using cursors directly. + diff --git a/smmap/buf.py b/smmap/buf.py index c4d252251..9b2402687 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -47,6 +47,8 @@ def __len__(self): def __getitem__(self, i): c = self._c assert c.is_valid() + if i < 0: + i = self._size + i if not c.includes_ofs(i): c.use_region(i, 1) # END handle region usage @@ -57,6 +59,12 @@ def __getslice__(self, i, j): # fast path, slice fully included - safes a concatenate operation and # should be the default assert c.is_valid() + if i < 0: + i = self._size + i + if j == sys.maxint: + j = self._size + if j < 0: + j = self._size + j if (c.ofs_begin() <= i) and (j < c.ofs_end()): b = c.ofs_begin() return c.buffer()[i-b:j-b] @@ -68,6 +76,7 @@ def __getslice__(self, i, j): md = str() while l: c.use_region(ofs, l) + assert c.is_valid() d = c.buffer()[:l] ofs += len(d) l -= len(d) @@ -102,6 +111,7 @@ def begin_access(self, cursor = None, offset = 0, size = sys.maxint, flags = 0): self._size = size #END set size return res + # END use our cursor return False def end_access(self): diff --git a/smmap/mman.py b/smmap/mman.py index 9629eca46..deba99809 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -11,17 +11,16 @@ import sys from sys import getrefcount -__all__ = ["StaticWindowMapManager", "SlidingWindowMapManager"] +__all__ = ["StaticWindowMapManager", "SlidingWindowMapManager", "WindowCursor"] #{ Utilities #}END utilities - class WindowCursor(object): """Pointer into the mapped region of the memory manager, keeping the map alive until it is destroyed and no other client uses it. - + Cursors should not be created manually, but are instead returned by the SlidingWindowMapManager :note: The current implementation is suited for static and sliding window managers, but it also means that it must be suited for the somewhat quite different sliding manager. It could be improved, but @@ -85,6 +84,7 @@ def assign(self, rhs): def use_region(self, offset = 0, size = 0, flags = 0): """Assure we point to a window which allows access to the given offset into the file + :param offset: absolute offset in bytes into the file :param size: amount of bytes to map. If 0, all available bytes will be mapped :param flags: additional flags to be given to os.open in case a file handle is initially opened diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index d8b7fbcab..9881c6294 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -50,6 +50,10 @@ def test_basics(self): assert data[offset] == buf[0] assert data[offset:offset*2] == buf[0:offset] + # negative indices, partial slices + assert buf[-1] == buf[len(buf)-1] + assert buf[-10:] == buf[len(buf)-10:len(buf)] + # end access makes its cursor invalid buf.end_access() assert not buf.cursor().is_valid() diff --git a/smmap/test/test_tutorial.py b/smmap/test/test_tutorial.py new file mode 100644 index 000000000..a9f4b1c08 --- /dev/null +++ b/smmap/test/test_tutorial.py @@ -0,0 +1,83 @@ +from lib import TestBase + +class TestTutorial(TestBase): + + def test_example(self): + # Memory Managers + ################## + import smmap + # This instance should be globally available in your application + # It is configured to be well suitable for 32-bit or 64 bit applications. + mman = smmap.SlidingWindowMapManager() + + # the manager provides much useful information about its current state + # like the amount of open file handles or the amount of mapped memory + assert mman.num_file_handles() == 0 + assert mman.mapped_memory_size() == 0 + # and many more ... + + # Cursors + ########## + import smmap.test.lib + fc = smmap.test.lib.FileCreator(1024*1024*8, "test_file") + + # obtain a cursor to access some file. + c = mman.make_cursor(fc.path) + + # the cursor is now associated with the file, but not yet usable + assert c.is_associated() + assert not c.is_valid() + + # before you can use the cursor, you have to specify a window you want to + # access. The following just says you want as much data as possible starting + # from offset 0. + # To be sure your region could be mapped, query for validity + assert c.use_region().is_valid() # use_region returns self + + # once a region was mapped, you must query its dimension regularly + # to assure you don't try to access its buffer out of its bounds + assert c.size() + c.buffer()[0] # first byte + c.buffer()[1:10] # first 9 bytes + c.buffer()[c.size()-1] # last byte + + # its recommended not to create big slices when feeding the buffer + # into consumers (e.g. struct or zlib). + # Instead, either give the buffer directly, or use pythons buffer command. + buffer(c.buffer(), 1, 9) # first 9 bytes without copying them + + # you can query absolute offsets, and check whether an offset is included + # in the cursor's data. + assert c.ofs_begin() < c.ofs_end() + assert c.includes_ofs(100) + + # If you are over out of bounds with one of your region requests, the + # cursor will be come invalid. It cannot be used in that state + assert not c.use_region(fc.size, 100).is_valid() + # map as much as possible after skipping the first 100 bytes + assert c.use_region(100).is_valid() + + # You can explicitly free cursor resources by unusing the cursor's region + c.unuse_region() + assert not c.is_valid() + + # Buffers + ######### + # Create a default buffer which can operate on the whole file + buf = smmap.SlidingWindowMapBuffer(mman.make_cursor(fc.path)) + + # you can use it right away + assert buf.cursor().is_valid() + + buf[0] # access the first byte + buf[-1] # access the last ten bytes on the file + buf[-10:]# access the last ten bytes + + # If you want to keep the instance between different accesses, use the + # dedicated methods + buf.end_access() + assert not buf.cursor().is_valid() # you cannot use the buffer anymore + assert buf.begin_access(offset=10) # start using the buffer at an offset + + # it will stop using resources automatically once it goes out of scope + From ec511365bc641a320c66ce4e796918e58a1567c8 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 13 Jun 2011 22:56:16 +0200 Subject: [PATCH 0183/2375] It turned out the :note: docstring was not supported. Now all documentation is being generated --- doc/source/api.rst | 24 ++++++++++++------------ smmap/mman.py | 39 ++++++++++++++++++++++++--------------- 2 files changed, 36 insertions(+), 27 deletions(-) diff --git a/doc/source/api.rst b/doc/source/api.rst index 7e2854afa..cddd268c4 100644 --- a/doc/source/api.rst +++ b/doc/source/api.rst @@ -4,33 +4,33 @@ API Reference ############# -**************** -smmap.mman -**************** +*********************** +Mapped Memory Managers +*********************** .. automodule:: smmap.mman :members: :undoc-members: -**************** -smmap.buf -**************** +******* +Buffers +******* .. automodule:: smmap.buf :members: :undoc-members: -**************** -smmap.exc -**************** +********** +Exceptions +********** .. automodule:: smmap.exc :members: :undoc-members: -**************** -smmap.util -**************** +********* +Utilities +********* .. automodule:: smmap.util :members: diff --git a/smmap/mman.py b/smmap/mman.py index deba99809..15bb012b4 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -18,13 +18,15 @@ class WindowCursor(object): - """Pointer into the mapped region of the memory manager, keeping the map + """ + Pointer into the mapped region of the memory manager, keeping the map alive until it is destroyed and no other client uses it. Cursors should not be created manually, but are instead returned by the SlidingWindowMapManager - :note: The current implementation is suited for static and sliding window managers, but it also means - that it must be suited for the somewhat quite different sliding manager. It could be improved, but - I see no real need to do so.""" + + **Note**: The current implementation is suited for static and sliding window managers, but it also means + that it must be suited for the somewhat quite different sliding manager. It could be improved, but + I see no real need to do so.""" __slots__ = ( '_manager', # the manger keeping all file regions '_rlist', # a regions list with regions for our file @@ -91,8 +93,9 @@ def use_region(self, offset = 0, size = 0, flags = 0): for mapping. Has no effect if a region can actually be reused. :return: this instance - it should be queried for whether it points to a valid memory region. This is not the case if the mapping failed becaues we reached the end of the file - :note: The size actually mapped may be smaller than the given size. If that is the case, - either the file has reached its end, or the map was created between two existing regions""" + + **note**: The size actually mapped may be smaller than the given size. If that is the case, + either the file has reached its end, or the map was created between two existing regions""" need_region = True man = self._manager fsize = self._rlist.file_size() @@ -123,9 +126,10 @@ def use_region(self, offset = 0, size = 0, flags = 0): def unuse_region(self): """Unuse the ucrrent region. Does nothing if we have no current region - :note: the cursor unuses the region automatically upon destruction. It is recommended - to unuse the region once you are done reading from it in persistent cursors as it - helps to free up resource more quickly""" + + **note** the cursor unuses the region automatically upon destruction. It is recommended + to unuse the region once you are done reading from it in persistent cursors as it + helps to free up resource more quickly""" self._region = None # note: should reset ofs and size, but we spare that for performance. Its not # allowed to query information if we are not valid ! @@ -133,9 +137,11 @@ def unuse_region(self): def buffer(self): """Return a buffer object which allows access to our memory region from our offset to the window size. Please note that it might be smaller than you requested when calling use_region() - :note: You can only obtain a buffer if this instance is_valid() ! - :note: buffers should not be cached passed the duration of your access as it will - prevent resources from being freed even though they might not be accounted for anymore !""" + + **note** You can only obtain a buffer if this instance is_valid() ! + + **note** buffers should not be cached passed the duration of your access as it will + prevent resources from being freed even though they might not be accounted for anymore !""" return buffer(self._region.buffer(), self._ofs, self._size) def map(self): @@ -155,7 +161,8 @@ def is_associated(self): def ofs_begin(self): """:return: offset to the first byte pointed to by our cursor - :note: only if is_valid() is True""" + + **note** only if is_valid() is True""" return self._region._b + self._ofs def ofs_end(self): @@ -177,7 +184,8 @@ def region_ref(self): def includes_ofs(self, ofs): """:return: True if the given absolute offset is contained in the cursors current region - :note: cursor must be valid for this to work""" + + **note** cursor must be valid for this to work""" # unroll methods return (self._region._b + self._ofs) <= ofs < (self._region._b + self._ofs + self._size) @@ -199,7 +207,8 @@ def path(self): def fd(self): """:return: file descriptor used to create the underlying mapping. - :note: it is not required to be valid anymore + + **note** it is not required to be valid anymore :raise ValueError: if the mapping was not created by a file descriptor""" if isinstance(self._rlist.path_or_fd(), basestring): raise ValueError("File descriptor queried although mapping was generated from path") From 59cd3da62b5038783deeb2883262682758ec1eec Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 13 Jun 2011 22:58:44 +0200 Subject: [PATCH 0184/2375] Made README.rst a copy of intro.rst. unfortunately symlinks are not followed by github. This is a real issue to me ... --- README.rst | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) mode change 120000 => 100644 README.rst diff --git a/README.rst b/README.rst deleted file mode 120000 index 7cafde78d..000000000 --- a/README.rst +++ /dev/null @@ -1 +0,0 @@ -doc/source/intro.rst \ No newline at end of file diff --git a/README.rst b/README.rst new file mode 100644 index 000000000..30bff0ded --- /dev/null +++ b/README.rst @@ -0,0 +1,79 @@ +########### +Motivation +########### +When reading from many possibly large files in a fashion similar to random access, it is usually the fastest and most efficient to use memory maps. + +Although memory maps have many advantages, they represent a very limited system resource as every map uses one file descriptor, whose amount is limited per process. On 32 bit systems, the amount of memory you can have mapped at a time is naturally limited to theoretical 4GB of memory, which may not be enough for some applications. + +######## +Overview +######## + +Smmap wraps an interface around mmap and tracks the mapped files as well as the amount of clients who use it. If the system runs out of resources, or if a memory limit is reached, it will automatically unload unused maps to allow continued operation. + +To allow processing large files even on 32 bit systems, it allows only portions of the file to be mapped. Once the user reads beyond the mapped region, smmap will automatically map the next required region, unloading unused regions using a LRU algorithm. + +The interface also works around the missing offset parameter in python implementations up to python 2.5. + +Although the library can be used most efficiently with its native interface, a Buffer implementation is provided to hide these details behind a simple string-like interface. + +For performance critical 64 bit applications, a simplified version of memory mapping is provided which always maps the whole file, but still provides the benefit of unloading unused mappings on demand. + +############# +Prerequisites +############# +* Python 2.4, 2.5 or 2.6 +* OSX, Windows or Linux + +The package was tested on all of the previously mentioned configurations. + +########### +Limitations +########### +* The memory access is read-only by design. +* In python below 2.6, memory maps will be created in compatibility mode which works, but creates inefficient memory mappings as they always start at offset 0. +* It wasn't tested on python 2.7 and 3.x. + +################ +Installing smmap +################ +Its easiest to install smmap using the *easy_install* or *pip* program, which is part of the `setuptools`_ or `pip`_ respectively:: + + $ easy_install smmap + # or + $ pip install smmap + +As the command will install smmap in your respective python distribution, you will most likely need root permissions to authorize the required changes. + +If you have downloaded the source archive, the package can be installed by running the ``setup.py`` script:: + + $ python setup.py install + +It is advised to have a look at the :ref:`Usage Guide ` for a brief introduction on the different database implementations. + +################## +Homepage and Links +################## +The project is home on github at `https://github.com/Byron/smmap `_. + +The latest source can be cloned from github as well: + + * git://github.com/gitpython-developers/smmap.git + + +For support, please use the git-python mailing list: + + * http://groups.google.com/group/git-python + + +Issues can be filed on github: + + * https://github.com/Byron/smmap/issues + +################### +License Information +################### +*smmap* is licensed under the New BSD License. + +.. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools +.. _pip: http://www.pip-installer.org/en/latest/ From f097bd611a82289d6bb95074fdf596332cb1c980 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 13 Jun 2011 23:10:08 +0200 Subject: [PATCH 0185/2375] Fixed wrong operating system fields --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index e2bb622fd..2e97e59c6 100755 --- a/setup.py +++ b/setup.py @@ -41,8 +41,8 @@ "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Operating System :: POSIX", - "Operating System :: Windows", - "Operating System :: OSX", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", ], long_description=long_description, From cf297b7b81bc5f6011c49d818d776ed7915fa1ee Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 13 Jun 2011 23:33:49 +0200 Subject: [PATCH 0186/2375] Removed possibly invalid documentation tags --- smmap/buf.py | 6 +++--- smmap/mman.py | 53 +++++++++++++++++++++++++++++---------------------- smmap/util.py | 3 ++- 3 files changed, 35 insertions(+), 27 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index 9b2402687..00ddbacd9 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -12,9 +12,9 @@ class SlidingWindowMapBuffer(object): The buffer is relative, that is if you map an offset, index 0 will map to the first byte at the offset you used during initialization or begin_access - :note: Although this type effectively hides the fact that there are mapped windows - underneath, it can unfortunately not be used in any non-pure python method which - needs a buffer or string""" + **Note:** Although this type effectively hides the fact that there are mapped windows + underneath, it can unfortunately not be used in any non-pure python method which + needs a buffer or string""" __slots__ = ( '_c', # our cursor '_size', # our supposed size diff --git a/smmap/mman.py b/smmap/mman.py index 15bb012b4..9b08ae969 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -24,7 +24,7 @@ class WindowCursor(object): Cursors should not be created manually, but are instead returned by the SlidingWindowMapManager - **Note**: The current implementation is suited for static and sliding window managers, but it also means + **Note:**: The current implementation is suited for static and sliding window managers, but it also means that it must be suited for the somewhat quite different sliding manager. It could be improved, but I see no real need to do so.""" __slots__ = ( @@ -94,7 +94,7 @@ def use_region(self, offset = 0, size = 0, flags = 0): :return: this instance - it should be queried for whether it points to a valid memory region. This is not the case if the mapping failed becaues we reached the end of the file - **note**: The size actually mapped may be smaller than the given size. If that is the case, + **Note:**: The size actually mapped may be smaller than the given size. If that is the case, either the file has reached its end, or the map was created between two existing regions""" need_region = True man = self._manager @@ -127,7 +127,7 @@ def use_region(self, offset = 0, size = 0, flags = 0): def unuse_region(self): """Unuse the ucrrent region. Does nothing if we have no current region - **note** the cursor unuses the region automatically upon destruction. It is recommended + **Note:** the cursor unuses the region automatically upon destruction. It is recommended to unuse the region once you are done reading from it in persistent cursors as it helps to free up resource more quickly""" self._region = None @@ -138,9 +138,9 @@ def buffer(self): """Return a buffer object which allows access to our memory region from our offset to the window size. Please note that it might be smaller than you requested when calling use_region() - **note** You can only obtain a buffer if this instance is_valid() ! + **Note:** You can only obtain a buffer if this instance is_valid() ! - **note** buffers should not be cached passed the duration of your access as it will + **Note:** buffers should not be cached passed the duration of your access as it will prevent resources from being freed even though they might not be accounted for anymore !""" return buffer(self._region.buffer(), self._ofs, self._size) @@ -162,7 +162,7 @@ def is_associated(self): def ofs_begin(self): """:return: offset to the first byte pointed to by our cursor - **note** only if is_valid() is True""" + **Note:** only if is_valid() is True""" return self._region._b + self._ofs def ofs_end(self): @@ -185,7 +185,7 @@ def includes_ofs(self, ofs): """:return: True if the given absolute offset is contained in the cursors current region - **note** cursor must be valid for this to work""" + **Note:** cursor must be valid for this to work""" # unroll methods return (self._region._b + self._ofs) <= ofs < (self._region._b + self._ofs + self._size) @@ -208,7 +208,7 @@ def path(self): def fd(self): """:return: file descriptor used to create the underlying mapping. - **note** it is not required to be valid anymore + **Note:** it is not required to be valid anymore :raise ValueError: if the mapping was not created by a file descriptor""" if isinstance(self._rlist.path_or_fd(), basestring): raise ValueError("File descriptor queried although mapping was generated from path") @@ -289,9 +289,11 @@ def _collect_lru_region(self, size): :param size: size of the region we want to map next (assuming its not already mapped partially or full if 0, we try to free any available region :return: Amount of freed regions - :note: We don't raise exceptions anymore, in order to keep the system working, allowing temporary overallocation. - If the system runs out of memory, it will tell. - :todo: implement a case where all unusued regions are discarded efficiently. Currently its only brute force""" + + **Note:** We don't raise exceptions anymore, in order to keep the system working, allowing temporary overallocation. + If the system runs out of memory, it will tell. + + **todo:** implement a case where all unusued regions are discarded efficiently. Currently its only brute force""" num_found = 0 while (size == 0) or (self._memory_size + size > self._max_memory_size): lru_region = None @@ -366,15 +368,18 @@ def make_cursor(self, path_or_fd): """ :return: a cursor pointing to the given path or file descriptor. It can be used to map new regions of the file into memory - :note: if a file descriptor is given, it is assumed to be open and valid, - but may be closed afterwards. To refer to the same file, you may reuse - your existing file descriptor, but keep in mind that new windows can only - be mapped as long as it stays valid. This is why the using actual file paths - are preferred unless you plan to keep the file descriptor open. - :note: file descriptors are problematic as they are not necessarily unique, as two - different files opened and closed in succession might have the same file descriptor id. - :note: Using file descriptors directly is faster once new windows are mapped as it - prevents the file to be opened again just for the purpose of mapping it.""" + + **Note:** if a file descriptor is given, it is assumed to be open and valid, + but may be closed afterwards. To refer to the same file, you may reuse + your existing file descriptor, but keep in mind that new windows can only + be mapped as long as it stays valid. This is why the using actual file paths + are preferred unless you plan to keep the file descriptor open. + + **Note:** file descriptors are problematic as they are not necessarily unique, as two + different files opened and closed in succession might have the same file descriptor id. + + **Note:** Using file descriptors directly is faster once new windows are mapped as it + prevents the file to be opened again just for the purpose of mapping it.""" regions = self._fdict.get(path_or_fd) if regions is None: regions = self.MapRegionListCls(path_or_fd) @@ -426,7 +431,8 @@ def force_map_handle_removal_win(self, base_path): This really may only be used if you know that the items which keep the cursors alive will not be using it anymore. They need to be recreated ! :return: Amount of closed handles - :note: does nothing on non-windows platforms""" + + **Note:** does nothing on non-windows platforms""" if sys.platform != 'win32': return #END early bailout @@ -451,8 +457,9 @@ class SlidingWindowMapManager(StaticWindowMapManager): which result from each mmap call, the least recently used, and currently unused mapped regions are unloaded automatically. - :note: currently not thread-safe ! - :note: in the current implementation, we will automatically unload windows if we either cannot + **Note:** currently not thread-safe ! + + **Note:** in the current implementation, we will automatically unload windows if we either cannot create more memory maps (as the open file handles limit is hit) or if we have allocated more than a safe amount of memory already, which would possibly cause memory allocations to fail as our address space is full.""" diff --git a/smmap/util.py b/smmap/util.py index 07bdf7997..b0fd83b3f 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -88,7 +88,8 @@ def extend_right_to(self, window, max_size): class MapRegion(object): """Defines a mapped region of memory, aligned to pagesizes - :note: deallocates used region automatically on destruction""" + + **Note:** deallocates used region automatically on destruction""" __slots__ = [ '_b' , # beginning of mapping '_mf', # mapped memory chunk (as returned by mmap) From 4524faf0d0c5383268b134084954b34faeaa766d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 13 Jun 2011 23:29:22 +0200 Subject: [PATCH 0187/2375] Fixed up docs for upcoming release. Bumped version to 0.5.3 --- Makefile | 2 +- gitdb/__init__.py | 7 +++++++ gitdb/db/base.py | 7 ++++--- gitdb/db/mem.py | 4 ++-- gitdb/db/pack.py | 2 +- gitdb/ext/smmap | 2 +- gitdb/fun.py | 15 +++++++++------ gitdb/pack.py | 29 +++++++++++++++++------------ gitdb/stream.py | 6 +++--- gitdb/test/db/lib.py | 2 +- gitdb/util.py | 28 ++++++++++++++++++---------- setup.py | 9 +++++---- 12 files changed, 69 insertions(+), 44 deletions(-) diff --git a/Makefile b/Makefile index e65c55a6d..c6c159bdc 100644 --- a/Makefile +++ b/Makefile @@ -23,5 +23,5 @@ clean:: rm -f *.so coverage:: build - PYTHONPATH=. $(PYTHON) $(TESTRUNNER) --cover-package=dulwich --with-coverage --cover-erase --cover-inclusive gitdb + PYTHONPATH=. $(PYTHON) $(TESTRUNNER) --cover-package=gitdb --with-coverage --cover-erase --cover-inclusive gitdb diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 775c969cf..91359105c 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -24,6 +24,13 @@ def _init_externals(): _init_externals() +__author__ = "Sebastian Thiel" +__contact__ = "byronimo@gmail.com" +__homepage__ = "https://github.com/gitpython-developers/gitdb" +version_info = (0, 5, 3) +__version__ = '.'.join(str(i) for i in version_info) + + # default imports from db import * from base import * diff --git a/gitdb/db/base.py b/gitdb/db/base.py index 2189d4193..984acafbf 100644 --- a/gitdb/db/base.py +++ b/gitdb/db/base.py @@ -72,7 +72,8 @@ def stream_async(self, reader): :param reader: see ``info`` :param max_threads: see ``ObjectDBW.store`` :return: async.Reader yielding OStream|InvalidOStream instances in any order - :note: depending on the system configuration, it might not be possible to + + **Note:** depending on the system configuration, it might not be possible to read all OStreams at once. Instead, read them individually using reader.read(x) where x is small enough.""" # base implementation just uses the stream method repeatedly @@ -140,7 +141,7 @@ def store_async(self, reader): The same instances will be used in the output channel as were received in by the Reader. - :note:As some ODB implementations implement this operation atomic, they might + **Note:** As some ODB implementations implement this operation atomic, they might abort the whole operation if one item could not be processed. Hence check how many items have actually been produced.""" # base implementation uses store to perform the work @@ -158,7 +159,7 @@ def __init__(self, root_path): """Initialize this instance to look for its files at the given root path All subsequent operations will be relative to this path :raise InvalidDBRoot: - :note: The base will not perform any accessablity checking as the base + **Note:** The base will not perform any accessablity checking as the base might not yet be accessible, but become accessible before the first access.""" super(FileDBBase, self).__init__() diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index 8012ad15e..5d76c83cc 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -33,7 +33,7 @@ class MemoryDB(ObjectDBR, ObjectDBW): it to the actual physical storage, as it allows to query whether object already exists in the target storage before introducing actual IO - :note: memory is currently not threadsafe, hence the async methods cannot be used + **Note:** memory is currently not threadsafe, hence the async methods cannot be used for storing""" def __init__(self): @@ -92,7 +92,7 @@ def sha_iter(self): def stream_copy(self, sha_iter, odb): """Copy the streams as identified by sha's yielded by sha_iter into the given odb The streams will be copied directly - :note: the object will only be written if it did not exist in the target db + **Note:** the object will only be written if it did not exist in the target db :return: amount of streams actually copied into odb. If smaller than the amount of input shas, one or more objects did already exist in odb""" count = 0 diff --git a/gitdb/db/pack.py b/gitdb/db/pack.py index eef3f712e..4c9d0b919 100644 --- a/gitdb/db/pack.py +++ b/gitdb/db/pack.py @@ -58,7 +58,7 @@ def _pack_info(self, sha): """:return: tuple(entity, index) for an item at the given sha :param sha: 20 or 40 byte sha :raise BadObject: - :note: This method is not thread-safe, but may be hit in multi-threaded + **Note:** This method is not thread-safe, but may be hit in multi-threaded operation. The worst thing that can happen though is a counter that was not incremented, or the list being in wrong order. So we safe the time for locking here, lets see how that goes""" diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 84eedc5d1..f097bd611 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 84eedc5d1def7bfefefc729d09c39a6a9cde81f2 +Subproject commit f097bd611a82289d6bb95074fdf596332cb1c980 diff --git a/gitdb/fun.py b/gitdb/fun.py index 5bbe8efc3..66130ebee 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -138,7 +138,7 @@ def _closest_index(dcl, absofs): """:return: index at which the given absofs should be inserted. The index points to the DeltaChunk with a target buffer absofs that equals or is greater than absofs. - :note: global method for performance only, it belongs to DeltaChunkList""" + **Note:** global method for performance only, it belongs to DeltaChunkList""" lo = 0 hi = len(dcl) while lo < hi: @@ -414,9 +414,11 @@ def pack_object_header_info(data): return (type_id, size, i) def create_pack_object_header(obj_type, obj_size): - """:return: string defining the pack header comprised of the object type - and its incompressed size in bytes - :parmam obj_type: pack type_id of the object + """ + :return: string defining the pack header comprised of the object type + and its incompressed size in bytes + + :param obj_type: pack type_id of the object :param obj_size: uncompressed size in bytes of the following object stream""" c = 0 # 1 byte hdr = str() # output string @@ -483,7 +485,7 @@ def stream_copy(read, write, size, chunk_size): Copy a stream up to size bytes using the provided read and write methods, in chunks of chunk_size - :note: its much like stream_copy utility, but operates just using methods""" + **Note:** its much like stream_copy utility, but operates just using methods""" dbw = 0 # num data bytes written # WRITE ALL DATA UP TO SIZE @@ -597,7 +599,8 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): :param delta_buf_size: size fo the delta buffer in bytes :param delta_buf: random access delta data :param write: write method taking a chunk of bytes - :note: transcribed to python from the similar routine in patch-delta.c""" + + **Note:** transcribed to python from the similar routine in patch-delta.c""" i = 0 db = delta_buf while i < delta_buf_size: diff --git a/gitdb/pack.py b/gitdb/pack.py index 0679a6ecf..d840441e9 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -173,7 +173,7 @@ def write_stream_to_pack(read, write, zstream, base_crc=None): class IndexWriter(object): """Utility to cache index information, allowing to write all information later in one go to the given stream - :note: currently only writes v2 indices""" + **Note:** currently only writes v2 indices""" __slots__ = '_objs' def __init__(self): @@ -391,7 +391,8 @@ def indexfile_checksum(self): def offsets(self): """:return: sequence of all offsets in the order in which they were written - :note: return value can be random accessed, but may be immmutable""" + + **Note:** return value can be random accessed, but may be immmutable""" if self._version == 2: # read stream to array, convert to tuple a = array.array('I') # 4 byte unsigned int, long are 8 byte on 64 bit it appears @@ -497,10 +498,10 @@ class PackFile(LazyMixin): packs therefor is 32 bit on 32 bit systems. On 64 bit systems, this should be fine though. - :note: at some point, this might be implemented using streams as well, or - streams are an alternate path in the case memory maps cannot be created - for some reason - one clearly doesn't want to read 10GB at once in that - case""" + **Note:** at some point, this might be implemented using streams as well, or + streams are an alternate path in the case memory maps cannot be created + for some reason - one clearly doesn't want to read 10GB at once in that + case""" __slots__ = ('_packpath', '_cursor', '_size', '_version') pack_signature = 0x5041434b # 'PACK' @@ -625,8 +626,9 @@ def stream_iter(self, start_offset=0): to access the data in the pack directly. :param start_offset: offset to the first object to iterate. If 0, iteration starts at the very first object in the pack. - :note: Iterating a pack directly is costly as the datastream has to be decompressed - to determine the bounds between the objects""" + + **Note:** Iterating a pack directly is costly as the datastream has to be decompressed + to determine the bounds between the objects""" return self._iter_objects(start_offset, as_stream=True) #} END Read-Database like Interface @@ -902,9 +904,11 @@ def write_pack(cls, object_iter, pack_write, index_write=None, :param zlib_compression: the zlib compression level to use :return: tuple(pack_sha, index_binsha) binary sha over all the contents of the pack and over all contents of the index. If index_write was None, index_binsha will be None - :note: The destination of the write functions is up to the user. It could - be a socket, or a file for instance - :note: writes only undeltified objects""" + + **Note:** The destination of the write functions is up to the user. It could + be a socket, or a file for instance + + **Note:** writes only undeltified objects""" objs = object_iter if not object_count: if not isinstance(object_iter, (tuple, list)): @@ -979,7 +983,8 @@ def create(cls, object_iter, base_dir, object_count = None, zlib_compression = z and corresponding index file. The pack contains all OStream objects contained in object iter. :param base_dir: directory which is to contain the files :return: PackEntity instance initialized with the new pack - :note: for more information on the other parameters see the write_pack method""" + + **Note:** for more information on the other parameters see the write_pack method""" pack_fd, pack_path = tempfile.mkstemp('', 'pack', base_dir) index_fd, index_path = tempfile.mkstemp('', 'index', base_dir) pack_write = lambda d: os.write(pack_fd, d) diff --git a/gitdb/stream.py b/gitdb/stream.py index 8010a0551..632213c27 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -51,7 +51,7 @@ class DecompressMemMapReader(LazyMixin): To read efficiently, you clearly don't want to read individual bytes, instead, read a few kilobytes at least. - :note: The chunk-size should be carefully selected as it will involve quite a bit + **Note:** The chunk-size should be carefully selected as it will involve quite a bit of string copying due to the way the zlib is implemented. Its very wasteful, hence we try to find a good tradeoff between allocation time and number of times we actually allocate. An own zlib implementation would be good here @@ -609,8 +609,8 @@ class FDCompressedSha1Writer(Sha1Writer): """Digests data written to it, making the sha available, then compress the data and write it to the file descriptor - :note: operates on raw file descriptors - :note: for this to work, you have to use the close-method of this instance""" + **Note:** operates on raw file descriptors + **Note:** for this to work, you have to use the close-method of this instance""" __slots__ = ("fd", "sha1", "zip") # default exception diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index 416c8c588..4af4483c7 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -65,7 +65,7 @@ def _assert_object_writing_simple(self, db): def _assert_object_writing(self, db): """General tests to verify object writing, compatible to ObjectDBW - :note: requires write access to the database""" + **Note:** requires write access to the database""" # start in 'dry-run' mode, using a simple sha1 writer ostreams = (ZippedStoreShaWriter, None) for ostreamcls in ostreams: diff --git a/gitdb/util.py b/gitdb/util.py index 4ce615585..23784de3f 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -119,8 +119,9 @@ def __getslice__(self, start, end): #{ Routines def make_sha(source=''): - """A python2.4 workaround for the sha/hashlib module fiasco - :note: From the dulwich project """ + """A python2.4 workaround for the sha/hashlib module fiasco + + **Note** From the dulwich project """ try: return hashlib.sha1(source) except NameError: @@ -146,6 +147,7 @@ def allocate_memory(size): def file_contents_ro(fd, stream=False, allow_mmap=True): """:return: read-only contents of the file represented by the file descriptor fd + :param fd: file descriptor opened for reading :param stream: if False, random access is provided, otherwise the stream interface is provided. @@ -173,14 +175,16 @@ def file_contents_ro(fd, stream=False, allow_mmap=True): def file_contents_ro_filepath(filepath, stream=False, allow_mmap=True, flags=0): """Get the file contents at filepath as fast as possible + :return: random access compatible memory of the given filepath :param stream: see ``file_contents_ro`` :param allow_mmap: see ``file_contents_ro`` :param flags: additional flags to pass to os.open :raise OSError: If the file could not be opened - :note: for now we don't try to use O_NOATIME directly as the right value needs to be - shared per database in fact. It only makes a real difference for loose object - databases anyway, and they use it with the help of the ``flags`` parameter""" + + **Note** for now we don't try to use O_NOATIME directly as the right value needs to be + shared per database in fact. It only makes a real difference for loose object + databases anyway, and they use it with the help of the ``flags`` parameter""" fd = os.open(filepath, os.O_RDONLY|getattr(os, 'O_BINARY', 0)|flags) try: return file_contents_ro(fd, stream, allow_mmap) @@ -189,7 +193,8 @@ def file_contents_ro_filepath(filepath, stream=False, allow_mmap=True, flags=0): # END assure file is closed def sliding_ro_buffer(filepath, flags=0): - """:return: a buffer compatible object which uses our mapped memory manager internally + """ + :return: a buffer compatible object which uses our mapped memory manager internally ready to read the whole given filepath""" return SlidingWindowMapBuffer(mman.make_cursor(filepath), flags=flags) @@ -254,7 +259,7 @@ class LockedFD(object): This type handles error correctly in that it will assure a consistent state on destruction. - :note: with this setup, parallel reading is not possible""" + **note** with this setup, parallel reading is not possible""" __slots__ = ("_filepath", '_fd', '_write') def __init__(self, filepath): @@ -283,7 +288,8 @@ def open(self, write=False, stream=False): and must not be closed directly :raise IOError: if the lock could not be retrieved :raise OSError: If the actual file could not be opened for reading - :note: must only be called once""" + + **note** must only be called once""" if self._write is not None: raise AssertionError("Called %s multiple times" % self.open) @@ -327,13 +333,15 @@ def commit(self): """When done writing, call this function to commit your changes into the actual file. The file descriptor will be closed, and the lockfile handled. - :note: can be called multiple times""" + + **Note** can be called multiple times""" self._end_writing(successful=True) def rollback(self): """Abort your operation without any changes. The file descriptor will be closed, and the lock released. - :note: can be called multiple times""" + + **Note** can be called multiple times""" self._end_writing(successful=False) def _end_writing(self, successful=True): diff --git a/setup.py b/setup.py index 86073971e..b5c8c7046 100755 --- a/setup.py +++ b/setup.py @@ -4,6 +4,7 @@ from distutils.command.build_ext import build_ext import os, sys +import gitdb as meta # wow, this is a mixed bag ... I am pretty upset about all of this ... setuptools_build_py_module = None @@ -69,11 +70,11 @@ def get_data_files(self): setup(cmdclass={'build_ext':build_ext_nofail}, name = "gitdb", - version = "0.5.3", + version = meta.__version__, description = "Git Object Database", - author = "Sebastian Thiel", - author_email = "byronimo@gmail.com", - url = "http://gitorious.org/git-python/gitdb", + author = meta.__author__, + author_email = meta.__contact__, + url = meta.__homepage__, packages = ('gitdb', 'gitdb.db', 'gitdb.test', 'gitdb.test.db', 'gitdb.test.performance'), package_data={ 'gitdb.test' : ['fixtures/packs/*', 'fixtures/objects/7b/*']}, package_dir = {'gitdb':'gitdb'}, From a5ed410aa0d3bed587214c3c017af2916b740da1 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 3 Jul 2011 13:39:19 +0200 Subject: [PATCH 0188/2375] removed test suite from being distributed. It didn't work properly anyway and I am not going to dig into the setup tools mess --- setup.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/setup.py b/setup.py index b5c8c7046..7924b5a07 100755 --- a/setup.py +++ b/setup.py @@ -4,7 +4,6 @@ from distutils.command.build_ext import build_ext import os, sys -import gitdb as meta # wow, this is a mixed bag ... I am pretty upset about all of this ... setuptools_build_py_module = None @@ -68,15 +67,23 @@ def get_data_files(self): setuptools_build_py_module.build_py._get_data_files = get_data_files # END apply setuptools patch too +# NOTE: This is currently duplicated from the gitdb.__init__ module, as we cannot +# satisfy the dependencies at installation time, unfortunately, due to inherent limitations +# of distutils, which cannot install the prerequesites of a package before the acutal package. +__author__ = "Sebastian Thiel" +__contact__ = "byronimo@gmail.com" +__homepage__ = "https://github.com/gitpython-developers/gitdb" +version_info = (0, 5, 3) +__version__ = '.'.join(str(i) for i in version_info) + setup(cmdclass={'build_ext':build_ext_nofail}, name = "gitdb", - version = meta.__version__, + version = __version__, description = "Git Object Database", - author = meta.__author__, - author_email = meta.__contact__, - url = meta.__homepage__, - packages = ('gitdb', 'gitdb.db', 'gitdb.test', 'gitdb.test.db', 'gitdb.test.performance'), - package_data={ 'gitdb.test' : ['fixtures/packs/*', 'fixtures/objects/7b/*']}, + author = __author__, + author_email = __contact__, + url = __homepage__, + packages = ('gitdb', 'gitdb.db'), package_dir = {'gitdb':'gitdb'}, ext_modules=[Extension('gitdb._perf', ['gitdb/_fun.c', 'gitdb/_delta_apply.c'], include_dirs=['gitdb'])], license = "BSD License", From aea587d9b414d7f150922c2923a1b9394d0d0543 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 5 Jul 2011 08:58:22 +0200 Subject: [PATCH 0189/2375] Added license info for packs --- LICENSE | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/LICENSE b/LICENSE index be11e73c1..0d6fe8bdb 100644 --- a/LICENSE +++ b/LICENSE @@ -28,3 +28,15 @@ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional Licenses +------------------- +The files at +gitdb/test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx +and +gitdb/test/fixtures/packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.pack +are licensed under GNU GPL as part of the git source repository, +see http://en.wikipedia.org/wiki/Git_%28software%29 for more information. + +They are not required for the actual operation, which is why they are not found +in the distribution package. From 9c3eb3dafd765ee2e8299b53a1d8d780d9a8f55b Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 5 Jul 2011 16:36:30 +0200 Subject: [PATCH 0190/2375] Fixed possible bug as a method was called using an old signature. Apparently this code branch never ran in the tests --- smmap/mman.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 9b08ae969..ef9d43df0 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -68,7 +68,7 @@ def _copy_from(self, rhs): self._size = rhs._size if self._region is not None: - self._region.increment_usage_count(1) + self._region.increment_usage_count() # END handle regions def __copy__(self): @@ -358,7 +358,6 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): # END handle array assert r.includes_ofs(offset) - #assert r.includes_ofs(offset+size-1) return r #}END internal methods From 0e64168dd3f43b02857e60183d40c86480f01dc7 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 5 Jul 2011 15:03:16 +0200 Subject: [PATCH 0191/2375] pack: updated to use its cursor properly, which will be required if huge packs should be handled. This reduces performance as each access requires the windows to be checked/adjusted, but that is how it is. This should be circumvented using other backends, like the one of the gitcmd or libgit2. Default is now the sliding memory map manager --- gitdb/pack.py | 32 +++++++++++++++++++------------- gitdb/util.py | 3 ++- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/gitdb/pack.py b/gitdb/pack.py index d840441e9..c6d1cc313 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -73,7 +73,7 @@ #{ Utilities -def pack_object_at(data, offset, as_stream): +def pack_object_at(cursor, offset, as_stream): """ :return: Tuple(abs_data_offset, PackInfo|PackStream) an object of the correct type according to the type_id of the object. @@ -83,7 +83,7 @@ def pack_object_at(data, offset, as_stream): :parma offset: offset in to the data at which the object information is located :param as_stream: if True, a stream object will be returned that can read the data, otherwise you receive an info object only""" - data = buffer(data, offset) + data = cursor.use_region(offset).buffer() type_id, uncomp_size, data_rela_offset = pack_object_header_info(data) total_rela_offset = None # set later, actual offset until data stream begins delta_info = None @@ -269,6 +269,10 @@ def _set_cache_(self, attr): # that we can actually write to the location - it could be a read-only # alternate for instance self._cursor = mman.make_cursor(self._indexpath).use_region() + # We will assume that the index will always fully fit into memory ! + if mman.window_size() > 0 and self._cursor.file_size() > mman.window_size(): + raise AssertionError("The index file at %s is too large to fit into a mapped window (%i > %i). This is a limitation of the implementation" % (self._indexpath, self._cursor.file_size(), mman.window_size())) + #END assert window size else: # now its time to initialize everything - if we are here, someone wants # to access the fanout table or related properties @@ -528,13 +532,13 @@ def _set_cache_(self, attr): def _iter_objects(self, start_offset, as_stream=True): """Handle the actual iteration of objects within this pack""" - data = self._cursor.map() - content_size = len(data) - self.footer_size + c = self._cursor + content_size = c.file_size() - self.footer_size cur_offset = start_offset or self.first_object_offset null = NullStream() while cur_offset < content_size: - data_offset, ostream = pack_object_at(data, cur_offset, True) + data_offset, ostream = pack_object_at(c, cur_offset, True) # scrub the stream to the end - this decompresses the object, but yields # the amount of compressed bytes we need to get to the next offset @@ -563,12 +567,14 @@ def version(self): def data(self): """ :return: read-only data of this pack. It provides random access and usually - is a memory map""" - return self._cursor.map() + is a memory map. + :note: This method is unsafe as it returns a window into a file which might be larger than than the actual window size""" + # can use map as we are starting at offset 0. Otherwise we would have to use buffer() + return self._cursor.use_region().map() def checksum(self): """:return: 20 byte sha1 hash on all object sha's contained in this file""" - return self._cursor.map()[-20:] + return self._cursor.use_region(self._cursor.file_size()-20).buffer()[:] def path(self): """:return: path to the packfile""" @@ -587,9 +593,9 @@ def collect_streams(self, offset): If the object at offset is no delta, the size of the list is 1. :param offset: specifies the first byte of the object within this pack""" out = list() - data = self._cursor.map() + c = self._cursor while True: - ostream = pack_object_at(data, offset, True)[1] + ostream = pack_object_at(c, offset, True)[1] out.append(ostream) if ostream.type_id == OFS_DELTA: offset = ostream.pack_offset - ostream.delta_info @@ -611,14 +617,14 @@ def info(self, offset): :param offset: byte offset :return: OPackInfo instance, the actual type differs depending on the type_id attribute""" - return pack_object_at(self._cursor.map(), offset or self.first_object_offset, False)[1] + return pack_object_at(self._cursor, offset or self.first_object_offset, False)[1] def stream(self, offset): """Retrieve an object at the given file-relative offset as stream along with its information :param offset: byte offset :return: OPackStream instance, the actual type differs depending on the type_id attribute""" - return pack_object_at(self._cursor.map(), offset or self.first_object_offset, True)[1] + return pack_object_at(self._cursor, offset or self.first_object_offset, True)[1] def stream_iter(self, start_offset=0): """ @@ -702,7 +708,7 @@ def _object(self, sha, as_stream, index=-1): sha = self._index.sha(index) # END assure sha is present ( in output ) offset = self._index.offset(index) - type_id, uncomp_size, data_rela_offset = pack_object_header_info(buffer(self._pack._cursor.map(), offset)) + type_id, uncomp_size, data_rela_offset = pack_object_header_info(self._pack._cursor.use_region(offset).buffer()) if as_stream: if type_id not in delta_types: packstream = self._pack.stream(offset) diff --git a/gitdb/util.py b/gitdb/util.py index 23784de3f..e96c133e8 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -25,12 +25,13 @@ from async import ThreadPool from smmap import ( StaticWindowMapManager, + SlidingWindowMapManager, SlidingWindowMapBuffer ) # initialize our global memory manager instance # Use it to free cached (and unused) resources. -mman = StaticWindowMapManager() +mman = SlidingWindowMapManager() try: import hashlib From ef5dc3d968b3aeed16a02ec705f89b72ad46fa84 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 5 Jul 2011 16:40:54 +0200 Subject: [PATCH 0192/2375] Optimized test_pack_streaming not to cache the objects anymore. Instead an iterator is provided which does the job. Previously it would easily use 750 MB of ram to keep all the associated objects, more than 350k. Still a lot of memory for just 350k objects, but its python after all --- gitdb/ext/smmap | 2 +- gitdb/test/performance/test_pack_streaming.py | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index f097bd611..9c3eb3daf 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit f097bd611a82289d6bb95074fdf596332cb1c980 +Subproject commit 9c3eb3dafd765ee2e8299b53a1d8d780d9a8f55b diff --git a/gitdb/test/performance/test_pack_streaming.py b/gitdb/test/performance/test_pack_streaming.py index 795ed1e26..3c40ed0fb 100644 --- a/gitdb/test/performance/test_pack_streaming.py +++ b/gitdb/test/performance/test_pack_streaming.py @@ -40,10 +40,9 @@ def test_pack_writing(self): count = 0 total_size = 0 st = time() - objs = list() for sha in pdb.sha_iter(): count += 1 - objs.append(pdb.stream(sha)) + pdb.stream(sha) if count == ni: break #END gather objects for pack-writing @@ -51,7 +50,7 @@ def test_pack_writing(self): print >> sys.stderr, "PDB Streaming: Got %i streams by sha in in %f s ( %f streams/s )" % (ni, elapsed, ni / elapsed) st = time() - PackEntity.write_pack(objs, ostream.write) + PackEntity.write_pack((pdb.stream(sha) for sha in pdb.sha_iter()), ostream.write, object_count=ni) elapsed = time() - st total_kb = ostream.bytes_written() / 1000 print >> sys.stderr, "PDB Streaming: Wrote pack of size %i kb in %f s (%f kb/s)" % (total_kb, elapsed, total_kb/elapsed) From a4deb8461e6fbca0306a24f22b0c494679ad4757 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 5 Jul 2011 16:45:39 +0200 Subject: [PATCH 0193/2375] wrote change log for next release. Choosing memory manager type based on the actual python version for best efficiency --- doc/source/changes.rst | 5 +++++ gitdb/util.py | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 999cc1309..839bf16a8 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,11 @@ Changelog ######### +***** +0.5.4 +***** +* Adjusted implementation to use the SlidingMemoryManager by default in python 2.6 for efficiency reasons. In Python 2.4, the StaticMemoryManager will be used instead. + ***** 0.5.3 ***** diff --git a/gitdb/util.py b/gitdb/util.py index e96c133e8..013f5fc78 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -31,7 +31,11 @@ # initialize our global memory manager instance # Use it to free cached (and unused) resources. -mman = SlidingWindowMapManager() +if sys.version_info[1] < 6: + mman = StaticWindowMapManager() +else: + mman = SlidingWindowMapManager() +#END handle mman try: import hashlib From d13e3aeb168645965720ddec1f469e05771563ef Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 5 Jul 2011 16:55:32 +0200 Subject: [PATCH 0194/2375] updated changelog, bumped version --- doc/source/changes.rst | 6 ++++++ smmap/__init__.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index ee17e0af0..03148fb31 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,12 @@ Changelog ######### +********** +v0.8.1 +********** +- A single bugfix + + ********** v0.8.0 ********** diff --git a/smmap/__init__.py b/smmap/__init__.py index 769858fa5..ae6e72eba 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/Byron/smmap" -version_info = (0, 8, 0) +version_info = (0, 8, 1) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From 656a2e0b4da7d60ac638d1615751a89efb3a4eee Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 5 Jul 2011 17:00:27 +0200 Subject: [PATCH 0195/2375] bumped version to 0.5.4 --- gitdb/__init__.py | 2 +- gitdb/ext/smmap | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 91359105c..800b292da 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -27,7 +27,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 5, 3) +version_info = (0, 5, 4) __version__ = '.'.join(str(i) for i in version_info) diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 9c3eb3daf..d13e3aeb1 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 9c3eb3dafd765ee2e8299b53a1d8d780d9a8f55b +Subproject commit d13e3aeb168645965720ddec1f469e05771563ef diff --git a/setup.py b/setup.py index 7924b5a07..62bc6d007 100755 --- a/setup.py +++ b/setup.py @@ -73,7 +73,7 @@ def get_data_files(self): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 5, 3) +version_info = (0, 5, 4) __version__ = '.'.join(str(i) for i in version_info) setup(cmdclass={'build_ext':build_ext_nofail}, From e2b170a80462255dcc2003380db3547f55d8f14d Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Fri, 8 Jul 2011 08:13:00 -0400 Subject: [PATCH 0196/2375] Workaround for #1 --- smmap/mman.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index ef9d43df0..f5b7efbd1 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -52,11 +52,14 @@ def _destroy(self): if self._rlist is not None: # Actual client count, which doesn't include the reference kept by the manager, nor ours # as we are about to be deleted - num_clients = self._rlist.client_count() - 2 - if num_clients == 0 and len(self._rlist) == 0: - # Free all resources associated with the mapped file - self._manager._fdict.pop(self._rlist.path_or_fd()) - #END remove regions list from manager + try: + num_clients = self._rlist.client_count() - 2 + if num_clients == 0 and len(self._rlist) == 0: + # Free all resources associated with the mapped file + self._manager._fdict.pop(self._rlist.path_or_fd()) + # END remove regions list from manager + except TypeError: + pass #END handle regions def _copy_from(self, rhs): From bdc1258abb48328a389720df2ffc404692add426 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 29 Aug 2011 21:45:59 +0200 Subject: [PATCH 0197/2375] Added LICENSE file containing a copy of (new)BSD --- LICENSE | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..710010f1f --- /dev/null +++ b/LICENSE @@ -0,0 +1,30 @@ +Copyright (C) 2010, 2011 Sebastian Thiel and contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +* Neither the name of the async project nor the names of +its contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + From 40fd4f31ab594dcfe049032c62ec61d2f0c3e492 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 18 Jan 2012 23:09:53 +0100 Subject: [PATCH 0198/2375] Added some more in-code comments to clarify why that exception is caught --- smmap/mman.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/smmap/mman.py b/smmap/mman.py index f5b7efbd1..7b0984358 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -59,7 +59,12 @@ def _destroy(self): self._manager._fdict.pop(self._rlist.path_or_fd()) # END remove regions list from manager except TypeError: + # sometimes, during shutdown, getrefcount is None. Its possible + # to re-import it, however, its probably better to just ignore + # this python problem (for now). + # The next step is to get rid of the error prone getrefcount alltogether. pass + #END exception handling #END handle regions def _copy_from(self, rhs): From 360a8956fe73a0a96315e946f52737569d990369 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 18 Jan 2012 23:12:02 +0100 Subject: [PATCH 0199/2375] Bumped version to 0.8.2 --- smmap/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smmap/__init__.py b/smmap/__init__.py index ae6e72eba..a10cd5c99 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/Byron/smmap" -version_info = (0, 8, 1) +version_info = (0, 8, 2) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From e96d2c381ef06667726eb745c67357de9d2a88fb Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 23 Jul 2012 20:56:03 +0200 Subject: [PATCH 0200/2375] Submodules now use the http protocol to facilitate checkout in corporate networks --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 5dfd8e993..062ec5ba1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "async"] path = gitdb/ext/async - url = git://github.com/gitpython-developers/async.git + url = http://github.com/gitpython-developers/async.git [submodule "smmap"] path = gitdb/ext/smmap - url = git://github.com/Byron/smmap.git + url = http://github.com/Byron/smmap.git From ec6998f503e4619cd6bdecbbf372552ea126900a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 23 Jul 2012 21:12:03 +0200 Subject: [PATCH 0201/2375] Updated submodules to latest version --- gitdb/ext/async | 2 +- gitdb/ext/smmap | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gitdb/ext/async b/gitdb/ext/async index 10310824c..039c1d5c2 160000 --- a/gitdb/ext/async +++ b/gitdb/ext/async @@ -1 +1 @@ -Subproject commit 10310824c001deab8fea85b88ebda0696f964b3e +Subproject commit 039c1d5c26bc2ceaa9e55082efae2068d9873e45 diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index d13e3aeb1..360a8956f 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit d13e3aeb168645965720ddec1f469e05771563ef +Subproject commit 360a8956fe73a0a96315e946f52737569d990369 From 0328caa516fffdbb5f28fd59798a9775aa2b05f5 Mon Sep 17 00:00:00 2001 From: David Black Date: Fri, 2 Nov 2012 10:43:48 +1100 Subject: [PATCH 0202/2375] Update gitmodules to point to the https location of the git repositories. Signed-off-by: David --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 062ec5ba1..978105388 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "async"] path = gitdb/ext/async - url = http://github.com/gitpython-developers/async.git + url = https://github.com/gitpython-developers/async.git [submodule "smmap"] path = gitdb/ext/smmap - url = http://github.com/Byron/smmap.git + url = https://github.com/Byron/smmap.git From 1b3ab5598e93369282502d049d64cb2ca12839cb Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 9 Feb 2014 20:50:30 +0100 Subject: [PATCH 0203/2375] tabs to spaces --- setup.py | 0 smmap/buf.py | 246 ++++---- smmap/exc.py | 6 +- smmap/mman.py | 1122 +++++++++++++++++------------------ smmap/test/lib.py | 96 +-- smmap/test/test_buf.py | 204 +++---- smmap/test/test_mman.py | 400 ++++++------- smmap/test/test_tutorial.py | 160 ++--- smmap/test/test_util.py | 212 +++---- smmap/util.py | 464 +++++++-------- 10 files changed, 1455 insertions(+), 1455 deletions(-) mode change 100755 => 100644 setup.py diff --git a/setup.py b/setup.py old mode 100755 new mode 100644 diff --git a/smmap/buf.py b/smmap/buf.py index 00ddbacd9..255c6b54d 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -6,129 +6,129 @@ __all__ = ["SlidingWindowMapBuffer"] class SlidingWindowMapBuffer(object): - """A buffer like object which allows direct byte-wise object and slicing into - memory of a mapped file. The mapping is controlled by the provided cursor. - - The buffer is relative, that is if you map an offset, index 0 will map to the - first byte at the offset you used during initialization or begin_access - - **Note:** Although this type effectively hides the fact that there are mapped windows - underneath, it can unfortunately not be used in any non-pure python method which - needs a buffer or string""" - __slots__ = ( - '_c', # our cursor - '_size', # our supposed size - ) - - - def __init__(self, cursor = None, offset = 0, size = sys.maxint, flags = 0): - """Initalize the instance to operate on the given cursor. - :param cursor: if not None, the associated cursor to the file you want to access - If None, you have call begin_access before using the buffer and provide a cursor - :param offset: absolute offset in bytes - :param size: the total size of the mapping. Defaults to the maximum possible size - From that point on, the __len__ of the buffer will be the given size or the file size. - If the size is larger than the mappable area, you can only access the actually available - area, although the length of the buffer is reported to be your given size. - Hence it is in your own interest to provide a proper size ! - :param flags: Additional flags to be passed to os.open - :raise ValueError: if the buffer could not achieve a valid state""" - self._c = cursor - if cursor and not self.begin_access(cursor, offset, size, flags): - raise ValueError("Failed to allocate the buffer - probably the given offset is out of bounds") - # END handle offset + """A buffer like object which allows direct byte-wise object and slicing into + memory of a mapped file. The mapping is controlled by the provided cursor. + + The buffer is relative, that is if you map an offset, index 0 will map to the + first byte at the offset you used during initialization or begin_access + + **Note:** Although this type effectively hides the fact that there are mapped windows + underneath, it can unfortunately not be used in any non-pure python method which + needs a buffer or string""" + __slots__ = ( + '_c', # our cursor + '_size', # our supposed size + ) + + + def __init__(self, cursor = None, offset = 0, size = sys.maxint, flags = 0): + """Initalize the instance to operate on the given cursor. + :param cursor: if not None, the associated cursor to the file you want to access + If None, you have call begin_access before using the buffer and provide a cursor + :param offset: absolute offset in bytes + :param size: the total size of the mapping. Defaults to the maximum possible size + From that point on, the __len__ of the buffer will be the given size or the file size. + If the size is larger than the mappable area, you can only access the actually available + area, although the length of the buffer is reported to be your given size. + Hence it is in your own interest to provide a proper size ! + :param flags: Additional flags to be passed to os.open + :raise ValueError: if the buffer could not achieve a valid state""" + self._c = cursor + if cursor and not self.begin_access(cursor, offset, size, flags): + raise ValueError("Failed to allocate the buffer - probably the given offset is out of bounds") + # END handle offset - def __del__(self): - self.end_access() - - def __len__(self): - return self._size - - def __getitem__(self, i): - c = self._c - assert c.is_valid() - if i < 0: - i = self._size + i - if not c.includes_ofs(i): - c.use_region(i, 1) - # END handle region usage - return c.buffer()[i-c.ofs_begin()] - - def __getslice__(self, i, j): - c = self._c - # fast path, slice fully included - safes a concatenate operation and - # should be the default - assert c.is_valid() - if i < 0: - i = self._size + i - if j == sys.maxint: - j = self._size - if j < 0: - j = self._size + j - if (c.ofs_begin() <= i) and (j < c.ofs_end()): - b = c.ofs_begin() - return c.buffer()[i-b:j-b] - else: - l = j-i # total length - ofs = i - # Keeping tokens in a list could possible be faster, but the list - # overhead outweighs the benefits (tested) ! - md = str() - while l: - c.use_region(ofs, l) - assert c.is_valid() - d = c.buffer()[:l] - ofs += len(d) - l -= len(d) - md += d - #END while there are bytes to read - return md - # END fast or slow path - #{ Interface - - def begin_access(self, cursor = None, offset = 0, size = sys.maxint, flags = 0): - """Call this before the first use of this instance. The method was already - called by the constructor in case sufficient information was provided. - - For more information no the parameters, see the __init__ method - :param path: if cursor is None the existing one will be used. - :return: True if the buffer can be used""" - if cursor: - self._c = cursor - #END update our cursor - - # reuse existing cursors if possible - if self._c is not None and self._c.is_associated(): - res = self._c.use_region(offset, size, flags).is_valid() - if res: - # if given size is too large or default, we computer a proper size - # If its smaller, we assume the combination between offset and size - # as chosen by the user is correct and use it ! - # If not, the user is in trouble. - if size > self._c.file_size(): - size = self._c.file_size() - offset - #END handle size - self._size = size - #END set size - return res - # END use our cursor - return False - - def end_access(self): - """Call this method once you are done using the instance. It is automatically - called on destruction, and should be called just in time to allow system - resources to be freed. - - Once you called end_access, you must call begin access before reusing this instance!""" - self._size = 0 - if self._c is not None: - self._c.unuse_region() - #END unuse region - - def cursor(self): - """:return: the currently set cursor which provides access to the data""" - return self._c - - #}END interface + def __del__(self): + self.end_access() + + def __len__(self): + return self._size + + def __getitem__(self, i): + c = self._c + assert c.is_valid() + if i < 0: + i = self._size + i + if not c.includes_ofs(i): + c.use_region(i, 1) + # END handle region usage + return c.buffer()[i-c.ofs_begin()] + + def __getslice__(self, i, j): + c = self._c + # fast path, slice fully included - safes a concatenate operation and + # should be the default + assert c.is_valid() + if i < 0: + i = self._size + i + if j == sys.maxint: + j = self._size + if j < 0: + j = self._size + j + if (c.ofs_begin() <= i) and (j < c.ofs_end()): + b = c.ofs_begin() + return c.buffer()[i-b:j-b] + else: + l = j-i # total length + ofs = i + # Keeping tokens in a list could possible be faster, but the list + # overhead outweighs the benefits (tested) ! + md = str() + while l: + c.use_region(ofs, l) + assert c.is_valid() + d = c.buffer()[:l] + ofs += len(d) + l -= len(d) + md += d + #END while there are bytes to read + return md + # END fast or slow path + #{ Interface + + def begin_access(self, cursor = None, offset = 0, size = sys.maxint, flags = 0): + """Call this before the first use of this instance. The method was already + called by the constructor in case sufficient information was provided. + + For more information no the parameters, see the __init__ method + :param path: if cursor is None the existing one will be used. + :return: True if the buffer can be used""" + if cursor: + self._c = cursor + #END update our cursor + + # reuse existing cursors if possible + if self._c is not None and self._c.is_associated(): + res = self._c.use_region(offset, size, flags).is_valid() + if res: + # if given size is too large or default, we computer a proper size + # If its smaller, we assume the combination between offset and size + # as chosen by the user is correct and use it ! + # If not, the user is in trouble. + if size > self._c.file_size(): + size = self._c.file_size() - offset + #END handle size + self._size = size + #END set size + return res + # END use our cursor + return False + + def end_access(self): + """Call this method once you are done using the instance. It is automatically + called on destruction, and should be called just in time to allow system + resources to be freed. + + Once you called end_access, you must call begin access before reusing this instance!""" + self._size = 0 + if self._c is not None: + self._c.unuse_region() + #END unuse region + + def cursor(self): + """:return: the currently set cursor which provides access to the data""" + return self._c + + #}END interface diff --git a/smmap/exc.py b/smmap/exc.py index a090d24d5..f0ed7dcd8 100644 --- a/smmap/exc.py +++ b/smmap/exc.py @@ -1,7 +1,7 @@ """Module with system exceptions""" class MemoryManagerError(Exception): - """Base class for all exceptions thrown by the memory manager""" - + """Base class for all exceptions thrown by the memory manager""" + class RegionCollectionError(MemoryManagerError): - """Thrown if a memory region could not be collected, or if no region for collection was found""" + """Thrown if a memory region could not be collected, or if no region for collection was found""" diff --git a/smmap/mman.py b/smmap/mman.py index 7b0984358..97c42c5bb 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -1,11 +1,11 @@ """Module containnig a memory memory manager which provides a sliding window on a number of memory mapped files""" from util import ( - MapWindow, - MapRegion, - MapRegionList, - is_64_bit, - align_to_mmap - ) + MapWindow, + MapRegion, + MapRegionList, + is_64_bit, + align_to_mmap + ) from weakref import ref import sys @@ -18,564 +18,564 @@ class WindowCursor(object): - """ - Pointer into the mapped region of the memory manager, keeping the map - alive until it is destroyed and no other client uses it. + """ + Pointer into the mapped region of the memory manager, keeping the map + alive until it is destroyed and no other client uses it. - Cursors should not be created manually, but are instead returned by the SlidingWindowMapManager - - **Note:**: The current implementation is suited for static and sliding window managers, but it also means - that it must be suited for the somewhat quite different sliding manager. It could be improved, but - I see no real need to do so.""" - __slots__ = ( - '_manager', # the manger keeping all file regions - '_rlist', # a regions list with regions for our file - '_region', # our current region or None - '_ofs', # relative offset from the actually mapped area to our start area - '_size' # maximum size we should provide - ) - - def __init__(self, manager = None, regions = None): - self._manager = manager - self._rlist = regions - self._region = None - self._ofs = 0 - self._size = 0 - - def __del__(self): - self._destroy() - - def _destroy(self): - """Destruction code to decrement counters""" - self.unuse_region() - - if self._rlist is not None: - # Actual client count, which doesn't include the reference kept by the manager, nor ours - # as we are about to be deleted - try: - num_clients = self._rlist.client_count() - 2 - if num_clients == 0 and len(self._rlist) == 0: - # Free all resources associated with the mapped file - self._manager._fdict.pop(self._rlist.path_or_fd()) - # END remove regions list from manager - except TypeError: - # sometimes, during shutdown, getrefcount is None. Its possible - # to re-import it, however, its probably better to just ignore - # this python problem (for now). - # The next step is to get rid of the error prone getrefcount alltogether. - pass - #END exception handling - #END handle regions - - def _copy_from(self, rhs): - """Copy all data from rhs into this instance, handles usage count""" - self._manager = rhs._manager - self._rlist = rhs._rlist - self._region = rhs._region - self._ofs = rhs._ofs - self._size = rhs._size - - if self._region is not None: - self._region.increment_usage_count() - # END handle regions - - def __copy__(self): - """copy module interface""" - cpy = type(self)() - cpy._copy_from(self) - return cpy - - #{ Interface - def assign(self, rhs): - """Assign rhs to this instance. This is required in order to get a real copy. - Alternativly, you can copy an existing instance using the copy module""" - self._destroy() - self._copy_from(rhs) - - def use_region(self, offset = 0, size = 0, flags = 0): - """Assure we point to a window which allows access to the given offset into the file - - :param offset: absolute offset in bytes into the file - :param size: amount of bytes to map. If 0, all available bytes will be mapped - :param flags: additional flags to be given to os.open in case a file handle is initially opened - for mapping. Has no effect if a region can actually be reused. - :return: this instance - it should be queried for whether it points to a valid memory region. - This is not the case if the mapping failed becaues we reached the end of the file - - **Note:**: The size actually mapped may be smaller than the given size. If that is the case, - either the file has reached its end, or the map was created between two existing regions""" - need_region = True - man = self._manager - fsize = self._rlist.file_size() - size = min(size or fsize, man.window_size() or fsize) # clamp size to window size - - if self._region is not None: - if self._region.includes_ofs(offset): - need_region = False - else: - self.unuse_region() - # END handle existing region - # END check existing region - - # offset too large ? - if offset >= fsize: - return self - #END handle offset - - if need_region: - self._region = man._obtain_region(self._rlist, offset, size, flags, False) - #END need region handling - - self._region.increment_usage_count() - self._ofs = offset - self._region._b - self._size = min(size, self._region.ofs_end() - offset) - - return self - - def unuse_region(self): - """Unuse the ucrrent region. Does nothing if we have no current region - - **Note:** the cursor unuses the region automatically upon destruction. It is recommended - to unuse the region once you are done reading from it in persistent cursors as it - helps to free up resource more quickly""" - self._region = None - # note: should reset ofs and size, but we spare that for performance. Its not - # allowed to query information if we are not valid ! + Cursors should not be created manually, but are instead returned by the SlidingWindowMapManager + + **Note:**: The current implementation is suited for static and sliding window managers, but it also means + that it must be suited for the somewhat quite different sliding manager. It could be improved, but + I see no real need to do so.""" + __slots__ = ( + '_manager', # the manger keeping all file regions + '_rlist', # a regions list with regions for our file + '_region', # our current region or None + '_ofs', # relative offset from the actually mapped area to our start area + '_size' # maximum size we should provide + ) + + def __init__(self, manager = None, regions = None): + self._manager = manager + self._rlist = regions + self._region = None + self._ofs = 0 + self._size = 0 + + def __del__(self): + self._destroy() + + def _destroy(self): + """Destruction code to decrement counters""" + self.unuse_region() + + if self._rlist is not None: + # Actual client count, which doesn't include the reference kept by the manager, nor ours + # as we are about to be deleted + try: + num_clients = self._rlist.client_count() - 2 + if num_clients == 0 and len(self._rlist) == 0: + # Free all resources associated with the mapped file + self._manager._fdict.pop(self._rlist.path_or_fd()) + # END remove regions list from manager + except TypeError: + # sometimes, during shutdown, getrefcount is None. Its possible + # to re-import it, however, its probably better to just ignore + # this python problem (for now). + # The next step is to get rid of the error prone getrefcount alltogether. + pass + #END exception handling + #END handle regions + + def _copy_from(self, rhs): + """Copy all data from rhs into this instance, handles usage count""" + self._manager = rhs._manager + self._rlist = rhs._rlist + self._region = rhs._region + self._ofs = rhs._ofs + self._size = rhs._size + + if self._region is not None: + self._region.increment_usage_count() + # END handle regions + + def __copy__(self): + """copy module interface""" + cpy = type(self)() + cpy._copy_from(self) + return cpy + + #{ Interface + def assign(self, rhs): + """Assign rhs to this instance. This is required in order to get a real copy. + Alternativly, you can copy an existing instance using the copy module""" + self._destroy() + self._copy_from(rhs) + + def use_region(self, offset = 0, size = 0, flags = 0): + """Assure we point to a window which allows access to the given offset into the file + + :param offset: absolute offset in bytes into the file + :param size: amount of bytes to map. If 0, all available bytes will be mapped + :param flags: additional flags to be given to os.open in case a file handle is initially opened + for mapping. Has no effect if a region can actually be reused. + :return: this instance - it should be queried for whether it points to a valid memory region. + This is not the case if the mapping failed becaues we reached the end of the file + + **Note:**: The size actually mapped may be smaller than the given size. If that is the case, + either the file has reached its end, or the map was created between two existing regions""" + need_region = True + man = self._manager + fsize = self._rlist.file_size() + size = min(size or fsize, man.window_size() or fsize) # clamp size to window size + + if self._region is not None: + if self._region.includes_ofs(offset): + need_region = False + else: + self.unuse_region() + # END handle existing region + # END check existing region + + # offset too large ? + if offset >= fsize: + return self + #END handle offset + + if need_region: + self._region = man._obtain_region(self._rlist, offset, size, flags, False) + #END need region handling + + self._region.increment_usage_count() + self._ofs = offset - self._region._b + self._size = min(size, self._region.ofs_end() - offset) + + return self + + def unuse_region(self): + """Unuse the ucrrent region. Does nothing if we have no current region + + **Note:** the cursor unuses the region automatically upon destruction. It is recommended + to unuse the region once you are done reading from it in persistent cursors as it + helps to free up resource more quickly""" + self._region = None + # note: should reset ofs and size, but we spare that for performance. Its not + # allowed to query information if we are not valid ! - def buffer(self): - """Return a buffer object which allows access to our memory region from our offset - to the window size. Please note that it might be smaller than you requested when calling use_region() - - **Note:** You can only obtain a buffer if this instance is_valid() ! - - **Note:** buffers should not be cached passed the duration of your access as it will - prevent resources from being freed even though they might not be accounted for anymore !""" - return buffer(self._region.buffer(), self._ofs, self._size) - - def map(self): - """ - :return: the underlying raw memory map. Please not that the offset and size is likely to be different - to what you set as offset and size. Use it only if you are sure about the region it maps, which is the whole - file in case of StaticWindowMapManager""" - return self._region.map() - - def is_valid(self): - """:return: True if we have a valid and usable region""" - return self._region is not None - - def is_associated(self): - """:return: True if we are associated with a specific file already""" - return self._rlist is not None - - def ofs_begin(self): - """:return: offset to the first byte pointed to by our cursor - - **Note:** only if is_valid() is True""" - return self._region._b + self._ofs - - def ofs_end(self): - """:return: offset to one past the last available byte""" - # unroll method calls for performance ! - return self._region._b + self._ofs + self._size - - def size(self): - """:return: amount of bytes we point to""" - return self._size - - def region_ref(self): - """:return: weak ref to our mapped region. - :raise AssertionError: if we have no current region. This is only useful for debugging""" - if self._region is None: - raise AssertionError("region not set") - return ref(self._region) - - def includes_ofs(self, ofs): - """:return: True if the given absolute offset is contained in the cursors - current region - - **Note:** cursor must be valid for this to work""" - # unroll methods - return (self._region._b + self._ofs) <= ofs < (self._region._b + self._ofs + self._size) - - def file_size(self): - """:return: size of the underlying file""" - return self._rlist.file_size() - - def path_or_fd(self): - """:return: path or file decriptor of the underlying mapped file""" - return self._rlist.path_or_fd() + def buffer(self): + """Return a buffer object which allows access to our memory region from our offset + to the window size. Please note that it might be smaller than you requested when calling use_region() + + **Note:** You can only obtain a buffer if this instance is_valid() ! + + **Note:** buffers should not be cached passed the duration of your access as it will + prevent resources from being freed even though they might not be accounted for anymore !""" + return buffer(self._region.buffer(), self._ofs, self._size) + + def map(self): + """ + :return: the underlying raw memory map. Please not that the offset and size is likely to be different + to what you set as offset and size. Use it only if you are sure about the region it maps, which is the whole + file in case of StaticWindowMapManager""" + return self._region.map() + + def is_valid(self): + """:return: True if we have a valid and usable region""" + return self._region is not None + + def is_associated(self): + """:return: True if we are associated with a specific file already""" + return self._rlist is not None + + def ofs_begin(self): + """:return: offset to the first byte pointed to by our cursor + + **Note:** only if is_valid() is True""" + return self._region._b + self._ofs + + def ofs_end(self): + """:return: offset to one past the last available byte""" + # unroll method calls for performance ! + return self._region._b + self._ofs + self._size + + def size(self): + """:return: amount of bytes we point to""" + return self._size + + def region_ref(self): + """:return: weak ref to our mapped region. + :raise AssertionError: if we have no current region. This is only useful for debugging""" + if self._region is None: + raise AssertionError("region not set") + return ref(self._region) + + def includes_ofs(self, ofs): + """:return: True if the given absolute offset is contained in the cursors + current region + + **Note:** cursor must be valid for this to work""" + # unroll methods + return (self._region._b + self._ofs) <= ofs < (self._region._b + self._ofs + self._size) + + def file_size(self): + """:return: size of the underlying file""" + return self._rlist.file_size() + + def path_or_fd(self): + """:return: path or file decriptor of the underlying mapped file""" + return self._rlist.path_or_fd() - def path(self): - """:return: path of the underlying mapped file - :raise ValueError: if attached path is not a path""" - if isinstance(self._rlist.path_or_fd(), int): - raise ValueError("Path queried although mapping was applied to a file descriptor") - # END handle type - return self._rlist.path_or_fd() - - def fd(self): - """:return: file descriptor used to create the underlying mapping. - - **Note:** it is not required to be valid anymore - :raise ValueError: if the mapping was not created by a file descriptor""" - if isinstance(self._rlist.path_or_fd(), basestring): - raise ValueError("File descriptor queried although mapping was generated from path") - #END handle type - return self._rlist.path_or_fd() - - #} END interface - - + def path(self): + """:return: path of the underlying mapped file + :raise ValueError: if attached path is not a path""" + if isinstance(self._rlist.path_or_fd(), int): + raise ValueError("Path queried although mapping was applied to a file descriptor") + # END handle type + return self._rlist.path_or_fd() + + def fd(self): + """:return: file descriptor used to create the underlying mapping. + + **Note:** it is not required to be valid anymore + :raise ValueError: if the mapping was not created by a file descriptor""" + if isinstance(self._rlist.path_or_fd(), basestring): + raise ValueError("File descriptor queried although mapping was generated from path") + #END handle type + return self._rlist.path_or_fd() + + #} END interface + + class StaticWindowMapManager(object): - """Provides a manager which will produce single size cursors that are allowed - to always map the whole file. - - Clients must be written to specifically know that they are accessing their data - through a StaticWindowMapManager, as they otherwise have to deal with their window size. - - These clients would have to use a SlidingWindowMapBuffer to hide this fact. - - This type will always use a maximum window size, and optimize certain methods to - acomodate this fact""" - - __slots__ = [ - '_fdict', # mapping of path -> StorageHelper (of some kind - '_window_size', # maximum size of a window - '_max_memory_size', # maximum amount ofmemory we may allocate - '_max_handle_count', # maximum amount of handles to keep open - '_memory_size', # currently allocated memory size - '_handle_count', # amount of currently allocated file handles - ] - - #{ Configuration - MapRegionListCls = MapRegionList - MapWindowCls = MapWindow - MapRegionCls = MapRegion - WindowCursorCls = WindowCursor - #} END configuration - - _MB_in_bytes = 1024 * 1024 - - def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys.maxint): - """initialize the manager with the given parameters. - :param window_size: if -1, a default window size will be chosen depending on - the operating system's architechture. It will internally be quantified to a multiple of the page size - If 0, the window may have any size, which basically results in mapping the whole file at one - :param max_memory_size: maximum amount of memory we may map at once before releasing mapped regions. - If 0, a viable default iwll be set dependning on the system's architecture. - It is a soft limit that is tried to be kept, but nothing bad happens if we have to overallocate - :param max_open_handles: if not maxin, limit the amount of open file handles to the given number. - Otherwise the amount is only limited by the system iteself. If a system or soft limit is hit, - the manager will free as many handles as posisble""" - self._fdict = dict() - self._window_size = window_size - self._max_memory_size = max_memory_size - self._max_handle_count = max_open_handles - self._memory_size = 0 - self._handle_count = 0 - - if window_size < 0: - coeff = 32 - if is_64_bit(): - coeff = 1024 - #END handle arch - self._window_size = coeff * self._MB_in_bytes - # END handle max window size - - if max_memory_size == 0: - coeff = 512 - if is_64_bit(): - coeff = 8192 - #END handle arch - self._max_memory_size = coeff * self._MB_in_bytes - #END handle max memory size - - #{ Internal Methods - - def _collect_lru_region(self, size): - """Unmap the region which was least-recently used and has no client - :param size: size of the region we want to map next (assuming its not already mapped partially or full - if 0, we try to free any available region - :return: Amount of freed regions - - **Note:** We don't raise exceptions anymore, in order to keep the system working, allowing temporary overallocation. - If the system runs out of memory, it will tell. - - **todo:** implement a case where all unusued regions are discarded efficiently. Currently its only brute force""" - num_found = 0 - while (size == 0) or (self._memory_size + size > self._max_memory_size): - lru_region = None - lru_list = None - for regions in self._fdict.itervalues(): - for region in regions: - # check client count - consider that we keep one reference ourselves ! - if (region.client_count()-2 == 0 and - (lru_region is None or region._uc < lru_region._uc)): - lru_region = region - lru_list = regions - # END update lru_region - #END for each region - #END for each regions list - - if lru_region is None: - break - #END handle region not found - - num_found += 1 - del(lru_list[lru_list.index(lru_region)]) - self._memory_size -= lru_region.size() - self._handle_count -= 1 - #END while there is more memory to free - return num_found - - def _obtain_region(self, a, offset, size, flags, is_recursive): - """Utilty to create a new region - for more information on the parameters, - see MapCursor.use_region. - :param a: A regions (a)rray - :return: The newly created region""" - if self._memory_size + size > self._max_memory_size: - self._collect_lru_region(size) - #END handle collection - - r = None - if a: - assert len(a) == 1 - r = a[0] - else: - try: - r = self.MapRegionCls(a.path_or_fd(), 0, sys.maxint, flags) - except Exception: - # apparently we are out of system resources or hit a limit - # As many more operations are likely to fail in that condition ( - # like reading a file from disk, etc) we free up as much as possible - # As this invalidates our insert position, we have to recurse here - # NOTE: The c++ version uses a linked list to curcumvent this, but - # using that in python is probably too slow anyway - if is_recursive: - # we already tried this, and still have no success in obtaining - # a mapping. This is an exception, so we propagate it - raise - #END handle existing recursion - self._collect_lru_region(0) - return self._obtain_region(a, offset, size, flags, True) - #END handle exceptions - - self._handle_count += 1 - self._memory_size += r.size() - a.append(r) - # END handle array - - assert r.includes_ofs(offset) - return r + """Provides a manager which will produce single size cursors that are allowed + to always map the whole file. + + Clients must be written to specifically know that they are accessing their data + through a StaticWindowMapManager, as they otherwise have to deal with their window size. + + These clients would have to use a SlidingWindowMapBuffer to hide this fact. + + This type will always use a maximum window size, and optimize certain methods to + acomodate this fact""" + + __slots__ = [ + '_fdict', # mapping of path -> StorageHelper (of some kind + '_window_size', # maximum size of a window + '_max_memory_size', # maximum amount ofmemory we may allocate + '_max_handle_count', # maximum amount of handles to keep open + '_memory_size', # currently allocated memory size + '_handle_count', # amount of currently allocated file handles + ] + + #{ Configuration + MapRegionListCls = MapRegionList + MapWindowCls = MapWindow + MapRegionCls = MapRegion + WindowCursorCls = WindowCursor + #} END configuration + + _MB_in_bytes = 1024 * 1024 + + def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys.maxint): + """initialize the manager with the given parameters. + :param window_size: if -1, a default window size will be chosen depending on + the operating system's architechture. It will internally be quantified to a multiple of the page size + If 0, the window may have any size, which basically results in mapping the whole file at one + :param max_memory_size: maximum amount of memory we may map at once before releasing mapped regions. + If 0, a viable default iwll be set dependning on the system's architecture. + It is a soft limit that is tried to be kept, but nothing bad happens if we have to overallocate + :param max_open_handles: if not maxin, limit the amount of open file handles to the given number. + Otherwise the amount is only limited by the system iteself. If a system or soft limit is hit, + the manager will free as many handles as posisble""" + self._fdict = dict() + self._window_size = window_size + self._max_memory_size = max_memory_size + self._max_handle_count = max_open_handles + self._memory_size = 0 + self._handle_count = 0 + + if window_size < 0: + coeff = 32 + if is_64_bit(): + coeff = 1024 + #END handle arch + self._window_size = coeff * self._MB_in_bytes + # END handle max window size + + if max_memory_size == 0: + coeff = 512 + if is_64_bit(): + coeff = 8192 + #END handle arch + self._max_memory_size = coeff * self._MB_in_bytes + #END handle max memory size + + #{ Internal Methods + + def _collect_lru_region(self, size): + """Unmap the region which was least-recently used and has no client + :param size: size of the region we want to map next (assuming its not already mapped partially or full + if 0, we try to free any available region + :return: Amount of freed regions + + **Note:** We don't raise exceptions anymore, in order to keep the system working, allowing temporary overallocation. + If the system runs out of memory, it will tell. + + **todo:** implement a case where all unusued regions are discarded efficiently. Currently its only brute force""" + num_found = 0 + while (size == 0) or (self._memory_size + size > self._max_memory_size): + lru_region = None + lru_list = None + for regions in self._fdict.itervalues(): + for region in regions: + # check client count - consider that we keep one reference ourselves ! + if (region.client_count()-2 == 0 and + (lru_region is None or region._uc < lru_region._uc)): + lru_region = region + lru_list = regions + # END update lru_region + #END for each region + #END for each regions list + + if lru_region is None: + break + #END handle region not found + + num_found += 1 + del(lru_list[lru_list.index(lru_region)]) + self._memory_size -= lru_region.size() + self._handle_count -= 1 + #END while there is more memory to free + return num_found + + def _obtain_region(self, a, offset, size, flags, is_recursive): + """Utilty to create a new region - for more information on the parameters, + see MapCursor.use_region. + :param a: A regions (a)rray + :return: The newly created region""" + if self._memory_size + size > self._max_memory_size: + self._collect_lru_region(size) + #END handle collection + + r = None + if a: + assert len(a) == 1 + r = a[0] + else: + try: + r = self.MapRegionCls(a.path_or_fd(), 0, sys.maxint, flags) + except Exception: + # apparently we are out of system resources or hit a limit + # As many more operations are likely to fail in that condition ( + # like reading a file from disk, etc) we free up as much as possible + # As this invalidates our insert position, we have to recurse here + # NOTE: The c++ version uses a linked list to curcumvent this, but + # using that in python is probably too slow anyway + if is_recursive: + # we already tried this, and still have no success in obtaining + # a mapping. This is an exception, so we propagate it + raise + #END handle existing recursion + self._collect_lru_region(0) + return self._obtain_region(a, offset, size, flags, True) + #END handle exceptions + + self._handle_count += 1 + self._memory_size += r.size() + a.append(r) + # END handle array + + assert r.includes_ofs(offset) + return r - #}END internal methods - - #{ Interface - def make_cursor(self, path_or_fd): - """ - :return: a cursor pointing to the given path or file descriptor. - It can be used to map new regions of the file into memory - - **Note:** if a file descriptor is given, it is assumed to be open and valid, - but may be closed afterwards. To refer to the same file, you may reuse - your existing file descriptor, but keep in mind that new windows can only - be mapped as long as it stays valid. This is why the using actual file paths - are preferred unless you plan to keep the file descriptor open. - - **Note:** file descriptors are problematic as they are not necessarily unique, as two - different files opened and closed in succession might have the same file descriptor id. - - **Note:** Using file descriptors directly is faster once new windows are mapped as it - prevents the file to be opened again just for the purpose of mapping it.""" - regions = self._fdict.get(path_or_fd) - if regions is None: - regions = self.MapRegionListCls(path_or_fd) - self._fdict[path_or_fd] = regions - # END obtain region for path - return self.WindowCursorCls(self, regions) - - def collect(self): - """Collect all available free-to-collect mapped regions - :return: Amount of freed handles""" - return self._collect_lru_region(0) - - def num_file_handles(self): - """:return: amount of file handles in use. Each mapped region uses one file handle""" - return self._handle_count - - def num_open_files(self): - """Amount of opened files in the system""" - return reduce(lambda x,y: x+y, (1 for rlist in self._fdict.itervalues() if len(rlist) > 0), 0) - - def window_size(self): - """:return: size of each window when allocating new regions""" - return self._window_size - - def mapped_memory_size(self): - """:return: amount of bytes currently mapped in total""" - return self._memory_size - - def max_file_handles(self): - """:return: maximium amount of handles we may have opened""" - return self._max_handle_count - - def max_mapped_memory_size(self): - """:return: maximum amount of memory we may allocate""" - return self._max_memory_size - - #} END interface - - #{ Special Purpose Interface - - def force_map_handle_removal_win(self, base_path): - """ONLY AVAILABLE ON WINDOWS - On windows removing files is not allowed if anybody still has it opened. - If this process is ourselves, and if the whole process uses this memory - manager (as far as the parent framework is concerned) we can enforce - closing all memory maps whose path matches the given base path to - allow the respective operation after all. - The respective system must NOT access the closed memory regions anymore ! - This really may only be used if you know that the items which keep - the cursors alive will not be using it anymore. They need to be recreated ! - :return: Amount of closed handles - - **Note:** does nothing on non-windows platforms""" - if sys.platform != 'win32': - return - #END early bailout - - num_closed = 0 - for path, rlist in self._fdict.iteritems(): - if path.startswith(base_path): - for region in rlist: - region._mf.close() - num_closed += 1 - #END path matches - #END for each path - return num_closed - #} END special purpose interface - - - + #}END internal methods + + #{ Interface + def make_cursor(self, path_or_fd): + """ + :return: a cursor pointing to the given path or file descriptor. + It can be used to map new regions of the file into memory + + **Note:** if a file descriptor is given, it is assumed to be open and valid, + but may be closed afterwards. To refer to the same file, you may reuse + your existing file descriptor, but keep in mind that new windows can only + be mapped as long as it stays valid. This is why the using actual file paths + are preferred unless you plan to keep the file descriptor open. + + **Note:** file descriptors are problematic as they are not necessarily unique, as two + different files opened and closed in succession might have the same file descriptor id. + + **Note:** Using file descriptors directly is faster once new windows are mapped as it + prevents the file to be opened again just for the purpose of mapping it.""" + regions = self._fdict.get(path_or_fd) + if regions is None: + regions = self.MapRegionListCls(path_or_fd) + self._fdict[path_or_fd] = regions + # END obtain region for path + return self.WindowCursorCls(self, regions) + + def collect(self): + """Collect all available free-to-collect mapped regions + :return: Amount of freed handles""" + return self._collect_lru_region(0) + + def num_file_handles(self): + """:return: amount of file handles in use. Each mapped region uses one file handle""" + return self._handle_count + + def num_open_files(self): + """Amount of opened files in the system""" + return reduce(lambda x,y: x+y, (1 for rlist in self._fdict.itervalues() if len(rlist) > 0), 0) + + def window_size(self): + """:return: size of each window when allocating new regions""" + return self._window_size + + def mapped_memory_size(self): + """:return: amount of bytes currently mapped in total""" + return self._memory_size + + def max_file_handles(self): + """:return: maximium amount of handles we may have opened""" + return self._max_handle_count + + def max_mapped_memory_size(self): + """:return: maximum amount of memory we may allocate""" + return self._max_memory_size + + #} END interface + + #{ Special Purpose Interface + + def force_map_handle_removal_win(self, base_path): + """ONLY AVAILABLE ON WINDOWS + On windows removing files is not allowed if anybody still has it opened. + If this process is ourselves, and if the whole process uses this memory + manager (as far as the parent framework is concerned) we can enforce + closing all memory maps whose path matches the given base path to + allow the respective operation after all. + The respective system must NOT access the closed memory regions anymore ! + This really may only be used if you know that the items which keep + the cursors alive will not be using it anymore. They need to be recreated ! + :return: Amount of closed handles + + **Note:** does nothing on non-windows platforms""" + if sys.platform != 'win32': + return + #END early bailout + + num_closed = 0 + for path, rlist in self._fdict.iteritems(): + if path.startswith(base_path): + for region in rlist: + region._mf.close() + num_closed += 1 + #END path matches + #END for each path + return num_closed + #} END special purpose interface + + + class SlidingWindowMapManager(StaticWindowMapManager): - """Maintains a list of ranges of mapped memory regions in one or more files and allows to easily - obtain additional regions assuring there is no overlap. - Once a certain memory limit is reached globally, or if there cannot be more open file handles - which result from each mmap call, the least recently used, and currently unused mapped regions - are unloaded automatically. - - **Note:** currently not thread-safe ! - - **Note:** in the current implementation, we will automatically unload windows if we either cannot - create more memory maps (as the open file handles limit is hit) or if we have allocated more than - a safe amount of memory already, which would possibly cause memory allocations to fail as our address - space is full.""" - - __slots__ = tuple() - - def __init__(self, window_size = -1, max_memory_size = 0, max_open_handles = sys.maxint): - """Adjusts the default window size to -1""" - super(SlidingWindowMapManager, self).__init__(window_size, max_memory_size, max_open_handles) - - def _obtain_region(self, a, offset, size, flags, is_recursive): - # bisect to find an existing region. The c++ implementation cannot - # do that as it uses a linked list for regions. - r = None - lo = 0 - hi = len(a) - while lo < hi: - mid = (lo+hi)//2 - ofs = a[mid]._b - if ofs <= offset: - if a[mid].includes_ofs(offset): - r = a[mid] - break - #END have region - lo = mid+1 - else: - hi = mid - #END handle position - #END while bisecting - - if r is None: - window_size = self._window_size - left = self.MapWindowCls(0, 0) - mid = self.MapWindowCls(offset, size) - right = self.MapWindowCls(a.file_size(), 0) - - # we want to honor the max memory size, and assure we have anough - # memory available - # Save calls ! - if self._memory_size + window_size > self._max_memory_size: - self._collect_lru_region(window_size) - #END handle collection - - # we assume the list remains sorted by offset - insert_pos = 0 - len_regions = len(a) - if len_regions == 1: - if a[0]._b <= offset: - insert_pos = 1 - #END maintain sort - else: - # find insert position - insert_pos = len_regions - for i, region in enumerate(a): - if region._b > offset: - insert_pos = i - break - #END if insert position is correct - #END for each region - # END obtain insert pos - - # adjust the actual offset and size values to create the largest - # possible mapping - if insert_pos == 0: - if len_regions: - right = self.MapWindowCls.from_region(a[insert_pos]) - #END adjust right side - else: - if insert_pos != len_regions: - right = self.MapWindowCls.from_region(a[insert_pos]) - # END adjust right window - left = self.MapWindowCls.from_region(a[insert_pos - 1]) - #END adjust surrounding windows - - mid.extend_left_to(left, window_size) - mid.extend_right_to(right, window_size) - mid.align() - - # it can happen that we align beyond the end of the file - if mid.ofs_end() > right.ofs: - mid.size = right.ofs - mid.ofs - #END readjust size - - # insert new region at the right offset to keep the order - try: - if self._handle_count >= self._max_handle_count: - raise Exception - #END assert own imposed max file handles - r = self.MapRegionCls(a.path_or_fd(), mid.ofs, mid.size, flags) - except Exception: - # apparently we are out of system resources or hit a limit - # As many more operations are likely to fail in that condition ( - # like reading a file from disk, etc) we free up as much as possible - # As this invalidates our insert position, we have to recurse here - # NOTE: The c++ version uses a linked list to curcumvent this, but - # using that in python is probably too slow anyway - if is_recursive: - # we already tried this, and still have no success in obtaining - # a mapping. This is an exception, so we propagate it - raise - #END handle existing recursion - self._collect_lru_region(0) - return self._obtain_region(a, offset, size, flags, True) - #END handle exceptions - - self._handle_count += 1 - self._memory_size += r.size() - a.insert(insert_pos, r) - # END create new region - return r - - + """Maintains a list of ranges of mapped memory regions in one or more files and allows to easily + obtain additional regions assuring there is no overlap. + Once a certain memory limit is reached globally, or if there cannot be more open file handles + which result from each mmap call, the least recently used, and currently unused mapped regions + are unloaded automatically. + + **Note:** currently not thread-safe ! + + **Note:** in the current implementation, we will automatically unload windows if we either cannot + create more memory maps (as the open file handles limit is hit) or if we have allocated more than + a safe amount of memory already, which would possibly cause memory allocations to fail as our address + space is full.""" + + __slots__ = tuple() + + def __init__(self, window_size = -1, max_memory_size = 0, max_open_handles = sys.maxint): + """Adjusts the default window size to -1""" + super(SlidingWindowMapManager, self).__init__(window_size, max_memory_size, max_open_handles) + + def _obtain_region(self, a, offset, size, flags, is_recursive): + # bisect to find an existing region. The c++ implementation cannot + # do that as it uses a linked list for regions. + r = None + lo = 0 + hi = len(a) + while lo < hi: + mid = (lo+hi)//2 + ofs = a[mid]._b + if ofs <= offset: + if a[mid].includes_ofs(offset): + r = a[mid] + break + #END have region + lo = mid+1 + else: + hi = mid + #END handle position + #END while bisecting + + if r is None: + window_size = self._window_size + left = self.MapWindowCls(0, 0) + mid = self.MapWindowCls(offset, size) + right = self.MapWindowCls(a.file_size(), 0) + + # we want to honor the max memory size, and assure we have anough + # memory available + # Save calls ! + if self._memory_size + window_size > self._max_memory_size: + self._collect_lru_region(window_size) + #END handle collection + + # we assume the list remains sorted by offset + insert_pos = 0 + len_regions = len(a) + if len_regions == 1: + if a[0]._b <= offset: + insert_pos = 1 + #END maintain sort + else: + # find insert position + insert_pos = len_regions + for i, region in enumerate(a): + if region._b > offset: + insert_pos = i + break + #END if insert position is correct + #END for each region + # END obtain insert pos + + # adjust the actual offset and size values to create the largest + # possible mapping + if insert_pos == 0: + if len_regions: + right = self.MapWindowCls.from_region(a[insert_pos]) + #END adjust right side + else: + if insert_pos != len_regions: + right = self.MapWindowCls.from_region(a[insert_pos]) + # END adjust right window + left = self.MapWindowCls.from_region(a[insert_pos - 1]) + #END adjust surrounding windows + + mid.extend_left_to(left, window_size) + mid.extend_right_to(right, window_size) + mid.align() + + # it can happen that we align beyond the end of the file + if mid.ofs_end() > right.ofs: + mid.size = right.ofs - mid.ofs + #END readjust size + + # insert new region at the right offset to keep the order + try: + if self._handle_count >= self._max_handle_count: + raise Exception + #END assert own imposed max file handles + r = self.MapRegionCls(a.path_or_fd(), mid.ofs, mid.size, flags) + except Exception: + # apparently we are out of system resources or hit a limit + # As many more operations are likely to fail in that condition ( + # like reading a file from disk, etc) we free up as much as possible + # As this invalidates our insert position, we have to recurse here + # NOTE: The c++ version uses a linked list to curcumvent this, but + # using that in python is probably too slow anyway + if is_recursive: + # we already tried this, and still have no success in obtaining + # a mapping. This is an exception, so we propagate it + raise + #END handle existing recursion + self._collect_lru_region(0) + return self._obtain_region(a, offset, size, flags, True) + #END handle exceptions + + self._handle_count += 1 + self._memory_size += r.size() + a.insert(insert_pos, r) + # END create new region + return r + + diff --git a/smmap/test/lib.py b/smmap/test/lib.py index 6957dcab0..21e6c5a09 100644 --- a/smmap/test/lib.py +++ b/smmap/test/lib.py @@ -9,57 +9,57 @@ #{ Utilities class FileCreator(object): - """A instance which creates a temporary file with a prefix and a given size - and provides this info to the user. - Once it gets deleted, it will remove the temporary file as well.""" - __slots__ = ("_size", "_path") - - def __init__(self, size, prefix=''): - assert size, "Require size to be larger 0" - - self._path = tempfile.mktemp(prefix=prefix) - self._size = size - - fp = open(self._path, "wb") - fp.seek(size-1) - fp.write('1') - fp.close() - - assert os.path.getsize(self.path) == size + """A instance which creates a temporary file with a prefix and a given size + and provides this info to the user. + Once it gets deleted, it will remove the temporary file as well.""" + __slots__ = ("_size", "_path") + + def __init__(self, size, prefix=''): + assert size, "Require size to be larger 0" + + self._path = tempfile.mktemp(prefix=prefix) + self._size = size + + fp = open(self._path, "wb") + fp.seek(size-1) + fp.write('1') + fp.close() + + assert os.path.getsize(self.path) == size - def __del__(self): - try: - os.remove(self.path) - except OSError: - pass - #END exception handling - + def __del__(self): + try: + os.remove(self.path) + except OSError: + pass + #END exception handling + - @property - def path(self): - return self._path - - @property - def size(self): - return self._size + @property + def path(self): + return self._path + + @property + def size(self): + return self._size #} END utilities class TestBase(TestCase): - """Foundation used by all tests""" - - #{ Configuration - k_window_test_size = 1000 * 1000 * 8 + 5195 - #} END configuration - - #{ Overrides - @classmethod - def setUpAll(cls): - # nothing for now - pass - - #END overrides - - #{ Interface - - #} END interface + """Foundation used by all tests""" + + #{ Configuration + k_window_test_size = 1000 * 1000 * 8 + 5195 + #} END configuration + + #{ Overrides + @classmethod + def setUpAll(cls): + # nothing for now + pass + + #END overrides + + #{ Interface + + #} END interface diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index 9881c6294..4bdcb76f5 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -10,108 +10,108 @@ man_optimal = SlidingWindowMapManager() -man_worst_case = SlidingWindowMapManager( window_size=TestBase.k_window_test_size/100, - max_memory_size=TestBase.k_window_test_size/3, - max_open_handles=15) +man_worst_case = SlidingWindowMapManager( window_size=TestBase.k_window_test_size/100, + max_memory_size=TestBase.k_window_test_size/3, + max_open_handles=15) static_man = StaticWindowMapManager() class TestBuf(TestBase): - - def test_basics(self): - fc = FileCreator(self.k_window_test_size, "buffer_test") - - # invalid paths fail upon construction - c = man_optimal.make_cursor(fc.path) - self.failUnlessRaises(ValueError, SlidingWindowMapBuffer, type(c)()) # invalid cursor - self.failUnlessRaises(ValueError, SlidingWindowMapBuffer, c, fc.size) # offset too large - - buf = SlidingWindowMapBuffer() # can create uninitailized buffers - assert buf.cursor() is None - - # can call end access any time - buf.end_access() - buf.end_access() - assert len(buf) == 0 - - # begin access can revive it, if the offset is suitable - offset = 100 - assert buf.begin_access(c, fc.size) == False - assert buf.begin_access(c, offset) == True - assert len(buf) == fc.size - offset - assert buf.cursor().is_valid() - - # empty begin access keeps it valid on the same path, but alters the offset - assert buf.begin_access() == True - assert len(buf) == fc.size - assert buf.cursor().is_valid() - - # simple access - data = open(fc.path, 'rb').read() - assert data[offset] == buf[0] - assert data[offset:offset*2] == buf[0:offset] - - # negative indices, partial slices - assert buf[-1] == buf[len(buf)-1] - assert buf[-10:] == buf[len(buf)-10:len(buf)] - - # end access makes its cursor invalid - buf.end_access() - assert not buf.cursor().is_valid() - assert buf.cursor().is_associated() # but it remains associated - - # an empty begin access fixes it up again - assert buf.begin_access() == True and buf.cursor().is_valid() - del(buf) # ends access automatically - del(c) - - assert man_optimal.num_file_handles() == 1 - - # PERFORMANCE - # blast away with rnadom access and a full mapping - we don't want to - # exagerate the manager's overhead, but measure the buffer overhead - # We do it once with an optimal setting, and with a worse manager which - # will produce small mappings only ! - max_num_accesses = 100 - fd = os.open(fc.path, os.O_RDONLY) - for item in (fc.path, fd): - for manager, man_id in ( (man_optimal, 'optimal'), - (man_worst_case, 'worst case'), - (static_man, 'static optimial')): - buf = SlidingWindowMapBuffer(manager.make_cursor(item)) - assert manager.num_file_handles() == 1 - for access_mode in range(2): # single, multi - num_accesses_left = max_num_accesses - num_bytes = 0 - fsize = fc.size - - st = time() - buf.begin_access() - while num_accesses_left: - num_accesses_left -= 1 - if access_mode: # multi - ofs_start = randint(0, fsize) - ofs_end = randint(ofs_start, fsize) - d = buf[ofs_start:ofs_end] - assert len(d) == ofs_end - ofs_start - assert d == data[ofs_start:ofs_end] - num_bytes += len(d) - else: - pos = randint(0, fsize) - assert buf[pos] == data[pos] - num_bytes += 1 - #END handle mode - # END handle num accesses - - buf.end_access() - assert manager.num_file_handles() - assert manager.collect() - assert manager.num_file_handles() == 0 - elapsed = max(time() - st, 0.001) # prevent zero division errors on windows - mb = float(1000*1000) - mode_str = (access_mode and "slice") or "single byte" - sys.stderr.write("%s: Made %i random %s accesses to buffer created from %s reading a total of %f mb in %f s (%f mb/s)\n" - % (man_id, max_num_accesses, mode_str, type(item), num_bytes/mb, elapsed, (num_bytes/mb)/elapsed)) - # END handle access mode - # END for each manager - # END for each input - os.close(fd) + + def test_basics(self): + fc = FileCreator(self.k_window_test_size, "buffer_test") + + # invalid paths fail upon construction + c = man_optimal.make_cursor(fc.path) + self.failUnlessRaises(ValueError, SlidingWindowMapBuffer, type(c)()) # invalid cursor + self.failUnlessRaises(ValueError, SlidingWindowMapBuffer, c, fc.size) # offset too large + + buf = SlidingWindowMapBuffer() # can create uninitailized buffers + assert buf.cursor() is None + + # can call end access any time + buf.end_access() + buf.end_access() + assert len(buf) == 0 + + # begin access can revive it, if the offset is suitable + offset = 100 + assert buf.begin_access(c, fc.size) == False + assert buf.begin_access(c, offset) == True + assert len(buf) == fc.size - offset + assert buf.cursor().is_valid() + + # empty begin access keeps it valid on the same path, but alters the offset + assert buf.begin_access() == True + assert len(buf) == fc.size + assert buf.cursor().is_valid() + + # simple access + data = open(fc.path, 'rb').read() + assert data[offset] == buf[0] + assert data[offset:offset*2] == buf[0:offset] + + # negative indices, partial slices + assert buf[-1] == buf[len(buf)-1] + assert buf[-10:] == buf[len(buf)-10:len(buf)] + + # end access makes its cursor invalid + buf.end_access() + assert not buf.cursor().is_valid() + assert buf.cursor().is_associated() # but it remains associated + + # an empty begin access fixes it up again + assert buf.begin_access() == True and buf.cursor().is_valid() + del(buf) # ends access automatically + del(c) + + assert man_optimal.num_file_handles() == 1 + + # PERFORMANCE + # blast away with rnadom access and a full mapping - we don't want to + # exagerate the manager's overhead, but measure the buffer overhead + # We do it once with an optimal setting, and with a worse manager which + # will produce small mappings only ! + max_num_accesses = 100 + fd = os.open(fc.path, os.O_RDONLY) + for item in (fc.path, fd): + for manager, man_id in ( (man_optimal, 'optimal'), + (man_worst_case, 'worst case'), + (static_man, 'static optimial')): + buf = SlidingWindowMapBuffer(manager.make_cursor(item)) + assert manager.num_file_handles() == 1 + for access_mode in range(2): # single, multi + num_accesses_left = max_num_accesses + num_bytes = 0 + fsize = fc.size + + st = time() + buf.begin_access() + while num_accesses_left: + num_accesses_left -= 1 + if access_mode: # multi + ofs_start = randint(0, fsize) + ofs_end = randint(ofs_start, fsize) + d = buf[ofs_start:ofs_end] + assert len(d) == ofs_end - ofs_start + assert d == data[ofs_start:ofs_end] + num_bytes += len(d) + else: + pos = randint(0, fsize) + assert buf[pos] == data[pos] + num_bytes += 1 + #END handle mode + # END handle num accesses + + buf.end_access() + assert manager.num_file_handles() + assert manager.collect() + assert manager.num_file_handles() == 0 + elapsed = max(time() - st, 0.001) # prevent zero division errors on windows + mb = float(1000*1000) + mode_str = (access_mode and "slice") or "single byte" + sys.stderr.write("%s: Made %i random %s accesses to buffer created from %s reading a total of %f mb in %f s (%f mb/s)\n" + % (man_id, max_num_accesses, mode_str, type(item), num_bytes/mb, elapsed, (num_bytes/mb)/elapsed)) + # END handle access mode + # END for each manager + # END for each input + os.close(fd) diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 27be686ad..46429a419 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -12,203 +12,203 @@ from copy import copy class TestMMan(TestBase): - - def test_cursor(self): - fc = FileCreator(self.k_window_test_size, "cursor_test") - - man = SlidingWindowMapManager() - ci = WindowCursor(man) # invalid cursor - assert not ci.is_valid() - assert not ci.is_associated() - assert ci.size() == 0 # this is cached, so we can query it in invalid state - - cv = man.make_cursor(fc.path) - assert not cv.is_valid() # no region mapped yet - assert cv.is_associated()# but it know where to map it from - assert cv.file_size() == fc.size - assert cv.path() == fc.path - - # copy module - cio = copy(cv) - assert not cio.is_valid() and cio.is_associated() - - # assign method - assert not ci.is_associated() - ci.assign(cv) - assert not ci.is_valid() and ci.is_associated() - - # unuse non-existing region is fine - cv.unuse_region() - cv.unuse_region() - - # destruction is fine (even multiple times) - cv._destroy() - WindowCursor(man)._destroy() - - def test_memory_manager(self): - slide_man = SlidingWindowMapManager() - static_man = StaticWindowMapManager() - - for man in (static_man, slide_man): - assert man.num_file_handles() == 0 - assert man.num_open_files() == 0 - winsize_cmp_val = 0 - if isinstance(man, StaticWindowMapManager): - winsize_cmp_val = -1 - #END handle window size - assert man.window_size() > winsize_cmp_val - assert man.mapped_memory_size() == 0 - assert man.max_mapped_memory_size() > 0 - - # collection doesn't raise in 'any' mode - man._collect_lru_region(0) - # doesn't raise if we are within the limit - man._collect_lru_region(10) - - # doesn't fail if we overallocate - assert man._collect_lru_region(sys.maxint) == 0 - - # use a region, verify most basic functionality - fc = FileCreator(self.k_window_test_size, "manager_test") - fd = os.open(fc.path, os.O_RDONLY) - for item in (fc.path, fd): - c = man.make_cursor(item) - assert c.path_or_fd() is item - assert c.use_region(10, 10).is_valid() - assert c.ofs_begin() == 10 - assert c.size() == 10 - assert c.buffer()[:] == open(fc.path, 'rb').read(20)[10:] - - if isinstance(item, int): - self.failUnlessRaises(ValueError, c.path) - else: - self.failUnlessRaises(ValueError, c.fd) - #END handle value error - #END for each input - os.close(fd) - # END for each manager type - - def test_memman_operation(self): - # test more access, force it to actually unmap regions - fc = FileCreator(self.k_window_test_size, "manager_operation_test") - data = open(fc.path, 'rb').read() - fd = os.open(fc.path, os.O_RDONLY) - max_num_handles = 15 - #small_size = - for mtype, args in ( (StaticWindowMapManager, (0, fc.size / 3, max_num_handles)), - (SlidingWindowMapManager, (fc.size / 100, fc.size / 3, max_num_handles)),): - for item in (fc.path, fd): - assert len(data) == fc.size - - # small windows, a reasonable max memory. Not too many regions at once - man = mtype(window_size=args[0], max_memory_size=args[1], max_open_handles=args[2]) - c = man.make_cursor(item) - - # still empty (more about that is tested in test_memory_manager() - assert man.num_open_files() == 0 - assert man.mapped_memory_size() == 0 - - base_offset = 5000 - # window size is 0 for static managers, hence size will be 0. We take that into consideration - size = man.window_size() / 2 - assert c.use_region(base_offset, size).is_valid() - rr = c.region_ref() - assert rr().client_count() == 2 # the manager and the cursor and us - - assert man.num_open_files() == 1 - assert man.num_file_handles() == 1 - assert man.mapped_memory_size() == rr().size() - - #assert c.size() == size # the cursor may overallocate in its static version - assert c.ofs_begin() == base_offset - assert rr().ofs_begin() == 0 # it was aligned and expanded - if man.window_size(): - assert rr().size() == align_to_mmap(man.window_size(), True) # but isn't larger than the max window (aligned) - else: - assert rr().size() == fc.size - #END ignore static managers which dont use windows and are aligned to file boundaries - - assert c.buffer()[:] == data[base_offset:base_offset+(size or c.size())] - - # obtain second window, which spans the first part of the file - it is a still the same window - nsize = (size or fc.size) - 10 - assert c.use_region(0, nsize).is_valid() - assert c.region_ref()() == rr() - assert man.num_file_handles() == 1 - assert c.size() == nsize - assert c.ofs_begin() == 0 - assert c.buffer()[:] == data[:nsize] - - # map some part at the end, our requested size cannot be kept - overshoot = 4000 - base_offset = fc.size - (size or c.size()) + overshoot - assert c.use_region(base_offset, size).is_valid() - if man.window_size(): - assert man.num_file_handles() == 2 - assert c.size() < size - assert c.region_ref()() is not rr() # old region is still available, but has not curser ref anymore - assert rr().client_count() == 1 # only held by manager - else: - assert c.size() < fc.size - #END ignore static managers which only have one handle per file - rr = c.region_ref() - assert rr().client_count() == 2 # manager + cursor - assert rr().ofs_begin() < c.ofs_begin() # it should have extended itself to the left - assert rr().ofs_end() <= fc.size # it cannot be larger than the file - assert c.buffer()[:] == data[base_offset:base_offset+(size or c.size())] - - # unising a region makes the cursor invalid - c.unuse_region() - assert not c.is_valid() - if man.window_size(): - # but doesn't change anything regarding the handle count - we cache it and only - # remove mapped regions if we have to - assert man.num_file_handles() == 2 - #END ignore this for static managers - - # iterate through the windows, verify data contents - # this will trigger map collection after a while - max_random_accesses = 5000 - num_random_accesses = max_random_accesses - memory_read = 0 - st = time() - - # cache everything to get some more performance - includes_ofs = c.includes_ofs - max_mapped_memory_size = man.max_mapped_memory_size() - max_file_handles = man.max_file_handles() - mapped_memory_size = man.mapped_memory_size - num_file_handles = man.num_file_handles - while num_random_accesses: - num_random_accesses -= 1 - base_offset = randint(0, fc.size - 1) - - # precondition - if man.window_size(): - assert max_mapped_memory_size >= mapped_memory_size() - #END statics will overshoot, which is fine - assert max_file_handles >= num_file_handles() - assert c.use_region(base_offset, (size or c.size())).is_valid() - csize = c.size() - assert c.buffer()[:] == data[base_offset:base_offset+csize] - memory_read += csize - - assert includes_ofs(base_offset) - assert includes_ofs(base_offset+csize-1) - assert not includes_ofs(base_offset+csize) - # END while we should do an access - elapsed = max(time() - st, 0.001) # prevent zero divison errors on windows - mb = float(1000 * 1000) - sys.stderr.write("%s: Read %i mb of memory with %i random on cursor initialized with %s accesses in %fs (%f mb/s)\n" - % (mtype, memory_read/mb, max_random_accesses, type(item), elapsed, (memory_read/mb)/elapsed)) - - # an offset as large as the size doesn't work ! - assert not c.use_region(fc.size, size).is_valid() - - # collection - it should be able to collect all - assert man.num_file_handles() - assert man.collect() - assert man.num_file_handles() == 0 - #END for each item - # END for each manager type - os.close(fd) + + def test_cursor(self): + fc = FileCreator(self.k_window_test_size, "cursor_test") + + man = SlidingWindowMapManager() + ci = WindowCursor(man) # invalid cursor + assert not ci.is_valid() + assert not ci.is_associated() + assert ci.size() == 0 # this is cached, so we can query it in invalid state + + cv = man.make_cursor(fc.path) + assert not cv.is_valid() # no region mapped yet + assert cv.is_associated()# but it know where to map it from + assert cv.file_size() == fc.size + assert cv.path() == fc.path + + # copy module + cio = copy(cv) + assert not cio.is_valid() and cio.is_associated() + + # assign method + assert not ci.is_associated() + ci.assign(cv) + assert not ci.is_valid() and ci.is_associated() + + # unuse non-existing region is fine + cv.unuse_region() + cv.unuse_region() + + # destruction is fine (even multiple times) + cv._destroy() + WindowCursor(man)._destroy() + + def test_memory_manager(self): + slide_man = SlidingWindowMapManager() + static_man = StaticWindowMapManager() + + for man in (static_man, slide_man): + assert man.num_file_handles() == 0 + assert man.num_open_files() == 0 + winsize_cmp_val = 0 + if isinstance(man, StaticWindowMapManager): + winsize_cmp_val = -1 + #END handle window size + assert man.window_size() > winsize_cmp_val + assert man.mapped_memory_size() == 0 + assert man.max_mapped_memory_size() > 0 + + # collection doesn't raise in 'any' mode + man._collect_lru_region(0) + # doesn't raise if we are within the limit + man._collect_lru_region(10) + + # doesn't fail if we overallocate + assert man._collect_lru_region(sys.maxint) == 0 + + # use a region, verify most basic functionality + fc = FileCreator(self.k_window_test_size, "manager_test") + fd = os.open(fc.path, os.O_RDONLY) + for item in (fc.path, fd): + c = man.make_cursor(item) + assert c.path_or_fd() is item + assert c.use_region(10, 10).is_valid() + assert c.ofs_begin() == 10 + assert c.size() == 10 + assert c.buffer()[:] == open(fc.path, 'rb').read(20)[10:] + + if isinstance(item, int): + self.failUnlessRaises(ValueError, c.path) + else: + self.failUnlessRaises(ValueError, c.fd) + #END handle value error + #END for each input + os.close(fd) + # END for each manager type + + def test_memman_operation(self): + # test more access, force it to actually unmap regions + fc = FileCreator(self.k_window_test_size, "manager_operation_test") + data = open(fc.path, 'rb').read() + fd = os.open(fc.path, os.O_RDONLY) + max_num_handles = 15 + #small_size = + for mtype, args in ( (StaticWindowMapManager, (0, fc.size / 3, max_num_handles)), + (SlidingWindowMapManager, (fc.size / 100, fc.size / 3, max_num_handles)),): + for item in (fc.path, fd): + assert len(data) == fc.size + + # small windows, a reasonable max memory. Not too many regions at once + man = mtype(window_size=args[0], max_memory_size=args[1], max_open_handles=args[2]) + c = man.make_cursor(item) + + # still empty (more about that is tested in test_memory_manager() + assert man.num_open_files() == 0 + assert man.mapped_memory_size() == 0 + + base_offset = 5000 + # window size is 0 for static managers, hence size will be 0. We take that into consideration + size = man.window_size() / 2 + assert c.use_region(base_offset, size).is_valid() + rr = c.region_ref() + assert rr().client_count() == 2 # the manager and the cursor and us + + assert man.num_open_files() == 1 + assert man.num_file_handles() == 1 + assert man.mapped_memory_size() == rr().size() + + #assert c.size() == size # the cursor may overallocate in its static version + assert c.ofs_begin() == base_offset + assert rr().ofs_begin() == 0 # it was aligned and expanded + if man.window_size(): + assert rr().size() == align_to_mmap(man.window_size(), True) # but isn't larger than the max window (aligned) + else: + assert rr().size() == fc.size + #END ignore static managers which dont use windows and are aligned to file boundaries + + assert c.buffer()[:] == data[base_offset:base_offset+(size or c.size())] + + # obtain second window, which spans the first part of the file - it is a still the same window + nsize = (size or fc.size) - 10 + assert c.use_region(0, nsize).is_valid() + assert c.region_ref()() == rr() + assert man.num_file_handles() == 1 + assert c.size() == nsize + assert c.ofs_begin() == 0 + assert c.buffer()[:] == data[:nsize] + + # map some part at the end, our requested size cannot be kept + overshoot = 4000 + base_offset = fc.size - (size or c.size()) + overshoot + assert c.use_region(base_offset, size).is_valid() + if man.window_size(): + assert man.num_file_handles() == 2 + assert c.size() < size + assert c.region_ref()() is not rr() # old region is still available, but has not curser ref anymore + assert rr().client_count() == 1 # only held by manager + else: + assert c.size() < fc.size + #END ignore static managers which only have one handle per file + rr = c.region_ref() + assert rr().client_count() == 2 # manager + cursor + assert rr().ofs_begin() < c.ofs_begin() # it should have extended itself to the left + assert rr().ofs_end() <= fc.size # it cannot be larger than the file + assert c.buffer()[:] == data[base_offset:base_offset+(size or c.size())] + + # unising a region makes the cursor invalid + c.unuse_region() + assert not c.is_valid() + if man.window_size(): + # but doesn't change anything regarding the handle count - we cache it and only + # remove mapped regions if we have to + assert man.num_file_handles() == 2 + #END ignore this for static managers + + # iterate through the windows, verify data contents + # this will trigger map collection after a while + max_random_accesses = 5000 + num_random_accesses = max_random_accesses + memory_read = 0 + st = time() + + # cache everything to get some more performance + includes_ofs = c.includes_ofs + max_mapped_memory_size = man.max_mapped_memory_size() + max_file_handles = man.max_file_handles() + mapped_memory_size = man.mapped_memory_size + num_file_handles = man.num_file_handles + while num_random_accesses: + num_random_accesses -= 1 + base_offset = randint(0, fc.size - 1) + + # precondition + if man.window_size(): + assert max_mapped_memory_size >= mapped_memory_size() + #END statics will overshoot, which is fine + assert max_file_handles >= num_file_handles() + assert c.use_region(base_offset, (size or c.size())).is_valid() + csize = c.size() + assert c.buffer()[:] == data[base_offset:base_offset+csize] + memory_read += csize + + assert includes_ofs(base_offset) + assert includes_ofs(base_offset+csize-1) + assert not includes_ofs(base_offset+csize) + # END while we should do an access + elapsed = max(time() - st, 0.001) # prevent zero divison errors on windows + mb = float(1000 * 1000) + sys.stderr.write("%s: Read %i mb of memory with %i random on cursor initialized with %s accesses in %fs (%f mb/s)\n" + % (mtype, memory_read/mb, max_random_accesses, type(item), elapsed, (memory_read/mb)/elapsed)) + + # an offset as large as the size doesn't work ! + assert not c.use_region(fc.size, size).is_valid() + + # collection - it should be able to collect all + assert man.num_file_handles() + assert man.collect() + assert man.num_file_handles() == 0 + #END for each item + # END for each manager type + os.close(fd) diff --git a/smmap/test/test_tutorial.py b/smmap/test/test_tutorial.py index a9f4b1c08..4e1a5764b 100644 --- a/smmap/test/test_tutorial.py +++ b/smmap/test/test_tutorial.py @@ -1,83 +1,83 @@ from lib import TestBase class TestTutorial(TestBase): - - def test_example(self): - # Memory Managers - ################## - import smmap - # This instance should be globally available in your application - # It is configured to be well suitable for 32-bit or 64 bit applications. - mman = smmap.SlidingWindowMapManager() - - # the manager provides much useful information about its current state - # like the amount of open file handles or the amount of mapped memory - assert mman.num_file_handles() == 0 - assert mman.mapped_memory_size() == 0 - # and many more ... - - # Cursors - ########## - import smmap.test.lib - fc = smmap.test.lib.FileCreator(1024*1024*8, "test_file") - - # obtain a cursor to access some file. - c = mman.make_cursor(fc.path) - - # the cursor is now associated with the file, but not yet usable - assert c.is_associated() - assert not c.is_valid() - - # before you can use the cursor, you have to specify a window you want to - # access. The following just says you want as much data as possible starting - # from offset 0. - # To be sure your region could be mapped, query for validity - assert c.use_region().is_valid() # use_region returns self - - # once a region was mapped, you must query its dimension regularly - # to assure you don't try to access its buffer out of its bounds - assert c.size() - c.buffer()[0] # first byte - c.buffer()[1:10] # first 9 bytes - c.buffer()[c.size()-1] # last byte - - # its recommended not to create big slices when feeding the buffer - # into consumers (e.g. struct or zlib). - # Instead, either give the buffer directly, or use pythons buffer command. - buffer(c.buffer(), 1, 9) # first 9 bytes without copying them - - # you can query absolute offsets, and check whether an offset is included - # in the cursor's data. - assert c.ofs_begin() < c.ofs_end() - assert c.includes_ofs(100) - - # If you are over out of bounds with one of your region requests, the - # cursor will be come invalid. It cannot be used in that state - assert not c.use_region(fc.size, 100).is_valid() - # map as much as possible after skipping the first 100 bytes - assert c.use_region(100).is_valid() - - # You can explicitly free cursor resources by unusing the cursor's region - c.unuse_region() - assert not c.is_valid() - - # Buffers - ######### - # Create a default buffer which can operate on the whole file - buf = smmap.SlidingWindowMapBuffer(mman.make_cursor(fc.path)) - - # you can use it right away - assert buf.cursor().is_valid() - - buf[0] # access the first byte - buf[-1] # access the last ten bytes on the file - buf[-10:]# access the last ten bytes - - # If you want to keep the instance between different accesses, use the - # dedicated methods - buf.end_access() - assert not buf.cursor().is_valid() # you cannot use the buffer anymore - assert buf.begin_access(offset=10) # start using the buffer at an offset - - # it will stop using resources automatically once it goes out of scope - + + def test_example(self): + # Memory Managers + ################## + import smmap + # This instance should be globally available in your application + # It is configured to be well suitable for 32-bit or 64 bit applications. + mman = smmap.SlidingWindowMapManager() + + # the manager provides much useful information about its current state + # like the amount of open file handles or the amount of mapped memory + assert mman.num_file_handles() == 0 + assert mman.mapped_memory_size() == 0 + # and many more ... + + # Cursors + ########## + import smmap.test.lib + fc = smmap.test.lib.FileCreator(1024*1024*8, "test_file") + + # obtain a cursor to access some file. + c = mman.make_cursor(fc.path) + + # the cursor is now associated with the file, but not yet usable + assert c.is_associated() + assert not c.is_valid() + + # before you can use the cursor, you have to specify a window you want to + # access. The following just says you want as much data as possible starting + # from offset 0. + # To be sure your region could be mapped, query for validity + assert c.use_region().is_valid() # use_region returns self + + # once a region was mapped, you must query its dimension regularly + # to assure you don't try to access its buffer out of its bounds + assert c.size() + c.buffer()[0] # first byte + c.buffer()[1:10] # first 9 bytes + c.buffer()[c.size()-1] # last byte + + # its recommended not to create big slices when feeding the buffer + # into consumers (e.g. struct or zlib). + # Instead, either give the buffer directly, or use pythons buffer command. + buffer(c.buffer(), 1, 9) # first 9 bytes without copying them + + # you can query absolute offsets, and check whether an offset is included + # in the cursor's data. + assert c.ofs_begin() < c.ofs_end() + assert c.includes_ofs(100) + + # If you are over out of bounds with one of your region requests, the + # cursor will be come invalid. It cannot be used in that state + assert not c.use_region(fc.size, 100).is_valid() + # map as much as possible after skipping the first 100 bytes + assert c.use_region(100).is_valid() + + # You can explicitly free cursor resources by unusing the cursor's region + c.unuse_region() + assert not c.is_valid() + + # Buffers + ######### + # Create a default buffer which can operate on the whole file + buf = smmap.SlidingWindowMapBuffer(mman.make_cursor(fc.path)) + + # you can use it right away + assert buf.cursor().is_valid() + + buf[0] # access the first byte + buf[-1] # access the last ten bytes on the file + buf[-10:]# access the last ten bytes + + # If you want to keep the instance between different accesses, use the + # dedicated methods + buf.end_access() + assert not buf.cursor().is_valid() # you cannot use the buffer anymore + assert buf.begin_access(offset=10) # start using the buffer at an offset + + # it will stop using resources automatically once it goes out of scope + diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 096c5f6df..2df0660be 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -6,109 +6,109 @@ import sys class TestMMan(TestBase): - - def test_window(self): - wl = MapWindow(0, 1) # left - wc = MapWindow(1, 1) # center - wc2 = MapWindow(10, 5) # another center - wr = MapWindow(8000, 50) # right - - assert wl.ofs_end() == 1 - assert wc.ofs_end() == 2 - assert wr.ofs_end() == 8050 - - # extension does nothing if already in place - maxsize = 100 - wc.extend_left_to(wl, maxsize) - assert wc.ofs == 1 and wc.size == 1 - wl.extend_right_to(wc, maxsize) - wl.extend_right_to(wc, maxsize) - assert wl.ofs == 0 and wl.size == 1 - - # an actual left extension - pofs_end = wc2.ofs_end() - wc2.extend_left_to(wc, maxsize) - assert wc2.ofs == wc.ofs_end() and pofs_end == wc2.ofs_end() - - - # respects maxsize - wc.extend_right_to(wr, maxsize) - assert wc.ofs == 1 and wc.size == maxsize - wc.extend_right_to(wr, maxsize) - assert wc.ofs == 1 and wc.size == maxsize - - # without maxsize - wc.extend_right_to(wr, sys.maxint) - assert wc.ofs_end() == wr.ofs and wc.ofs == 1 - - # extend left - wr.extend_left_to(wc2, maxsize) - wr.extend_left_to(wc2, maxsize) - assert wr.size == maxsize - - wr.extend_left_to(wc2, sys.maxint) - assert wr.ofs == wc2.ofs_end() - - wc.align() - assert wc.ofs == 0 and wc.size == align_to_mmap(wc.size, True) - - def test_region(self): - fc = FileCreator(self.k_window_test_size, "window_test") - half_size = fc.size / 2 - rofs = align_to_mmap(4200, False) - rfull = MapRegion(fc.path, 0, fc.size) - rhalfofs = MapRegion(fc.path, rofs, fc.size) - rhalfsize = MapRegion(fc.path, 0, half_size) - - # offsets - assert rfull.ofs_begin() == 0 and rfull.size() == fc.size - assert rfull.ofs_end() == fc.size # if this method works, it works always - - assert rhalfofs.ofs_begin() == rofs and rhalfofs.size() == fc.size - rofs - assert rhalfsize.ofs_begin() == 0 and rhalfsize.size() == half_size - - assert rfull.includes_ofs(0) and rfull.includes_ofs(fc.size-1) and rfull.includes_ofs(half_size) - assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxint) - # with the values we have, this test only works on windows where an alignment - # size of 4096 is assumed. - # We only test on linux as it is inconsitent between the python versions - # as they use different mapping techniques to circumvent the missing offset - # argument of mmap. - if sys.platform != 'win32': - assert rhalfofs.includes_ofs(rofs) and not rhalfofs.includes_ofs(0) - #END handle platforms - - # auto-refcount - assert rfull.client_count() == 1 - rfull2 = rfull - assert rfull.client_count() == 2 - - # usage - assert rfull.usage_count() == 0 - rfull.increment_usage_count() - assert rfull.usage_count() == 1 - - # window constructor - w = MapWindow.from_region(rfull) - assert w.ofs == rfull.ofs_begin() and w.ofs_end() == rfull.ofs_end() - - def test_region_list(self): - fc = FileCreator(100, "sample_file") - - fd = os.open(fc.path, os.O_RDONLY) - for item in (fc.path, fd): - ml = MapRegionList(item) - - assert ml.client_count() == 1 - - assert len(ml) == 0 - assert ml.path_or_fd() == item - assert ml.file_size() == fc.size - #END handle input - os.close(fd) - - def test_util(self): - assert isinstance(is_64_bit(), bool) # just call it - assert align_to_mmap(1, False) == 0 - assert align_to_mmap(1, True) == ALLOCATIONGRANULARITY - + + def test_window(self): + wl = MapWindow(0, 1) # left + wc = MapWindow(1, 1) # center + wc2 = MapWindow(10, 5) # another center + wr = MapWindow(8000, 50) # right + + assert wl.ofs_end() == 1 + assert wc.ofs_end() == 2 + assert wr.ofs_end() == 8050 + + # extension does nothing if already in place + maxsize = 100 + wc.extend_left_to(wl, maxsize) + assert wc.ofs == 1 and wc.size == 1 + wl.extend_right_to(wc, maxsize) + wl.extend_right_to(wc, maxsize) + assert wl.ofs == 0 and wl.size == 1 + + # an actual left extension + pofs_end = wc2.ofs_end() + wc2.extend_left_to(wc, maxsize) + assert wc2.ofs == wc.ofs_end() and pofs_end == wc2.ofs_end() + + + # respects maxsize + wc.extend_right_to(wr, maxsize) + assert wc.ofs == 1 and wc.size == maxsize + wc.extend_right_to(wr, maxsize) + assert wc.ofs == 1 and wc.size == maxsize + + # without maxsize + wc.extend_right_to(wr, sys.maxint) + assert wc.ofs_end() == wr.ofs and wc.ofs == 1 + + # extend left + wr.extend_left_to(wc2, maxsize) + wr.extend_left_to(wc2, maxsize) + assert wr.size == maxsize + + wr.extend_left_to(wc2, sys.maxint) + assert wr.ofs == wc2.ofs_end() + + wc.align() + assert wc.ofs == 0 and wc.size == align_to_mmap(wc.size, True) + + def test_region(self): + fc = FileCreator(self.k_window_test_size, "window_test") + half_size = fc.size / 2 + rofs = align_to_mmap(4200, False) + rfull = MapRegion(fc.path, 0, fc.size) + rhalfofs = MapRegion(fc.path, rofs, fc.size) + rhalfsize = MapRegion(fc.path, 0, half_size) + + # offsets + assert rfull.ofs_begin() == 0 and rfull.size() == fc.size + assert rfull.ofs_end() == fc.size # if this method works, it works always + + assert rhalfofs.ofs_begin() == rofs and rhalfofs.size() == fc.size - rofs + assert rhalfsize.ofs_begin() == 0 and rhalfsize.size() == half_size + + assert rfull.includes_ofs(0) and rfull.includes_ofs(fc.size-1) and rfull.includes_ofs(half_size) + assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxint) + # with the values we have, this test only works on windows where an alignment + # size of 4096 is assumed. + # We only test on linux as it is inconsitent between the python versions + # as they use different mapping techniques to circumvent the missing offset + # argument of mmap. + if sys.platform != 'win32': + assert rhalfofs.includes_ofs(rofs) and not rhalfofs.includes_ofs(0) + #END handle platforms + + # auto-refcount + assert rfull.client_count() == 1 + rfull2 = rfull + assert rfull.client_count() == 2 + + # usage + assert rfull.usage_count() == 0 + rfull.increment_usage_count() + assert rfull.usage_count() == 1 + + # window constructor + w = MapWindow.from_region(rfull) + assert w.ofs == rfull.ofs_begin() and w.ofs_end() == rfull.ofs_end() + + def test_region_list(self): + fc = FileCreator(100, "sample_file") + + fd = os.open(fc.path, os.O_RDONLY) + for item in (fc.path, fd): + ml = MapRegionList(item) + + assert ml.client_count() == 1 + + assert len(ml) == 0 + assert ml.path_or_fd() == item + assert ml.file_size() == fc.size + #END handle input + os.close(fd) + + def test_util(self): + assert isinstance(is_64_bit(), bool) # just call it + assert align_to_mmap(1, False) == 0 + assert align_to_mmap(1, True) == ALLOCATIONGRANULARITY + diff --git a/smmap/util.py b/smmap/util.py index b0fd83b3f..c6710b3fe 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -5,36 +5,36 @@ from mmap import mmap, ACCESS_READ try: - from mmap import ALLOCATIONGRANULARITY + from mmap import ALLOCATIONGRANULARITY except ImportError: - # in python pre 2.6, the ALLOCATIONGRANULARITY does not exist as it is mainly - # useful for aligning the offset. The offset argument doesn't exist there though - from mmap import PAGESIZE as ALLOCATIONGRANULARITY + # in python pre 2.6, the ALLOCATIONGRANULARITY does not exist as it is mainly + # useful for aligning the offset. The offset argument doesn't exist there though + from mmap import PAGESIZE as ALLOCATIONGRANULARITY #END handle pythons missing quality assurance from sys import getrefcount -__all__ = [ "align_to_mmap", "is_64_bit", - "MapWindow", "MapRegion", "MapRegionList", "ALLOCATIONGRANULARITY"] +__all__ = [ "align_to_mmap", "is_64_bit", + "MapWindow", "MapRegion", "MapRegionList", "ALLOCATIONGRANULARITY"] #{ Utilities def align_to_mmap(num, round_up): - """ - Align the given integer number to the closest page offset, which usually is 4096 bytes. - - :param round_up: if True, the next higher multiple of page size is used, otherwise - the lower page_size will be used (i.e. if True, 1 becomes 4096, otherwise it becomes 0) - :return: num rounded to closest page""" - res = (num / ALLOCATIONGRANULARITY) * ALLOCATIONGRANULARITY; - if round_up and (res != num): - res += ALLOCATIONGRANULARITY - #END handle size - return res; - + """ + Align the given integer number to the closest page offset, which usually is 4096 bytes. + + :param round_up: if True, the next higher multiple of page size is used, otherwise + the lower page_size will be used (i.e. if True, 1 becomes 4096, otherwise it becomes 0) + :return: num rounded to closest page""" + res = (num / ALLOCATIONGRANULARITY) * ALLOCATIONGRANULARITY; + if round_up and (res != num): + res += ALLOCATIONGRANULARITY + #END handle size + return res; + def is_64_bit(): - """:return: True if the system is 64 bit. Otherwise it can be assumed to be 32 bit""" - return sys.maxint > (1<<32) - 1 + """:return: True if the system is 64 bit. Otherwise it can be assumed to be 32 bit""" + return sys.maxint > (1<<32) - 1 #}END utilities @@ -42,228 +42,228 @@ def is_64_bit(): #{ Utility Classes class MapWindow(object): - """Utility type which is used to snap windows towards each other, and to adjust their size""" - __slots__ = ( - 'ofs', # offset into the file in bytes - 'size' # size of the window in bytes - ) + """Utility type which is used to snap windows towards each other, and to adjust their size""" + __slots__ = ( + 'ofs', # offset into the file in bytes + 'size' # size of the window in bytes + ) - def __init__(self, offset, size): - self.ofs = offset - self.size = size + def __init__(self, offset, size): + self.ofs = offset + self.size = size - def __repr__(self): - return "MapWindow(%i, %i)" % (self.ofs, self.size) + def __repr__(self): + return "MapWindow(%i, %i)" % (self.ofs, self.size) - @classmethod - def from_region(cls, region): - """:return: new window from a region""" - return cls(region._b, region.size()) + @classmethod + def from_region(cls, region): + """:return: new window from a region""" + return cls(region._b, region.size()) - def ofs_end(self): - return self.ofs + self.size + def ofs_end(self): + return self.ofs + self.size - def align(self): - """Assures the previous window area is contained in the new one""" - nofs = align_to_mmap(self.ofs, 0) - self.size += self.ofs - nofs # keep size constant - self.ofs = nofs - self.size = align_to_mmap(self.size, 1) + def align(self): + """Assures the previous window area is contained in the new one""" + nofs = align_to_mmap(self.ofs, 0) + self.size += self.ofs - nofs # keep size constant + self.ofs = nofs + self.size = align_to_mmap(self.size, 1) - def extend_left_to(self, window, max_size): - """Adjust the offset to start where the given window on our left ends if possible, - but don't make yourself larger than max_size. - The resize will assure that the new window still contains the old window area""" - rofs = self.ofs - window.ofs_end() - nsize = rofs + self.size - rofs -= nsize - min(nsize, max_size) - self.ofs = self.ofs - rofs - self.size += rofs + def extend_left_to(self, window, max_size): + """Adjust the offset to start where the given window on our left ends if possible, + but don't make yourself larger than max_size. + The resize will assure that the new window still contains the old window area""" + rofs = self.ofs - window.ofs_end() + nsize = rofs + self.size + rofs -= nsize - min(nsize, max_size) + self.ofs = self.ofs - rofs + self.size += rofs - def extend_right_to(self, window, max_size): - """Adjust the size to make our window end where the right window begins, but don't - get larger than max_size""" - self.size = min(self.size + (window.ofs - self.ofs_end()), max_size) + def extend_right_to(self, window, max_size): + """Adjust the size to make our window end where the right window begins, but don't + get larger than max_size""" + self.size = min(self.size + (window.ofs - self.ofs_end()), max_size) class MapRegion(object): - """Defines a mapped region of memory, aligned to pagesizes - - **Note:** deallocates used region automatically on destruction""" - __slots__ = [ - '_b' , # beginning of mapping - '_mf', # mapped memory chunk (as returned by mmap) - '_uc', # total amount of usages - '_size', # cached size of our memory map - '__weakref__' - ] - _need_compat_layer = sys.version_info[1] < 6 - - if _need_compat_layer: - __slots__.append('_mfb') # mapped memory buffer to provide offset - #END handle additional slot - - #{ Configuration - # Used for testing only. If True, all data will be loaded into memory at once. - # This makes sure no file handles will remain open. - _test_read_into_memory = False - #} END configuration - - - def __init__(self, path_or_fd, ofs, size, flags = 0): - """Initialize a region, allocate the memory map - :param path_or_fd: path to the file to map, or the opened file descriptor - :param ofs: **aligned** offset into the file to be mapped - :param size: if size is larger then the file on disk, the whole file will be - allocated the the size automatically adjusted - :param flags: additional flags to be given when opening the file. - :raise Exception: if no memory can be allocated""" - self._b = ofs - self._size = 0 - self._uc = 0 - - if isinstance(path_or_fd, int): - fd = path_or_fd - else: - fd = os.open(path_or_fd, os.O_RDONLY|getattr(os, 'O_BINARY', 0)|flags) - #END handle fd - - try: - kwargs = dict(access=ACCESS_READ, offset=ofs) - corrected_size = size - sizeofs = ofs - if self._need_compat_layer: - del(kwargs['offset']) - corrected_size += ofs - sizeofs = 0 - # END handle python not supporting offset ! Arg - - # have to correct size, otherwise (instead of the c version) it will - # bark that the size is too large ... many extra file accesses because - # if this ... argh ! - actual_size = min(os.fstat(fd).st_size - sizeofs, corrected_size) - if self._test_read_into_memory: - self._mf = self._read_into_memory(fd, ofs, actual_size) - else: - self._mf = mmap(fd, actual_size, **kwargs) - #END handle memory mode - - self._size = len(self._mf) - - if self._need_compat_layer: - self._mfb = buffer(self._mf, ofs, self._size) - #END handle buffer wrapping - finally: - if isinstance(path_or_fd, basestring): - os.close(fd) - #END only close it if we opened it - #END close file handle - - def _read_into_memory(self, fd, offset, size): - """:return: string data as read from the given file descriptor, offset and size """ - os.lseek(fd, offset, os.SEEK_SET) - mf = '' - bytes_todo = size - while bytes_todo: - chunk = 1024*1024 - d = os.read(fd, chunk) - bytes_todo -= len(d) - mf += d - #END loop copy items - return mf - - def __repr__(self): - return "MapRegion<%i, %i>" % (self._b, self.size()) - - #{ Interface + """Defines a mapped region of memory, aligned to pagesizes + + **Note:** deallocates used region automatically on destruction""" + __slots__ = [ + '_b' , # beginning of mapping + '_mf', # mapped memory chunk (as returned by mmap) + '_uc', # total amount of usages + '_size', # cached size of our memory map + '__weakref__' + ] + _need_compat_layer = sys.version_info[1] < 6 + + if _need_compat_layer: + __slots__.append('_mfb') # mapped memory buffer to provide offset + #END handle additional slot + + #{ Configuration + # Used for testing only. If True, all data will be loaded into memory at once. + # This makes sure no file handles will remain open. + _test_read_into_memory = False + #} END configuration + + + def __init__(self, path_or_fd, ofs, size, flags = 0): + """Initialize a region, allocate the memory map + :param path_or_fd: path to the file to map, or the opened file descriptor + :param ofs: **aligned** offset into the file to be mapped + :param size: if size is larger then the file on disk, the whole file will be + allocated the the size automatically adjusted + :param flags: additional flags to be given when opening the file. + :raise Exception: if no memory can be allocated""" + self._b = ofs + self._size = 0 + self._uc = 0 + + if isinstance(path_or_fd, int): + fd = path_or_fd + else: + fd = os.open(path_or_fd, os.O_RDONLY|getattr(os, 'O_BINARY', 0)|flags) + #END handle fd + + try: + kwargs = dict(access=ACCESS_READ, offset=ofs) + corrected_size = size + sizeofs = ofs + if self._need_compat_layer: + del(kwargs['offset']) + corrected_size += ofs + sizeofs = 0 + # END handle python not supporting offset ! Arg + + # have to correct size, otherwise (instead of the c version) it will + # bark that the size is too large ... many extra file accesses because + # if this ... argh ! + actual_size = min(os.fstat(fd).st_size - sizeofs, corrected_size) + if self._test_read_into_memory: + self._mf = self._read_into_memory(fd, ofs, actual_size) + else: + self._mf = mmap(fd, actual_size, **kwargs) + #END handle memory mode + + self._size = len(self._mf) + + if self._need_compat_layer: + self._mfb = buffer(self._mf, ofs, self._size) + #END handle buffer wrapping + finally: + if isinstance(path_or_fd, basestring): + os.close(fd) + #END only close it if we opened it + #END close file handle + + def _read_into_memory(self, fd, offset, size): + """:return: string data as read from the given file descriptor, offset and size """ + os.lseek(fd, offset, os.SEEK_SET) + mf = '' + bytes_todo = size + while bytes_todo: + chunk = 1024*1024 + d = os.read(fd, chunk) + bytes_todo -= len(d) + mf += d + #END loop copy items + return mf + + def __repr__(self): + return "MapRegion<%i, %i>" % (self._b, self.size()) + + #{ Interface - def buffer(self): - """:return: a buffer containing the memory""" - return self._mf - - def map(self): - """:return: a memory map containing the memory""" - return self._mf - - def ofs_begin(self): - """:return: absolute byte offset to the first byte of the mapping""" - return self._b - - def size(self): - """:return: total size of the mapped region in bytes""" - return self._size - - def ofs_end(self): - """:return: Absolute offset to one byte beyond the mapping into the file""" - return self._b + self._size - - def includes_ofs(self, ofs): - """:return: True if the given offset can be read in our mapped region""" - return self._b <= ofs < self._b + self._size - - def client_count(self): - """:return: number of clients currently using this region""" - # -1: self on stack, -1 self in this method, -1 self in getrefcount - return getrefcount(self)-3 - - def usage_count(self): - """:return: amount of usages so far""" - return self._uc - - def increment_usage_count(self): - """Adjust the usage count by the given positive or negative offset""" - self._uc += 1 - - # re-define all methods which need offset adjustments in compatibility mode - if _need_compat_layer: - def size(self): - return self._size - self._b - - def ofs_end(self): - # always the size - we are as large as it gets - return self._size - - def buffer(self): - return self._mfb - - def includes_ofs(self, ofs): - return self._b <= ofs < self._size - #END handle compat layer - - #} END interface - - + def buffer(self): + """:return: a buffer containing the memory""" + return self._mf + + def map(self): + """:return: a memory map containing the memory""" + return self._mf + + def ofs_begin(self): + """:return: absolute byte offset to the first byte of the mapping""" + return self._b + + def size(self): + """:return: total size of the mapped region in bytes""" + return self._size + + def ofs_end(self): + """:return: Absolute offset to one byte beyond the mapping into the file""" + return self._b + self._size + + def includes_ofs(self, ofs): + """:return: True if the given offset can be read in our mapped region""" + return self._b <= ofs < self._b + self._size + + def client_count(self): + """:return: number of clients currently using this region""" + # -1: self on stack, -1 self in this method, -1 self in getrefcount + return getrefcount(self)-3 + + def usage_count(self): + """:return: amount of usages so far""" + return self._uc + + def increment_usage_count(self): + """Adjust the usage count by the given positive or negative offset""" + self._uc += 1 + + # re-define all methods which need offset adjustments in compatibility mode + if _need_compat_layer: + def size(self): + return self._size - self._b + + def ofs_end(self): + # always the size - we are as large as it gets + return self._size + + def buffer(self): + return self._mfb + + def includes_ofs(self, ofs): + return self._b <= ofs < self._size + #END handle compat layer + + #} END interface + + class MapRegionList(list): - """List of MapRegion instances associating a path with a list of regions.""" - __slots__ = ( - '_path_or_fd', # path or file descriptor which is mapped by all our regions - '_file_size' # total size of the file we map - ) - - def __new__(cls, path): - return super(MapRegionList, cls).__new__(cls) - - def __init__(self, path_or_fd): - self._path_or_fd = path_or_fd - self._file_size = None - - def client_count(self): - """:return: amount of clients which hold a reference to this instance""" - return getrefcount(self)-3 - - def path_or_fd(self): - """:return: path or file descriptor we are attached to""" - return self._path_or_fd - - def file_size(self): - """:return: size of file we manager""" - if self._file_size is None: - if isinstance(self._path_or_fd, basestring): - self._file_size = os.stat(self._path_or_fd).st_size - else: - self._file_size = os.fstat(self._path_or_fd).st_size - #END handle path type - #END update file size - return self._file_size - + """List of MapRegion instances associating a path with a list of regions.""" + __slots__ = ( + '_path_or_fd', # path or file descriptor which is mapped by all our regions + '_file_size' # total size of the file we map + ) + + def __new__(cls, path): + return super(MapRegionList, cls).__new__(cls) + + def __init__(self, path_or_fd): + self._path_or_fd = path_or_fd + self._file_size = None + + def client_count(self): + """:return: amount of clients which hold a reference to this instance""" + return getrefcount(self)-3 + + def path_or_fd(self): + """:return: path or file descriptor we are attached to""" + return self._path_or_fd + + def file_size(self): + """:return: size of file we manager""" + if self._file_size is None: + if isinstance(self._path_or_fd, basestring): + self._file_size = os.stat(self._path_or_fd).st_size + else: + self._file_size = os.fstat(self._path_or_fd).st_size + #END handle path type + #END update file size + return self._file_size + #} END utilty classes From 6576d5503a64d124fd7bcf639cc8955918b3ac43 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 9 Feb 2014 20:51:43 +0100 Subject: [PATCH 0204/2375] tabs to spaces --- gitdb/__init__.py | 22 +- gitdb/base.py | 556 ++--- gitdb/db/base.py | 586 ++--- gitdb/db/git.py | 134 +- gitdb/db/loose.py | 470 ++-- gitdb/db/mem.py | 188 +- gitdb/db/pack.py | 374 ++-- gitdb/db/ref.py | 138 +- gitdb/exc.py | 30 +- gitdb/ext/async | 2 +- gitdb/ext/smmap | 2 +- gitdb/fun.py | 1206 +++++------ gitdb/pack.py | 1920 ++++++++--------- gitdb/stream.py | 1288 +++++------ gitdb/test/__init__.py | 8 +- gitdb/test/db/lib.py | 376 ++-- gitdb/test/db/test_git.py | 74 +- gitdb/test/db/test_loose.py | 50 +- gitdb/test/db/test_mem.py | 46 +- gitdb/test/db/test_pack.py | 118 +- gitdb/test/db/test_ref.py | 98 +- gitdb/test/lib.py | 206 +- gitdb/test/performance/lib.py | 56 +- gitdb/test/performance/test_pack.py | 150 +- gitdb/test/performance/test_pack_streaming.py | 120 +- gitdb/test/performance/test_stream.py | 324 +-- gitdb/test/test_base.py | 168 +- gitdb/test/test_example.py | 102 +- gitdb/test/test_pack.py | 438 ++-- gitdb/test/test_stream.py | 266 +-- gitdb/test/test_util.py | 184 +- gitdb/util.py | 538 ++--- 32 files changed, 5119 insertions(+), 5119 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 800b292da..ff750d14c 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -9,17 +9,17 @@ #{ Initialization def _init_externals(): - """Initialize external projects by putting them into the path""" - for module in ('async', 'smmap'): - sys.path.append(os.path.join(os.path.dirname(__file__), 'ext', module)) - - try: - __import__(module) - except ImportError: - raise ImportError("'%s' could not be imported, assure it is located in your PYTHONPATH" % module) - #END verify import - #END handel imports - + """Initialize external projects by putting them into the path""" + for module in ('async', 'smmap'): + sys.path.append(os.path.join(os.path.dirname(__file__), 'ext', module)) + + try: + __import__(module) + except ImportError: + raise ImportError("'%s' could not be imported, assure it is located in your PYTHONPATH" % module) + #END verify import + #END handel imports + #} END initialization _init_externals() diff --git a/gitdb/base.py b/gitdb/base.py index ff1062bf6..bad5f7472 100644 --- a/gitdb/base.py +++ b/gitdb/base.py @@ -4,308 +4,308 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module with basic data structures - they are designed to be lightweight and fast""" from util import ( - bin_to_hex, - zlib - ) + bin_to_hex, + zlib + ) from fun import ( - type_id_to_type_map, - type_to_type_id_map - ) + type_id_to_type_map, + type_to_type_id_map + ) __all__ = ('OInfo', 'OPackInfo', 'ODeltaPackInfo', - 'OStream', 'OPackStream', 'ODeltaPackStream', - 'IStream', 'InvalidOInfo', 'InvalidOStream' ) + 'OStream', 'OPackStream', 'ODeltaPackStream', + 'IStream', 'InvalidOInfo', 'InvalidOStream' ) #{ ODB Bases class OInfo(tuple): - """Carries information about an object in an ODB, provding information - about the binary sha of the object, the type_string as well as the uncompressed size - in bytes. - - It can be accessed using tuple notation and using attribute access notation:: - - assert dbi[0] == dbi.binsha - assert dbi[1] == dbi.type - assert dbi[2] == dbi.size - - The type is designed to be as lighteight as possible.""" - __slots__ = tuple() - - def __new__(cls, sha, type, size): - return tuple.__new__(cls, (sha, type, size)) - - def __init__(self, *args): - tuple.__init__(self) - - #{ Interface - @property - def binsha(self): - """:return: our sha as binary, 20 bytes""" - return self[0] - - @property - def hexsha(self): - """:return: our sha, hex encoded, 40 bytes""" - return bin_to_hex(self[0]) - - @property - def type(self): - return self[1] - - @property - def type_id(self): - return type_to_type_id_map[self[1]] - - @property - def size(self): - return self[2] - #} END interface - - + """Carries information about an object in an ODB, provding information + about the binary sha of the object, the type_string as well as the uncompressed size + in bytes. + + It can be accessed using tuple notation and using attribute access notation:: + + assert dbi[0] == dbi.binsha + assert dbi[1] == dbi.type + assert dbi[2] == dbi.size + + The type is designed to be as lighteight as possible.""" + __slots__ = tuple() + + def __new__(cls, sha, type, size): + return tuple.__new__(cls, (sha, type, size)) + + def __init__(self, *args): + tuple.__init__(self) + + #{ Interface + @property + def binsha(self): + """:return: our sha as binary, 20 bytes""" + return self[0] + + @property + def hexsha(self): + """:return: our sha, hex encoded, 40 bytes""" + return bin_to_hex(self[0]) + + @property + def type(self): + return self[1] + + @property + def type_id(self): + return type_to_type_id_map[self[1]] + + @property + def size(self): + return self[2] + #} END interface + + class OPackInfo(tuple): - """As OInfo, but provides a type_id property to retrieve the numerical type id, and - does not include a sha. - - Additionally, the pack_offset is the absolute offset into the packfile at which - all object information is located. The data_offset property points to the abosolute - location in the pack at which that actual data stream can be found.""" - __slots__ = tuple() - - def __new__(cls, packoffset, type, size): - return tuple.__new__(cls, (packoffset,type, size)) - - def __init__(self, *args): - tuple.__init__(self) - - #{ Interface - - @property - def pack_offset(self): - return self[0] - - @property - def type(self): - return type_id_to_type_map[self[1]] - - @property - def type_id(self): - return self[1] - - @property - def size(self): - return self[2] - - #} END interface - - + """As OInfo, but provides a type_id property to retrieve the numerical type id, and + does not include a sha. + + Additionally, the pack_offset is the absolute offset into the packfile at which + all object information is located. The data_offset property points to the abosolute + location in the pack at which that actual data stream can be found.""" + __slots__ = tuple() + + def __new__(cls, packoffset, type, size): + return tuple.__new__(cls, (packoffset,type, size)) + + def __init__(self, *args): + tuple.__init__(self) + + #{ Interface + + @property + def pack_offset(self): + return self[0] + + @property + def type(self): + return type_id_to_type_map[self[1]] + + @property + def type_id(self): + return self[1] + + @property + def size(self): + return self[2] + + #} END interface + + class ODeltaPackInfo(OPackInfo): - """Adds delta specific information, - Either the 20 byte sha which points to some object in the database, - or the negative offset from the pack_offset, so that pack_offset - delta_info yields - the pack offset of the base object""" - __slots__ = tuple() - - def __new__(cls, packoffset, type, size, delta_info): - return tuple.__new__(cls, (packoffset, type, size, delta_info)) - - #{ Interface - @property - def delta_info(self): - return self[3] - #} END interface - - + """Adds delta specific information, + Either the 20 byte sha which points to some object in the database, + or the negative offset from the pack_offset, so that pack_offset - delta_info yields + the pack offset of the base object""" + __slots__ = tuple() + + def __new__(cls, packoffset, type, size, delta_info): + return tuple.__new__(cls, (packoffset, type, size, delta_info)) + + #{ Interface + @property + def delta_info(self): + return self[3] + #} END interface + + class OStream(OInfo): - """Base for object streams retrieved from the database, providing additional - information about the stream. - Generally, ODB streams are read-only as objects are immutable""" - __slots__ = tuple() - - def __new__(cls, sha, type, size, stream, *args, **kwargs): - """Helps with the initialization of subclasses""" - return tuple.__new__(cls, (sha, type, size, stream)) - - - def __init__(self, *args, **kwargs): - tuple.__init__(self) - - #{ Stream Reader Interface - - def read(self, size=-1): - return self[3].read(size) - - @property - def stream(self): - return self[3] - - #} END stream reader interface - - + """Base for object streams retrieved from the database, providing additional + information about the stream. + Generally, ODB streams are read-only as objects are immutable""" + __slots__ = tuple() + + def __new__(cls, sha, type, size, stream, *args, **kwargs): + """Helps with the initialization of subclasses""" + return tuple.__new__(cls, (sha, type, size, stream)) + + + def __init__(self, *args, **kwargs): + tuple.__init__(self) + + #{ Stream Reader Interface + + def read(self, size=-1): + return self[3].read(size) + + @property + def stream(self): + return self[3] + + #} END stream reader interface + + class ODeltaStream(OStream): - """Uses size info of its stream, delaying reads""" - - def __new__(cls, sha, type, size, stream, *args, **kwargs): - """Helps with the initialization of subclasses""" - return tuple.__new__(cls, (sha, type, size, stream)) - - #{ Stream Reader Interface - - @property - def size(self): - return self[3].size - - #} END stream reader interface - - + """Uses size info of its stream, delaying reads""" + + def __new__(cls, sha, type, size, stream, *args, **kwargs): + """Helps with the initialization of subclasses""" + return tuple.__new__(cls, (sha, type, size, stream)) + + #{ Stream Reader Interface + + @property + def size(self): + return self[3].size + + #} END stream reader interface + + class OPackStream(OPackInfo): - """Next to pack object information, a stream outputting an undeltified base object - is provided""" - __slots__ = tuple() - - def __new__(cls, packoffset, type, size, stream, *args): - """Helps with the initialization of subclasses""" - return tuple.__new__(cls, (packoffset, type, size, stream)) - - #{ Stream Reader Interface - def read(self, size=-1): - return self[3].read(size) - - @property - def stream(self): - return self[3] - #} END stream reader interface + """Next to pack object information, a stream outputting an undeltified base object + is provided""" + __slots__ = tuple() + + def __new__(cls, packoffset, type, size, stream, *args): + """Helps with the initialization of subclasses""" + return tuple.__new__(cls, (packoffset, type, size, stream)) + + #{ Stream Reader Interface + def read(self, size=-1): + return self[3].read(size) + + @property + def stream(self): + return self[3] + #} END stream reader interface - + class ODeltaPackStream(ODeltaPackInfo): - """Provides a stream outputting the uncompressed offset delta information""" - __slots__ = tuple() - - def __new__(cls, packoffset, type, size, delta_info, stream): - return tuple.__new__(cls, (packoffset, type, size, delta_info, stream)) + """Provides a stream outputting the uncompressed offset delta information""" + __slots__ = tuple() + + def __new__(cls, packoffset, type, size, delta_info, stream): + return tuple.__new__(cls, (packoffset, type, size, delta_info, stream)) - #{ Stream Reader Interface - def read(self, size=-1): - return self[4].read(size) - - @property - def stream(self): - return self[4] - #} END stream reader interface + #{ Stream Reader Interface + def read(self, size=-1): + return self[4].read(size) + + @property + def stream(self): + return self[4] + #} END stream reader interface class IStream(list): - """Represents an input content stream to be fed into the ODB. It is mutable to allow - the ODB to record information about the operations outcome right in this instance. - - It provides interfaces for the OStream and a StreamReader to allow the instance - to blend in without prior conversion. - - The only method your content stream must support is 'read'""" - __slots__ = tuple() - - def __new__(cls, type, size, stream, sha=None): - return list.__new__(cls, (sha, type, size, stream, None)) - - def __init__(self, type, size, stream, sha=None): - list.__init__(self, (sha, type, size, stream, None)) - - #{ Interface - @property - def hexsha(self): - """:return: our sha, hex encoded, 40 bytes""" - return bin_to_hex(self[0]) - - def _error(self): - """:return: the error that occurred when processing the stream, or None""" - return self[4] - - def _set_error(self, exc): - """Set this input stream to the given exc, may be None to reset the error""" - self[4] = exc - - error = property(_error, _set_error) - - #} END interface - - #{ Stream Reader Interface - - def read(self, size=-1): - """Implements a simple stream reader interface, passing the read call on - to our internal stream""" - return self[3].read(size) - - #} END stream reader interface - - #{ interface - - def _set_binsha(self, binsha): - self[0] = binsha - - def _binsha(self): - return self[0] - - binsha = property(_binsha, _set_binsha) - - - def _type(self): - return self[1] - - def _set_type(self, type): - self[1] = type - - type = property(_type, _set_type) - - def _size(self): - return self[2] - - def _set_size(self, size): - self[2] = size - - size = property(_size, _set_size) - - def _stream(self): - return self[3] - - def _set_stream(self, stream): - self[3] = stream - - stream = property(_stream, _set_stream) - - #} END odb info interface - + """Represents an input content stream to be fed into the ODB. It is mutable to allow + the ODB to record information about the operations outcome right in this instance. + + It provides interfaces for the OStream and a StreamReader to allow the instance + to blend in without prior conversion. + + The only method your content stream must support is 'read'""" + __slots__ = tuple() + + def __new__(cls, type, size, stream, sha=None): + return list.__new__(cls, (sha, type, size, stream, None)) + + def __init__(self, type, size, stream, sha=None): + list.__init__(self, (sha, type, size, stream, None)) + + #{ Interface + @property + def hexsha(self): + """:return: our sha, hex encoded, 40 bytes""" + return bin_to_hex(self[0]) + + def _error(self): + """:return: the error that occurred when processing the stream, or None""" + return self[4] + + def _set_error(self, exc): + """Set this input stream to the given exc, may be None to reset the error""" + self[4] = exc + + error = property(_error, _set_error) + + #} END interface + + #{ Stream Reader Interface + + def read(self, size=-1): + """Implements a simple stream reader interface, passing the read call on + to our internal stream""" + return self[3].read(size) + + #} END stream reader interface + + #{ interface + + def _set_binsha(self, binsha): + self[0] = binsha + + def _binsha(self): + return self[0] + + binsha = property(_binsha, _set_binsha) + + + def _type(self): + return self[1] + + def _set_type(self, type): + self[1] = type + + type = property(_type, _set_type) + + def _size(self): + return self[2] + + def _set_size(self, size): + self[2] = size + + size = property(_size, _set_size) + + def _stream(self): + return self[3] + + def _set_stream(self, stream): + self[3] = stream + + stream = property(_stream, _set_stream) + + #} END odb info interface + class InvalidOInfo(tuple): - """Carries information about a sha identifying an object which is invalid in - the queried database. The exception attribute provides more information about - the cause of the issue""" - __slots__ = tuple() - - def __new__(cls, sha, exc): - return tuple.__new__(cls, (sha, exc)) - - def __init__(self, sha, exc): - tuple.__init__(self, (sha, exc)) - - @property - def binsha(self): - return self[0] - - @property - def hexsha(self): - return bin_to_hex(self[0]) - - @property - def error(self): - """:return: exception instance explaining the failure""" - return self[1] + """Carries information about a sha identifying an object which is invalid in + the queried database. The exception attribute provides more information about + the cause of the issue""" + __slots__ = tuple() + + def __new__(cls, sha, exc): + return tuple.__new__(cls, (sha, exc)) + + def __init__(self, sha, exc): + tuple.__init__(self, (sha, exc)) + + @property + def binsha(self): + return self[0] + + @property + def hexsha(self): + return bin_to_hex(self[0]) + + @property + def error(self): + """:return: exception instance explaining the failure""" + return self[1] class InvalidOStream(InvalidOInfo): - """Carries information about an invalid ODB stream""" - __slots__ = tuple() - + """Carries information about an invalid ODB stream""" + __slots__ = tuple() + #} END ODB Bases diff --git a/gitdb/db/base.py b/gitdb/db/base.py index 984acafbf..867e93a81 100644 --- a/gitdb/db/base.py +++ b/gitdb/db/base.py @@ -4,20 +4,20 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains implementations of database retrieveing objects""" from gitdb.util import ( - pool, - join, - LazyMixin, - hex_to_bin - ) + pool, + join, + LazyMixin, + hex_to_bin + ) from gitdb.exc import ( - BadObject, - AmbiguousObjectName - ) + BadObject, + AmbiguousObjectName + ) from async import ( - ChannelThreadTask - ) + ChannelThreadTask + ) from itertools import chain @@ -26,301 +26,301 @@ class ObjectDBR(object): - """Defines an interface for object database lookup. - Objects are identified either by their 20 byte bin sha""" - - def __contains__(self, sha): - return self.has_obj - - #{ Query Interface - def has_object(self, sha): - """ - :return: True if the object identified by the given 20 bytes - binary sha is contained in the database""" - raise NotImplementedError("To be implemented in subclass") - - def has_object_async(self, reader): - """Return a reader yielding information about the membership of objects - as identified by shas - :param reader: Reader yielding 20 byte shas. - :return: async.Reader yielding tuples of (sha, bool) pairs which indicate - whether the given sha exists in the database or not""" - task = ChannelThreadTask(reader, str(self.has_object_async), lambda sha: (sha, self.has_object(sha))) - return pool.add_task(task) - - def info(self, sha): - """ :return: OInfo instance - :param sha: bytes binary sha - :raise BadObject:""" - raise NotImplementedError("To be implemented in subclass") - - def info_async(self, reader): - """Retrieve information of a multitude of objects asynchronously - :param reader: Channel yielding the sha's of the objects of interest - :return: async.Reader yielding OInfo|InvalidOInfo, in any order""" - task = ChannelThreadTask(reader, str(self.info_async), self.info) - return pool.add_task(task) - - def stream(self, sha): - """:return: OStream instance - :param sha: 20 bytes binary sha - :raise BadObject:""" - raise NotImplementedError("To be implemented in subclass") - - def stream_async(self, reader): - """Retrieve the OStream of multiple objects - :param reader: see ``info`` - :param max_threads: see ``ObjectDBW.store`` - :return: async.Reader yielding OStream|InvalidOStream instances in any order - - **Note:** depending on the system configuration, it might not be possible to - read all OStreams at once. Instead, read them individually using reader.read(x) - where x is small enough.""" - # base implementation just uses the stream method repeatedly - task = ChannelThreadTask(reader, str(self.stream_async), self.stream) - return pool.add_task(task) - - def size(self): - """:return: amount of objects in this database""" - raise NotImplementedError() - - def sha_iter(self): - """Return iterator yielding 20 byte shas for all objects in this data base""" - raise NotImplementedError() - - #} END query interface - - + """Defines an interface for object database lookup. + Objects are identified either by their 20 byte bin sha""" + + def __contains__(self, sha): + return self.has_obj + + #{ Query Interface + def has_object(self, sha): + """ + :return: True if the object identified by the given 20 bytes + binary sha is contained in the database""" + raise NotImplementedError("To be implemented in subclass") + + def has_object_async(self, reader): + """Return a reader yielding information about the membership of objects + as identified by shas + :param reader: Reader yielding 20 byte shas. + :return: async.Reader yielding tuples of (sha, bool) pairs which indicate + whether the given sha exists in the database or not""" + task = ChannelThreadTask(reader, str(self.has_object_async), lambda sha: (sha, self.has_object(sha))) + return pool.add_task(task) + + def info(self, sha): + """ :return: OInfo instance + :param sha: bytes binary sha + :raise BadObject:""" + raise NotImplementedError("To be implemented in subclass") + + def info_async(self, reader): + """Retrieve information of a multitude of objects asynchronously + :param reader: Channel yielding the sha's of the objects of interest + :return: async.Reader yielding OInfo|InvalidOInfo, in any order""" + task = ChannelThreadTask(reader, str(self.info_async), self.info) + return pool.add_task(task) + + def stream(self, sha): + """:return: OStream instance + :param sha: 20 bytes binary sha + :raise BadObject:""" + raise NotImplementedError("To be implemented in subclass") + + def stream_async(self, reader): + """Retrieve the OStream of multiple objects + :param reader: see ``info`` + :param max_threads: see ``ObjectDBW.store`` + :return: async.Reader yielding OStream|InvalidOStream instances in any order + + **Note:** depending on the system configuration, it might not be possible to + read all OStreams at once. Instead, read them individually using reader.read(x) + where x is small enough.""" + # base implementation just uses the stream method repeatedly + task = ChannelThreadTask(reader, str(self.stream_async), self.stream) + return pool.add_task(task) + + def size(self): + """:return: amount of objects in this database""" + raise NotImplementedError() + + def sha_iter(self): + """Return iterator yielding 20 byte shas for all objects in this data base""" + raise NotImplementedError() + + #} END query interface + + class ObjectDBW(object): - """Defines an interface to create objects in the database""" - - def __init__(self, *args, **kwargs): - self._ostream = None - - #{ Edit Interface - def set_ostream(self, stream): - """ - Adjusts the stream to which all data should be sent when storing new objects - - :param stream: if not None, the stream to use, if None the default stream - will be used. - :return: previously installed stream, or None if there was no override - :raise TypeError: if the stream doesn't have the supported functionality""" - cstream = self._ostream - self._ostream = stream - return cstream - - def ostream(self): - """ - :return: overridden output stream this instance will write to, or None - if it will write to the default stream""" - return self._ostream - - def store(self, istream): - """ - Create a new object in the database - :return: the input istream object with its sha set to its corresponding value - - :param istream: IStream compatible instance. If its sha is already set - to a value, the object will just be stored in the our database format, - in which case the input stream is expected to be in object format ( header + contents ). - :raise IOError: if data could not be written""" - raise NotImplementedError("To be implemented in subclass") - - def store_async(self, reader): - """ - Create multiple new objects in the database asynchronously. The method will - return right away, returning an output channel which receives the results as - they are computed. - - :return: Channel yielding your IStream which served as input, in any order. - The IStreams sha will be set to the sha it received during the process, - or its error attribute will be set to the exception informing about the error. - - :param reader: async.Reader yielding IStream instances. - The same instances will be used in the output channel as were received - in by the Reader. - - **Note:** As some ODB implementations implement this operation atomic, they might - abort the whole operation if one item could not be processed. Hence check how - many items have actually been produced.""" - # base implementation uses store to perform the work - task = ChannelThreadTask(reader, str(self.store_async), self.store) - return pool.add_task(task) - - #} END edit interface - + """Defines an interface to create objects in the database""" + + def __init__(self, *args, **kwargs): + self._ostream = None + + #{ Edit Interface + def set_ostream(self, stream): + """ + Adjusts the stream to which all data should be sent when storing new objects + + :param stream: if not None, the stream to use, if None the default stream + will be used. + :return: previously installed stream, or None if there was no override + :raise TypeError: if the stream doesn't have the supported functionality""" + cstream = self._ostream + self._ostream = stream + return cstream + + def ostream(self): + """ + :return: overridden output stream this instance will write to, or None + if it will write to the default stream""" + return self._ostream + + def store(self, istream): + """ + Create a new object in the database + :return: the input istream object with its sha set to its corresponding value + + :param istream: IStream compatible instance. If its sha is already set + to a value, the object will just be stored in the our database format, + in which case the input stream is expected to be in object format ( header + contents ). + :raise IOError: if data could not be written""" + raise NotImplementedError("To be implemented in subclass") + + def store_async(self, reader): + """ + Create multiple new objects in the database asynchronously. The method will + return right away, returning an output channel which receives the results as + they are computed. + + :return: Channel yielding your IStream which served as input, in any order. + The IStreams sha will be set to the sha it received during the process, + or its error attribute will be set to the exception informing about the error. + + :param reader: async.Reader yielding IStream instances. + The same instances will be used in the output channel as were received + in by the Reader. + + **Note:** As some ODB implementations implement this operation atomic, they might + abort the whole operation if one item could not be processed. Hence check how + many items have actually been produced.""" + # base implementation uses store to perform the work + task = ChannelThreadTask(reader, str(self.store_async), self.store) + return pool.add_task(task) + + #} END edit interface + class FileDBBase(object): - """Provides basic facilities to retrieve files of interest, including - caching facilities to help mapping hexsha's to objects""" - - def __init__(self, root_path): - """Initialize this instance to look for its files at the given root path - All subsequent operations will be relative to this path - :raise InvalidDBRoot: - **Note:** The base will not perform any accessablity checking as the base - might not yet be accessible, but become accessible before the first - access.""" - super(FileDBBase, self).__init__() - self._root_path = root_path - - - #{ Interface - def root_path(self): - """:return: path at which this db operates""" - return self._root_path - - def db_path(self, rela_path): - """ - :return: the given relative path relative to our database root, allowing - to pontentially access datafiles""" - return join(self._root_path, rela_path) - #} END interface - + """Provides basic facilities to retrieve files of interest, including + caching facilities to help mapping hexsha's to objects""" + + def __init__(self, root_path): + """Initialize this instance to look for its files at the given root path + All subsequent operations will be relative to this path + :raise InvalidDBRoot: + **Note:** The base will not perform any accessablity checking as the base + might not yet be accessible, but become accessible before the first + access.""" + super(FileDBBase, self).__init__() + self._root_path = root_path + + + #{ Interface + def root_path(self): + """:return: path at which this db operates""" + return self._root_path + + def db_path(self, rela_path): + """ + :return: the given relative path relative to our database root, allowing + to pontentially access datafiles""" + return join(self._root_path, rela_path) + #} END interface + class CachingDB(object): - """A database which uses caches to speed-up access""" - - #{ Interface - def update_cache(self, force=False): - """ - Call this method if the underlying data changed to trigger an update - of the internal caching structures. - - :param force: if True, the update must be performed. Otherwise the implementation - may decide not to perform an update if it thinks nothing has changed. - :return: True if an update was performed as something change indeed""" - - # END interface + """A database which uses caches to speed-up access""" + + #{ Interface + def update_cache(self, force=False): + """ + Call this method if the underlying data changed to trigger an update + of the internal caching structures. + + :param force: if True, the update must be performed. Otherwise the implementation + may decide not to perform an update if it thinks nothing has changed. + :return: True if an update was performed as something change indeed""" + + # END interface def _databases_recursive(database, output): - """Fill output list with database from db, in order. Deals with Loose, Packed - and compound databases.""" - if isinstance(database, CompoundDB): - compounds = list() - dbs = database.databases() - output.extend(db for db in dbs if not isinstance(db, CompoundDB)) - for cdb in (db for db in dbs if isinstance(db, CompoundDB)): - _databases_recursive(cdb, output) - else: - output.append(database) - # END handle database type - + """Fill output list with database from db, in order. Deals with Loose, Packed + and compound databases.""" + if isinstance(database, CompoundDB): + compounds = list() + dbs = database.databases() + output.extend(db for db in dbs if not isinstance(db, CompoundDB)) + for cdb in (db for db in dbs if isinstance(db, CompoundDB)): + _databases_recursive(cdb, output) + else: + output.append(database) + # END handle database type + class CompoundDB(ObjectDBR, LazyMixin, CachingDB): - """A database which delegates calls to sub-databases. - - Databases are stored in the lazy-loaded _dbs attribute. - Define _set_cache_ to update it with your databases""" - def _set_cache_(self, attr): - if attr == '_dbs': - self._dbs = list() - elif attr == '_db_cache': - self._db_cache = dict() - else: - super(CompoundDB, self)._set_cache_(attr) - - def _db_query(self, sha): - """:return: database containing the given 20 byte sha - :raise BadObject:""" - # most databases use binary representations, prevent converting - # it everytime a database is being queried - try: - return self._db_cache[sha] - except KeyError: - pass - # END first level cache - - for db in self._dbs: - if db.has_object(sha): - self._db_cache[sha] = db - return db - # END for each database - raise BadObject(sha) - - #{ ObjectDBR interface - - def has_object(self, sha): - try: - self._db_query(sha) - return True - except BadObject: - return False - # END handle exceptions - - def info(self, sha): - return self._db_query(sha).info(sha) - - def stream(self, sha): - return self._db_query(sha).stream(sha) + """A database which delegates calls to sub-databases. + + Databases are stored in the lazy-loaded _dbs attribute. + Define _set_cache_ to update it with your databases""" + def _set_cache_(self, attr): + if attr == '_dbs': + self._dbs = list() + elif attr == '_db_cache': + self._db_cache = dict() + else: + super(CompoundDB, self)._set_cache_(attr) + + def _db_query(self, sha): + """:return: database containing the given 20 byte sha + :raise BadObject:""" + # most databases use binary representations, prevent converting + # it everytime a database is being queried + try: + return self._db_cache[sha] + except KeyError: + pass + # END first level cache + + for db in self._dbs: + if db.has_object(sha): + self._db_cache[sha] = db + return db + # END for each database + raise BadObject(sha) + + #{ ObjectDBR interface + + def has_object(self, sha): + try: + self._db_query(sha) + return True + except BadObject: + return False + # END handle exceptions + + def info(self, sha): + return self._db_query(sha).info(sha) + + def stream(self, sha): + return self._db_query(sha).stream(sha) - def size(self): - """:return: total size of all contained databases""" - return reduce(lambda x,y: x+y, (db.size() for db in self._dbs), 0) - - def sha_iter(self): - return chain(*(db.sha_iter() for db in self._dbs)) - - #} END object DBR Interface - - #{ Interface - - def databases(self): - """:return: tuple of database instances we use for lookups""" - return tuple(self._dbs) + def size(self): + """:return: total size of all contained databases""" + return reduce(lambda x,y: x+y, (db.size() for db in self._dbs), 0) + + def sha_iter(self): + return chain(*(db.sha_iter() for db in self._dbs)) + + #} END object DBR Interface + + #{ Interface + + def databases(self): + """:return: tuple of database instances we use for lookups""" + return tuple(self._dbs) - def update_cache(self, force=False): - # something might have changed, clear everything - self._db_cache.clear() - stat = False - for db in self._dbs: - if isinstance(db, CachingDB): - stat |= db.update_cache(force) - # END if is caching db - # END for each database to update - return stat - - def partial_to_complete_sha_hex(self, partial_hexsha): - """ - :return: 20 byte binary sha1 from the given less-than-40 byte hexsha - :param partial_hexsha: hexsha with less than 40 byte - :raise AmbiguousObjectName: """ - databases = list() - _databases_recursive(self, databases) - - len_partial_hexsha = len(partial_hexsha) - if len_partial_hexsha % 2 != 0: - partial_binsha = hex_to_bin(partial_hexsha + "0") - else: - partial_binsha = hex_to_bin(partial_hexsha) - # END assure successful binary conversion - - candidate = None - for db in databases: - full_bin_sha = None - try: - if hasattr(db, 'partial_to_complete_sha_hex'): - full_bin_sha = db.partial_to_complete_sha_hex(partial_hexsha) - else: - full_bin_sha = db.partial_to_complete_sha(partial_binsha, len_partial_hexsha) - # END handle database type - except BadObject: - continue - # END ignore bad objects - if full_bin_sha: - if candidate and candidate != full_bin_sha: - raise AmbiguousObjectName(partial_hexsha) - candidate = full_bin_sha - # END handle candidate - # END for each db - if not candidate: - raise BadObject(partial_binsha) - return candidate - - #} END interface - + def update_cache(self, force=False): + # something might have changed, clear everything + self._db_cache.clear() + stat = False + for db in self._dbs: + if isinstance(db, CachingDB): + stat |= db.update_cache(force) + # END if is caching db + # END for each database to update + return stat + + def partial_to_complete_sha_hex(self, partial_hexsha): + """ + :return: 20 byte binary sha1 from the given less-than-40 byte hexsha + :param partial_hexsha: hexsha with less than 40 byte + :raise AmbiguousObjectName: """ + databases = list() + _databases_recursive(self, databases) + + len_partial_hexsha = len(partial_hexsha) + if len_partial_hexsha % 2 != 0: + partial_binsha = hex_to_bin(partial_hexsha + "0") + else: + partial_binsha = hex_to_bin(partial_hexsha) + # END assure successful binary conversion + + candidate = None + for db in databases: + full_bin_sha = None + try: + if hasattr(db, 'partial_to_complete_sha_hex'): + full_bin_sha = db.partial_to_complete_sha_hex(partial_hexsha) + else: + full_bin_sha = db.partial_to_complete_sha(partial_binsha, len_partial_hexsha) + # END handle database type + except BadObject: + continue + # END ignore bad objects + if full_bin_sha: + if candidate and candidate != full_bin_sha: + raise AmbiguousObjectName(partial_hexsha) + candidate = full_bin_sha + # END handle candidate + # END for each db + if not candidate: + raise BadObject(partial_binsha) + return candidate + + #} END interface + diff --git a/gitdb/db/git.py b/gitdb/db/git.py index b8fc46aa0..1d6ad0f26 100644 --- a/gitdb/db/git.py +++ b/gitdb/db/git.py @@ -3,10 +3,10 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php from base import ( - CompoundDB, - ObjectDBW, - FileDBBase - ) + CompoundDB, + ObjectDBW, + FileDBBase + ) from loose import LooseObjectDB from pack import PackedDB @@ -14,72 +14,72 @@ from gitdb.util import LazyMixin from gitdb.exc import ( - InvalidDBRoot, - BadObject, - AmbiguousObjectName - ) + InvalidDBRoot, + BadObject, + AmbiguousObjectName + ) import os __all__ = ('GitDB', ) class GitDB(FileDBBase, ObjectDBW, CompoundDB): - """A git-style object database, which contains all objects in the 'objects' - subdirectory""" - # Configuration - PackDBCls = PackedDB - LooseDBCls = LooseObjectDB - ReferenceDBCls = ReferenceDB - - # Directories - packs_dir = 'pack' - loose_dir = '' - alternates_dir = os.path.join('info', 'alternates') - - def __init__(self, root_path): - """Initialize ourselves on a git objects directory""" - super(GitDB, self).__init__(root_path) - - def _set_cache_(self, attr): - if attr == '_dbs' or attr == '_loose_db': - self._dbs = list() - loose_db = None - for subpath, dbcls in ((self.packs_dir, self.PackDBCls), - (self.loose_dir, self.LooseDBCls), - (self.alternates_dir, self.ReferenceDBCls)): - path = self.db_path(subpath) - if os.path.exists(path): - self._dbs.append(dbcls(path)) - if dbcls is self.LooseDBCls: - loose_db = self._dbs[-1] - # END remember loose db - # END check path exists - # END for each db type - - # should have at least one subdb - if not self._dbs: - raise InvalidDBRoot(self.root_path()) - # END handle error - - # we the first one should have the store method - assert loose_db is not None and hasattr(loose_db, 'store'), "First database needs store functionality" - - # finally set the value - self._loose_db = loose_db - else: - super(GitDB, self)._set_cache_(attr) - # END handle attrs - - #{ ObjectDBW interface - - def store(self, istream): - return self._loose_db.store(istream) - - def ostream(self): - return self._loose_db.ostream() - - def set_ostream(self, ostream): - return self._loose_db.set_ostream(ostream) - - #} END objectdbw interface - + """A git-style object database, which contains all objects in the 'objects' + subdirectory""" + # Configuration + PackDBCls = PackedDB + LooseDBCls = LooseObjectDB + ReferenceDBCls = ReferenceDB + + # Directories + packs_dir = 'pack' + loose_dir = '' + alternates_dir = os.path.join('info', 'alternates') + + def __init__(self, root_path): + """Initialize ourselves on a git objects directory""" + super(GitDB, self).__init__(root_path) + + def _set_cache_(self, attr): + if attr == '_dbs' or attr == '_loose_db': + self._dbs = list() + loose_db = None + for subpath, dbcls in ((self.packs_dir, self.PackDBCls), + (self.loose_dir, self.LooseDBCls), + (self.alternates_dir, self.ReferenceDBCls)): + path = self.db_path(subpath) + if os.path.exists(path): + self._dbs.append(dbcls(path)) + if dbcls is self.LooseDBCls: + loose_db = self._dbs[-1] + # END remember loose db + # END check path exists + # END for each db type + + # should have at least one subdb + if not self._dbs: + raise InvalidDBRoot(self.root_path()) + # END handle error + + # we the first one should have the store method + assert loose_db is not None and hasattr(loose_db, 'store'), "First database needs store functionality" + + # finally set the value + self._loose_db = loose_db + else: + super(GitDB, self)._set_cache_(attr) + # END handle attrs + + #{ ObjectDBW interface + + def store(self, istream): + return self._loose_db.store(istream) + + def ostream(self): + return self._loose_db.ostream() + + def set_ostream(self, ostream): + return self._loose_db.set_ostream(ostream) + + #} END objectdbw interface + diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index 6cd1cefd5..dc0ea0e3b 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -3,53 +3,53 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php from base import ( - FileDBBase, - ObjectDBR, - ObjectDBW - ) + FileDBBase, + ObjectDBR, + ObjectDBW + ) from gitdb.exc import ( - InvalidDBRoot, - BadObject, - AmbiguousObjectName - ) + InvalidDBRoot, + BadObject, + AmbiguousObjectName + ) from gitdb.stream import ( - DecompressMemMapReader, - FDCompressedSha1Writer, - FDStream, - Sha1Writer - ) + DecompressMemMapReader, + FDCompressedSha1Writer, + FDStream, + Sha1Writer + ) from gitdb.base import ( - OStream, - OInfo - ) + OStream, + OInfo + ) from gitdb.util import ( - file_contents_ro_filepath, - ENOENT, - hex_to_bin, - bin_to_hex, - exists, - chmod, - isdir, - isfile, - remove, - mkdir, - rename, - dirname, - basename, - join - ) + file_contents_ro_filepath, + ENOENT, + hex_to_bin, + bin_to_hex, + exists, + chmod, + isdir, + isfile, + remove, + mkdir, + rename, + dirname, + basename, + join + ) from gitdb.fun import ( - chunk_size, - loose_object_header_info, - write_object, - stream_copy - ) + chunk_size, + loose_object_header_info, + write_object, + stream_copy + ) import tempfile import mmap @@ -61,202 +61,202 @@ class LooseObjectDB(FileDBBase, ObjectDBR, ObjectDBW): - """A database which operates on loose object files""" - - # CONFIGURATION - # chunks in which data will be copied between streams - stream_chunk_size = chunk_size - - # On windows we need to keep it writable, otherwise it cannot be removed - # either - new_objects_mode = 0444 - if os.name == 'nt': - new_objects_mode = 0644 - - - def __init__(self, root_path): - super(LooseObjectDB, self).__init__(root_path) - self._hexsha_to_file = dict() - # Additional Flags - might be set to 0 after the first failure - # Depending on the root, this might work for some mounts, for others not, which - # is why it is per instance - self._fd_open_flags = getattr(os, 'O_NOATIME', 0) - - #{ Interface - def object_path(self, hexsha): - """ - :return: path at which the object with the given hexsha would be stored, - relative to the database root""" - return join(hexsha[:2], hexsha[2:]) - - def readable_db_object_path(self, hexsha): - """ - :return: readable object path to the object identified by hexsha - :raise BadObject: If the object file does not exist""" - try: - return self._hexsha_to_file[hexsha] - except KeyError: - pass - # END ignore cache misses - - # try filesystem - path = self.db_path(self.object_path(hexsha)) - if exists(path): - self._hexsha_to_file[hexsha] = path - return path - # END handle cache - raise BadObject(hexsha) - - def partial_to_complete_sha_hex(self, partial_hexsha): - """:return: 20 byte binary sha1 string which matches the given name uniquely - :param name: hexadecimal partial name - :raise AmbiguousObjectName: - :raise BadObject: """ - candidate = None - for binsha in self.sha_iter(): - if bin_to_hex(binsha).startswith(partial_hexsha): - # it can't ever find the same object twice - if candidate is not None: - raise AmbiguousObjectName(partial_hexsha) - candidate = binsha - # END for each object - if candidate is None: - raise BadObject(partial_hexsha) - return candidate - - #} END interface - - def _map_loose_object(self, sha): - """ - :return: memory map of that file to allow random read access - :raise BadObject: if object could not be located""" - db_path = self.db_path(self.object_path(bin_to_hex(sha))) - try: - return file_contents_ro_filepath(db_path, flags=self._fd_open_flags) - except OSError,e: - if e.errno != ENOENT: - # try again without noatime - try: - return file_contents_ro_filepath(db_path) - except OSError: - raise BadObject(sha) - # didn't work because of our flag, don't try it again - self._fd_open_flags = 0 - else: - raise BadObject(sha) - # END handle error - # END exception handling - try: - return mmap.mmap(fd, 0, access=mmap.ACCESS_READ) - finally: - os.close(fd) - # END assure file is closed - - def set_ostream(self, stream): - """:raise TypeError: if the stream does not support the Sha1Writer interface""" - if stream is not None and not isinstance(stream, Sha1Writer): - raise TypeError("Output stream musst support the %s interface" % Sha1Writer.__name__) - return super(LooseObjectDB, self).set_ostream(stream) - - def info(self, sha): - m = self._map_loose_object(sha) - try: - type, size = loose_object_header_info(m) - return OInfo(sha, type, size) - finally: - m.close() - # END assure release of system resources - - def stream(self, sha): - m = self._map_loose_object(sha) - type, size, stream = DecompressMemMapReader.new(m, close_on_deletion = True) - return OStream(sha, type, size, stream) - - def has_object(self, sha): - try: - self.readable_db_object_path(bin_to_hex(sha)) - return True - except BadObject: - return False - # END check existance - - def store(self, istream): - """note: The sha we produce will be hex by nature""" - tmp_path = None - writer = self.ostream() - if writer is None: - # open a tmp file to write the data to - fd, tmp_path = tempfile.mkstemp(prefix='obj', dir=self._root_path) - - if istream.binsha is None: - writer = FDCompressedSha1Writer(fd) - else: - writer = FDStream(fd) - # END handle direct stream copies - # END handle custom writer - - try: - try: - if istream.binsha is not None: - # copy as much as possible, the actual uncompressed item size might - # be smaller than the compressed version - stream_copy(istream.read, writer.write, sys.maxint, self.stream_chunk_size) - else: - # write object with header, we have to make a new one - write_object(istream.type, istream.size, istream.read, writer.write, - chunk_size=self.stream_chunk_size) - # END handle direct stream copies - finally: - if tmp_path: - writer.close() - # END assure target stream is closed - except: - if tmp_path: - os.remove(tmp_path) - raise - # END assure tmpfile removal on error - - hexsha = None - if istream.binsha: - hexsha = istream.hexsha - else: - hexsha = writer.sha(as_hex=True) - # END handle sha - - if tmp_path: - obj_path = self.db_path(self.object_path(hexsha)) - obj_dir = dirname(obj_path) - if not isdir(obj_dir): - mkdir(obj_dir) - # END handle destination directory - # rename onto existing doesn't work on windows - if os.name == 'nt' and isfile(obj_path): - remove(obj_path) - # END handle win322 - rename(tmp_path, obj_path) - - # make sure its readable for all ! It started out as rw-- tmp file - # but needs to be rwrr - chmod(obj_path, self.new_objects_mode) - # END handle dry_run - - istream.binsha = hex_to_bin(hexsha) - return istream - - def sha_iter(self): - # find all files which look like an object, extract sha from there - for root, dirs, files in os.walk(self.root_path()): - root_base = basename(root) - if len(root_base) != 2: - continue - - for f in files: - if len(f) != 38: - continue - yield hex_to_bin(root_base + f) - # END for each file - # END for each walk iteration - - def size(self): - return len(tuple(self.sha_iter())) - + """A database which operates on loose object files""" + + # CONFIGURATION + # chunks in which data will be copied between streams + stream_chunk_size = chunk_size + + # On windows we need to keep it writable, otherwise it cannot be removed + # either + new_objects_mode = 0444 + if os.name == 'nt': + new_objects_mode = 0644 + + + def __init__(self, root_path): + super(LooseObjectDB, self).__init__(root_path) + self._hexsha_to_file = dict() + # Additional Flags - might be set to 0 after the first failure + # Depending on the root, this might work for some mounts, for others not, which + # is why it is per instance + self._fd_open_flags = getattr(os, 'O_NOATIME', 0) + + #{ Interface + def object_path(self, hexsha): + """ + :return: path at which the object with the given hexsha would be stored, + relative to the database root""" + return join(hexsha[:2], hexsha[2:]) + + def readable_db_object_path(self, hexsha): + """ + :return: readable object path to the object identified by hexsha + :raise BadObject: If the object file does not exist""" + try: + return self._hexsha_to_file[hexsha] + except KeyError: + pass + # END ignore cache misses + + # try filesystem + path = self.db_path(self.object_path(hexsha)) + if exists(path): + self._hexsha_to_file[hexsha] = path + return path + # END handle cache + raise BadObject(hexsha) + + def partial_to_complete_sha_hex(self, partial_hexsha): + """:return: 20 byte binary sha1 string which matches the given name uniquely + :param name: hexadecimal partial name + :raise AmbiguousObjectName: + :raise BadObject: """ + candidate = None + for binsha in self.sha_iter(): + if bin_to_hex(binsha).startswith(partial_hexsha): + # it can't ever find the same object twice + if candidate is not None: + raise AmbiguousObjectName(partial_hexsha) + candidate = binsha + # END for each object + if candidate is None: + raise BadObject(partial_hexsha) + return candidate + + #} END interface + + def _map_loose_object(self, sha): + """ + :return: memory map of that file to allow random read access + :raise BadObject: if object could not be located""" + db_path = self.db_path(self.object_path(bin_to_hex(sha))) + try: + return file_contents_ro_filepath(db_path, flags=self._fd_open_flags) + except OSError,e: + if e.errno != ENOENT: + # try again without noatime + try: + return file_contents_ro_filepath(db_path) + except OSError: + raise BadObject(sha) + # didn't work because of our flag, don't try it again + self._fd_open_flags = 0 + else: + raise BadObject(sha) + # END handle error + # END exception handling + try: + return mmap.mmap(fd, 0, access=mmap.ACCESS_READ) + finally: + os.close(fd) + # END assure file is closed + + def set_ostream(self, stream): + """:raise TypeError: if the stream does not support the Sha1Writer interface""" + if stream is not None and not isinstance(stream, Sha1Writer): + raise TypeError("Output stream musst support the %s interface" % Sha1Writer.__name__) + return super(LooseObjectDB, self).set_ostream(stream) + + def info(self, sha): + m = self._map_loose_object(sha) + try: + type, size = loose_object_header_info(m) + return OInfo(sha, type, size) + finally: + m.close() + # END assure release of system resources + + def stream(self, sha): + m = self._map_loose_object(sha) + type, size, stream = DecompressMemMapReader.new(m, close_on_deletion = True) + return OStream(sha, type, size, stream) + + def has_object(self, sha): + try: + self.readable_db_object_path(bin_to_hex(sha)) + return True + except BadObject: + return False + # END check existance + + def store(self, istream): + """note: The sha we produce will be hex by nature""" + tmp_path = None + writer = self.ostream() + if writer is None: + # open a tmp file to write the data to + fd, tmp_path = tempfile.mkstemp(prefix='obj', dir=self._root_path) + + if istream.binsha is None: + writer = FDCompressedSha1Writer(fd) + else: + writer = FDStream(fd) + # END handle direct stream copies + # END handle custom writer + + try: + try: + if istream.binsha is not None: + # copy as much as possible, the actual uncompressed item size might + # be smaller than the compressed version + stream_copy(istream.read, writer.write, sys.maxint, self.stream_chunk_size) + else: + # write object with header, we have to make a new one + write_object(istream.type, istream.size, istream.read, writer.write, + chunk_size=self.stream_chunk_size) + # END handle direct stream copies + finally: + if tmp_path: + writer.close() + # END assure target stream is closed + except: + if tmp_path: + os.remove(tmp_path) + raise + # END assure tmpfile removal on error + + hexsha = None + if istream.binsha: + hexsha = istream.hexsha + else: + hexsha = writer.sha(as_hex=True) + # END handle sha + + if tmp_path: + obj_path = self.db_path(self.object_path(hexsha)) + obj_dir = dirname(obj_path) + if not isdir(obj_dir): + mkdir(obj_dir) + # END handle destination directory + # rename onto existing doesn't work on windows + if os.name == 'nt' and isfile(obj_path): + remove(obj_path) + # END handle win322 + rename(tmp_path, obj_path) + + # make sure its readable for all ! It started out as rw-- tmp file + # but needs to be rwrr + chmod(obj_path, self.new_objects_mode) + # END handle dry_run + + istream.binsha = hex_to_bin(hexsha) + return istream + + def sha_iter(self): + # find all files which look like an object, extract sha from there + for root, dirs, files in os.walk(self.root_path()): + root_base = basename(root) + if len(root_base) != 2: + continue + + for f in files: + if len(f) != 38: + continue + yield hex_to_bin(root_base + f) + # END for each file + # END for each walk iteration + + def size(self): + return len(tuple(self.sha_iter())) + diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index 5d76c83cc..b9b2b8995 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -5,109 +5,109 @@ """Contains the MemoryDatabase implementation""" from loose import LooseObjectDB from base import ( - ObjectDBR, - ObjectDBW - ) + ObjectDBR, + ObjectDBW + ) from gitdb.base import ( - OStream, - IStream, - ) + OStream, + IStream, + ) from gitdb.exc import ( - BadObject, - UnsupportedOperation - ) + BadObject, + UnsupportedOperation + ) from gitdb.stream import ( - ZippedStoreShaWriter, - DecompressMemMapReader, - ) + ZippedStoreShaWriter, + DecompressMemMapReader, + ) from cStringIO import StringIO __all__ = ("MemoryDB", ) class MemoryDB(ObjectDBR, ObjectDBW): - """A memory database stores everything to memory, providing fast IO and object - retrieval. It should be used to buffer results and obtain SHAs before writing - it to the actual physical storage, as it allows to query whether object already - exists in the target storage before introducing actual IO - - **Note:** memory is currently not threadsafe, hence the async methods cannot be used - for storing""" - - def __init__(self): - super(MemoryDB, self).__init__() - self._db = LooseObjectDB("path/doesnt/matter") - - # maps 20 byte shas to their OStream objects - self._cache = dict() - - def set_ostream(self, stream): - raise UnsupportedOperation("MemoryDB's always stream into memory") - - def store(self, istream): - zstream = ZippedStoreShaWriter() - self._db.set_ostream(zstream) - - istream = self._db.store(istream) - zstream.close() # close to flush - zstream.seek(0) - - # don't provide a size, the stream is written in object format, hence the - # header needs decompression - decomp_stream = DecompressMemMapReader(zstream.getvalue(), close_on_deletion=False) - self._cache[istream.binsha] = OStream(istream.binsha, istream.type, istream.size, decomp_stream) - - return istream - - def store_async(self, reader): - raise UnsupportedOperation("MemoryDBs cannot currently be used for async write access") - - def has_object(self, sha): - return sha in self._cache + """A memory database stores everything to memory, providing fast IO and object + retrieval. It should be used to buffer results and obtain SHAs before writing + it to the actual physical storage, as it allows to query whether object already + exists in the target storage before introducing actual IO + + **Note:** memory is currently not threadsafe, hence the async methods cannot be used + for storing""" + + def __init__(self): + super(MemoryDB, self).__init__() + self._db = LooseObjectDB("path/doesnt/matter") + + # maps 20 byte shas to their OStream objects + self._cache = dict() + + def set_ostream(self, stream): + raise UnsupportedOperation("MemoryDB's always stream into memory") + + def store(self, istream): + zstream = ZippedStoreShaWriter() + self._db.set_ostream(zstream) + + istream = self._db.store(istream) + zstream.close() # close to flush + zstream.seek(0) + + # don't provide a size, the stream is written in object format, hence the + # header needs decompression + decomp_stream = DecompressMemMapReader(zstream.getvalue(), close_on_deletion=False) + self._cache[istream.binsha] = OStream(istream.binsha, istream.type, istream.size, decomp_stream) + + return istream + + def store_async(self, reader): + raise UnsupportedOperation("MemoryDBs cannot currently be used for async write access") + + def has_object(self, sha): + return sha in self._cache - def info(self, sha): - # we always return streams, which are infos as well - return self.stream(sha) - - def stream(self, sha): - try: - ostream = self._cache[sha] - # rewind stream for the next one to read - ostream.stream.seek(0) - return ostream - except KeyError: - raise BadObject(sha) - # END exception handling - - def size(self): - return len(self._cache) - - def sha_iter(self): - return self._cache.iterkeys() - - - #{ Interface - def stream_copy(self, sha_iter, odb): - """Copy the streams as identified by sha's yielded by sha_iter into the given odb - The streams will be copied directly - **Note:** the object will only be written if it did not exist in the target db - :return: amount of streams actually copied into odb. If smaller than the amount - of input shas, one or more objects did already exist in odb""" - count = 0 - for sha in sha_iter: - if odb.has_object(sha): - continue - # END check object existance - - ostream = self.stream(sha) - # compressed data including header - sio = StringIO(ostream.stream.data()) - istream = IStream(ostream.type, ostream.size, sio, sha) - - odb.store(istream) - count += 1 - # END for each sha - return count - #} END interface + def info(self, sha): + # we always return streams, which are infos as well + return self.stream(sha) + + def stream(self, sha): + try: + ostream = self._cache[sha] + # rewind stream for the next one to read + ostream.stream.seek(0) + return ostream + except KeyError: + raise BadObject(sha) + # END exception handling + + def size(self): + return len(self._cache) + + def sha_iter(self): + return self._cache.iterkeys() + + + #{ Interface + def stream_copy(self, sha_iter, odb): + """Copy the streams as identified by sha's yielded by sha_iter into the given odb + The streams will be copied directly + **Note:** the object will only be written if it did not exist in the target db + :return: amount of streams actually copied into odb. If smaller than the amount + of input shas, one or more objects did already exist in odb""" + count = 0 + for sha in sha_iter: + if odb.has_object(sha): + continue + # END check object existance + + ostream = self.stream(sha) + # compressed data including header + sio = StringIO(ostream.stream.data()) + istream = IStream(ostream.type, ostream.size, sio, sha) + + odb.store(istream) + count += 1 + # END for each sha + return count + #} END interface diff --git a/gitdb/db/pack.py b/gitdb/db/pack.py index 4c9d0b919..928731937 100644 --- a/gitdb/db/pack.py +++ b/gitdb/db/pack.py @@ -4,18 +4,18 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module containing a database to deal with packs""" from base import ( - FileDBBase, - ObjectDBR, - CachingDB - ) + FileDBBase, + ObjectDBR, + CachingDB + ) from gitdb.util import LazyMixin from gitdb.exc import ( - BadObject, - UnsupportedOperation, - AmbiguousObjectName - ) + BadObject, + UnsupportedOperation, + AmbiguousObjectName + ) from gitdb.pack import PackEntity @@ -28,182 +28,182 @@ class PackedDB(FileDBBase, ObjectDBR, CachingDB, LazyMixin): - """A database operating on a set of object packs""" - - # sort the priority list every N queries - # Higher values are better, performance tests don't show this has - # any effect, but it should have one - _sort_interval = 500 - - def __init__(self, root_path): - super(PackedDB, self).__init__(root_path) - # list of lists with three items: - # * hits - number of times the pack was hit with a request - # * entity - Pack entity instance - # * sha_to_index - PackIndexFile.sha_to_index method for direct cache query - # self._entities = list() # lazy loaded list - self._hit_count = 0 # amount of hits - self._st_mtime = 0 # last modification data of our root path - - def _set_cache_(self, attr): - if attr == '_entities': - self._entities = list() - self.update_cache(force=True) - # END handle entities initialization - - def _sort_entities(self): - self._entities.sort(key=lambda l: l[0], reverse=True) - - def _pack_info(self, sha): - """:return: tuple(entity, index) for an item at the given sha - :param sha: 20 or 40 byte sha - :raise BadObject: - **Note:** This method is not thread-safe, but may be hit in multi-threaded - operation. The worst thing that can happen though is a counter that - was not incremented, or the list being in wrong order. So we safe - the time for locking here, lets see how that goes""" - # presort ? - if self._hit_count % self._sort_interval == 0: - self._sort_entities() - # END update sorting - - for item in self._entities: - index = item[2](sha) - if index is not None: - item[0] += 1 # one hit for you - self._hit_count += 1 # general hit count - return (item[1], index) - # END index found in pack - # END for each item - - # no hit, see whether we have to update packs - # NOTE: considering packs don't change very often, we safe this call - # and leave it to the super-caller to trigger that - raise BadObject(sha) - - #{ Object DB Read - - def has_object(self, sha): - try: - self._pack_info(sha) - return True - except BadObject: - return False - # END exception handling - - def info(self, sha): - entity, index = self._pack_info(sha) - return entity.info_at_index(index) - - def stream(self, sha): - entity, index = self._pack_info(sha) - return entity.stream_at_index(index) - - def sha_iter(self): - sha_list = list() - for entity in self.entities(): - index = entity.index() - sha_by_index = index.sha - for index in xrange(index.size()): - yield sha_by_index(index) - # END for each index - # END for each entity - - def size(self): - sizes = [item[1].index().size() for item in self._entities] - return reduce(lambda x,y: x+y, sizes, 0) - - #} END object db read - - #{ object db write - - def store(self, istream): - """Storing individual objects is not feasible as a pack is designed to - hold multiple objects. Writing or rewriting packs for single objects is - inefficient""" - raise UnsupportedOperation() - - def store_async(self, reader): - # TODO: add ObjectDBRW before implementing this - raise NotImplementedError() - - #} END object db write - - - #{ Interface - - def update_cache(self, force=False): - """ - Update our cache with the acutally existing packs on disk. Add new ones, - and remove deleted ones. We keep the unchanged ones - - :param force: If True, the cache will be updated even though the directory - does not appear to have changed according to its modification timestamp. - :return: True if the packs have been updated so there is new information, - False if there was no change to the pack database""" - stat = os.stat(self.root_path()) - if not force and stat.st_mtime <= self._st_mtime: - return False - # END abort early on no change - self._st_mtime = stat.st_mtime - - # packs are supposed to be prefixed with pack- by git-convention - # get all pack files, figure out what changed - pack_files = set(glob.glob(os.path.join(self.root_path(), "pack-*.pack"))) - our_pack_files = set(item[1].pack().path() for item in self._entities) - - # new packs - for pack_file in (pack_files - our_pack_files): - # init the hit-counter/priority with the size, a good measure for hit- - # probability. Its implemented so that only 12 bytes will be read - entity = PackEntity(pack_file) - self._entities.append([entity.pack().size(), entity, entity.index().sha_to_index]) - # END for each new packfile - - # removed packs - for pack_file in (our_pack_files - pack_files): - del_index = -1 - for i, item in enumerate(self._entities): - if item[1].pack().path() == pack_file: - del_index = i - break - # END found index - # END for each entity - assert del_index != -1 - del(self._entities[del_index]) - # END for each removed pack - - # reinitialize prioritiess - self._sort_entities() - return True - - def entities(self): - """:return: list of pack entities operated upon by this database""" - return [ item[1] for item in self._entities ] - - def partial_to_complete_sha(self, partial_binsha, canonical_length): - """:return: 20 byte sha as inferred by the given partial binary sha - :param partial_binsha: binary sha with less than 20 bytes - :param canonical_length: length of the corresponding canonical representation. - It is required as binary sha's cannot display whether the original hex sha - had an odd or even number of characters - :raise AmbiguousObjectName: - :raise BadObject: """ - candidate = None - for item in self._entities: - item_index = item[1].index().partial_sha_to_index(partial_binsha, canonical_length) - if item_index is not None: - sha = item[1].index().sha(item_index) - if candidate and candidate != sha: - raise AmbiguousObjectName(partial_binsha) - candidate = sha - # END handle full sha could be found - # END for each entity - - if candidate: - return candidate - - # still not found ? - raise BadObject(partial_binsha) - - #} END interface + """A database operating on a set of object packs""" + + # sort the priority list every N queries + # Higher values are better, performance tests don't show this has + # any effect, but it should have one + _sort_interval = 500 + + def __init__(self, root_path): + super(PackedDB, self).__init__(root_path) + # list of lists with three items: + # * hits - number of times the pack was hit with a request + # * entity - Pack entity instance + # * sha_to_index - PackIndexFile.sha_to_index method for direct cache query + # self._entities = list() # lazy loaded list + self._hit_count = 0 # amount of hits + self._st_mtime = 0 # last modification data of our root path + + def _set_cache_(self, attr): + if attr == '_entities': + self._entities = list() + self.update_cache(force=True) + # END handle entities initialization + + def _sort_entities(self): + self._entities.sort(key=lambda l: l[0], reverse=True) + + def _pack_info(self, sha): + """:return: tuple(entity, index) for an item at the given sha + :param sha: 20 or 40 byte sha + :raise BadObject: + **Note:** This method is not thread-safe, but may be hit in multi-threaded + operation. The worst thing that can happen though is a counter that + was not incremented, or the list being in wrong order. So we safe + the time for locking here, lets see how that goes""" + # presort ? + if self._hit_count % self._sort_interval == 0: + self._sort_entities() + # END update sorting + + for item in self._entities: + index = item[2](sha) + if index is not None: + item[0] += 1 # one hit for you + self._hit_count += 1 # general hit count + return (item[1], index) + # END index found in pack + # END for each item + + # no hit, see whether we have to update packs + # NOTE: considering packs don't change very often, we safe this call + # and leave it to the super-caller to trigger that + raise BadObject(sha) + + #{ Object DB Read + + def has_object(self, sha): + try: + self._pack_info(sha) + return True + except BadObject: + return False + # END exception handling + + def info(self, sha): + entity, index = self._pack_info(sha) + return entity.info_at_index(index) + + def stream(self, sha): + entity, index = self._pack_info(sha) + return entity.stream_at_index(index) + + def sha_iter(self): + sha_list = list() + for entity in self.entities(): + index = entity.index() + sha_by_index = index.sha + for index in xrange(index.size()): + yield sha_by_index(index) + # END for each index + # END for each entity + + def size(self): + sizes = [item[1].index().size() for item in self._entities] + return reduce(lambda x,y: x+y, sizes, 0) + + #} END object db read + + #{ object db write + + def store(self, istream): + """Storing individual objects is not feasible as a pack is designed to + hold multiple objects. Writing or rewriting packs for single objects is + inefficient""" + raise UnsupportedOperation() + + def store_async(self, reader): + # TODO: add ObjectDBRW before implementing this + raise NotImplementedError() + + #} END object db write + + + #{ Interface + + def update_cache(self, force=False): + """ + Update our cache with the acutally existing packs on disk. Add new ones, + and remove deleted ones. We keep the unchanged ones + + :param force: If True, the cache will be updated even though the directory + does not appear to have changed according to its modification timestamp. + :return: True if the packs have been updated so there is new information, + False if there was no change to the pack database""" + stat = os.stat(self.root_path()) + if not force and stat.st_mtime <= self._st_mtime: + return False + # END abort early on no change + self._st_mtime = stat.st_mtime + + # packs are supposed to be prefixed with pack- by git-convention + # get all pack files, figure out what changed + pack_files = set(glob.glob(os.path.join(self.root_path(), "pack-*.pack"))) + our_pack_files = set(item[1].pack().path() for item in self._entities) + + # new packs + for pack_file in (pack_files - our_pack_files): + # init the hit-counter/priority with the size, a good measure for hit- + # probability. Its implemented so that only 12 bytes will be read + entity = PackEntity(pack_file) + self._entities.append([entity.pack().size(), entity, entity.index().sha_to_index]) + # END for each new packfile + + # removed packs + for pack_file in (our_pack_files - pack_files): + del_index = -1 + for i, item in enumerate(self._entities): + if item[1].pack().path() == pack_file: + del_index = i + break + # END found index + # END for each entity + assert del_index != -1 + del(self._entities[del_index]) + # END for each removed pack + + # reinitialize prioritiess + self._sort_entities() + return True + + def entities(self): + """:return: list of pack entities operated upon by this database""" + return [ item[1] for item in self._entities ] + + def partial_to_complete_sha(self, partial_binsha, canonical_length): + """:return: 20 byte sha as inferred by the given partial binary sha + :param partial_binsha: binary sha with less than 20 bytes + :param canonical_length: length of the corresponding canonical representation. + It is required as binary sha's cannot display whether the original hex sha + had an odd or even number of characters + :raise AmbiguousObjectName: + :raise BadObject: """ + candidate = None + for item in self._entities: + item_index = item[1].index().partial_sha_to_index(partial_binsha, canonical_length) + if item_index is not None: + sha = item[1].index().sha(item_index) + if candidate and candidate != sha: + raise AmbiguousObjectName(partial_binsha) + candidate = sha + # END handle full sha could be found + # END for each entity + + if candidate: + return candidate + + # still not found ? + raise BadObject(partial_binsha) + + #} END interface diff --git a/gitdb/db/ref.py b/gitdb/db/ref.py index 898984323..60004a77a 100644 --- a/gitdb/db/ref.py +++ b/gitdb/db/ref.py @@ -3,77 +3,77 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php from base import ( - CompoundDB, - ) + CompoundDB, + ) import os __all__ = ('ReferenceDB', ) class ReferenceDB(CompoundDB): - """A database consisting of database referred to in a file""" - - # Configuration - # Specifies the object database to use for the paths found in the alternates - # file. If None, it defaults to the GitDB - ObjectDBCls = None - - def __init__(self, ref_file): - super(ReferenceDB, self).__init__() - self._ref_file = ref_file - - def _set_cache_(self, attr): - if attr == '_dbs': - self._dbs = list() - self._update_dbs_from_ref_file() - else: - super(ReferenceDB, self)._set_cache_(attr) - # END handle attrs - - def _update_dbs_from_ref_file(self): - dbcls = self.ObjectDBCls - if dbcls is None: - # late import - from git import GitDB - dbcls = GitDB - # END get db type - - # try to get as many as possible, don't fail if some are unavailable - ref_paths = list() - try: - ref_paths = [l.strip() for l in open(self._ref_file, 'r').readlines()] - except (OSError, IOError): - pass - # END handle alternates - - ref_paths_set = set(ref_paths) - cur_ref_paths_set = set(db.root_path() for db in self._dbs) - - # remove existing - for path in (cur_ref_paths_set - ref_paths_set): - for i, db in enumerate(self._dbs[:]): - if db.root_path() == path: - del(self._dbs[i]) - continue - # END del matching db - # END for each path to remove - - # add new - # sort them to maintain order - added_paths = sorted(ref_paths_set - cur_ref_paths_set, key=lambda p: ref_paths.index(p)) - for path in added_paths: - try: - db = dbcls(path) - # force an update to verify path - if isinstance(db, CompoundDB): - db.databases() - # END verification - self._dbs.append(db) - except Exception, e: - # ignore invalid paths or issues - pass - # END for each path to add - - def update_cache(self, force=False): - # re-read alternates and update databases - self._update_dbs_from_ref_file() - return super(ReferenceDB, self).update_cache(force) + """A database consisting of database referred to in a file""" + + # Configuration + # Specifies the object database to use for the paths found in the alternates + # file. If None, it defaults to the GitDB + ObjectDBCls = None + + def __init__(self, ref_file): + super(ReferenceDB, self).__init__() + self._ref_file = ref_file + + def _set_cache_(self, attr): + if attr == '_dbs': + self._dbs = list() + self._update_dbs_from_ref_file() + else: + super(ReferenceDB, self)._set_cache_(attr) + # END handle attrs + + def _update_dbs_from_ref_file(self): + dbcls = self.ObjectDBCls + if dbcls is None: + # late import + from git import GitDB + dbcls = GitDB + # END get db type + + # try to get as many as possible, don't fail if some are unavailable + ref_paths = list() + try: + ref_paths = [l.strip() for l in open(self._ref_file, 'r').readlines()] + except (OSError, IOError): + pass + # END handle alternates + + ref_paths_set = set(ref_paths) + cur_ref_paths_set = set(db.root_path() for db in self._dbs) + + # remove existing + for path in (cur_ref_paths_set - ref_paths_set): + for i, db in enumerate(self._dbs[:]): + if db.root_path() == path: + del(self._dbs[i]) + continue + # END del matching db + # END for each path to remove + + # add new + # sort them to maintain order + added_paths = sorted(ref_paths_set - cur_ref_paths_set, key=lambda p: ref_paths.index(p)) + for path in added_paths: + try: + db = dbcls(path) + # force an update to verify path + if isinstance(db, CompoundDB): + db.databases() + # END verification + self._dbs.append(db) + except Exception, e: + # ignore invalid paths or issues + pass + # END for each path to add + + def update_cache(self, force=False): + # re-read alternates and update databases + self._update_dbs_from_ref_file() + return super(ReferenceDB, self).update_cache(force) diff --git a/gitdb/exc.py b/gitdb/exc.py index e087047b4..7180fb586 100644 --- a/gitdb/exc.py +++ b/gitdb/exc.py @@ -6,27 +6,27 @@ from util import to_hex_sha class ODBError(Exception): - """All errors thrown by the object database""" - + """All errors thrown by the object database""" + class InvalidDBRoot(ODBError): - """Thrown if an object database cannot be initialized at the given path""" - + """Thrown if an object database cannot be initialized at the given path""" + class BadObject(ODBError): - """The object with the given SHA does not exist. Instantiate with the - failed sha""" - - def __str__(self): - return "BadObject: %s" % to_hex_sha(self.args[0]) - + """The object with the given SHA does not exist. Instantiate with the + failed sha""" + + def __str__(self): + return "BadObject: %s" % to_hex_sha(self.args[0]) + class ParseError(ODBError): - """Thrown if the parsing of a file failed due to an invalid format""" + """Thrown if the parsing of a file failed due to an invalid format""" class AmbiguousObjectName(ODBError): - """Thrown if a possibly shortened name does not uniquely represent a single object - in the database""" + """Thrown if a possibly shortened name does not uniquely represent a single object + in the database""" class BadObjectType(ODBError): - """The object had an unsupported type""" + """The object had an unsupported type""" class UnsupportedOperation(ODBError): - """Thrown if the given operation cannot be supported by the object database""" + """Thrown if the given operation cannot be supported by the object database""" diff --git a/gitdb/ext/async b/gitdb/ext/async index 039c1d5c2..571412931 160000 --- a/gitdb/ext/async +++ b/gitdb/ext/async @@ -1 +1 @@ -Subproject commit 039c1d5c26bc2ceaa9e55082efae2068d9873e45 +Subproject commit 571412931829200aff06a44b9c5524e122e524e9 diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 360a8956f..1b3ab5598 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 360a8956fe73a0a96315e946f52737569d990369 +Subproject commit 1b3ab5598e93369282502d049d64cb2ca12839cb diff --git a/gitdb/fun.py b/gitdb/fun.py index 66130ebee..c1e73e895 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -7,8 +7,8 @@ it into c later, if required""" from exc import ( - BadObjectType - ) + BadObjectType + ) from util import zlib decompressobj = zlib.decompressobj @@ -23,655 +23,655 @@ REF_DELTA = 7 delta_types = (OFS_DELTA, REF_DELTA) -type_id_to_type_map = { - 0 : "", # EXT 1 - 1 : "commit", - 2 : "tree", - 3 : "blob", - 4 : "tag", - 5 : "", # EXT 2 - OFS_DELTA : "OFS_DELTA", # OFFSET DELTA - REF_DELTA : "REF_DELTA" # REFERENCE DELTA - } +type_id_to_type_map = { + 0 : "", # EXT 1 + 1 : "commit", + 2 : "tree", + 3 : "blob", + 4 : "tag", + 5 : "", # EXT 2 + OFS_DELTA : "OFS_DELTA", # OFFSET DELTA + REF_DELTA : "REF_DELTA" # REFERENCE DELTA + } type_to_type_id_map = dict( - commit=1, - tree=2, - blob=3, - tag=4, - OFS_DELTA=OFS_DELTA, - REF_DELTA=REF_DELTA - ) + commit=1, + tree=2, + blob=3, + tag=4, + OFS_DELTA=OFS_DELTA, + REF_DELTA=REF_DELTA + ) # used when dealing with larger streams chunk_size = 1000*mmap.PAGESIZE __all__ = ('is_loose_object', 'loose_object_header_info', 'msb_size', 'pack_object_header_info', - 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data', - 'is_equal_canonical_sha', 'connect_deltas', 'DeltaChunkList', 'create_pack_object_header') + 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data', + 'is_equal_canonical_sha', 'connect_deltas', 'DeltaChunkList', 'create_pack_object_header') #{ Structures def _set_delta_rbound(d, size): - """Truncate the given delta to the given size - :param size: size relative to our target offset, may not be 0, must be smaller or equal - to our size - :return: d""" - d.ts = size - - # NOTE: data is truncated automatically when applying the delta - # MUST NOT DO THIS HERE - return d - + """Truncate the given delta to the given size + :param size: size relative to our target offset, may not be 0, must be smaller or equal + to our size + :return: d""" + d.ts = size + + # NOTE: data is truncated automatically when applying the delta + # MUST NOT DO THIS HERE + return d + def _move_delta_lbound(d, bytes): - """Move the delta by the given amount of bytes, reducing its size so that its - right bound stays static - :param bytes: amount of bytes to move, must be smaller than delta size - :return: d""" - if bytes == 0: - return - - d.to += bytes - d.so += bytes - d.ts -= bytes - if d.data is not None: - d.data = d.data[bytes:] - # END handle data - - return d - + """Move the delta by the given amount of bytes, reducing its size so that its + right bound stays static + :param bytes: amount of bytes to move, must be smaller than delta size + :return: d""" + if bytes == 0: + return + + d.to += bytes + d.so += bytes + d.ts -= bytes + if d.data is not None: + d.data = d.data[bytes:] + # END handle data + + return d + def delta_duplicate(src): - return DeltaChunk(src.to, src.ts, src.so, src.data) - + return DeltaChunk(src.to, src.ts, src.so, src.data) + def delta_chunk_apply(dc, bbuf, write): - """Apply own data to the target buffer - :param bbuf: buffer providing source bytes for copy operations - :param write: write method to call with data to write""" - if dc.data is None: - # COPY DATA FROM SOURCE - write(buffer(bbuf, dc.so, dc.ts)) - else: - # APPEND DATA - # whats faster: if + 4 function calls or just a write with a slice ? - # Considering data can be larger than 127 bytes now, it should be worth it - if dc.ts < len(dc.data): - write(dc.data[:dc.ts]) - else: - write(dc.data) - # END handle truncation - # END handle chunk mode + """Apply own data to the target buffer + :param bbuf: buffer providing source bytes for copy operations + :param write: write method to call with data to write""" + if dc.data is None: + # COPY DATA FROM SOURCE + write(buffer(bbuf, dc.so, dc.ts)) + else: + # APPEND DATA + # whats faster: if + 4 function calls or just a write with a slice ? + # Considering data can be larger than 127 bytes now, it should be worth it + if dc.ts < len(dc.data): + write(dc.data[:dc.ts]) + else: + write(dc.data) + # END handle truncation + # END handle chunk mode class DeltaChunk(object): - """Represents a piece of a delta, it can either add new data, or copy existing - one from a source buffer""" - __slots__ = ( - 'to', # start offset in the target buffer in bytes - 'ts', # size of this chunk in the target buffer in bytes - 'so', # start offset in the source buffer in bytes or None - 'data', # chunk of bytes to be added to the target buffer, - # DeltaChunkList to use as base, or None - ) - - def __init__(self, to, ts, so, data): - self.to = to - self.ts = ts - self.so = so - self.data = data + """Represents a piece of a delta, it can either add new data, or copy existing + one from a source buffer""" + __slots__ = ( + 'to', # start offset in the target buffer in bytes + 'ts', # size of this chunk in the target buffer in bytes + 'so', # start offset in the source buffer in bytes or None + 'data', # chunk of bytes to be added to the target buffer, + # DeltaChunkList to use as base, or None + ) + + def __init__(self, to, ts, so, data): + self.to = to + self.ts = ts + self.so = so + self.data = data - def __repr__(self): - return "DeltaChunk(%i, %i, %s, %s)" % (self.to, self.ts, self.so, self.data or "") - - #{ Interface - - def rbound(self): - return self.to + self.ts - - def has_data(self): - """:return: True if the instance has data to add to the target stream""" - return self.data is not None - - #} END interface + def __repr__(self): + return "DeltaChunk(%i, %i, %s, %s)" % (self.to, self.ts, self.so, self.data or "") + + #{ Interface + + def rbound(self): + return self.to + self.ts + + def has_data(self): + """:return: True if the instance has data to add to the target stream""" + return self.data is not None + + #} END interface def _closest_index(dcl, absofs): - """:return: index at which the given absofs should be inserted. The index points - to the DeltaChunk with a target buffer absofs that equals or is greater than - absofs. - **Note:** global method for performance only, it belongs to DeltaChunkList""" - lo = 0 - hi = len(dcl) - while lo < hi: - mid = (lo + hi) / 2 - dc = dcl[mid] - if dc.to > absofs: - hi = mid - elif dc.rbound() > absofs or dc.to == absofs: - return mid - else: - lo = mid + 1 - # END handle bound - # END for each delta absofs - return len(dcl)-1 - + """:return: index at which the given absofs should be inserted. The index points + to the DeltaChunk with a target buffer absofs that equals or is greater than + absofs. + **Note:** global method for performance only, it belongs to DeltaChunkList""" + lo = 0 + hi = len(dcl) + while lo < hi: + mid = (lo + hi) / 2 + dc = dcl[mid] + if dc.to > absofs: + hi = mid + elif dc.rbound() > absofs or dc.to == absofs: + return mid + else: + lo = mid + 1 + # END handle bound + # END for each delta absofs + return len(dcl)-1 + def delta_list_apply(dcl, bbuf, write): - """Apply the chain's changes and write the final result using the passed - write function. - :param bbuf: base buffer containing the base of all deltas contained in this - list. It will only be used if the chunk in question does not have a base - chain. - :param write: function taking a string of bytes to write to the output""" - for dc in dcl: - delta_chunk_apply(dc, bbuf, write) - # END for each dc + """Apply the chain's changes and write the final result using the passed + write function. + :param bbuf: base buffer containing the base of all deltas contained in this + list. It will only be used if the chunk in question does not have a base + chain. + :param write: function taking a string of bytes to write to the output""" + for dc in dcl: + delta_chunk_apply(dc, bbuf, write) + # END for each dc def delta_list_slice(dcl, absofs, size, ndcl): - """:return: Subsection of this list at the given absolute offset, with the given - size in bytes. - :return: None""" - cdi = _closest_index(dcl, absofs) # delta start index - cd = dcl[cdi] - slen = len(dcl) - lappend = ndcl.append - - if cd.to != absofs: - tcd = DeltaChunk(cd.to, cd.ts, cd.so, cd.data) - _move_delta_lbound(tcd, absofs - cd.to) - tcd.ts = min(tcd.ts, size) - lappend(tcd) - size -= tcd.ts - cdi += 1 - # END lbound overlap handling - - while cdi < slen and size: - # are we larger than the current block - cd = dcl[cdi] - if cd.ts <= size: - lappend(DeltaChunk(cd.to, cd.ts, cd.so, cd.data)) - size -= cd.ts - else: - tcd = DeltaChunk(cd.to, cd.ts, cd.so, cd.data) - tcd.ts = size - lappend(tcd) - size -= tcd.ts - break - # END hadle size - cdi += 1 - # END for each chunk - - + """:return: Subsection of this list at the given absolute offset, with the given + size in bytes. + :return: None""" + cdi = _closest_index(dcl, absofs) # delta start index + cd = dcl[cdi] + slen = len(dcl) + lappend = ndcl.append + + if cd.to != absofs: + tcd = DeltaChunk(cd.to, cd.ts, cd.so, cd.data) + _move_delta_lbound(tcd, absofs - cd.to) + tcd.ts = min(tcd.ts, size) + lappend(tcd) + size -= tcd.ts + cdi += 1 + # END lbound overlap handling + + while cdi < slen and size: + # are we larger than the current block + cd = dcl[cdi] + if cd.ts <= size: + lappend(DeltaChunk(cd.to, cd.ts, cd.so, cd.data)) + size -= cd.ts + else: + tcd = DeltaChunk(cd.to, cd.ts, cd.so, cd.data) + tcd.ts = size + lappend(tcd) + size -= tcd.ts + break + # END hadle size + cdi += 1 + # END for each chunk + + class DeltaChunkList(list): - """List with special functionality to deal with DeltaChunks. - There are two types of lists we represent. The one was created bottom-up, working - towards the latest delta, the other kind was created top-down, working from the - latest delta down to the earliest ancestor. This attribute is queryable - after all processing with is_reversed.""" - - __slots__ = tuple() - - def rbound(self): - """:return: rightmost extend in bytes, absolute""" - if len(self) == 0: - return 0 - return self[-1].rbound() - - def lbound(self): - """:return: leftmost byte at which this chunklist starts""" - if len(self) == 0: - return 0 - return self[0].to - - def size(self): - """:return: size of bytes as measured by our delta chunks""" - return self.rbound() - self.lbound() - - def apply(self, bbuf, write): - """Only used by public clients, internally we only use the global routines - for performance""" - return delta_list_apply(self, bbuf, write) - - def compress(self): - """Alter the list to reduce the amount of nodes. Currently we concatenate - add-chunks - :return: self""" - slen = len(self) - if slen < 2: - return self - i = 0 - slen_orig = slen - - first_data_index = None - while i < slen: - dc = self[i] - i += 1 - if dc.data is None: - if first_data_index is not None and i-2-first_data_index > 1: - #if first_data_index is not None: - nd = StringIO() # new data - so = self[first_data_index].to # start offset in target buffer - for x in xrange(first_data_index, i-1): - xdc = self[x] - nd.write(xdc.data[:xdc.ts]) - # END collect data - - del(self[first_data_index:i-1]) - buf = nd.getvalue() - self.insert(first_data_index, DeltaChunk(so, len(buf), 0, buf)) - - slen = len(self) - i = first_data_index + 1 - - # END concatenate data - first_data_index = None - continue - # END skip non-data chunks - - if first_data_index is None: - first_data_index = i-1 - # END iterate list - - #if slen_orig != len(self): - # print "INFO: Reduced delta list len to %f %% of former size" % ((float(len(self)) / slen_orig) * 100) - return self - - def check_integrity(self, target_size=-1): - """Verify the list has non-overlapping chunks only, and the total size matches - target_size - :param target_size: if not -1, the total size of the chain must be target_size - :raise AssertionError: if the size doen't match""" - if target_size > -1: - assert self[-1].rbound() == target_size - assert reduce(lambda x,y: x+y, (d.ts for d in self), 0) == target_size - # END target size verification - - if len(self) < 2: - return - - # check data - for dc in self: - assert dc.ts > 0 - if dc.has_data(): - assert len(dc.data) >= dc.ts - # END for each dc - - left = islice(self, 0, len(self)-1) - right = iter(self) - right.next() - # this is very pythonic - we might have just use index based access here, - # but this could actually be faster - for lft,rgt in izip(left, right): - assert lft.rbound() == rgt.to - assert lft.to + lft.ts == rgt.to - # END for each pair - + """List with special functionality to deal with DeltaChunks. + There are two types of lists we represent. The one was created bottom-up, working + towards the latest delta, the other kind was created top-down, working from the + latest delta down to the earliest ancestor. This attribute is queryable + after all processing with is_reversed.""" + + __slots__ = tuple() + + def rbound(self): + """:return: rightmost extend in bytes, absolute""" + if len(self) == 0: + return 0 + return self[-1].rbound() + + def lbound(self): + """:return: leftmost byte at which this chunklist starts""" + if len(self) == 0: + return 0 + return self[0].to + + def size(self): + """:return: size of bytes as measured by our delta chunks""" + return self.rbound() - self.lbound() + + def apply(self, bbuf, write): + """Only used by public clients, internally we only use the global routines + for performance""" + return delta_list_apply(self, bbuf, write) + + def compress(self): + """Alter the list to reduce the amount of nodes. Currently we concatenate + add-chunks + :return: self""" + slen = len(self) + if slen < 2: + return self + i = 0 + slen_orig = slen + + first_data_index = None + while i < slen: + dc = self[i] + i += 1 + if dc.data is None: + if first_data_index is not None and i-2-first_data_index > 1: + #if first_data_index is not None: + nd = StringIO() # new data + so = self[first_data_index].to # start offset in target buffer + for x in xrange(first_data_index, i-1): + xdc = self[x] + nd.write(xdc.data[:xdc.ts]) + # END collect data + + del(self[first_data_index:i-1]) + buf = nd.getvalue() + self.insert(first_data_index, DeltaChunk(so, len(buf), 0, buf)) + + slen = len(self) + i = first_data_index + 1 + + # END concatenate data + first_data_index = None + continue + # END skip non-data chunks + + if first_data_index is None: + first_data_index = i-1 + # END iterate list + + #if slen_orig != len(self): + # print "INFO: Reduced delta list len to %f %% of former size" % ((float(len(self)) / slen_orig) * 100) + return self + + def check_integrity(self, target_size=-1): + """Verify the list has non-overlapping chunks only, and the total size matches + target_size + :param target_size: if not -1, the total size of the chain must be target_size + :raise AssertionError: if the size doen't match""" + if target_size > -1: + assert self[-1].rbound() == target_size + assert reduce(lambda x,y: x+y, (d.ts for d in self), 0) == target_size + # END target size verification + + if len(self) < 2: + return + + # check data + for dc in self: + assert dc.ts > 0 + if dc.has_data(): + assert len(dc.data) >= dc.ts + # END for each dc + + left = islice(self, 0, len(self)-1) + right = iter(self) + right.next() + # this is very pythonic - we might have just use index based access here, + # but this could actually be faster + for lft,rgt in izip(left, right): + assert lft.rbound() == rgt.to + assert lft.to + lft.ts == rgt.to + # END for each pair + class TopdownDeltaChunkList(DeltaChunkList): - """Represents a list which is generated by feeding its ancestor streams one by - one""" - __slots__ = tuple() - - def connect_with_next_base(self, bdcl): - """Connect this chain with the next level of our base delta chunklist. - The goal in this game is to mark as many of our chunks rigid, hence they - cannot be changed by any of the upcoming bases anymore. Once all our - chunks are marked like that, we can stop all processing - :param bdcl: data chunk list being one of our bases. They must be fed in - consequtively and in order, towards the earliest ancestor delta - :return: True if processing was done. Use it to abort processing of - remaining streams if False is returned""" - nfc = 0 # number of frozen chunks - dci = 0 # delta chunk index - slen = len(self) # len of self - ccl = list() # temporary list - while dci < slen: - dc = self[dci] - dci += 1 - - # all add-chunks which are already topmost don't need additional processing - if dc.data is not None: - nfc += 1 - continue - # END skip add chunks - - # copy chunks - # integrate the portion of the base list into ourselves. Lists - # dont support efficient insertion ( just one at a time ), but for now - # we live with it. Internally, its all just a 32/64bit pointer, and - # the portions of moved memory should be smallish. Maybe we just rebuild - # ourselves in order to reduce the amount of insertions ... - del(ccl[:]) - delta_list_slice(bdcl, dc.so, dc.ts, ccl) - - # move the target bounds into place to match with our chunk - ofs = dc.to - dc.so - for cdc in ccl: - cdc.to += ofs - # END update target bounds - - if len(ccl) == 1: - self[dci-1] = ccl[0] - else: - # maybe try to compute the expenses here, and pick the right algorithm - # It would normally be faster than copying everything physically though - # TODO: Use a deque here, and decide by the index whether to extend - # or extend left ! - post_dci = self[dci:] - del(self[dci-1:]) # include deletion of dc - self.extend(ccl) - self.extend(post_dci) - - slen = len(self) - dci += len(ccl)-1 # deleted dc, added rest - - # END handle chunk replacement - # END for each chunk - - if nfc == slen: - return False - # END handle completeness - return True - - + """Represents a list which is generated by feeding its ancestor streams one by + one""" + __slots__ = tuple() + + def connect_with_next_base(self, bdcl): + """Connect this chain with the next level of our base delta chunklist. + The goal in this game is to mark as many of our chunks rigid, hence they + cannot be changed by any of the upcoming bases anymore. Once all our + chunks are marked like that, we can stop all processing + :param bdcl: data chunk list being one of our bases. They must be fed in + consequtively and in order, towards the earliest ancestor delta + :return: True if processing was done. Use it to abort processing of + remaining streams if False is returned""" + nfc = 0 # number of frozen chunks + dci = 0 # delta chunk index + slen = len(self) # len of self + ccl = list() # temporary list + while dci < slen: + dc = self[dci] + dci += 1 + + # all add-chunks which are already topmost don't need additional processing + if dc.data is not None: + nfc += 1 + continue + # END skip add chunks + + # copy chunks + # integrate the portion of the base list into ourselves. Lists + # dont support efficient insertion ( just one at a time ), but for now + # we live with it. Internally, its all just a 32/64bit pointer, and + # the portions of moved memory should be smallish. Maybe we just rebuild + # ourselves in order to reduce the amount of insertions ... + del(ccl[:]) + delta_list_slice(bdcl, dc.so, dc.ts, ccl) + + # move the target bounds into place to match with our chunk + ofs = dc.to - dc.so + for cdc in ccl: + cdc.to += ofs + # END update target bounds + + if len(ccl) == 1: + self[dci-1] = ccl[0] + else: + # maybe try to compute the expenses here, and pick the right algorithm + # It would normally be faster than copying everything physically though + # TODO: Use a deque here, and decide by the index whether to extend + # or extend left ! + post_dci = self[dci:] + del(self[dci-1:]) # include deletion of dc + self.extend(ccl) + self.extend(post_dci) + + slen = len(self) + dci += len(ccl)-1 # deleted dc, added rest + + # END handle chunk replacement + # END for each chunk + + if nfc == slen: + return False + # END handle completeness + return True + + #} END structures #{ Routines def is_loose_object(m): - """ - :return: True the file contained in memory map m appears to be a loose object. - Only the first two bytes are needed""" - b0, b1 = map(ord, m[:2]) - word = (b0 << 8) + b1 - return b0 == 0x78 and (word % 31) == 0 + """ + :return: True the file contained in memory map m appears to be a loose object. + Only the first two bytes are needed""" + b0, b1 = map(ord, m[:2]) + word = (b0 << 8) + b1 + return b0 == 0x78 and (word % 31) == 0 def loose_object_header_info(m): - """ - :return: tuple(type_string, uncompressed_size_in_bytes) the type string of the - object as well as its uncompressed size in bytes. - :param m: memory map from which to read the compressed object data""" - decompress_size = 8192 # is used in cgit as well - hdr = decompressobj().decompress(m, decompress_size) - type_name, size = hdr[:hdr.find("\0")].split(" ") - return type_name, int(size) - + """ + :return: tuple(type_string, uncompressed_size_in_bytes) the type string of the + object as well as its uncompressed size in bytes. + :param m: memory map from which to read the compressed object data""" + decompress_size = 8192 # is used in cgit as well + hdr = decompressobj().decompress(m, decompress_size) + type_name, size = hdr[:hdr.find("\0")].split(" ") + return type_name, int(size) + def pack_object_header_info(data): - """ - :return: tuple(type_id, uncompressed_size_in_bytes, byte_offset) - The type_id should be interpreted according to the ``type_id_to_type_map`` map - The byte-offset specifies the start of the actual zlib compressed datastream - :param m: random-access memory, like a string or memory map""" - c = ord(data[0]) # first byte - i = 1 # next char to read - type_id = (c >> 4) & 7 # numeric type - size = c & 15 # starting size - s = 4 # starting bit-shift size - while c & 0x80: - c = ord(data[i]) - i += 1 - size += (c & 0x7f) << s - s += 7 - # END character loop - return (type_id, size, i) + """ + :return: tuple(type_id, uncompressed_size_in_bytes, byte_offset) + The type_id should be interpreted according to the ``type_id_to_type_map`` map + The byte-offset specifies the start of the actual zlib compressed datastream + :param m: random-access memory, like a string or memory map""" + c = ord(data[0]) # first byte + i = 1 # next char to read + type_id = (c >> 4) & 7 # numeric type + size = c & 15 # starting size + s = 4 # starting bit-shift size + while c & 0x80: + c = ord(data[i]) + i += 1 + size += (c & 0x7f) << s + s += 7 + # END character loop + return (type_id, size, i) def create_pack_object_header(obj_type, obj_size): - """ - :return: string defining the pack header comprised of the object type - and its incompressed size in bytes - - :param obj_type: pack type_id of the object - :param obj_size: uncompressed size in bytes of the following object stream""" - c = 0 # 1 byte - hdr = str() # output string + """ + :return: string defining the pack header comprised of the object type + and its incompressed size in bytes + + :param obj_type: pack type_id of the object + :param obj_size: uncompressed size in bytes of the following object stream""" + c = 0 # 1 byte + hdr = str() # output string - c = (obj_type << 4) | (obj_size & 0xf) - obj_size >>= 4 - while obj_size: - hdr += chr(c | 0x80) - c = obj_size & 0x7f - obj_size >>= 7 - #END until size is consumed - hdr += chr(c) - return hdr - + c = (obj_type << 4) | (obj_size & 0xf) + obj_size >>= 4 + while obj_size: + hdr += chr(c | 0x80) + c = obj_size & 0x7f + obj_size >>= 7 + #END until size is consumed + hdr += chr(c) + return hdr + def msb_size(data, offset=0): - """ - :return: tuple(read_bytes, size) read the msb size from the given random - access data starting at the given byte offset""" - size = 0 - i = 0 - l = len(data) - hit_msb = False - while i < l: - c = ord(data[i+offset]) - size |= (c & 0x7f) << i*7 - i += 1 - if not c & 0x80: - hit_msb = True - break - # END check msb bit - # END while in range - if not hit_msb: - raise AssertionError("Could not find terminating MSB byte in data stream") - return i+offset, size - + """ + :return: tuple(read_bytes, size) read the msb size from the given random + access data starting at the given byte offset""" + size = 0 + i = 0 + l = len(data) + hit_msb = False + while i < l: + c = ord(data[i+offset]) + size |= (c & 0x7f) << i*7 + i += 1 + if not c & 0x80: + hit_msb = True + break + # END check msb bit + # END while in range + if not hit_msb: + raise AssertionError("Could not find terminating MSB byte in data stream") + return i+offset, size + def loose_object_header(type, size): - """ - :return: string representing the loose object header, which is immediately - followed by the content stream of size 'size'""" - return "%s %i\0" % (type, size) - + """ + :return: string representing the loose object header, which is immediately + followed by the content stream of size 'size'""" + return "%s %i\0" % (type, size) + def write_object(type, size, read, write, chunk_size=chunk_size): - """ - Write the object as identified by type, size and source_stream into the - target_stream - - :param type: type string of the object - :param size: amount of bytes to write from source_stream - :param read: read method of a stream providing the content data - :param write: write method of the output stream - :param close_target_stream: if True, the target stream will be closed when - the routine exits, even if an error is thrown - :return: The actual amount of bytes written to stream, which includes the header and a trailing newline""" - tbw = 0 # total num bytes written - - # WRITE HEADER: type SP size NULL - tbw += write(loose_object_header(type, size)) - tbw += stream_copy(read, write, size, chunk_size) - - return tbw + """ + Write the object as identified by type, size and source_stream into the + target_stream + + :param type: type string of the object + :param size: amount of bytes to write from source_stream + :param read: read method of a stream providing the content data + :param write: write method of the output stream + :param close_target_stream: if True, the target stream will be closed when + the routine exits, even if an error is thrown + :return: The actual amount of bytes written to stream, which includes the header and a trailing newline""" + tbw = 0 # total num bytes written + + # WRITE HEADER: type SP size NULL + tbw += write(loose_object_header(type, size)) + tbw += stream_copy(read, write, size, chunk_size) + + return tbw def stream_copy(read, write, size, chunk_size): - """ - Copy a stream up to size bytes using the provided read and write methods, - in chunks of chunk_size - - **Note:** its much like stream_copy utility, but operates just using methods""" - dbw = 0 # num data bytes written - - # WRITE ALL DATA UP TO SIZE - while True: - cs = min(chunk_size, size-dbw) - # NOTE: not all write methods return the amount of written bytes, like - # mmap.write. Its bad, but we just deal with it ... perhaps its not - # even less efficient - # data_len = write(read(cs)) - # dbw += data_len - data = read(cs) - data_len = len(data) - dbw += data_len - write(data) - if data_len < cs or dbw == size: - break - # END check for stream end - # END duplicate data - return dbw - + """ + Copy a stream up to size bytes using the provided read and write methods, + in chunks of chunk_size + + **Note:** its much like stream_copy utility, but operates just using methods""" + dbw = 0 # num data bytes written + + # WRITE ALL DATA UP TO SIZE + while True: + cs = min(chunk_size, size-dbw) + # NOTE: not all write methods return the amount of written bytes, like + # mmap.write. Its bad, but we just deal with it ... perhaps its not + # even less efficient + # data_len = write(read(cs)) + # dbw += data_len + data = read(cs) + data_len = len(data) + dbw += data_len + write(data) + if data_len < cs or dbw == size: + break + # END check for stream end + # END duplicate data + return dbw + def connect_deltas(dstreams): - """ - Read the condensed delta chunk information from dstream and merge its information - into a list of existing delta chunks - - :param dstreams: iterable of delta stream objects, the delta to be applied last - comes first, then all its ancestors in order - :return: DeltaChunkList, containing all operations to apply""" - tdcl = None # topmost dcl - - dcl = tdcl = TopdownDeltaChunkList() - for dsi, ds in enumerate(dstreams): - # print "Stream", dsi - db = ds.read() - delta_buf_size = ds.size - - # read header - i, base_size = msb_size(db) - i, target_size = msb_size(db, i) - - # interpret opcodes - tbw = 0 # amount of target bytes written - while i < delta_buf_size: - c = ord(db[i]) - i += 1 - if c & 0x80: - cp_off, cp_size = 0, 0 - if (c & 0x01): - cp_off = ord(db[i]) - i += 1 - if (c & 0x02): - cp_off |= (ord(db[i]) << 8) - i += 1 - if (c & 0x04): - cp_off |= (ord(db[i]) << 16) - i += 1 - if (c & 0x08): - cp_off |= (ord(db[i]) << 24) - i += 1 - if (c & 0x10): - cp_size = ord(db[i]) - i += 1 - if (c & 0x20): - cp_size |= (ord(db[i]) << 8) - i += 1 - if (c & 0x40): - cp_size |= (ord(db[i]) << 16) - i += 1 - - if not cp_size: - cp_size = 0x10000 - - rbound = cp_off + cp_size - if (rbound < cp_size or - rbound > base_size): - break - - dcl.append(DeltaChunk(tbw, cp_size, cp_off, None)) - tbw += cp_size - elif c: - # NOTE: in C, the data chunks should probably be concatenated here. - # In python, we do it as a post-process - dcl.append(DeltaChunk(tbw, c, 0, db[i:i+c])) - i += c - tbw += c - else: - raise ValueError("unexpected delta opcode 0") - # END handle command byte - # END while processing delta data - - dcl.compress() - - # merge the lists ! - if dsi > 0: - if not tdcl.connect_with_next_base(dcl): - break - # END handle merge - - # prepare next base - dcl = DeltaChunkList() - # END for each delta stream - - return tdcl - + """ + Read the condensed delta chunk information from dstream and merge its information + into a list of existing delta chunks + + :param dstreams: iterable of delta stream objects, the delta to be applied last + comes first, then all its ancestors in order + :return: DeltaChunkList, containing all operations to apply""" + tdcl = None # topmost dcl + + dcl = tdcl = TopdownDeltaChunkList() + for dsi, ds in enumerate(dstreams): + # print "Stream", dsi + db = ds.read() + delta_buf_size = ds.size + + # read header + i, base_size = msb_size(db) + i, target_size = msb_size(db, i) + + # interpret opcodes + tbw = 0 # amount of target bytes written + while i < delta_buf_size: + c = ord(db[i]) + i += 1 + if c & 0x80: + cp_off, cp_size = 0, 0 + if (c & 0x01): + cp_off = ord(db[i]) + i += 1 + if (c & 0x02): + cp_off |= (ord(db[i]) << 8) + i += 1 + if (c & 0x04): + cp_off |= (ord(db[i]) << 16) + i += 1 + if (c & 0x08): + cp_off |= (ord(db[i]) << 24) + i += 1 + if (c & 0x10): + cp_size = ord(db[i]) + i += 1 + if (c & 0x20): + cp_size |= (ord(db[i]) << 8) + i += 1 + if (c & 0x40): + cp_size |= (ord(db[i]) << 16) + i += 1 + + if not cp_size: + cp_size = 0x10000 + + rbound = cp_off + cp_size + if (rbound < cp_size or + rbound > base_size): + break + + dcl.append(DeltaChunk(tbw, cp_size, cp_off, None)) + tbw += cp_size + elif c: + # NOTE: in C, the data chunks should probably be concatenated here. + # In python, we do it as a post-process + dcl.append(DeltaChunk(tbw, c, 0, db[i:i+c])) + i += c + tbw += c + else: + raise ValueError("unexpected delta opcode 0") + # END handle command byte + # END while processing delta data + + dcl.compress() + + # merge the lists ! + if dsi > 0: + if not tdcl.connect_with_next_base(dcl): + break + # END handle merge + + # prepare next base + dcl = DeltaChunkList() + # END for each delta stream + + return tdcl + def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): - """ - Apply data from a delta buffer using a source buffer to the target file - - :param src_buf: random access data from which the delta was created - :param src_buf_size: size of the source buffer in bytes - :param delta_buf_size: size fo the delta buffer in bytes - :param delta_buf: random access delta data - :param write: write method taking a chunk of bytes - - **Note:** transcribed to python from the similar routine in patch-delta.c""" - i = 0 - db = delta_buf - while i < delta_buf_size: - c = ord(db[i]) - i += 1 - if c & 0x80: - cp_off, cp_size = 0, 0 - if (c & 0x01): - cp_off = ord(db[i]) - i += 1 - if (c & 0x02): - cp_off |= (ord(db[i]) << 8) - i += 1 - if (c & 0x04): - cp_off |= (ord(db[i]) << 16) - i += 1 - if (c & 0x08): - cp_off |= (ord(db[i]) << 24) - i += 1 - if (c & 0x10): - cp_size = ord(db[i]) - i += 1 - if (c & 0x20): - cp_size |= (ord(db[i]) << 8) - i += 1 - if (c & 0x40): - cp_size |= (ord(db[i]) << 16) - i += 1 - - if not cp_size: - cp_size = 0x10000 - - rbound = cp_off + cp_size - if (rbound < cp_size or - rbound > src_buf_size): - break - write(buffer(src_buf, cp_off, cp_size)) - elif c: - write(db[i:i+c]) - i += c - else: - raise ValueError("unexpected delta opcode 0") - # END handle command byte - # END while processing delta data - - # yes, lets use the exact same error message that git uses :) - assert i == delta_buf_size, "delta replay has gone wild" - - + """ + Apply data from a delta buffer using a source buffer to the target file + + :param src_buf: random access data from which the delta was created + :param src_buf_size: size of the source buffer in bytes + :param delta_buf_size: size fo the delta buffer in bytes + :param delta_buf: random access delta data + :param write: write method taking a chunk of bytes + + **Note:** transcribed to python from the similar routine in patch-delta.c""" + i = 0 + db = delta_buf + while i < delta_buf_size: + c = ord(db[i]) + i += 1 + if c & 0x80: + cp_off, cp_size = 0, 0 + if (c & 0x01): + cp_off = ord(db[i]) + i += 1 + if (c & 0x02): + cp_off |= (ord(db[i]) << 8) + i += 1 + if (c & 0x04): + cp_off |= (ord(db[i]) << 16) + i += 1 + if (c & 0x08): + cp_off |= (ord(db[i]) << 24) + i += 1 + if (c & 0x10): + cp_size = ord(db[i]) + i += 1 + if (c & 0x20): + cp_size |= (ord(db[i]) << 8) + i += 1 + if (c & 0x40): + cp_size |= (ord(db[i]) << 16) + i += 1 + + if not cp_size: + cp_size = 0x10000 + + rbound = cp_off + cp_size + if (rbound < cp_size or + rbound > src_buf_size): + break + write(buffer(src_buf, cp_off, cp_size)) + elif c: + write(db[i:i+c]) + i += c + else: + raise ValueError("unexpected delta opcode 0") + # END handle command byte + # END while processing delta data + + # yes, lets use the exact same error message that git uses :) + assert i == delta_buf_size, "delta replay has gone wild" + + def is_equal_canonical_sha(canonical_length, match, sha1): - """ - :return: True if the given lhs and rhs 20 byte binary shas - The comparison will take the canonical_length of the match sha into account, - hence the comparison will only use the last 4 bytes for uneven canonical representations - :param match: less than 20 byte sha - :param sha1: 20 byte sha""" - binary_length = canonical_length/2 - if match[:binary_length] != sha1[:binary_length]: - return False - - if canonical_length - binary_length and \ - (ord(match[-1]) ^ ord(sha1[len(match)-1])) & 0xf0: - return False - # END handle uneven canonnical length - return True - + """ + :return: True if the given lhs and rhs 20 byte binary shas + The comparison will take the canonical_length of the match sha into account, + hence the comparison will only use the last 4 bytes for uneven canonical representations + :param match: less than 20 byte sha + :param sha1: 20 byte sha""" + binary_length = canonical_length/2 + if match[:binary_length] != sha1[:binary_length]: + return False + + if canonical_length - binary_length and \ + (ord(match[-1]) ^ ord(sha1[len(match)-1])) & 0xf0: + return False + # END handle uneven canonnical length + return True + #} END routines try: - # raise ImportError; # DEBUG - from _perf import connect_deltas + # raise ImportError; # DEBUG + from _perf import connect_deltas except ImportError: - pass + pass diff --git a/gitdb/pack.py b/gitdb/pack.py index c6d1cc313..48121f026 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -4,59 +4,59 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains PackIndexFile and PackFile implementations""" from gitdb.exc import ( - BadObject, - UnsupportedOperation, - ParseError - ) + BadObject, + UnsupportedOperation, + ParseError + ) from util import ( - zlib, - mman, - LazyMixin, - unpack_from, - bin_to_hex, - ) + zlib, + mman, + LazyMixin, + unpack_from, + bin_to_hex, + ) from fun import ( - create_pack_object_header, - pack_object_header_info, - is_equal_canonical_sha, - type_id_to_type_map, - write_object, - stream_copy, - chunk_size, - delta_types, - OFS_DELTA, - REF_DELTA, - msb_size - ) + create_pack_object_header, + pack_object_header_info, + is_equal_canonical_sha, + type_id_to_type_map, + write_object, + stream_copy, + chunk_size, + delta_types, + OFS_DELTA, + REF_DELTA, + msb_size + ) try: - from _perf import PackIndexFile_sha_to_index + from _perf import PackIndexFile_sha_to_index except ImportError: - pass + pass # END try c module -from base import ( # Amazing ! - OInfo, - OStream, - OPackInfo, - OPackStream, - ODeltaStream, - ODeltaPackInfo, - ODeltaPackStream, - ) +from base import ( # Amazing ! + OInfo, + OStream, + OPackInfo, + OPackStream, + ODeltaStream, + ODeltaPackInfo, + ODeltaPackStream, + ) from stream import ( - DecompressMemMapReader, - DeltaApplyReader, - Sha1Writer, - NullStream, - FlexibleSha1Writer - ) + DecompressMemMapReader, + DeltaApplyReader, + Sha1Writer, + NullStream, + FlexibleSha1Writer + ) from struct import ( - pack, - unpack, - ) + pack, + unpack, + ) from binascii import crc32 @@ -70,943 +70,943 @@ - + #{ Utilities def pack_object_at(cursor, offset, as_stream): - """ - :return: Tuple(abs_data_offset, PackInfo|PackStream) - an object of the correct type according to the type_id of the object. - If as_stream is True, the object will contain a stream, allowing the - data to be read decompressed. - :param data: random accessable data containing all required information - :parma offset: offset in to the data at which the object information is located - :param as_stream: if True, a stream object will be returned that can read - the data, otherwise you receive an info object only""" - data = cursor.use_region(offset).buffer() - type_id, uncomp_size, data_rela_offset = pack_object_header_info(data) - total_rela_offset = None # set later, actual offset until data stream begins - delta_info = None - - # OFFSET DELTA - if type_id == OFS_DELTA: - i = data_rela_offset - c = ord(data[i]) - i += 1 - delta_offset = c & 0x7f - while c & 0x80: - c = ord(data[i]) - i += 1 - delta_offset += 1 - delta_offset = (delta_offset << 7) + (c & 0x7f) - # END character loop - delta_info = delta_offset - total_rela_offset = i - # REF DELTA - elif type_id == REF_DELTA: - total_rela_offset = data_rela_offset+20 - delta_info = data[data_rela_offset:total_rela_offset] - # BASE OBJECT - else: - # assume its a base object - total_rela_offset = data_rela_offset - # END handle type id - - abs_data_offset = offset + total_rela_offset - if as_stream: - stream = DecompressMemMapReader(buffer(data, total_rela_offset), False, uncomp_size) - if delta_info is None: - return abs_data_offset, OPackStream(offset, type_id, uncomp_size, stream) - else: - return abs_data_offset, ODeltaPackStream(offset, type_id, uncomp_size, delta_info, stream) - else: - if delta_info is None: - return abs_data_offset, OPackInfo(offset, type_id, uncomp_size) - else: - return abs_data_offset, ODeltaPackInfo(offset, type_id, uncomp_size, delta_info) - # END handle info - # END handle stream + """ + :return: Tuple(abs_data_offset, PackInfo|PackStream) + an object of the correct type according to the type_id of the object. + If as_stream is True, the object will contain a stream, allowing the + data to be read decompressed. + :param data: random accessable data containing all required information + :parma offset: offset in to the data at which the object information is located + :param as_stream: if True, a stream object will be returned that can read + the data, otherwise you receive an info object only""" + data = cursor.use_region(offset).buffer() + type_id, uncomp_size, data_rela_offset = pack_object_header_info(data) + total_rela_offset = None # set later, actual offset until data stream begins + delta_info = None + + # OFFSET DELTA + if type_id == OFS_DELTA: + i = data_rela_offset + c = ord(data[i]) + i += 1 + delta_offset = c & 0x7f + while c & 0x80: + c = ord(data[i]) + i += 1 + delta_offset += 1 + delta_offset = (delta_offset << 7) + (c & 0x7f) + # END character loop + delta_info = delta_offset + total_rela_offset = i + # REF DELTA + elif type_id == REF_DELTA: + total_rela_offset = data_rela_offset+20 + delta_info = data[data_rela_offset:total_rela_offset] + # BASE OBJECT + else: + # assume its a base object + total_rela_offset = data_rela_offset + # END handle type id + + abs_data_offset = offset + total_rela_offset + if as_stream: + stream = DecompressMemMapReader(buffer(data, total_rela_offset), False, uncomp_size) + if delta_info is None: + return abs_data_offset, OPackStream(offset, type_id, uncomp_size, stream) + else: + return abs_data_offset, ODeltaPackStream(offset, type_id, uncomp_size, delta_info, stream) + else: + if delta_info is None: + return abs_data_offset, OPackInfo(offset, type_id, uncomp_size) + else: + return abs_data_offset, ODeltaPackInfo(offset, type_id, uncomp_size, delta_info) + # END handle info + # END handle stream def write_stream_to_pack(read, write, zstream, base_crc=None): - """Copy a stream as read from read function, zip it, and write the result. - Count the number of written bytes and return it - :param base_crc: if not None, the crc will be the base for all compressed data - we consecutively write and generate a crc32 from. If None, no crc will be generated - :return: tuple(no bytes read, no bytes written, crc32) crc might be 0 if base_crc - was false""" - br = 0 # bytes read - bw = 0 # bytes written - want_crc = base_crc is not None - crc = 0 - if want_crc: - crc = base_crc - #END initialize crc - - while True: - chunk = read(chunk_size) - br += len(chunk) - compressed = zstream.compress(chunk) - bw += len(compressed) - write(compressed) # cannot assume return value - - if want_crc: - crc = crc32(compressed, crc) - #END handle crc - - if len(chunk) != chunk_size: - break - #END copy loop - - compressed = zstream.flush() - bw += len(compressed) - write(compressed) - if want_crc: - crc = crc32(compressed, crc) - #END handle crc - - return (br, bw, crc) + """Copy a stream as read from read function, zip it, and write the result. + Count the number of written bytes and return it + :param base_crc: if not None, the crc will be the base for all compressed data + we consecutively write and generate a crc32 from. If None, no crc will be generated + :return: tuple(no bytes read, no bytes written, crc32) crc might be 0 if base_crc + was false""" + br = 0 # bytes read + bw = 0 # bytes written + want_crc = base_crc is not None + crc = 0 + if want_crc: + crc = base_crc + #END initialize crc + + while True: + chunk = read(chunk_size) + br += len(chunk) + compressed = zstream.compress(chunk) + bw += len(compressed) + write(compressed) # cannot assume return value + + if want_crc: + crc = crc32(compressed, crc) + #END handle crc + + if len(chunk) != chunk_size: + break + #END copy loop + + compressed = zstream.flush() + bw += len(compressed) + write(compressed) + if want_crc: + crc = crc32(compressed, crc) + #END handle crc + + return (br, bw, crc) #} END utilities class IndexWriter(object): - """Utility to cache index information, allowing to write all information later - in one go to the given stream - **Note:** currently only writes v2 indices""" - __slots__ = '_objs' - - def __init__(self): - self._objs = list() - - def append(self, binsha, crc, offset): - """Append one piece of object information""" - self._objs.append((binsha, crc, offset)) - - def write(self, pack_sha, write): - """Write the index file using the given write method - :param pack_sha: binary sha over the whole pack that we index - :return: sha1 binary sha over all index file contents""" - # sort for sha1 hash - self._objs.sort(key=lambda o: o[0]) - - sha_writer = FlexibleSha1Writer(write) - sha_write = sha_writer.write - sha_write(PackIndexFile.index_v2_signature) - sha_write(pack(">L", PackIndexFile.index_version_default)) - - # fanout - tmplist = list((0,)*256) # fanout or list with 64 bit offsets - for t in self._objs: - tmplist[ord(t[0][0])] += 1 - #END prepare fanout - for i in xrange(255): - v = tmplist[i] - sha_write(pack('>L', v)) - tmplist[i+1] += v - #END write each fanout entry - sha_write(pack('>L', tmplist[255])) - - # sha1 ordered - # save calls, that is push them into c - sha_write(''.join(t[0] for t in self._objs)) - - # crc32 - for t in self._objs: - sha_write(pack('>L', t[1]&0xffffffff)) - #END for each crc - - tmplist = list() - # offset 32 - for t in self._objs: - ofs = t[2] - if ofs > 0x7fffffff: - tmplist.append(ofs) - ofs = 0x80000000 + len(tmplist)-1 - #END hande 64 bit offsets - sha_write(pack('>L', ofs&0xffffffff)) - #END for each offset - - # offset 64 - for ofs in tmplist: - sha_write(pack(">Q", ofs)) - #END for each offset - - # trailer - assert(len(pack_sha) == 20) - sha_write(pack_sha) - sha = sha_writer.sha(as_hex=False) - write(sha) - return sha - - + """Utility to cache index information, allowing to write all information later + in one go to the given stream + **Note:** currently only writes v2 indices""" + __slots__ = '_objs' + + def __init__(self): + self._objs = list() + + def append(self, binsha, crc, offset): + """Append one piece of object information""" + self._objs.append((binsha, crc, offset)) + + def write(self, pack_sha, write): + """Write the index file using the given write method + :param pack_sha: binary sha over the whole pack that we index + :return: sha1 binary sha over all index file contents""" + # sort for sha1 hash + self._objs.sort(key=lambda o: o[0]) + + sha_writer = FlexibleSha1Writer(write) + sha_write = sha_writer.write + sha_write(PackIndexFile.index_v2_signature) + sha_write(pack(">L", PackIndexFile.index_version_default)) + + # fanout + tmplist = list((0,)*256) # fanout or list with 64 bit offsets + for t in self._objs: + tmplist[ord(t[0][0])] += 1 + #END prepare fanout + for i in xrange(255): + v = tmplist[i] + sha_write(pack('>L', v)) + tmplist[i+1] += v + #END write each fanout entry + sha_write(pack('>L', tmplist[255])) + + # sha1 ordered + # save calls, that is push them into c + sha_write(''.join(t[0] for t in self._objs)) + + # crc32 + for t in self._objs: + sha_write(pack('>L', t[1]&0xffffffff)) + #END for each crc + + tmplist = list() + # offset 32 + for t in self._objs: + ofs = t[2] + if ofs > 0x7fffffff: + tmplist.append(ofs) + ofs = 0x80000000 + len(tmplist)-1 + #END hande 64 bit offsets + sha_write(pack('>L', ofs&0xffffffff)) + #END for each offset + + # offset 64 + for ofs in tmplist: + sha_write(pack(">Q", ofs)) + #END for each offset + + # trailer + assert(len(pack_sha) == 20) + sha_write(pack_sha) + sha = sha_writer.sha(as_hex=False) + write(sha) + return sha + + class PackIndexFile(LazyMixin): - """A pack index provides offsets into the corresponding pack, allowing to find - locations for offsets faster.""" - - # Dont use slots as we dynamically bind functions for each version, need a dict for this - # The slots you see here are just to keep track of our instance variables - # __slots__ = ('_indexpath', '_fanout_table', '_cursor', '_version', - # '_sha_list_offset', '_crc_list_offset', '_pack_offset', '_pack_64_offset') + """A pack index provides offsets into the corresponding pack, allowing to find + locations for offsets faster.""" + + # Dont use slots as we dynamically bind functions for each version, need a dict for this + # The slots you see here are just to keep track of our instance variables + # __slots__ = ('_indexpath', '_fanout_table', '_cursor', '_version', + # '_sha_list_offset', '_crc_list_offset', '_pack_offset', '_pack_64_offset') - # used in v2 indices - _sha_list_offset = 8 + 1024 - index_v2_signature = '\377tOc' - index_version_default = 2 + # used in v2 indices + _sha_list_offset = 8 + 1024 + index_v2_signature = '\377tOc' + index_version_default = 2 - def __init__(self, indexpath): - super(PackIndexFile, self).__init__() - self._indexpath = indexpath - - def _set_cache_(self, attr): - if attr == "_packfile_checksum": - self._packfile_checksum = self._cursor.map()[-40:-20] - elif attr == "_packfile_checksum": - self._packfile_checksum = self._cursor.map()[-20:] - elif attr == "_cursor": - # Note: We don't lock the file when reading as we cannot be sure - # that we can actually write to the location - it could be a read-only - # alternate for instance - self._cursor = mman.make_cursor(self._indexpath).use_region() - # We will assume that the index will always fully fit into memory ! - if mman.window_size() > 0 and self._cursor.file_size() > mman.window_size(): - raise AssertionError("The index file at %s is too large to fit into a mapped window (%i > %i). This is a limitation of the implementation" % (self._indexpath, self._cursor.file_size(), mman.window_size())) - #END assert window size - else: - # now its time to initialize everything - if we are here, someone wants - # to access the fanout table or related properties - - # CHECK VERSION - mmap = self._cursor.map() - self._version = (mmap[:4] == self.index_v2_signature and 2) or 1 - if self._version == 2: - version_id = unpack_from(">L", mmap, 4)[0] - assert version_id == self._version, "Unsupported index version: %i" % version_id - # END assert version - - # SETUP FUNCTIONS - # setup our functions according to the actual version - for fname in ('entry', 'offset', 'sha', 'crc'): - setattr(self, fname, getattr(self, "_%s_v%i" % (fname, self._version))) - # END for each function to initialize - - - # INITIALIZE DATA - # byte offset is 8 if version is 2, 0 otherwise - self._initialize() - # END handle attributes - + def __init__(self, indexpath): + super(PackIndexFile, self).__init__() + self._indexpath = indexpath + + def _set_cache_(self, attr): + if attr == "_packfile_checksum": + self._packfile_checksum = self._cursor.map()[-40:-20] + elif attr == "_packfile_checksum": + self._packfile_checksum = self._cursor.map()[-20:] + elif attr == "_cursor": + # Note: We don't lock the file when reading as we cannot be sure + # that we can actually write to the location - it could be a read-only + # alternate for instance + self._cursor = mman.make_cursor(self._indexpath).use_region() + # We will assume that the index will always fully fit into memory ! + if mman.window_size() > 0 and self._cursor.file_size() > mman.window_size(): + raise AssertionError("The index file at %s is too large to fit into a mapped window (%i > %i). This is a limitation of the implementation" % (self._indexpath, self._cursor.file_size(), mman.window_size())) + #END assert window size + else: + # now its time to initialize everything - if we are here, someone wants + # to access the fanout table or related properties + + # CHECK VERSION + mmap = self._cursor.map() + self._version = (mmap[:4] == self.index_v2_signature and 2) or 1 + if self._version == 2: + version_id = unpack_from(">L", mmap, 4)[0] + assert version_id == self._version, "Unsupported index version: %i" % version_id + # END assert version + + # SETUP FUNCTIONS + # setup our functions according to the actual version + for fname in ('entry', 'offset', 'sha', 'crc'): + setattr(self, fname, getattr(self, "_%s_v%i" % (fname, self._version))) + # END for each function to initialize + + + # INITIALIZE DATA + # byte offset is 8 if version is 2, 0 otherwise + self._initialize() + # END handle attributes + - #{ Access V1 - - def _entry_v1(self, i): - """:return: tuple(offset, binsha, 0)""" - return unpack_from(">L20s", self._cursor.map(), 1024 + i*24) + (0, ) - - def _offset_v1(self, i): - """see ``_offset_v2``""" - return unpack_from(">L", self._cursor.map(), 1024 + i*24)[0] - - def _sha_v1(self, i): - """see ``_sha_v2``""" - base = 1024 + (i*24)+4 - return self._cursor.map()[base:base+20] - - def _crc_v1(self, i): - """unsupported""" - return 0 - - #} END access V1 - - #{ Access V2 - def _entry_v2(self, i): - """:return: tuple(offset, binsha, crc)""" - return (self._offset_v2(i), self._sha_v2(i), self._crc_v2(i)) - - def _offset_v2(self, i): - """:return: 32 or 64 byte offset into pack files. 64 byte offsets will only - be returned if the pack is larger than 4 GiB, or 2^32""" - offset = unpack_from(">L", self._cursor.map(), self._pack_offset + i * 4)[0] - - # if the high-bit is set, this indicates that we have to lookup the offset - # in the 64 bit region of the file. The current offset ( lower 31 bits ) - # are the index into it - if offset & 0x80000000: - offset = unpack_from(">Q", self._cursor.map(), self._pack_64_offset + (offset & ~0x80000000) * 8)[0] - # END handle 64 bit offset - - return offset - - def _sha_v2(self, i): - """:return: sha at the given index of this file index instance""" - base = self._sha_list_offset + i * 20 - return self._cursor.map()[base:base+20] - - def _crc_v2(self, i): - """:return: 4 bytes crc for the object at index i""" - return unpack_from(">L", self._cursor.map(), self._crc_list_offset + i * 4)[0] - - #} END access V2 - - #{ Initialization - - def _initialize(self): - """initialize base data""" - self._fanout_table = self._read_fanout((self._version == 2) * 8) - - if self._version == 2: - self._crc_list_offset = self._sha_list_offset + self.size() * 20 - self._pack_offset = self._crc_list_offset + self.size() * 4 - self._pack_64_offset = self._pack_offset + self.size() * 4 - # END setup base - - def _read_fanout(self, byte_offset): - """Generate a fanout table from our data""" - d = self._cursor.map() - out = list() - append = out.append - for i in range(256): - append(unpack_from('>L', d, byte_offset + i*4)[0]) - # END for each entry - return out - - #} END initialization - - #{ Properties - def version(self): - return self._version - - def size(self): - """:return: amount of objects referred to by this index""" - return self._fanout_table[255] - - def path(self): - """:return: path to the packindexfile""" - return self._indexpath - - def packfile_checksum(self): - """:return: 20 byte sha representing the sha1 hash of the pack file""" - return self._cursor.map()[-40:-20] - - def indexfile_checksum(self): - """:return: 20 byte sha representing the sha1 hash of this index file""" - return self._cursor.map()[-20:] - - def offsets(self): - """:return: sequence of all offsets in the order in which they were written - - **Note:** return value can be random accessed, but may be immmutable""" - if self._version == 2: - # read stream to array, convert to tuple - a = array.array('I') # 4 byte unsigned int, long are 8 byte on 64 bit it appears - a.fromstring(buffer(self._cursor.map(), self._pack_offset, self._pack_64_offset - self._pack_offset)) - - # networkbyteorder to something array likes more - if sys.byteorder == 'little': - a.byteswap() - return a - else: - return tuple(self.offset(index) for index in xrange(self.size())) - # END handle version - - def sha_to_index(self, sha): - """ - :return: index usable with the ``offset`` or ``entry`` method, or None - if the sha was not found in this pack index - :param sha: 20 byte sha to lookup""" - first_byte = ord(sha[0]) - get_sha = self.sha - lo = 0 # lower index, the left bound of the bisection - if first_byte != 0: - lo = self._fanout_table[first_byte-1] - hi = self._fanout_table[first_byte] # the upper, right bound of the bisection - - # bisect until we have the sha - while lo < hi: - mid = (lo + hi) / 2 - c = cmp(sha, get_sha(mid)) - if c < 0: - hi = mid - elif not c: - return mid - else: - lo = mid + 1 - # END handle midpoint - # END bisect - return None - - def partial_sha_to_index(self, partial_bin_sha, canonical_length): - """ - :return: index as in `sha_to_index` or None if the sha was not found in this - index file - :param partial_bin_sha: an at least two bytes of a partial binary sha - :param canonical_length: lenght of the original hexadecimal representation of the - given partial binary sha - :raise AmbiguousObjectName:""" - if len(partial_bin_sha) < 2: - raise ValueError("Require at least 2 bytes of partial sha") - - first_byte = ord(partial_bin_sha[0]) - get_sha = self.sha - lo = 0 # lower index, the left bound of the bisection - if first_byte != 0: - lo = self._fanout_table[first_byte-1] - hi = self._fanout_table[first_byte] # the upper, right bound of the bisection - - # fill the partial to full 20 bytes - filled_sha = partial_bin_sha + '\0'*(20 - len(partial_bin_sha)) - - # find lowest - while lo < hi: - mid = (lo + hi) / 2 - c = cmp(filled_sha, get_sha(mid)) - if c < 0: - hi = mid - elif not c: - # perfect match - lo = mid - break - else: - lo = mid + 1 - # END handle midpoint - # END bisect - - if lo < self.size(): - cur_sha = get_sha(lo) - if is_equal_canonical_sha(canonical_length, partial_bin_sha, cur_sha): - next_sha = None - if lo+1 < self.size(): - next_sha = get_sha(lo+1) - if next_sha and next_sha == cur_sha: - raise AmbiguousObjectName(partial_bin_sha) - return lo - # END if we have a match - # END if we found something - return None - - if 'PackIndexFile_sha_to_index' in globals(): - # NOTE: Its just about 25% faster, the major bottleneck might be the attr - # accesses - def sha_to_index(self, sha): - return PackIndexFile_sha_to_index(self, sha) - # END redefine heavy-hitter with c version - - #} END properties - - + #{ Access V1 + + def _entry_v1(self, i): + """:return: tuple(offset, binsha, 0)""" + return unpack_from(">L20s", self._cursor.map(), 1024 + i*24) + (0, ) + + def _offset_v1(self, i): + """see ``_offset_v2``""" + return unpack_from(">L", self._cursor.map(), 1024 + i*24)[0] + + def _sha_v1(self, i): + """see ``_sha_v2``""" + base = 1024 + (i*24)+4 + return self._cursor.map()[base:base+20] + + def _crc_v1(self, i): + """unsupported""" + return 0 + + #} END access V1 + + #{ Access V2 + def _entry_v2(self, i): + """:return: tuple(offset, binsha, crc)""" + return (self._offset_v2(i), self._sha_v2(i), self._crc_v2(i)) + + def _offset_v2(self, i): + """:return: 32 or 64 byte offset into pack files. 64 byte offsets will only + be returned if the pack is larger than 4 GiB, or 2^32""" + offset = unpack_from(">L", self._cursor.map(), self._pack_offset + i * 4)[0] + + # if the high-bit is set, this indicates that we have to lookup the offset + # in the 64 bit region of the file. The current offset ( lower 31 bits ) + # are the index into it + if offset & 0x80000000: + offset = unpack_from(">Q", self._cursor.map(), self._pack_64_offset + (offset & ~0x80000000) * 8)[0] + # END handle 64 bit offset + + return offset + + def _sha_v2(self, i): + """:return: sha at the given index of this file index instance""" + base = self._sha_list_offset + i * 20 + return self._cursor.map()[base:base+20] + + def _crc_v2(self, i): + """:return: 4 bytes crc for the object at index i""" + return unpack_from(">L", self._cursor.map(), self._crc_list_offset + i * 4)[0] + + #} END access V2 + + #{ Initialization + + def _initialize(self): + """initialize base data""" + self._fanout_table = self._read_fanout((self._version == 2) * 8) + + if self._version == 2: + self._crc_list_offset = self._sha_list_offset + self.size() * 20 + self._pack_offset = self._crc_list_offset + self.size() * 4 + self._pack_64_offset = self._pack_offset + self.size() * 4 + # END setup base + + def _read_fanout(self, byte_offset): + """Generate a fanout table from our data""" + d = self._cursor.map() + out = list() + append = out.append + for i in range(256): + append(unpack_from('>L', d, byte_offset + i*4)[0]) + # END for each entry + return out + + #} END initialization + + #{ Properties + def version(self): + return self._version + + def size(self): + """:return: amount of objects referred to by this index""" + return self._fanout_table[255] + + def path(self): + """:return: path to the packindexfile""" + return self._indexpath + + def packfile_checksum(self): + """:return: 20 byte sha representing the sha1 hash of the pack file""" + return self._cursor.map()[-40:-20] + + def indexfile_checksum(self): + """:return: 20 byte sha representing the sha1 hash of this index file""" + return self._cursor.map()[-20:] + + def offsets(self): + """:return: sequence of all offsets in the order in which they were written + + **Note:** return value can be random accessed, but may be immmutable""" + if self._version == 2: + # read stream to array, convert to tuple + a = array.array('I') # 4 byte unsigned int, long are 8 byte on 64 bit it appears + a.fromstring(buffer(self._cursor.map(), self._pack_offset, self._pack_64_offset - self._pack_offset)) + + # networkbyteorder to something array likes more + if sys.byteorder == 'little': + a.byteswap() + return a + else: + return tuple(self.offset(index) for index in xrange(self.size())) + # END handle version + + def sha_to_index(self, sha): + """ + :return: index usable with the ``offset`` or ``entry`` method, or None + if the sha was not found in this pack index + :param sha: 20 byte sha to lookup""" + first_byte = ord(sha[0]) + get_sha = self.sha + lo = 0 # lower index, the left bound of the bisection + if first_byte != 0: + lo = self._fanout_table[first_byte-1] + hi = self._fanout_table[first_byte] # the upper, right bound of the bisection + + # bisect until we have the sha + while lo < hi: + mid = (lo + hi) / 2 + c = cmp(sha, get_sha(mid)) + if c < 0: + hi = mid + elif not c: + return mid + else: + lo = mid + 1 + # END handle midpoint + # END bisect + return None + + def partial_sha_to_index(self, partial_bin_sha, canonical_length): + """ + :return: index as in `sha_to_index` or None if the sha was not found in this + index file + :param partial_bin_sha: an at least two bytes of a partial binary sha + :param canonical_length: lenght of the original hexadecimal representation of the + given partial binary sha + :raise AmbiguousObjectName:""" + if len(partial_bin_sha) < 2: + raise ValueError("Require at least 2 bytes of partial sha") + + first_byte = ord(partial_bin_sha[0]) + get_sha = self.sha + lo = 0 # lower index, the left bound of the bisection + if first_byte != 0: + lo = self._fanout_table[first_byte-1] + hi = self._fanout_table[first_byte] # the upper, right bound of the bisection + + # fill the partial to full 20 bytes + filled_sha = partial_bin_sha + '\0'*(20 - len(partial_bin_sha)) + + # find lowest + while lo < hi: + mid = (lo + hi) / 2 + c = cmp(filled_sha, get_sha(mid)) + if c < 0: + hi = mid + elif not c: + # perfect match + lo = mid + break + else: + lo = mid + 1 + # END handle midpoint + # END bisect + + if lo < self.size(): + cur_sha = get_sha(lo) + if is_equal_canonical_sha(canonical_length, partial_bin_sha, cur_sha): + next_sha = None + if lo+1 < self.size(): + next_sha = get_sha(lo+1) + if next_sha and next_sha == cur_sha: + raise AmbiguousObjectName(partial_bin_sha) + return lo + # END if we have a match + # END if we found something + return None + + if 'PackIndexFile_sha_to_index' in globals(): + # NOTE: Its just about 25% faster, the major bottleneck might be the attr + # accesses + def sha_to_index(self, sha): + return PackIndexFile_sha_to_index(self, sha) + # END redefine heavy-hitter with c version + + #} END properties + + class PackFile(LazyMixin): - """A pack is a file written according to the Version 2 for git packs - - As we currently use memory maps, it could be assumed that the maximum size of - packs therefor is 32 bit on 32 bit systems. On 64 bit systems, this should be - fine though. - - **Note:** at some point, this might be implemented using streams as well, or - streams are an alternate path in the case memory maps cannot be created - for some reason - one clearly doesn't want to read 10GB at once in that - case""" - - __slots__ = ('_packpath', '_cursor', '_size', '_version') - pack_signature = 0x5041434b # 'PACK' - pack_version_default = 2 - - # offset into our data at which the first object starts - first_object_offset = 3*4 # header bytes - footer_size = 20 # final sha - - def __init__(self, packpath): - self._packpath = packpath - - def _set_cache_(self, attr): - # we fill the whole cache, whichever attribute gets queried first - self._cursor = mman.make_cursor(self._packpath).use_region() - - # read the header information - type_id, self._version, self._size = unpack_from(">LLL", self._cursor.map(), 0) - - # TODO: figure out whether we should better keep the lock, or maybe - # add a .keep file instead ? - if type_id != self.pack_signature: - raise ParseError("Invalid pack signature: %i" % type_id) - - def _iter_objects(self, start_offset, as_stream=True): - """Handle the actual iteration of objects within this pack""" - c = self._cursor - content_size = c.file_size() - self.footer_size - cur_offset = start_offset or self.first_object_offset - - null = NullStream() - while cur_offset < content_size: - data_offset, ostream = pack_object_at(c, cur_offset, True) - # scrub the stream to the end - this decompresses the object, but yields - # the amount of compressed bytes we need to get to the next offset - - stream_copy(ostream.read, null.write, ostream.size, chunk_size) - cur_offset += (data_offset - ostream.pack_offset) + ostream.stream.compressed_bytes_read() - - - # if a stream is requested, reset it beforehand - # Otherwise return the Stream object directly, its derived from the - # info object - if as_stream: - ostream.stream.seek(0) - yield ostream - # END until we have read everything - - #{ Pack Information - - def size(self): - """:return: The amount of objects stored in this pack""" - return self._size - - def version(self): - """:return: the version of this pack""" - return self._version - - def data(self): - """ - :return: read-only data of this pack. It provides random access and usually - is a memory map. - :note: This method is unsafe as it returns a window into a file which might be larger than than the actual window size""" - # can use map as we are starting at offset 0. Otherwise we would have to use buffer() - return self._cursor.use_region().map() - - def checksum(self): - """:return: 20 byte sha1 hash on all object sha's contained in this file""" - return self._cursor.use_region(self._cursor.file_size()-20).buffer()[:] - - def path(self): - """:return: path to the packfile""" - return self._packpath - #} END pack information - - #{ Pack Specific - - def collect_streams(self, offset): - """ - :return: list of pack streams which are required to build the object - at the given offset. The first entry of the list is the object at offset, - the last one is either a full object, or a REF_Delta stream. The latter - type needs its reference object to be locked up in an ODB to form a valid - delta chain. - If the object at offset is no delta, the size of the list is 1. - :param offset: specifies the first byte of the object within this pack""" - out = list() - c = self._cursor - while True: - ostream = pack_object_at(c, offset, True)[1] - out.append(ostream) - if ostream.type_id == OFS_DELTA: - offset = ostream.pack_offset - ostream.delta_info - else: - # the only thing we can lookup are OFFSET deltas. Everything - # else is either an object, or a ref delta, in the latter - # case someone else has to find it - break - # END handle type - # END while chaining streams - return out + """A pack is a file written according to the Version 2 for git packs + + As we currently use memory maps, it could be assumed that the maximum size of + packs therefor is 32 bit on 32 bit systems. On 64 bit systems, this should be + fine though. + + **Note:** at some point, this might be implemented using streams as well, or + streams are an alternate path in the case memory maps cannot be created + for some reason - one clearly doesn't want to read 10GB at once in that + case""" + + __slots__ = ('_packpath', '_cursor', '_size', '_version') + pack_signature = 0x5041434b # 'PACK' + pack_version_default = 2 + + # offset into our data at which the first object starts + first_object_offset = 3*4 # header bytes + footer_size = 20 # final sha + + def __init__(self, packpath): + self._packpath = packpath + + def _set_cache_(self, attr): + # we fill the whole cache, whichever attribute gets queried first + self._cursor = mman.make_cursor(self._packpath).use_region() + + # read the header information + type_id, self._version, self._size = unpack_from(">LLL", self._cursor.map(), 0) + + # TODO: figure out whether we should better keep the lock, or maybe + # add a .keep file instead ? + if type_id != self.pack_signature: + raise ParseError("Invalid pack signature: %i" % type_id) + + def _iter_objects(self, start_offset, as_stream=True): + """Handle the actual iteration of objects within this pack""" + c = self._cursor + content_size = c.file_size() - self.footer_size + cur_offset = start_offset or self.first_object_offset + + null = NullStream() + while cur_offset < content_size: + data_offset, ostream = pack_object_at(c, cur_offset, True) + # scrub the stream to the end - this decompresses the object, but yields + # the amount of compressed bytes we need to get to the next offset + + stream_copy(ostream.read, null.write, ostream.size, chunk_size) + cur_offset += (data_offset - ostream.pack_offset) + ostream.stream.compressed_bytes_read() + + + # if a stream is requested, reset it beforehand + # Otherwise return the Stream object directly, its derived from the + # info object + if as_stream: + ostream.stream.seek(0) + yield ostream + # END until we have read everything + + #{ Pack Information + + def size(self): + """:return: The amount of objects stored in this pack""" + return self._size + + def version(self): + """:return: the version of this pack""" + return self._version + + def data(self): + """ + :return: read-only data of this pack. It provides random access and usually + is a memory map. + :note: This method is unsafe as it returns a window into a file which might be larger than than the actual window size""" + # can use map as we are starting at offset 0. Otherwise we would have to use buffer() + return self._cursor.use_region().map() + + def checksum(self): + """:return: 20 byte sha1 hash on all object sha's contained in this file""" + return self._cursor.use_region(self._cursor.file_size()-20).buffer()[:] + + def path(self): + """:return: path to the packfile""" + return self._packpath + #} END pack information + + #{ Pack Specific + + def collect_streams(self, offset): + """ + :return: list of pack streams which are required to build the object + at the given offset. The first entry of the list is the object at offset, + the last one is either a full object, or a REF_Delta stream. The latter + type needs its reference object to be locked up in an ODB to form a valid + delta chain. + If the object at offset is no delta, the size of the list is 1. + :param offset: specifies the first byte of the object within this pack""" + out = list() + c = self._cursor + while True: + ostream = pack_object_at(c, offset, True)[1] + out.append(ostream) + if ostream.type_id == OFS_DELTA: + offset = ostream.pack_offset - ostream.delta_info + else: + # the only thing we can lookup are OFFSET deltas. Everything + # else is either an object, or a ref delta, in the latter + # case someone else has to find it + break + # END handle type + # END while chaining streams + return out - #} END pack specific - - #{ Read-Database like Interface - - def info(self, offset): - """Retrieve information about the object at the given file-absolute offset - - :param offset: byte offset - :return: OPackInfo instance, the actual type differs depending on the type_id attribute""" - return pack_object_at(self._cursor, offset or self.first_object_offset, False)[1] - - def stream(self, offset): - """Retrieve an object at the given file-relative offset as stream along with its information - - :param offset: byte offset - :return: OPackStream instance, the actual type differs depending on the type_id attribute""" - return pack_object_at(self._cursor, offset or self.first_object_offset, True)[1] - - def stream_iter(self, start_offset=0): - """ - :return: iterator yielding OPackStream compatible instances, allowing - to access the data in the pack directly. - :param start_offset: offset to the first object to iterate. If 0, iteration - starts at the very first object in the pack. - - **Note:** Iterating a pack directly is costly as the datastream has to be decompressed - to determine the bounds between the objects""" - return self._iter_objects(start_offset, as_stream=True) - - #} END Read-Database like Interface - - + #} END pack specific + + #{ Read-Database like Interface + + def info(self, offset): + """Retrieve information about the object at the given file-absolute offset + + :param offset: byte offset + :return: OPackInfo instance, the actual type differs depending on the type_id attribute""" + return pack_object_at(self._cursor, offset or self.first_object_offset, False)[1] + + def stream(self, offset): + """Retrieve an object at the given file-relative offset as stream along with its information + + :param offset: byte offset + :return: OPackStream instance, the actual type differs depending on the type_id attribute""" + return pack_object_at(self._cursor, offset or self.first_object_offset, True)[1] + + def stream_iter(self, start_offset=0): + """ + :return: iterator yielding OPackStream compatible instances, allowing + to access the data in the pack directly. + :param start_offset: offset to the first object to iterate. If 0, iteration + starts at the very first object in the pack. + + **Note:** Iterating a pack directly is costly as the datastream has to be decompressed + to determine the bounds between the objects""" + return self._iter_objects(start_offset, as_stream=True) + + #} END Read-Database like Interface + + class PackEntity(LazyMixin): - """Combines the PackIndexFile and the PackFile into one, allowing the - actual objects to be resolved and iterated""" - - __slots__ = ( '_index', # our index file - '_pack', # our pack file - '_offset_map' # on demand dict mapping one offset to the next consecutive one - ) - - IndexFileCls = PackIndexFile - PackFileCls = PackFile - - def __init__(self, pack_or_index_path): - """Initialize ourselves with the path to the respective pack or index file""" - basename, ext = os.path.splitext(pack_or_index_path) - self._index = self.IndexFileCls("%s.idx" % basename) # PackIndexFile instance - self._pack = self.PackFileCls("%s.pack" % basename) # corresponding PackFile instance - - def _set_cache_(self, attr): - # currently this can only be _offset_map - # TODO: make this a simple sorted offset array which can be bisected - # to find the respective entry, from which we can take a +1 easily - # This might be slower, but should also be much lighter in memory ! - offsets_sorted = sorted(self._index.offsets()) - last_offset = len(self._pack.data()) - self._pack.footer_size - assert offsets_sorted, "Cannot handle empty indices" - - offset_map = None - if len(offsets_sorted) == 1: - offset_map = { offsets_sorted[0] : last_offset } - else: - iter_offsets = iter(offsets_sorted) - iter_offsets_plus_one = iter(offsets_sorted) - iter_offsets_plus_one.next() - consecutive = izip(iter_offsets, iter_offsets_plus_one) - - offset_map = dict(consecutive) - - # the last offset is not yet set - offset_map[offsets_sorted[-1]] = last_offset - # END handle offset amount - self._offset_map = offset_map - - def _sha_to_index(self, sha): - """:return: index for the given sha, or raise""" - index = self._index.sha_to_index(sha) - if index is None: - raise BadObject(sha) - return index - - def _iter_objects(self, as_stream): - """Iterate over all objects in our index and yield their OInfo or OStream instences""" - _sha = self._index.sha - _object = self._object - for index in xrange(self._index.size()): - yield _object(_sha(index), as_stream, index) - # END for each index - - def _object(self, sha, as_stream, index=-1): - """:return: OInfo or OStream object providing information about the given sha - :param index: if not -1, its assumed to be the sha's index in the IndexFile""" - # its a little bit redundant here, but it needs to be efficient - if index < 0: - index = self._sha_to_index(sha) - if sha is None: - sha = self._index.sha(index) - # END assure sha is present ( in output ) - offset = self._index.offset(index) - type_id, uncomp_size, data_rela_offset = pack_object_header_info(self._pack._cursor.use_region(offset).buffer()) - if as_stream: - if type_id not in delta_types: - packstream = self._pack.stream(offset) - return OStream(sha, packstream.type, packstream.size, packstream.stream) - # END handle non-deltas - - # produce a delta stream containing all info - # To prevent it from applying the deltas when querying the size, - # we extract it from the delta stream ourselves - streams = self.collect_streams_at_offset(offset) - dstream = DeltaApplyReader.new(streams) - - return ODeltaStream(sha, dstream.type, None, dstream) - else: - if type_id not in delta_types: - return OInfo(sha, type_id_to_type_map[type_id], uncomp_size) - # END handle non-deltas - - # deltas are a little tougher - unpack the first bytes to obtain - # the actual target size, as opposed to the size of the delta data - streams = self.collect_streams_at_offset(offset) - buf = streams[0].read(512) - offset, src_size = msb_size(buf) - offset, target_size = msb_size(buf, offset) - - # collect the streams to obtain the actual object type - if streams[-1].type_id in delta_types: - raise BadObject(sha, "Could not resolve delta object") - return OInfo(sha, streams[-1].type, target_size) - # END handle stream - - #{ Read-Database like Interface - - def info(self, sha): - """Retrieve information about the object identified by the given sha - - :param sha: 20 byte sha1 - :raise BadObject: - :return: OInfo instance, with 20 byte sha""" - return self._object(sha, False) - - def stream(self, sha): - """Retrieve an object stream along with its information as identified by the given sha - - :param sha: 20 byte sha1 - :raise BadObject: - :return: OStream instance, with 20 byte sha""" - return self._object(sha, True) + """Combines the PackIndexFile and the PackFile into one, allowing the + actual objects to be resolved and iterated""" + + __slots__ = ( '_index', # our index file + '_pack', # our pack file + '_offset_map' # on demand dict mapping one offset to the next consecutive one + ) + + IndexFileCls = PackIndexFile + PackFileCls = PackFile + + def __init__(self, pack_or_index_path): + """Initialize ourselves with the path to the respective pack or index file""" + basename, ext = os.path.splitext(pack_or_index_path) + self._index = self.IndexFileCls("%s.idx" % basename) # PackIndexFile instance + self._pack = self.PackFileCls("%s.pack" % basename) # corresponding PackFile instance + + def _set_cache_(self, attr): + # currently this can only be _offset_map + # TODO: make this a simple sorted offset array which can be bisected + # to find the respective entry, from which we can take a +1 easily + # This might be slower, but should also be much lighter in memory ! + offsets_sorted = sorted(self._index.offsets()) + last_offset = len(self._pack.data()) - self._pack.footer_size + assert offsets_sorted, "Cannot handle empty indices" + + offset_map = None + if len(offsets_sorted) == 1: + offset_map = { offsets_sorted[0] : last_offset } + else: + iter_offsets = iter(offsets_sorted) + iter_offsets_plus_one = iter(offsets_sorted) + iter_offsets_plus_one.next() + consecutive = izip(iter_offsets, iter_offsets_plus_one) + + offset_map = dict(consecutive) + + # the last offset is not yet set + offset_map[offsets_sorted[-1]] = last_offset + # END handle offset amount + self._offset_map = offset_map + + def _sha_to_index(self, sha): + """:return: index for the given sha, or raise""" + index = self._index.sha_to_index(sha) + if index is None: + raise BadObject(sha) + return index + + def _iter_objects(self, as_stream): + """Iterate over all objects in our index and yield their OInfo or OStream instences""" + _sha = self._index.sha + _object = self._object + for index in xrange(self._index.size()): + yield _object(_sha(index), as_stream, index) + # END for each index + + def _object(self, sha, as_stream, index=-1): + """:return: OInfo or OStream object providing information about the given sha + :param index: if not -1, its assumed to be the sha's index in the IndexFile""" + # its a little bit redundant here, but it needs to be efficient + if index < 0: + index = self._sha_to_index(sha) + if sha is None: + sha = self._index.sha(index) + # END assure sha is present ( in output ) + offset = self._index.offset(index) + type_id, uncomp_size, data_rela_offset = pack_object_header_info(self._pack._cursor.use_region(offset).buffer()) + if as_stream: + if type_id not in delta_types: + packstream = self._pack.stream(offset) + return OStream(sha, packstream.type, packstream.size, packstream.stream) + # END handle non-deltas + + # produce a delta stream containing all info + # To prevent it from applying the deltas when querying the size, + # we extract it from the delta stream ourselves + streams = self.collect_streams_at_offset(offset) + dstream = DeltaApplyReader.new(streams) + + return ODeltaStream(sha, dstream.type, None, dstream) + else: + if type_id not in delta_types: + return OInfo(sha, type_id_to_type_map[type_id], uncomp_size) + # END handle non-deltas + + # deltas are a little tougher - unpack the first bytes to obtain + # the actual target size, as opposed to the size of the delta data + streams = self.collect_streams_at_offset(offset) + buf = streams[0].read(512) + offset, src_size = msb_size(buf) + offset, target_size = msb_size(buf, offset) + + # collect the streams to obtain the actual object type + if streams[-1].type_id in delta_types: + raise BadObject(sha, "Could not resolve delta object") + return OInfo(sha, streams[-1].type, target_size) + # END handle stream + + #{ Read-Database like Interface + + def info(self, sha): + """Retrieve information about the object identified by the given sha + + :param sha: 20 byte sha1 + :raise BadObject: + :return: OInfo instance, with 20 byte sha""" + return self._object(sha, False) + + def stream(self, sha): + """Retrieve an object stream along with its information as identified by the given sha + + :param sha: 20 byte sha1 + :raise BadObject: + :return: OStream instance, with 20 byte sha""" + return self._object(sha, True) - def info_at_index(self, index): - """As ``info``, but uses a PackIndexFile compatible index to refer to the object""" - return self._object(None, False, index) - - def stream_at_index(self, index): - """As ``stream``, but uses a PackIndexFile compatible index to refer to the - object""" - return self._object(None, True, index) - - #} END Read-Database like Interface - - #{ Interface + def info_at_index(self, index): + """As ``info``, but uses a PackIndexFile compatible index to refer to the object""" + return self._object(None, False, index) + + def stream_at_index(self, index): + """As ``stream``, but uses a PackIndexFile compatible index to refer to the + object""" + return self._object(None, True, index) + + #} END Read-Database like Interface + + #{ Interface - def pack(self): - """:return: the underlying pack file instance""" - return self._pack - - def index(self): - """:return: the underlying pack index file instance""" - return self._index - - def is_valid_stream(self, sha, use_crc=False): - """ - Verify that the stream at the given sha is valid. - - :param use_crc: if True, the index' crc is run over the compressed stream of - the object, which is much faster than checking the sha1. It is also - more prone to unnoticed corruption or manipulation. - :param sha: 20 byte sha1 of the object whose stream to verify - whether the compressed stream of the object is valid. If it is - a delta, this only verifies that the delta's data is valid, not the - data of the actual undeltified object, as it depends on more than - just this stream. - If False, the object will be decompressed and the sha generated. It must - match the given sha - - :return: True if the stream is valid - :raise UnsupportedOperation: If the index is version 1 only - :raise BadObject: sha was not found""" - if use_crc: - if self._index.version() < 2: - raise UnsupportedOperation("Version 1 indices do not contain crc's, verify by sha instead") - # END handle index version - - index = self._sha_to_index(sha) - offset = self._index.offset(index) - next_offset = self._offset_map[offset] - crc_value = self._index.crc(index) - - # create the current crc value, on the compressed object data - # Read it in chunks, without copying the data - crc_update = zlib.crc32 - pack_data = self._pack.data() - cur_pos = offset - this_crc_value = 0 - while cur_pos < next_offset: - rbound = min(cur_pos + chunk_size, next_offset) - size = rbound - cur_pos - this_crc_value = crc_update(buffer(pack_data, cur_pos, size), this_crc_value) - cur_pos += size - # END window size loop - - # crc returns signed 32 bit numbers, the AND op forces it into unsigned - # mode ... wow, sneaky, from dulwich. - return (this_crc_value & 0xffffffff) == crc_value - else: - shawriter = Sha1Writer() - stream = self._object(sha, as_stream=True) - # write a loose object, which is the basis for the sha - write_object(stream.type, stream.size, stream.read, shawriter.write) - - assert shawriter.sha(as_hex=False) == sha - return shawriter.sha(as_hex=False) == sha - # END handle crc/sha verification - return True + def pack(self): + """:return: the underlying pack file instance""" + return self._pack + + def index(self): + """:return: the underlying pack index file instance""" + return self._index + + def is_valid_stream(self, sha, use_crc=False): + """ + Verify that the stream at the given sha is valid. + + :param use_crc: if True, the index' crc is run over the compressed stream of + the object, which is much faster than checking the sha1. It is also + more prone to unnoticed corruption or manipulation. + :param sha: 20 byte sha1 of the object whose stream to verify + whether the compressed stream of the object is valid. If it is + a delta, this only verifies that the delta's data is valid, not the + data of the actual undeltified object, as it depends on more than + just this stream. + If False, the object will be decompressed and the sha generated. It must + match the given sha + + :return: True if the stream is valid + :raise UnsupportedOperation: If the index is version 1 only + :raise BadObject: sha was not found""" + if use_crc: + if self._index.version() < 2: + raise UnsupportedOperation("Version 1 indices do not contain crc's, verify by sha instead") + # END handle index version + + index = self._sha_to_index(sha) + offset = self._index.offset(index) + next_offset = self._offset_map[offset] + crc_value = self._index.crc(index) + + # create the current crc value, on the compressed object data + # Read it in chunks, without copying the data + crc_update = zlib.crc32 + pack_data = self._pack.data() + cur_pos = offset + this_crc_value = 0 + while cur_pos < next_offset: + rbound = min(cur_pos + chunk_size, next_offset) + size = rbound - cur_pos + this_crc_value = crc_update(buffer(pack_data, cur_pos, size), this_crc_value) + cur_pos += size + # END window size loop + + # crc returns signed 32 bit numbers, the AND op forces it into unsigned + # mode ... wow, sneaky, from dulwich. + return (this_crc_value & 0xffffffff) == crc_value + else: + shawriter = Sha1Writer() + stream = self._object(sha, as_stream=True) + # write a loose object, which is the basis for the sha + write_object(stream.type, stream.size, stream.read, shawriter.write) + + assert shawriter.sha(as_hex=False) == sha + return shawriter.sha(as_hex=False) == sha + # END handle crc/sha verification + return True - def info_iter(self): - """ - :return: Iterator over all objects in this pack. The iterator yields - OInfo instances""" - return self._iter_objects(as_stream=False) - - def stream_iter(self): - """ - :return: iterator over all objects in this pack. The iterator yields - OStream instances""" - return self._iter_objects(as_stream=True) - - def collect_streams_at_offset(self, offset): - """ - As the version in the PackFile, but can resolve REF deltas within this pack - For more info, see ``collect_streams`` - - :param offset: offset into the pack file at which the object can be found""" - streams = self._pack.collect_streams(offset) - - # try to resolve the last one if needed. It is assumed to be either - # a REF delta, or a base object, as OFFSET deltas are resolved by the pack - if streams[-1].type_id == REF_DELTA: - stream = streams[-1] - while stream.type_id in delta_types: - if stream.type_id == REF_DELTA: - sindex = self._index.sha_to_index(stream.delta_info) - if sindex is None: - break - stream = self._pack.stream(self._index.offset(sindex)) - streams.append(stream) - else: - # must be another OFS DELTA - this could happen if a REF - # delta we resolve previously points to an OFS delta. Who - # would do that ;) ? We can handle it though - stream = self._pack.stream(stream.delta_info) - streams.append(stream) - # END handle ref delta - # END resolve ref streams - # END resolve streams - - return streams - - def collect_streams(self, sha): - """ - As ``PackFile.collect_streams``, but takes a sha instead of an offset. - Additionally, ref_delta streams will be resolved within this pack. - If this is not possible, the stream will be left alone, hence it is adivsed - to check for unresolved ref-deltas and resolve them before attempting to - construct a delta stream. - - :param sha: 20 byte sha1 specifying the object whose related streams you want to collect - :return: list of streams, first being the actual object delta, the last being - a possibly unresolved base object. - :raise BadObject:""" - return self.collect_streams_at_offset(self._index.offset(self._sha_to_index(sha))) - - - @classmethod - def write_pack(cls, object_iter, pack_write, index_write=None, - object_count = None, zlib_compression = zlib.Z_BEST_SPEED): - """ - Create a new pack by putting all objects obtained by the object_iterator - into a pack which is written using the pack_write method. - The respective index is produced as well if index_write is not Non. - - :param object_iter: iterator yielding odb output objects - :param pack_write: function to receive strings to write into the pack stream - :param indx_write: if not None, the function writes the index file corresponding - to the pack. - :param object_count: if you can provide the amount of objects in your iteration, - this would be the place to put it. Otherwise we have to pre-iterate and store - all items into a list to get the number, which uses more memory than necessary. - :param zlib_compression: the zlib compression level to use - :return: tuple(pack_sha, index_binsha) binary sha over all the contents of the pack - and over all contents of the index. If index_write was None, index_binsha will be None - - **Note:** The destination of the write functions is up to the user. It could - be a socket, or a file for instance - - **Note:** writes only undeltified objects""" - objs = object_iter - if not object_count: - if not isinstance(object_iter, (tuple, list)): - objs = list(object_iter) - #END handle list type - object_count = len(objs) - #END handle object - - pack_writer = FlexibleSha1Writer(pack_write) - pwrite = pack_writer.write - ofs = 0 # current offset into the pack file - index = None - wants_index = index_write is not None - - # write header - pwrite(pack('>LLL', PackFile.pack_signature, PackFile.pack_version_default, object_count)) - ofs += 12 - - if wants_index: - index = IndexWriter() - #END handle index header - - actual_count = 0 - for obj in objs: - actual_count += 1 - crc = 0 - - # object header - hdr = create_pack_object_header(obj.type_id, obj.size) - if index_write: - crc = crc32(hdr) - else: - crc = None - #END handle crc - pwrite(hdr) - - # data stream - zstream = zlib.compressobj(zlib_compression) - ostream = obj.stream - br, bw, crc = write_stream_to_pack(ostream.read, pwrite, zstream, base_crc = crc) - assert(br == obj.size) - if wants_index: - index.append(obj.binsha, crc, ofs) - #END handle index - - ofs += len(hdr) + bw - if actual_count == object_count: - break - #END abort once we are done - #END for each object - - if actual_count != object_count: - raise ValueError("Expected to write %i objects into pack, but received only %i from iterators" % (object_count, actual_count)) - #END count assertion - - # write footer - pack_sha = pack_writer.sha(as_hex = False) - assert len(pack_sha) == 20 - pack_write(pack_sha) - ofs += len(pack_sha) # just for completeness ;) - - index_sha = None - if wants_index: - index_sha = index.write(pack_sha, index_write) - #END handle index - - return pack_sha, index_sha - - @classmethod - def create(cls, object_iter, base_dir, object_count = None, zlib_compression = zlib.Z_BEST_SPEED): - """Create a new on-disk entity comprised of a properly named pack file and a properly named - and corresponding index file. The pack contains all OStream objects contained in object iter. - :param base_dir: directory which is to contain the files - :return: PackEntity instance initialized with the new pack - - **Note:** for more information on the other parameters see the write_pack method""" - pack_fd, pack_path = tempfile.mkstemp('', 'pack', base_dir) - index_fd, index_path = tempfile.mkstemp('', 'index', base_dir) - pack_write = lambda d: os.write(pack_fd, d) - index_write = lambda d: os.write(index_fd, d) - - pack_binsha, index_binsha = cls.write_pack(object_iter, pack_write, index_write, object_count, zlib_compression) - os.close(pack_fd) - os.close(index_fd) - - fmt = "pack-%s.%s" - new_pack_path = os.path.join(base_dir, fmt % (bin_to_hex(pack_binsha), 'pack')) - new_index_path = os.path.join(base_dir, fmt % (bin_to_hex(pack_binsha), 'idx')) - os.rename(pack_path, new_pack_path) - os.rename(index_path, new_index_path) - - return cls(new_pack_path) - - - #} END interface + def info_iter(self): + """ + :return: Iterator over all objects in this pack. The iterator yields + OInfo instances""" + return self._iter_objects(as_stream=False) + + def stream_iter(self): + """ + :return: iterator over all objects in this pack. The iterator yields + OStream instances""" + return self._iter_objects(as_stream=True) + + def collect_streams_at_offset(self, offset): + """ + As the version in the PackFile, but can resolve REF deltas within this pack + For more info, see ``collect_streams`` + + :param offset: offset into the pack file at which the object can be found""" + streams = self._pack.collect_streams(offset) + + # try to resolve the last one if needed. It is assumed to be either + # a REF delta, or a base object, as OFFSET deltas are resolved by the pack + if streams[-1].type_id == REF_DELTA: + stream = streams[-1] + while stream.type_id in delta_types: + if stream.type_id == REF_DELTA: + sindex = self._index.sha_to_index(stream.delta_info) + if sindex is None: + break + stream = self._pack.stream(self._index.offset(sindex)) + streams.append(stream) + else: + # must be another OFS DELTA - this could happen if a REF + # delta we resolve previously points to an OFS delta. Who + # would do that ;) ? We can handle it though + stream = self._pack.stream(stream.delta_info) + streams.append(stream) + # END handle ref delta + # END resolve ref streams + # END resolve streams + + return streams + + def collect_streams(self, sha): + """ + As ``PackFile.collect_streams``, but takes a sha instead of an offset. + Additionally, ref_delta streams will be resolved within this pack. + If this is not possible, the stream will be left alone, hence it is adivsed + to check for unresolved ref-deltas and resolve them before attempting to + construct a delta stream. + + :param sha: 20 byte sha1 specifying the object whose related streams you want to collect + :return: list of streams, first being the actual object delta, the last being + a possibly unresolved base object. + :raise BadObject:""" + return self.collect_streams_at_offset(self._index.offset(self._sha_to_index(sha))) + + + @classmethod + def write_pack(cls, object_iter, pack_write, index_write=None, + object_count = None, zlib_compression = zlib.Z_BEST_SPEED): + """ + Create a new pack by putting all objects obtained by the object_iterator + into a pack which is written using the pack_write method. + The respective index is produced as well if index_write is not Non. + + :param object_iter: iterator yielding odb output objects + :param pack_write: function to receive strings to write into the pack stream + :param indx_write: if not None, the function writes the index file corresponding + to the pack. + :param object_count: if you can provide the amount of objects in your iteration, + this would be the place to put it. Otherwise we have to pre-iterate and store + all items into a list to get the number, which uses more memory than necessary. + :param zlib_compression: the zlib compression level to use + :return: tuple(pack_sha, index_binsha) binary sha over all the contents of the pack + and over all contents of the index. If index_write was None, index_binsha will be None + + **Note:** The destination of the write functions is up to the user. It could + be a socket, or a file for instance + + **Note:** writes only undeltified objects""" + objs = object_iter + if not object_count: + if not isinstance(object_iter, (tuple, list)): + objs = list(object_iter) + #END handle list type + object_count = len(objs) + #END handle object + + pack_writer = FlexibleSha1Writer(pack_write) + pwrite = pack_writer.write + ofs = 0 # current offset into the pack file + index = None + wants_index = index_write is not None + + # write header + pwrite(pack('>LLL', PackFile.pack_signature, PackFile.pack_version_default, object_count)) + ofs += 12 + + if wants_index: + index = IndexWriter() + #END handle index header + + actual_count = 0 + for obj in objs: + actual_count += 1 + crc = 0 + + # object header + hdr = create_pack_object_header(obj.type_id, obj.size) + if index_write: + crc = crc32(hdr) + else: + crc = None + #END handle crc + pwrite(hdr) + + # data stream + zstream = zlib.compressobj(zlib_compression) + ostream = obj.stream + br, bw, crc = write_stream_to_pack(ostream.read, pwrite, zstream, base_crc = crc) + assert(br == obj.size) + if wants_index: + index.append(obj.binsha, crc, ofs) + #END handle index + + ofs += len(hdr) + bw + if actual_count == object_count: + break + #END abort once we are done + #END for each object + + if actual_count != object_count: + raise ValueError("Expected to write %i objects into pack, but received only %i from iterators" % (object_count, actual_count)) + #END count assertion + + # write footer + pack_sha = pack_writer.sha(as_hex = False) + assert len(pack_sha) == 20 + pack_write(pack_sha) + ofs += len(pack_sha) # just for completeness ;) + + index_sha = None + if wants_index: + index_sha = index.write(pack_sha, index_write) + #END handle index + + return pack_sha, index_sha + + @classmethod + def create(cls, object_iter, base_dir, object_count = None, zlib_compression = zlib.Z_BEST_SPEED): + """Create a new on-disk entity comprised of a properly named pack file and a properly named + and corresponding index file. The pack contains all OStream objects contained in object iter. + :param base_dir: directory which is to contain the files + :return: PackEntity instance initialized with the new pack + + **Note:** for more information on the other parameters see the write_pack method""" + pack_fd, pack_path = tempfile.mkstemp('', 'pack', base_dir) + index_fd, index_path = tempfile.mkstemp('', 'index', base_dir) + pack_write = lambda d: os.write(pack_fd, d) + index_write = lambda d: os.write(index_fd, d) + + pack_binsha, index_binsha = cls.write_pack(object_iter, pack_write, index_write, object_count, zlib_compression) + os.close(pack_fd) + os.close(index_fd) + + fmt = "pack-%s.%s" + new_pack_path = os.path.join(base_dir, fmt % (bin_to_hex(pack_binsha), 'pack')) + new_index_path = os.path.join(base_dir, fmt % (bin_to_hex(pack_binsha), 'idx')) + os.rename(pack_path, new_pack_path) + os.rename(index_path, new_index_path) + + return cls(new_pack_path) + + + #} END interface diff --git a/gitdb/stream.py b/gitdb/stream.py index 632213c27..6441b1e1a 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -9,684 +9,684 @@ import os from fun import ( - msb_size, - stream_copy, - apply_delta_data, - connect_deltas, - DeltaChunkList, - delta_types - ) + msb_size, + stream_copy, + apply_delta_data, + connect_deltas, + DeltaChunkList, + delta_types + ) from util import ( - allocate_memory, - LazyMixin, - make_sha, - write, - close, - zlib - ) + allocate_memory, + LazyMixin, + make_sha, + write, + close, + zlib + ) has_perf_mod = False try: - from _perf import apply_delta as c_apply_delta - has_perf_mod = True + from _perf import apply_delta as c_apply_delta + has_perf_mod = True except ImportError: - pass + pass -__all__ = ( 'DecompressMemMapReader', 'FDCompressedSha1Writer', 'DeltaApplyReader', - 'Sha1Writer', 'FlexibleSha1Writer', 'ZippedStoreShaWriter', 'FDCompressedSha1Writer', - 'FDStream', 'NullStream') +__all__ = ( 'DecompressMemMapReader', 'FDCompressedSha1Writer', 'DeltaApplyReader', + 'Sha1Writer', 'FlexibleSha1Writer', 'ZippedStoreShaWriter', 'FDCompressedSha1Writer', + 'FDStream', 'NullStream') #{ RO Streams class DecompressMemMapReader(LazyMixin): - """Reads data in chunks from a memory map and decompresses it. The client sees - only the uncompressed data, respective file-like read calls are handling on-demand - buffered decompression accordingly - - A constraint on the total size of bytes is activated, simulating - a logical file within a possibly larger physical memory area - - To read efficiently, you clearly don't want to read individual bytes, instead, - read a few kilobytes at least. - - **Note:** The chunk-size should be carefully selected as it will involve quite a bit - of string copying due to the way the zlib is implemented. Its very wasteful, - hence we try to find a good tradeoff between allocation time and number of - times we actually allocate. An own zlib implementation would be good here - to better support streamed reading - it would only need to keep the mmap - and decompress it into chunks, thats all ... """ - __slots__ = ('_m', '_zip', '_buf', '_buflen', '_br', '_cws', '_cwe', '_s', '_close', - '_cbr', '_phi') - - max_read_size = 512*1024 # currently unused - - def __init__(self, m, close_on_deletion, size=None): - """Initialize with mmap for stream reading - :param m: must be content data - use new if you have object data and no size""" - self._m = m - self._zip = zlib.decompressobj() - self._buf = None # buffer of decompressed bytes - self._buflen = 0 # length of bytes in buffer - if size is not None: - self._s = size # size of uncompressed data to read in total - self._br = 0 # num uncompressed bytes read - self._cws = 0 # start byte of compression window - self._cwe = 0 # end byte of compression window - self._cbr = 0 # number of compressed bytes read - self._phi = False # is True if we parsed the header info - self._close = close_on_deletion # close the memmap on deletion ? - - def _set_cache_(self, attr): - assert attr == '_s' - # only happens for size, which is a marker to indicate we still - # have to parse the header from the stream - self._parse_header_info() - - def __del__(self): - if self._close: - self._m.close() - # END handle resource freeing - - def _parse_header_info(self): - """If this stream contains object data, parse the header info and skip the - stream to a point where each read will yield object content - - :return: parsed type_string, size""" - # read header - maxb = 512 # should really be enough, cgit uses 8192 I believe - self._s = maxb - hdr = self.read(maxb) - hdrend = hdr.find("\0") - type, size = hdr[:hdrend].split(" ") - size = int(size) - self._s = size - - # adjust internal state to match actual header length that we ignore - # The buffer will be depleted first on future reads - self._br = 0 - hdrend += 1 # count terminating \0 - self._buf = StringIO(hdr[hdrend:]) - self._buflen = len(hdr) - hdrend - - self._phi = True - - return type, size - - #{ Interface - - @classmethod - def new(self, m, close_on_deletion=False): - """Create a new DecompressMemMapReader instance for acting as a read-only stream - This method parses the object header from m and returns the parsed - type and size, as well as the created stream instance. - - :param m: memory map on which to oparate. It must be object data ( header + contents ) - :param close_on_deletion: if True, the memory map will be closed once we are - being deleted""" - inst = DecompressMemMapReader(m, close_on_deletion, 0) - type, size = inst._parse_header_info() - return type, size, inst - - def data(self): - """:return: random access compatible data we are working on""" - return self._m - - def compressed_bytes_read(self): - """ - :return: number of compressed bytes read. This includes the bytes it - took to decompress the header ( if there was one )""" - # ABSTRACT: When decompressing a byte stream, it can be that the first - # x bytes which were requested match the first x bytes in the loosely - # compressed datastream. This is the worst-case assumption that the reader - # does, it assumes that it will get at least X bytes from X compressed bytes - # in call cases. - # The caveat is that the object, according to our known uncompressed size, - # is already complete, but there are still some bytes left in the compressed - # stream that contribute to the amount of compressed bytes. - # How can we know that we are truly done, and have read all bytes we need - # to read ? - # Without help, we cannot know, as we need to obtain the status of the - # decompression. If it is not finished, we need to decompress more data - # until it is finished, to yield the actual number of compressed bytes - # belonging to the decompressed object - # We are using a custom zlib module for this, if its not present, - # we try to put in additional bytes up for decompression if feasible - # and check for the unused_data. - - # Only scrub the stream forward if we are officially done with the - # bytes we were to have. - if self._br == self._s and not self._zip.unused_data: - # manipulate the bytes-read to allow our own read method to coninute - # but keep the window at its current position - self._br = 0 - if hasattr(self._zip, 'status'): - while self._zip.status == zlib.Z_OK: - self.read(mmap.PAGESIZE) - # END scrub-loop custom zlib - else: - # pass in additional pages, until we have unused data - while not self._zip.unused_data and self._cbr != len(self._m): - self.read(mmap.PAGESIZE) - # END scrub-loop default zlib - # END handle stream scrubbing - - # reset bytes read, just to be sure - self._br = self._s - # END handle stream scrubbing - - # unused data ends up in the unconsumed tail, which was removed - # from the count already - return self._cbr - - #} END interface - - def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): - """Allows to reset the stream to restart reading - :raise ValueError: If offset and whence are not 0""" - if offset != 0 or whence != getattr(os, 'SEEK_SET', 0): - raise ValueError("Can only seek to position 0") - # END handle offset - - self._zip = zlib.decompressobj() - self._br = self._cws = self._cwe = self._cbr = 0 - if self._phi: - self._phi = False - del(self._s) # trigger header parsing on first access - # END skip header - - def read(self, size=-1): - if size < 1: - size = self._s - self._br - else: - size = min(size, self._s - self._br) - # END clamp size - - if size == 0: - return str() - # END handle depletion - - - # deplete the buffer, then just continue using the decompress object - # which has an own buffer. We just need this to transparently parse the - # header from the zlib stream - dat = str() - if self._buf: - if self._buflen >= size: - # have enough data - dat = self._buf.read(size) - self._buflen -= size - self._br += size - return dat - else: - dat = self._buf.read() # ouch, duplicates data - size -= self._buflen - self._br += self._buflen - - self._buflen = 0 - self._buf = None - # END handle buffer len - # END handle buffer - - # decompress some data - # Abstract: zlib needs to operate on chunks of our memory map ( which may - # be large ), as it will otherwise and always fill in the 'unconsumed_tail' - # attribute which possible reads our whole map to the end, forcing - # everything to be read from disk even though just a portion was requested. - # As this would be a nogo, we workaround it by passing only chunks of data, - # moving the window into the memory map along as we decompress, which keeps - # the tail smaller than our chunk-size. This causes 'only' the chunk to be - # copied once, and another copy of a part of it when it creates the unconsumed - # tail. We have to use it to hand in the appropriate amount of bytes durin g - # the next read. - tail = self._zip.unconsumed_tail - if tail: - # move the window, make it as large as size demands. For code-clarity, - # we just take the chunk from our map again instead of reusing the unconsumed - # tail. The latter one would safe some memory copying, but we could end up - # with not getting enough data uncompressed, so we had to sort that out as well. - # Now we just assume the worst case, hence the data is uncompressed and the window - # needs to be as large as the uncompressed bytes we want to read. - self._cws = self._cwe - len(tail) - self._cwe = self._cws + size - else: - cws = self._cws - self._cws = self._cwe - self._cwe = cws + size - # END handle tail - - - # if window is too small, make it larger so zip can decompress something - if self._cwe - self._cws < 8: - self._cwe = self._cws + 8 - # END adjust winsize - - # takes a slice, but doesn't copy the data, it says ... - indata = buffer(self._m, self._cws, self._cwe - self._cws) - - # get the actual window end to be sure we don't use it for computations - self._cwe = self._cws + len(indata) - dcompdat = self._zip.decompress(indata, size) - # update the amount of compressed bytes read - # We feed possibly overlapping chunks, which is why the unconsumed tail - # has to be taken into consideration, as well as the unused data - # if we hit the end of the stream - self._cbr += len(indata) - len(self._zip.unconsumed_tail) - self._br += len(dcompdat) - - if dat: - dcompdat = dat + dcompdat - # END prepend our cached data - - # it can happen, depending on the compression, that we get less bytes - # than ordered as it needs the final portion of the data as well. - # Recursively resolve that. - # Note: dcompdat can be empty even though we still appear to have bytes - # to read, if we are called by compressed_bytes_read - it manipulates - # us to empty the stream - if dcompdat and (len(dcompdat) - len(dat)) < size and self._br < self._s: - dcompdat += self.read(size-len(dcompdat)) - # END handle special case - return dcompdat - - + """Reads data in chunks from a memory map and decompresses it. The client sees + only the uncompressed data, respective file-like read calls are handling on-demand + buffered decompression accordingly + + A constraint on the total size of bytes is activated, simulating + a logical file within a possibly larger physical memory area + + To read efficiently, you clearly don't want to read individual bytes, instead, + read a few kilobytes at least. + + **Note:** The chunk-size should be carefully selected as it will involve quite a bit + of string copying due to the way the zlib is implemented. Its very wasteful, + hence we try to find a good tradeoff between allocation time and number of + times we actually allocate. An own zlib implementation would be good here + to better support streamed reading - it would only need to keep the mmap + and decompress it into chunks, thats all ... """ + __slots__ = ('_m', '_zip', '_buf', '_buflen', '_br', '_cws', '_cwe', '_s', '_close', + '_cbr', '_phi') + + max_read_size = 512*1024 # currently unused + + def __init__(self, m, close_on_deletion, size=None): + """Initialize with mmap for stream reading + :param m: must be content data - use new if you have object data and no size""" + self._m = m + self._zip = zlib.decompressobj() + self._buf = None # buffer of decompressed bytes + self._buflen = 0 # length of bytes in buffer + if size is not None: + self._s = size # size of uncompressed data to read in total + self._br = 0 # num uncompressed bytes read + self._cws = 0 # start byte of compression window + self._cwe = 0 # end byte of compression window + self._cbr = 0 # number of compressed bytes read + self._phi = False # is True if we parsed the header info + self._close = close_on_deletion # close the memmap on deletion ? + + def _set_cache_(self, attr): + assert attr == '_s' + # only happens for size, which is a marker to indicate we still + # have to parse the header from the stream + self._parse_header_info() + + def __del__(self): + if self._close: + self._m.close() + # END handle resource freeing + + def _parse_header_info(self): + """If this stream contains object data, parse the header info and skip the + stream to a point where each read will yield object content + + :return: parsed type_string, size""" + # read header + maxb = 512 # should really be enough, cgit uses 8192 I believe + self._s = maxb + hdr = self.read(maxb) + hdrend = hdr.find("\0") + type, size = hdr[:hdrend].split(" ") + size = int(size) + self._s = size + + # adjust internal state to match actual header length that we ignore + # The buffer will be depleted first on future reads + self._br = 0 + hdrend += 1 # count terminating \0 + self._buf = StringIO(hdr[hdrend:]) + self._buflen = len(hdr) - hdrend + + self._phi = True + + return type, size + + #{ Interface + + @classmethod + def new(self, m, close_on_deletion=False): + """Create a new DecompressMemMapReader instance for acting as a read-only stream + This method parses the object header from m and returns the parsed + type and size, as well as the created stream instance. + + :param m: memory map on which to oparate. It must be object data ( header + contents ) + :param close_on_deletion: if True, the memory map will be closed once we are + being deleted""" + inst = DecompressMemMapReader(m, close_on_deletion, 0) + type, size = inst._parse_header_info() + return type, size, inst + + def data(self): + """:return: random access compatible data we are working on""" + return self._m + + def compressed_bytes_read(self): + """ + :return: number of compressed bytes read. This includes the bytes it + took to decompress the header ( if there was one )""" + # ABSTRACT: When decompressing a byte stream, it can be that the first + # x bytes which were requested match the first x bytes in the loosely + # compressed datastream. This is the worst-case assumption that the reader + # does, it assumes that it will get at least X bytes from X compressed bytes + # in call cases. + # The caveat is that the object, according to our known uncompressed size, + # is already complete, but there are still some bytes left in the compressed + # stream that contribute to the amount of compressed bytes. + # How can we know that we are truly done, and have read all bytes we need + # to read ? + # Without help, we cannot know, as we need to obtain the status of the + # decompression. If it is not finished, we need to decompress more data + # until it is finished, to yield the actual number of compressed bytes + # belonging to the decompressed object + # We are using a custom zlib module for this, if its not present, + # we try to put in additional bytes up for decompression if feasible + # and check for the unused_data. + + # Only scrub the stream forward if we are officially done with the + # bytes we were to have. + if self._br == self._s and not self._zip.unused_data: + # manipulate the bytes-read to allow our own read method to coninute + # but keep the window at its current position + self._br = 0 + if hasattr(self._zip, 'status'): + while self._zip.status == zlib.Z_OK: + self.read(mmap.PAGESIZE) + # END scrub-loop custom zlib + else: + # pass in additional pages, until we have unused data + while not self._zip.unused_data and self._cbr != len(self._m): + self.read(mmap.PAGESIZE) + # END scrub-loop default zlib + # END handle stream scrubbing + + # reset bytes read, just to be sure + self._br = self._s + # END handle stream scrubbing + + # unused data ends up in the unconsumed tail, which was removed + # from the count already + return self._cbr + + #} END interface + + def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): + """Allows to reset the stream to restart reading + :raise ValueError: If offset and whence are not 0""" + if offset != 0 or whence != getattr(os, 'SEEK_SET', 0): + raise ValueError("Can only seek to position 0") + # END handle offset + + self._zip = zlib.decompressobj() + self._br = self._cws = self._cwe = self._cbr = 0 + if self._phi: + self._phi = False + del(self._s) # trigger header parsing on first access + # END skip header + + def read(self, size=-1): + if size < 1: + size = self._s - self._br + else: + size = min(size, self._s - self._br) + # END clamp size + + if size == 0: + return str() + # END handle depletion + + + # deplete the buffer, then just continue using the decompress object + # which has an own buffer. We just need this to transparently parse the + # header from the zlib stream + dat = str() + if self._buf: + if self._buflen >= size: + # have enough data + dat = self._buf.read(size) + self._buflen -= size + self._br += size + return dat + else: + dat = self._buf.read() # ouch, duplicates data + size -= self._buflen + self._br += self._buflen + + self._buflen = 0 + self._buf = None + # END handle buffer len + # END handle buffer + + # decompress some data + # Abstract: zlib needs to operate on chunks of our memory map ( which may + # be large ), as it will otherwise and always fill in the 'unconsumed_tail' + # attribute which possible reads our whole map to the end, forcing + # everything to be read from disk even though just a portion was requested. + # As this would be a nogo, we workaround it by passing only chunks of data, + # moving the window into the memory map along as we decompress, which keeps + # the tail smaller than our chunk-size. This causes 'only' the chunk to be + # copied once, and another copy of a part of it when it creates the unconsumed + # tail. We have to use it to hand in the appropriate amount of bytes durin g + # the next read. + tail = self._zip.unconsumed_tail + if tail: + # move the window, make it as large as size demands. For code-clarity, + # we just take the chunk from our map again instead of reusing the unconsumed + # tail. The latter one would safe some memory copying, but we could end up + # with not getting enough data uncompressed, so we had to sort that out as well. + # Now we just assume the worst case, hence the data is uncompressed and the window + # needs to be as large as the uncompressed bytes we want to read. + self._cws = self._cwe - len(tail) + self._cwe = self._cws + size + else: + cws = self._cws + self._cws = self._cwe + self._cwe = cws + size + # END handle tail + + + # if window is too small, make it larger so zip can decompress something + if self._cwe - self._cws < 8: + self._cwe = self._cws + 8 + # END adjust winsize + + # takes a slice, but doesn't copy the data, it says ... + indata = buffer(self._m, self._cws, self._cwe - self._cws) + + # get the actual window end to be sure we don't use it for computations + self._cwe = self._cws + len(indata) + dcompdat = self._zip.decompress(indata, size) + # update the amount of compressed bytes read + # We feed possibly overlapping chunks, which is why the unconsumed tail + # has to be taken into consideration, as well as the unused data + # if we hit the end of the stream + self._cbr += len(indata) - len(self._zip.unconsumed_tail) + self._br += len(dcompdat) + + if dat: + dcompdat = dat + dcompdat + # END prepend our cached data + + # it can happen, depending on the compression, that we get less bytes + # than ordered as it needs the final portion of the data as well. + # Recursively resolve that. + # Note: dcompdat can be empty even though we still appear to have bytes + # to read, if we are called by compressed_bytes_read - it manipulates + # us to empty the stream + if dcompdat and (len(dcompdat) - len(dat)) < size and self._br < self._s: + dcompdat += self.read(size-len(dcompdat)) + # END handle special case + return dcompdat + + class DeltaApplyReader(LazyMixin): - """A reader which dynamically applies pack deltas to a base object, keeping the - memory demands to a minimum. - - The size of the final object is only obtainable once all deltas have been - applied, unless it is retrieved from a pack index. - - The uncompressed Delta has the following layout (MSB being a most significant - bit encoded dynamic size): - - * MSB Source Size - the size of the base against which the delta was created - * MSB Target Size - the size of the resulting data after the delta was applied - * A list of one byte commands (cmd) which are followed by a specific protocol: - - * cmd & 0x80 - copy delta_data[offset:offset+size] - - * Followed by an encoded offset into the delta data - * Followed by an encoded size of the chunk to copy - - * cmd & 0x7f - insert - - * insert cmd bytes from the delta buffer into the output stream - - * cmd == 0 - invalid operation ( or error in delta stream ) - """ - __slots__ = ( - "_bstream", # base stream to which to apply the deltas - "_dstreams", # tuple of delta stream readers - "_mm_target", # memory map of the delta-applied data - "_size", # actual number of bytes in _mm_target - "_br" # number of bytes read - ) - - #{ Configuration - k_max_memory_move = 250*1000*1000 - #} END configuration - - def __init__(self, stream_list): - """Initialize this instance with a list of streams, the first stream being - the delta to apply on top of all following deltas, the last stream being the - base object onto which to apply the deltas""" - assert len(stream_list) > 1, "Need at least one delta and one base stream" - - self._bstream = stream_list[-1] - self._dstreams = tuple(stream_list[:-1]) - self._br = 0 - - def _set_cache_too_slow_without_c(self, attr): - # the direct algorithm is fastest and most direct if there is only one - # delta. Also, the extra overhead might not be worth it for items smaller - # than X - definitely the case in python, every function call costs - # huge amounts of time - # if len(self._dstreams) * self._bstream.size < self.k_max_memory_move: - if len(self._dstreams) == 1: - return self._set_cache_brute_(attr) - - # Aggregate all deltas into one delta in reverse order. Hence we take - # the last delta, and reverse-merge its ancestor delta, until we receive - # the final delta data stream. - # print "Handling %i delta streams, sizes: %s" % (len(self._dstreams), [ds.size for ds in self._dstreams]) - dcl = connect_deltas(self._dstreams) - - # call len directly, as the (optional) c version doesn't implement the sequence - # protocol - if dcl.rbound() == 0: - self._size = 0 - self._mm_target = allocate_memory(0) - return - # END handle empty list - - self._size = dcl.rbound() - self._mm_target = allocate_memory(self._size) - - bbuf = allocate_memory(self._bstream.size) - stream_copy(self._bstream.read, bbuf.write, self._bstream.size, 256 * mmap.PAGESIZE) - - # APPLY CHUNKS - write = self._mm_target.write - dcl.apply(bbuf, write) - - self._mm_target.seek(0) - - def _set_cache_brute_(self, attr): - """If we are here, we apply the actual deltas""" - - # TODO: There should be a special case if there is only one stream - # Then the default-git algorithm should perform a tad faster, as the - # delta is not peaked into, causing less overhead. - buffer_info_list = list() - max_target_size = 0 - for dstream in self._dstreams: - buf = dstream.read(512) # read the header information + X - offset, src_size = msb_size(buf) - offset, target_size = msb_size(buf, offset) - buffer_info_list.append((buffer(buf, offset), offset, src_size, target_size)) - max_target_size = max(max_target_size, target_size) - # END for each delta stream - - # sanity check - the first delta to apply should have the same source - # size as our actual base stream - base_size = self._bstream.size - target_size = max_target_size - - # if we have more than 1 delta to apply, we will swap buffers, hence we must - # assure that all buffers we use are large enough to hold all the results - if len(self._dstreams) > 1: - base_size = target_size = max(base_size, max_target_size) - # END adjust buffer sizes - - - # Allocate private memory map big enough to hold the first base buffer - # We need random access to it - bbuf = allocate_memory(base_size) - stream_copy(self._bstream.read, bbuf.write, base_size, 256 * mmap.PAGESIZE) - - # allocate memory map large enough for the largest (intermediate) target - # We will use it as scratch space for all delta ops. If the final - # target buffer is smaller than our allocated space, we just use parts - # of it upon return. - tbuf = allocate_memory(target_size) - - # for each delta to apply, memory map the decompressed delta and - # work on the op-codes to reconstruct everything. - # For the actual copying, we use a seek and write pattern of buffer - # slices. - final_target_size = None - for (dbuf, offset, src_size, target_size), dstream in reversed(zip(buffer_info_list, self._dstreams)): - # allocate a buffer to hold all delta data - fill in the data for - # fast access. We do this as we know that reading individual bytes - # from our stream would be slower than necessary ( although possible ) - # The dbuf buffer contains commands after the first two MSB sizes, the - # offset specifies the amount of bytes read to get the sizes. - ddata = allocate_memory(dstream.size - offset) - ddata.write(dbuf) - # read the rest from the stream. The size we give is larger than necessary - stream_copy(dstream.read, ddata.write, dstream.size, 256*mmap.PAGESIZE) - - ####################################################################### - if 'c_apply_delta' in globals(): - c_apply_delta(bbuf, ddata, tbuf); - else: - apply_delta_data(bbuf, src_size, ddata, len(ddata), tbuf.write) - ####################################################################### - - # finally, swap out source and target buffers. The target is now the - # base for the next delta to apply - bbuf, tbuf = tbuf, bbuf - bbuf.seek(0) - tbuf.seek(0) - final_target_size = target_size - # END for each delta to apply - - # its already seeked to 0, constrain it to the actual size - # NOTE: in the end of the loop, it swaps buffers, hence our target buffer - # is not tbuf, but bbuf ! - self._mm_target = bbuf - self._size = final_target_size - - - #{ Configuration - if not has_perf_mod: - _set_cache_ = _set_cache_brute_ - else: - _set_cache_ = _set_cache_too_slow_without_c - - #} END configuration - - def read(self, count=0): - bl = self._size - self._br # bytes left - if count < 1 or count > bl: - count = bl - # NOTE: we could check for certain size limits, and possibly - # return buffers instead of strings to prevent byte copying - data = self._mm_target.read(count) - self._br += len(data) - return data - - def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): - """Allows to reset the stream to restart reading - - :raise ValueError: If offset and whence are not 0""" - if offset != 0 or whence != getattr(os, 'SEEK_SET', 0): - raise ValueError("Can only seek to position 0") - # END handle offset - self._br = 0 - self._mm_target.seek(0) - - #{ Interface - - @classmethod - def new(cls, stream_list): - """ - Convert the given list of streams into a stream which resolves deltas - when reading from it. - - :param stream_list: two or more stream objects, first stream is a Delta - to the object that you want to resolve, followed by N additional delta - streams. The list's last stream must be a non-delta stream. - - :return: Non-Delta OPackStream object whose stream can be used to obtain - the decompressed resolved data - :raise ValueError: if the stream list cannot be handled""" - if len(stream_list) < 2: - raise ValueError("Need at least two streams") - # END single object special handling - - if stream_list[-1].type_id in delta_types: - raise ValueError("Cannot resolve deltas if there is no base object stream, last one was type: %s" % stream_list[-1].type) - # END check stream - - return cls(stream_list) - - #} END interface - - - #{ OInfo like Interface - - @property - def type(self): - return self._bstream.type - - @property - def type_id(self): - return self._bstream.type_id - - @property - def size(self): - """:return: number of uncompressed bytes in the stream""" - return self._size - - #} END oinfo like interface - - + """A reader which dynamically applies pack deltas to a base object, keeping the + memory demands to a minimum. + + The size of the final object is only obtainable once all deltas have been + applied, unless it is retrieved from a pack index. + + The uncompressed Delta has the following layout (MSB being a most significant + bit encoded dynamic size): + + * MSB Source Size - the size of the base against which the delta was created + * MSB Target Size - the size of the resulting data after the delta was applied + * A list of one byte commands (cmd) which are followed by a specific protocol: + + * cmd & 0x80 - copy delta_data[offset:offset+size] + + * Followed by an encoded offset into the delta data + * Followed by an encoded size of the chunk to copy + + * cmd & 0x7f - insert + + * insert cmd bytes from the delta buffer into the output stream + + * cmd == 0 - invalid operation ( or error in delta stream ) + """ + __slots__ = ( + "_bstream", # base stream to which to apply the deltas + "_dstreams", # tuple of delta stream readers + "_mm_target", # memory map of the delta-applied data + "_size", # actual number of bytes in _mm_target + "_br" # number of bytes read + ) + + #{ Configuration + k_max_memory_move = 250*1000*1000 + #} END configuration + + def __init__(self, stream_list): + """Initialize this instance with a list of streams, the first stream being + the delta to apply on top of all following deltas, the last stream being the + base object onto which to apply the deltas""" + assert len(stream_list) > 1, "Need at least one delta and one base stream" + + self._bstream = stream_list[-1] + self._dstreams = tuple(stream_list[:-1]) + self._br = 0 + + def _set_cache_too_slow_without_c(self, attr): + # the direct algorithm is fastest and most direct if there is only one + # delta. Also, the extra overhead might not be worth it for items smaller + # than X - definitely the case in python, every function call costs + # huge amounts of time + # if len(self._dstreams) * self._bstream.size < self.k_max_memory_move: + if len(self._dstreams) == 1: + return self._set_cache_brute_(attr) + + # Aggregate all deltas into one delta in reverse order. Hence we take + # the last delta, and reverse-merge its ancestor delta, until we receive + # the final delta data stream. + # print "Handling %i delta streams, sizes: %s" % (len(self._dstreams), [ds.size for ds in self._dstreams]) + dcl = connect_deltas(self._dstreams) + + # call len directly, as the (optional) c version doesn't implement the sequence + # protocol + if dcl.rbound() == 0: + self._size = 0 + self._mm_target = allocate_memory(0) + return + # END handle empty list + + self._size = dcl.rbound() + self._mm_target = allocate_memory(self._size) + + bbuf = allocate_memory(self._bstream.size) + stream_copy(self._bstream.read, bbuf.write, self._bstream.size, 256 * mmap.PAGESIZE) + + # APPLY CHUNKS + write = self._mm_target.write + dcl.apply(bbuf, write) + + self._mm_target.seek(0) + + def _set_cache_brute_(self, attr): + """If we are here, we apply the actual deltas""" + + # TODO: There should be a special case if there is only one stream + # Then the default-git algorithm should perform a tad faster, as the + # delta is not peaked into, causing less overhead. + buffer_info_list = list() + max_target_size = 0 + for dstream in self._dstreams: + buf = dstream.read(512) # read the header information + X + offset, src_size = msb_size(buf) + offset, target_size = msb_size(buf, offset) + buffer_info_list.append((buffer(buf, offset), offset, src_size, target_size)) + max_target_size = max(max_target_size, target_size) + # END for each delta stream + + # sanity check - the first delta to apply should have the same source + # size as our actual base stream + base_size = self._bstream.size + target_size = max_target_size + + # if we have more than 1 delta to apply, we will swap buffers, hence we must + # assure that all buffers we use are large enough to hold all the results + if len(self._dstreams) > 1: + base_size = target_size = max(base_size, max_target_size) + # END adjust buffer sizes + + + # Allocate private memory map big enough to hold the first base buffer + # We need random access to it + bbuf = allocate_memory(base_size) + stream_copy(self._bstream.read, bbuf.write, base_size, 256 * mmap.PAGESIZE) + + # allocate memory map large enough for the largest (intermediate) target + # We will use it as scratch space for all delta ops. If the final + # target buffer is smaller than our allocated space, we just use parts + # of it upon return. + tbuf = allocate_memory(target_size) + + # for each delta to apply, memory map the decompressed delta and + # work on the op-codes to reconstruct everything. + # For the actual copying, we use a seek and write pattern of buffer + # slices. + final_target_size = None + for (dbuf, offset, src_size, target_size), dstream in reversed(zip(buffer_info_list, self._dstreams)): + # allocate a buffer to hold all delta data - fill in the data for + # fast access. We do this as we know that reading individual bytes + # from our stream would be slower than necessary ( although possible ) + # The dbuf buffer contains commands after the first two MSB sizes, the + # offset specifies the amount of bytes read to get the sizes. + ddata = allocate_memory(dstream.size - offset) + ddata.write(dbuf) + # read the rest from the stream. The size we give is larger than necessary + stream_copy(dstream.read, ddata.write, dstream.size, 256*mmap.PAGESIZE) + + ####################################################################### + if 'c_apply_delta' in globals(): + c_apply_delta(bbuf, ddata, tbuf); + else: + apply_delta_data(bbuf, src_size, ddata, len(ddata), tbuf.write) + ####################################################################### + + # finally, swap out source and target buffers. The target is now the + # base for the next delta to apply + bbuf, tbuf = tbuf, bbuf + bbuf.seek(0) + tbuf.seek(0) + final_target_size = target_size + # END for each delta to apply + + # its already seeked to 0, constrain it to the actual size + # NOTE: in the end of the loop, it swaps buffers, hence our target buffer + # is not tbuf, but bbuf ! + self._mm_target = bbuf + self._size = final_target_size + + + #{ Configuration + if not has_perf_mod: + _set_cache_ = _set_cache_brute_ + else: + _set_cache_ = _set_cache_too_slow_without_c + + #} END configuration + + def read(self, count=0): + bl = self._size - self._br # bytes left + if count < 1 or count > bl: + count = bl + # NOTE: we could check for certain size limits, and possibly + # return buffers instead of strings to prevent byte copying + data = self._mm_target.read(count) + self._br += len(data) + return data + + def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): + """Allows to reset the stream to restart reading + + :raise ValueError: If offset and whence are not 0""" + if offset != 0 or whence != getattr(os, 'SEEK_SET', 0): + raise ValueError("Can only seek to position 0") + # END handle offset + self._br = 0 + self._mm_target.seek(0) + + #{ Interface + + @classmethod + def new(cls, stream_list): + """ + Convert the given list of streams into a stream which resolves deltas + when reading from it. + + :param stream_list: two or more stream objects, first stream is a Delta + to the object that you want to resolve, followed by N additional delta + streams. The list's last stream must be a non-delta stream. + + :return: Non-Delta OPackStream object whose stream can be used to obtain + the decompressed resolved data + :raise ValueError: if the stream list cannot be handled""" + if len(stream_list) < 2: + raise ValueError("Need at least two streams") + # END single object special handling + + if stream_list[-1].type_id in delta_types: + raise ValueError("Cannot resolve deltas if there is no base object stream, last one was type: %s" % stream_list[-1].type) + # END check stream + + return cls(stream_list) + + #} END interface + + + #{ OInfo like Interface + + @property + def type(self): + return self._bstream.type + + @property + def type_id(self): + return self._bstream.type_id + + @property + def size(self): + """:return: number of uncompressed bytes in the stream""" + return self._size + + #} END oinfo like interface + + #} END RO streams #{ W Streams class Sha1Writer(object): - """Simple stream writer which produces a sha whenever you like as it degests - everything it is supposed to write""" - __slots__ = "sha1" - - def __init__(self): - self.sha1 = make_sha() - - #{ Stream Interface - - def write(self, data): - """:raise IOError: If not all bytes could be written - :return: lenght of incoming data""" - self.sha1.update(data) - return len(data) - - # END stream interface - - #{ Interface - - def sha(self, as_hex = False): - """:return: sha so far - :param as_hex: if True, sha will be hex-encoded, binary otherwise""" - if as_hex: - return self.sha1.hexdigest() - return self.sha1.digest() - - #} END interface + """Simple stream writer which produces a sha whenever you like as it degests + everything it is supposed to write""" + __slots__ = "sha1" + + def __init__(self): + self.sha1 = make_sha() + + #{ Stream Interface + + def write(self, data): + """:raise IOError: If not all bytes could be written + :return: lenght of incoming data""" + self.sha1.update(data) + return len(data) + + # END stream interface + + #{ Interface + + def sha(self, as_hex = False): + """:return: sha so far + :param as_hex: if True, sha will be hex-encoded, binary otherwise""" + if as_hex: + return self.sha1.hexdigest() + return self.sha1.digest() + + #} END interface class FlexibleSha1Writer(Sha1Writer): - """Writer producing a sha1 while passing on the written bytes to the given - write function""" - __slots__ = 'writer' - - def __init__(self, writer): - Sha1Writer.__init__(self) - self.writer = writer - - def write(self, data): - Sha1Writer.write(self, data) - self.writer(data) + """Writer producing a sha1 while passing on the written bytes to the given + write function""" + __slots__ = 'writer' + + def __init__(self, writer): + Sha1Writer.__init__(self) + self.writer = writer + + def write(self, data): + Sha1Writer.write(self, data) + self.writer(data) class ZippedStoreShaWriter(Sha1Writer): - """Remembers everything someone writes to it and generates a sha""" - __slots__ = ('buf', 'zip') - def __init__(self): - Sha1Writer.__init__(self) - self.buf = StringIO() - self.zip = zlib.compressobj(zlib.Z_BEST_SPEED) - - def __getattr__(self, attr): - return getattr(self.buf, attr) - - def write(self, data): - alen = Sha1Writer.write(self, data) - self.buf.write(self.zip.compress(data)) - return alen - - def close(self): - self.buf.write(self.zip.flush()) - - def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): - """Seeking currently only supports to rewind written data - Multiple writes are not supported""" - if offset != 0 or whence != getattr(os, 'SEEK_SET', 0): - raise ValueError("Can only seek to position 0") - # END handle offset - self.buf.seek(0) - - def getvalue(self): - """:return: string value from the current stream position to the end""" - return self.buf.getvalue() + """Remembers everything someone writes to it and generates a sha""" + __slots__ = ('buf', 'zip') + def __init__(self): + Sha1Writer.__init__(self) + self.buf = StringIO() + self.zip = zlib.compressobj(zlib.Z_BEST_SPEED) + + def __getattr__(self, attr): + return getattr(self.buf, attr) + + def write(self, data): + alen = Sha1Writer.write(self, data) + self.buf.write(self.zip.compress(data)) + return alen + + def close(self): + self.buf.write(self.zip.flush()) + + def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): + """Seeking currently only supports to rewind written data + Multiple writes are not supported""" + if offset != 0 or whence != getattr(os, 'SEEK_SET', 0): + raise ValueError("Can only seek to position 0") + # END handle offset + self.buf.seek(0) + + def getvalue(self): + """:return: string value from the current stream position to the end""" + return self.buf.getvalue() class FDCompressedSha1Writer(Sha1Writer): - """Digests data written to it, making the sha available, then compress the - data and write it to the file descriptor - - **Note:** operates on raw file descriptors - **Note:** for this to work, you have to use the close-method of this instance""" - __slots__ = ("fd", "sha1", "zip") - - # default exception - exc = IOError("Failed to write all bytes to filedescriptor") - - def __init__(self, fd): - super(FDCompressedSha1Writer, self).__init__() - self.fd = fd - self.zip = zlib.compressobj(zlib.Z_BEST_SPEED) - - #{ Stream Interface - - def write(self, data): - """:raise IOError: If not all bytes could be written - :return: lenght of incoming data""" - self.sha1.update(data) - cdata = self.zip.compress(data) - bytes_written = write(self.fd, cdata) - if bytes_written != len(cdata): - raise self.exc - return len(data) - - def close(self): - remainder = self.zip.flush() - if write(self.fd, remainder) != len(remainder): - raise self.exc - return close(self.fd) - - #} END stream interface + """Digests data written to it, making the sha available, then compress the + data and write it to the file descriptor + + **Note:** operates on raw file descriptors + **Note:** for this to work, you have to use the close-method of this instance""" + __slots__ = ("fd", "sha1", "zip") + + # default exception + exc = IOError("Failed to write all bytes to filedescriptor") + + def __init__(self, fd): + super(FDCompressedSha1Writer, self).__init__() + self.fd = fd + self.zip = zlib.compressobj(zlib.Z_BEST_SPEED) + + #{ Stream Interface + + def write(self, data): + """:raise IOError: If not all bytes could be written + :return: lenght of incoming data""" + self.sha1.update(data) + cdata = self.zip.compress(data) + bytes_written = write(self.fd, cdata) + if bytes_written != len(cdata): + raise self.exc + return len(data) + + def close(self): + remainder = self.zip.flush() + if write(self.fd, remainder) != len(remainder): + raise self.exc + return close(self.fd) + + #} END stream interface class FDStream(object): - """A simple wrapper providing the most basic functions on a file descriptor - with the fileobject interface. Cannot use os.fdopen as the resulting stream - takes ownership""" - __slots__ = ("_fd", '_pos') - def __init__(self, fd): - self._fd = fd - self._pos = 0 - - def write(self, data): - self._pos += len(data) - os.write(self._fd, data) - - def read(self, count=0): - if count == 0: - count = os.path.getsize(self._filepath) - # END handle read everything - - bytes = os.read(self._fd, count) - self._pos += len(bytes) - return bytes - - def fileno(self): - return self._fd - - def tell(self): - return self._pos - - def close(self): - close(self._fd) + """A simple wrapper providing the most basic functions on a file descriptor + with the fileobject interface. Cannot use os.fdopen as the resulting stream + takes ownership""" + __slots__ = ("_fd", '_pos') + def __init__(self, fd): + self._fd = fd + self._pos = 0 + + def write(self, data): + self._pos += len(data) + os.write(self._fd, data) + + def read(self, count=0): + if count == 0: + count = os.path.getsize(self._filepath) + # END handle read everything + + bytes = os.read(self._fd, count) + self._pos += len(bytes) + return bytes + + def fileno(self): + return self._fd + + def tell(self): + return self._pos + + def close(self): + close(self._fd) class NullStream(object): - """A stream that does nothing but providing a stream interface. - Use it like /dev/null""" - __slots__ = tuple() - - def read(self, size=0): - return '' - - def close(self): - pass - - def write(self, data): - return len(data) + """A stream that does nothing but providing a stream interface. + Use it like /dev/null""" + __slots__ = tuple() + + def read(self, size=0): + return '' + + def close(self): + pass + + def write(self, data): + return len(data) #} END W streams diff --git a/gitdb/test/__init__.py b/gitdb/test/__init__.py index 760f531be..f8059447f 100644 --- a/gitdb/test/__init__.py +++ b/gitdb/test/__init__.py @@ -7,10 +7,10 @@ #{ Initialization def _init_pool(): - """Assure the pool is actually threaded""" - size = 2 - print "Setting ThreadPool to %i" % size - gitdb.util.pool.set_size(size) + """Assure the pool is actually threaded""" + size = 2 + print "Setting ThreadPool to %i" % size + gitdb.util.pool.set_size(size) #} END initialization diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index 4af4483c7..62614ee5c 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -4,21 +4,21 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Base classes for object db testing""" from gitdb.test.lib import ( - with_rw_directory, - with_packs_rw, - ZippedStoreShaWriter, - fixture_path, - TestBase - ) + with_rw_directory, + with_packs_rw, + ZippedStoreShaWriter, + fixture_path, + TestBase + ) from gitdb.stream import Sha1Writer from gitdb.base import ( - IStream, - OStream, - OInfo - ) - + IStream, + OStream, + OInfo + ) + from gitdb.exc import BadObject from gitdb.typ import str_blob_type @@ -28,181 +28,181 @@ __all__ = ('TestDBBase', 'with_rw_directory', 'with_packs_rw', 'fixture_path') - + class TestDBBase(TestBase): - """Base class providing testing routines on databases""" - - # data - two_lines = "1234\nhello world" - all_data = (two_lines, ) - - def _assert_object_writing_simple(self, db): - # write a bunch of objects and query their streams and info - null_objs = db.size() - ni = 250 - for i in xrange(ni): - data = pack(">L", i) - istream = IStream(str_blob_type, len(data), StringIO(data)) - new_istream = db.store(istream) - assert new_istream is istream - assert db.has_object(istream.binsha) - - info = db.info(istream.binsha) - assert isinstance(info, OInfo) - assert info.type == istream.type and info.size == istream.size - - stream = db.stream(istream.binsha) - assert isinstance(stream, OStream) - assert stream.binsha == info.binsha and stream.type == info.type - assert stream.read() == data - # END for each item - - assert db.size() == null_objs + ni - shas = list(db.sha_iter()) - assert len(shas) == db.size() - assert len(shas[0]) == 20 - - - def _assert_object_writing(self, db): - """General tests to verify object writing, compatible to ObjectDBW - **Note:** requires write access to the database""" - # start in 'dry-run' mode, using a simple sha1 writer - ostreams = (ZippedStoreShaWriter, None) - for ostreamcls in ostreams: - for data in self.all_data: - dry_run = ostreamcls is not None - ostream = None - if ostreamcls is not None: - ostream = ostreamcls() - assert isinstance(ostream, Sha1Writer) - # END create ostream - - prev_ostream = db.set_ostream(ostream) - assert type(prev_ostream) in ostreams or prev_ostream in ostreams - - istream = IStream(str_blob_type, len(data), StringIO(data)) - - # store returns same istream instance, with new sha set - my_istream = db.store(istream) - sha = istream.binsha - assert my_istream is istream - assert db.has_object(sha) != dry_run - assert len(sha) == 20 - - # verify data - the slow way, we want to run code - if not dry_run: - info = db.info(sha) - assert str_blob_type == info.type - assert info.size == len(data) - - ostream = db.stream(sha) - assert ostream.read() == data - assert ostream.type == str_blob_type - assert ostream.size == len(data) - else: - self.failUnlessRaises(BadObject, db.info, sha) - self.failUnlessRaises(BadObject, db.stream, sha) - - # DIRECT STREAM COPY - # our data hase been written in object format to the StringIO - # we pasesd as output stream. No physical database representation - # was created. - # Test direct stream copy of object streams, the result must be - # identical to what we fed in - ostream.seek(0) - istream.stream = ostream - assert istream.binsha is not None - prev_sha = istream.binsha - - db.set_ostream(ZippedStoreShaWriter()) - db.store(istream) - assert istream.binsha == prev_sha - new_ostream = db.ostream() - - # note: only works as long our store write uses the same compression - # level, which is zip_best - assert ostream.getvalue() == new_ostream.getvalue() - # END for each data set - # END for each dry_run mode - - def _assert_object_writing_async(self, db): - """Test generic object writing using asynchronous access""" - ni = 5000 - def istream_generator(offset=0, ni=ni): - for data_src in xrange(ni): - data = str(data_src + offset) - yield IStream(str_blob_type, len(data), StringIO(data)) - # END for each item - # END generator utility - - # for now, we are very trusty here as we expect it to work if it worked - # in the single-stream case - - # write objects - reader = IteratorReader(istream_generator()) - istream_reader = db.store_async(reader) - istreams = istream_reader.read() # read all - assert istream_reader.task().error() is None - assert len(istreams) == ni - - for stream in istreams: - assert stream.error is None - assert len(stream.binsha) == 20 - assert isinstance(stream, IStream) - # END assert each stream - - # test has-object-async - we must have all previously added ones - reader = IteratorReader( istream.binsha for istream in istreams ) - hasobject_reader = db.has_object_async(reader) - count = 0 - for sha, has_object in hasobject_reader: - assert has_object - count += 1 - # END for each sha - assert count == ni - - # read the objects we have just written - reader = IteratorReader( istream.binsha for istream in istreams ) - ostream_reader = db.stream_async(reader) - - # read items individually to prevent hitting possible sys-limits - count = 0 - for ostream in ostream_reader: - assert isinstance(ostream, OStream) - count += 1 - # END for each ostream - assert ostream_reader.task().error() is None - assert count == ni - - # get info about our items - reader = IteratorReader( istream.binsha for istream in istreams ) - info_reader = db.info_async(reader) - - count = 0 - for oinfo in info_reader: - assert isinstance(oinfo, OInfo) - count += 1 - # END for each oinfo instance - assert count == ni - - - # combined read-write using a converter - # add 2500 items, and obtain their output streams - nni = 2500 - reader = IteratorReader(istream_generator(offset=ni, ni=nni)) - istream_to_sha = lambda istreams: [ istream.binsha for istream in istreams ] - - istream_reader = db.store_async(reader) - istream_reader.set_post_cb(istream_to_sha) - - ostream_reader = db.stream_async(istream_reader) - - count = 0 - # read it individually, otherwise we might run into the ulimit - for ostream in ostream_reader: - assert isinstance(ostream, OStream) - count += 1 - # END for each ostream - assert count == nni - - + """Base class providing testing routines on databases""" + + # data + two_lines = "1234\nhello world" + all_data = (two_lines, ) + + def _assert_object_writing_simple(self, db): + # write a bunch of objects and query their streams and info + null_objs = db.size() + ni = 250 + for i in xrange(ni): + data = pack(">L", i) + istream = IStream(str_blob_type, len(data), StringIO(data)) + new_istream = db.store(istream) + assert new_istream is istream + assert db.has_object(istream.binsha) + + info = db.info(istream.binsha) + assert isinstance(info, OInfo) + assert info.type == istream.type and info.size == istream.size + + stream = db.stream(istream.binsha) + assert isinstance(stream, OStream) + assert stream.binsha == info.binsha and stream.type == info.type + assert stream.read() == data + # END for each item + + assert db.size() == null_objs + ni + shas = list(db.sha_iter()) + assert len(shas) == db.size() + assert len(shas[0]) == 20 + + + def _assert_object_writing(self, db): + """General tests to verify object writing, compatible to ObjectDBW + **Note:** requires write access to the database""" + # start in 'dry-run' mode, using a simple sha1 writer + ostreams = (ZippedStoreShaWriter, None) + for ostreamcls in ostreams: + for data in self.all_data: + dry_run = ostreamcls is not None + ostream = None + if ostreamcls is not None: + ostream = ostreamcls() + assert isinstance(ostream, Sha1Writer) + # END create ostream + + prev_ostream = db.set_ostream(ostream) + assert type(prev_ostream) in ostreams or prev_ostream in ostreams + + istream = IStream(str_blob_type, len(data), StringIO(data)) + + # store returns same istream instance, with new sha set + my_istream = db.store(istream) + sha = istream.binsha + assert my_istream is istream + assert db.has_object(sha) != dry_run + assert len(sha) == 20 + + # verify data - the slow way, we want to run code + if not dry_run: + info = db.info(sha) + assert str_blob_type == info.type + assert info.size == len(data) + + ostream = db.stream(sha) + assert ostream.read() == data + assert ostream.type == str_blob_type + assert ostream.size == len(data) + else: + self.failUnlessRaises(BadObject, db.info, sha) + self.failUnlessRaises(BadObject, db.stream, sha) + + # DIRECT STREAM COPY + # our data hase been written in object format to the StringIO + # we pasesd as output stream. No physical database representation + # was created. + # Test direct stream copy of object streams, the result must be + # identical to what we fed in + ostream.seek(0) + istream.stream = ostream + assert istream.binsha is not None + prev_sha = istream.binsha + + db.set_ostream(ZippedStoreShaWriter()) + db.store(istream) + assert istream.binsha == prev_sha + new_ostream = db.ostream() + + # note: only works as long our store write uses the same compression + # level, which is zip_best + assert ostream.getvalue() == new_ostream.getvalue() + # END for each data set + # END for each dry_run mode + + def _assert_object_writing_async(self, db): + """Test generic object writing using asynchronous access""" + ni = 5000 + def istream_generator(offset=0, ni=ni): + for data_src in xrange(ni): + data = str(data_src + offset) + yield IStream(str_blob_type, len(data), StringIO(data)) + # END for each item + # END generator utility + + # for now, we are very trusty here as we expect it to work if it worked + # in the single-stream case + + # write objects + reader = IteratorReader(istream_generator()) + istream_reader = db.store_async(reader) + istreams = istream_reader.read() # read all + assert istream_reader.task().error() is None + assert len(istreams) == ni + + for stream in istreams: + assert stream.error is None + assert len(stream.binsha) == 20 + assert isinstance(stream, IStream) + # END assert each stream + + # test has-object-async - we must have all previously added ones + reader = IteratorReader( istream.binsha for istream in istreams ) + hasobject_reader = db.has_object_async(reader) + count = 0 + for sha, has_object in hasobject_reader: + assert has_object + count += 1 + # END for each sha + assert count == ni + + # read the objects we have just written + reader = IteratorReader( istream.binsha for istream in istreams ) + ostream_reader = db.stream_async(reader) + + # read items individually to prevent hitting possible sys-limits + count = 0 + for ostream in ostream_reader: + assert isinstance(ostream, OStream) + count += 1 + # END for each ostream + assert ostream_reader.task().error() is None + assert count == ni + + # get info about our items + reader = IteratorReader( istream.binsha for istream in istreams ) + info_reader = db.info_async(reader) + + count = 0 + for oinfo in info_reader: + assert isinstance(oinfo, OInfo) + count += 1 + # END for each oinfo instance + assert count == ni + + + # combined read-write using a converter + # add 2500 items, and obtain their output streams + nni = 2500 + reader = IteratorReader(istream_generator(offset=ni, ni=nni)) + istream_to_sha = lambda istreams: [ istream.binsha for istream in istreams ] + + istream_reader = db.store_async(reader) + istream_reader.set_post_cb(istream_to_sha) + + ostream_reader = db.stream_async(istream_reader) + + count = 0 + # read it individually, otherwise we might run into the ulimit + for ostream in ostream_reader: + assert isinstance(ostream, OStream) + count += 1 + # END for each ostream + assert count == nni + + diff --git a/gitdb/test/db/test_git.py b/gitdb/test/db/test_git.py index 310116351..1ef577aa3 100644 --- a/gitdb/test/db/test_git.py +++ b/gitdb/test/db/test_git.py @@ -7,41 +7,41 @@ from gitdb.db import GitDB from gitdb.base import OStream, OInfo from gitdb.util import hex_to_bin, bin_to_hex - + class TestGitDB(TestDBBase): - - def test_reading(self): - gdb = GitDB(fixture_path('../../../.git/objects')) - - # we have packs and loose objects, alternates doesn't necessarily exist - assert 1 < len(gdb.databases()) < 4 - - # access should be possible - gitdb_sha = hex_to_bin("5690fd0d3304f378754b23b098bd7cb5f4aa1976") - assert isinstance(gdb.info(gitdb_sha), OInfo) - assert isinstance(gdb.stream(gitdb_sha), OStream) - assert gdb.size() > 200 - sha_list = list(gdb.sha_iter()) - assert len(sha_list) == gdb.size() - - - # This is actually a test for compound functionality, but it doesn't - # have a separate test module - # test partial shas - # this one as uneven and quite short - assert gdb.partial_to_complete_sha_hex('155b6') == hex_to_bin("155b62a9af0aa7677078331e111d0f7aa6eb4afc") - - # mix even/uneven hexshas - for i, binsha in enumerate(sha_list): - assert gdb.partial_to_complete_sha_hex(bin_to_hex(binsha)[:8-(i%2)]) == binsha - # END for each sha - - self.failUnlessRaises(BadObject, gdb.partial_to_complete_sha_hex, "0000") - - @with_rw_directory - def test_writing(self, path): - gdb = GitDB(path) - - # its possible to write objects - self._assert_object_writing(gdb) - self._assert_object_writing_async(gdb) + + def test_reading(self): + gdb = GitDB(fixture_path('../../../.git/objects')) + + # we have packs and loose objects, alternates doesn't necessarily exist + assert 1 < len(gdb.databases()) < 4 + + # access should be possible + gitdb_sha = hex_to_bin("5690fd0d3304f378754b23b098bd7cb5f4aa1976") + assert isinstance(gdb.info(gitdb_sha), OInfo) + assert isinstance(gdb.stream(gitdb_sha), OStream) + assert gdb.size() > 200 + sha_list = list(gdb.sha_iter()) + assert len(sha_list) == gdb.size() + + + # This is actually a test for compound functionality, but it doesn't + # have a separate test module + # test partial shas + # this one as uneven and quite short + assert gdb.partial_to_complete_sha_hex('155b6') == hex_to_bin("155b62a9af0aa7677078331e111d0f7aa6eb4afc") + + # mix even/uneven hexshas + for i, binsha in enumerate(sha_list): + assert gdb.partial_to_complete_sha_hex(bin_to_hex(binsha)[:8-(i%2)]) == binsha + # END for each sha + + self.failUnlessRaises(BadObject, gdb.partial_to_complete_sha_hex, "0000") + + @with_rw_directory + def test_writing(self, path): + gdb = GitDB(path) + + # its possible to write objects + self._assert_object_writing(gdb) + self._assert_object_writing_async(gdb) diff --git a/gitdb/test/db/test_loose.py b/gitdb/test/db/test_loose.py index ee2d78d08..d7e1d01b0 100644 --- a/gitdb/test/db/test_loose.py +++ b/gitdb/test/db/test_loose.py @@ -6,29 +6,29 @@ from gitdb.db import LooseObjectDB from gitdb.exc import BadObject from gitdb.util import bin_to_hex - + class TestLooseDB(TestDBBase): - - @with_rw_directory - def test_basics(self, path): - ldb = LooseObjectDB(path) - - # write data - self._assert_object_writing(ldb) - self._assert_object_writing_async(ldb) - - # verify sha iteration and size - shas = list(ldb.sha_iter()) - assert shas and len(shas[0]) == 20 - - assert len(shas) == ldb.size() - - # verify find short object - long_sha = bin_to_hex(shas[-1]) - for short_sha in (long_sha[:20], long_sha[:5]): - assert bin_to_hex(ldb.partial_to_complete_sha_hex(short_sha)) == long_sha - # END for each sha - - self.failUnlessRaises(BadObject, ldb.partial_to_complete_sha_hex, '0000') - # raises if no object could be foudn - + + @with_rw_directory + def test_basics(self, path): + ldb = LooseObjectDB(path) + + # write data + self._assert_object_writing(ldb) + self._assert_object_writing_async(ldb) + + # verify sha iteration and size + shas = list(ldb.sha_iter()) + assert shas and len(shas[0]) == 20 + + assert len(shas) == ldb.size() + + # verify find short object + long_sha = bin_to_hex(shas[-1]) + for short_sha in (long_sha[:20], long_sha[:5]): + assert bin_to_hex(ldb.partial_to_complete_sha_hex(short_sha)) == long_sha + # END for each sha + + self.failUnlessRaises(BadObject, ldb.partial_to_complete_sha_hex, '0000') + # raises if no object could be foudn + diff --git a/gitdb/test/db/test_mem.py b/gitdb/test/db/test_mem.py index 188cb0a93..df428e2b7 100644 --- a/gitdb/test/db/test_mem.py +++ b/gitdb/test/db/test_mem.py @@ -4,27 +4,27 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php from lib import * from gitdb.db import ( - MemoryDB, - LooseObjectDB - ) - + MemoryDB, + LooseObjectDB + ) + class TestMemoryDB(TestDBBase): - - @with_rw_directory - def test_writing(self, path): - mdb = MemoryDB() - - # write data - self._assert_object_writing_simple(mdb) - - # test stream copy - ldb = LooseObjectDB(path) - assert ldb.size() == 0 - num_streams_copied = mdb.stream_copy(mdb.sha_iter(), ldb) - assert num_streams_copied == mdb.size() - - assert ldb.size() == mdb.size() - for sha in mdb.sha_iter(): - assert ldb.has_object(sha) - assert ldb.stream(sha).read() == mdb.stream(sha).read() - # END verify objects where copied and are equal + + @with_rw_directory + def test_writing(self, path): + mdb = MemoryDB() + + # write data + self._assert_object_writing_simple(mdb) + + # test stream copy + ldb = LooseObjectDB(path) + assert ldb.size() == 0 + num_streams_copied = mdb.stream_copy(mdb.sha_iter(), ldb) + assert num_streams_copied == mdb.size() + + assert ldb.size() == mdb.size() + for sha in mdb.sha_iter(): + assert ldb.has_object(sha) + assert ldb.stream(sha).read() == mdb.stream(sha).read() + # END verify objects where copied and are equal diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index e8ba6f8fc..f4cb5bbc6 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -12,62 +12,62 @@ import random class TestPackDB(TestDBBase): - - @with_rw_directory - @with_packs_rw - def test_writing(self, path): - pdb = PackedDB(path) - - # on demand, we init our pack cache - num_packs = len(pdb.entities()) - assert pdb._st_mtime != 0 - - # test pack directory changed: - # packs removed - rename a file, should affect the glob - pack_path = pdb.entities()[0].pack().path() - new_pack_path = pack_path + "renamed" - os.rename(pack_path, new_pack_path) - - pdb.update_cache(force=True) - assert len(pdb.entities()) == num_packs - 1 - - # packs added - os.rename(new_pack_path, pack_path) - pdb.update_cache(force=True) - assert len(pdb.entities()) == num_packs - - # bang on the cache - # access the Entities directly, as there is no iteration interface - # yet ( or required for now ) - sha_list = list(pdb.sha_iter()) - assert len(sha_list) == pdb.size() - - # hit all packs in random order - random.shuffle(sha_list) - - for sha in sha_list: - info = pdb.info(sha) - stream = pdb.stream(sha) - # END for each sha to query - - - # test short finding - be a bit more brutal here - max_bytes = 19 - min_bytes = 2 - num_ambiguous = 0 - for i, sha in enumerate(sha_list): - short_sha = sha[:max((i % max_bytes), min_bytes)] - try: - assert pdb.partial_to_complete_sha(short_sha, len(short_sha)*2) == sha - except AmbiguousObjectName: - num_ambiguous += 1 - pass # valid, we can have short objects - # END exception handling - # END for each sha to find - - # we should have at least one ambiguous, considering the small sizes - # but in our pack, there is no ambigious ... - # assert num_ambiguous - - # non-existing - self.failUnlessRaises(BadObject, pdb.partial_to_complete_sha, "\0\0", 4) + + @with_rw_directory + @with_packs_rw + def test_writing(self, path): + pdb = PackedDB(path) + + # on demand, we init our pack cache + num_packs = len(pdb.entities()) + assert pdb._st_mtime != 0 + + # test pack directory changed: + # packs removed - rename a file, should affect the glob + pack_path = pdb.entities()[0].pack().path() + new_pack_path = pack_path + "renamed" + os.rename(pack_path, new_pack_path) + + pdb.update_cache(force=True) + assert len(pdb.entities()) == num_packs - 1 + + # packs added + os.rename(new_pack_path, pack_path) + pdb.update_cache(force=True) + assert len(pdb.entities()) == num_packs + + # bang on the cache + # access the Entities directly, as there is no iteration interface + # yet ( or required for now ) + sha_list = list(pdb.sha_iter()) + assert len(sha_list) == pdb.size() + + # hit all packs in random order + random.shuffle(sha_list) + + for sha in sha_list: + info = pdb.info(sha) + stream = pdb.stream(sha) + # END for each sha to query + + + # test short finding - be a bit more brutal here + max_bytes = 19 + min_bytes = 2 + num_ambiguous = 0 + for i, sha in enumerate(sha_list): + short_sha = sha[:max((i % max_bytes), min_bytes)] + try: + assert pdb.partial_to_complete_sha(short_sha, len(short_sha)*2) == sha + except AmbiguousObjectName: + num_ambiguous += 1 + pass # valid, we can have short objects + # END exception handling + # END for each sha to find + + # we should have at least one ambiguous, considering the small sizes + # but in our pack, there is no ambigious ... + # assert num_ambiguous + + # non-existing + self.failUnlessRaises(BadObject, pdb.partial_to_complete_sha, "\0\0", 4) diff --git a/gitdb/test/db/test_ref.py b/gitdb/test/db/test_ref.py index 0d8eeebb3..1637bff74 100644 --- a/gitdb/test/db/test_ref.py +++ b/gitdb/test/db/test_ref.py @@ -6,55 +6,55 @@ from gitdb.db import ReferenceDB from gitdb.util import ( - NULL_BIN_SHA, - hex_to_bin - ) + NULL_BIN_SHA, + hex_to_bin + ) import os - + class TestReferenceDB(TestDBBase): - - def make_alt_file(self, alt_path, alt_list): - """Create an alternates file which contains the given alternates. - The list can be empty""" - alt_file = open(alt_path, "wb") - for alt in alt_list: - alt_file.write(alt + "\n") - alt_file.close() - - @with_rw_directory - def test_writing(self, path): - NULL_BIN_SHA = '\0' * 20 - - alt_path = os.path.join(path, 'alternates') - rdb = ReferenceDB(alt_path) - assert len(rdb.databases()) == 0 - assert rdb.size() == 0 - assert len(list(rdb.sha_iter())) == 0 - - # try empty, non-existing - assert not rdb.has_object(NULL_BIN_SHA) - - - # setup alternate file - # add two, one is invalid - own_repo_path = fixture_path('../../../.git/objects') # use own repo - self.make_alt_file(alt_path, [own_repo_path, "invalid/path"]) - rdb.update_cache() - assert len(rdb.databases()) == 1 - - # we should now find a default revision of ours - gitdb_sha = hex_to_bin("5690fd0d3304f378754b23b098bd7cb5f4aa1976") - assert rdb.has_object(gitdb_sha) - - # remove valid - self.make_alt_file(alt_path, ["just/one/invalid/path"]) - rdb.update_cache() - assert len(rdb.databases()) == 0 - - # add valid - self.make_alt_file(alt_path, [own_repo_path]) - rdb.update_cache() - assert len(rdb.databases()) == 1 - - + + def make_alt_file(self, alt_path, alt_list): + """Create an alternates file which contains the given alternates. + The list can be empty""" + alt_file = open(alt_path, "wb") + for alt in alt_list: + alt_file.write(alt + "\n") + alt_file.close() + + @with_rw_directory + def test_writing(self, path): + NULL_BIN_SHA = '\0' * 20 + + alt_path = os.path.join(path, 'alternates') + rdb = ReferenceDB(alt_path) + assert len(rdb.databases()) == 0 + assert rdb.size() == 0 + assert len(list(rdb.sha_iter())) == 0 + + # try empty, non-existing + assert not rdb.has_object(NULL_BIN_SHA) + + + # setup alternate file + # add two, one is invalid + own_repo_path = fixture_path('../../../.git/objects') # use own repo + self.make_alt_file(alt_path, [own_repo_path, "invalid/path"]) + rdb.update_cache() + assert len(rdb.databases()) == 1 + + # we should now find a default revision of ours + gitdb_sha = hex_to_bin("5690fd0d3304f378754b23b098bd7cb5f4aa1976") + assert rdb.has_object(gitdb_sha) + + # remove valid + self.make_alt_file(alt_path, ["just/one/invalid/path"]) + rdb.update_cache() + assert len(rdb.databases()) == 0 + + # add valid + self.make_alt_file(alt_path, [own_repo_path]) + rdb.update_cache() + assert len(rdb.databases()) == 1 + + diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index 50645be65..ac8473a4e 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -4,12 +4,12 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Utilities used in ODB testing""" from gitdb import ( - OStream, - ) + OStream, + ) from gitdb.stream import ( - Sha1Writer, - ZippedStoreShaWriter - ) + Sha1Writer, + ZippedStoreShaWriter + ) from gitdb.util import zlib @@ -29,134 +29,134 @@ #{ Bases class TestBase(unittest.TestCase): - """Base class for all tests""" - + """Base class for all tests""" + #} END bases #{ Decorators def with_rw_directory(func): - """Create a temporary directory which can be written to, remove it if the - test suceeds, but leave it otherwise to aid additional debugging""" - def wrapper(self): - path = tempfile.mktemp(prefix=func.__name__) - os.mkdir(path) - keep = False - try: - try: - return func(self, path) - except Exception: - print >> sys.stderr, "Test %s.%s failed, output is at %r" % (type(self).__name__, func.__name__, path) - keep = True - raise - finally: - # Need to collect here to be sure all handles have been closed. It appears - # a windows-only issue. In fact things should be deleted, as well as - # memory maps closed, once objects go out of scope. For some reason - # though this is not the case here unless we collect explicitly. - if not keep: - gc.collect() - shutil.rmtree(path) - # END handle exception - # END wrapper - - wrapper.__name__ = func.__name__ - return wrapper + """Create a temporary directory which can be written to, remove it if the + test suceeds, but leave it otherwise to aid additional debugging""" + def wrapper(self): + path = tempfile.mktemp(prefix=func.__name__) + os.mkdir(path) + keep = False + try: + try: + return func(self, path) + except Exception: + print >> sys.stderr, "Test %s.%s failed, output is at %r" % (type(self).__name__, func.__name__, path) + keep = True + raise + finally: + # Need to collect here to be sure all handles have been closed. It appears + # a windows-only issue. In fact things should be deleted, as well as + # memory maps closed, once objects go out of scope. For some reason + # though this is not the case here unless we collect explicitly. + if not keep: + gc.collect() + shutil.rmtree(path) + # END handle exception + # END wrapper + + wrapper.__name__ = func.__name__ + return wrapper def with_packs_rw(func): - """Function that provides a path into which the packs for testing should be - copied. Will pass on the path to the actual function afterwards""" - def wrapper(self, path): - src_pack_glob = fixture_path('packs/*') - copy_files_globbed(src_pack_glob, path, hard_link_ok=True) - return func(self, path) - # END wrapper - - wrapper.__name__ = func.__name__ - return wrapper + """Function that provides a path into which the packs for testing should be + copied. Will pass on the path to the actual function afterwards""" + def wrapper(self, path): + src_pack_glob = fixture_path('packs/*') + copy_files_globbed(src_pack_glob, path, hard_link_ok=True) + return func(self, path) + # END wrapper + + wrapper.__name__ = func.__name__ + return wrapper #} END decorators #{ Routines def fixture_path(relapath=''): - """:return: absolute path into the fixture directory - :param relapath: relative path into the fixtures directory, or '' - to obtain the fixture directory itself""" - return os.path.join(os.path.dirname(__file__), 'fixtures', relapath) - + """:return: absolute path into the fixture directory + :param relapath: relative path into the fixtures directory, or '' + to obtain the fixture directory itself""" + return os.path.join(os.path.dirname(__file__), 'fixtures', relapath) + def copy_files_globbed(source_glob, target_dir, hard_link_ok=False): - """Copy all files found according to the given source glob into the target directory - :param hard_link_ok: if True, hard links will be created if possible. Otherwise - the files will be copied""" - for src_file in glob.glob(source_glob): - if hard_link_ok and hasattr(os, 'link'): - target = os.path.join(target_dir, os.path.basename(src_file)) - try: - os.link(src_file, target) - except OSError: - shutil.copy(src_file, target_dir) - # END handle cross device links ( and resulting failure ) - else: - shutil.copy(src_file, target_dir) - # END try hard link - # END for each file to copy - + """Copy all files found according to the given source glob into the target directory + :param hard_link_ok: if True, hard links will be created if possible. Otherwise + the files will be copied""" + for src_file in glob.glob(source_glob): + if hard_link_ok and hasattr(os, 'link'): + target = os.path.join(target_dir, os.path.basename(src_file)) + try: + os.link(src_file, target) + except OSError: + shutil.copy(src_file, target_dir) + # END handle cross device links ( and resulting failure ) + else: + shutil.copy(src_file, target_dir) + # END try hard link + # END for each file to copy + def make_bytes(size_in_bytes, randomize=False): - """:return: string with given size in bytes - :param randomize: try to produce a very random stream""" - actual_size = size_in_bytes / 4 - producer = xrange(actual_size) - if randomize: - producer = list(producer) - random.shuffle(producer) - # END randomize - a = array('i', producer) - return a.tostring() + """:return: string with given size in bytes + :param randomize: try to produce a very random stream""" + actual_size = size_in_bytes / 4 + producer = xrange(actual_size) + if randomize: + producer = list(producer) + random.shuffle(producer) + # END randomize + a = array('i', producer) + return a.tostring() def make_object(type, data): - """:return: bytes resembling an uncompressed object""" - odata = "blob %i\0" % len(data) - return odata + data - + """:return: bytes resembling an uncompressed object""" + odata = "blob %i\0" % len(data) + return odata + data + def make_memory_file(size_in_bytes, randomize=False): - """:return: tuple(size_of_stream, stream) - :param randomize: try to produce a very random stream""" - d = make_bytes(size_in_bytes, randomize) - return len(d), StringIO(d) + """:return: tuple(size_of_stream, stream) + :param randomize: try to produce a very random stream""" + d = make_bytes(size_in_bytes, randomize) + return len(d), StringIO(d) #} END routines #{ Stream Utilities class DummyStream(object): - def __init__(self): - self.was_read = False - self.bytes = 0 - self.closed = False - - def read(self, size): - self.was_read = True - self.bytes = size - - def close(self): - self.closed = True - - def _assert(self): - assert self.was_read + def __init__(self): + self.was_read = False + self.bytes = 0 + self.closed = False + + def read(self, size): + self.was_read = True + self.bytes = size + + def close(self): + self.closed = True + + def _assert(self): + assert self.was_read class DeriveTest(OStream): - def __init__(self, sha, type, size, stream, *args, **kwargs): - self.myarg = kwargs.pop('myarg') - self.args = args - - def _assert(self): - assert self.args - assert self.myarg + def __init__(self, sha, type, size, stream, *args, **kwargs): + self.myarg = kwargs.pop('myarg') + self.args = args + + def _assert(self): + assert self.args + assert self.myarg #} END stream utilitiess diff --git a/gitdb/test/performance/lib.py b/gitdb/test/performance/lib.py index 761113d51..3563fcfbe 100644 --- a/gitdb/test/performance/lib.py +++ b/gitdb/test/performance/lib.py @@ -16,12 +16,12 @@ #{ Utilities def resolve_or_fail(env_var): - """:return: resolved environment variable or raise EnvironmentError""" - try: - return os.environ[env_var] - except KeyError: - raise EnvironmentError("Please set the %r envrionment variable and retry" % env_var) - # END exception handling + """:return: resolved environment variable or raise EnvironmentError""" + try: + return os.environ[env_var] + except KeyError: + raise EnvironmentError("Please set the %r envrionment variable and retry" % env_var) + # END exception handling #} END utilities @@ -29,26 +29,26 @@ def resolve_or_fail(env_var): #{ Base Classes class TestBigRepoR(TestBase): - """TestCase providing access to readonly 'big' repositories using the following - member variables: - - * gitrepopath - - * read-only base path of the git source repository, i.e. .../git/.git""" - - #{ Invariants - head_sha_2k = '235d521da60e4699e5bd59ac658b5b48bd76ddca' - head_sha_50 = '32347c375250fd470973a5d76185cac718955fd5' - #} END invariants - - @classmethod - def setUpAll(cls): - try: - super(TestBigRepoR, cls).setUpAll() - except AttributeError: - pass - cls.gitrepopath = resolve_or_fail(k_env_git_repo) - assert cls.gitrepopath.endswith('.git') - - + """TestCase providing access to readonly 'big' repositories using the following + member variables: + + * gitrepopath + + * read-only base path of the git source repository, i.e. .../git/.git""" + + #{ Invariants + head_sha_2k = '235d521da60e4699e5bd59ac658b5b48bd76ddca' + head_sha_50 = '32347c375250fd470973a5d76185cac718955fd5' + #} END invariants + + @classmethod + def setUpAll(cls): + try: + super(TestBigRepoR, cls).setUpAll() + except AttributeError: + pass + cls.gitrepopath = resolve_or_fail(k_env_git_repo) + assert cls.gitrepopath.endswith('.git') + + #} END base classes diff --git a/gitdb/test/performance/test_pack.py b/gitdb/test/performance/test_pack.py index 20618024d..63856e218 100644 --- a/gitdb/test/performance/test_pack.py +++ b/gitdb/test/performance/test_pack.py @@ -4,8 +4,8 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Performance tests for object store""" from lib import ( - TestBigRepoR - ) + TestBigRepoR + ) from gitdb.exc import UnsupportedOperation from gitdb.db.pack import PackedDB @@ -18,76 +18,76 @@ from nose import SkipTest class TestPackedDBPerformance(TestBigRepoR): - - def test_pack_random_access(self): - pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) - - # sha lookup - st = time() - sha_list = list(pdb.sha_iter()) - elapsed = time() - st - ns = len(sha_list) - print >> sys.stderr, "PDB: looked up %i shas by index in %f s ( %f shas/s )" % (ns, elapsed, ns / elapsed) - - # sha lookup: best-case and worst case access - pdb_pack_info = pdb._pack_info - # END shuffle shas - st = time() - for sha in sha_list: - pdb_pack_info(sha) - # END for each sha to look up - elapsed = time() - st - - # discard cache - del(pdb._entities) - pdb.entities() - print >> sys.stderr, "PDB: looked up %i sha in %i packs in %f s ( %f shas/s )" % (ns, len(pdb.entities()), elapsed, ns / elapsed) - # END for each random mode - - # query info and streams only - max_items = 10000 # can wait longer when testing memory - for pdb_fun in (pdb.info, pdb.stream): - st = time() - for sha in sha_list[:max_items]: - pdb_fun(sha) - elapsed = time() - st - print >> sys.stderr, "PDB: Obtained %i object %s by sha in %f s ( %f items/s )" % (max_items, pdb_fun.__name__.upper(), elapsed, max_items / elapsed) - # END for each function - - # retrieve stream and read all - max_items = 5000 - pdb_stream = pdb.stream - total_size = 0 - st = time() - for sha in sha_list[:max_items]: - stream = pdb_stream(sha) - stream.read() - total_size += stream.size - elapsed = time() - st - total_kib = total_size / 1000 - print >> sys.stderr, "PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (max_items, total_kib, total_kib/elapsed , elapsed, max_items / elapsed) - - def test_correctness(self): - raise SkipTest("Takes too long, enable it if you change the algorithm and want to be sure you decode packs correctly") - pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) - # disabled for now as it used to work perfectly, checking big repositories takes a long time - print >> sys.stderr, "Endurance run: verify streaming of objects (crc and sha)" - for crc in range(2): - count = 0 - st = time() - for entity in pdb.entities(): - pack_verify = entity.is_valid_stream - sha_by_index = entity.index().sha - for index in xrange(entity.index().size()): - try: - assert pack_verify(sha_by_index(index), use_crc=crc) - count += 1 - except UnsupportedOperation: - pass - # END ignore old indices - # END for each index - # END for each entity - elapsed = time() - st - print >> sys.stderr, "PDB: verified %i objects (crc=%i) in %f s ( %f objects/s )" % (count, crc, elapsed, count / elapsed) - # END for each verify mode - + + def test_pack_random_access(self): + pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) + + # sha lookup + st = time() + sha_list = list(pdb.sha_iter()) + elapsed = time() - st + ns = len(sha_list) + print >> sys.stderr, "PDB: looked up %i shas by index in %f s ( %f shas/s )" % (ns, elapsed, ns / elapsed) + + # sha lookup: best-case and worst case access + pdb_pack_info = pdb._pack_info + # END shuffle shas + st = time() + for sha in sha_list: + pdb_pack_info(sha) + # END for each sha to look up + elapsed = time() - st + + # discard cache + del(pdb._entities) + pdb.entities() + print >> sys.stderr, "PDB: looked up %i sha in %i packs in %f s ( %f shas/s )" % (ns, len(pdb.entities()), elapsed, ns / elapsed) + # END for each random mode + + # query info and streams only + max_items = 10000 # can wait longer when testing memory + for pdb_fun in (pdb.info, pdb.stream): + st = time() + for sha in sha_list[:max_items]: + pdb_fun(sha) + elapsed = time() - st + print >> sys.stderr, "PDB: Obtained %i object %s by sha in %f s ( %f items/s )" % (max_items, pdb_fun.__name__.upper(), elapsed, max_items / elapsed) + # END for each function + + # retrieve stream and read all + max_items = 5000 + pdb_stream = pdb.stream + total_size = 0 + st = time() + for sha in sha_list[:max_items]: + stream = pdb_stream(sha) + stream.read() + total_size += stream.size + elapsed = time() - st + total_kib = total_size / 1000 + print >> sys.stderr, "PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (max_items, total_kib, total_kib/elapsed , elapsed, max_items / elapsed) + + def test_correctness(self): + raise SkipTest("Takes too long, enable it if you change the algorithm and want to be sure you decode packs correctly") + pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) + # disabled for now as it used to work perfectly, checking big repositories takes a long time + print >> sys.stderr, "Endurance run: verify streaming of objects (crc and sha)" + for crc in range(2): + count = 0 + st = time() + for entity in pdb.entities(): + pack_verify = entity.is_valid_stream + sha_by_index = entity.index().sha + for index in xrange(entity.index().size()): + try: + assert pack_verify(sha_by_index(index), use_crc=crc) + count += 1 + except UnsupportedOperation: + pass + # END ignore old indices + # END for each index + # END for each entity + elapsed = time() - st + print >> sys.stderr, "PDB: verified %i objects (crc=%i) in %f s ( %f objects/s )" % (count, crc, elapsed, count / elapsed) + # END for each verify mode + diff --git a/gitdb/test/performance/test_pack_streaming.py b/gitdb/test/performance/test_pack_streaming.py index 3c40ed0fb..c66e60cba 100644 --- a/gitdb/test/performance/test_pack_streaming.py +++ b/gitdb/test/performance/test_pack_streaming.py @@ -4,8 +4,8 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Specific test for pack streams only""" from lib import ( - TestBigRepoR - ) + TestBigRepoR + ) from gitdb.db.pack import PackedDB from gitdb.stream import NullStream @@ -17,63 +17,63 @@ from nose import SkipTest class CountedNullStream(NullStream): - __slots__ = '_bw' - def __init__(self): - self._bw = 0 - - def bytes_written(self): - return self._bw - - def write(self, d): - self._bw += NullStream.write(self, d) - + __slots__ = '_bw' + def __init__(self): + self._bw = 0 + + def bytes_written(self): + return self._bw + + def write(self, d): + self._bw += NullStream.write(self, d) + class TestPackStreamingPerformance(TestBigRepoR): - - def test_pack_writing(self): - # see how fast we can write a pack from object streams. - # This will not be fast, as we take time for decompressing the streams as well - ostream = CountedNullStream() - pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) - - ni = 5000 - count = 0 - total_size = 0 - st = time() - for sha in pdb.sha_iter(): - count += 1 - pdb.stream(sha) - if count == ni: - break - #END gather objects for pack-writing - elapsed = time() - st - print >> sys.stderr, "PDB Streaming: Got %i streams by sha in in %f s ( %f streams/s )" % (ni, elapsed, ni / elapsed) - - st = time() - PackEntity.write_pack((pdb.stream(sha) for sha in pdb.sha_iter()), ostream.write, object_count=ni) - elapsed = time() - st - total_kb = ostream.bytes_written() / 1000 - print >> sys.stderr, "PDB Streaming: Wrote pack of size %i kb in %f s (%f kb/s)" % (total_kb, elapsed, total_kb/elapsed) - - - def test_stream_reading(self): - raise SkipTest() - pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) - - # streaming only, meant for --with-profile runs - ni = 5000 - count = 0 - pdb_stream = pdb.stream - total_size = 0 - st = time() - for sha in pdb.sha_iter(): - if count == ni: - break - stream = pdb_stream(sha) - stream.read() - total_size += stream.size - count += 1 - elapsed = time() - st - total_kib = total_size / 1000 - print >> sys.stderr, "PDB Streaming: Got %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (ni, total_kib, total_kib/elapsed , elapsed, ni / elapsed) - + + def test_pack_writing(self): + # see how fast we can write a pack from object streams. + # This will not be fast, as we take time for decompressing the streams as well + ostream = CountedNullStream() + pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) + + ni = 5000 + count = 0 + total_size = 0 + st = time() + for sha in pdb.sha_iter(): + count += 1 + pdb.stream(sha) + if count == ni: + break + #END gather objects for pack-writing + elapsed = time() - st + print >> sys.stderr, "PDB Streaming: Got %i streams by sha in in %f s ( %f streams/s )" % (ni, elapsed, ni / elapsed) + + st = time() + PackEntity.write_pack((pdb.stream(sha) for sha in pdb.sha_iter()), ostream.write, object_count=ni) + elapsed = time() - st + total_kb = ostream.bytes_written() / 1000 + print >> sys.stderr, "PDB Streaming: Wrote pack of size %i kb in %f s (%f kb/s)" % (total_kb, elapsed, total_kb/elapsed) + + + def test_stream_reading(self): + raise SkipTest() + pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) + + # streaming only, meant for --with-profile runs + ni = 5000 + count = 0 + pdb_stream = pdb.stream + total_size = 0 + st = time() + for sha in pdb.sha_iter(): + if count == ni: + break + stream = pdb_stream(sha) + stream.read() + total_size += stream.size + count += 1 + elapsed = time() - st + total_kib = total_size / 1000 + print >> sys.stderr, "PDB Streaming: Got %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (ni, total_kib, total_kib/elapsed , elapsed, ni / elapsed) + diff --git a/gitdb/test/performance/test_stream.py b/gitdb/test/performance/test_stream.py index f5f2e2e4d..010003d4b 100644 --- a/gitdb/test/performance/test_stream.py +++ b/gitdb/test/performance/test_stream.py @@ -8,16 +8,16 @@ from gitdb.base import * from gitdb.stream import * from gitdb.util import ( - pool, - bin_to_hex - ) + pool, + bin_to_hex + ) from gitdb.typ import str_blob_type from gitdb.fun import chunk_size from async import ( - IteratorReader, - ChannelThreadTask, - ) + IteratorReader, + ChannelThreadTask, + ) from cStringIO import StringIO from time import time @@ -28,168 +28,168 @@ from lib import ( - TestBigRepoR, - make_memory_file, - with_rw_directory - ) + TestBigRepoR, + make_memory_file, + with_rw_directory + ) #{ Utilities def read_chunked_stream(stream): - total = 0 - while True: - chunk = stream.read(chunk_size) - total += len(chunk) - if len(chunk) < chunk_size: - break - # END read stream loop - assert total == stream.size - return stream - - + total = 0 + while True: + chunk = stream.read(chunk_size) + total += len(chunk) + if len(chunk) < chunk_size: + break + # END read stream loop + assert total == stream.size + return stream + + class TestStreamReader(ChannelThreadTask): - """Expects input streams and reads them in chunks. It will read one at a time, - requireing a queue chunk of size 1""" - def __init__(self, *args): - super(TestStreamReader, self).__init__(*args) - self.fun = read_chunked_stream - self.max_chunksize = 1 - + """Expects input streams and reads them in chunks. It will read one at a time, + requireing a queue chunk of size 1""" + def __init__(self, *args): + super(TestStreamReader, self).__init__(*args) + self.fun = read_chunked_stream + self.max_chunksize = 1 + #} END utilities class TestObjDBPerformance(TestBigRepoR): - - large_data_size_bytes = 1000*1000*50 # some MiB should do it - moderate_data_size_bytes = 1000*1000*1 # just 1 MiB - - @with_rw_directory - def test_large_data_streaming(self, path): - ldb = LooseObjectDB(path) - string_ios = list() # list of streams we previously created - - # serial mode - for randomize in range(2): - desc = (randomize and 'random ') or '' - print >> sys.stderr, "Creating %s data ..." % desc - st = time() - size, stream = make_memory_file(self.large_data_size_bytes, randomize) - elapsed = time() - st - print >> sys.stderr, "Done (in %f s)" % elapsed - string_ios.append(stream) - - # writing - due to the compression it will seem faster than it is - st = time() - sha = ldb.store(IStream('blob', size, stream)).binsha - elapsed_add = time() - st - assert ldb.has_object(sha) - db_file = ldb.readable_db_object_path(bin_to_hex(sha)) - fsize_kib = os.path.getsize(db_file) / 1000 - - - size_kib = size / 1000 - print >> sys.stderr, "Added %i KiB (filesize = %i KiB) of %s data to loose odb in %f s ( %f Write KiB / s)" % (size_kib, fsize_kib, desc, elapsed_add, size_kib / elapsed_add) - - # reading all at once - st = time() - ostream = ldb.stream(sha) - shadata = ostream.read() - elapsed_readall = time() - st - - stream.seek(0) - assert shadata == stream.getvalue() - print >> sys.stderr, "Read %i KiB of %s data at once from loose odb in %f s ( %f Read KiB / s)" % (size_kib, desc, elapsed_readall, size_kib / elapsed_readall) - - - # reading in chunks of 1 MiB - cs = 512*1000 - chunks = list() - st = time() - ostream = ldb.stream(sha) - while True: - data = ostream.read(cs) - chunks.append(data) - if len(data) < cs: - break - # END read in chunks - elapsed_readchunks = time() - st - - stream.seek(0) - assert ''.join(chunks) == stream.getvalue() - - cs_kib = cs / 1000 - print >> sys.stderr, "Read %i KiB of %s data in %i KiB chunks from loose odb in %f s ( %f Read KiB / s)" % (size_kib, desc, cs_kib, elapsed_readchunks, size_kib / elapsed_readchunks) - - # del db file so we keep something to do - os.remove(db_file) - # END for each randomization factor - - - # multi-threaded mode - # want two, should be supported by most of todays cpus - pool.set_size(2) - total_kib = 0 - nsios = len(string_ios) - for stream in string_ios: - stream.seek(0) - total_kib += len(stream.getvalue()) / 1000 - # END rewind - - def istream_iter(): - for stream in string_ios: - stream.seek(0) - yield IStream(str_blob_type, len(stream.getvalue()), stream) - # END for each stream - # END util - - # write multiple objects at once, involving concurrent compression - reader = IteratorReader(istream_iter()) - istream_reader = ldb.store_async(reader) - istream_reader.task().max_chunksize = 1 - - st = time() - istreams = istream_reader.read(nsios) - assert len(istreams) == nsios - elapsed = time() - st - - print >> sys.stderr, "Threads(%i): Compressed %i KiB of data in loose odb in %f s ( %f Write KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) - - # decompress multiple at once, by reading them - # chunk size is not important as the stream will not really be decompressed - - # until its read - istream_reader = IteratorReader(iter([ i.binsha for i in istreams ])) - ostream_reader = ldb.stream_async(istream_reader) - - chunk_task = TestStreamReader(ostream_reader, "chunker", None) - output_reader = pool.add_task(chunk_task) - output_reader.task().max_chunksize = 1 - - st = time() - assert len(output_reader.read(nsios)) == nsios - elapsed = time() - st - - print >> sys.stderr, "Threads(%i): Decompressed %i KiB of data in loose odb in %f s ( %f Read KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) - - # store the files, and read them back. For the reading, we use a task - # as well which is chunked into one item per task. Reading all will - # very quickly result in two threads handling two bytestreams of - # chained compression/decompression streams - reader = IteratorReader(istream_iter()) - istream_reader = ldb.store_async(reader) - istream_reader.task().max_chunksize = 1 - - istream_to_sha = lambda items: [ i.binsha for i in items ] - istream_reader.set_post_cb(istream_to_sha) - - ostream_reader = ldb.stream_async(istream_reader) - - chunk_task = TestStreamReader(ostream_reader, "chunker", None) - output_reader = pool.add_task(chunk_task) - output_reader.max_chunksize = 1 - - st = time() - assert len(output_reader.read(nsios)) == nsios - elapsed = time() - st - - print >> sys.stderr, "Threads(%i): Compressed and decompressed and read %i KiB of data in loose odb in %f s ( %f Combined KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) + + large_data_size_bytes = 1000*1000*50 # some MiB should do it + moderate_data_size_bytes = 1000*1000*1 # just 1 MiB + + @with_rw_directory + def test_large_data_streaming(self, path): + ldb = LooseObjectDB(path) + string_ios = list() # list of streams we previously created + + # serial mode + for randomize in range(2): + desc = (randomize and 'random ') or '' + print >> sys.stderr, "Creating %s data ..." % desc + st = time() + size, stream = make_memory_file(self.large_data_size_bytes, randomize) + elapsed = time() - st + print >> sys.stderr, "Done (in %f s)" % elapsed + string_ios.append(stream) + + # writing - due to the compression it will seem faster than it is + st = time() + sha = ldb.store(IStream('blob', size, stream)).binsha + elapsed_add = time() - st + assert ldb.has_object(sha) + db_file = ldb.readable_db_object_path(bin_to_hex(sha)) + fsize_kib = os.path.getsize(db_file) / 1000 + + + size_kib = size / 1000 + print >> sys.stderr, "Added %i KiB (filesize = %i KiB) of %s data to loose odb in %f s ( %f Write KiB / s)" % (size_kib, fsize_kib, desc, elapsed_add, size_kib / elapsed_add) + + # reading all at once + st = time() + ostream = ldb.stream(sha) + shadata = ostream.read() + elapsed_readall = time() - st + + stream.seek(0) + assert shadata == stream.getvalue() + print >> sys.stderr, "Read %i KiB of %s data at once from loose odb in %f s ( %f Read KiB / s)" % (size_kib, desc, elapsed_readall, size_kib / elapsed_readall) + + + # reading in chunks of 1 MiB + cs = 512*1000 + chunks = list() + st = time() + ostream = ldb.stream(sha) + while True: + data = ostream.read(cs) + chunks.append(data) + if len(data) < cs: + break + # END read in chunks + elapsed_readchunks = time() - st + + stream.seek(0) + assert ''.join(chunks) == stream.getvalue() + + cs_kib = cs / 1000 + print >> sys.stderr, "Read %i KiB of %s data in %i KiB chunks from loose odb in %f s ( %f Read KiB / s)" % (size_kib, desc, cs_kib, elapsed_readchunks, size_kib / elapsed_readchunks) + + # del db file so we keep something to do + os.remove(db_file) + # END for each randomization factor + + + # multi-threaded mode + # want two, should be supported by most of todays cpus + pool.set_size(2) + total_kib = 0 + nsios = len(string_ios) + for stream in string_ios: + stream.seek(0) + total_kib += len(stream.getvalue()) / 1000 + # END rewind + + def istream_iter(): + for stream in string_ios: + stream.seek(0) + yield IStream(str_blob_type, len(stream.getvalue()), stream) + # END for each stream + # END util + + # write multiple objects at once, involving concurrent compression + reader = IteratorReader(istream_iter()) + istream_reader = ldb.store_async(reader) + istream_reader.task().max_chunksize = 1 + + st = time() + istreams = istream_reader.read(nsios) + assert len(istreams) == nsios + elapsed = time() - st + + print >> sys.stderr, "Threads(%i): Compressed %i KiB of data in loose odb in %f s ( %f Write KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) + + # decompress multiple at once, by reading them + # chunk size is not important as the stream will not really be decompressed + + # until its read + istream_reader = IteratorReader(iter([ i.binsha for i in istreams ])) + ostream_reader = ldb.stream_async(istream_reader) + + chunk_task = TestStreamReader(ostream_reader, "chunker", None) + output_reader = pool.add_task(chunk_task) + output_reader.task().max_chunksize = 1 + + st = time() + assert len(output_reader.read(nsios)) == nsios + elapsed = time() - st + + print >> sys.stderr, "Threads(%i): Decompressed %i KiB of data in loose odb in %f s ( %f Read KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) + + # store the files, and read them back. For the reading, we use a task + # as well which is chunked into one item per task. Reading all will + # very quickly result in two threads handling two bytestreams of + # chained compression/decompression streams + reader = IteratorReader(istream_iter()) + istream_reader = ldb.store_async(reader) + istream_reader.task().max_chunksize = 1 + + istream_to_sha = lambda items: [ i.binsha for i in items ] + istream_reader.set_post_cb(istream_to_sha) + + ostream_reader = ldb.stream_async(istream_reader) + + chunk_task = TestStreamReader(ostream_reader, "chunker", None) + output_reader = pool.add_task(chunk_task) + output_reader.max_chunksize = 1 + + st = time() + assert len(output_reader.read(nsios)) == nsios + elapsed = time() - st + + print >> sys.stderr, "Threads(%i): Compressed and decompressed and read %i KiB of data in loose odb in %f s ( %f Combined KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) diff --git a/gitdb/test/test_base.py b/gitdb/test/test_base.py index 1b20faf87..d4ce428c3 100644 --- a/gitdb/test/test_base.py +++ b/gitdb/test/test_base.py @@ -4,95 +4,95 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Test for object db""" from lib import ( - TestBase, - DummyStream, - DeriveTest, - ) + TestBase, + DummyStream, + DeriveTest, + ) from gitdb import * from gitdb.util import ( - NULL_BIN_SHA - ) + NULL_BIN_SHA + ) from gitdb.typ import ( - str_blob_type - ) + str_blob_type + ) class TestBaseTypes(TestBase): - - def test_streams(self): - # test info - sha = NULL_BIN_SHA - s = 20 - blob_id = 3 - - info = OInfo(sha, str_blob_type, s) - assert info.binsha == sha - assert info.type == str_blob_type - assert info.type_id == blob_id - assert info.size == s - - # test pack info - # provides type_id - pinfo = OPackInfo(0, blob_id, s) - assert pinfo.type == str_blob_type - assert pinfo.type_id == blob_id - assert pinfo.pack_offset == 0 - - dpinfo = ODeltaPackInfo(0, blob_id, s, sha) - assert dpinfo.type == str_blob_type - assert dpinfo.type_id == blob_id - assert dpinfo.delta_info == sha - assert dpinfo.pack_offset == 0 - - - # test ostream - stream = DummyStream() - ostream = OStream(*(info + (stream, ))) - assert ostream.stream is stream - ostream.read(15) - stream._assert() - assert stream.bytes == 15 - ostream.read(20) - assert stream.bytes == 20 - - # test packstream - postream = OPackStream(*(pinfo + (stream, ))) - assert postream.stream is stream - postream.read(10) - stream._assert() - assert stream.bytes == 10 - - # test deltapackstream - dpostream = ODeltaPackStream(*(dpinfo + (stream, ))) - dpostream.stream is stream - dpostream.read(5) - stream._assert() - assert stream.bytes == 5 - - # derive with own args - DeriveTest(sha, str_blob_type, s, stream, 'mine',myarg = 3)._assert() - - # test istream - istream = IStream(str_blob_type, s, stream) - assert istream.binsha == None - istream.binsha = sha - assert istream.binsha == sha - - assert len(istream.binsha) == 20 - assert len(istream.hexsha) == 40 - - assert istream.size == s - istream.size = s * 2 - istream.size == s * 2 - assert istream.type == str_blob_type - istream.type = "something" - assert istream.type == "something" - assert istream.stream is stream - istream.stream = None - assert istream.stream is None - - assert istream.error is None - istream.error = Exception() - assert isinstance(istream.error, Exception) + + def test_streams(self): + # test info + sha = NULL_BIN_SHA + s = 20 + blob_id = 3 + + info = OInfo(sha, str_blob_type, s) + assert info.binsha == sha + assert info.type == str_blob_type + assert info.type_id == blob_id + assert info.size == s + + # test pack info + # provides type_id + pinfo = OPackInfo(0, blob_id, s) + assert pinfo.type == str_blob_type + assert pinfo.type_id == blob_id + assert pinfo.pack_offset == 0 + + dpinfo = ODeltaPackInfo(0, blob_id, s, sha) + assert dpinfo.type == str_blob_type + assert dpinfo.type_id == blob_id + assert dpinfo.delta_info == sha + assert dpinfo.pack_offset == 0 + + + # test ostream + stream = DummyStream() + ostream = OStream(*(info + (stream, ))) + assert ostream.stream is stream + ostream.read(15) + stream._assert() + assert stream.bytes == 15 + ostream.read(20) + assert stream.bytes == 20 + + # test packstream + postream = OPackStream(*(pinfo + (stream, ))) + assert postream.stream is stream + postream.read(10) + stream._assert() + assert stream.bytes == 10 + + # test deltapackstream + dpostream = ODeltaPackStream(*(dpinfo + (stream, ))) + dpostream.stream is stream + dpostream.read(5) + stream._assert() + assert stream.bytes == 5 + + # derive with own args + DeriveTest(sha, str_blob_type, s, stream, 'mine',myarg = 3)._assert() + + # test istream + istream = IStream(str_blob_type, s, stream) + assert istream.binsha == None + istream.binsha = sha + assert istream.binsha == sha + + assert len(istream.binsha) == 20 + assert len(istream.hexsha) == 40 + + assert istream.size == s + istream.size = s * 2 + istream.size == s * 2 + assert istream.type == str_blob_type + istream.type = "something" + assert istream.type == "something" + assert istream.stream is stream + istream.stream = None + assert istream.stream is None + + assert istream.error is None + istream.error = Exception() + assert isinstance(istream.error, Exception) diff --git a/gitdb/test/test_example.py b/gitdb/test/test_example.py index 753177560..611ae4299 100644 --- a/gitdb/test/test_example.py +++ b/gitdb/test/test_example.py @@ -7,58 +7,58 @@ from gitdb import IStream from gitdb.db import LooseObjectDB from gitdb.util import pool - + from cStringIO import StringIO from async import IteratorReader - + class TestExamples(TestBase): - - def test_base(self): - ldb = LooseObjectDB(fixture_path("../../../.git/objects")) - - for sha1 in ldb.sha_iter(): - oinfo = ldb.info(sha1) - ostream = ldb.stream(sha1) - assert oinfo[:3] == ostream[:3] - - assert len(ostream.read()) == ostream.size - assert ldb.has_object(oinfo.binsha) - # END for each sha in database - # assure we close all files - try: - del(ostream) - del(oinfo) - except UnboundLocalError: - pass - # END ignore exception if there are no loose objects - - data = "my data" - istream = IStream("blob", len(data), StringIO(data)) - - # the object does not yet have a sha - assert istream.binsha is None - ldb.store(istream) - # now the sha is set - assert len(istream.binsha) == 20 - assert ldb.has_object(istream.binsha) - - - # async operation - # Create a reader from an iterator - reader = IteratorReader(ldb.sha_iter()) - - # get reader for object streams - info_reader = ldb.stream_async(reader) - - # read one - info = info_reader.read(1)[0] - - # read all the rest until depletion - ostreams = info_reader.read() - - # set the pool to use two threads - pool.set_size(2) - - # synchronize the mode of operation - pool.set_size(0) + + def test_base(self): + ldb = LooseObjectDB(fixture_path("../../../.git/objects")) + + for sha1 in ldb.sha_iter(): + oinfo = ldb.info(sha1) + ostream = ldb.stream(sha1) + assert oinfo[:3] == ostream[:3] + + assert len(ostream.read()) == ostream.size + assert ldb.has_object(oinfo.binsha) + # END for each sha in database + # assure we close all files + try: + del(ostream) + del(oinfo) + except UnboundLocalError: + pass + # END ignore exception if there are no loose objects + + data = "my data" + istream = IStream("blob", len(data), StringIO(data)) + + # the object does not yet have a sha + assert istream.binsha is None + ldb.store(istream) + # now the sha is set + assert len(istream.binsha) == 20 + assert ldb.has_object(istream.binsha) + + + # async operation + # Create a reader from an iterator + reader = IteratorReader(ldb.sha_iter()) + + # get reader for object streams + info_reader = ldb.stream_async(reader) + + # read one + info = info_reader.read(1)[0] + + # read all the rest until depletion + ostreams = info_reader.read() + + # set the pool to use two threads + pool.set_size(2) + + # synchronize the mode of operation + pool.set_size(0) diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index 4a7f1caf2..779155a2a 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -4,23 +4,23 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Test everything about packs reading and writing""" from lib import ( - TestBase, - with_rw_directory, - with_packs_rw, - fixture_path - ) + TestBase, + with_rw_directory, + with_packs_rw, + fixture_path + ) from gitdb.stream import DeltaApplyReader from gitdb.pack import ( - PackEntity, - PackIndexFile, - PackFile - ) + PackEntity, + PackIndexFile, + PackFile + ) from gitdb.base import ( - OInfo, - OStream, - ) + OInfo, + OStream, + ) from gitdb.fun import delta_types from gitdb.exc import UnsupportedOperation @@ -35,213 +35,213 @@ #{ Utilities def bin_sha_from_filename(filename): - return to_bin_sha(os.path.splitext(os.path.basename(filename))[0][5:]) + return to_bin_sha(os.path.splitext(os.path.basename(filename))[0][5:]) #} END utilities class TestPack(TestBase): - - packindexfile_v1 = (fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx'), 1, 67) - packindexfile_v2 = (fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx'), 2, 30) - packindexfile_v2_3_ascii = (fixture_path('packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx'), 2, 42) - packfile_v2_1 = (fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack'), 2, packindexfile_v1[2]) - packfile_v2_2 = (fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.pack'), 2, packindexfile_v2[2]) - packfile_v2_3_ascii = (fixture_path('packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.pack'), 2, packindexfile_v2_3_ascii[2]) - - - def _assert_index_file(self, index, version, size): - assert index.packfile_checksum() != index.indexfile_checksum() - assert len(index.packfile_checksum()) == 20 - assert len(index.indexfile_checksum()) == 20 - assert index.version() == version - assert index.size() == size - assert len(index.offsets()) == size - - # get all data of all objects - for oidx in xrange(index.size()): - sha = index.sha(oidx) - assert oidx == index.sha_to_index(sha) - - entry = index.entry(oidx) - assert len(entry) == 3 - - assert entry[0] == index.offset(oidx) - assert entry[1] == sha - assert entry[2] == index.crc(oidx) - - # verify partial sha - for l in (4,8,11,17,20): - assert index.partial_sha_to_index(sha[:l], l*2) == oidx - - # END for each object index in indexfile - self.failUnlessRaises(ValueError, index.partial_sha_to_index, "\0", 2) - - - def _assert_pack_file(self, pack, version, size): - assert pack.version() == 2 - assert pack.size() == size - assert len(pack.checksum()) == 20 - - num_obj = 0 - for obj in pack.stream_iter(): - num_obj += 1 - info = pack.info(obj.pack_offset) - stream = pack.stream(obj.pack_offset) - - assert info.pack_offset == stream.pack_offset - assert info.type_id == stream.type_id - assert hasattr(stream, 'read') - - # it should be possible to read from both streams - assert obj.read() == stream.read() - - streams = pack.collect_streams(obj.pack_offset) - assert streams - - # read the stream - try: - dstream = DeltaApplyReader.new(streams) - except ValueError: - # ignore these, old git versions use only ref deltas, - # which we havent resolved ( as we are without an index ) - # Also ignore non-delta streams - continue - # END get deltastream - - # read all - data = dstream.read() - assert len(data) == dstream.size - - # test seek - dstream.seek(0) - assert dstream.read() == data - - - # read chunks - # NOTE: the current implementation is safe, it basically transfers - # all calls to the underlying memory map - - # END for each object - assert num_obj == size - - - def test_pack_index(self): - # check version 1 and 2 - for indexfile, version, size in (self.packindexfile_v1, self.packindexfile_v2): - index = PackIndexFile(indexfile) - self._assert_index_file(index, version, size) - # END run tests - - def test_pack(self): - # there is this special version 3, but apparently its like 2 ... - for packfile, version, size in (self.packfile_v2_3_ascii, self.packfile_v2_1, self.packfile_v2_2): - pack = PackFile(packfile) - self._assert_pack_file(pack, version, size) - # END for each pack to test - - @with_rw_directory - def test_pack_entity(self, rw_dir): - pack_objs = list() - for packinfo, indexinfo in ( (self.packfile_v2_1, self.packindexfile_v1), - (self.packfile_v2_2, self.packindexfile_v2), - (self.packfile_v2_3_ascii, self.packindexfile_v2_3_ascii)): - packfile, version, size = packinfo - indexfile, version, size = indexinfo - entity = PackEntity(packfile) - assert entity.pack().path() == packfile - assert entity.index().path() == indexfile - pack_objs.extend(entity.stream_iter()) - - count = 0 - for info, stream in izip(entity.info_iter(), entity.stream_iter()): - count += 1 - assert info.binsha == stream.binsha - assert len(info.binsha) == 20 - assert info.type_id == stream.type_id - assert info.size == stream.size - - # we return fully resolved items, which is implied by the sha centric access - assert not info.type_id in delta_types - - # try all calls - assert len(entity.collect_streams(info.binsha)) - oinfo = entity.info(info.binsha) - assert isinstance(oinfo, OInfo) - assert oinfo.binsha is not None - ostream = entity.stream(info.binsha) - assert isinstance(ostream, OStream) - assert ostream.binsha is not None - - # verify the stream - try: - assert entity.is_valid_stream(info.binsha, use_crc=True) - except UnsupportedOperation: - pass - # END ignore version issues - assert entity.is_valid_stream(info.binsha, use_crc=False) - # END for each info, stream tuple - assert count == size - - # END for each entity - - # pack writing - write all packs into one - # index path can be None - pack_path = tempfile.mktemp('', "pack", rw_dir) - index_path = tempfile.mktemp('', 'index', rw_dir) - iteration = 0 - def rewind_streams(): - for obj in pack_objs: - obj.stream.seek(0) - #END utility - for ppath, ipath, num_obj in zip((pack_path, )*2, (index_path, None), (len(pack_objs), None)): - pfile = open(ppath, 'wb') - iwrite = None - if ipath: - ifile = open(ipath, 'wb') - iwrite = ifile.write - #END handle ip - - # make sure we rewind the streams ... we work on the same objects over and over again - if iteration > 0: - rewind_streams() - #END rewind streams - iteration += 1 - - pack_sha, index_sha = PackEntity.write_pack(pack_objs, pfile.write, iwrite, object_count=num_obj) - pfile.close() - assert os.path.getsize(ppath) > 100 - - # verify pack - pf = PackFile(ppath) - assert pf.size() == len(pack_objs) - assert pf.version() == PackFile.pack_version_default - assert pf.checksum() == pack_sha - - # verify index - if ipath is not None: - ifile.close() - assert os.path.getsize(ipath) > 100 - idx = PackIndexFile(ipath) - assert idx.version() == PackIndexFile.index_version_default - assert idx.packfile_checksum() == pack_sha - assert idx.indexfile_checksum() == index_sha - assert idx.size() == len(pack_objs) - #END verify files exist - #END for each packpath, indexpath pair - - # verify the packs throughly - rewind_streams() - entity = PackEntity.create(pack_objs, rw_dir) - count = 0 - for info in entity.info_iter(): - count += 1 - for use_crc in range(2): - assert entity.is_valid_stream(info.binsha, use_crc) - # END for each crc mode - #END for each info - assert count == len(pack_objs) - - - def test_pack_64(self): - # TODO: hex-edit a pack helping us to verify that we can handle 64 byte offsets - # of course without really needing such a huge pack - raise SkipTest() + + packindexfile_v1 = (fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx'), 1, 67) + packindexfile_v2 = (fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx'), 2, 30) + packindexfile_v2_3_ascii = (fixture_path('packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx'), 2, 42) + packfile_v2_1 = (fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack'), 2, packindexfile_v1[2]) + packfile_v2_2 = (fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.pack'), 2, packindexfile_v2[2]) + packfile_v2_3_ascii = (fixture_path('packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.pack'), 2, packindexfile_v2_3_ascii[2]) + + + def _assert_index_file(self, index, version, size): + assert index.packfile_checksum() != index.indexfile_checksum() + assert len(index.packfile_checksum()) == 20 + assert len(index.indexfile_checksum()) == 20 + assert index.version() == version + assert index.size() == size + assert len(index.offsets()) == size + + # get all data of all objects + for oidx in xrange(index.size()): + sha = index.sha(oidx) + assert oidx == index.sha_to_index(sha) + + entry = index.entry(oidx) + assert len(entry) == 3 + + assert entry[0] == index.offset(oidx) + assert entry[1] == sha + assert entry[2] == index.crc(oidx) + + # verify partial sha + for l in (4,8,11,17,20): + assert index.partial_sha_to_index(sha[:l], l*2) == oidx + + # END for each object index in indexfile + self.failUnlessRaises(ValueError, index.partial_sha_to_index, "\0", 2) + + + def _assert_pack_file(self, pack, version, size): + assert pack.version() == 2 + assert pack.size() == size + assert len(pack.checksum()) == 20 + + num_obj = 0 + for obj in pack.stream_iter(): + num_obj += 1 + info = pack.info(obj.pack_offset) + stream = pack.stream(obj.pack_offset) + + assert info.pack_offset == stream.pack_offset + assert info.type_id == stream.type_id + assert hasattr(stream, 'read') + + # it should be possible to read from both streams + assert obj.read() == stream.read() + + streams = pack.collect_streams(obj.pack_offset) + assert streams + + # read the stream + try: + dstream = DeltaApplyReader.new(streams) + except ValueError: + # ignore these, old git versions use only ref deltas, + # which we havent resolved ( as we are without an index ) + # Also ignore non-delta streams + continue + # END get deltastream + + # read all + data = dstream.read() + assert len(data) == dstream.size + + # test seek + dstream.seek(0) + assert dstream.read() == data + + + # read chunks + # NOTE: the current implementation is safe, it basically transfers + # all calls to the underlying memory map + + # END for each object + assert num_obj == size + + + def test_pack_index(self): + # check version 1 and 2 + for indexfile, version, size in (self.packindexfile_v1, self.packindexfile_v2): + index = PackIndexFile(indexfile) + self._assert_index_file(index, version, size) + # END run tests + + def test_pack(self): + # there is this special version 3, but apparently its like 2 ... + for packfile, version, size in (self.packfile_v2_3_ascii, self.packfile_v2_1, self.packfile_v2_2): + pack = PackFile(packfile) + self._assert_pack_file(pack, version, size) + # END for each pack to test + + @with_rw_directory + def test_pack_entity(self, rw_dir): + pack_objs = list() + for packinfo, indexinfo in ( (self.packfile_v2_1, self.packindexfile_v1), + (self.packfile_v2_2, self.packindexfile_v2), + (self.packfile_v2_3_ascii, self.packindexfile_v2_3_ascii)): + packfile, version, size = packinfo + indexfile, version, size = indexinfo + entity = PackEntity(packfile) + assert entity.pack().path() == packfile + assert entity.index().path() == indexfile + pack_objs.extend(entity.stream_iter()) + + count = 0 + for info, stream in izip(entity.info_iter(), entity.stream_iter()): + count += 1 + assert info.binsha == stream.binsha + assert len(info.binsha) == 20 + assert info.type_id == stream.type_id + assert info.size == stream.size + + # we return fully resolved items, which is implied by the sha centric access + assert not info.type_id in delta_types + + # try all calls + assert len(entity.collect_streams(info.binsha)) + oinfo = entity.info(info.binsha) + assert isinstance(oinfo, OInfo) + assert oinfo.binsha is not None + ostream = entity.stream(info.binsha) + assert isinstance(ostream, OStream) + assert ostream.binsha is not None + + # verify the stream + try: + assert entity.is_valid_stream(info.binsha, use_crc=True) + except UnsupportedOperation: + pass + # END ignore version issues + assert entity.is_valid_stream(info.binsha, use_crc=False) + # END for each info, stream tuple + assert count == size + + # END for each entity + + # pack writing - write all packs into one + # index path can be None + pack_path = tempfile.mktemp('', "pack", rw_dir) + index_path = tempfile.mktemp('', 'index', rw_dir) + iteration = 0 + def rewind_streams(): + for obj in pack_objs: + obj.stream.seek(0) + #END utility + for ppath, ipath, num_obj in zip((pack_path, )*2, (index_path, None), (len(pack_objs), None)): + pfile = open(ppath, 'wb') + iwrite = None + if ipath: + ifile = open(ipath, 'wb') + iwrite = ifile.write + #END handle ip + + # make sure we rewind the streams ... we work on the same objects over and over again + if iteration > 0: + rewind_streams() + #END rewind streams + iteration += 1 + + pack_sha, index_sha = PackEntity.write_pack(pack_objs, pfile.write, iwrite, object_count=num_obj) + pfile.close() + assert os.path.getsize(ppath) > 100 + + # verify pack + pf = PackFile(ppath) + assert pf.size() == len(pack_objs) + assert pf.version() == PackFile.pack_version_default + assert pf.checksum() == pack_sha + + # verify index + if ipath is not None: + ifile.close() + assert os.path.getsize(ipath) > 100 + idx = PackIndexFile(ipath) + assert idx.version() == PackIndexFile.index_version_default + assert idx.packfile_checksum() == pack_sha + assert idx.indexfile_checksum() == index_sha + assert idx.size() == len(pack_objs) + #END verify files exist + #END for each packpath, indexpath pair + + # verify the packs throughly + rewind_streams() + entity = PackEntity.create(pack_objs, rw_dir) + count = 0 + for info in entity.info_iter(): + count += 1 + for use_crc in range(2): + assert entity.is_valid_stream(info.binsha, use_crc) + # END for each crc mode + #END for each info + assert count == len(pack_objs) + + + def test_pack_64(self): + # TODO: hex-edit a pack helping us to verify that we can handle 64 byte offsets + # of course without really needing such a huge pack + raise SkipTest() diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index 523f77056..6dc27463c 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -4,24 +4,24 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Test for object db""" from lib import ( - TestBase, - DummyStream, - Sha1Writer, - make_bytes, - make_object, - fixture_path - ) + TestBase, + DummyStream, + Sha1Writer, + make_bytes, + make_object, + fixture_path + ) from gitdb import * from gitdb.util import ( - NULL_HEX_SHA, - hex_to_bin - ) + NULL_HEX_SHA, + hex_to_bin + ) from gitdb.util import zlib from gitdb.typ import ( - str_blob_type - ) + str_blob_type + ) import time import tempfile @@ -31,124 +31,124 @@ class TestStream(TestBase): - """Test stream classes""" - - data_sizes = (15, 10000, 1000*1024+512) - - def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): - """Make stream tests - the orig_stream is seekable, allowing it to be - rewound and reused - :param cdata: the data we expect to read from stream, the contents - :param rewind_stream: function called to rewind the stream to make it ready - for reuse""" - ns = 10 - assert len(cdata) > ns-1, "Data must be larger than %i, was %i" % (ns, len(cdata)) - - # read in small steps - ss = len(cdata) / ns - for i in range(ns): - data = stream.read(ss) - chunk = cdata[i*ss:(i+1)*ss] - assert data == chunk - # END for each step - rest = stream.read() - if rest: - assert rest == cdata[-len(rest):] - # END handle rest - - if isinstance(stream, DecompressMemMapReader): - assert len(stream.data()) == stream.compressed_bytes_read() - # END handle special type - - rewind_stream(stream) - - # read everything - rdata = stream.read() - assert rdata == cdata - - if isinstance(stream, DecompressMemMapReader): - assert len(stream.data()) == stream.compressed_bytes_read() - # END handle special type - - def test_decompress_reader(self): - for close_on_deletion in range(2): - for with_size in range(2): - for ds in self.data_sizes: - cdata = make_bytes(ds, randomize=False) - - # zdata = zipped actual data - # cdata = original content data - - # create reader - if with_size: - # need object data - zdata = zlib.compress(make_object(str_blob_type, cdata)) - type, size, reader = DecompressMemMapReader.new(zdata, close_on_deletion) - assert size == len(cdata) - assert type == str_blob_type - - # even if we don't set the size, it will be set automatically on first read - test_reader = DecompressMemMapReader(zdata, close_on_deletion=False) - assert test_reader._s == len(cdata) - else: - # here we need content data - zdata = zlib.compress(cdata) - reader = DecompressMemMapReader(zdata, close_on_deletion, len(cdata)) - assert reader._s == len(cdata) - # END get reader - - self._assert_stream_reader(reader, cdata, lambda r: r.seek(0)) - - # put in a dummy stream for closing - dummy = DummyStream() - reader._m = dummy - - assert not dummy.closed - del(reader) - assert dummy.closed == close_on_deletion - # END for each datasize - # END whether size should be used - # END whether stream should be closed when deleted - - def test_sha_writer(self): - writer = Sha1Writer() - assert 2 == writer.write("hi") - assert len(writer.sha(as_hex=1)) == 40 - assert len(writer.sha(as_hex=0)) == 20 - - # make sure it does something ;) - prev_sha = writer.sha() - writer.write("hi again") - assert writer.sha() != prev_sha - - def test_compressed_writer(self): - for ds in self.data_sizes: - fd, path = tempfile.mkstemp() - ostream = FDCompressedSha1Writer(fd) - data = make_bytes(ds, randomize=False) - - # for now, just a single write, code doesn't care about chunking - assert len(data) == ostream.write(data) - ostream.close() - - # its closed already - self.failUnlessRaises(OSError, os.close, fd) - - # read everything back, compare to data we zip - fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)) - written_data = os.read(fd, os.path.getsize(path)) - assert len(written_data) == os.path.getsize(path) - os.close(fd) - assert written_data == zlib.compress(data, 1) # best speed - - os.remove(path) - # END for each os - - def test_decompress_reader_special_case(self): - odb = LooseObjectDB(fixture_path('objects')) - ostream = odb.stream(hex_to_bin('7bb839852ed5e3a069966281bb08d50012fb309b')) - - # if there is a bug, we will be missing one byte exactly ! - data = ostream.read() - assert len(data) == ostream.size - + """Test stream classes""" + + data_sizes = (15, 10000, 1000*1024+512) + + def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): + """Make stream tests - the orig_stream is seekable, allowing it to be + rewound and reused + :param cdata: the data we expect to read from stream, the contents + :param rewind_stream: function called to rewind the stream to make it ready + for reuse""" + ns = 10 + assert len(cdata) > ns-1, "Data must be larger than %i, was %i" % (ns, len(cdata)) + + # read in small steps + ss = len(cdata) / ns + for i in range(ns): + data = stream.read(ss) + chunk = cdata[i*ss:(i+1)*ss] + assert data == chunk + # END for each step + rest = stream.read() + if rest: + assert rest == cdata[-len(rest):] + # END handle rest + + if isinstance(stream, DecompressMemMapReader): + assert len(stream.data()) == stream.compressed_bytes_read() + # END handle special type + + rewind_stream(stream) + + # read everything + rdata = stream.read() + assert rdata == cdata + + if isinstance(stream, DecompressMemMapReader): + assert len(stream.data()) == stream.compressed_bytes_read() + # END handle special type + + def test_decompress_reader(self): + for close_on_deletion in range(2): + for with_size in range(2): + for ds in self.data_sizes: + cdata = make_bytes(ds, randomize=False) + + # zdata = zipped actual data + # cdata = original content data + + # create reader + if with_size: + # need object data + zdata = zlib.compress(make_object(str_blob_type, cdata)) + type, size, reader = DecompressMemMapReader.new(zdata, close_on_deletion) + assert size == len(cdata) + assert type == str_blob_type + + # even if we don't set the size, it will be set automatically on first read + test_reader = DecompressMemMapReader(zdata, close_on_deletion=False) + assert test_reader._s == len(cdata) + else: + # here we need content data + zdata = zlib.compress(cdata) + reader = DecompressMemMapReader(zdata, close_on_deletion, len(cdata)) + assert reader._s == len(cdata) + # END get reader + + self._assert_stream_reader(reader, cdata, lambda r: r.seek(0)) + + # put in a dummy stream for closing + dummy = DummyStream() + reader._m = dummy + + assert not dummy.closed + del(reader) + assert dummy.closed == close_on_deletion + # END for each datasize + # END whether size should be used + # END whether stream should be closed when deleted + + def test_sha_writer(self): + writer = Sha1Writer() + assert 2 == writer.write("hi") + assert len(writer.sha(as_hex=1)) == 40 + assert len(writer.sha(as_hex=0)) == 20 + + # make sure it does something ;) + prev_sha = writer.sha() + writer.write("hi again") + assert writer.sha() != prev_sha + + def test_compressed_writer(self): + for ds in self.data_sizes: + fd, path = tempfile.mkstemp() + ostream = FDCompressedSha1Writer(fd) + data = make_bytes(ds, randomize=False) + + # for now, just a single write, code doesn't care about chunking + assert len(data) == ostream.write(data) + ostream.close() + + # its closed already + self.failUnlessRaises(OSError, os.close, fd) + + # read everything back, compare to data we zip + fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)) + written_data = os.read(fd, os.path.getsize(path)) + assert len(written_data) == os.path.getsize(path) + os.close(fd) + assert written_data == zlib.compress(data, 1) # best speed + + os.remove(path) + # END for each os + + def test_decompress_reader_special_case(self): + odb = LooseObjectDB(fixture_path('objects')) + ostream = odb.stream(hex_to_bin('7bb839852ed5e3a069966281bb08d50012fb309b')) + + # if there is a bug, we will be missing one byte exactly ! + data = ostream.read() + assert len(data) == ostream.size + diff --git a/gitdb/test/test_util.py b/gitdb/test/test_util.py index 90f4156b9..35f9f44a7 100644 --- a/gitdb/test/test_util.py +++ b/gitdb/test/test_util.py @@ -8,98 +8,98 @@ from lib import TestBase from gitdb.util import ( - to_hex_sha, - to_bin_sha, - NULL_HEX_SHA, - LockedFD - ) + to_hex_sha, + to_bin_sha, + NULL_HEX_SHA, + LockedFD + ) - + class TestUtils(TestBase): - def test_basics(self): - assert to_hex_sha(NULL_HEX_SHA) == NULL_HEX_SHA - assert len(to_bin_sha(NULL_HEX_SHA)) == 20 - assert to_hex_sha(to_bin_sha(NULL_HEX_SHA)) == NULL_HEX_SHA - - def _cmp_contents(self, file_path, data): - # raise if data from file at file_path - # does not match data string - fp = open(file_path, "rb") - try: - assert fp.read() == data - finally: - fp.close() - - def test_lockedfd(self): - my_file = tempfile.mktemp() - orig_data = "hello" - new_data = "world" - my_file_fp = open(my_file, "wb") - my_file_fp.write(orig_data) - my_file_fp.close() - - try: - lfd = LockedFD(my_file) - lockfilepath = lfd._lockfilepath() - - # cannot end before it was started - self.failUnlessRaises(AssertionError, lfd.rollback) - self.failUnlessRaises(AssertionError, lfd.commit) - - # open for writing - assert not os.path.isfile(lockfilepath) - wfd = lfd.open(write=True) - assert lfd._fd is wfd - assert os.path.isfile(lockfilepath) - - # write data and fail - os.write(wfd, new_data) - lfd.rollback() - assert lfd._fd is None - self._cmp_contents(my_file, orig_data) - assert not os.path.isfile(lockfilepath) - - # additional call doesnt fail - lfd.commit() - lfd.rollback() - - # test reading - lfd = LockedFD(my_file) - rfd = lfd.open(write=False) - assert os.read(rfd, len(orig_data)) == orig_data - - assert os.path.isfile(lockfilepath) - # deletion rolls back - del(lfd) - assert not os.path.isfile(lockfilepath) - - - # write data - concurrently - lfd = LockedFD(my_file) - olfd = LockedFD(my_file) - assert not os.path.isfile(lockfilepath) - wfdstream = lfd.open(write=True, stream=True) # this time as stream - assert os.path.isfile(lockfilepath) - # another one fails - self.failUnlessRaises(IOError, olfd.open) - - wfdstream.write(new_data) - lfd.commit() - assert not os.path.isfile(lockfilepath) - self._cmp_contents(my_file, new_data) - - # could test automatic _end_writing on destruction - finally: - os.remove(my_file) - # END final cleanup - - # try non-existing file for reading - lfd = LockedFD(tempfile.mktemp()) - try: - lfd.open(write=False) - except OSError: - assert not os.path.exists(lfd._lockfilepath()) - else: - self.fail("expected OSError") - # END handle exceptions + def test_basics(self): + assert to_hex_sha(NULL_HEX_SHA) == NULL_HEX_SHA + assert len(to_bin_sha(NULL_HEX_SHA)) == 20 + assert to_hex_sha(to_bin_sha(NULL_HEX_SHA)) == NULL_HEX_SHA + + def _cmp_contents(self, file_path, data): + # raise if data from file at file_path + # does not match data string + fp = open(file_path, "rb") + try: + assert fp.read() == data + finally: + fp.close() + + def test_lockedfd(self): + my_file = tempfile.mktemp() + orig_data = "hello" + new_data = "world" + my_file_fp = open(my_file, "wb") + my_file_fp.write(orig_data) + my_file_fp.close() + + try: + lfd = LockedFD(my_file) + lockfilepath = lfd._lockfilepath() + + # cannot end before it was started + self.failUnlessRaises(AssertionError, lfd.rollback) + self.failUnlessRaises(AssertionError, lfd.commit) + + # open for writing + assert not os.path.isfile(lockfilepath) + wfd = lfd.open(write=True) + assert lfd._fd is wfd + assert os.path.isfile(lockfilepath) + + # write data and fail + os.write(wfd, new_data) + lfd.rollback() + assert lfd._fd is None + self._cmp_contents(my_file, orig_data) + assert not os.path.isfile(lockfilepath) + + # additional call doesnt fail + lfd.commit() + lfd.rollback() + + # test reading + lfd = LockedFD(my_file) + rfd = lfd.open(write=False) + assert os.read(rfd, len(orig_data)) == orig_data + + assert os.path.isfile(lockfilepath) + # deletion rolls back + del(lfd) + assert not os.path.isfile(lockfilepath) + + + # write data - concurrently + lfd = LockedFD(my_file) + olfd = LockedFD(my_file) + assert not os.path.isfile(lockfilepath) + wfdstream = lfd.open(write=True, stream=True) # this time as stream + assert os.path.isfile(lockfilepath) + # another one fails + self.failUnlessRaises(IOError, olfd.open) + + wfdstream.write(new_data) + lfd.commit() + assert not os.path.isfile(lockfilepath) + self._cmp_contents(my_file, new_data) + + # could test automatic _end_writing on destruction + finally: + os.remove(my_file) + # END final cleanup + + # try non-existing file for reading + lfd = LockedFD(tempfile.mktemp()) + try: + lfd.open(write=False) + except OSError: + assert not os.path.exists(lfd._lockfilepath()) + else: + self.fail("expected OSError") + # END handle exceptions diff --git a/gitdb/util.py b/gitdb/util.py index 013f5fc78..1662b662d 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -13,28 +13,28 @@ # in py 2.4, StringIO is only StringI, without write support. # Hence we must use the python implementation for this if sys.version_info[1] < 5: - from StringIO import StringIO + from StringIO import StringIO # END handle python 2.4 try: - import async.mod.zlib as zlib + import async.mod.zlib as zlib except ImportError: - import zlib + import zlib # END try async zlib from async import ThreadPool from smmap import ( - StaticWindowMapManager, - SlidingWindowMapManager, - SlidingWindowMapBuffer - ) + StaticWindowMapManager, + SlidingWindowMapManager, + SlidingWindowMapBuffer + ) # initialize our global memory manager instance # Use it to free cached (and unused) resources. if sys.version_info[1] < 6: - mman = StaticWindowMapManager() + mman = StaticWindowMapManager() else: - mman = SlidingWindowMapManager() + mman = SlidingWindowMapManager() #END handle mman try: @@ -43,19 +43,19 @@ import sha try: - from struct import unpack_from + from struct import unpack_from except ImportError: - from struct import unpack, calcsize - __calcsize_cache = dict() - def unpack_from(fmt, data, offset=0): - try: - size = __calcsize_cache[fmt] - except KeyError: - size = calcsize(fmt) - __calcsize_cache[fmt] = size - # END exception handling - return unpack(fmt, data[offset : offset + size]) - # END own unpack_from implementation + from struct import unpack, calcsize + __calcsize_cache = dict() + def unpack_from(fmt, data, offset=0): + try: + size = __calcsize_cache[fmt] + except KeyError: + size = calcsize(fmt) + __calcsize_cache[fmt] = size + # END exception handling + return unpack(fmt, data[offset : offset + size]) + # END own unpack_from implementation #{ Globals @@ -100,25 +100,25 @@ def unpack_from(fmt, data, offset=0): #{ compatibility stuff ... class _RandomAccessStringIO(object): - """Wrapper to provide required functionality in case memory maps cannot or may - not be used. This is only really required in python 2.4""" - __slots__ = '_sio' - - def __init__(self, buf=''): - self._sio = StringIO(buf) - - def __getattr__(self, attr): - return getattr(self._sio, attr) - - def __len__(self): - return len(self.getvalue()) - - def __getitem__(self, i): - return self.getvalue()[i] - - def __getslice__(self, start, end): - return self.getvalue()[start:end] - + """Wrapper to provide required functionality in case memory maps cannot or may + not be used. This is only really required in python 2.4""" + __slots__ = '_sio' + + def __init__(self, buf=''): + self._sio = StringIO(buf) + + def __getattr__(self, attr): + return getattr(self._sio, attr) + + def __len__(self): + return len(self.getvalue()) + + def __getitem__(self, i): + return self.getvalue()[i] + + def __getslice__(self, start, end): + return self.getvalue()[start:end] + #} END compatibility stuff ... #{ Routines @@ -134,85 +134,85 @@ def make_sha(source=''): return sha1 def allocate_memory(size): - """:return: a file-protocol accessible memory block of the given size""" - if size == 0: - return _RandomAccessStringIO('') - # END handle empty chunks gracefully - - try: - return mmap.mmap(-1, size) # read-write by default - except EnvironmentError: - # setup real memory instead - # this of course may fail if the amount of memory is not available in - # one chunk - would only be the case in python 2.4, being more likely on - # 32 bit systems. - return _RandomAccessStringIO("\0"*size) - # END handle memory allocation - + """:return: a file-protocol accessible memory block of the given size""" + if size == 0: + return _RandomAccessStringIO('') + # END handle empty chunks gracefully + + try: + return mmap.mmap(-1, size) # read-write by default + except EnvironmentError: + # setup real memory instead + # this of course may fail if the amount of memory is not available in + # one chunk - would only be the case in python 2.4, being more likely on + # 32 bit systems. + return _RandomAccessStringIO("\0"*size) + # END handle memory allocation + def file_contents_ro(fd, stream=False, allow_mmap=True): - """:return: read-only contents of the file represented by the file descriptor fd - - :param fd: file descriptor opened for reading - :param stream: if False, random access is provided, otherwise the stream interface - is provided. - :param allow_mmap: if True, its allowed to map the contents into memory, which - allows large files to be handled and accessed efficiently. The file-descriptor - will change its position if this is False""" - try: - if allow_mmap: - # supports stream and random access - try: - return mmap.mmap(fd, 0, access=mmap.ACCESS_READ) - except EnvironmentError: - # python 2.4 issue, 0 wants to be the actual size - return mmap.mmap(fd, os.fstat(fd).st_size, access=mmap.ACCESS_READ) - # END handle python 2.4 - except OSError: - pass - # END exception handling - - # read manully - contents = os.read(fd, os.fstat(fd).st_size) - if stream: - return _RandomAccessStringIO(contents) - return contents - + """:return: read-only contents of the file represented by the file descriptor fd + + :param fd: file descriptor opened for reading + :param stream: if False, random access is provided, otherwise the stream interface + is provided. + :param allow_mmap: if True, its allowed to map the contents into memory, which + allows large files to be handled and accessed efficiently. The file-descriptor + will change its position if this is False""" + try: + if allow_mmap: + # supports stream and random access + try: + return mmap.mmap(fd, 0, access=mmap.ACCESS_READ) + except EnvironmentError: + # python 2.4 issue, 0 wants to be the actual size + return mmap.mmap(fd, os.fstat(fd).st_size, access=mmap.ACCESS_READ) + # END handle python 2.4 + except OSError: + pass + # END exception handling + + # read manully + contents = os.read(fd, os.fstat(fd).st_size) + if stream: + return _RandomAccessStringIO(contents) + return contents + def file_contents_ro_filepath(filepath, stream=False, allow_mmap=True, flags=0): - """Get the file contents at filepath as fast as possible - - :return: random access compatible memory of the given filepath - :param stream: see ``file_contents_ro`` - :param allow_mmap: see ``file_contents_ro`` - :param flags: additional flags to pass to os.open - :raise OSError: If the file could not be opened - - **Note** for now we don't try to use O_NOATIME directly as the right value needs to be - shared per database in fact. It only makes a real difference for loose object - databases anyway, and they use it with the help of the ``flags`` parameter""" - fd = os.open(filepath, os.O_RDONLY|getattr(os, 'O_BINARY', 0)|flags) - try: - return file_contents_ro(fd, stream, allow_mmap) - finally: - close(fd) - # END assure file is closed - + """Get the file contents at filepath as fast as possible + + :return: random access compatible memory of the given filepath + :param stream: see ``file_contents_ro`` + :param allow_mmap: see ``file_contents_ro`` + :param flags: additional flags to pass to os.open + :raise OSError: If the file could not be opened + + **Note** for now we don't try to use O_NOATIME directly as the right value needs to be + shared per database in fact. It only makes a real difference for loose object + databases anyway, and they use it with the help of the ``flags`` parameter""" + fd = os.open(filepath, os.O_RDONLY|getattr(os, 'O_BINARY', 0)|flags) + try: + return file_contents_ro(fd, stream, allow_mmap) + finally: + close(fd) + # END assure file is closed + def sliding_ro_buffer(filepath, flags=0): - """ - :return: a buffer compatible object which uses our mapped memory manager internally - ready to read the whole given filepath""" - return SlidingWindowMapBuffer(mman.make_cursor(filepath), flags=flags) - + """ + :return: a buffer compatible object which uses our mapped memory manager internally + ready to read the whole given filepath""" + return SlidingWindowMapBuffer(mman.make_cursor(filepath), flags=flags) + def to_hex_sha(sha): - """:return: hexified version of sha""" - if len(sha) == 40: - return sha - return bin_to_hex(sha) - + """:return: hexified version of sha""" + if len(sha) == 40: + return sha + return bin_to_hex(sha) + def to_bin_sha(sha): - if len(sha) == 20: - return sha - return hex_to_bin(sha) + if len(sha) == 20: + return sha + return hex_to_bin(sha) #} END routines @@ -221,162 +221,162 @@ def to_bin_sha(sha): #{ Utilities class LazyMixin(object): - """ - Base class providing an interface to lazily retrieve attribute values upon - first access. If slots are used, memory will only be reserved once the attribute - is actually accessed and retrieved the first time. All future accesses will - return the cached value as stored in the Instance's dict or slot. - """ - - __slots__ = tuple() - - def __getattr__(self, attr): - """ - Whenever an attribute is requested that we do not know, we allow it - to be created and set. Next time the same attribute is reqeusted, it is simply - returned from our dict/slots. """ - self._set_cache_(attr) - # will raise in case the cache was not created - return object.__getattribute__(self, attr) - - def _set_cache_(self, attr): - """ - This method should be overridden in the derived class. - It should check whether the attribute named by attr can be created - and cached. Do nothing if you do not know the attribute or call your subclass - - The derived class may create as many additional attributes as it deems - necessary in case a git command returns more information than represented - in the single attribute.""" - pass - - + """ + Base class providing an interface to lazily retrieve attribute values upon + first access. If slots are used, memory will only be reserved once the attribute + is actually accessed and retrieved the first time. All future accesses will + return the cached value as stored in the Instance's dict or slot. + """ + + __slots__ = tuple() + + def __getattr__(self, attr): + """ + Whenever an attribute is requested that we do not know, we allow it + to be created and set. Next time the same attribute is reqeusted, it is simply + returned from our dict/slots. """ + self._set_cache_(attr) + # will raise in case the cache was not created + return object.__getattribute__(self, attr) + + def _set_cache_(self, attr): + """ + This method should be overridden in the derived class. + It should check whether the attribute named by attr can be created + and cached. Do nothing if you do not know the attribute or call your subclass + + The derived class may create as many additional attributes as it deems + necessary in case a git command returns more information than represented + in the single attribute.""" + pass + + class LockedFD(object): - """ - This class facilitates a safe read and write operation to a file on disk. - If we write to 'file', we obtain a lock file at 'file.lock' and write to - that instead. If we succeed, the lock file will be renamed to overwrite - the original file. - - When reading, we obtain a lock file, but to prevent other writers from - succeeding while we are reading the file. - - This type handles error correctly in that it will assure a consistent state - on destruction. - - **note** with this setup, parallel reading is not possible""" - __slots__ = ("_filepath", '_fd', '_write') - - def __init__(self, filepath): - """Initialize an instance with the givne filepath""" - self._filepath = filepath - self._fd = None - self._write = None # if True, we write a file - - def __del__(self): - # will do nothing if the file descriptor is already closed - if self._fd is not None: - self.rollback() - - def _lockfilepath(self): - return "%s.lock" % self._filepath - - def open(self, write=False, stream=False): - """ - Open the file descriptor for reading or writing, both in binary mode. - - :param write: if True, the file descriptor will be opened for writing. Other - wise it will be opened read-only. - :param stream: if True, the file descriptor will be wrapped into a simple stream - object which supports only reading or writing - :return: fd to read from or write to. It is still maintained by this instance - and must not be closed directly - :raise IOError: if the lock could not be retrieved - :raise OSError: If the actual file could not be opened for reading - - **note** must only be called once""" - if self._write is not None: - raise AssertionError("Called %s multiple times" % self.open) - - self._write = write - - # try to open the lock file - binary = getattr(os, 'O_BINARY', 0) - lockmode = os.O_WRONLY | os.O_CREAT | os.O_EXCL | binary - try: - fd = os.open(self._lockfilepath(), lockmode, 0600) - if not write: - os.close(fd) - else: - self._fd = fd - # END handle file descriptor - except OSError: - raise IOError("Lock at %r could not be obtained" % self._lockfilepath()) - # END handle lock retrieval - - # open actual file if required - if self._fd is None: - # we could specify exlusive here, as we obtained the lock anyway - try: - self._fd = os.open(self._filepath, os.O_RDONLY | binary) - except: - # assure we release our lockfile - os.remove(self._lockfilepath()) - raise - # END handle lockfile - # END open descriptor for reading - - if stream: - # need delayed import - from stream import FDStream - return FDStream(self._fd) - else: - return self._fd - # END handle stream - - def commit(self): - """When done writing, call this function to commit your changes into the - actual file. - The file descriptor will be closed, and the lockfile handled. - - **Note** can be called multiple times""" - self._end_writing(successful=True) - - def rollback(self): - """Abort your operation without any changes. The file descriptor will be - closed, and the lock released. - - **Note** can be called multiple times""" - self._end_writing(successful=False) - - def _end_writing(self, successful=True): - """Handle the lock according to the write mode """ - if self._write is None: - raise AssertionError("Cannot end operation if it wasn't started yet") - - if self._fd is None: - return - - os.close(self._fd) - self._fd = None - - lockfile = self._lockfilepath() - if self._write and successful: - # on windows, rename does not silently overwrite the existing one - if sys.platform == "win32": - if isfile(self._filepath): - os.remove(self._filepath) - # END remove if exists - # END win32 special handling - os.rename(lockfile, self._filepath) - - # assure others can at least read the file - the tmpfile left it at rw-- - # We may also write that file, on windows that boils down to a remove- - # protection as well - chmod(self._filepath, 0644) - else: - # just delete the file so far, we failed - os.remove(lockfile) - # END successful handling + """ + This class facilitates a safe read and write operation to a file on disk. + If we write to 'file', we obtain a lock file at 'file.lock' and write to + that instead. If we succeed, the lock file will be renamed to overwrite + the original file. + + When reading, we obtain a lock file, but to prevent other writers from + succeeding while we are reading the file. + + This type handles error correctly in that it will assure a consistent state + on destruction. + + **note** with this setup, parallel reading is not possible""" + __slots__ = ("_filepath", '_fd', '_write') + + def __init__(self, filepath): + """Initialize an instance with the givne filepath""" + self._filepath = filepath + self._fd = None + self._write = None # if True, we write a file + + def __del__(self): + # will do nothing if the file descriptor is already closed + if self._fd is not None: + self.rollback() + + def _lockfilepath(self): + return "%s.lock" % self._filepath + + def open(self, write=False, stream=False): + """ + Open the file descriptor for reading or writing, both in binary mode. + + :param write: if True, the file descriptor will be opened for writing. Other + wise it will be opened read-only. + :param stream: if True, the file descriptor will be wrapped into a simple stream + object which supports only reading or writing + :return: fd to read from or write to. It is still maintained by this instance + and must not be closed directly + :raise IOError: if the lock could not be retrieved + :raise OSError: If the actual file could not be opened for reading + + **note** must only be called once""" + if self._write is not None: + raise AssertionError("Called %s multiple times" % self.open) + + self._write = write + + # try to open the lock file + binary = getattr(os, 'O_BINARY', 0) + lockmode = os.O_WRONLY | os.O_CREAT | os.O_EXCL | binary + try: + fd = os.open(self._lockfilepath(), lockmode, 0600) + if not write: + os.close(fd) + else: + self._fd = fd + # END handle file descriptor + except OSError: + raise IOError("Lock at %r could not be obtained" % self._lockfilepath()) + # END handle lock retrieval + + # open actual file if required + if self._fd is None: + # we could specify exlusive here, as we obtained the lock anyway + try: + self._fd = os.open(self._filepath, os.O_RDONLY | binary) + except: + # assure we release our lockfile + os.remove(self._lockfilepath()) + raise + # END handle lockfile + # END open descriptor for reading + + if stream: + # need delayed import + from stream import FDStream + return FDStream(self._fd) + else: + return self._fd + # END handle stream + + def commit(self): + """When done writing, call this function to commit your changes into the + actual file. + The file descriptor will be closed, and the lockfile handled. + + **Note** can be called multiple times""" + self._end_writing(successful=True) + + def rollback(self): + """Abort your operation without any changes. The file descriptor will be + closed, and the lock released. + + **Note** can be called multiple times""" + self._end_writing(successful=False) + + def _end_writing(self, successful=True): + """Handle the lock according to the write mode """ + if self._write is None: + raise AssertionError("Cannot end operation if it wasn't started yet") + + if self._fd is None: + return + + os.close(self._fd) + self._fd = None + + lockfile = self._lockfilepath() + if self._write and successful: + # on windows, rename does not silently overwrite the existing one + if sys.platform == "win32": + if isfile(self._filepath): + os.remove(self._filepath) + # END remove if exists + # END win32 special handling + os.rename(lockfile, self._filepath) + + # assure others can at least read the file - the tmpfile left it at rw-- + # We may also write that file, on windows that boils down to a remove- + # protection as well + chmod(self._filepath, 0644) + else: + # just delete the file so far, we failed + os.remove(lockfile) + # END successful handling #} END utilities From 6099ac8e04a8f734555efe4e78ad766d9a6fb70a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 4 May 2014 16:23:09 +0200 Subject: [PATCH 0205/2375] Added travis CI support --- .travis.yml | 8 ++++++++ README.rst | 8 +++++--- 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..e7d5214c1 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,8 @@ +language: python +python: + - "2.5" + - "2.6" + - "2.7" + - "pypy" + +script: nosetests diff --git a/README.rst b/README.rst index 30bff0ded..84feb373c 100644 --- a/README.rst +++ b/README.rst @@ -9,6 +9,8 @@ Although memory maps have many advantages, they represent a very limited system Overview ######## +.. image:: https://travis-ci.org/Byron/smmap.svg?branch=master :target: https://travis-ci.org/Byron/smmap + Smmap wraps an interface around mmap and tracks the mapped files as well as the amount of clients who use it. If the system runs out of resources, or if a memory limit is reached, it will automatically unload unused maps to allow continued operation. To allow processing large files even on 32 bit systems, it allows only portions of the file to be mapped. Once the user reads beyond the mapped region, smmap will automatically map the next required region, unloading unused regions using a LRU algorithm. @@ -58,17 +60,17 @@ The project is home on github at `https://github.com/Byron/smmap Date: Sun, 4 May 2014 16:29:43 +0200 Subject: [PATCH 0206/2375] pypy deactivated, it doesn't yet work --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e7d5214c1..563797656 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,9 @@ language: python python: + - "2.4" - "2.5" - "2.6" - "2.7" - - "pypy" + # - "pypy" - no getrefcount script: nosetests From 616e9ceaf917e4d8f3cf2c145401b8069ce307dd Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 4 May 2014 16:33:55 +0200 Subject: [PATCH 0207/2375] Oh, travis doesn't support older python versions, fair enough --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 563797656..fdba549d4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,5 @@ language: python python: - - "2.4" - - "2.5" - "2.6" - "2.7" # - "pypy" - no getrefcount From a4eddfe72b442666ba3acdf89929e9b65de45f45 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 4 May 2014 16:38:55 +0200 Subject: [PATCH 0208/2375] Added initial configuration of gitdb --- README.rst | 3 +++ gitdb/.travis.yml | 7 +++++++ gitdb/ext/async | 2 +- gitdb/ext/smmap | 2 +- 4 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 gitdb/.travis.yml diff --git a/README.rst b/README.rst index 753eb701c..68f71ff61 100644 --- a/README.rst +++ b/README.rst @@ -32,6 +32,9 @@ http://groups.google.com/group/git-python ISSUE TRACKER ============= + +.. image:: https://travis-ci.org/Byron/gitdb.svg?branch=master :target: https://travis-ci.org/Byron/gitdb + https://github.com/gitpython-developers/gitdb/issues LICENSE diff --git a/gitdb/.travis.yml b/gitdb/.travis.yml new file mode 100644 index 000000000..5c8791d90 --- /dev/null +++ b/gitdb/.travis.yml @@ -0,0 +1,7 @@ +language: python +python: + - "2.6" + - "2.7" + # - "pypy" - won't work as smmap doesn't work (see smmap/.travis.yml for details) + +script: nosetests diff --git a/gitdb/ext/async b/gitdb/ext/async index 571412931..90326fb86 160000 --- a/gitdb/ext/async +++ b/gitdb/ext/async @@ -1 +1 @@ -Subproject commit 571412931829200aff06a44b9c5524e122e524e9 +Subproject commit 90326fb867f94b193c277b07b23e364047e1ed28 diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 1b3ab5598..616e9ceaf 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 1b3ab5598e93369282502d049d64cb2ca12839cb +Subproject commit 616e9ceaf917e4d8f3cf2c145401b8069ce307dd From e2c94bf6983b378f99db175cd7810986cf338c32 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 4 May 2014 16:43:26 +0200 Subject: [PATCH 0209/2375] argh, one level too low, didn't see it in sublime --- gitdb/.travis.yml => .travis.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename gitdb/.travis.yml => .travis.yml (100%) diff --git a/gitdb/.travis.yml b/.travis.yml similarity index 100% rename from gitdb/.travis.yml rename to .travis.yml From 39de1127459b73b862f2b779bb4565ad6b4bd625 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 4 May 2014 16:44:48 +0200 Subject: [PATCH 0210/2375] Fixed travis build status url --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 68f71ff61..0fc0534e6 100644 --- a/README.rst +++ b/README.rst @@ -33,7 +33,7 @@ http://groups.google.com/group/git-python ISSUE TRACKER ============= -.. image:: https://travis-ci.org/Byron/gitdb.svg?branch=master :target: https://travis-ci.org/Byron/gitdb +.. image:: https://travis-ci.org/gitpython-developers/gitdb.svg?branch=master :target: https://travis-ci.org/gitpython-developers/gitdb https://github.com/gitpython-developers/gitdb/issues From cf1cf469f315df00ce7b9d47693008cd2fa1b56a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 6 May 2014 09:31:15 +0200 Subject: [PATCH 0211/2375] Get starten on py3.3 compatability This is likely to fail, but lets see. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index fdba549d4..d8640a08e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: python python: - "2.6" - "2.7" + - "3.3" # - "pypy" - no getrefcount script: nosetests From 32d34eba0412770c382a1428a0ebb221dbba4187 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 6 May 2014 09:55:32 +0200 Subject: [PATCH 0212/2375] Test with python 3.3 as well Have to start making them compatible at some point. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 5c8791d90..ff263f20d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: python python: - "2.6" - "2.7" + - "3.3" # - "pypy" - won't work as smmap doesn't work (see smmap/.travis.yml for details) script: nosetests From 2d3b5a303a65d6f80b84e63a1b3cf4b670c81f9a Mon Sep 17 00:00:00 2001 From: David Black Date: Fri, 16 May 2014 15:38:03 +1000 Subject: [PATCH 0213/2375] Initial work for supporting python 3 (>= 3.3). Signed-off-by: David Black --- smmap/__init__.py | 4 ++-- smmap/buf.py | 8 ++++---- smmap/mman.py | 20 +++++++++++--------- smmap/test/test_buf.py | 6 +++--- smmap/test/test_mman.py | 8 ++++---- smmap/test/test_tutorial.py | 2 +- smmap/test/test_util.py | 8 ++++---- smmap/util.py | 13 ++++++++++--- 8 files changed, 39 insertions(+), 30 deletions(-) diff --git a/smmap/__init__.py b/smmap/__init__.py index a10cd5c99..879ebea24 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -7,5 +7,5 @@ __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience -from mman import * -from buf import * +from .mman import * +from .buf import * diff --git a/smmap/buf.py b/smmap/buf.py index 255c6b54d..3917ee8be 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -1,5 +1,5 @@ """Module with a simple buffer implementation using the memory manager""" -from mman import WindowCursor +from .mman import WindowCursor import sys @@ -21,7 +21,7 @@ class SlidingWindowMapBuffer(object): ) - def __init__(self, cursor = None, offset = 0, size = sys.maxint, flags = 0): + def __init__(self, cursor = None, offset = 0, size = sys.maxsize, flags = 0): """Initalize the instance to operate on the given cursor. :param cursor: if not None, the associated cursor to the file you want to access If None, you have call begin_access before using the buffer and provide a cursor @@ -61,7 +61,7 @@ def __getslice__(self, i, j): assert c.is_valid() if i < 0: i = self._size + i - if j == sys.maxint: + if j == sys.maxsize: j = self._size if j < 0: j = self._size + j @@ -86,7 +86,7 @@ def __getslice__(self, i, j): # END fast or slow path #{ Interface - def begin_access(self, cursor = None, offset = 0, size = sys.maxint, flags = 0): + def begin_access(self, cursor = None, offset = 0, size = sys.maxsize, flags = 0): """Call this before the first use of this instance. The method was already called by the constructor in case sufficient information was provided. diff --git a/smmap/mman.py b/smmap/mman.py index 97c42c5bb..9cc251f0f 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -1,15 +1,17 @@ """Module containnig a memory memory manager which provides a sliding window on a number of memory mapped files""" -from util import ( +from .util import ( MapWindow, MapRegion, MapRegionList, is_64_bit, - align_to_mmap + align_to_mmap, + string_types, ) from weakref import ref import sys from sys import getrefcount +from functools import reduce __all__ = ["StaticWindowMapManager", "SlidingWindowMapManager", "WindowCursor"] #{ Utilities @@ -218,7 +220,7 @@ def fd(self): **Note:** it is not required to be valid anymore :raise ValueError: if the mapping was not created by a file descriptor""" - if isinstance(self._rlist.path_or_fd(), basestring): + if isinstance(self._rlist.path_or_fd(), string_types()): raise ValueError("File descriptor queried although mapping was generated from path") #END handle type return self._rlist.path_or_fd() @@ -256,7 +258,7 @@ class StaticWindowMapManager(object): _MB_in_bytes = 1024 * 1024 - def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys.maxint): + def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys.maxsize): """initialize the manager with the given parameters. :param window_size: if -1, a default window size will be chosen depending on the operating system's architechture. It will internally be quantified to a multiple of the page size @@ -306,7 +308,7 @@ def _collect_lru_region(self, size): while (size == 0) or (self._memory_size + size > self._max_memory_size): lru_region = None lru_list = None - for regions in self._fdict.itervalues(): + for regions in self._fdict.values(): for region in regions: # check client count - consider that we keep one reference ourselves ! if (region.client_count()-2 == 0 and @@ -343,7 +345,7 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): r = a[0] else: try: - r = self.MapRegionCls(a.path_or_fd(), 0, sys.maxint, flags) + r = self.MapRegionCls(a.path_or_fd(), 0, sys.maxsize, flags) except Exception: # apparently we are out of system resources or hit a limit # As many more operations are likely to fail in that condition ( @@ -405,7 +407,7 @@ def num_file_handles(self): def num_open_files(self): """Amount of opened files in the system""" - return reduce(lambda x,y: x+y, (1 for rlist in self._fdict.itervalues() if len(rlist) > 0), 0) + return reduce(lambda x,y: x+y, (1 for rlist in self._fdict.values() if len(rlist) > 0), 0) def window_size(self): """:return: size of each window when allocating new regions""" @@ -445,7 +447,7 @@ def force_map_handle_removal_win(self, base_path): #END early bailout num_closed = 0 - for path, rlist in self._fdict.iteritems(): + for path, rlist in self._fdict.items(): if path.startswith(base_path): for region in rlist: region._mf.close() @@ -473,7 +475,7 @@ class SlidingWindowMapManager(StaticWindowMapManager): __slots__ = tuple() - def __init__(self, window_size = -1, max_memory_size = 0, max_open_handles = sys.maxint): + def __init__(self, window_size = -1, max_memory_size = 0, max_open_handles = sys.maxsize): """Adjusts the default window size to -1""" super(SlidingWindowMapManager, self).__init__(window_size, max_memory_size, max_open_handles) diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index 4bdcb76f5..d40da1479 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -1,4 +1,4 @@ -from lib import TestBase, FileCreator +from .lib import TestBase, FileCreator from smmap.mman import SlidingWindowMapManager, StaticWindowMapManager from smmap.buf import * @@ -22,8 +22,8 @@ def test_basics(self): # invalid paths fail upon construction c = man_optimal.make_cursor(fc.path) - self.failUnlessRaises(ValueError, SlidingWindowMapBuffer, type(c)()) # invalid cursor - self.failUnlessRaises(ValueError, SlidingWindowMapBuffer, c, fc.size) # offset too large + self.assertRaises(ValueError, SlidingWindowMapBuffer, type(c)()) # invalid cursor + self.assertRaises(ValueError, SlidingWindowMapBuffer, c, fc.size) # offset too large buf = SlidingWindowMapBuffer() # can create uninitailized buffers assert buf.cursor() is None diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 46429a419..0929583c9 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -1,4 +1,4 @@ -from lib import TestBase, FileCreator +from .lib import TestBase, FileCreator from smmap.mman import * from smmap.mman import WindowCursor @@ -66,7 +66,7 @@ def test_memory_manager(self): man._collect_lru_region(10) # doesn't fail if we overallocate - assert man._collect_lru_region(sys.maxint) == 0 + assert man._collect_lru_region(sys.maxsize) == 0 # use a region, verify most basic functionality fc = FileCreator(self.k_window_test_size, "manager_test") @@ -80,9 +80,9 @@ def test_memory_manager(self): assert c.buffer()[:] == open(fc.path, 'rb').read(20)[10:] if isinstance(item, int): - self.failUnlessRaises(ValueError, c.path) + self.assertRaises(ValueError, c.path) else: - self.failUnlessRaises(ValueError, c.fd) + self.assertRaises(ValueError, c.fd) #END handle value error #END for each input os.close(fd) diff --git a/smmap/test/test_tutorial.py b/smmap/test/test_tutorial.py index 4e1a5764b..ad1a9c0b5 100644 --- a/smmap/test/test_tutorial.py +++ b/smmap/test/test_tutorial.py @@ -1,4 +1,4 @@ -from lib import TestBase +from .lib import TestBase class TestTutorial(TestBase): diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 2df0660be..a009bd9d2 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -1,4 +1,4 @@ -from lib import TestBase, FileCreator +from .lib import TestBase, FileCreator from smmap.util import * @@ -38,7 +38,7 @@ def test_window(self): assert wc.ofs == 1 and wc.size == maxsize # without maxsize - wc.extend_right_to(wr, sys.maxint) + wc.extend_right_to(wr, sys.maxsize) assert wc.ofs_end() == wr.ofs and wc.ofs == 1 # extend left @@ -46,7 +46,7 @@ def test_window(self): wr.extend_left_to(wc2, maxsize) assert wr.size == maxsize - wr.extend_left_to(wc2, sys.maxint) + wr.extend_left_to(wc2, sys.maxsize) assert wr.ofs == wc2.ofs_end() wc.align() @@ -68,7 +68,7 @@ def test_region(self): assert rhalfsize.ofs_begin() == 0 and rhalfsize.size() == half_size assert rfull.includes_ofs(0) and rfull.includes_ofs(fc.size-1) and rfull.includes_ofs(half_size) - assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxint) + assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxsize) # with the values we have, this test only works on windows where an alignment # size of 4096 is assumed. # We only test on linux as it is inconsitent between the python versions diff --git a/smmap/util.py b/smmap/util.py index c6710b3fe..fee9ad591 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -19,6 +19,13 @@ #{ Utilities +def string_types(): + if sys.version_info[0] >= 3: + return str + else: + return basestring + + def align_to_mmap(num, round_up): """ Align the given integer number to the closest page offset, which usually is 4096 bytes. @@ -34,7 +41,7 @@ def align_to_mmap(num, round_up): def is_64_bit(): """:return: True if the system is 64 bit. Otherwise it can be assumed to be 32 bit""" - return sys.maxint > (1<<32) - 1 + return sys.maxsize > (1<<32) - 1 #}END utilities @@ -154,7 +161,7 @@ def __init__(self, path_or_fd, ofs, size, flags = 0): self._mfb = buffer(self._mf, ofs, self._size) #END handle buffer wrapping finally: - if isinstance(path_or_fd, basestring): + if isinstance(path_or_fd, string_types()): os.close(fd) #END only close it if we opened it #END close file handle @@ -258,7 +265,7 @@ def path_or_fd(self): def file_size(self): """:return: size of file we manager""" if self._file_size is None: - if isinstance(self._path_or_fd, basestring): + if isinstance(self._path_or_fd, string_types()): self._file_size = os.stat(self._path_or_fd).st_size else: self._file_size = os.fstat(self._path_or_fd).st_size From 575f4a895ea525ecfedbfc1dc4c6f032ad92ccdc Mon Sep 17 00:00:00 2001 From: David Black Date: Fri, 16 May 2014 16:35:20 +1000 Subject: [PATCH 0214/2375] instead of writing a string to a buffer api (in python 3) write a buffer. Signed-off-by: David Black --- smmap/test/lib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smmap/test/lib.py b/smmap/test/lib.py index 21e6c5a09..01f6cc918 100644 --- a/smmap/test/lib.py +++ b/smmap/test/lib.py @@ -22,7 +22,7 @@ def __init__(self, size, prefix=''): fp = open(self._path, "wb") fp.seek(size-1) - fp.write('1') + fp.write(b'1') fp.close() assert os.path.getsize(self.path) == size From ef3b36e6ae20e7bd6c31c71623a5e0019ba9eec9 Mon Sep 17 00:00:00 2001 From: David Black Date: Fri, 16 May 2014 16:36:47 +1000 Subject: [PATCH 0215/2375] _need_compat_layer is not required in python 3. Signed-off-by: David Black --- smmap/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smmap/util.py b/smmap/util.py index fee9ad591..f4ecd228c 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -104,7 +104,7 @@ class MapRegion(object): '_size', # cached size of our memory map '__weakref__' ] - _need_compat_layer = sys.version_info[1] < 6 + _need_compat_layer = sys.version_info[0] < 3 and sys.version_info[1] < 6 if _need_compat_layer: __slots__.append('_mfb') # mapped memory buffer to provide offset From afcf97e6cd6584c97ccfe3de57bdc58df0ba9f8a Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Fri, 16 May 2014 08:31:09 -0700 Subject: [PATCH 0216/2375] Add tox.ini; make .travis.yml use it --- .gitignore | 1 + .travis.yml | 16 +++++++++------- tox.ini | 11 +++++++++++ 3 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 tox.ini diff --git a/.gitignore b/.gitignore index 6cfb58df1..11852be02 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ build/ coverage dist/ MANIFEST +.tox diff --git a/.travis.yml b/.travis.yml index d8640a08e..91f43283b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,10 @@ language: python -python: - - "2.6" - - "2.7" - - "3.3" - # - "pypy" - no getrefcount - -script: nosetests +env: + - TOXENV=py26 + - TOXENV=py27 + - TOXENV=py33 + - TOXENV=py34 +install: + - pip install tox +script: + - tox diff --git a/tox.ini b/tox.ini new file mode 100644 index 000000000..80190d0a3 --- /dev/null +++ b/tox.ini @@ -0,0 +1,11 @@ +# Tox (http://tox.testrun.org/) is a tool for running tests +# in multiple virtualenvs. This configuration file will run the +# test suite on all supported python versions. To use it, "pip install tox" +# and then run "tox" from this directory. + +[tox] +envlist = py26, py27, py33, py34 + +[testenv] +commands = nosetests +deps = nose From f0680101739da3435bbae0139765bb5ce65bcb92 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 19 May 2014 23:51:50 +0200 Subject: [PATCH 0217/2375] Added coverage reporting. In the process, I removed tox as it made things so much more complex for me. --- .coveragerc | 10 ++++++ .gitignore | 1 + .travis.yml | 15 ++++----- README.rst => README.md | 70 ++++++++++++++++++++++------------------- tox.ini | 11 ------- 5 files changed, 57 insertions(+), 50 deletions(-) create mode 100644 .coveragerc rename README.rst => README.md (71%) delete mode 100644 tox.ini diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 000000000..e61d27ba9 --- /dev/null +++ b/.coveragerc @@ -0,0 +1,10 @@ +[run] +source = smmap + +; to make nosetests happy +[report] +omit = + */yaml* + */tests/* + */python?.?/* + */site-packages/nose/* \ No newline at end of file diff --git a/.gitignore b/.gitignore index 11852be02..2081aafd2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ build/ .coverage coverage +cover/ dist/ MANIFEST .tox diff --git a/.travis.yml b/.travis.yml index 91f43283b..c63e5e325 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,11 @@ language: python -env: - - TOXENV=py26 - - TOXENV=py27 - - TOXENV=py33 - - TOXENV=py34 +python: + - "2.6" + - "2.7" + - "3.3" install: - - pip install tox + - pip install coveralls script: - - tox + - nosetests --with-coverage +after_success: + - coveralls diff --git a/README.rst b/README.md similarity index 71% rename from README.rst rename to README.md index 84feb373c..c056ed1c1 100644 --- a/README.rst +++ b/README.md @@ -1,15 +1,15 @@ -########### -Motivation -########### +## Motivation + When reading from many possibly large files in a fashion similar to random access, it is usually the fastest and most efficient to use memory maps. Although memory maps have many advantages, they represent a very limited system resource as every map uses one file descriptor, whose amount is limited per process. On 32 bit systems, the amount of memory you can have mapped at a time is naturally limited to theoretical 4GB of memory, which may not be enough for some applications. -######## -Overview -######## -.. image:: https://travis-ci.org/Byron/smmap.svg?branch=master :target: https://travis-ci.org/Byron/smmap + +## Overview + +[![Build Status](https://travis-ci.org/Byron/smmap.svg?branch=master)](https://travis-ci.org/Byron/smmap) +[![Coverage Status](https://coveralls.io/repos/Byron/smmap/badge.png)](https://coveralls.io/r/Byron/smmap) Smmap wraps an interface around mmap and tracks the mapped files as well as the amount of clients who use it. If the system runs out of resources, or if a memory limit is reached, it will automatically unload unused maps to allow continued operation. @@ -21,42 +21,49 @@ Although the library can be used most efficiently with its native interface, a B For performance critical 64 bit applications, a simplified version of memory mapping is provided which always maps the whole file, but still provides the benefit of unloading unused mappings on demand. -############# -Prerequisites -############# + + +## Prerequisites + * Python 2.4, 2.5 or 2.6 * OSX, Windows or Linux The package was tested on all of the previously mentioned configurations. -########### -Limitations -########### + + +## Limitations + * The memory access is read-only by design. * In python below 2.6, memory maps will be created in compatibility mode which works, but creates inefficient memory mappings as they always start at offset 0. * It wasn't tested on python 2.7 and 3.x. -################ -Installing smmap -################ -Its easiest to install smmap using the *easy_install* or *pip* program, which is part of the `setuptools`_ or `pip`_ respectively:: + +## Installing smmap + +Its easiest to install smmap using the *easy_install* or *pip* program, which is part of the [setuptools](http://peak.telecommunity.com/DevCenter/setuptools) or [pip](http://www.pip-installer.org/en/latest) respectively: - $ easy_install smmap - # or - $ pip install smmap +```bash +$ easy_install smmap +# or +$ pip install smmap +``` As the command will install smmap in your respective python distribution, you will most likely need root permissions to authorize the required changes. -If you have downloaded the source archive, the package can be installed by running the ``setup.py`` script:: +If you have downloaded the source archive, the package can be installed by running the `setup.py` script: - $ python setup.py install +```bash +$ python setup.py install +``` + +It is advised to have a look at the **Usage Guide** for a brief introduction on the different database implementations. + -It is advised to have a look at the :ref:`Usage Guide ` for a brief introduction on the different database implementations. -################## -Homepage and Links -################## -The project is home on github at `https://github.com/Byron/smmap `_. +## Homepage and Links + +The project is home on github at https://github.com/Byron/smmap . The latest source can be cloned from github as well: @@ -72,10 +79,9 @@ Issues can be filed on github: * https://github.com/Byron/smmap/issues -################### -License Information -################### + + +## License Information + *smmap* is licensed under the New BSD License. -.. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools -.. _pip: http://www.pip-installer.org/en/latest/ diff --git a/tox.ini b/tox.ini deleted file mode 100644 index 80190d0a3..000000000 --- a/tox.ini +++ /dev/null @@ -1,11 +0,0 @@ -# Tox (http://tox.testrun.org/) is a tool for running tests -# in multiple virtualenvs. This configuration file will run the -# test suite on all supported python versions. To use it, "pip install tox" -# and then run "tox" from this directory. - -[tox] -envlist = py26, py27, py33, py34 - -[testenv] -commands = nosetests -deps = nose From 403ad7816e2c88be78606cfee2d9944f535e7ed7 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Fri, 13 Jun 2014 22:24:23 -0700 Subject: [PATCH 0218/2375] Delay importing sys.getrefcount until needed This makes it possibly to at least install on PyPy Addresses: GH-4 ("pypy compatibility") --- smmap/mman.py | 1 - smmap/util.py | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 9cc251f0f..637a2844d 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -10,7 +10,6 @@ from weakref import ref import sys -from sys import getrefcount from functools import reduce __all__ = ["StaticWindowMapManager", "SlidingWindowMapManager", "WindowCursor"] diff --git a/smmap/util.py b/smmap/util.py index f4ecd228c..ec86cbf16 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -12,8 +12,6 @@ from mmap import PAGESIZE as ALLOCATIONGRANULARITY #END handle pythons missing quality assurance -from sys import getrefcount - __all__ = [ "align_to_mmap", "is_64_bit", "MapWindow", "MapRegion", "MapRegionList", "ALLOCATIONGRANULARITY"] @@ -210,6 +208,7 @@ def includes_ofs(self, ofs): def client_count(self): """:return: number of clients currently using this region""" + from sys import getrefcount # -1: self on stack, -1 self in this method, -1 self in getrefcount return getrefcount(self)-3 @@ -256,6 +255,7 @@ def __init__(self, path_or_fd): def client_count(self): """:return: amount of clients which hold a reference to this instance""" + from sys import getrefcount return getrefcount(self)-3 def path_or_fd(self): From f3d3502bef512ed48581f69fee9b655a91e06db8 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Sun, 15 Jun 2014 23:33:04 -0700 Subject: [PATCH 0219/2375] Change / to // (integer division) in several places This fixes a bunch of bugs and test failures in Python 3, which uses "true division" for / --- smmap/test/test_mman.py | 6 +++--- smmap/test/test_util.py | 2 +- smmap/util.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 0929583c9..e0516b21c 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -95,8 +95,8 @@ def test_memman_operation(self): fd = os.open(fc.path, os.O_RDONLY) max_num_handles = 15 #small_size = - for mtype, args in ( (StaticWindowMapManager, (0, fc.size / 3, max_num_handles)), - (SlidingWindowMapManager, (fc.size / 100, fc.size / 3, max_num_handles)),): + for mtype, args in ( (StaticWindowMapManager, (0, fc.size // 3, max_num_handles)), + (SlidingWindowMapManager, (fc.size // 100, fc.size // 3, max_num_handles)),): for item in (fc.path, fd): assert len(data) == fc.size @@ -110,7 +110,7 @@ def test_memman_operation(self): base_offset = 5000 # window size is 0 for static managers, hence size will be 0. We take that into consideration - size = man.window_size() / 2 + size = man.window_size() // 2 assert c.use_region(base_offset, size).is_valid() rr = c.region_ref() assert rr().client_count() == 2 # the manager and the cursor and us diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index a009bd9d2..8afba005e 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -54,7 +54,7 @@ def test_window(self): def test_region(self): fc = FileCreator(self.k_window_test_size, "window_test") - half_size = fc.size / 2 + half_size = fc.size // 2 rofs = align_to_mmap(4200, False) rfull = MapRegion(fc.path, 0, fc.size) rhalfofs = MapRegion(fc.path, rofs, fc.size) diff --git a/smmap/util.py b/smmap/util.py index ec86cbf16..0d8385db2 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -31,7 +31,7 @@ def align_to_mmap(num, round_up): :param round_up: if True, the next higher multiple of page size is used, otherwise the lower page_size will be used (i.e. if True, 1 becomes 4096, otherwise it becomes 0) :return: num rounded to closest page""" - res = (num / ALLOCATIONGRANULARITY) * ALLOCATIONGRANULARITY; + res = (num // ALLOCATIONGRANULARITY) * ALLOCATIONGRANULARITY; if round_up and (res != num): res += ALLOCATIONGRANULARITY #END handle size From 707885bebe6cefa45dae7dd13dadac5b2b98d16d Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 16 Jun 2014 06:41:25 -0700 Subject: [PATCH 0220/2375] .gitignore: Add *.egg-info --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2081aafd2..73b0b6188 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ cover/ dist/ MANIFEST .tox +*.egg-info From 23b79ea2838510028de43a6edb1b09246dca9a46 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 16 Jun 2014 06:47:31 -0700 Subject: [PATCH 0221/2375] Add back tox.ini for tox This time with support for measuring coverage. Ability to test quickly across multiple Python versions is crucial for working on Python 3 compatibility... --- tox.ini | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 tox.ini diff --git a/tox.ini b/tox.ini new file mode 100644 index 000000000..e0e196418 --- /dev/null +++ b/tox.ini @@ -0,0 +1,13 @@ +# Tox (http://tox.testrun.org/) is a tool for running tests +# in multiple virtualenvs. This configuration file will run the +# test suite on all supported python versions. To use it, "pip install tox" +# and then run "tox" from this directory. + +[tox] +envlist = py26, py27, py33, py34 + +[testenv] +commands = nosetests {posargs:--with-coverage --cover-package=smmap} +deps = + nose + nosexcover From 52fba74d78d3fcce53fb89c7b2c20b24197296a8 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 16 Jun 2014 06:33:41 -0700 Subject: [PATCH 0222/2375] Deal with lack of `buffer` in py3 --- smmap/mman.py | 1 + smmap/test/test_tutorial.py | 1 + smmap/util.py | 11 ++++++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/smmap/mman.py b/smmap/mman.py index 637a2844d..ff32bbb51 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -6,6 +6,7 @@ is_64_bit, align_to_mmap, string_types, + buffer, ) from weakref import ref diff --git a/smmap/test/test_tutorial.py b/smmap/test/test_tutorial.py index ad1a9c0b5..ccc113b4f 100644 --- a/smmap/test/test_tutorial.py +++ b/smmap/test/test_tutorial.py @@ -44,6 +44,7 @@ def test_example(self): # its recommended not to create big slices when feeding the buffer # into consumers (e.g. struct or zlib). # Instead, either give the buffer directly, or use pythons buffer command. + from smmap.util import buffer buffer(c.buffer(), 1, 9) # first 9 bytes without copying them # you can query absolute offsets, and check whether an offset is included diff --git a/smmap/util.py b/smmap/util.py index 0d8385db2..54c6c45c3 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -12,11 +12,20 @@ from mmap import PAGESIZE as ALLOCATIONGRANULARITY #END handle pythons missing quality assurance -__all__ = [ "align_to_mmap", "is_64_bit", +__all__ = [ "align_to_mmap", "is_64_bit", "buffer", "MapWindow", "MapRegion", "MapRegionList", "ALLOCATIONGRANULARITY"] #{ Utilities +try: + # Python 2 + buffer = buffer +except NameError: + # Python 3 has no `buffer`; only `memoryview` + def buffer(obj, offset, size): + return memoryview(obj[offset:offset+size]) + + def string_types(): if sys.version_info[0] >= 3: return str From cf515928248b7c34cb73b6e20edbdadebd086f96 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 16 Jun 2014 07:55:21 -0700 Subject: [PATCH 0223/2375] Fix 2 instances of "containnig" => "containing" --- smmap/mman.py | 2 +- smmap/util.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index ff32bbb51..7cbb535bd 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -1,4 +1,4 @@ -"""Module containnig a memory memory manager which provides a sliding window on a number of memory mapped files""" +"""Module containing a memory memory manager which provides a sliding window on a number of memory mapped files""" from .util import ( MapWindow, MapRegion, diff --git a/smmap/util.py b/smmap/util.py index 54c6c45c3..c37dfdd31 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -1,4 +1,4 @@ -"""Module containnig a memory memory manager which provides a sliding window on a number of memory mapped files""" +"""Module containing a memory memory manager which provides a sliding window on a number of memory mapped files""" import os import sys import mmap From c0b94c67b86b4250364a951f4865d714952f792a Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 16 Jun 2014 08:54:30 -0700 Subject: [PATCH 0224/2375] .travis.yml: Allow py33 to fail, add py34, etc. --- .travis.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index c63e5e325..d02eb6f5e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,17 @@ language: python python: - - "2.6" - - "2.7" - - "3.3" + - 2.6 + - 2.7 + - 3.3 + - 3.4 install: - pip install coveralls script: - nosetests --with-coverage after_success: - coveralls +matrix: + allow_failures: + - python: 3.3 + - python: 3.4 + fast_finish: true From 33e6314941572a93b8031b1feecded22ef1f5f3c Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 16 Jun 2014 08:49:04 -0700 Subject: [PATCH 0225/2375] Use bytes() instead of str() bytes() is more accurate and is actually correct in Python 3, whereas str() is incorrect in Python 3, because it's a Unicode string. --- smmap/buf.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/smmap/buf.py b/smmap/buf.py index 3917ee8be..ba6f8ede7 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -5,6 +5,12 @@ __all__ = ["SlidingWindowMapBuffer"] +try: + bytes +except NameError: + bytes = str + + class SlidingWindowMapBuffer(object): """A buffer like object which allows direct byte-wise object and slicing into memory of a mapped file. The mapping is controlled by the provided cursor. @@ -73,7 +79,7 @@ def __getslice__(self, i, j): ofs = i # Keeping tokens in a list could possible be faster, but the list # overhead outweighs the benefits (tested) ! - md = str() + md = bytes() while l: c.use_region(ofs, l) assert c.is_valid() From 19917bdc3d30d7d3e6dba082ba132a86d0190b09 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 16 Jun 2014 09:05:33 -0700 Subject: [PATCH 0226/2375] Fix typo: "optimial" => "optimal" --- smmap/test/test_buf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index d40da1479..23a4fbbcd 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -76,7 +76,7 @@ def test_basics(self): for item in (fc.path, fd): for manager, man_id in ( (man_optimal, 'optimal'), (man_worst_case, 'worst case'), - (static_man, 'static optimial')): + (static_man, 'static optimal')): buf = SlidingWindowMapBuffer(manager.make_cursor(item)) assert manager.num_file_handles() == 1 for access_mode in range(2): # single, multi From 8fde5f3fb8711f866612c657d20c9d3e9cf59f41 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 16 Jun 2014 09:02:30 -0700 Subject: [PATCH 0227/2375] Make __getitem__ handle slice for Python 3 Python 3 doesn't have __getslice__ instead it uses __getitem__ with a slice object. --- smmap/buf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/smmap/buf.py b/smmap/buf.py index ba6f8ede7..2f27d4d01 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -51,6 +51,8 @@ def __len__(self): return self._size def __getitem__(self, i): + if isinstance(i, slice): + return self.__getslice__(i.start or 0, i.stop or self._size) c = self._c assert c.is_valid() if i < 0: From 651dfa8a359200b66e686998af2640efb54f16ad Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 16 Jun 2014 10:48:43 -0700 Subject: [PATCH 0228/2375] Change / to // (integer division) in test_buf.py This fixes (the last!) test failure in Python 3, which uses "true division" for / --- smmap/test/test_buf.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index 23a4fbbcd..15dfb8238 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -10,9 +10,10 @@ man_optimal = SlidingWindowMapManager() -man_worst_case = SlidingWindowMapManager( window_size=TestBase.k_window_test_size/100, - max_memory_size=TestBase.k_window_test_size/3, - max_open_handles=15) +man_worst_case = SlidingWindowMapManager( + window_size=TestBase.k_window_test_size // 100, + max_memory_size=TestBase.k_window_test_size // 3, + max_open_handles=15) static_man = StaticWindowMapManager() class TestBuf(TestBase): From f75dcbcf5d10a639c031dd706fa7fcfa1784eecb Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 16 Jun 2014 11:09:54 -0700 Subject: [PATCH 0229/2375] .travis.yml: Stop allowing failures for py3{3,4} --- .travis.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index d02eb6f5e..47cb41170 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,8 +10,3 @@ script: - nosetests --with-coverage after_success: - coveralls -matrix: - allow_failures: - - python: 3.3 - - python: 3.4 - fast_finish: true From fbbb3090ea1ca4ac3042acea7633241b0388f0b3 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 16 Jun 2014 11:31:48 -0700 Subject: [PATCH 0230/2375] setup.py: Add Python 3 (and Python 2) classifiers --- setup.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/setup.py b/setup.py index 2e97e59c6..13d2063ab 100644 --- a/setup.py +++ b/setup.py @@ -44,6 +44,12 @@ "Operating System :: Microsoft :: Windows", "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.6", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.3", + "Programming Language :: Python :: 3.4", ], long_description=long_description, ) From 55267119140f3828a24b4986600ed21a1808d6cc Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 16 Jun 2014 12:02:10 -0700 Subject: [PATCH 0231/2375] setup.cfg: Specify that wheel is universal --- setup.cfg | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 setup.cfg diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 000000000..2a9acf13d --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal = 1 From d79c655a7bf281a39662f4a4562d76312b69515a Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 14:21:09 -0400 Subject: [PATCH 0232/2375] Update async to the Python 2 / 3 compatible version --- gitdb/ext/async | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitdb/ext/async b/gitdb/ext/async index 90326fb86..339024bfb 160000 --- a/gitdb/ext/async +++ b/gitdb/ext/async @@ -1 +1 @@ -Subproject commit 90326fb867f94b193c277b07b23e364047e1ed28 +Subproject commit 339024bfb1d0a2b091e63d7a7ea23a1c63189f5c From 72167492334b756ddeaa606274e9348a70734cdb Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 14:27:22 -0400 Subject: [PATCH 0233/2375] Update smmap to a Python 3 compatible version --- gitdb/ext/smmap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 616e9ceaf..552671191 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 616e9ceaf917e4d8f3cf2c145401b8069ce307dd +Subproject commit 55267119140f3828a24b4986600ed21a1808d6cc From 1c6f4c19289732bd13507eba9e54c9d692957137 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 15:35:24 -0400 Subject: [PATCH 0234/2375] Automated PEP 8 fixes --- gitdb/__init__.py | 4 +- gitdb/base.py | 205 ++++++++++--------- gitdb/db/base.py | 162 ++++++++------- gitdb/db/git.py | 34 ++-- gitdb/db/loose.py | 103 +++++----- gitdb/db/mem.py | 56 +++-- gitdb/db/pack.py | 88 ++++---- gitdb/db/ref.py | 18 +- gitdb/exc.py | 10 +- gitdb/fun.py | 230 ++++++++++----------- gitdb/pack.py | 394 ++++++++++++++++++------------------ gitdb/stream.py | 318 +++++++++++++++-------------- gitdb/test/__init__.py | 2 +- gitdb/test/db/lib.py | 80 ++++---- gitdb/test/db/test_git.py | 22 +- gitdb/test/db/test_loose.py | 15 +- gitdb/test/db/test_mem.py | 18 +- gitdb/test/db/test_pack.py | 28 +-- gitdb/test/db/test_ref.py | 28 ++- gitdb/test/lib.py | 39 ++-- gitdb/test/test_base.py | 28 +-- gitdb/test/test_example.py | 26 +-- gitdb/test/test_pack.py | 102 +++++----- gitdb/test/test_stream.py | 51 +++-- gitdb/test/test_util.py | 43 ++-- gitdb/util.py | 131 ++++++------ 26 files changed, 1108 insertions(+), 1127 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index ff750d14c..847269a33 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -12,14 +12,14 @@ def _init_externals(): """Initialize external projects by putting them into the path""" for module in ('async', 'smmap'): sys.path.append(os.path.join(os.path.dirname(__file__), 'ext', module)) - + try: __import__(module) except ImportError: raise ImportError("'%s' could not be imported, assure it is located in your PYTHONPATH" % module) #END verify import #END handel imports - + #} END initialization _init_externals() diff --git a/gitdb/base.py b/gitdb/base.py index bad5f7472..a673c2376 100644 --- a/gitdb/base.py +++ b/gitdb/base.py @@ -13,183 +13,183 @@ type_to_type_id_map ) -__all__ = ('OInfo', 'OPackInfo', 'ODeltaPackInfo', +__all__ = ('OInfo', 'OPackInfo', 'ODeltaPackInfo', 'OStream', 'OPackStream', 'ODeltaPackStream', 'IStream', 'InvalidOInfo', 'InvalidOStream' ) #{ ODB Bases class OInfo(tuple): - """Carries information about an object in an ODB, provding information + """Carries information about an object in an ODB, provding information about the binary sha of the object, the type_string as well as the uncompressed size in bytes. - + It can be accessed using tuple notation and using attribute access notation:: - + assert dbi[0] == dbi.binsha assert dbi[1] == dbi.type assert dbi[2] == dbi.size - + The type is designed to be as lighteight as possible.""" __slots__ = tuple() - + def __new__(cls, sha, type, size): return tuple.__new__(cls, (sha, type, size)) - + def __init__(self, *args): tuple.__init__(self) - - #{ Interface + + #{ Interface @property def binsha(self): """:return: our sha as binary, 20 bytes""" return self[0] - + @property def hexsha(self): """:return: our sha, hex encoded, 40 bytes""" return bin_to_hex(self[0]) - + @property def type(self): return self[1] - + @property def type_id(self): return type_to_type_id_map[self[1]] - + @property def size(self): return self[2] #} END interface - - + + class OPackInfo(tuple): - """As OInfo, but provides a type_id property to retrieve the numerical type id, and + """As OInfo, but provides a type_id property to retrieve the numerical type id, and does not include a sha. - - Additionally, the pack_offset is the absolute offset into the packfile at which + + Additionally, the pack_offset is the absolute offset into the packfile at which all object information is located. The data_offset property points to the abosolute location in the pack at which that actual data stream can be found.""" __slots__ = tuple() - + def __new__(cls, packoffset, type, size): return tuple.__new__(cls, (packoffset,type, size)) - + def __init__(self, *args): tuple.__init__(self) - - #{ Interface - + + #{ Interface + @property def pack_offset(self): return self[0] - + @property def type(self): return type_id_to_type_map[self[1]] - + @property def type_id(self): return self[1] - + @property def size(self): return self[2] - + #} END interface - - + + class ODeltaPackInfo(OPackInfo): - """Adds delta specific information, - Either the 20 byte sha which points to some object in the database, + """Adds delta specific information, + Either the 20 byte sha which points to some object in the database, or the negative offset from the pack_offset, so that pack_offset - delta_info yields the pack offset of the base object""" __slots__ = tuple() - + def __new__(cls, packoffset, type, size, delta_info): return tuple.__new__(cls, (packoffset, type, size, delta_info)) - - #{ Interface + + #{ Interface @property def delta_info(self): return self[3] - #} END interface - - + #} END interface + + class OStream(OInfo): - """Base for object streams retrieved from the database, providing additional + """Base for object streams retrieved from the database, providing additional information about the stream. Generally, ODB streams are read-only as objects are immutable""" __slots__ = tuple() - + def __new__(cls, sha, type, size, stream, *args, **kwargs): """Helps with the initialization of subclasses""" return tuple.__new__(cls, (sha, type, size, stream)) - - + + def __init__(self, *args, **kwargs): tuple.__init__(self) - - #{ Stream Reader Interface - + + #{ Stream Reader Interface + def read(self, size=-1): return self[3].read(size) - + @property def stream(self): return self[3] - + #} END stream reader interface - - + + class ODeltaStream(OStream): """Uses size info of its stream, delaying reads""" - + def __new__(cls, sha, type, size, stream, *args, **kwargs): """Helps with the initialization of subclasses""" return tuple.__new__(cls, (sha, type, size, stream)) - + #{ Stream Reader Interface - + @property def size(self): return self[3].size - + #} END stream reader interface - - + + class OPackStream(OPackInfo): """Next to pack object information, a stream outputting an undeltified base object is provided""" __slots__ = tuple() - + def __new__(cls, packoffset, type, size, stream, *args): """Helps with the initialization of subclasses""" return tuple.__new__(cls, (packoffset, type, size, stream)) - - #{ Stream Reader Interface + + #{ Stream Reader Interface def read(self, size=-1): return self[3].read(size) - + @property def stream(self): return self[3] #} END stream reader interface - + class ODeltaPackStream(ODeltaPackInfo): """Provides a stream outputting the uncompressed offset delta information""" __slots__ = tuple() - + def __new__(cls, packoffset, type, size, delta_info, stream): return tuple.__new__(cls, (packoffset, type, size, delta_info, stream)) - #{ Stream Reader Interface + #{ Stream Reader Interface def read(self, size=-1): return self[4].read(size) - + @property def stream(self): return self[4] @@ -197,106 +197,106 @@ def stream(self): class IStream(list): - """Represents an input content stream to be fed into the ODB. It is mutable to allow + """Represents an input content stream to be fed into the ODB. It is mutable to allow the ODB to record information about the operations outcome right in this instance. - + It provides interfaces for the OStream and a StreamReader to allow the instance to blend in without prior conversion. - + The only method your content stream must support is 'read'""" __slots__ = tuple() - + def __new__(cls, type, size, stream, sha=None): return list.__new__(cls, (sha, type, size, stream, None)) - + def __init__(self, type, size, stream, sha=None): list.__init__(self, (sha, type, size, stream, None)) - - #{ Interface + + #{ Interface @property def hexsha(self): """:return: our sha, hex encoded, 40 bytes""" return bin_to_hex(self[0]) - + def _error(self): """:return: the error that occurred when processing the stream, or None""" return self[4] - + def _set_error(self, exc): """Set this input stream to the given exc, may be None to reset the error""" self[4] = exc - + error = property(_error, _set_error) - + #} END interface - + #{ Stream Reader Interface - + def read(self, size=-1): - """Implements a simple stream reader interface, passing the read call on + """Implements a simple stream reader interface, passing the read call on to our internal stream""" return self[3].read(size) - - #} END stream reader interface - + + #} END stream reader interface + #{ interface - + def _set_binsha(self, binsha): self[0] = binsha - + def _binsha(self): return self[0] - + binsha = property(_binsha, _set_binsha) - - + + def _type(self): return self[1] - + def _set_type(self, type): self[1] = type - + type = property(_type, _set_type) - + def _size(self): return self[2] - + def _set_size(self, size): self[2] = size - + size = property(_size, _set_size) - + def _stream(self): return self[3] - + def _set_stream(self, stream): self[3] = stream - + stream = property(_stream, _set_stream) - - #} END odb info interface - + + #} END odb info interface + class InvalidOInfo(tuple): - """Carries information about a sha identifying an object which is invalid in + """Carries information about a sha identifying an object which is invalid in the queried database. The exception attribute provides more information about the cause of the issue""" __slots__ = tuple() - + def __new__(cls, sha, exc): return tuple.__new__(cls, (sha, exc)) - + def __init__(self, sha, exc): tuple.__init__(self, (sha, exc)) - + @property def binsha(self): return self[0] - + @property def hexsha(self): return bin_to_hex(self[0]) - + @property def error(self): """:return: exception instance explaining the failure""" @@ -306,6 +306,5 @@ def error(self): class InvalidOStream(InvalidOInfo): """Carries information about an invalid ODB stream""" __slots__ = tuple() - -#} END ODB Bases +#} END ODB Bases diff --git a/gitdb/db/base.py b/gitdb/db/base.py index 867e93a81..0eef1e5d5 100644 --- a/gitdb/db/base.py +++ b/gitdb/db/base.py @@ -4,20 +4,20 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains implementations of database retrieveing objects""" from gitdb.util import ( - pool, - join, - LazyMixin, - hex_to_bin - ) + pool, + join, + LazyMixin, + hex_to_bin +) from gitdb.exc import ( - BadObject, - AmbiguousObjectName - ) + BadObject, + AmbiguousObjectName +) from async import ( - ChannelThreadTask - ) + ChannelThreadTask +) from itertools import chain @@ -28,17 +28,17 @@ class ObjectDBR(object): """Defines an interface for object database lookup. Objects are identified either by their 20 byte bin sha""" - + def __contains__(self, sha): return self.has_obj - - #{ Query Interface + + #{ Query Interface def has_object(self, sha): """ :return: True if the object identified by the given 20 bytes binary sha is contained in the database""" raise NotImplementedError("To be implemented in subclass") - + def has_object_async(self, reader): """Return a reader yielding information about the membership of objects as identified by shas @@ -46,62 +46,62 @@ def has_object_async(self, reader): :return: async.Reader yielding tuples of (sha, bool) pairs which indicate whether the given sha exists in the database or not""" task = ChannelThreadTask(reader, str(self.has_object_async), lambda sha: (sha, self.has_object(sha))) - return pool.add_task(task) - + return pool.add_task(task) + def info(self, sha): """ :return: OInfo instance :param sha: bytes binary sha :raise BadObject:""" raise NotImplementedError("To be implemented in subclass") - + def info_async(self, reader): """Retrieve information of a multitude of objects asynchronously :param reader: Channel yielding the sha's of the objects of interest :return: async.Reader yielding OInfo|InvalidOInfo, in any order""" task = ChannelThreadTask(reader, str(self.info_async), self.info) return pool.add_task(task) - + def stream(self, sha): """:return: OStream instance :param sha: 20 bytes binary sha :raise BadObject:""" raise NotImplementedError("To be implemented in subclass") - + def stream_async(self, reader): """Retrieve the OStream of multiple objects :param reader: see ``info`` :param max_threads: see ``ObjectDBW.store`` :return: async.Reader yielding OStream|InvalidOStream instances in any order - - **Note:** depending on the system configuration, it might not be possible to + + **Note:** depending on the system configuration, it might not be possible to read all OStreams at once. Instead, read them individually using reader.read(x) where x is small enough.""" # base implementation just uses the stream method repeatedly task = ChannelThreadTask(reader, str(self.stream_async), self.stream) return pool.add_task(task) - + def size(self): """:return: amount of objects in this database""" raise NotImplementedError() - + def sha_iter(self): """Return iterator yielding 20 byte shas for all objects in this data base""" raise NotImplementedError() - + #} END query interface - - + + class ObjectDBW(object): """Defines an interface to create objects in the database""" - + def __init__(self, *args, **kwargs): self._ostream = None - + #{ Edit Interface def set_ostream(self, stream): """ Adjusts the stream to which all data should be sent when storing new objects - + :param stream: if not None, the stream to use, if None the default stream will be used. :return: previously installed stream, or None if there was no override @@ -109,96 +109,96 @@ def set_ostream(self, stream): cstream = self._ostream self._ostream = stream return cstream - + def ostream(self): """ :return: overridden output stream this instance will write to, or None if it will write to the default stream""" return self._ostream - + def store(self, istream): """ Create a new object in the database :return: the input istream object with its sha set to its corresponding value - - :param istream: IStream compatible instance. If its sha is already set - to a value, the object will just be stored in the our database format, + + :param istream: IStream compatible instance. If its sha is already set + to a value, the object will just be stored in the our database format, in which case the input stream is expected to be in object format ( header + contents ). :raise IOError: if data could not be written""" raise NotImplementedError("To be implemented in subclass") - + def store_async(self, reader): """ - Create multiple new objects in the database asynchronously. The method will - return right away, returning an output channel which receives the results as + Create multiple new objects in the database asynchronously. The method will + return right away, returning an output channel which receives the results as they are computed. - + :return: Channel yielding your IStream which served as input, in any order. - The IStreams sha will be set to the sha it received during the process, + The IStreams sha will be set to the sha it received during the process, or its error attribute will be set to the exception informing about the error. - + :param reader: async.Reader yielding IStream instances. The same instances will be used in the output channel as were received in by the Reader. - - **Note:** As some ODB implementations implement this operation atomic, they might - abort the whole operation if one item could not be processed. Hence check how + + **Note:** As some ODB implementations implement this operation atomic, they might + abort the whole operation if one item could not be processed. Hence check how many items have actually been produced.""" # base implementation uses store to perform the work - task = ChannelThreadTask(reader, str(self.store_async), self.store) + task = ChannelThreadTask(reader, str(self.store_async), self.store) return pool.add_task(task) - + #} END edit interface - + class FileDBBase(object): - """Provides basic facilities to retrieve files of interest, including + """Provides basic facilities to retrieve files of interest, including caching facilities to help mapping hexsha's to objects""" - + def __init__(self, root_path): """Initialize this instance to look for its files at the given root path All subsequent operations will be relative to this path - :raise InvalidDBRoot: + :raise InvalidDBRoot: **Note:** The base will not perform any accessablity checking as the base - might not yet be accessible, but become accessible before the first + might not yet be accessible, but become accessible before the first access.""" super(FileDBBase, self).__init__() self._root_path = root_path - - - #{ Interface + + + #{ Interface def root_path(self): """:return: path at which this db operates""" return self._root_path - + def db_path(self, rela_path): """ - :return: the given relative path relative to our database root, allowing + :return: the given relative path relative to our database root, allowing to pontentially access datafiles""" return join(self._root_path, rela_path) #} END interface - + class CachingDB(object): """A database which uses caches to speed-up access""" - - #{ Interface + + #{ Interface def update_cache(self, force=False): """ Call this method if the underlying data changed to trigger an update of the internal caching structures. - + :param force: if True, the update must be performed. Otherwise the implementation may decide not to perform an update if it thinks nothing has changed. :return: True if an update was performed as something change indeed""" - + # END interface def _databases_recursive(database, output): - """Fill output list with database from db, in order. Deals with Loose, Packed + """Fill output list with database from db, in order. Deals with Loose, Packed and compound databases.""" if isinstance(database, CompoundDB): compounds = list() @@ -209,11 +209,11 @@ def _databases_recursive(database, output): else: output.append(database) # END handle database type - + class CompoundDB(ObjectDBR, LazyMixin, CachingDB): """A database which delegates calls to sub-databases. - + Databases are stored in the lazy-loaded _dbs attribute. Define _set_cache_ to update it with your databases""" def _set_cache_(self, attr): @@ -223,27 +223,27 @@ def _set_cache_(self, attr): self._db_cache = dict() else: super(CompoundDB, self)._set_cache_(attr) - + def _db_query(self, sha): """:return: database containing the given 20 byte sha :raise BadObject:""" - # most databases use binary representations, prevent converting + # most databases use binary representations, prevent converting # it everytime a database is being queried try: return self._db_cache[sha] except KeyError: pass # END first level cache - + for db in self._dbs: if db.has_object(sha): self._db_cache[sha] = db return db # END for each database raise BadObject(sha) - - #{ ObjectDBR interface - + + #{ ObjectDBR interface + def has_object(self, sha): try: self._db_query(sha) @@ -251,24 +251,24 @@ def has_object(self, sha): except BadObject: return False # END handle exceptions - + def info(self, sha): return self._db_query(sha).info(sha) - + def stream(self, sha): return self._db_query(sha).stream(sha) def size(self): """:return: total size of all contained databases""" return reduce(lambda x,y: x+y, (db.size() for db in self._dbs), 0) - + def sha_iter(self): return chain(*(db.sha_iter() for db in self._dbs)) - + #} END object DBR Interface - + #{ Interface - + def databases(self): """:return: tuple of database instances we use for lookups""" return tuple(self._dbs) @@ -283,7 +283,7 @@ def update_cache(self, force=False): # END if is caching db # END for each database to update return stat - + def partial_to_complete_sha_hex(self, partial_hexsha): """ :return: 20 byte binary sha1 from the given less-than-40 byte hexsha @@ -291,14 +291,14 @@ def partial_to_complete_sha_hex(self, partial_hexsha): :raise AmbiguousObjectName: """ databases = list() _databases_recursive(self, databases) - + len_partial_hexsha = len(partial_hexsha) if len_partial_hexsha % 2 != 0: partial_binsha = hex_to_bin(partial_hexsha + "0") else: partial_binsha = hex_to_bin(partial_hexsha) - # END assure successful binary conversion - + # END assure successful binary conversion + candidate = None for db in databases: full_bin_sha = None @@ -320,7 +320,5 @@ def partial_to_complete_sha_hex(self, partial_hexsha): if not candidate: raise BadObject(partial_binsha) return candidate - - #} END interface - + #} END interface diff --git a/gitdb/db/git.py b/gitdb/db/git.py index 1d6ad0f26..6e6ec5d1f 100644 --- a/gitdb/db/git.py +++ b/gitdb/db/git.py @@ -14,10 +14,11 @@ from gitdb.util import LazyMixin from gitdb.exc import ( - InvalidDBRoot, - BadObject, - AmbiguousObjectName - ) + InvalidDBRoot, + BadObject, + AmbiguousObjectName +) + import os __all__ = ('GitDB', ) @@ -30,21 +31,21 @@ class GitDB(FileDBBase, ObjectDBW, CompoundDB): PackDBCls = PackedDB LooseDBCls = LooseObjectDB ReferenceDBCls = ReferenceDB - + # Directories packs_dir = 'pack' loose_dir = '' alternates_dir = os.path.join('info', 'alternates') - + def __init__(self, root_path): """Initialize ourselves on a git objects directory""" super(GitDB, self).__init__(root_path) - + def _set_cache_(self, attr): if attr == '_dbs' or attr == '_loose_db': self._dbs = list() loose_db = None - for subpath, dbcls in ((self.packs_dir, self.PackDBCls), + for subpath, dbcls in ((self.packs_dir, self.PackDBCls), (self.loose_dir, self.LooseDBCls), (self.alternates_dir, self.ReferenceDBCls)): path = self.db_path(subpath) @@ -55,31 +56,30 @@ def _set_cache_(self, attr): # END remember loose db # END check path exists # END for each db type - + # should have at least one subdb if not self._dbs: raise InvalidDBRoot(self.root_path()) # END handle error - + # we the first one should have the store method assert loose_db is not None and hasattr(loose_db, 'store'), "First database needs store functionality" - + # finally set the value self._loose_db = loose_db else: super(GitDB, self)._set_cache_(attr) # END handle attrs - + #{ ObjectDBW interface - + def store(self, istream): return self._loose_db.store(istream) - + def ostream(self): return self._loose_db.ostream() - + def set_ostream(self, ostream): return self._loose_db.set_ostream(ostream) - + #} END objectdbw interface - diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index dc0ea0e3b..4ebca84d3 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -10,46 +10,46 @@ from gitdb.exc import ( - InvalidDBRoot, + InvalidDBRoot, BadObject, AmbiguousObjectName - ) +) from gitdb.stream import ( DecompressMemMapReader, FDCompressedSha1Writer, FDStream, Sha1Writer - ) +) from gitdb.base import ( - OStream, - OInfo - ) + OStream, + OInfo +) from gitdb.util import ( - file_contents_ro_filepath, - ENOENT, - hex_to_bin, - bin_to_hex, - exists, - chmod, - isdir, - isfile, - remove, - mkdir, - rename, - dirname, - basename, - join - ) - -from gitdb.fun import ( + file_contents_ro_filepath, + ENOENT, + hex_to_bin, + bin_to_hex, + exists, + chmod, + isdir, + isfile, + remove, + mkdir, + rename, + dirname, + basename, + join +) + +from gitdb.fun import ( chunk_size, - loose_object_header_info, + loose_object_header_info, write_object, stream_copy - ) +) import tempfile import mmap @@ -62,11 +62,11 @@ class LooseObjectDB(FileDBBase, ObjectDBR, ObjectDBW): """A database which operates on loose object files""" - + # CONFIGURATION # chunks in which data will be copied between streams stream_chunk_size = chunk_size - + # On windows we need to keep it writable, otherwise it cannot be removed # either new_objects_mode = 0444 @@ -81,14 +81,14 @@ def __init__(self, root_path): # Depending on the root, this might work for some mounts, for others not, which # is why it is per instance self._fd_open_flags = getattr(os, 'O_NOATIME', 0) - - #{ Interface + + #{ Interface def object_path(self, hexsha): """ - :return: path at which the object with the given hexsha would be stored, + :return: path at which the object with the given hexsha would be stored, relative to the database root""" return join(hexsha[:2], hexsha[2:]) - + def readable_db_object_path(self, hexsha): """ :return: readable object path to the object identified by hexsha @@ -97,8 +97,8 @@ def readable_db_object_path(self, hexsha): return self._hexsha_to_file[hexsha] except KeyError: pass - # END ignore cache misses - + # END ignore cache misses + # try filesystem path = self.db_path(self.object_path(hexsha)) if exists(path): @@ -106,11 +106,11 @@ def readable_db_object_path(self, hexsha): return path # END handle cache raise BadObject(hexsha) - + def partial_to_complete_sha_hex(self, partial_hexsha): """:return: 20 byte binary sha1 string which matches the given name uniquely :param name: hexadecimal partial name - :raise AmbiguousObjectName: + :raise AmbiguousObjectName: :raise BadObject: """ candidate = None for binsha in self.sha_iter(): @@ -123,9 +123,9 @@ def partial_to_complete_sha_hex(self, partial_hexsha): if candidate is None: raise BadObject(partial_hexsha) return candidate - + #} END interface - + def _map_loose_object(self, sha): """ :return: memory map of that file to allow random read access @@ -151,13 +151,13 @@ def _map_loose_object(self, sha): finally: os.close(fd) # END assure file is closed - + def set_ostream(self, stream): """:raise TypeError: if the stream does not support the Sha1Writer interface""" if stream is not None and not isinstance(stream, Sha1Writer): raise TypeError("Output stream musst support the %s interface" % Sha1Writer.__name__) return super(LooseObjectDB, self).set_ostream(stream) - + def info(self, sha): m = self._map_loose_object(sha) try: @@ -166,12 +166,12 @@ def info(self, sha): finally: m.close() # END assure release of system resources - + def stream(self, sha): m = self._map_loose_object(sha) type, size, stream = DecompressMemMapReader.new(m, close_on_deletion = True) return OStream(sha, type, size, stream) - + def has_object(self, sha): try: self.readable_db_object_path(bin_to_hex(sha)) @@ -179,7 +179,7 @@ def has_object(self, sha): except BadObject: return False # END check existance - + def store(self, istream): """note: The sha we produce will be hex by nature""" tmp_path = None @@ -187,14 +187,14 @@ def store(self, istream): if writer is None: # open a tmp file to write the data to fd, tmp_path = tempfile.mkstemp(prefix='obj', dir=self._root_path) - + if istream.binsha is None: writer = FDCompressedSha1Writer(fd) else: writer = FDStream(fd) # END handle direct stream copies # END handle custom writer - + try: try: if istream.binsha is not None: @@ -215,14 +215,14 @@ def store(self, istream): os.remove(tmp_path) raise # END assure tmpfile removal on error - + hexsha = None if istream.binsha: hexsha = istream.hexsha else: hexsha = writer.sha(as_hex=True) # END handle sha - + if tmp_path: obj_path = self.db_path(self.object_path(hexsha)) obj_dir = dirname(obj_path) @@ -234,29 +234,28 @@ def store(self, istream): remove(obj_path) # END handle win322 rename(tmp_path, obj_path) - + # make sure its readable for all ! It started out as rw-- tmp file # but needs to be rwrr chmod(obj_path, self.new_objects_mode) # END handle dry_run - + istream.binsha = hex_to_bin(hexsha) return istream - + def sha_iter(self): # find all files which look like an object, extract sha from there for root, dirs, files in os.walk(self.root_path()): root_base = basename(root) if len(root_base) != 2: continue - + for f in files: if len(f) != 38: continue yield hex_to_bin(root_base + f) # END for each file # END for each walk iteration - + def size(self): return len(tuple(self.sha_iter())) - diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index b9b2b8995..e4fba94b3 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -10,18 +10,14 @@ ) from gitdb.base import ( - OStream, - IStream, - ) + OStream, + IStream, +) from gitdb.exc import ( - BadObject, - UnsupportedOperation - ) -from gitdb.stream import ( - ZippedStoreShaWriter, - DecompressMemMapReader, - ) + BadObject, + UnsupportedOperation +) from cStringIO import StringIO @@ -32,45 +28,45 @@ class MemoryDB(ObjectDBR, ObjectDBW): retrieval. It should be used to buffer results and obtain SHAs before writing it to the actual physical storage, as it allows to query whether object already exists in the target storage before introducing actual IO - + **Note:** memory is currently not threadsafe, hence the async methods cannot be used for storing""" - + def __init__(self): super(MemoryDB, self).__init__() self._db = LooseObjectDB("path/doesnt/matter") - + # maps 20 byte shas to their OStream objects self._cache = dict() - + def set_ostream(self, stream): raise UnsupportedOperation("MemoryDB's always stream into memory") - + def store(self, istream): zstream = ZippedStoreShaWriter() self._db.set_ostream(zstream) - + istream = self._db.store(istream) zstream.close() # close to flush zstream.seek(0) - - # don't provide a size, the stream is written in object format, hence the + + # don't provide a size, the stream is written in object format, hence the # header needs decompression - decomp_stream = DecompressMemMapReader(zstream.getvalue(), close_on_deletion=False) + decomp_stream = DecompressMemMapReader(zstream.getvalue(), close_on_deletion=False) self._cache[istream.binsha] = OStream(istream.binsha, istream.type, istream.size, decomp_stream) - + return istream - + def store_async(self, reader): raise UnsupportedOperation("MemoryDBs cannot currently be used for async write access") - + def has_object(self, sha): return sha in self._cache def info(self, sha): # we always return streams, which are infos as well return self.stream(sha) - + def stream(self, sha): try: ostream = self._cache[sha] @@ -80,15 +76,15 @@ def stream(self, sha): except KeyError: raise BadObject(sha) # END exception handling - + def size(self): return len(self._cache) - + def sha_iter(self): return self._cache.iterkeys() - - - #{ Interface + + + #{ Interface def stream_copy(self, sha_iter, odb): """Copy the streams as identified by sha's yielded by sha_iter into the given odb The streams will be copied directly @@ -100,12 +96,12 @@ def stream_copy(self, sha_iter, odb): if odb.has_object(sha): continue # END check object existance - + ostream = self.stream(sha) # compressed data including header sio = StringIO(ostream.stream.data()) istream = IStream(ostream.type, ostream.size, sio, sha) - + odb.store(istream) count += 1 # END for each sha diff --git a/gitdb/db/pack.py b/gitdb/db/pack.py index 928731937..09f811847 100644 --- a/gitdb/db/pack.py +++ b/gitdb/db/pack.py @@ -12,10 +12,10 @@ from gitdb.util import LazyMixin from gitdb.exc import ( - BadObject, - UnsupportedOperation, - AmbiguousObjectName - ) + BadObject, + UnsupportedOperation, + AmbiguousObjectName +) from gitdb.pack import PackEntity @@ -29,12 +29,12 @@ class PackedDB(FileDBBase, ObjectDBR, CachingDB, LazyMixin): """A database operating on a set of object packs""" - + # sort the priority list every N queries - # Higher values are better, performance tests don't show this has + # Higher values are better, performance tests don't show this has # any effect, but it should have one _sort_interval = 500 - + def __init__(self, root_path): super(PackedDB, self).__init__(root_path) # list of lists with three items: @@ -44,29 +44,29 @@ def __init__(self, root_path): # self._entities = list() # lazy loaded list self._hit_count = 0 # amount of hits self._st_mtime = 0 # last modification data of our root path - + def _set_cache_(self, attr): if attr == '_entities': self._entities = list() self.update_cache(force=True) # END handle entities initialization - + def _sort_entities(self): self._entities.sort(key=lambda l: l[0], reverse=True) - + def _pack_info(self, sha): """:return: tuple(entity, index) for an item at the given sha :param sha: 20 or 40 byte sha :raise BadObject: **Note:** This method is not thread-safe, but may be hit in multi-threaded - operation. The worst thing that can happen though is a counter that + operation. The worst thing that can happen though is a counter that was not incremented, or the list being in wrong order. So we safe the time for locking here, lets see how that goes""" # presort ? if self._hit_count % self._sort_interval == 0: self._sort_entities() # END update sorting - + for item in self._entities: index = item[2](sha) if index is not None: @@ -75,14 +75,14 @@ def _pack_info(self, sha): return (item[1], index) # END index found in pack # END for each item - + # no hit, see whether we have to update packs # NOTE: considering packs don't change very often, we safe this call # and leave it to the super-caller to trigger that raise BadObject(sha) - - #{ Object DB Read - + + #{ Object DB Read + def has_object(self, sha): try: self._pack_info(sha) @@ -90,15 +90,15 @@ def has_object(self, sha): except BadObject: return False # END exception handling - + def info(self, sha): entity, index = self._pack_info(sha) return entity.info_at_index(index) - + def stream(self, sha): entity, index = self._pack_info(sha) return entity.stream_at_index(index) - + def sha_iter(self): sha_list = list() for entity in self.entities(): @@ -108,50 +108,50 @@ def sha_iter(self): yield sha_by_index(index) # END for each index # END for each entity - + def size(self): sizes = [item[1].index().size() for item in self._entities] return reduce(lambda x,y: x+y, sizes, 0) - + #} END object db read - + #{ object db write - + def store(self, istream): - """Storing individual objects is not feasible as a pack is designed to + """Storing individual objects is not feasible as a pack is designed to hold multiple objects. Writing or rewriting packs for single objects is inefficient""" raise UnsupportedOperation() - + def store_async(self, reader): # TODO: add ObjectDBRW before implementing this raise NotImplementedError() - + #} END object db write - - - #{ Interface - + + + #{ Interface + def update_cache(self, force=False): """ - Update our cache with the acutally existing packs on disk. Add new ones, + Update our cache with the acutally existing packs on disk. Add new ones, and remove deleted ones. We keep the unchanged ones - + :param force: If True, the cache will be updated even though the directory does not appear to have changed according to its modification timestamp. - :return: True if the packs have been updated so there is new information, + :return: True if the packs have been updated so there is new information, False if there was no change to the pack database""" stat = os.stat(self.root_path()) if not force and stat.st_mtime <= self._st_mtime: return False # END abort early on no change self._st_mtime = stat.st_mtime - + # packs are supposed to be prefixed with pack- by git-convention # get all pack files, figure out what changed pack_files = set(glob.glob(os.path.join(self.root_path(), "pack-*.pack"))) our_pack_files = set(item[1].pack().path() for item in self._entities) - + # new packs for pack_file in (pack_files - our_pack_files): # init the hit-counter/priority with the size, a good measure for hit- @@ -159,7 +159,7 @@ def update_cache(self, force=False): entity = PackEntity(pack_file) self._entities.append([entity.pack().size(), entity, entity.index().sha_to_index]) # END for each new packfile - + # removed packs for pack_file in (our_pack_files - pack_files): del_index = -1 @@ -172,22 +172,22 @@ def update_cache(self, force=False): assert del_index != -1 del(self._entities[del_index]) # END for each removed pack - + # reinitialize prioritiess self._sort_entities() return True - + def entities(self): """:return: list of pack entities operated upon by this database""" return [ item[1] for item in self._entities ] - + def partial_to_complete_sha(self, partial_binsha, canonical_length): """:return: 20 byte sha as inferred by the given partial binary sha - :param partial_binsha: binary sha with less than 20 bytes + :param partial_binsha: binary sha with less than 20 bytes :param canonical_length: length of the corresponding canonical representation. It is required as binary sha's cannot display whether the original hex sha had an odd or even number of characters - :raise AmbiguousObjectName: + :raise AmbiguousObjectName: :raise BadObject: """ candidate = None for item in self._entities: @@ -199,11 +199,11 @@ def partial_to_complete_sha(self, partial_binsha, canonical_length): candidate = sha # END handle full sha could be found # END for each entity - + if candidate: return candidate - + # still not found ? raise BadObject(partial_binsha) - + #} END interface diff --git a/gitdb/db/ref.py b/gitdb/db/ref.py index 60004a77a..368ab9a61 100644 --- a/gitdb/db/ref.py +++ b/gitdb/db/ref.py @@ -11,16 +11,16 @@ class ReferenceDB(CompoundDB): """A database consisting of database referred to in a file""" - + # Configuration # Specifies the object database to use for the paths found in the alternates # file. If None, it defaults to the GitDB ObjectDBCls = None - + def __init__(self, ref_file): super(ReferenceDB, self).__init__() self._ref_file = ref_file - + def _set_cache_(self, attr): if attr == '_dbs': self._dbs = list() @@ -28,7 +28,7 @@ def _set_cache_(self, attr): else: super(ReferenceDB, self)._set_cache_(attr) # END handle attrs - + def _update_dbs_from_ref_file(self): dbcls = self.ObjectDBCls if dbcls is None: @@ -36,7 +36,7 @@ def _update_dbs_from_ref_file(self): from git import GitDB dbcls = GitDB # END get db type - + # try to get as many as possible, don't fail if some are unavailable ref_paths = list() try: @@ -44,10 +44,10 @@ def _update_dbs_from_ref_file(self): except (OSError, IOError): pass # END handle alternates - + ref_paths_set = set(ref_paths) cur_ref_paths_set = set(db.root_path() for db in self._dbs) - + # remove existing for path in (cur_ref_paths_set - ref_paths_set): for i, db in enumerate(self._dbs[:]): @@ -56,7 +56,7 @@ def _update_dbs_from_ref_file(self): continue # END del matching db # END for each path to remove - + # add new # sort them to maintain order added_paths = sorted(ref_paths_set - cur_ref_paths_set, key=lambda p: ref_paths.index(p)) @@ -72,7 +72,7 @@ def _update_dbs_from_ref_file(self): # ignore invalid paths or issues pass # END for each path to add - + def update_cache(self, force=False): # re-read alternates and update databases self._update_dbs_from_ref_file() diff --git a/gitdb/exc.py b/gitdb/exc.py index 7180fb586..47fc80912 100644 --- a/gitdb/exc.py +++ b/gitdb/exc.py @@ -7,17 +7,17 @@ class ODBError(Exception): """All errors thrown by the object database""" - + class InvalidDBRoot(ODBError): """Thrown if an object database cannot be initialized at the given path""" - + class BadObject(ODBError): - """The object with the given SHA does not exist. Instantiate with the + """The object with the given SHA does not exist. Instantiate with the failed sha""" - + def __str__(self): return "BadObject: %s" % to_hex_sha(self.args[0]) - + class ParseError(ODBError): """Thrown if the parsing of a file failed due to an invalid format""" diff --git a/gitdb/fun.py b/gitdb/fun.py index c1e73e895..9e5c44a6c 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -24,30 +24,30 @@ delta_types = (OFS_DELTA, REF_DELTA) type_id_to_type_map = { - 0 : "", # EXT 1 - 1 : "commit", - 2 : "tree", - 3 : "blob", - 4 : "tag", - 5 : "", # EXT 2 - OFS_DELTA : "OFS_DELTA", # OFFSET DELTA - REF_DELTA : "REF_DELTA" # REFERENCE DELTA - } + 0 : "", # EXT 1 + 1 : "commit", + 2 : "tree", + 3 : "blob", + 4 : "tag", + 5 : "", # EXT 2 + OFS_DELTA : "OFS_DELTA", # OFFSET DELTA + REF_DELTA : "REF_DELTA" # REFERENCE DELTA +} type_to_type_id_map = dict( - commit=1, - tree=2, - blob=3, - tag=4, - OFS_DELTA=OFS_DELTA, - REF_DELTA=REF_DELTA - ) + commit=1, + tree=2, + blob=3, + tag=4, + OFS_DELTA=OFS_DELTA, + REF_DELTA=REF_DELTA +) # used when dealing with larger streams -chunk_size = 1000*mmap.PAGESIZE +chunk_size = 1000 * mmap.PAGESIZE -__all__ = ('is_loose_object', 'loose_object_header_info', 'msb_size', 'pack_object_header_info', - 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data', +__all__ = ('is_loose_object', 'loose_object_header_info', 'msb_size', 'pack_object_header_info', + 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data', 'is_equal_canonical_sha', 'connect_deltas', 'DeltaChunkList', 'create_pack_object_header') @@ -59,11 +59,11 @@ def _set_delta_rbound(d, size): to our size :return: d""" d.ts = size - + # NOTE: data is truncated automatically when applying the delta # MUST NOT DO THIS HERE return d - + def _move_delta_lbound(d, bytes): """Move the delta by the given amount of bytes, reducing its size so that its right bound stays static @@ -71,19 +71,19 @@ def _move_delta_lbound(d, bytes): :return: d""" if bytes == 0: return - + d.to += bytes d.so += bytes d.ts -= bytes if d.data is not None: d.data = d.data[bytes:] # END handle data - + return d - + def delta_duplicate(src): return DeltaChunk(src.to, src.ts, src.so, src.data) - + def delta_chunk_apply(dc, bbuf, write): """Apply own data to the target buffer :param bbuf: buffer providing source bytes for copy operations @@ -107,13 +107,13 @@ class DeltaChunk(object): """Represents a piece of a delta, it can either add new data, or copy existing one from a source buffer""" __slots__ = ( - 'to', # start offset in the target buffer in bytes + 'to', # start offset in the target buffer in bytes 'ts', # size of this chunk in the target buffer in bytes 'so', # start offset in the source buffer in bytes or None 'data', # chunk of bytes to be added to the target buffer, # DeltaChunkList to use as base, or None ) - + def __init__(self, to, ts, so, data): self.to = to self.ts = ts @@ -122,22 +122,22 @@ def __init__(self, to, ts, so, data): def __repr__(self): return "DeltaChunk(%i, %i, %s, %s)" % (self.to, self.ts, self.so, self.data or "") - + #{ Interface - + def rbound(self): return self.to + self.ts - + def has_data(self): """:return: True if the instance has data to add to the target stream""" return self.data is not None - + #} END interface def _closest_index(dcl, absofs): """:return: index at which the given absofs should be inserted. The index points to the DeltaChunk with a target buffer absofs that equals or is greater than - absofs. + absofs. **Note:** global method for performance only, it belongs to DeltaChunkList""" lo = 0 hi = len(dcl) @@ -153,7 +153,7 @@ def _closest_index(dcl, absofs): # END handle bound # END for each delta absofs return len(dcl)-1 - + def delta_list_apply(dcl, bbuf, write): """Apply the chain's changes and write the final result using the passed write function. @@ -166,14 +166,14 @@ def delta_list_apply(dcl, bbuf, write): # END for each dc def delta_list_slice(dcl, absofs, size, ndcl): - """:return: Subsection of this list at the given absolute offset, with the given + """:return: Subsection of this list at the given absolute offset, with the given size in bytes. :return: None""" cdi = _closest_index(dcl, absofs) # delta start index cd = dcl[cdi] slen = len(dcl) - lappend = ndcl.append - + lappend = ndcl.append + if cd.to != absofs: tcd = DeltaChunk(cd.to, cd.ts, cd.so, cd.data) _move_delta_lbound(tcd, absofs - cd.to) @@ -182,7 +182,7 @@ def delta_list_slice(dcl, absofs, size, ndcl): size -= tcd.ts cdi += 1 # END lbound overlap handling - + while cdi < slen and size: # are we larger than the current block cd = dcl[cdi] @@ -198,38 +198,38 @@ def delta_list_slice(dcl, absofs, size, ndcl): # END hadle size cdi += 1 # END for each chunk - - + + class DeltaChunkList(list): """List with special functionality to deal with DeltaChunks. There are two types of lists we represent. The one was created bottom-up, working - towards the latest delta, the other kind was created top-down, working from the - latest delta down to the earliest ancestor. This attribute is queryable + towards the latest delta, the other kind was created top-down, working from the + latest delta down to the earliest ancestor. This attribute is queryable after all processing with is_reversed.""" - + __slots__ = tuple() - + def rbound(self): """:return: rightmost extend in bytes, absolute""" if len(self) == 0: return 0 return self[-1].rbound() - + def lbound(self): """:return: leftmost byte at which this chunklist starts""" if len(self) == 0: return 0 return self[0].to - + def size(self): """:return: size of bytes as measured by our delta chunks""" return self.rbound() - self.lbound() - + def apply(self, bbuf, write): """Only used by public clients, internally we only use the global routines for performance""" return delta_list_apply(self, bbuf, write) - + def compress(self): """Alter the list to reduce the amount of nodes. Currently we concatenate add-chunks @@ -239,7 +239,7 @@ def compress(self): return self i = 0 slen_orig = slen - + first_data_index = None while i < slen: dc = self[i] @@ -253,27 +253,27 @@ def compress(self): xdc = self[x] nd.write(xdc.data[:xdc.ts]) # END collect data - + del(self[first_data_index:i-1]) buf = nd.getvalue() - self.insert(first_data_index, DeltaChunk(so, len(buf), 0, buf)) - + self.insert(first_data_index, DeltaChunk(so, len(buf), 0, buf)) + slen = len(self) i = first_data_index + 1 - + # END concatenate data first_data_index = None continue # END skip non-data chunks - + if first_data_index is None: first_data_index = i-1 # END iterate list - + #if slen_orig != len(self): # print "INFO: Reduced delta list len to %f %% of former size" % ((float(len(self)) / slen_orig) * 100) return self - + def check_integrity(self, target_size=-1): """Verify the list has non-overlapping chunks only, and the total size matches target_size @@ -283,39 +283,39 @@ def check_integrity(self, target_size=-1): assert self[-1].rbound() == target_size assert reduce(lambda x,y: x+y, (d.ts for d in self), 0) == target_size # END target size verification - + if len(self) < 2: return - + # check data for dc in self: assert dc.ts > 0 if dc.has_data(): assert len(dc.data) >= dc.ts # END for each dc - + left = islice(self, 0, len(self)-1) right = iter(self) right.next() - # this is very pythonic - we might have just use index based access here, + # this is very pythonic - we might have just use index based access here, # but this could actually be faster for lft,rgt in izip(left, right): assert lft.rbound() == rgt.to assert lft.to + lft.ts == rgt.to # END for each pair - + class TopdownDeltaChunkList(DeltaChunkList): - """Represents a list which is generated by feeding its ancestor streams one by + """Represents a list which is generated by feeding its ancestor streams one by one""" - __slots__ = tuple() - + __slots__ = tuple() + def connect_with_next_base(self, bdcl): """Connect this chain with the next level of our base delta chunklist. The goal in this game is to mark as many of our chunks rigid, hence they - cannot be changed by any of the upcoming bases anymore. Once all our + cannot be changed by any of the upcoming bases anymore. Once all our chunks are marked like that, we can stop all processing - :param bdcl: data chunk list being one of our bases. They must be fed in + :param bdcl: data chunk list being one of our bases. They must be fed in consequtively and in order, towards the earliest ancestor delta :return: True if processing was done. Use it to abort processing of remaining streams if False is returned""" @@ -326,13 +326,13 @@ def connect_with_next_base(self, bdcl): while dci < slen: dc = self[dci] dci += 1 - + # all add-chunks which are already topmost don't need additional processing if dc.data is not None: nfc += 1 continue # END skip add chunks - + # copy chunks # integrate the portion of the base list into ourselves. Lists # dont support efficient insertion ( just one at a time ), but for now @@ -341,13 +341,13 @@ def connect_with_next_base(self, bdcl): # ourselves in order to reduce the amount of insertions ... del(ccl[:]) delta_list_slice(bdcl, dc.so, dc.ts, ccl) - + # move the target bounds into place to match with our chunk ofs = dc.to - dc.so for cdc in ccl: cdc.to += ofs # END update target bounds - + if len(ccl) == 1: self[dci-1] = ccl[0] else: @@ -359,19 +359,19 @@ def connect_with_next_base(self, bdcl): del(self[dci-1:]) # include deletion of dc self.extend(ccl) self.extend(post_dci) - + slen = len(self) dci += len(ccl)-1 # deleted dc, added rest - + # END handle chunk replacement # END for each chunk - + if nfc == slen: return False # END handle completeness return True - - + + #} END structures #{ Routines @@ -386,14 +386,14 @@ def is_loose_object(m): def loose_object_header_info(m): """ - :return: tuple(type_string, uncompressed_size_in_bytes) the type string of the + :return: tuple(type_string, uncompressed_size_in_bytes) the type string of the object as well as its uncompressed size in bytes. :param m: memory map from which to read the compressed object data""" decompress_size = 8192 # is used in cgit as well hdr = decompressobj().decompress(m, decompress_size) type_name, size = hdr[:hdr.find("\0")].split(" ") return type_name, int(size) - + def pack_object_header_info(data): """ :return: tuple(type_id, uncompressed_size_in_bytes, byte_offset) @@ -417,7 +417,7 @@ def create_pack_object_header(obj_type, obj_size): """ :return: string defining the pack header comprised of the object type and its incompressed size in bytes - + :param obj_type: pack type_id of the object :param obj_size: uncompressed size in bytes of the following object stream""" c = 0 # 1 byte @@ -432,10 +432,10 @@ def create_pack_object_header(obj_type, obj_size): #END until size is consumed hdr += chr(c) return hdr - + def msb_size(data, offset=0): """ - :return: tuple(read_bytes, size) read the msb size from the given random + :return: tuple(read_bytes, size) read the msb size from the given random access data starting at the given byte offset""" size = 0 i = 0 @@ -452,19 +452,19 @@ def msb_size(data, offset=0): # END while in range if not hit_msb: raise AssertionError("Could not find terminating MSB byte in data stream") - return i+offset, size - + return i+offset, size + def loose_object_header(type, size): """ :return: string representing the loose object header, which is immediately followed by the content stream of size 'size'""" return "%s %i\0" % (type, size) - + def write_object(type, size, read, write, chunk_size=chunk_size): """ - Write the object as identified by type, size and source_stream into the + Write the object as identified by type, size and source_stream into the target_stream - + :param type: type string of the object :param size: amount of bytes to write from source_stream :param read: read method of a stream providing the content data @@ -473,26 +473,26 @@ def write_object(type, size, read, write, chunk_size=chunk_size): the routine exits, even if an error is thrown :return: The actual amount of bytes written to stream, which includes the header and a trailing newline""" tbw = 0 # total num bytes written - + # WRITE HEADER: type SP size NULL tbw += write(loose_object_header(type, size)) tbw += stream_copy(read, write, size, chunk_size) - + return tbw def stream_copy(read, write, size, chunk_size): """ - Copy a stream up to size bytes using the provided read and write methods, + Copy a stream up to size bytes using the provided read and write methods, in chunks of chunk_size - + **Note:** its much like stream_copy utility, but operates just using methods""" dbw = 0 # num data bytes written - + # WRITE ALL DATA UP TO SIZE while True: cs = min(chunk_size, size-dbw) # NOTE: not all write methods return the amount of written bytes, like - # mmap.write. Its bad, but we just deal with it ... perhaps its not + # mmap.write. Its bad, but we just deal with it ... perhaps its not # even less efficient # data_len = write(read(cs)) # dbw += data_len @@ -505,27 +505,27 @@ def stream_copy(read, write, size, chunk_size): # END check for stream end # END duplicate data return dbw - + def connect_deltas(dstreams): """ Read the condensed delta chunk information from dstream and merge its information into a list of existing delta chunks - + :param dstreams: iterable of delta stream objects, the delta to be applied last comes first, then all its ancestors in order :return: DeltaChunkList, containing all operations to apply""" tdcl = None # topmost dcl - + dcl = tdcl = TopdownDeltaChunkList() for dsi, ds in enumerate(dstreams): # print "Stream", dsi db = ds.read() delta_buf_size = ds.size - + # read header i, base_size = msb_size(db) i, target_size = msb_size(db, i) - + # interpret opcodes tbw = 0 # amount of target bytes written while i < delta_buf_size: @@ -554,15 +554,15 @@ def connect_deltas(dstreams): if (c & 0x40): cp_size |= (ord(db[i]) << 16) i += 1 - - if not cp_size: + + if not cp_size: cp_size = 0x10000 - + rbound = cp_off + cp_size if (rbound < cp_size or rbound > base_size): break - + dcl.append(DeltaChunk(tbw, cp_size, cp_off, None)) tbw += cp_size elif c: @@ -575,31 +575,31 @@ def connect_deltas(dstreams): raise ValueError("unexpected delta opcode 0") # END handle command byte # END while processing delta data - + dcl.compress() - + # merge the lists ! if dsi > 0: if not tdcl.connect_with_next_base(dcl): break # END handle merge - + # prepare next base dcl = DeltaChunkList() # END for each delta stream - + return tdcl - + def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): """ Apply data from a delta buffer using a source buffer to the target file - + :param src_buf: random access data from which the delta was created :param src_buf_size: size of the source buffer in bytes :param delta_buf_size: size fo the delta buffer in bytes :param delta_buf: random access delta data :param write: write method taking a chunk of bytes - + **Note:** transcribed to python from the similar routine in patch-delta.c""" i = 0 db = delta_buf @@ -629,10 +629,10 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): if (c & 0x40): cp_size |= (ord(db[i]) << 16) i += 1 - - if not cp_size: + + if not cp_size: cp_size = 0x10000 - + rbound = cp_off + cp_size if (rbound < cp_size or rbound > src_buf_size): @@ -645,28 +645,28 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): raise ValueError("unexpected delta opcode 0") # END handle command byte # END while processing delta data - + # yes, lets use the exact same error message that git uses :) assert i == delta_buf_size, "delta replay has gone wild" - - + + def is_equal_canonical_sha(canonical_length, match, sha1): """ :return: True if the given lhs and rhs 20 byte binary shas - The comparison will take the canonical_length of the match sha into account, + The comparison will take the canonical_length of the match sha into account, hence the comparison will only use the last 4 bytes for uneven canonical representations :param match: less than 20 byte sha :param sha1: 20 byte sha""" binary_length = canonical_length/2 if match[:binary_length] != sha1[:binary_length]: return False - + if canonical_length - binary_length and \ (ord(match[-1]) ^ ord(sha1[len(match)-1])) & 0xf0: return False # END handle uneven canonnical length return True - + #} END routines diff --git a/gitdb/pack.py b/gitdb/pack.py index 48121f026..4a0badccb 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -54,9 +54,9 @@ ) from struct import ( - pack, - unpack, - ) + pack, + unpack, +) from binascii import crc32 @@ -68,10 +68,10 @@ __all__ = ('PackIndexFile', 'PackFile', 'PackEntity') - - -#{ Utilities + + +#{ Utilities def pack_object_at(cursor, offset, as_stream): """ @@ -81,13 +81,13 @@ def pack_object_at(cursor, offset, as_stream): data to be read decompressed. :param data: random accessable data containing all required information :parma offset: offset in to the data at which the object information is located - :param as_stream: if True, a stream object will be returned that can read + :param as_stream: if True, a stream object will be returned that can read the data, otherwise you receive an info object only""" data = cursor.use_region(offset).buffer() type_id, uncomp_size, data_rela_offset = pack_object_header_info(data) total_rela_offset = None # set later, actual offset until data stream begins delta_info = None - + # OFFSET DELTA if type_id == OFS_DELTA: i = data_rela_offset @@ -111,7 +111,7 @@ def pack_object_at(cursor, offset, as_stream): # assume its a base object total_rela_offset = data_rela_offset # END handle type id - + abs_data_offset = offset + total_rela_offset if as_stream: stream = DecompressMemMapReader(buffer(data, total_rela_offset), False, uncomp_size) @@ -141,29 +141,29 @@ def write_stream_to_pack(read, write, zstream, base_crc=None): if want_crc: crc = base_crc #END initialize crc - + while True: chunk = read(chunk_size) br += len(chunk) compressed = zstream.compress(chunk) bw += len(compressed) write(compressed) # cannot assume return value - + if want_crc: crc = crc32(compressed, crc) #END handle crc - + if len(chunk) != chunk_size: break #END copy loop - + compressed = zstream.flush() bw += len(compressed) write(compressed) if want_crc: crc = crc32(compressed, crc) #END handle crc - + return (br, bw, crc) @@ -175,26 +175,26 @@ class IndexWriter(object): in one go to the given stream **Note:** currently only writes v2 indices""" __slots__ = '_objs' - + def __init__(self): self._objs = list() - + def append(self, binsha, crc, offset): """Append one piece of object information""" self._objs.append((binsha, crc, offset)) - + def write(self, pack_sha, write): """Write the index file using the given write method :param pack_sha: binary sha over the whole pack that we index :return: sha1 binary sha over all index file contents""" # sort for sha1 hash self._objs.sort(key=lambda o: o[0]) - + sha_writer = FlexibleSha1Writer(write) sha_write = sha_writer.write sha_write(PackIndexFile.index_v2_signature) sha_write(pack(">L", PackIndexFile.index_version_default)) - + # fanout tmplist = list((0,)*256) # fanout or list with 64 bit offsets for t in self._objs: @@ -206,16 +206,16 @@ def write(self, pack_sha, write): tmplist[i+1] += v #END write each fanout entry sha_write(pack('>L', tmplist[255])) - + # sha1 ordered # save calls, that is push them into c sha_write(''.join(t[0] for t in self._objs)) - + # crc32 for t in self._objs: sha_write(pack('>L', t[1]&0xffffffff)) #END for each crc - + tmplist = list() # offset 32 for t in self._objs: @@ -226,28 +226,28 @@ def write(self, pack_sha, write): #END hande 64 bit offsets sha_write(pack('>L', ofs&0xffffffff)) #END for each offset - + # offset 64 for ofs in tmplist: sha_write(pack(">Q", ofs)) #END for each offset - + # trailer assert(len(pack_sha) == 20) sha_write(pack_sha) sha = sha_writer.sha(as_hex=False) write(sha) return sha - - + + class PackIndexFile(LazyMixin): """A pack index provides offsets into the corresponding pack, allowing to find locations for offsets faster.""" - + # Dont use slots as we dynamically bind functions for each version, need a dict for this # The slots you see here are just to keep track of our instance variables - # __slots__ = ('_indexpath', '_fanout_table', '_cursor', '_version', + # __slots__ = ('_indexpath', '_fanout_table', '_cursor', '_version', # '_sha_list_offset', '_crc_list_offset', '_pack_offset', '_pack_64_offset') # used in v2 indices @@ -258,7 +258,7 @@ class PackIndexFile(LazyMixin): def __init__(self, indexpath): super(PackIndexFile, self).__init__() self._indexpath = indexpath - + def _set_cache_(self, attr): if attr == "_packfile_checksum": self._packfile_checksum = self._cursor.map()[-40:-20] @@ -276,91 +276,91 @@ def _set_cache_(self, attr): else: # now its time to initialize everything - if we are here, someone wants # to access the fanout table or related properties - + # CHECK VERSION mmap = self._cursor.map() self._version = (mmap[:4] == self.index_v2_signature and 2) or 1 if self._version == 2: - version_id = unpack_from(">L", mmap, 4)[0] + version_id = unpack_from(">L", mmap, 4)[0] assert version_id == self._version, "Unsupported index version: %i" % version_id # END assert version - + # SETUP FUNCTIONS # setup our functions according to the actual version for fname in ('entry', 'offset', 'sha', 'crc'): setattr(self, fname, getattr(self, "_%s_v%i" % (fname, self._version))) # END for each function to initialize - - + + # INITIALIZE DATA # byte offset is 8 if version is 2, 0 otherwise self._initialize() # END handle attributes - + #{ Access V1 - + def _entry_v1(self, i): """:return: tuple(offset, binsha, 0)""" - return unpack_from(">L20s", self._cursor.map(), 1024 + i*24) + (0, ) - + return unpack_from(">L20s", self._cursor.map(), 1024 + i*24) + (0, ) + def _offset_v1(self, i): """see ``_offset_v2``""" return unpack_from(">L", self._cursor.map(), 1024 + i*24)[0] - + def _sha_v1(self, i): """see ``_sha_v2``""" base = 1024 + (i*24)+4 return self._cursor.map()[base:base+20] - + def _crc_v1(self, i): """unsupported""" return 0 - + #} END access V1 - + #{ Access V2 def _entry_v2(self, i): """:return: tuple(offset, binsha, crc)""" return (self._offset_v2(i), self._sha_v2(i), self._crc_v2(i)) - + def _offset_v2(self, i): - """:return: 32 or 64 byte offset into pack files. 64 byte offsets will only + """:return: 32 or 64 byte offset into pack files. 64 byte offsets will only be returned if the pack is larger than 4 GiB, or 2^32""" offset = unpack_from(">L", self._cursor.map(), self._pack_offset + i * 4)[0] - + # if the high-bit is set, this indicates that we have to lookup the offset # in the 64 bit region of the file. The current offset ( lower 31 bits ) # are the index into it if offset & 0x80000000: offset = unpack_from(">Q", self._cursor.map(), self._pack_64_offset + (offset & ~0x80000000) * 8)[0] # END handle 64 bit offset - + return offset - + def _sha_v2(self, i): """:return: sha at the given index of this file index instance""" base = self._sha_list_offset + i * 20 return self._cursor.map()[base:base+20] - + def _crc_v2(self, i): """:return: 4 bytes crc for the object at index i""" - return unpack_from(">L", self._cursor.map(), self._crc_list_offset + i * 4)[0] - + return unpack_from(">L", self._cursor.map(), self._crc_list_offset + i * 4)[0] + #} END access V2 - + #{ Initialization - + def _initialize(self): """initialize base data""" self._fanout_table = self._read_fanout((self._version == 2) * 8) - + if self._version == 2: self._crc_list_offset = self._sha_list_offset + self.size() * 20 self._pack_offset = self._crc_list_offset + self.size() * 4 self._pack_64_offset = self._pack_offset + self.size() * 4 # END setup base - + def _read_fanout(self, byte_offset): """Generate a fanout table from our data""" d = self._cursor.map() @@ -370,38 +370,38 @@ def _read_fanout(self, byte_offset): append(unpack_from('>L', d, byte_offset + i*4)[0]) # END for each entry return out - + #} END initialization - + #{ Properties def version(self): return self._version - + def size(self): """:return: amount of objects referred to by this index""" return self._fanout_table[255] - + def path(self): """:return: path to the packindexfile""" return self._indexpath - + def packfile_checksum(self): """:return: 20 byte sha representing the sha1 hash of the pack file""" return self._cursor.map()[-40:-20] - + def indexfile_checksum(self): """:return: 20 byte sha representing the sha1 hash of this index file""" return self._cursor.map()[-20:] - + def offsets(self): """:return: sequence of all offsets in the order in which they were written - + **Note:** return value can be random accessed, but may be immmutable""" if self._version == 2: # read stream to array, convert to tuple a = array.array('I') # 4 byte unsigned int, long are 8 byte on 64 bit it appears a.fromstring(buffer(self._cursor.map(), self._pack_offset, self._pack_64_offset - self._pack_offset)) - + # networkbyteorder to something array likes more if sys.byteorder == 'little': a.byteswap() @@ -409,7 +409,7 @@ def offsets(self): else: return tuple(self.offset(index) for index in xrange(self.size())) # END handle version - + def sha_to_index(self, sha): """ :return: index usable with the ``offset`` or ``entry`` method, or None @@ -421,7 +421,7 @@ def sha_to_index(self, sha): if first_byte != 0: lo = self._fanout_table[first_byte-1] hi = self._fanout_table[first_byte] # the upper, right bound of the bisection - + # bisect until we have the sha while lo < hi: mid = (lo + hi) / 2 @@ -435,29 +435,29 @@ def sha_to_index(self, sha): # END handle midpoint # END bisect return None - + def partial_sha_to_index(self, partial_bin_sha, canonical_length): """ :return: index as in `sha_to_index` or None if the sha was not found in this index file :param partial_bin_sha: an at least two bytes of a partial binary sha - :param canonical_length: lenght of the original hexadecimal representation of the + :param canonical_length: lenght of the original hexadecimal representation of the given partial binary sha :raise AmbiguousObjectName:""" if len(partial_bin_sha) < 2: raise ValueError("Require at least 2 bytes of partial sha") - + first_byte = ord(partial_bin_sha[0]) get_sha = self.sha lo = 0 # lower index, the left bound of the bisection if first_byte != 0: lo = self._fanout_table[first_byte-1] hi = self._fanout_table[first_byte] # the upper, right bound of the bisection - + # fill the partial to full 20 bytes filled_sha = partial_bin_sha + '\0'*(20 - len(partial_bin_sha)) - - # find lowest + + # find lowest while lo < hi: mid = (lo + hi) / 2 c = cmp(filled_sha, get_sha(mid)) @@ -471,7 +471,7 @@ def partial_sha_to_index(self, partial_bin_sha, canonical_length): lo = mid + 1 # END handle midpoint # END bisect - + if lo < self.size(): cur_sha = get_sha(lo) if is_equal_canonical_sha(canonical_length, partial_bin_sha, cur_sha): @@ -484,86 +484,86 @@ def partial_sha_to_index(self, partial_bin_sha, canonical_length): # END if we have a match # END if we found something return None - + if 'PackIndexFile_sha_to_index' in globals(): - # NOTE: Its just about 25% faster, the major bottleneck might be the attr + # NOTE: Its just about 25% faster, the major bottleneck might be the attr # accesses def sha_to_index(self, sha): return PackIndexFile_sha_to_index(self, sha) - # END redefine heavy-hitter with c version - + # END redefine heavy-hitter with c version + #} END properties - - + + class PackFile(LazyMixin): """A pack is a file written according to the Version 2 for git packs - + As we currently use memory maps, it could be assumed that the maximum size of - packs therefor is 32 bit on 32 bit systems. On 64 bit systems, this should be + packs therefor is 32 bit on 32 bit systems. On 64 bit systems, this should be fine though. - - **Note:** at some point, this might be implemented using streams as well, or + + **Note:** at some point, this might be implemented using streams as well, or streams are an alternate path in the case memory maps cannot be created - for some reason - one clearly doesn't want to read 10GB at once in that + for some reason - one clearly doesn't want to read 10GB at once in that case""" - + __slots__ = ('_packpath', '_cursor', '_size', '_version') pack_signature = 0x5041434b # 'PACK' pack_version_default = 2 - + # offset into our data at which the first object starts first_object_offset = 3*4 # header bytes footer_size = 20 # final sha - + def __init__(self, packpath): self._packpath = packpath - + def _set_cache_(self, attr): # we fill the whole cache, whichever attribute gets queried first self._cursor = mman.make_cursor(self._packpath).use_region() - + # read the header information type_id, self._version, self._size = unpack_from(">LLL", self._cursor.map(), 0) - + # TODO: figure out whether we should better keep the lock, or maybe # add a .keep file instead ? if type_id != self.pack_signature: raise ParseError("Invalid pack signature: %i" % type_id) - + def _iter_objects(self, start_offset, as_stream=True): """Handle the actual iteration of objects within this pack""" c = self._cursor content_size = c.file_size() - self.footer_size cur_offset = start_offset or self.first_object_offset - + null = NullStream() while cur_offset < content_size: data_offset, ostream = pack_object_at(c, cur_offset, True) # scrub the stream to the end - this decompresses the object, but yields # the amount of compressed bytes we need to get to the next offset - + stream_copy(ostream.read, null.write, ostream.size, chunk_size) cur_offset += (data_offset - ostream.pack_offset) + ostream.stream.compressed_bytes_read() - - + + # if a stream is requested, reset it beforehand - # Otherwise return the Stream object directly, its derived from the + # Otherwise return the Stream object directly, its derived from the # info object if as_stream: ostream.stream.seek(0) yield ostream # END until we have read everything - + #{ Pack Information - + def size(self): - """:return: The amount of objects stored in this pack""" + """:return: The amount of objects stored in this pack""" return self._size - + def version(self): """:return: the version of this pack""" return self._version - + def data(self): """ :return: read-only data of this pack. It provides random access and usually @@ -571,22 +571,22 @@ def data(self): :note: This method is unsafe as it returns a window into a file which might be larger than than the actual window size""" # can use map as we are starting at offset 0. Otherwise we would have to use buffer() return self._cursor.use_region().map() - + def checksum(self): """:return: 20 byte sha1 hash on all object sha's contained in this file""" return self._cursor.use_region(self._cursor.file_size()-20).buffer()[:] - + def path(self): """:return: path to the packfile""" return self._packpath #} END pack information - + #{ Pack Specific - + def collect_streams(self, offset): """ :return: list of pack streams which are required to build the object - at the given offset. The first entry of the list is the object at offset, + at the given offset. The first entry of the list is the object at offset, the last one is either a full object, or a REF_Delta stream. The latter type needs its reference object to be locked up in an ODB to form a valid delta chain. @@ -601,7 +601,7 @@ def collect_streams(self, offset): offset = ostream.pack_offset - ostream.delta_info else: # the only thing we can lookup are OFFSET deltas. Everything - # else is either an object, or a ref delta, in the latter + # else is either an object, or a ref delta, in the latter # case someone else has to find it break # END handle type @@ -609,55 +609,55 @@ def collect_streams(self, offset): return out #} END pack specific - + #{ Read-Database like Interface - + def info(self, offset): """Retrieve information about the object at the given file-absolute offset - + :param offset: byte offset :return: OPackInfo instance, the actual type differs depending on the type_id attribute""" return pack_object_at(self._cursor, offset or self.first_object_offset, False)[1] - + def stream(self, offset): """Retrieve an object at the given file-relative offset as stream along with its information - + :param offset: byte offset :return: OPackStream instance, the actual type differs depending on the type_id attribute""" return pack_object_at(self._cursor, offset or self.first_object_offset, True)[1] - + def stream_iter(self, start_offset=0): """ - :return: iterator yielding OPackStream compatible instances, allowing + :return: iterator yielding OPackStream compatible instances, allowing to access the data in the pack directly. - :param start_offset: offset to the first object to iterate. If 0, iteration + :param start_offset: offset to the first object to iterate. If 0, iteration starts at the very first object in the pack. - + **Note:** Iterating a pack directly is costly as the datastream has to be decompressed to determine the bounds between the objects""" return self._iter_objects(start_offset, as_stream=True) - + #} END Read-Database like Interface - - + + class PackEntity(LazyMixin): - """Combines the PackIndexFile and the PackFile into one, allowing the + """Combines the PackIndexFile and the PackFile into one, allowing the actual objects to be resolved and iterated""" - - __slots__ = ( '_index', # our index file + + __slots__ = ( '_index', # our index file '_pack', # our pack file '_offset_map' # on demand dict mapping one offset to the next consecutive one ) - + IndexFileCls = PackIndexFile PackFileCls = PackFile - + def __init__(self, pack_or_index_path): """Initialize ourselves with the path to the respective pack or index file""" basename, ext = os.path.splitext(pack_or_index_path) self._index = self.IndexFileCls("%s.idx" % basename) # PackIndexFile instance self._pack = self.PackFileCls("%s.pack" % basename) # corresponding PackFile instance - + def _set_cache_(self, attr): # currently this can only be _offset_map # TODO: make this a simple sorted offset array which can be bisected @@ -666,7 +666,7 @@ def _set_cache_(self, attr): offsets_sorted = sorted(self._index.offsets()) last_offset = len(self._pack.data()) - self._pack.footer_size assert offsets_sorted, "Cannot handle empty indices" - + offset_map = None if len(offsets_sorted) == 1: offset_map = { offsets_sorted[0] : last_offset } @@ -675,21 +675,21 @@ def _set_cache_(self, attr): iter_offsets_plus_one = iter(offsets_sorted) iter_offsets_plus_one.next() consecutive = izip(iter_offsets, iter_offsets_plus_one) - + offset_map = dict(consecutive) - + # the last offset is not yet set offset_map[offsets_sorted[-1]] = last_offset # END handle offset amount self._offset_map = offset_map - + def _sha_to_index(self, sha): """:return: index for the given sha, or raise""" index = self._index.sha_to_index(sha) if index is None: raise BadObject(sha) return index - + def _iter_objects(self, as_stream): """Iterate over all objects in our index and yield their OInfo or OStream instences""" _sha = self._index.sha @@ -697,7 +697,7 @@ def _iter_objects(self, as_stream): for index in xrange(self._index.size()): yield _object(_sha(index), as_stream, index) # END for each index - + def _object(self, sha, as_stream, index=-1): """:return: OInfo or OStream object providing information about the given sha :param index: if not -1, its assumed to be the sha's index in the IndexFile""" @@ -714,86 +714,86 @@ def _object(self, sha, as_stream, index=-1): packstream = self._pack.stream(offset) return OStream(sha, packstream.type, packstream.size, packstream.stream) # END handle non-deltas - + # produce a delta stream containing all info - # To prevent it from applying the deltas when querying the size, + # To prevent it from applying the deltas when querying the size, # we extract it from the delta stream ourselves streams = self.collect_streams_at_offset(offset) dstream = DeltaApplyReader.new(streams) - - return ODeltaStream(sha, dstream.type, None, dstream) + + return ODeltaStream(sha, dstream.type, None, dstream) else: if type_id not in delta_types: return OInfo(sha, type_id_to_type_map[type_id], uncomp_size) # END handle non-deltas - + # deltas are a little tougher - unpack the first bytes to obtain # the actual target size, as opposed to the size of the delta data streams = self.collect_streams_at_offset(offset) buf = streams[0].read(512) offset, src_size = msb_size(buf) offset, target_size = msb_size(buf, offset) - + # collect the streams to obtain the actual object type if streams[-1].type_id in delta_types: raise BadObject(sha, "Could not resolve delta object") - return OInfo(sha, streams[-1].type, target_size) + return OInfo(sha, streams[-1].type, target_size) # END handle stream - + #{ Read-Database like Interface - + def info(self, sha): """Retrieve information about the object identified by the given sha - + :param sha: 20 byte sha1 :raise BadObject: :return: OInfo instance, with 20 byte sha""" return self._object(sha, False) - + def stream(self, sha): """Retrieve an object stream along with its information as identified by the given sha - + :param sha: 20 byte sha1 - :raise BadObject: + :raise BadObject: :return: OStream instance, with 20 byte sha""" return self._object(sha, True) def info_at_index(self, index): """As ``info``, but uses a PackIndexFile compatible index to refer to the object""" return self._object(None, False, index) - + def stream_at_index(self, index): - """As ``stream``, but uses a PackIndexFile compatible index to refer to the + """As ``stream``, but uses a PackIndexFile compatible index to refer to the object""" return self._object(None, True, index) - + #} END Read-Database like Interface - - #{ Interface + + #{ Interface def pack(self): """:return: the underlying pack file instance""" return self._pack - + def index(self): """:return: the underlying pack index file instance""" return self._index - + def is_valid_stream(self, sha, use_crc=False): """ Verify that the stream at the given sha is valid. - - :param use_crc: if True, the index' crc is run over the compressed stream of + + :param use_crc: if True, the index' crc is run over the compressed stream of the object, which is much faster than checking the sha1. It is also more prone to unnoticed corruption or manipulation. :param sha: 20 byte sha1 of the object whose stream to verify - whether the compressed stream of the object is valid. If it is - a delta, this only verifies that the delta's data is valid, not the - data of the actual undeltified object, as it depends on more than + whether the compressed stream of the object is valid. If it is + a delta, this only verifies that the delta's data is valid, not the + data of the actual undeltified object, as it depends on more than just this stream. If False, the object will be decompressed and the sha generated. It must match the given sha - + :return: True if the stream is valid :raise UnsupportedOperation: If the index is version 1 only :raise BadObject: sha was not found""" @@ -801,12 +801,12 @@ def is_valid_stream(self, sha, use_crc=False): if self._index.version() < 2: raise UnsupportedOperation("Version 1 indices do not contain crc's, verify by sha instead") # END handle index version - + index = self._sha_to_index(sha) offset = self._index.offset(index) next_offset = self._offset_map[offset] crc_value = self._index.crc(index) - + # create the current crc value, on the compressed object data # Read it in chunks, without copying the data crc_update = zlib.crc32 @@ -819,7 +819,7 @@ def is_valid_stream(self, sha, use_crc=False): this_crc_value = crc_update(buffer(pack_data, cur_pos, size), this_crc_value) cur_pos += size # END window size loop - + # crc returns signed 32 bit numbers, the AND op forces it into unsigned # mode ... wow, sneaky, from dulwich. return (this_crc_value & 0xffffffff) == crc_value @@ -828,7 +828,7 @@ def is_valid_stream(self, sha, use_crc=False): stream = self._object(sha, as_stream=True) # write a loose object, which is the basis for the sha write_object(stream.type, stream.size, stream.read, shawriter.write) - + assert shawriter.sha(as_hex=False) == sha return shawriter.sha(as_hex=False) == sha # END handle crc/sha verification @@ -839,21 +839,21 @@ def info_iter(self): :return: Iterator over all objects in this pack. The iterator yields OInfo instances""" return self._iter_objects(as_stream=False) - + def stream_iter(self): """ :return: iterator over all objects in this pack. The iterator yields OStream instances""" return self._iter_objects(as_stream=True) - + def collect_streams_at_offset(self, offset): """ As the version in the PackFile, but can resolve REF deltas within this pack For more info, see ``collect_streams`` - + :param offset: offset into the pack file at which the object can be found""" streams = self._pack.collect_streams(offset) - + # try to resolve the last one if needed. It is assumed to be either # a REF delta, or a base object, as OFFSET deltas are resolved by the pack if streams[-1].type_id == REF_DELTA: @@ -866,54 +866,54 @@ def collect_streams_at_offset(self, offset): stream = self._pack.stream(self._index.offset(sindex)) streams.append(stream) else: - # must be another OFS DELTA - this could happen if a REF - # delta we resolve previously points to an OFS delta. Who + # must be another OFS DELTA - this could happen if a REF + # delta we resolve previously points to an OFS delta. Who # would do that ;) ? We can handle it though stream = self._pack.stream(stream.delta_info) streams.append(stream) # END handle ref delta # END resolve ref streams # END resolve streams - + return streams - + def collect_streams(self, sha): """ As ``PackFile.collect_streams``, but takes a sha instead of an offset. Additionally, ref_delta streams will be resolved within this pack. If this is not possible, the stream will be left alone, hence it is adivsed - to check for unresolved ref-deltas and resolve them before attempting to + to check for unresolved ref-deltas and resolve them before attempting to construct a delta stream. - + :param sha: 20 byte sha1 specifying the object whose related streams you want to collect - :return: list of streams, first being the actual object delta, the last being + :return: list of streams, first being the actual object delta, the last being a possibly unresolved base object. :raise BadObject:""" return self.collect_streams_at_offset(self._index.offset(self._sha_to_index(sha))) - - + + @classmethod - def write_pack(cls, object_iter, pack_write, index_write=None, + def write_pack(cls, object_iter, pack_write, index_write=None, object_count = None, zlib_compression = zlib.Z_BEST_SPEED): """ Create a new pack by putting all objects obtained by the object_iterator into a pack which is written using the pack_write method. The respective index is produced as well if index_write is not Non. - + :param object_iter: iterator yielding odb output objects :param pack_write: function to receive strings to write into the pack stream :param indx_write: if not None, the function writes the index file corresponding to the pack. - :param object_count: if you can provide the amount of objects in your iteration, - this would be the place to put it. Otherwise we have to pre-iterate and store + :param object_count: if you can provide the amount of objects in your iteration, + this would be the place to put it. Otherwise we have to pre-iterate and store all items into a list to get the number, which uses more memory than necessary. :param zlib_compression: the zlib compression level to use :return: tuple(pack_sha, index_binsha) binary sha over all the contents of the pack and over all contents of the index. If index_write was None, index_binsha will be None - + **Note:** The destination of the write functions is up to the user. It could be a socket, or a file for instance - + **Note:** writes only undeltified objects""" objs = object_iter if not object_count: @@ -922,26 +922,26 @@ def write_pack(cls, object_iter, pack_write, index_write=None, #END handle list type object_count = len(objs) #END handle object - + pack_writer = FlexibleSha1Writer(pack_write) pwrite = pack_writer.write ofs = 0 # current offset into the pack file index = None wants_index = index_write is not None - + # write header pwrite(pack('>LLL', PackFile.pack_signature, PackFile.pack_version_default, object_count)) ofs += 12 - + if wants_index: index = IndexWriter() #END handle index header - + actual_count = 0 for obj in objs: actual_count += 1 crc = 0 - + # object header hdr = create_pack_object_header(obj.type_id, obj.size) if index_write: @@ -950,7 +950,7 @@ def write_pack(cls, object_iter, pack_write, index_write=None, crc = None #END handle crc pwrite(hdr) - + # data stream zstream = zlib.compressobj(zlib_compression) ostream = obj.stream @@ -959,54 +959,54 @@ def write_pack(cls, object_iter, pack_write, index_write=None, if wants_index: index.append(obj.binsha, crc, ofs) #END handle index - + ofs += len(hdr) + bw if actual_count == object_count: break #END abort once we are done #END for each object - + if actual_count != object_count: raise ValueError("Expected to write %i objects into pack, but received only %i from iterators" % (object_count, actual_count)) #END count assertion - + # write footer pack_sha = pack_writer.sha(as_hex = False) assert len(pack_sha) == 20 pack_write(pack_sha) ofs += len(pack_sha) # just for completeness ;) - + index_sha = None if wants_index: index_sha = index.write(pack_sha, index_write) #END handle index - + return pack_sha, index_sha - + @classmethod def create(cls, object_iter, base_dir, object_count = None, zlib_compression = zlib.Z_BEST_SPEED): """Create a new on-disk entity comprised of a properly named pack file and a properly named and corresponding index file. The pack contains all OStream objects contained in object iter. :param base_dir: directory which is to contain the files :return: PackEntity instance initialized with the new pack - + **Note:** for more information on the other parameters see the write_pack method""" pack_fd, pack_path = tempfile.mkstemp('', 'pack', base_dir) index_fd, index_path = tempfile.mkstemp('', 'index', base_dir) pack_write = lambda d: os.write(pack_fd, d) index_write = lambda d: os.write(index_fd, d) - + pack_binsha, index_binsha = cls.write_pack(object_iter, pack_write, index_write, object_count, zlib_compression) os.close(pack_fd) os.close(index_fd) - + fmt = "pack-%s.%s" new_pack_path = os.path.join(base_dir, fmt % (bin_to_hex(pack_binsha), 'pack')) new_index_path = os.path.join(base_dir, fmt % (bin_to_hex(pack_binsha), 'idx')) os.rename(pack_path, new_pack_path) os.rename(index_path, new_index_path) - + return cls(new_pack_path) - - + + #} END interface diff --git a/gitdb/stream.py b/gitdb/stream.py index 6441b1e1a..b21c39c9d 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -33,7 +33,7 @@ except ImportError: pass -__all__ = ( 'DecompressMemMapReader', 'FDCompressedSha1Writer', 'DeltaApplyReader', +__all__ = ( 'DecompressMemMapReader', 'FDCompressedSha1Writer', 'DeltaApplyReader', 'Sha1Writer', 'FlexibleSha1Writer', 'ZippedStoreShaWriter', 'FDCompressedSha1Writer', 'FDStream', 'NullStream') @@ -41,27 +41,27 @@ #{ RO Streams class DecompressMemMapReader(LazyMixin): - """Reads data in chunks from a memory map and decompresses it. The client sees + """Reads data in chunks from a memory map and decompresses it. The client sees only the uncompressed data, respective file-like read calls are handling on-demand buffered decompression accordingly - - A constraint on the total size of bytes is activated, simulating + + A constraint on the total size of bytes is activated, simulating a logical file within a possibly larger physical memory area - - To read efficiently, you clearly don't want to read individual bytes, instead, + + To read efficiently, you clearly don't want to read individual bytes, instead, read a few kilobytes at least. - - **Note:** The chunk-size should be carefully selected as it will involve quite a bit - of string copying due to the way the zlib is implemented. Its very wasteful, - hence we try to find a good tradeoff between allocation time and number of + + **Note:** The chunk-size should be carefully selected as it will involve quite a bit + of string copying due to the way the zlib is implemented. Its very wasteful, + hence we try to find a good tradeoff between allocation time and number of times we actually allocate. An own zlib implementation would be good here to better support streamed reading - it would only need to keep the mmap and decompress it into chunks, thats all ... """ - __slots__ = ('_m', '_zip', '_buf', '_buflen', '_br', '_cws', '_cwe', '_s', '_close', + __slots__ = ('_m', '_zip', '_buf', '_buflen', '_br', '_cws', '_cwe', '_s', '_close', '_cbr', '_phi') - + max_read_size = 512*1024 # currently unused - + def __init__(self, m, close_on_deletion, size=None): """Initialize with mmap for stream reading :param m: must be content data - use new if you have object data and no size""" @@ -77,22 +77,22 @@ def __init__(self, m, close_on_deletion, size=None): self._cbr = 0 # number of compressed bytes read self._phi = False # is True if we parsed the header info self._close = close_on_deletion # close the memmap on deletion ? - + def _set_cache_(self, attr): assert attr == '_s' - # only happens for size, which is a marker to indicate we still + # only happens for size, which is a marker to indicate we still # have to parse the header from the stream self._parse_header_info() - + def __del__(self): if self._close: self._m.close() # END handle resource freeing - + def _parse_header_info(self): - """If this stream contains object data, parse the header info and skip the + """If this stream contains object data, parse the header info and skip the stream to a point where each read will yield object content - + :return: parsed type_string, size""" # read header maxb = 512 # should really be enough, cgit uses 8192 I believe @@ -102,28 +102,28 @@ def _parse_header_info(self): type, size = hdr[:hdrend].split(" ") size = int(size) self._s = size - + # adjust internal state to match actual header length that we ignore # The buffer will be depleted first on future reads self._br = 0 hdrend += 1 # count terminating \0 self._buf = StringIO(hdr[hdrend:]) self._buflen = len(hdr) - hdrend - + self._phi = True - + return type, size - - #{ Interface - + + #{ Interface + @classmethod def new(self, m, close_on_deletion=False): """Create a new DecompressMemMapReader instance for acting as a read-only stream - This method parses the object header from m and returns the parsed + This method parses the object header from m and returns the parsed type and size, as well as the created stream instance. - + :param m: memory map on which to oparate. It must be object data ( header + contents ) - :param close_on_deletion: if True, the memory map will be closed once we are + :param close_on_deletion: if True, the memory map will be closed once we are being deleted""" inst = DecompressMemMapReader(m, close_on_deletion, 0) type, size = inst._parse_header_info() @@ -131,30 +131,30 @@ def new(self, m, close_on_deletion=False): def data(self): """:return: random access compatible data we are working on""" - return self._m - + return self._m + def compressed_bytes_read(self): """ - :return: number of compressed bytes read. This includes the bytes it + :return: number of compressed bytes read. This includes the bytes it took to decompress the header ( if there was one )""" # ABSTRACT: When decompressing a byte stream, it can be that the first - # x bytes which were requested match the first x bytes in the loosely + # x bytes which were requested match the first x bytes in the loosely # compressed datastream. This is the worst-case assumption that the reader # does, it assumes that it will get at least X bytes from X compressed bytes # in call cases. - # The caveat is that the object, according to our known uncompressed size, + # The caveat is that the object, according to our known uncompressed size, # is already complete, but there are still some bytes left in the compressed # stream that contribute to the amount of compressed bytes. # How can we know that we are truly done, and have read all bytes we need - # to read ? - # Without help, we cannot know, as we need to obtain the status of the + # to read ? + # Without help, we cannot know, as we need to obtain the status of the # decompression. If it is not finished, we need to decompress more data # until it is finished, to yield the actual number of compressed bytes # belonging to the decompressed object - # We are using a custom zlib module for this, if its not present, + # We are using a custom zlib module for this, if its not present, # we try to put in additional bytes up for decompression if feasible # and check for the unused_data. - + # Only scrub the stream forward if we are officially done with the # bytes we were to have. if self._br == self._s and not self._zip.unused_data: @@ -171,45 +171,45 @@ def compressed_bytes_read(self): self.read(mmap.PAGESIZE) # END scrub-loop default zlib # END handle stream scrubbing - + # reset bytes read, just to be sure self._br = self._s # END handle stream scrubbing - + # unused data ends up in the unconsumed tail, which was removed # from the count already return self._cbr - - #} END interface - + + #} END interface + def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): """Allows to reset the stream to restart reading :raise ValueError: If offset and whence are not 0""" if offset != 0 or whence != getattr(os, 'SEEK_SET', 0): raise ValueError("Can only seek to position 0") # END handle offset - + self._zip = zlib.decompressobj() self._br = self._cws = self._cwe = self._cbr = 0 if self._phi: self._phi = False del(self._s) # trigger header parsing on first access # END skip header - + def read(self, size=-1): if size < 1: size = self._s - self._br else: size = min(size, self._s - self._br) # END clamp size - + if size == 0: return str() # END handle depletion - - - # deplete the buffer, then just continue using the decompress object - # which has an own buffer. We just need this to transparently parse the + + + # deplete the buffer, then just continue using the decompress object + # which has an own buffer. We just need this to transparently parse the # header from the zlib stream dat = str() if self._buf: @@ -223,26 +223,26 @@ def read(self, size=-1): dat = self._buf.read() # ouch, duplicates data size -= self._buflen self._br += self._buflen - + self._buflen = 0 self._buf = None # END handle buffer len # END handle buffer - + # decompress some data - # Abstract: zlib needs to operate on chunks of our memory map ( which may + # Abstract: zlib needs to operate on chunks of our memory map ( which may # be large ), as it will otherwise and always fill in the 'unconsumed_tail' - # attribute which possible reads our whole map to the end, forcing + # attribute which possible reads our whole map to the end, forcing # everything to be read from disk even though just a portion was requested. - # As this would be a nogo, we workaround it by passing only chunks of data, - # moving the window into the memory map along as we decompress, which keeps + # As this would be a nogo, we workaround it by passing only chunks of data, + # moving the window into the memory map along as we decompress, which keeps # the tail smaller than our chunk-size. This causes 'only' the chunk to be # copied once, and another copy of a part of it when it creates the unconsumed # tail. We have to use it to hand in the appropriate amount of bytes durin g # the next read. tail = self._zip.unconsumed_tail if tail: - # move the window, make it as large as size demands. For code-clarity, + # move the window, make it as large as size demands. For code-clarity, # we just take the chunk from our map again instead of reusing the unconsumed # tail. The latter one would safe some memory copying, but we could end up # with not getting enough data uncompressed, so we had to sort that out as well. @@ -253,18 +253,18 @@ def read(self, size=-1): else: cws = self._cws self._cws = self._cwe - self._cwe = cws + size + self._cwe = cws + size # END handle tail - - + + # if window is too small, make it larger so zip can decompress something if self._cwe - self._cws < 8: self._cwe = self._cws + 8 # END adjust winsize - - # takes a slice, but doesn't copy the data, it says ... + + # takes a slice, but doesn't copy the data, it says ... indata = buffer(self._m, self._cws, self._cwe - self._cws) - + # get the actual window end to be sure we don't use it for computations self._cwe = self._cws + len(indata) dcompdat = self._zip.decompress(indata, size) @@ -274,13 +274,13 @@ def read(self, size=-1): # if we hit the end of the stream self._cbr += len(indata) - len(self._zip.unconsumed_tail) self._br += len(dcompdat) - + if dat: dcompdat = dat + dcompdat # END prepend our cached data - - # it can happen, depending on the compression, that we get less bytes - # than ordered as it needs the final portion of the data as well. + + # it can happen, depending on the compression, that we get less bytes + # than ordered as it needs the final portion of the data as well. # Recursively resolve that. # Note: dcompdat can be empty even though we still appear to have bytes # to read, if we are called by compressed_bytes_read - it manipulates @@ -290,30 +290,30 @@ def read(self, size=-1): # END handle special case return dcompdat - + class DeltaApplyReader(LazyMixin): - """A reader which dynamically applies pack deltas to a base object, keeping the + """A reader which dynamically applies pack deltas to a base object, keeping the memory demands to a minimum. - - The size of the final object is only obtainable once all deltas have been + + The size of the final object is only obtainable once all deltas have been applied, unless it is retrieved from a pack index. - + The uncompressed Delta has the following layout (MSB being a most significant bit encoded dynamic size): - + * MSB Source Size - the size of the base against which the delta was created * MSB Target Size - the size of the resulting data after the delta was applied * A list of one byte commands (cmd) which are followed by a specific protocol: - + * cmd & 0x80 - copy delta_data[offset:offset+size] - + * Followed by an encoded offset into the delta data * Followed by an encoded size of the chunk to copy - + * cmd & 0x7f - insert - + * insert cmd bytes from the delta buffer into the output stream - + * cmd == 0 - invalid operation ( or error in delta stream ) """ __slots__ = ( @@ -321,38 +321,38 @@ class DeltaApplyReader(LazyMixin): "_dstreams", # tuple of delta stream readers "_mm_target", # memory map of the delta-applied data "_size", # actual number of bytes in _mm_target - "_br" # number of bytes read + "_br" # number of bytes read ) - + #{ Configuration k_max_memory_move = 250*1000*1000 #} END configuration - + def __init__(self, stream_list): - """Initialize this instance with a list of streams, the first stream being + """Initialize this instance with a list of streams, the first stream being the delta to apply on top of all following deltas, the last stream being the base object onto which to apply the deltas""" assert len(stream_list) > 1, "Need at least one delta and one base stream" - + self._bstream = stream_list[-1] self._dstreams = tuple(stream_list[:-1]) self._br = 0 - + def _set_cache_too_slow_without_c(self, attr): - # the direct algorithm is fastest and most direct if there is only one + # the direct algorithm is fastest and most direct if there is only one # delta. Also, the extra overhead might not be worth it for items smaller - # than X - definitely the case in python, every function call costs + # than X - definitely the case in python, every function call costs # huge amounts of time # if len(self._dstreams) * self._bstream.size < self.k_max_memory_move: if len(self._dstreams) == 1: return self._set_cache_brute_(attr) - - # Aggregate all deltas into one delta in reverse order. Hence we take + + # Aggregate all deltas into one delta in reverse order. Hence we take # the last delta, and reverse-merge its ancestor delta, until we receive # the final delta data stream. # print "Handling %i delta streams, sizes: %s" % (len(self._dstreams), [ds.size for ds in self._dstreams]) dcl = connect_deltas(self._dstreams) - + # call len directly, as the (optional) c version doesn't implement the sequence # protocol if dcl.rbound() == 0: @@ -360,22 +360,22 @@ def _set_cache_too_slow_without_c(self, attr): self._mm_target = allocate_memory(0) return # END handle empty list - + self._size = dcl.rbound() self._mm_target = allocate_memory(self._size) - + bbuf = allocate_memory(self._bstream.size) stream_copy(self._bstream.read, bbuf.write, self._bstream.size, 256 * mmap.PAGESIZE) - + # APPLY CHUNKS write = self._mm_target.write dcl.apply(bbuf, write) - + self._mm_target.seek(0) - + def _set_cache_brute_(self, attr): """If we are here, we apply the actual deltas""" - + # TODO: There should be a special case if there is only one stream # Then the default-git algorithm should perform a tad faster, as the # delta is not peaked into, causing less overhead. @@ -388,37 +388,37 @@ def _set_cache_brute_(self, attr): buffer_info_list.append((buffer(buf, offset), offset, src_size, target_size)) max_target_size = max(max_target_size, target_size) # END for each delta stream - + # sanity check - the first delta to apply should have the same source # size as our actual base stream base_size = self._bstream.size target_size = max_target_size - + # if we have more than 1 delta to apply, we will swap buffers, hence we must # assure that all buffers we use are large enough to hold all the results if len(self._dstreams) > 1: base_size = target_size = max(base_size, max_target_size) # END adjust buffer sizes - - + + # Allocate private memory map big enough to hold the first base buffer # We need random access to it bbuf = allocate_memory(base_size) stream_copy(self._bstream.read, bbuf.write, base_size, 256 * mmap.PAGESIZE) - + # allocate memory map large enough for the largest (intermediate) target - # We will use it as scratch space for all delta ops. If the final + # We will use it as scratch space for all delta ops. If the final # target buffer is smaller than our allocated space, we just use parts # of it upon return. tbuf = allocate_memory(target_size) - - # for each delta to apply, memory map the decompressed delta and + + # for each delta to apply, memory map the decompressed delta and # work on the op-codes to reconstruct everything. # For the actual copying, we use a seek and write pattern of buffer # slices. final_target_size = None for (dbuf, offset, src_size, target_size), dstream in reversed(zip(buffer_info_list, self._dstreams)): - # allocate a buffer to hold all delta data - fill in the data for + # allocate a buffer to hold all delta data - fill in the data for # fast access. We do this as we know that reading individual bytes # from our stream would be slower than necessary ( although possible ) # The dbuf buffer contains commands after the first two MSB sizes, the @@ -427,37 +427,37 @@ def _set_cache_brute_(self, attr): ddata.write(dbuf) # read the rest from the stream. The size we give is larger than necessary stream_copy(dstream.read, ddata.write, dstream.size, 256*mmap.PAGESIZE) - + ####################################################################### if 'c_apply_delta' in globals(): c_apply_delta(bbuf, ddata, tbuf); else: apply_delta_data(bbuf, src_size, ddata, len(ddata), tbuf.write) ####################################################################### - - # finally, swap out source and target buffers. The target is now the + + # finally, swap out source and target buffers. The target is now the # base for the next delta to apply bbuf, tbuf = tbuf, bbuf bbuf.seek(0) tbuf.seek(0) final_target_size = target_size # END for each delta to apply - + # its already seeked to 0, constrain it to the actual size # NOTE: in the end of the loop, it swaps buffers, hence our target buffer # is not tbuf, but bbuf ! self._mm_target = bbuf self._size = final_target_size - - + + #{ Configuration if not has_perf_mod: _set_cache_ = _set_cache_brute_ else: _set_cache_ = _set_cache_too_slow_without_c - + #} END configuration - + def read(self, count=0): bl = self._size - self._br # bytes left if count < 1 or count > bl: @@ -467,63 +467,63 @@ def read(self, count=0): data = self._mm_target.read(count) self._br += len(data) return data - + def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): """Allows to reset the stream to restart reading - + :raise ValueError: If offset and whence are not 0""" if offset != 0 or whence != getattr(os, 'SEEK_SET', 0): raise ValueError("Can only seek to position 0") # END handle offset self._br = 0 self._mm_target.seek(0) - - #{ Interface - + + #{ Interface + @classmethod def new(cls, stream_list): """ Convert the given list of streams into a stream which resolves deltas when reading from it. - + :param stream_list: two or more stream objects, first stream is a Delta to the object that you want to resolve, followed by N additional delta streams. The list's last stream must be a non-delta stream. - - :return: Non-Delta OPackStream object whose stream can be used to obtain + + :return: Non-Delta OPackStream object whose stream can be used to obtain the decompressed resolved data :raise ValueError: if the stream list cannot be handled""" if len(stream_list) < 2: raise ValueError("Need at least two streams") # END single object special handling - + if stream_list[-1].type_id in delta_types: raise ValueError("Cannot resolve deltas if there is no base object stream, last one was type: %s" % stream_list[-1].type) # END check stream - + return cls(stream_list) - + #} END interface - - + + #{ OInfo like Interface - + @property def type(self): return self._bstream.type - + @property def type_id(self): return self._bstream.type_id - + @property def size(self): """:return: number of uncompressed bytes in the stream""" return self._size - - #} END oinfo like interface - - + + #} END oinfo like interface + + #} END RO streams @@ -533,7 +533,7 @@ class Sha1Writer(object): """Simple stream writer which produces a sha whenever you like as it degests everything it is supposed to write""" __slots__ = "sha1" - + def __init__(self): self.sha1 = make_sha() @@ -545,29 +545,29 @@ def write(self, data): self.sha1.update(data) return len(data) - # END stream interface + # END stream interface #{ Interface - + def sha(self, as_hex = False): """:return: sha so far :param as_hex: if True, sha will be hex-encoded, binary otherwise""" if as_hex: return self.sha1.hexdigest() return self.sha1.digest() - - #} END interface + + #} END interface class FlexibleSha1Writer(Sha1Writer): - """Writer producing a sha1 while passing on the written bytes to the given + """Writer producing a sha1 while passing on the written bytes to the given write function""" __slots__ = 'writer' - + def __init__(self, writer): Sha1Writer.__init__(self) self.writer = writer - + def write(self, data): Sha1Writer.write(self, data) self.writer(data) @@ -580,18 +580,18 @@ def __init__(self): Sha1Writer.__init__(self) self.buf = StringIO() self.zip = zlib.compressobj(zlib.Z_BEST_SPEED) - + def __getattr__(self, attr): return getattr(self.buf, attr) - + def write(self, data): alen = Sha1Writer.write(self, data) self.buf.write(self.zip.compress(data)) return alen - + def close(self): self.buf.write(self.zip.flush()) - + def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): """Seeking currently only supports to rewind written data Multiple writes are not supported""" @@ -599,23 +599,23 @@ def seek(self, offset, whence=getattr(os, 'SEEK_SET', 0)): raise ValueError("Can only seek to position 0") # END handle offset self.buf.seek(0) - + def getvalue(self): """:return: string value from the current stream position to the end""" return self.buf.getvalue() class FDCompressedSha1Writer(Sha1Writer): - """Digests data written to it, making the sha available, then compress the + """Digests data written to it, making the sha available, then compress the data and write it to the file descriptor - + **Note:** operates on raw file descriptors **Note:** for this to work, you have to use the close-method of this instance""" __slots__ = ("fd", "sha1", "zip") - + # default exception exc = IOError("Failed to write all bytes to filedescriptor") - + def __init__(self, fd): super(FDCompressedSha1Writer, self).__init__() self.fd = fd @@ -643,33 +643,33 @@ def close(self): class FDStream(object): - """A simple wrapper providing the most basic functions on a file descriptor + """A simple wrapper providing the most basic functions on a file descriptor with the fileobject interface. Cannot use os.fdopen as the resulting stream takes ownership""" __slots__ = ("_fd", '_pos') def __init__(self, fd): self._fd = fd self._pos = 0 - + def write(self, data): self._pos += len(data) os.write(self._fd, data) - + def read(self, count=0): if count == 0: count = os.path.getsize(self._filepath) # END handle read everything - + bytes = os.read(self._fd, count) self._pos += len(bytes) return bytes - + def fileno(self): return self._fd - + def tell(self): return self._pos - + def close(self): close(self._fd) @@ -678,17 +678,15 @@ class NullStream(object): """A stream that does nothing but providing a stream interface. Use it like /dev/null""" __slots__ = tuple() - + def read(self, size=0): return '' - + def close(self): pass - + def write(self, data): return len(data) #} END W streams - - diff --git a/gitdb/test/__init__.py b/gitdb/test/__init__.py index f8059447f..e84e503b6 100644 --- a/gitdb/test/__init__.py +++ b/gitdb/test/__init__.py @@ -5,7 +5,7 @@ import gitdb.util -#{ Initialization +#{ Initialization def _init_pool(): """Assure the pool is actually threaded""" size = 2 diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index 62614ee5c..dc89039dd 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -9,16 +9,16 @@ ZippedStoreShaWriter, fixture_path, TestBase - ) +) from gitdb.stream import Sha1Writer from gitdb.base import ( - IStream, - OStream, - OInfo - ) - + IStream, + OStream, + OInfo +) + from gitdb.exc import BadObject from gitdb.typ import str_blob_type @@ -28,14 +28,14 @@ __all__ = ('TestDBBase', 'with_rw_directory', 'with_packs_rw', 'fixture_path') - + class TestDBBase(TestBase): """Base class providing testing routines on databases""" - + # data two_lines = "1234\nhello world" all_data = (two_lines, ) - + def _assert_object_writing_simple(self, db): # write a bunch of objects and query their streams and info null_objs = db.size() @@ -46,23 +46,23 @@ def _assert_object_writing_simple(self, db): new_istream = db.store(istream) assert new_istream is istream assert db.has_object(istream.binsha) - + info = db.info(istream.binsha) assert isinstance(info, OInfo) assert info.type == istream.type and info.size == istream.size - + stream = db.stream(istream.binsha) assert isinstance(stream, OStream) assert stream.binsha == info.binsha and stream.type == info.type assert stream.read() == data # END for each item - + assert db.size() == null_objs + ni shas = list(db.sha_iter()) assert len(shas) == db.size() assert len(shas[0]) == 20 - - + + def _assert_object_writing(self, db): """General tests to verify object writing, compatible to ObjectDBW **Note:** requires write access to the database""" @@ -76,25 +76,25 @@ def _assert_object_writing(self, db): ostream = ostreamcls() assert isinstance(ostream, Sha1Writer) # END create ostream - + prev_ostream = db.set_ostream(ostream) - assert type(prev_ostream) in ostreams or prev_ostream in ostreams - + assert type(prev_ostream) in ostreams or prev_ostream in ostreams + istream = IStream(str_blob_type, len(data), StringIO(data)) - + # store returns same istream instance, with new sha set my_istream = db.store(istream) sha = istream.binsha assert my_istream is istream assert db.has_object(sha) != dry_run - assert len(sha) == 20 - + assert len(sha) == 20 + # verify data - the slow way, we want to run code if not dry_run: info = db.info(sha) assert str_blob_type == info.type assert info.size == len(data) - + ostream = db.stream(sha) assert ostream.read() == data assert ostream.type == str_blob_type @@ -102,29 +102,29 @@ def _assert_object_writing(self, db): else: self.failUnlessRaises(BadObject, db.info, sha) self.failUnlessRaises(BadObject, db.stream, sha) - + # DIRECT STREAM COPY # our data hase been written in object format to the StringIO # we pasesd as output stream. No physical database representation # was created. - # Test direct stream copy of object streams, the result must be + # Test direct stream copy of object streams, the result must be # identical to what we fed in ostream.seek(0) istream.stream = ostream assert istream.binsha is not None prev_sha = istream.binsha - + db.set_ostream(ZippedStoreShaWriter()) db.store(istream) assert istream.binsha == prev_sha new_ostream = db.ostream() - + # note: only works as long our store write uses the same compression # level, which is zip_best assert ostream.getvalue() == new_ostream.getvalue() # END for each data set # END for each dry_run mode - + def _assert_object_writing_async(self, db): """Test generic object writing using asynchronous access""" ni = 5000 @@ -134,23 +134,23 @@ def istream_generator(offset=0, ni=ni): yield IStream(str_blob_type, len(data), StringIO(data)) # END for each item # END generator utility - + # for now, we are very trusty here as we expect it to work if it worked # in the single-stream case - + # write objects reader = IteratorReader(istream_generator()) istream_reader = db.store_async(reader) istreams = istream_reader.read() # read all assert istream_reader.task().error() is None assert len(istreams) == ni - + for stream in istreams: assert stream.error is None assert len(stream.binsha) == 20 assert isinstance(stream, IStream) # END assert each stream - + # test has-object-async - we must have all previously added ones reader = IteratorReader( istream.binsha for istream in istreams ) hasobject_reader = db.has_object_async(reader) @@ -160,11 +160,11 @@ def istream_generator(offset=0, ni=ni): count += 1 # END for each sha assert count == ni - + # read the objects we have just written reader = IteratorReader( istream.binsha for istream in istreams ) ostream_reader = db.stream_async(reader) - + # read items individually to prevent hitting possible sys-limits count = 0 for ostream in ostream_reader: @@ -173,30 +173,30 @@ def istream_generator(offset=0, ni=ni): # END for each ostream assert ostream_reader.task().error() is None assert count == ni - + # get info about our items reader = IteratorReader( istream.binsha for istream in istreams ) info_reader = db.info_async(reader) - + count = 0 for oinfo in info_reader: assert isinstance(oinfo, OInfo) count += 1 # END for each oinfo instance assert count == ni - - + + # combined read-write using a converter # add 2500 items, and obtain their output streams nni = 2500 reader = IteratorReader(istream_generator(offset=ni, ni=nni)) istream_to_sha = lambda istreams: [ istream.binsha for istream in istreams ] - + istream_reader = db.store_async(reader) istream_reader.set_post_cb(istream_to_sha) - + ostream_reader = db.stream_async(istream_reader) - + count = 0 # read it individually, otherwise we might run into the ulimit for ostream in ostream_reader: @@ -204,5 +204,3 @@ def istream_generator(offset=0, ni=ni): count += 1 # END for each ostream assert count == nni - - diff --git a/gitdb/test/db/test_git.py b/gitdb/test/db/test_git.py index 1ef577aa3..4894c6a79 100644 --- a/gitdb/test/db/test_git.py +++ b/gitdb/test/db/test_git.py @@ -7,15 +7,15 @@ from gitdb.db import GitDB from gitdb.base import OStream, OInfo from gitdb.util import hex_to_bin, bin_to_hex - + class TestGitDB(TestDBBase): - + def test_reading(self): gdb = GitDB(fixture_path('../../../.git/objects')) - + # we have packs and loose objects, alternates doesn't necessarily exist assert 1 < len(gdb.databases()) < 4 - + # access should be possible gitdb_sha = hex_to_bin("5690fd0d3304f378754b23b098bd7cb5f4aa1976") assert isinstance(gdb.info(gitdb_sha), OInfo) @@ -23,25 +23,25 @@ def test_reading(self): assert gdb.size() > 200 sha_list = list(gdb.sha_iter()) assert len(sha_list) == gdb.size() - - - # This is actually a test for compound functionality, but it doesn't + + + # This is actually a test for compound functionality, but it doesn't # have a separate test module # test partial shas # this one as uneven and quite short assert gdb.partial_to_complete_sha_hex('155b6') == hex_to_bin("155b62a9af0aa7677078331e111d0f7aa6eb4afc") - + # mix even/uneven hexshas for i, binsha in enumerate(sha_list): assert gdb.partial_to_complete_sha_hex(bin_to_hex(binsha)[:8-(i%2)]) == binsha # END for each sha - + self.failUnlessRaises(BadObject, gdb.partial_to_complete_sha_hex, "0000") - + @with_rw_directory def test_writing(self, path): gdb = GitDB(path) - + # its possible to write objects self._assert_object_writing(gdb) self._assert_object_writing_async(gdb) diff --git a/gitdb/test/db/test_loose.py b/gitdb/test/db/test_loose.py index d7e1d01b0..e295db563 100644 --- a/gitdb/test/db/test_loose.py +++ b/gitdb/test/db/test_loose.py @@ -6,29 +6,28 @@ from gitdb.db import LooseObjectDB from gitdb.exc import BadObject from gitdb.util import bin_to_hex - + class TestLooseDB(TestDBBase): - + @with_rw_directory def test_basics(self, path): ldb = LooseObjectDB(path) - + # write data self._assert_object_writing(ldb) self._assert_object_writing_async(ldb) - + # verify sha iteration and size shas = list(ldb.sha_iter()) assert shas and len(shas[0]) == 20 - + assert len(shas) == ldb.size() - + # verify find short object long_sha = bin_to_hex(shas[-1]) for short_sha in (long_sha[:20], long_sha[:5]): assert bin_to_hex(ldb.partial_to_complete_sha_hex(short_sha)) == long_sha # END for each sha - + self.failUnlessRaises(BadObject, ldb.partial_to_complete_sha_hex, '0000') # raises if no object could be foudn - diff --git a/gitdb/test/db/test_mem.py b/gitdb/test/db/test_mem.py index df428e2b7..ac9bc34e9 100644 --- a/gitdb/test/db/test_mem.py +++ b/gitdb/test/db/test_mem.py @@ -4,27 +4,27 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php from lib import * from gitdb.db import ( - MemoryDB, - LooseObjectDB - ) - + MemoryDB, + LooseObjectDB +) + class TestMemoryDB(TestDBBase): - + @with_rw_directory def test_writing(self, path): mdb = MemoryDB() - + # write data self._assert_object_writing_simple(mdb) - + # test stream copy ldb = LooseObjectDB(path) assert ldb.size() == 0 num_streams_copied = mdb.stream_copy(mdb.sha_iter(), ldb) assert num_streams_copied == mdb.size() - + assert ldb.size() == mdb.size() for sha in mdb.sha_iter(): assert ldb.has_object(sha) - assert ldb.stream(sha).read() == mdb.stream(sha).read() + assert ldb.stream(sha).read() == mdb.stream(sha).read() # END verify objects where copied and are equal diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index f4cb5bbc6..0d9110a01 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -12,45 +12,45 @@ import random class TestPackDB(TestDBBase): - + @with_rw_directory @with_packs_rw def test_writing(self, path): pdb = PackedDB(path) - + # on demand, we init our pack cache num_packs = len(pdb.entities()) assert pdb._st_mtime != 0 - - # test pack directory changed: + + # test pack directory changed: # packs removed - rename a file, should affect the glob pack_path = pdb.entities()[0].pack().path() new_pack_path = pack_path + "renamed" os.rename(pack_path, new_pack_path) - + pdb.update_cache(force=True) assert len(pdb.entities()) == num_packs - 1 - + # packs added os.rename(new_pack_path, pack_path) pdb.update_cache(force=True) assert len(pdb.entities()) == num_packs - + # bang on the cache # access the Entities directly, as there is no iteration interface # yet ( or required for now ) sha_list = list(pdb.sha_iter()) assert len(sha_list) == pdb.size() - + # hit all packs in random order random.shuffle(sha_list) - + for sha in sha_list: info = pdb.info(sha) stream = pdb.stream(sha) # END for each sha to query - - + + # test short finding - be a bit more brutal here max_bytes = 19 min_bytes = 2 @@ -64,10 +64,10 @@ def test_writing(self, path): pass # valid, we can have short objects # END exception handling # END for each sha to find - + # we should have at least one ambiguous, considering the small sizes - # but in our pack, there is no ambigious ... + # but in our pack, there is no ambigious ... # assert num_ambiguous - + # non-existing self.failUnlessRaises(BadObject, pdb.partial_to_complete_sha, "\0\0", 4) diff --git a/gitdb/test/db/test_ref.py b/gitdb/test/db/test_ref.py index 1637bff74..086446823 100644 --- a/gitdb/test/db/test_ref.py +++ b/gitdb/test/db/test_ref.py @@ -6,14 +6,14 @@ from gitdb.db import ReferenceDB from gitdb.util import ( - NULL_BIN_SHA, - hex_to_bin - ) + NULL_BIN_SHA, + hex_to_bin +) import os - + class TestReferenceDB(TestDBBase): - + def make_alt_file(self, alt_path, alt_list): """Create an alternates file which contains the given alternates. The list can be empty""" @@ -21,40 +21,38 @@ def make_alt_file(self, alt_path, alt_list): for alt in alt_list: alt_file.write(alt + "\n") alt_file.close() - + @with_rw_directory def test_writing(self, path): NULL_BIN_SHA = '\0' * 20 - + alt_path = os.path.join(path, 'alternates') rdb = ReferenceDB(alt_path) assert len(rdb.databases()) == 0 assert rdb.size() == 0 assert len(list(rdb.sha_iter())) == 0 - + # try empty, non-existing assert not rdb.has_object(NULL_BIN_SHA) - - + + # setup alternate file # add two, one is invalid own_repo_path = fixture_path('../../../.git/objects') # use own repo self.make_alt_file(alt_path, [own_repo_path, "invalid/path"]) rdb.update_cache() assert len(rdb.databases()) == 1 - + # we should now find a default revision of ours gitdb_sha = hex_to_bin("5690fd0d3304f378754b23b098bd7cb5f4aa1976") assert rdb.has_object(gitdb_sha) - + # remove valid self.make_alt_file(alt_path, ["just/one/invalid/path"]) rdb.update_cache() assert len(rdb.databases()) == 0 - + # add valid self.make_alt_file(alt_path, [own_repo_path]) rdb.update_cache() assert len(rdb.databases()) == 1 - - diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index ac8473a4e..685af2fad 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -4,12 +4,12 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Utilities used in ODB testing""" from gitdb import ( - OStream, + OStream, ) -from gitdb.stream import ( - Sha1Writer, - ZippedStoreShaWriter - ) +from gitdb.stream import ( + Sha1Writer, + ZippedStoreShaWriter +) from gitdb.util import zlib @@ -30,14 +30,14 @@ class TestBase(unittest.TestCase): """Base class for all tests""" - + #} END bases #{ Decorators def with_rw_directory(func): - """Create a temporary directory which can be written to, remove it if the + """Create a temporary directory which can be written to, remove it if the test suceeds, but leave it otherwise to aid additional debugging""" def wrapper(self): path = tempfile.mktemp(prefix=func.__name__) @@ -52,7 +52,7 @@ def wrapper(self): raise finally: # Need to collect here to be sure all handles have been closed. It appears - # a windows-only issue. In fact things should be deleted, as well as + # a windows-only issue. In fact things should be deleted, as well as # memory maps closed, once objects go out of scope. For some reason # though this is not the case here unless we collect explicitly. if not keep: @@ -60,20 +60,20 @@ def wrapper(self): shutil.rmtree(path) # END handle exception # END wrapper - + wrapper.__name__ = func.__name__ return wrapper def with_packs_rw(func): - """Function that provides a path into which the packs for testing should be + """Function that provides a path into which the packs for testing should be copied. Will pass on the path to the actual function afterwards""" def wrapper(self, path): src_pack_glob = fixture_path('packs/*') copy_files_globbed(src_pack_glob, path, hard_link_ok=True) return func(self, path) # END wrapper - + wrapper.__name__ = func.__name__ return wrapper @@ -86,10 +86,10 @@ def fixture_path(relapath=''): :param relapath: relative path into the fixtures directory, or '' to obtain the fixture directory itself""" return os.path.join(os.path.dirname(__file__), 'fixtures', relapath) - + def copy_files_globbed(source_glob, target_dir, hard_link_ok=False): """Copy all files found according to the given source glob into the target directory - :param hard_link_ok: if True, hard links will be created if possible. Otherwise + :param hard_link_ok: if True, hard links will be created if possible. Otherwise the files will be copied""" for src_file in glob.glob(source_glob): if hard_link_ok and hasattr(os, 'link'): @@ -103,7 +103,7 @@ def copy_files_globbed(source_glob, target_dir, hard_link_ok=False): shutil.copy(src_file, target_dir) # END try hard link # END for each file to copy - + def make_bytes(size_in_bytes, randomize=False): """:return: string with given size in bytes @@ -121,7 +121,7 @@ def make_object(type, data): """:return: bytes resembling an uncompressed object""" odata = "blob %i\0" % len(data) return odata + data - + def make_memory_file(size_in_bytes, randomize=False): """:return: tuple(size_of_stream, stream) :param randomize: try to produce a very random stream""" @@ -137,14 +137,14 @@ def __init__(self): self.was_read = False self.bytes = 0 self.closed = False - + def read(self, size): self.was_read = True self.bytes = size - + def close(self): self.closed = True - + def _assert(self): assert self.was_read @@ -153,10 +153,9 @@ class DeriveTest(OStream): def __init__(self, sha, type, size, stream, *args, **kwargs): self.myarg = kwargs.pop('myarg') self.args = args - + def _assert(self): assert self.args assert self.myarg #} END stream utilitiess - diff --git a/gitdb/test/test_base.py b/gitdb/test/test_base.py index d4ce428c3..76b4d2709 100644 --- a/gitdb/test/test_base.py +++ b/gitdb/test/test_base.py @@ -6,7 +6,7 @@ from lib import ( TestBase, DummyStream, - DeriveTest, + DeriveTest, ) from gitdb import * @@ -20,33 +20,33 @@ class TestBaseTypes(TestBase): - + def test_streams(self): # test info sha = NULL_BIN_SHA s = 20 blob_id = 3 - + info = OInfo(sha, str_blob_type, s) assert info.binsha == sha assert info.type == str_blob_type assert info.type_id == blob_id assert info.size == s - + # test pack info # provides type_id pinfo = OPackInfo(0, blob_id, s) assert pinfo.type == str_blob_type assert pinfo.type_id == blob_id assert pinfo.pack_offset == 0 - + dpinfo = ODeltaPackInfo(0, blob_id, s, sha) assert dpinfo.type == str_blob_type assert dpinfo.type_id == blob_id assert dpinfo.delta_info == sha assert dpinfo.pack_offset == 0 - - + + # test ostream stream = DummyStream() ostream = OStream(*(info + (stream, ))) @@ -56,33 +56,33 @@ def test_streams(self): assert stream.bytes == 15 ostream.read(20) assert stream.bytes == 20 - + # test packstream postream = OPackStream(*(pinfo + (stream, ))) assert postream.stream is stream postream.read(10) stream._assert() assert stream.bytes == 10 - + # test deltapackstream dpostream = ODeltaPackStream(*(dpinfo + (stream, ))) dpostream.stream is stream dpostream.read(5) stream._assert() assert stream.bytes == 5 - + # derive with own args DeriveTest(sha, str_blob_type, s, stream, 'mine',myarg = 3)._assert() - + # test istream istream = IStream(str_blob_type, s, stream) assert istream.binsha == None istream.binsha = sha assert istream.binsha == sha - + assert len(istream.binsha) == 20 assert len(istream.hexsha) == 40 - + assert istream.size == s istream.size = s * 2 istream.size == s * 2 @@ -92,7 +92,7 @@ def test_streams(self): assert istream.stream is stream istream.stream = None assert istream.stream is None - + assert istream.error is None istream.error = Exception() assert isinstance(istream.error, Exception) diff --git a/gitdb/test/test_example.py b/gitdb/test/test_example.py index 611ae4299..f45063b1e 100644 --- a/gitdb/test/test_example.py +++ b/gitdb/test/test_example.py @@ -11,17 +11,17 @@ from cStringIO import StringIO from async import IteratorReader - + class TestExamples(TestBase): - + def test_base(self): ldb = LooseObjectDB(fixture_path("../../../.git/objects")) - + for sha1 in ldb.sha_iter(): oinfo = ldb.info(sha1) ostream = ldb.stream(sha1) assert oinfo[:3] == ostream[:3] - + assert len(ostream.read()) == ostream.size assert ldb.has_object(oinfo.binsha) # END for each sha in database @@ -32,33 +32,33 @@ def test_base(self): except UnboundLocalError: pass # END ignore exception if there are no loose objects - + data = "my data" istream = IStream("blob", len(data), StringIO(data)) - + # the object does not yet have a sha assert istream.binsha is None ldb.store(istream) # now the sha is set assert len(istream.binsha) == 20 assert ldb.has_object(istream.binsha) - - + + # async operation # Create a reader from an iterator reader = IteratorReader(ldb.sha_iter()) - + # get reader for object streams info_reader = ldb.stream_async(reader) - + # read one info = info_reader.read(1)[0] - + # read all the rest until depletion ostreams = info_reader.read() - + # set the pool to use two threads pool.set_size(2) - + # synchronize the mode of operation pool.set_size(0) diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index 779155a2a..f28aef4d4 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -12,15 +12,15 @@ from gitdb.stream import DeltaApplyReader from gitdb.pack import ( - PackEntity, - PackIndexFile, - PackFile - ) + PackEntity, + PackIndexFile, + PackFile +) from gitdb.base import ( - OInfo, - OStream, - ) + OInfo, + OStream, +) from gitdb.fun import delta_types from gitdb.exc import UnsupportedOperation @@ -39,15 +39,15 @@ def bin_sha_from_filename(filename): #} END utilities class TestPack(TestBase): - + packindexfile_v1 = (fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx'), 1, 67) packindexfile_v2 = (fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx'), 2, 30) packindexfile_v2_3_ascii = (fixture_path('packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx'), 2, 42) packfile_v2_1 = (fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack'), 2, packindexfile_v1[2]) packfile_v2_2 = (fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.pack'), 2, packindexfile_v2[2]) packfile_v2_3_ascii = (fixture_path('packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.pack'), 2, packindexfile_v2_3_ascii[2]) - - + + def _assert_index_file(self, index, version, size): assert index.packfile_checksum() != index.indexfile_checksum() assert len(index.packfile_checksum()) == 20 @@ -55,93 +55,93 @@ def _assert_index_file(self, index, version, size): assert index.version() == version assert index.size() == size assert len(index.offsets()) == size - + # get all data of all objects for oidx in xrange(index.size()): sha = index.sha(oidx) assert oidx == index.sha_to_index(sha) - + entry = index.entry(oidx) assert len(entry) == 3 - + assert entry[0] == index.offset(oidx) assert entry[1] == sha assert entry[2] == index.crc(oidx) - + # verify partial sha for l in (4,8,11,17,20): assert index.partial_sha_to_index(sha[:l], l*2) == oidx - + # END for each object index in indexfile self.failUnlessRaises(ValueError, index.partial_sha_to_index, "\0", 2) - - + + def _assert_pack_file(self, pack, version, size): assert pack.version() == 2 assert pack.size() == size assert len(pack.checksum()) == 20 - + num_obj = 0 for obj in pack.stream_iter(): num_obj += 1 info = pack.info(obj.pack_offset) stream = pack.stream(obj.pack_offset) - + assert info.pack_offset == stream.pack_offset assert info.type_id == stream.type_id assert hasattr(stream, 'read') - + # it should be possible to read from both streams assert obj.read() == stream.read() - + streams = pack.collect_streams(obj.pack_offset) assert streams - + # read the stream try: dstream = DeltaApplyReader.new(streams) except ValueError: - # ignore these, old git versions use only ref deltas, + # ignore these, old git versions use only ref deltas, # which we havent resolved ( as we are without an index ) # Also ignore non-delta streams continue # END get deltastream - + # read all data = dstream.read() assert len(data) == dstream.size - + # test seek dstream.seek(0) assert dstream.read() == data - - + + # read chunks # NOTE: the current implementation is safe, it basically transfers # all calls to the underlying memory map - + # END for each object assert num_obj == size - - + + def test_pack_index(self): # check version 1 and 2 - for indexfile, version, size in (self.packindexfile_v1, self.packindexfile_v2): + for indexfile, version, size in (self.packindexfile_v1, self.packindexfile_v2): index = PackIndexFile(indexfile) self._assert_index_file(index, version, size) # END run tests - + def test_pack(self): - # there is this special version 3, but apparently its like 2 ... + # there is this special version 3, but apparently its like 2 ... for packfile, version, size in (self.packfile_v2_3_ascii, self.packfile_v2_1, self.packfile_v2_2): pack = PackFile(packfile) self._assert_pack_file(pack, version, size) # END for each pack to test - + @with_rw_directory def test_pack_entity(self, rw_dir): pack_objs = list() - for packinfo, indexinfo in ( (self.packfile_v2_1, self.packindexfile_v1), + for packinfo, indexinfo in ( (self.packfile_v2_1, self.packindexfile_v1), (self.packfile_v2_2, self.packindexfile_v2), (self.packfile_v2_3_ascii, self.packindexfile_v2_3_ascii)): packfile, version, size = packinfo @@ -150,7 +150,7 @@ def test_pack_entity(self, rw_dir): assert entity.pack().path() == packfile assert entity.index().path() == indexfile pack_objs.extend(entity.stream_iter()) - + count = 0 for info, stream in izip(entity.info_iter(), entity.stream_iter()): count += 1 @@ -158,10 +158,10 @@ def test_pack_entity(self, rw_dir): assert len(info.binsha) == 20 assert info.type_id == stream.type_id assert info.size == stream.size - + # we return fully resolved items, which is implied by the sha centric access assert not info.type_id in delta_types - + # try all calls assert len(entity.collect_streams(info.binsha)) oinfo = entity.info(info.binsha) @@ -170,7 +170,7 @@ def test_pack_entity(self, rw_dir): ostream = entity.stream(info.binsha) assert isinstance(ostream, OStream) assert ostream.binsha is not None - + # verify the stream try: assert entity.is_valid_stream(info.binsha, use_crc=True) @@ -180,16 +180,16 @@ def test_pack_entity(self, rw_dir): assert entity.is_valid_stream(info.binsha, use_crc=False) # END for each info, stream tuple assert count == size - + # END for each entity - + # pack writing - write all packs into one # index path can be None pack_path = tempfile.mktemp('', "pack", rw_dir) index_path = tempfile.mktemp('', 'index', rw_dir) iteration = 0 def rewind_streams(): - for obj in pack_objs: + for obj in pack_objs: obj.stream.seek(0) #END utility for ppath, ipath, num_obj in zip((pack_path, )*2, (index_path, None), (len(pack_objs), None)): @@ -199,23 +199,23 @@ def rewind_streams(): ifile = open(ipath, 'wb') iwrite = ifile.write #END handle ip - + # make sure we rewind the streams ... we work on the same objects over and over again - if iteration > 0: + if iteration > 0: rewind_streams() #END rewind streams iteration += 1 - + pack_sha, index_sha = PackEntity.write_pack(pack_objs, pfile.write, iwrite, object_count=num_obj) pfile.close() assert os.path.getsize(ppath) > 100 - + # verify pack pf = PackFile(ppath) assert pf.size() == len(pack_objs) assert pf.version() == PackFile.pack_version_default assert pf.checksum() == pack_sha - + # verify index if ipath is not None: ifile.close() @@ -227,7 +227,7 @@ def rewind_streams(): assert idx.size() == len(pack_objs) #END verify files exist #END for each packpath, indexpath pair - + # verify the packs throughly rewind_streams() entity = PackEntity.create(pack_objs, rw_dir) @@ -239,9 +239,9 @@ def rewind_streams(): # END for each crc mode #END for each info assert count == len(pack_objs) - - + + def test_pack_64(self): # TODO: hex-edit a pack helping us to verify that we can handle 64 byte offsets - # of course without really needing such a huge pack + # of course without really needing such a huge pack raise SkipTest() diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index 6dc27463c..8360ea36c 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -32,18 +32,18 @@ class TestStream(TestBase): """Test stream classes""" - + data_sizes = (15, 10000, 1000*1024+512) - + def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): - """Make stream tests - the orig_stream is seekable, allowing it to be + """Make stream tests - the orig_stream is seekable, allowing it to be rewound and reused :param cdata: the data we expect to read from stream, the contents :param rewind_stream: function called to rewind the stream to make it ready for reuse""" ns = 10 assert len(cdata) > ns-1, "Data must be larger than %i, was %i" % (ns, len(cdata)) - + # read in small steps ss = len(cdata) / ns for i in range(ns): @@ -55,30 +55,30 @@ def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): if rest: assert rest == cdata[-len(rest):] # END handle rest - + if isinstance(stream, DecompressMemMapReader): assert len(stream.data()) == stream.compressed_bytes_read() # END handle special type - + rewind_stream(stream) - + # read everything rdata = stream.read() assert rdata == cdata - + if isinstance(stream, DecompressMemMapReader): assert len(stream.data()) == stream.compressed_bytes_read() # END handle special type - + def test_decompress_reader(self): for close_on_deletion in range(2): for with_size in range(2): for ds in self.data_sizes: cdata = make_bytes(ds, randomize=False) - + # zdata = zipped actual data # cdata = original content data - + # create reader if with_size: # need object data @@ -86,7 +86,7 @@ def test_decompress_reader(self): type, size, reader = DecompressMemMapReader.new(zdata, close_on_deletion) assert size == len(cdata) assert type == str_blob_type - + # even if we don't set the size, it will be set automatically on first read test_reader = DecompressMemMapReader(zdata, close_on_deletion=False) assert test_reader._s == len(cdata) @@ -95,60 +95,59 @@ def test_decompress_reader(self): zdata = zlib.compress(cdata) reader = DecompressMemMapReader(zdata, close_on_deletion, len(cdata)) assert reader._s == len(cdata) - # END get reader - + # END get reader + self._assert_stream_reader(reader, cdata, lambda r: r.seek(0)) - + # put in a dummy stream for closing dummy = DummyStream() reader._m = dummy - + assert not dummy.closed del(reader) assert dummy.closed == close_on_deletion # END for each datasize # END whether size should be used # END whether stream should be closed when deleted - + def test_sha_writer(self): writer = Sha1Writer() assert 2 == writer.write("hi") assert len(writer.sha(as_hex=1)) == 40 assert len(writer.sha(as_hex=0)) == 20 - + # make sure it does something ;) prev_sha = writer.sha() writer.write("hi again") assert writer.sha() != prev_sha - + def test_compressed_writer(self): for ds in self.data_sizes: fd, path = tempfile.mkstemp() ostream = FDCompressedSha1Writer(fd) data = make_bytes(ds, randomize=False) - + # for now, just a single write, code doesn't care about chunking assert len(data) == ostream.write(data) ostream.close() - + # its closed already self.failUnlessRaises(OSError, os.close, fd) - + # read everything back, compare to data we zip fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)) written_data = os.read(fd, os.path.getsize(path)) assert len(written_data) == os.path.getsize(path) os.close(fd) assert written_data == zlib.compress(data, 1) # best speed - + os.remove(path) # END for each os - + def test_decompress_reader_special_case(self): odb = LooseObjectDB(fixture_path('objects')) ostream = odb.stream(hex_to_bin('7bb839852ed5e3a069966281bb08d50012fb309b')) - + # if there is a bug, we will be missing one byte exactly ! data = ostream.read() assert len(data) == ostream.size - diff --git a/gitdb/test/test_util.py b/gitdb/test/test_util.py index 35f9f44a7..ed69f0d1f 100644 --- a/gitdb/test/test_util.py +++ b/gitdb/test/test_util.py @@ -8,28 +8,28 @@ from lib import TestBase from gitdb.util import ( - to_hex_sha, - to_bin_sha, - NULL_HEX_SHA, + to_hex_sha, + to_bin_sha, + NULL_HEX_SHA, LockedFD - ) +) + - class TestUtils(TestBase): def test_basics(self): assert to_hex_sha(NULL_HEX_SHA) == NULL_HEX_SHA assert len(to_bin_sha(NULL_HEX_SHA)) == 20 assert to_hex_sha(to_bin_sha(NULL_HEX_SHA)) == NULL_HEX_SHA - + def _cmp_contents(self, file_path, data): - # raise if data from file at file_path + # raise if data from file at file_path # does not match data string fp = open(file_path, "rb") try: assert fp.read() == data finally: fp.close() - + def test_lockedfd(self): my_file = tempfile.mktemp() orig_data = "hello" @@ -37,43 +37,43 @@ def test_lockedfd(self): my_file_fp = open(my_file, "wb") my_file_fp.write(orig_data) my_file_fp.close() - + try: lfd = LockedFD(my_file) - lockfilepath = lfd._lockfilepath() - + lockfilepath = lfd._lockfilepath() + # cannot end before it was started self.failUnlessRaises(AssertionError, lfd.rollback) self.failUnlessRaises(AssertionError, lfd.commit) - + # open for writing assert not os.path.isfile(lockfilepath) wfd = lfd.open(write=True) assert lfd._fd is wfd assert os.path.isfile(lockfilepath) - + # write data and fail os.write(wfd, new_data) lfd.rollback() assert lfd._fd is None self._cmp_contents(my_file, orig_data) assert not os.path.isfile(lockfilepath) - + # additional call doesnt fail lfd.commit() lfd.rollback() - + # test reading lfd = LockedFD(my_file) rfd = lfd.open(write=False) assert os.read(rfd, len(orig_data)) == orig_data - + assert os.path.isfile(lockfilepath) # deletion rolls back del(lfd) assert not os.path.isfile(lockfilepath) - - + + # write data - concurrently lfd = LockedFD(my_file) olfd = LockedFD(my_file) @@ -82,17 +82,17 @@ def test_lockedfd(self): assert os.path.isfile(lockfilepath) # another one fails self.failUnlessRaises(IOError, olfd.open) - + wfdstream.write(new_data) lfd.commit() assert not os.path.isfile(lockfilepath) self._cmp_contents(my_file, new_data) - + # could test automatic _end_writing on destruction finally: os.remove(my_file) # END final cleanup - + # try non-existing file for reading lfd = LockedFD(tempfile.mktemp()) try: @@ -102,4 +102,3 @@ def test_lockedfd(self): else: self.fail("expected OSError") # END handle exceptions - diff --git a/gitdb/util.py b/gitdb/util.py index 1662b662d..b167b4d12 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -24,10 +24,9 @@ from async import ThreadPool from smmap import ( - StaticWindowMapManager, - SlidingWindowMapManager, - SlidingWindowMapBuffer - ) + StaticWindowMapManager, SlidingWindowMapManager, + SlidingWindowMapBuffer +) # initialize our global memory manager instance # Use it to free cached (and unused) resources. @@ -60,7 +59,7 @@ def unpack_from(fmt, data, offset=0): #{ Globals -# A pool distributing tasks, initially with zero threads, hence everything +# A pool distributing tasks, initially with zero threads, hence everything # will be handled in the main thread pool = ThreadPool(0) @@ -97,35 +96,35 @@ def unpack_from(fmt, data, offset=0): #} END Aliases -#{ compatibility stuff ... +#{ compatibility stuff ... class _RandomAccessStringIO(object): - """Wrapper to provide required functionality in case memory maps cannot or may + """Wrapper to provide required functionality in case memory maps cannot or may not be used. This is only really required in python 2.4""" __slots__ = '_sio' - + def __init__(self, buf=''): self._sio = StringIO(buf) - + def __getattr__(self, attr): return getattr(self._sio, attr) - + def __len__(self): return len(self.getvalue()) - + def __getitem__(self, i): return self.getvalue()[i] - + def __getslice__(self, start, end): return self.getvalue()[start:end] - + #} END compatibility stuff ... #{ Routines def make_sha(source=''): """A python2.4 workaround for the sha/hashlib module fiasco - + **Note** From the dulwich project """ try: return hashlib.sha1(source) @@ -138,25 +137,25 @@ def allocate_memory(size): if size == 0: return _RandomAccessStringIO('') # END handle empty chunks gracefully - + try: return mmap.mmap(-1, size) # read-write by default except EnvironmentError: # setup real memory instead # this of course may fail if the amount of memory is not available in - # one chunk - would only be the case in python 2.4, being more likely on + # one chunk - would only be the case in python 2.4, being more likely on # 32 bit systems. return _RandomAccessStringIO("\0"*size) # END handle memory allocation - + def file_contents_ro(fd, stream=False, allow_mmap=True): """:return: read-only contents of the file represented by the file descriptor fd - + :param fd: file descriptor opened for reading :param stream: if False, random access is provided, otherwise the stream interface is provided. - :param allow_mmap: if True, its allowed to map the contents into memory, which + :param allow_mmap: if True, its allowed to map the contents into memory, which allows large files to be handled and accessed efficiently. The file-descriptor will change its position if this is False""" try: @@ -171,24 +170,24 @@ def file_contents_ro(fd, stream=False, allow_mmap=True): except OSError: pass # END exception handling - + # read manully contents = os.read(fd, os.fstat(fd).st_size) if stream: return _RandomAccessStringIO(contents) return contents - + def file_contents_ro_filepath(filepath, stream=False, allow_mmap=True, flags=0): """Get the file contents at filepath as fast as possible - + :return: random access compatible memory of the given filepath :param stream: see ``file_contents_ro`` :param allow_mmap: see ``file_contents_ro`` :param flags: additional flags to pass to os.open :raise OSError: If the file could not be opened - - **Note** for now we don't try to use O_NOATIME directly as the right value needs to be - shared per database in fact. It only makes a real difference for loose object + + **Note** for now we don't try to use O_NOATIME directly as the right value needs to be + shared per database in fact. It only makes a real difference for loose object databases anyway, and they use it with the help of the ``flags`` parameter""" fd = os.open(filepath, os.O_RDONLY|getattr(os, 'O_BINARY', 0)|flags) try: @@ -196,19 +195,19 @@ def file_contents_ro_filepath(filepath, stream=False, allow_mmap=True, flags=0): finally: close(fd) # END assure file is closed - + def sliding_ro_buffer(filepath, flags=0): """ :return: a buffer compatible object which uses our mapped memory manager internally ready to read the whole given filepath""" return SlidingWindowMapBuffer(mman.make_cursor(filepath), flags=flags) - + def to_hex_sha(sha): """:return: hexified version of sha""" if len(sha) == 40: return sha return bin_to_hex(sha) - + def to_bin_sha(sha): if len(sha) == 20: return sha @@ -227,12 +226,12 @@ class LazyMixin(object): is actually accessed and retrieved the first time. All future accesses will return the cached value as stored in the Instance's dict or slot. """ - + __slots__ = tuple() - + def __getattr__(self, attr): """ - Whenever an attribute is requested that we do not know, we allow it + Whenever an attribute is requested that we do not know, we allow it to be created and set. Next time the same attribute is reqeusted, it is simply returned from our dict/slots. """ self._set_cache_(attr) @@ -241,65 +240,65 @@ def __getattr__(self, attr): def _set_cache_(self, attr): """ - This method should be overridden in the derived class. + This method should be overridden in the derived class. It should check whether the attribute named by attr can be created and cached. Do nothing if you do not know the attribute or call your subclass - - The derived class may create as many additional attributes as it deems - necessary in case a git command returns more information than represented + + The derived class may create as many additional attributes as it deems + necessary in case a git command returns more information than represented in the single attribute.""" pass - + class LockedFD(object): """ This class facilitates a safe read and write operation to a file on disk. - If we write to 'file', we obtain a lock file at 'file.lock' and write to - that instead. If we succeed, the lock file will be renamed to overwrite + If we write to 'file', we obtain a lock file at 'file.lock' and write to + that instead. If we succeed, the lock file will be renamed to overwrite the original file. - - When reading, we obtain a lock file, but to prevent other writers from + + When reading, we obtain a lock file, but to prevent other writers from succeeding while we are reading the file. - - This type handles error correctly in that it will assure a consistent state + + This type handles error correctly in that it will assure a consistent state on destruction. - + **note** with this setup, parallel reading is not possible""" __slots__ = ("_filepath", '_fd', '_write') - + def __init__(self, filepath): """Initialize an instance with the givne filepath""" self._filepath = filepath self._fd = None self._write = None # if True, we write a file - + def __del__(self): # will do nothing if the file descriptor is already closed if self._fd is not None: self.rollback() - + def _lockfilepath(self): return "%s.lock" % self._filepath - + def open(self, write=False, stream=False): """ Open the file descriptor for reading or writing, both in binary mode. - + :param write: if True, the file descriptor will be opened for writing. Other wise it will be opened read-only. - :param stream: if True, the file descriptor will be wrapped into a simple stream + :param stream: if True, the file descriptor will be wrapped into a simple stream object which supports only reading or writing :return: fd to read from or write to. It is still maintained by this instance and must not be closed directly :raise IOError: if the lock could not be retrieved :raise OSError: If the actual file could not be opened for reading - + **note** must only be called once""" if self._write is not None: raise AssertionError("Called %s multiple times" % self.open) - + self._write = write - + # try to open the lock file binary = getattr(os, 'O_BINARY', 0) lockmode = os.O_WRONLY | os.O_CREAT | os.O_EXCL | binary @@ -313,7 +312,7 @@ def open(self, write=False, stream=False): except OSError: raise IOError("Lock at %r could not be obtained" % self._lockfilepath()) # END handle lock retrieval - + # open actual file if required if self._fd is None: # we could specify exlusive here, as we obtained the lock anyway @@ -325,7 +324,7 @@ def open(self, write=False, stream=False): raise # END handle lockfile # END open descriptor for reading - + if stream: # need delayed import from stream import FDStream @@ -333,33 +332,33 @@ def open(self, write=False, stream=False): else: return self._fd # END handle stream - + def commit(self): - """When done writing, call this function to commit your changes into the - actual file. + """When done writing, call this function to commit your changes into the + actual file. The file descriptor will be closed, and the lockfile handled. - + **Note** can be called multiple times""" self._end_writing(successful=True) - + def rollback(self): - """Abort your operation without any changes. The file descriptor will be + """Abort your operation without any changes. The file descriptor will be closed, and the lock released. - + **Note** can be called multiple times""" self._end_writing(successful=False) - + def _end_writing(self, successful=True): """Handle the lock according to the write mode """ if self._write is None: raise AssertionError("Cannot end operation if it wasn't started yet") - + if self._fd is None: return - + os.close(self._fd) self._fd = None - + lockfile = self._lockfilepath() if self._write and successful: # on windows, rename does not silently overwrite the existing one @@ -369,7 +368,7 @@ def _end_writing(self, successful=True): # END remove if exists # END win32 special handling os.rename(lockfile, self._filepath) - + # assure others can at least read the file - the tmpfile left it at rw-- # We may also write that file, on windows that boils down to a remove- # protection as well From b6c493deb2341fb843d71b66b2aa23078638755c Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 15:41:15 -0400 Subject: [PATCH 0235/2375] Pick off the low hanging fruit This fixes most of the import errors that came from using the implicit relative imports that Python 2 supports. This also fixes the use of `xrange`, which has replaced `range` in Python 3. The same has happened for `izip`, which is also being aliased. The octal number syntax changed in Python 3, so we are now converting from strings using the `int` built-in function, which will produce the same output across both versions of Python. --- gitdb/__init__.py | 7 ++- gitdb/base.py | 18 +++---- gitdb/db/__init__.py | 13 +++-- gitdb/db/base.py | 1 + gitdb/db/git.py | 18 +++---- gitdb/db/loose.py | 20 ++++---- gitdb/db/mem.py | 23 ++++++--- gitdb/db/pack.py | 14 +++--- gitdb/db/ref.py | 10 ++-- gitdb/exc.py | 2 +- gitdb/fun.py | 21 +++++++-- gitdb/pack.py | 94 ++++++++++++++++++++----------------- gitdb/stream.py | 43 ++++++++++------- gitdb/test/__init__.py | 2 +- gitdb/test/db/lib.py | 12 ++++- gitdb/test/db/test_git.py | 2 +- gitdb/test/db/test_loose.py | 2 +- gitdb/test/db/test_mem.py | 2 +- gitdb/test/db/test_pack.py | 2 +- gitdb/test/db/test_ref.py | 2 +- gitdb/test/lib.py | 11 ++++- gitdb/test/test_base.py | 2 +- gitdb/test/test_example.py | 12 +++-- gitdb/test/test_pack.py | 23 +++++---- gitdb/test/test_stream.py | 16 +++---- gitdb/test/test_util.py | 2 +- gitdb/util.py | 18 +++---- 27 files changed, 228 insertions(+), 164 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 847269a33..66d1b1c40 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -32,7 +32,6 @@ def _init_externals(): # default imports -from db import * -from base import * -from stream import * - +from gitdb.base import * +from gitdb.db import * +from gitdb.stream import * diff --git a/gitdb/base.py b/gitdb/base.py index a673c2376..1eb423284 100644 --- a/gitdb/base.py +++ b/gitdb/base.py @@ -3,15 +3,15 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module with basic data structures - they are designed to be lightweight and fast""" -from util import ( - bin_to_hex, - zlib - ) - -from fun import ( - type_id_to_type_map, - type_to_type_id_map - ) +from gitdb.util import ( + bin_to_hex, + zlib +) + +from gitdb.fun import ( + type_id_to_type_map, + type_to_type_id_map +) __all__ = ('OInfo', 'OPackInfo', 'ODeltaPackInfo', 'OStream', 'OPackStream', 'ODeltaPackStream', diff --git a/gitdb/db/__init__.py b/gitdb/db/__init__.py index e5935b7c2..0a2a46a64 100644 --- a/gitdb/db/__init__.py +++ b/gitdb/db/__init__.py @@ -3,10 +3,9 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from base import * -from loose import * -from mem import * -from pack import * -from git import * -from ref import * - +from gitdb.db.base import * +from gitdb.db.loose import * +from gitdb.db.mem import * +from gitdb.db.pack import * +from gitdb.db.git import * +from gitdb.db.ref import * diff --git a/gitdb/db/base.py b/gitdb/db/base.py index 0eef1e5d5..85df324f7 100644 --- a/gitdb/db/base.py +++ b/gitdb/db/base.py @@ -20,6 +20,7 @@ ) from itertools import chain +from functools import reduce __all__ = ('ObjectDBR', 'ObjectDBW', 'FileDBBase', 'CompoundDB', 'CachingDB') diff --git a/gitdb/db/git.py b/gitdb/db/git.py index 6e6ec5d1f..5c74a2049 100644 --- a/gitdb/db/git.py +++ b/gitdb/db/git.py @@ -2,15 +2,15 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from base import ( - CompoundDB, - ObjectDBW, - FileDBBase - ) - -from loose import LooseObjectDB -from pack import PackedDB -from ref import ReferenceDB +from gitdb.db.base import ( + CompoundDB, + ObjectDBW, + FileDBBase +) + +from gitdb.db.loose import LooseObjectDB +from gitdb.db.pack import PackedDB +from gitdb.db.ref import ReferenceDB from gitdb.util import LazyMixin from gitdb.exc import ( diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index 4ebca84d3..ac1b9d1d6 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -2,11 +2,11 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from base import ( - FileDBBase, - ObjectDBR, - ObjectDBW - ) +from gitdb.db.base import ( + FileDBBase, + ObjectDBR, + ObjectDBW +) from gitdb.exc import ( @@ -69,11 +69,11 @@ class LooseObjectDB(FileDBBase, ObjectDBR, ObjectDBW): # On windows we need to keep it writable, otherwise it cannot be removed # either - new_objects_mode = 0444 + new_objects_mode = int("444", 8) if os.name == 'nt': - new_objects_mode = 0644 - - + new_objects_mode = int("644", 8) + + def __init__(self, root_path): super(LooseObjectDB, self).__init__(root_path) self._hexsha_to_file = dict() @@ -133,7 +133,7 @@ def _map_loose_object(self, sha): db_path = self.db_path(self.object_path(bin_to_hex(sha))) try: return file_contents_ro_filepath(db_path, flags=self._fd_open_flags) - except OSError,e: + except OSError as e: if e.errno != ENOENT: # try again without noatime try: diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index e4fba94b3..3847c34df 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -3,11 +3,11 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains the MemoryDatabase implementation""" -from loose import LooseObjectDB -from base import ( - ObjectDBR, - ObjectDBW - ) +from gitdb.db.loose import LooseObjectDB +from gitdb.db.base import ( + ObjectDBR, + ObjectDBW +) from gitdb.base import ( OStream, @@ -19,7 +19,18 @@ UnsupportedOperation ) -from cStringIO import StringIO +from gitdb.stream import ( + ZippedStoreShaWriter, + DecompressMemMapReader, +) + +try: + from cStringIO import StringIO +except ImportError: + try: + from StringIO import StringIO + except ImportError: + from io import StringIO __all__ = ("MemoryDB", ) diff --git a/gitdb/db/pack.py b/gitdb/db/pack.py index 09f811847..eca02bbff 100644 --- a/gitdb/db/pack.py +++ b/gitdb/db/pack.py @@ -3,11 +3,11 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module containing a database to deal with packs""" -from base import ( - FileDBBase, - ObjectDBR, - CachingDB - ) +from gitdb.db.base import ( + FileDBBase, + ObjectDBR, + CachingDB +) from gitdb.util import LazyMixin @@ -19,6 +19,8 @@ from gitdb.pack import PackEntity +from functools import reduce + import os import glob @@ -104,7 +106,7 @@ def sha_iter(self): for entity in self.entities(): index = entity.index() sha_by_index = index.sha - for index in xrange(index.size()): + for index in range(index.size()): yield sha_by_index(index) # END for each index # END for each entity diff --git a/gitdb/db/ref.py b/gitdb/db/ref.py index 368ab9a61..748f7c145 100644 --- a/gitdb/db/ref.py +++ b/gitdb/db/ref.py @@ -2,9 +2,9 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from base import ( - CompoundDB, - ) +from gitdb.db.base import ( + CompoundDB, +) import os __all__ = ('ReferenceDB', ) @@ -33,7 +33,7 @@ def _update_dbs_from_ref_file(self): dbcls = self.ObjectDBCls if dbcls is None: # late import - from git import GitDB + from gitdb.db.git import GitDB dbcls = GitDB # END get db type @@ -68,7 +68,7 @@ def _update_dbs_from_ref_file(self): db.databases() # END verification self._dbs.append(db) - except Exception, e: + except Exception: # ignore invalid paths or issues pass # END for each path to add diff --git a/gitdb/exc.py b/gitdb/exc.py index 47fc80912..73f84d299 100644 --- a/gitdb/exc.py +++ b/gitdb/exc.py @@ -3,7 +3,7 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module with common exceptions""" -from util import to_hex_sha +from gitdb.util import to_hex_sha class ODBError(Exception): """All errors thrown by the object database""" diff --git a/gitdb/fun.py b/gitdb/fun.py index 9e5c44a6c..ce55438d1 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -6,17 +6,28 @@ Keeping this code separate from the beginning makes it easier to out-source it into c later, if required""" -from exc import ( +from gitdb.exc import ( BadObjectType - ) +) -from util import zlib +from gitdb.util import zlib decompressobj = zlib.decompressobj import mmap -from itertools import islice, izip +from itertools import islice + +try: + from itertools import izip +except ImportError: + izip = zip -from cStringIO import StringIO +try: + from cStringIO import StringIO +except ImportError: + try: + from StringIO import StringIO + except ImportError: + from io import StringIO # INVARIANTS OFS_DELTA = 6 diff --git a/gitdb/pack.py b/gitdb/pack.py index 4a0badccb..aea0d1e5a 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -4,31 +4,32 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains PackIndexFile and PackFile implementations""" from gitdb.exc import ( - BadObject, - UnsupportedOperation, - ParseError - ) -from util import ( - zlib, - mman, - LazyMixin, - unpack_from, - bin_to_hex, - ) + BadObject, + UnsupportedOperation, + ParseError +) -from fun import ( - create_pack_object_header, - pack_object_header_info, - is_equal_canonical_sha, - type_id_to_type_map, - write_object, - stream_copy, - chunk_size, - delta_types, - OFS_DELTA, - REF_DELTA, - msb_size - ) +from gitdb.util import ( + zlib, + mman, + LazyMixin, + unpack_from, + bin_to_hex, +) + +from gitdb.fun import ( + create_pack_object_header, + pack_object_header_info, + is_equal_canonical_sha, + type_id_to_type_map, + write_object, + stream_copy, + chunk_size, + delta_types, + OFS_DELTA, + REF_DELTA, + msb_size +) try: from _perf import PackIndexFile_sha_to_index @@ -36,22 +37,23 @@ pass # END try c module -from base import ( # Amazing ! - OInfo, - OStream, - OPackInfo, - OPackStream, - ODeltaStream, - ODeltaPackInfo, - ODeltaPackStream, - ) -from stream import ( - DecompressMemMapReader, - DeltaApplyReader, - Sha1Writer, - NullStream, - FlexibleSha1Writer - ) +from gitdb.base import ( # Amazing ! + OInfo, + OStream, + OPackInfo, + OPackStream, + ODeltaStream, + ODeltaPackInfo, + ODeltaPackStream, +) + +from gitdb.stream import ( + DecompressMemMapReader, + DeltaApplyReader, + Sha1Writer, + NullStream, + FlexibleSha1Writer +) from struct import ( pack, @@ -60,7 +62,11 @@ from binascii import crc32 -from itertools import izip +try: + from itertools import izip +except ImportError: + izip = zip + import tempfile import array import os @@ -200,7 +206,7 @@ def write(self, pack_sha, write): for t in self._objs: tmplist[ord(t[0][0])] += 1 #END prepare fanout - for i in xrange(255): + for i in range(255): v = tmplist[i] sha_write(pack('>L', v)) tmplist[i+1] += v @@ -407,7 +413,7 @@ def offsets(self): a.byteswap() return a else: - return tuple(self.offset(index) for index in xrange(self.size())) + return tuple(self.offset(index) for index in range(self.size())) # END handle version def sha_to_index(self, sha): @@ -694,7 +700,7 @@ def _iter_objects(self, as_stream): """Iterate over all objects in our index and yield their OInfo or OStream instences""" _sha = self._index.sha _object = self._object - for index in xrange(self._index.size()): + for index in range(self._index.size()): yield _object(_sha(index), as_stream, index) # END for each index diff --git a/gitdb/stream.py b/gitdb/stream.py index b21c39c9d..52b54af50 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -3,28 +3,35 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from cStringIO import StringIO +try: + from cStringIO import StringIO +except ImportError: + try: + from StringIO import StringIO + except ImportError: + from io import StringIO + import errno import mmap import os -from fun import ( - msb_size, - stream_copy, - apply_delta_data, - connect_deltas, - DeltaChunkList, - delta_types - ) - -from util import ( - allocate_memory, - LazyMixin, - make_sha, - write, - close, - zlib - ) +from gitdb.fun import ( + msb_size, + stream_copy, + apply_delta_data, + connect_deltas, + DeltaChunkList, + delta_types +) + +from gitdb.util import ( + allocate_memory, + LazyMixin, + make_sha, + write, + close, + zlib +) has_perf_mod = False try: diff --git a/gitdb/test/__init__.py b/gitdb/test/__init__.py index e84e503b6..ca104c0c5 100644 --- a/gitdb/test/__init__.py +++ b/gitdb/test/__init__.py @@ -9,7 +9,7 @@ def _init_pool(): """Assure the pool is actually threaded""" size = 2 - print "Setting ThreadPool to %i" % size + print("Setting ThreadPool to %i" % size) gitdb.util.pool.set_size(size) diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index dc89039dd..18b22ff21 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -23,7 +23,15 @@ from gitdb.typ import str_blob_type from async import IteratorReader -from cStringIO import StringIO + +try: + from cStringIO import StringIO +except ImportError: + try: + from StringIO import StringIO + except ImportError: + from io import StringIO + from struct import pack @@ -40,7 +48,7 @@ def _assert_object_writing_simple(self, db): # write a bunch of objects and query their streams and info null_objs = db.size() ni = 250 - for i in xrange(ni): + for i in range(ni): data = pack(">L", i) istream = IStream(str_blob_type, len(data), StringIO(data)) new_istream = db.store(istream) diff --git a/gitdb/test/db/test_git.py b/gitdb/test/db/test_git.py index 4894c6a79..cce2b9c09 100644 --- a/gitdb/test/db/test_git.py +++ b/gitdb/test/db/test_git.py @@ -2,7 +2,7 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from lib import * +from gitdb.test.db.lib import * from gitdb.exc import BadObject from gitdb.db import GitDB from gitdb.base import OStream, OInfo diff --git a/gitdb/test/db/test_loose.py b/gitdb/test/db/test_loose.py index e295db563..5e42b639a 100644 --- a/gitdb/test/db/test_loose.py +++ b/gitdb/test/db/test_loose.py @@ -2,7 +2,7 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from lib import * +from gitdb.test.db.lib import * from gitdb.db import LooseObjectDB from gitdb.exc import BadObject from gitdb.util import bin_to_hex diff --git a/gitdb/test/db/test_mem.py b/gitdb/test/db/test_mem.py index ac9bc34e9..9235b21d3 100644 --- a/gitdb/test/db/test_mem.py +++ b/gitdb/test/db/test_mem.py @@ -2,7 +2,7 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from lib import * +from gitdb.test.db.lib import * from gitdb.db import ( MemoryDB, LooseObjectDB diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index 0d9110a01..f5a4dcb92 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -2,7 +2,7 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from lib import * +from gitdb.test.db.lib import * from gitdb.db import PackedDB from gitdb.test.lib import fixture_path diff --git a/gitdb/test/db/test_ref.py b/gitdb/test/db/test_ref.py index 086446823..752c31de5 100644 --- a/gitdb/test/db/test_ref.py +++ b/gitdb/test/db/test_ref.py @@ -2,7 +2,7 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from lib import * +from gitdb.test.db.lib import * from gitdb.db import ReferenceDB from gitdb.util import ( diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index 685af2fad..3ac7142c1 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -16,7 +16,14 @@ import sys import random from array import array -from cStringIO import StringIO + +try: + from cStringIO import StringIO +except ImportError: + try: + from StringIO import StringIO + except ImportError: + from io import StringIO import glob import unittest @@ -109,7 +116,7 @@ def make_bytes(size_in_bytes, randomize=False): """:return: string with given size in bytes :param randomize: try to produce a very random stream""" actual_size = size_in_bytes / 4 - producer = xrange(actual_size) + producer = range(actual_size) if randomize: producer = list(producer) random.shuffle(producer) diff --git a/gitdb/test/test_base.py b/gitdb/test/test_base.py index 76b4d2709..4cca7dabe 100644 --- a/gitdb/test/test_base.py +++ b/gitdb/test/test_base.py @@ -3,7 +3,7 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Test for object db""" -from lib import ( +from gitdb.test.lib import ( TestBase, DummyStream, DeriveTest, diff --git a/gitdb/test/test_example.py b/gitdb/test/test_example.py index f45063b1e..f57cc5029 100644 --- a/gitdb/test/test_example.py +++ b/gitdb/test/test_example.py @@ -3,12 +3,18 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module with examples from the tutorial section of the docs""" -from lib import * +from gitdb.test.lib import * from gitdb import IStream from gitdb.db import LooseObjectDB from gitdb.util import pool - -from cStringIO import StringIO + +try: + from cStringIO import StringIO +except ImportError: + try: + from StringIO import StringIO + except ImportError: + from io import StringIO from async import IteratorReader diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index f28aef4d4..bcda3cfb8 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -3,12 +3,13 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Test everything about packs reading and writing""" -from lib import ( - TestBase, - with_rw_directory, - with_packs_rw, - fixture_path - ) +from gitdb.test.lib import ( + TestBase, + with_rw_directory, + with_packs_rw, + fixture_path +) + from gitdb.stream import DeltaApplyReader from gitdb.pack import ( @@ -25,7 +26,13 @@ from gitdb.fun import delta_types from gitdb.exc import UnsupportedOperation from gitdb.util import to_bin_sha -from itertools import izip, chain +from itertools import chain + +try: + from itertools import izip +except ImportError: + izip = zip + from nose import SkipTest import os @@ -57,7 +64,7 @@ def _assert_index_file(self, index, version, size): assert len(index.offsets()) == size # get all data of all objects - for oidx in xrange(index.size()): + for oidx in range(index.size()): sha = index.sha(oidx) assert oidx == index.sha_to_index(sha) diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index 8360ea36c..53aa8e21d 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -3,14 +3,14 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Test for object db""" -from lib import ( - TestBase, - DummyStream, - Sha1Writer, - make_bytes, - make_object, - fixture_path - ) +from gitdb.test.lib import ( + TestBase, + DummyStream, + Sha1Writer, + make_bytes, + make_object, + fixture_path +) from gitdb import * from gitdb.util import ( diff --git a/gitdb/test/test_util.py b/gitdb/test/test_util.py index ed69f0d1f..4672dd604 100644 --- a/gitdb/test/test_util.py +++ b/gitdb/test/test_util.py @@ -6,7 +6,7 @@ import tempfile import os -from lib import TestBase +from gitdb.test.lib import TestBase from gitdb.util import ( to_hex_sha, to_bin_sha, diff --git a/gitdb/util.py b/gitdb/util.py index b167b4d12..3dcf3d7dc 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -8,13 +8,13 @@ import sys import errno -from cStringIO import StringIO - -# in py 2.4, StringIO is only StringI, without write support. -# Hence we must use the python implementation for this -if sys.version_info[1] < 5: - from StringIO import StringIO -# END handle python 2.4 +try: + from cStringIO import StringIO +except ImportError: + try: + from StringIO import StringIO + except ImportError: + from io import StringIO try: import async.mod.zlib as zlib @@ -303,7 +303,7 @@ def open(self, write=False, stream=False): binary = getattr(os, 'O_BINARY', 0) lockmode = os.O_WRONLY | os.O_CREAT | os.O_EXCL | binary try: - fd = os.open(self._lockfilepath(), lockmode, 0600) + fd = os.open(self._lockfilepath(), lockmode, int("600", 8)) if not write: os.close(fd) else: @@ -372,7 +372,7 @@ def _end_writing(self, successful=True): # assure others can at least read the file - the tmpfile left it at rw-- # We may also write that file, on windows that boils down to a remove- # protection as well - chmod(self._filepath, 0644) + chmod(self._filepath, int("644", 8)) else: # just delete the file so far, we failed os.remove(lockfile) From 5bfa7e6cb0872c815720f7e861393125ad0855e7 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 15:45:51 -0400 Subject: [PATCH 0236/2375] Temporarily switch out async for testing This will be switched back when the pull request for Python 3 support has been merged into the central async repository. --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 978105388..c28387570 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "async"] path = gitdb/ext/async - url = https://github.com/gitpython-developers/async.git + url = https://github.com/kevin-brown/async.git [submodule "smmap"] path = gitdb/ext/smmap url = https://github.com/Byron/smmap.git From 85f2b9baf1c6a5738967f8e77d2a65a1a842bde3 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 15:48:03 -0400 Subject: [PATCH 0237/2375] Test against Python 3.4 If it works in Python 3.3, it should also work in Python 3.4. Considering it is the latest stable release, gitdb should be tested against it. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index ff263f20d..cf1d13666 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,7 @@ python: - "2.6" - "2.7" - "3.3" + - "3.4" # - "pypy" - won't work as smmap doesn't work (see smmap/.travis.yml for details) script: nosetests From b881134ec816d2a54f6e8deced8db25b4bd5baa7 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 16:10:54 -0400 Subject: [PATCH 0238/2375] Convert strings to bytes for PY3 In Python 3, the default string type is now the Python 2 unicode strings. The unicode strings cannot be converted to a byte stream, so we have to convert it before writing to the streams. --- gitdb/test/lib.py | 6 +++--- gitdb/test/test_stream.py | 9 ++++----- gitdb/test/test_util.py | 13 +++++++------ gitdb/util.py | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index 3ac7142c1..f52cf79d4 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -54,7 +54,7 @@ def wrapper(self): try: return func(self, path) except Exception: - print >> sys.stderr, "Test %s.%s failed, output is at %r" % (type(self).__name__, func.__name__, path) + sys.stderr.write("Test %s.%s failed, output is at %r\n" % (type(self).__name__, func.__name__, path)) keep = True raise finally: @@ -115,7 +115,7 @@ def copy_files_globbed(source_glob, target_dir, hard_link_ok=False): def make_bytes(size_in_bytes, randomize=False): """:return: string with given size in bytes :param randomize: try to produce a very random stream""" - actual_size = size_in_bytes / 4 + actual_size = size_in_bytes // 4 producer = range(actual_size) if randomize: producer = list(producer) @@ -127,7 +127,7 @@ def make_bytes(size_in_bytes, randomize=False): def make_object(type, data): """:return: bytes resembling an uncompressed object""" odata = "blob %i\0" % len(data) - return odata + data + return odata.encode("ascii") + data def make_memory_file(size_in_bytes, randomize=False): """:return: tuple(size_of_stream, stream) diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index 53aa8e21d..f6eb371bd 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -3,6 +3,7 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Test for object db""" + from gitdb.test.lib import ( TestBase, DummyStream, @@ -16,20 +17,18 @@ from gitdb.util import ( NULL_HEX_SHA, hex_to_bin - ) +) from gitdb.util import zlib from gitdb.typ import ( str_blob_type - ) +) import time import tempfile import os - - class TestStream(TestBase): """Test stream classes""" @@ -45,7 +44,7 @@ def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): assert len(cdata) > ns-1, "Data must be larger than %i, was %i" % (ns, len(cdata)) # read in small steps - ss = len(cdata) / ns + ss = len(cdata) // ns for i in range(ns): data = stream.read(ss) chunk = cdata[i*ss:(i+1)*ss] diff --git a/gitdb/test/test_util.py b/gitdb/test/test_util.py index 4672dd604..ec9a86ce7 100644 --- a/gitdb/test/test_util.py +++ b/gitdb/test/test_util.py @@ -5,6 +5,7 @@ """Test for object db""" import tempfile import os +import sys from gitdb.test.lib import TestBase from gitdb.util import ( @@ -19,14 +20,14 @@ class TestUtils(TestBase): def test_basics(self): assert to_hex_sha(NULL_HEX_SHA) == NULL_HEX_SHA assert len(to_bin_sha(NULL_HEX_SHA)) == 20 - assert to_hex_sha(to_bin_sha(NULL_HEX_SHA)) == NULL_HEX_SHA + assert to_hex_sha(to_bin_sha(NULL_HEX_SHA)) == NULL_HEX_SHA.encode("ascii") def _cmp_contents(self, file_path, data): # raise if data from file at file_path # does not match data string fp = open(file_path, "rb") try: - assert fp.read() == data + assert fp.read() == data.encode("ascii") finally: fp.close() @@ -35,7 +36,7 @@ def test_lockedfd(self): orig_data = "hello" new_data = "world" my_file_fp = open(my_file, "wb") - my_file_fp.write(orig_data) + my_file_fp.write(orig_data.encode("ascii")) my_file_fp.close() try: @@ -53,7 +54,7 @@ def test_lockedfd(self): assert os.path.isfile(lockfilepath) # write data and fail - os.write(wfd, new_data) + os.write(wfd, new_data.encode("ascii")) lfd.rollback() assert lfd._fd is None self._cmp_contents(my_file, orig_data) @@ -66,7 +67,7 @@ def test_lockedfd(self): # test reading lfd = LockedFD(my_file) rfd = lfd.open(write=False) - assert os.read(rfd, len(orig_data)) == orig_data + assert os.read(rfd, len(orig_data)) == orig_data.encode("ascii") assert os.path.isfile(lockfilepath) # deletion rolls back @@ -83,7 +84,7 @@ def test_lockedfd(self): # another one fails self.failUnlessRaises(IOError, olfd.open) - wfdstream.write(new_data) + wfdstream.write(new_data.encode("ascii")) lfd.commit() assert not os.path.isfile(lockfilepath) self._cmp_contents(my_file, new_data) diff --git a/gitdb/util.py b/gitdb/util.py index 3dcf3d7dc..5ea26d5bd 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -327,7 +327,7 @@ def open(self, write=False, stream=False): if stream: # need delayed import - from stream import FDStream + from gitdb.stream import FDStream return FDStream(self._fd) else: return self._fd From 01e40b5e02e90ccac06e3b0ec0adf1f8f4e48ebd Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 17:29:58 -0400 Subject: [PATCH 0239/2375] Use memoryview instead of buffer This uses memoryview by default, which is supported in Python 3 and Python 2.7, but not Python 2.6, and falls back to the old `buffer` type in Python 2.6 and when the memoryview does not support the type, such as when mmap instaces are passed in. --- gitdb/stream.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gitdb/stream.py b/gitdb/stream.py index 52b54af50..a099eeba0 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -270,7 +270,10 @@ def read(self, size=-1): # END adjust winsize # takes a slice, but doesn't copy the data, it says ... - indata = buffer(self._m, self._cws, self._cwe - self._cws) + try: + indata = memoryview(self._m)[self._cws:self._cwe].tobytes() + except (NameError, TypeError): + indata = buffer(self._m, self._cws, self._cwe - self._cws) # get the actual window end to be sure we don't use it for computations self._cwe = self._cws + len(indata) From 0269405121d7ef065f7008c9c033e95e734f029a Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 18:20:48 -0400 Subject: [PATCH 0240/2375] Better handling of bytes This adds a `byte_ord` version of `ord` which will let `bytes` safely pass through in Python 3. `cmp` was also swapped out as it has been dropped in Python 3. --- gitdb/fun.py | 10 +++++----- gitdb/pack.py | 26 ++++++++++++++------------ gitdb/util.py | 15 ++++++++++++++- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/gitdb/fun.py b/gitdb/fun.py index ce55438d1..8f2d46342 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -10,7 +10,7 @@ BadObjectType ) -from gitdb.util import zlib +from gitdb.util import byte_ord, zlib decompressobj = zlib.decompressobj import mmap @@ -411,13 +411,13 @@ def pack_object_header_info(data): The type_id should be interpreted according to the ``type_id_to_type_map`` map The byte-offset specifies the start of the actual zlib compressed datastream :param m: random-access memory, like a string or memory map""" - c = ord(data[0]) # first byte + c = byte_ord(data[0]) # first byte i = 1 # next char to read type_id = (c >> 4) & 7 # numeric type size = c & 15 # starting size s = 4 # starting bit-shift size while c & 0x80: - c = ord(data[i]) + c = byte_ord(data[i]) i += 1 size += (c & 0x7f) << s s += 7 @@ -668,12 +668,12 @@ def is_equal_canonical_sha(canonical_length, match, sha1): hence the comparison will only use the last 4 bytes for uneven canonical representations :param match: less than 20 byte sha :param sha1: 20 byte sha""" - binary_length = canonical_length/2 + binary_length = canonical_length // 2 if match[:binary_length] != sha1[:binary_length]: return False if canonical_length - binary_length and \ - (ord(match[-1]) ^ ord(sha1[len(match)-1])) & 0xf0: + (byte_ord(match[-1]) ^ byte_ord(sha1[len(match)-1])) & 0xf0: return False # END handle uneven canonnical length return True diff --git a/gitdb/pack.py b/gitdb/pack.py index aea0d1e5a..4a9ee9ffa 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -15,6 +15,7 @@ LazyMixin, unpack_from, bin_to_hex, + byte_ord, ) from gitdb.fun import ( @@ -421,7 +422,7 @@ def sha_to_index(self, sha): :return: index usable with the ``offset`` or ``entry`` method, or None if the sha was not found in this pack index :param sha: 20 byte sha to lookup""" - first_byte = ord(sha[0]) + first_byte = byte_ord(sha[0]) get_sha = self.sha lo = 0 # lower index, the left bound of the bisection if first_byte != 0: @@ -430,11 +431,11 @@ def sha_to_index(self, sha): # bisect until we have the sha while lo < hi: - mid = (lo + hi) / 2 - c = cmp(sha, get_sha(mid)) - if c < 0: + mid = (lo + hi) // 2 + mid_sha = get_sha(mid) + if sha < mid_sha: hi = mid - elif not c: + elif sha == mid_sha: return mid else: lo = mid + 1 @@ -453,7 +454,8 @@ def partial_sha_to_index(self, partial_bin_sha, canonical_length): if len(partial_bin_sha) < 2: raise ValueError("Require at least 2 bytes of partial sha") - first_byte = ord(partial_bin_sha[0]) + first_byte = byte_ord(partial_bin_sha[0]) + get_sha = self.sha lo = 0 # lower index, the left bound of the bisection if first_byte != 0: @@ -461,15 +463,15 @@ def partial_sha_to_index(self, partial_bin_sha, canonical_length): hi = self._fanout_table[first_byte] # the upper, right bound of the bisection # fill the partial to full 20 bytes - filled_sha = partial_bin_sha + '\0'*(20 - len(partial_bin_sha)) + filled_sha = partial_bin_sha + '\0'.encode("ascii") * (20 - len(partial_bin_sha)) # find lowest while lo < hi: - mid = (lo + hi) / 2 - c = cmp(filled_sha, get_sha(mid)) - if c < 0: + mid = (lo + hi) // 2 + mid_sha = get_sha(mid) + if filled_sha < mid_sha: hi = mid - elif not c: + elif filled_sha == mid_sha: # perfect match lo = mid break @@ -482,7 +484,7 @@ def partial_sha_to_index(self, partial_bin_sha, canonical_length): cur_sha = get_sha(lo) if is_equal_canonical_sha(canonical_length, partial_bin_sha, cur_sha): next_sha = None - if lo+1 < self.size(): + if lo + 1 < self.size(): next_sha = get_sha(lo+1) if next_sha and next_sha == cur_sha: raise AmbiguousObjectName(partial_bin_sha) diff --git a/gitdb/util.py b/gitdb/util.py index 5ea26d5bd..ed2dc3723 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -118,14 +118,27 @@ def __getitem__(self, i): def __getslice__(self, start, end): return self.getvalue()[start:end] +def byte_ord(b): + """ + Return the integer representation of the byte string. This supports Python + 3 byte arrays as well as standard strings. + """ + try: + return ord(b) + except TypeError: + return b + #} END compatibility stuff ... #{ Routines -def make_sha(source=''): +def make_sha(source=None): """A python2.4 workaround for the sha/hashlib module fiasco **Note** From the dulwich project """ + if source is None: + source = "".encode("ascii") + try: return hashlib.sha1(source) except NameError: From d8405ee00bfc1ebdae7c41b45f8c374902a3d2b4 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 19:55:00 -0400 Subject: [PATCH 0241/2375] More bytes handling --- gitdb/db/base.py | 10 ++++++++++ gitdb/fun.py | 2 +- gitdb/pack.py | 6 +++++- gitdb/stream.py | 4 ++-- gitdb/test/db/test_ref.py | 2 +- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/gitdb/db/base.py b/gitdb/db/base.py index 85df324f7..aa7a7ee30 100644 --- a/gitdb/db/base.py +++ b/gitdb/db/base.py @@ -22,6 +22,8 @@ from itertools import chain from functools import reduce +import sys + __all__ = ('ObjectDBR', 'ObjectDBW', 'FileDBBase', 'CompoundDB', 'CachingDB') @@ -176,6 +178,14 @@ def db_path(self, rela_path): """ :return: the given relative path relative to our database root, allowing to pontentially access datafiles""" + if sys.version_info[0] == 3: + text_type = str + else: + text_type = basestring + + if not isinstance(rela_path, text_type): + rela_path = rela_path.decode("utf-8") + return join(self._root_path, rela_path) #} END interface diff --git a/gitdb/fun.py b/gitdb/fun.py index 8f2d46342..9baeac3ec 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -402,7 +402,7 @@ def loose_object_header_info(m): :param m: memory map from which to read the compressed object data""" decompress_size = 8192 # is used in cgit as well hdr = decompressobj().decompress(m, decompress_size) - type_name, size = hdr[:hdr.find("\0")].split(" ") + type_name, size = hdr[:hdr.find("\0".encode("ascii"))].split(" ".encode("ascii")) return type_name, int(size) def pack_object_header_info(data): diff --git a/gitdb/pack.py b/gitdb/pack.py index 4a9ee9ffa..ad5eccb8b 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -121,7 +121,11 @@ def pack_object_at(cursor, offset, as_stream): abs_data_offset = offset + total_rela_offset if as_stream: - stream = DecompressMemMapReader(buffer(data, total_rela_offset), False, uncomp_size) + try: + buff = memoryview(data)[total_rela_offset:].tobytes() + except (NameError, TypeError): + buff = buffer(data, total_rela_offset) + stream = DecompressMemMapReader(buff, False, uncomp_size) if delta_info is None: return abs_data_offset, OPackStream(offset, type_id, uncomp_size, stream) else: diff --git a/gitdb/stream.py b/gitdb/stream.py index a099eeba0..75993db51 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -105,8 +105,8 @@ def _parse_header_info(self): maxb = 512 # should really be enough, cgit uses 8192 I believe self._s = maxb hdr = self.read(maxb) - hdrend = hdr.find("\0") - type, size = hdr[:hdrend].split(" ") + hdrend = hdr.find("\0".encode("ascii")) + type, size = hdr[:hdrend].split(" ".encode("ascii")) size = int(size) self._s = size diff --git a/gitdb/test/db/test_ref.py b/gitdb/test/db/test_ref.py index 752c31de5..e303fe2f8 100644 --- a/gitdb/test/db/test_ref.py +++ b/gitdb/test/db/test_ref.py @@ -19,7 +19,7 @@ def make_alt_file(self, alt_path, alt_list): The list can be empty""" alt_file = open(alt_path, "wb") for alt in alt_list: - alt_file.write(alt + "\n") + alt_file.write(alt.encode("utf-8") + "\n".encode("ascii")) alt_file.close() @with_rw_directory From f0b3e7bcc5278208294f40aa580ccb378ed1c165 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 20:14:24 -0400 Subject: [PATCH 0242/2375] Bytes for everyone! --- gitdb/db/loose.py | 8 ++++---- gitdb/stream.py | 2 +- gitdb/test/db/test_ref.py | 3 +-- gitdb/test/test_stream.py | 4 ++-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index ac1b9d1d6..656841651 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -16,10 +16,10 @@ ) from gitdb.stream import ( - DecompressMemMapReader, - FDCompressedSha1Writer, - FDStream, - Sha1Writer + DecompressMemMapReader, + FDCompressedSha1Writer, + FDStream, + Sha1Writer ) from gitdb.base import ( diff --git a/gitdb/stream.py b/gitdb/stream.py index 75993db51..1bd7fe2b2 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -551,7 +551,7 @@ def __init__(self): def write(self, data): """:raise IOError: If not all bytes could be written - :return: lenght of incoming data""" + :return: length of incoming data""" self.sha1.update(data) return len(data) diff --git a/gitdb/test/db/test_ref.py b/gitdb/test/db/test_ref.py index e303fe2f8..a1387ee26 100644 --- a/gitdb/test/db/test_ref.py +++ b/gitdb/test/db/test_ref.py @@ -24,7 +24,7 @@ def make_alt_file(self, alt_path, alt_list): @with_rw_directory def test_writing(self, path): - NULL_BIN_SHA = '\0' * 20 + NULL_BIN_SHA = '\0'.encode("ascii") * 20 alt_path = os.path.join(path, 'alternates') rdb = ReferenceDB(alt_path) @@ -35,7 +35,6 @@ def test_writing(self, path): # try empty, non-existing assert not rdb.has_object(NULL_BIN_SHA) - # setup alternate file # add two, one is invalid own_repo_path = fixture_path('../../../.git/objects') # use own repo diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index f6eb371bd..f409f1788 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -111,13 +111,13 @@ def test_decompress_reader(self): def test_sha_writer(self): writer = Sha1Writer() - assert 2 == writer.write("hi") + assert 2 == writer.write("hi".encode("ascii")) assert len(writer.sha(as_hex=1)) == 40 assert len(writer.sha(as_hex=0)) == 20 # make sure it does something ;) prev_sha = writer.sha() - writer.write("hi again") + writer.write("hi again".encode("ascii")) assert writer.sha() != prev_sha def test_compressed_writer(self): From a19a169ffd81e21f472dee8a9a38ac1c9fab9bd7 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 21:04:47 -0400 Subject: [PATCH 0243/2375] Can't compare memoryview instances, convert to bytes --- gitdb/pack.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gitdb/pack.py b/gitdb/pack.py index ad5eccb8b..d8f32c1c2 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -118,7 +118,6 @@ def pack_object_at(cursor, offset, as_stream): # assume its a base object total_rela_offset = data_rela_offset # END handle type id - abs_data_offset = offset + total_rela_offset if as_stream: try: @@ -129,6 +128,8 @@ def pack_object_at(cursor, offset, as_stream): if delta_info is None: return abs_data_offset, OPackStream(offset, type_id, uncomp_size, stream) else: + if hasattr(delta_info, "tobytes"): + delta_info = delta_info.tobytes() return abs_data_offset, ODeltaPackStream(offset, type_id, uncomp_size, delta_info, stream) else: if delta_info is None: From 087803ee30456c4942d9c18d82c1d686eb081a27 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 21:49:51 -0400 Subject: [PATCH 0244/2375] Making a bit of progress... This changes the internals to use BytesIO over StringIO, which fixed a few of the failing tests in Python 3. We are only importing from `io` now, instead of the entire chain, as this is available in Python 2.6+. --- gitdb/db/mem.py | 8 +------- gitdb/fun.py | 10 ++-------- gitdb/stream.py | 26 ++++++++++---------------- gitdb/test/db/lib.py | 10 ++-------- gitdb/test/lib.py | 8 +------- gitdb/test/test_example.py | 8 +------- gitdb/test/test_stream.py | 4 ++-- gitdb/util.py | 8 +------- 8 files changed, 20 insertions(+), 62 deletions(-) diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index 3847c34df..1a2378f08 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -24,13 +24,7 @@ DecompressMemMapReader, ) -try: - from cStringIO import StringIO -except ImportError: - try: - from StringIO import StringIO - except ImportError: - from io import StringIO +from io import StringIO __all__ = ("MemoryDB", ) diff --git a/gitdb/fun.py b/gitdb/fun.py index 9baeac3ec..1d835ab35 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -21,13 +21,7 @@ except ImportError: izip = zip -try: - from cStringIO import StringIO -except ImportError: - try: - from StringIO import StringIO - except ImportError: - from io import StringIO +from io import StringIO # INVARIANTS OFS_DELTA = 6 @@ -453,7 +447,7 @@ def msb_size(data, offset=0): l = len(data) hit_msb = False while i < l: - c = ord(data[i+offset]) + c = byte_ord(data[i+offset]) size |= (c & 0x7f) << i*7 i += 1 if not c & 0x80: diff --git a/gitdb/stream.py b/gitdb/stream.py index 1bd7fe2b2..9b451506e 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -3,13 +3,7 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -try: - from cStringIO import StringIO -except ImportError: - try: - from StringIO import StringIO - except ImportError: - from io import StringIO +from io import BytesIO, StringIO import errno import mmap @@ -106,20 +100,20 @@ def _parse_header_info(self): self._s = maxb hdr = self.read(maxb) hdrend = hdr.find("\0".encode("ascii")) - type, size = hdr[:hdrend].split(" ".encode("ascii")) + typ, size = hdr[:hdrend].split(" ".encode("ascii")) size = int(size) self._s = size # adjust internal state to match actual header length that we ignore # The buffer will be depleted first on future reads self._br = 0 - hdrend += 1 # count terminating \0 - self._buf = StringIO(hdr[hdrend:]) + hdrend += 1 + self._buf = BytesIO(hdr[hdrend:]) self._buflen = len(hdr) - hdrend self._phi = True - return type, size + return typ.decode("ascii"), size #{ Interface @@ -133,8 +127,8 @@ def new(self, m, close_on_deletion=False): :param close_on_deletion: if True, the memory map will be closed once we are being deleted""" inst = DecompressMemMapReader(m, close_on_deletion, 0) - type, size = inst._parse_header_info() - return type, size, inst + typ, size = inst._parse_header_info() + return typ, size, inst def data(self): """:return: random access compatible data we are working on""" @@ -211,14 +205,14 @@ def read(self, size=-1): # END clamp size if size == 0: - return str() + return bytes() # END handle depletion # deplete the buffer, then just continue using the decompress object # which has an own buffer. We just need this to transparently parse the # header from the zlib stream - dat = str() + dat = bytes() if self._buf: if self._buflen >= size: # have enough data @@ -588,7 +582,7 @@ class ZippedStoreShaWriter(Sha1Writer): __slots__ = ('buf', 'zip') def __init__(self): Sha1Writer.__init__(self) - self.buf = StringIO() + self.buf = BytesIO() self.zip = zlib.compressobj(zlib.Z_BEST_SPEED) def __getattr__(self, attr): diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index 18b22ff21..15fbf3fc3 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -24,13 +24,7 @@ from async import IteratorReader -try: - from cStringIO import StringIO -except ImportError: - try: - from StringIO import StringIO - except ImportError: - from io import StringIO +from io import StringIO from struct import pack @@ -41,7 +35,7 @@ class TestDBBase(TestBase): """Base class providing testing routines on databases""" # data - two_lines = "1234\nhello world" + two_lines = "1234\nhello world".encode("ascii") all_data = (two_lines, ) def _assert_object_writing_simple(self, db): diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index f52cf79d4..75342f173 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -17,13 +17,7 @@ import random from array import array -try: - from cStringIO import StringIO -except ImportError: - try: - from StringIO import StringIO - except ImportError: - from io import StringIO +from io import StringIO import glob import unittest diff --git a/gitdb/test/test_example.py b/gitdb/test/test_example.py index f57cc5029..c714f107f 100644 --- a/gitdb/test/test_example.py +++ b/gitdb/test/test_example.py @@ -8,13 +8,7 @@ from gitdb.db import LooseObjectDB from gitdb.util import pool -try: - from cStringIO import StringIO -except ImportError: - try: - from StringIO import StringIO - except ImportError: - from io import StringIO +from io import StringIO from async import IteratorReader diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index f409f1788..92755d9aa 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -82,9 +82,9 @@ def test_decompress_reader(self): if with_size: # need object data zdata = zlib.compress(make_object(str_blob_type, cdata)) - type, size, reader = DecompressMemMapReader.new(zdata, close_on_deletion) + typ, size, reader = DecompressMemMapReader.new(zdata, close_on_deletion) assert size == len(cdata) - assert type == str_blob_type + assert typ == str_blob_type # even if we don't set the size, it will be set automatically on first read test_reader = DecompressMemMapReader(zdata, close_on_deletion=False) diff --git a/gitdb/util.py b/gitdb/util.py index ed2dc3723..30c7008f4 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -8,13 +8,7 @@ import sys import errno -try: - from cStringIO import StringIO -except ImportError: - try: - from StringIO import StringIO - except ImportError: - from io import StringIO +from io import StringIO try: import async.mod.zlib as zlib From 0cf09d3310cba7f33b9ebc9badf61ab721d12857 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 13 Jul 2014 22:15:09 -0400 Subject: [PATCH 0245/2375] Fix Python 2 failures --- gitdb/db/loose.py | 4 ++-- gitdb/db/mem.py | 4 ++-- gitdb/fun.py | 2 +- gitdb/test/db/lib.py | 11 ++++++----- gitdb/test/test_example.py | 6 +++--- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index 656841651..1b8fe643c 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -161,8 +161,8 @@ def set_ostream(self, stream): def info(self, sha): m = self._map_loose_object(sha) try: - type, size = loose_object_header_info(m) - return OInfo(sha, type, size) + typ, size = loose_object_header_info(m) + return OInfo(sha, typ, size) finally: m.close() # END assure release of system resources diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index 1a2378f08..efd85af27 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -24,7 +24,7 @@ DecompressMemMapReader, ) -from io import StringIO +from io import BytesIO __all__ = ("MemoryDB", ) @@ -104,7 +104,7 @@ def stream_copy(self, sha_iter, odb): ostream = self.stream(sha) # compressed data including header - sio = StringIO(ostream.stream.data()) + sio = BytesIO(ostream.stream.data()) istream = IStream(ostream.type, ostream.size, sio, sha) odb.store(istream) diff --git a/gitdb/fun.py b/gitdb/fun.py index 1d835ab35..69e9826d1 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -397,7 +397,7 @@ def loose_object_header_info(m): decompress_size = 8192 # is used in cgit as well hdr = decompressobj().decompress(m, decompress_size) type_name, size = hdr[:hdr.find("\0".encode("ascii"))].split(" ".encode("ascii")) - return type_name, int(size) + return type_name.decode("ascii"), int(size) def pack_object_header_info(data): """ diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index 15fbf3fc3..a6cdbbe65 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -24,7 +24,7 @@ from async import IteratorReader -from io import StringIO +from io import BytesIO from struct import pack @@ -44,7 +44,7 @@ def _assert_object_writing_simple(self, db): ni = 250 for i in range(ni): data = pack(">L", i) - istream = IStream(str_blob_type, len(data), StringIO(data)) + istream = IStream(str_blob_type, len(data), BytesIO(data)) new_istream = db.store(istream) assert new_istream is istream assert db.has_object(istream.binsha) @@ -82,7 +82,7 @@ def _assert_object_writing(self, db): prev_ostream = db.set_ostream(ostream) assert type(prev_ostream) in ostreams or prev_ostream in ostreams - istream = IStream(str_blob_type, len(data), StringIO(data)) + istream = IStream(str_blob_type, len(data), BytesIO(data)) # store returns same istream instance, with new sha set my_istream = db.store(istream) @@ -132,8 +132,9 @@ def _assert_object_writing_async(self, db): ni = 5000 def istream_generator(offset=0, ni=ni): for data_src in xrange(ni): - data = str(data_src + offset) - yield IStream(str_blob_type, len(data), StringIO(data)) + print(type(data_src), type(offset)) + data = bytes(data_src + offset) + yield IStream(str_blob_type, len(data), BytesIO(data)) # END for each item # END generator utility diff --git a/gitdb/test/test_example.py b/gitdb/test/test_example.py index c714f107f..c644b8849 100644 --- a/gitdb/test/test_example.py +++ b/gitdb/test/test_example.py @@ -8,7 +8,7 @@ from gitdb.db import LooseObjectDB from gitdb.util import pool -from io import StringIO +from io import BytesIO from async import IteratorReader @@ -33,8 +33,8 @@ def test_base(self): pass # END ignore exception if there are no loose objects - data = "my data" - istream = IStream("blob", len(data), StringIO(data)) + data = "my data".encode("ascii") + istream = IStream("blob", len(data), BytesIO(data)) # the object does not yet have a sha assert istream.binsha is None From 9dc111e1aa8358aa39a35d5a169335bacce53646 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 14 Jul 2014 13:01:54 +0200 Subject: [PATCH 0246/2375] Added sublime-text project Suitable for everyone thanks to relative paths --- .gitignore | 2 + etc/sublime-text/gitdb.sublime-project | 54 ++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 etc/sublime-text/gitdb.sublime-project diff --git a/.gitignore b/.gitignore index 1e097f6f8..c6247dbb0 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ dist/ *.pyc *.o *.so +.noseids +*.sublime-workspace \ No newline at end of file diff --git a/etc/sublime-text/gitdb.sublime-project b/etc/sublime-text/gitdb.sublime-project new file mode 100644 index 000000000..bc0e37f0a --- /dev/null +++ b/etc/sublime-text/gitdb.sublime-project @@ -0,0 +1,54 @@ +{ + "folders": + [ + // GITDB + //////// + { + "follow_symlinks": true, + "path": "../..", + "file_exclude_patterns" : [ + "*.sublime-workspace", + ".git", + ".noseids", + ".coverage" + ], + "folder_exclude_patterns" : [ + ".git", + "cover", + "gitdb/ext" + ] + }, + // SMMAP + //////// + { + "follow_symlinks": true, + "path": "../../gitdb/ext/smmap", + "file_exclude_patterns" : [ + "*.sublime-workspace", + ".git", + ".noseids", + ".coverage" + ], + "folder_exclude_patterns" : [ + ".git", + "cover", + ] + }, + // ASYNC + //////// + { + "follow_symlinks": true, + "path": "../../gitdb/ext/async", + "file_exclude_patterns" : [ + "*.sublime-workspace", + ".git", + ".noseids", + ".coverage" + ], + "folder_exclude_patterns" : [ + ".git", + "cover", + ] + }, + ] +} From 1af4b42a2354acbb53c7956d647655922658fd80 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 14 Jul 2014 13:05:41 +0200 Subject: [PATCH 0247/2375] Added sublime-text project Relative paths will make it work for everyone right away --- .gitignore | 2 ++ etc/sublime-text/smmap.sublime-project | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 etc/sublime-text/smmap.sublime-project diff --git a/.gitignore b/.gitignore index 73b0b6188..01247547d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ dist/ MANIFEST .tox *.egg-info +.noseids +*.sublime-workspace diff --git a/etc/sublime-text/smmap.sublime-project b/etc/sublime-text/smmap.sublime-project new file mode 100644 index 000000000..251ebbd28 --- /dev/null +++ b/etc/sublime-text/smmap.sublime-project @@ -0,0 +1,21 @@ +{ + "folders": + [ + // SMMAP + //////// + { + "follow_symlinks": true, + "path": "../..", + "file_exclude_patterns" : [ + "*.sublime-workspace", + ".git", + ".noseids", + ".coverage" + ], + "folder_exclude_patterns" : [ + ".git", + "cover", + ] + }, + ] +} From 0465cf327d232101b2de69d714a468b7e1a66a74 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Wed, 16 Jul 2014 20:15:31 -0400 Subject: [PATCH 0248/2375] Start up compat and encoding files There were a few things which were being reused consistently for compatibility purposes, such as the `buffer`/`memoryview` functions as well as the `izip` method which needed to be aliased for Python 3. The `buffer` function was taken from `smmap` [1] and reworked slightly to handle the optional third parameter. This also adds a compatibility file dedicated entirely to encoding issues, which seem to be the biggest problem. The main functions were taken in part from the Django project [2] and rewritten slightly because our needs are a bit more narrow. A constants file has been added to consistently handle the constants which are required for the gitdb project in the core and the tests. This is part of a greater plan to reorganize the `util.py` file included in this project. This points the async extension back at the original repository and points it to the latest commit. [1]: https://github.com/Byron/smmap/blob/1af4b42a2354acbb53c7956d647655922658fd80/smmap/util.py#L20-L26 [2]: https://github.com/django/django/blob/b8d255071ead897cf68120cd2fae7c91326ca2cc/django/utils/encoding.py --- .gitmodules | 2 +- gitdb/const.py | 5 +++++ gitdb/db/base.py | 10 ++-------- gitdb/db/loose.py | 4 +++- gitdb/ext/async | 2 +- gitdb/fun.py | 13 +++++++------ gitdb/pack.py | 18 +++++++----------- gitdb/stream.py | 24 ++++++++++++++++++------ gitdb/test/db/lib.py | 8 +++----- gitdb/util.py | 10 +++------- gitdb/utils/__init__.py | 0 gitdb/utils/compat.py | 39 +++++++++++++++++++++++++++++++++++++++ gitdb/utils/encoding.py | 35 +++++++++++++++++++++++++++++++++++ 13 files changed, 124 insertions(+), 46 deletions(-) create mode 100644 gitdb/const.py create mode 100644 gitdb/utils/__init__.py create mode 100644 gitdb/utils/compat.py create mode 100644 gitdb/utils/encoding.py diff --git a/.gitmodules b/.gitmodules index c28387570..978105388 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "async"] path = gitdb/ext/async - url = https://github.com/kevin-brown/async.git + url = https://github.com/gitpython-developers/async.git [submodule "smmap"] path = gitdb/ext/smmap url = https://github.com/Byron/smmap.git diff --git a/gitdb/const.py b/gitdb/const.py new file mode 100644 index 000000000..147f79cb9 --- /dev/null +++ b/gitdb/const.py @@ -0,0 +1,5 @@ +from gitdb.utils.encoding import force_bytes + +NULL_BYTE = force_bytes("\0") +NULL_HEX_SHA = "0" * 40 +NULL_BIN_SHA = NULL_BYTE * 20 diff --git a/gitdb/db/base.py b/gitdb/db/base.py index aa7a7ee30..53a94d249 100644 --- a/gitdb/db/base.py +++ b/gitdb/db/base.py @@ -178,15 +178,9 @@ def db_path(self, rela_path): """ :return: the given relative path relative to our database root, allowing to pontentially access datafiles""" - if sys.version_info[0] == 3: - text_type = str - else: - text_type = basestring - - if not isinstance(rela_path, text_type): - rela_path = rela_path.decode("utf-8") + from gitdb.utils.encoding import force_text - return join(self._root_path, rela_path) + return join(self._root_path, force_text(rela_path)) #} END interface diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index 1b8fe643c..f66d6275f 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -51,6 +51,8 @@ stream_copy ) +from gitdb.utils.compat import MAXSIZE + import tempfile import mmap import sys @@ -200,7 +202,7 @@ def store(self, istream): if istream.binsha is not None: # copy as much as possible, the actual uncompressed item size might # be smaller than the compressed version - stream_copy(istream.read, writer.write, sys.maxint, self.stream_chunk_size) + stream_copy(istream.read, writer.write, MAXSIZE, self.stream_chunk_size) else: # write object with header, we have to make a new one write_object(istream.type, istream.size, istream.read, writer.write, diff --git a/gitdb/ext/async b/gitdb/ext/async index 339024bfb..3f26b05c2 160000 --- a/gitdb/ext/async +++ b/gitdb/ext/async @@ -1 +1 @@ -Subproject commit 339024bfb1d0a2b091e63d7a7ea23a1c63189f5c +Subproject commit 3f26b05c2f1a079d5807ed15c01b053ee846e745 diff --git a/gitdb/fun.py b/gitdb/fun.py index 69e9826d1..2749f37d0 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -16,10 +16,7 @@ import mmap from itertools import islice -try: - from itertools import izip -except ImportError: - izip = zip +from gitdb.utils.compat import izip from io import StringIO @@ -394,10 +391,14 @@ def loose_object_header_info(m): :return: tuple(type_string, uncompressed_size_in_bytes) the type string of the object as well as its uncompressed size in bytes. :param m: memory map from which to read the compressed object data""" + from gitdb.const import NULL_BYTE + from gitdb.utils.encoding import force_text + decompress_size = 8192 # is used in cgit as well hdr = decompressobj().decompress(m, decompress_size) - type_name, size = hdr[:hdr.find("\0".encode("ascii"))].split(" ".encode("ascii")) - return type_name.decode("ascii"), int(size) + type_name, size = hdr[:hdr.find(NULL_BYTE)].split(" ".encode("ascii")) + + return force_text(type_name), int(size) def pack_object_header_info(data): """ diff --git a/gitdb/pack.py b/gitdb/pack.py index d8f32c1c2..4e83ba39d 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -63,10 +63,8 @@ from binascii import crc32 -try: - from itertools import izip -except ImportError: - izip = zip +from gitdb.const import NULL_BYTE +from gitdb.utils.compat import izip, buffer import tempfile import array @@ -90,6 +88,8 @@ def pack_object_at(cursor, offset, as_stream): :parma offset: offset in to the data at which the object information is located :param as_stream: if True, a stream object will be returned that can read the data, otherwise you receive an info object only""" + from gitdb.utils.encoding import force_bytes + data = cursor.use_region(offset).buffer() type_id, uncomp_size, data_rela_offset = pack_object_header_info(data) total_rela_offset = None # set later, actual offset until data stream begins @@ -120,16 +120,12 @@ def pack_object_at(cursor, offset, as_stream): # END handle type id abs_data_offset = offset + total_rela_offset if as_stream: - try: - buff = memoryview(data)[total_rela_offset:].tobytes() - except (NameError, TypeError): - buff = buffer(data, total_rela_offset) + buff = buffer(data, total_rela_offset) stream = DecompressMemMapReader(buff, False, uncomp_size) if delta_info is None: return abs_data_offset, OPackStream(offset, type_id, uncomp_size, stream) else: - if hasattr(delta_info, "tobytes"): - delta_info = delta_info.tobytes() + delta_info = force_bytes(delta_info) return abs_data_offset, ODeltaPackStream(offset, type_id, uncomp_size, delta_info, stream) else: if delta_info is None: @@ -468,7 +464,7 @@ def partial_sha_to_index(self, partial_bin_sha, canonical_length): hi = self._fanout_table[first_byte] # the upper, right bound of the bisection # fill the partial to full 20 bytes - filled_sha = partial_bin_sha + '\0'.encode("ascii") * (20 - len(partial_bin_sha)) + filled_sha = partial_bin_sha + NULL_BYTE * (20 - len(partial_bin_sha)) # find lowest while lo < hi: diff --git a/gitdb/stream.py b/gitdb/stream.py index 9b451506e..9e49f50e0 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -27,6 +27,10 @@ zlib ) +from gitdb.const import NULL_BYTE +from gitdb.utils.compat import buffer +from gitdb.utils.encoding import force_bytes, force_text + has_perf_mod = False try: from _perf import apply_delta as c_apply_delta @@ -99,7 +103,7 @@ def _parse_header_info(self): maxb = 512 # should really be enough, cgit uses 8192 I believe self._s = maxb hdr = self.read(maxb) - hdrend = hdr.find("\0".encode("ascii")) + hdrend = hdr.find(NULL_BYTE) typ, size = hdr[:hdrend].split(" ".encode("ascii")) size = int(size) self._s = size @@ -113,7 +117,7 @@ def _parse_header_info(self): self._phi = True - return typ.decode("ascii"), size + return force_text(typ), size #{ Interface @@ -264,10 +268,7 @@ def read(self, size=-1): # END adjust winsize # takes a slice, but doesn't copy the data, it says ... - try: - indata = memoryview(self._m)[self._cws:self._cwe].tobytes() - except (NameError, TypeError): - indata = buffer(self._m, self._cws, self._cwe - self._cws) + indata = buffer(self._m, self._cws, self._cwe - self._cws) # get the actual window end to be sure we don't use it for computations self._cwe = self._cws + len(indata) @@ -379,6 +380,7 @@ def _set_cache_too_slow_without_c(self, attr): def _set_cache_brute_(self, attr): """If we are here, we apply the actual deltas""" + from gitdb.utils.compat import buffer # TODO: There should be a special case if there is only one stream # Then the default-git algorithm should perform a tad faster, as the @@ -546,7 +548,10 @@ def __init__(self): def write(self, data): """:raise IOError: If not all bytes could be written :return: length of incoming data""" + + data = force_bytes(data) self.sha1.update(data) + return len(data) # END stream interface @@ -589,8 +594,11 @@ def __getattr__(self, attr): return getattr(self.buf, attr) def write(self, data): + data = force_bytes(data) + alen = Sha1Writer.write(self, data) self.buf.write(self.zip.compress(data)) + return alen def close(self): @@ -630,11 +638,15 @@ def __init__(self, fd): def write(self, data): """:raise IOError: If not all bytes could be written :return: lenght of incoming data""" + data = force_bytes(data) + self.sha1.update(data) cdata = self.zip.compress(data) bytes_written = write(self.fd, cdata) + if bytes_written != len(cdata): raise self.exc + return len(data) def close(self): diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index a6cdbbe65..d0028b897 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -35,7 +35,7 @@ class TestDBBase(TestBase): """Base class providing testing routines on databases""" # data - two_lines = "1234\nhello world".encode("ascii") + two_lines = "1234\nhello world" all_data = (two_lines, ) def _assert_object_writing_simple(self, db): @@ -81,8 +81,7 @@ def _assert_object_writing(self, db): prev_ostream = db.set_ostream(ostream) assert type(prev_ostream) in ostreams or prev_ostream in ostreams - - istream = IStream(str_blob_type, len(data), BytesIO(data)) + istream = IStream(str_blob_type, len(data), BytesIO(data.encode("ascii"))) # store returns same istream instance, with new sha set my_istream = db.store(istream) @@ -131,8 +130,7 @@ def _assert_object_writing_async(self, db): """Test generic object writing using asynchronous access""" ni = 5000 def istream_generator(offset=0, ni=ni): - for data_src in xrange(ni): - print(type(data_src), type(offset)) + for data_src in range(ni): data = bytes(data_src + offset) yield IStream(str_blob_type, len(data), BytesIO(data)) # END for each item diff --git a/gitdb/util.py b/gitdb/util.py index 30c7008f4..5a82c553e 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -30,10 +30,7 @@ mman = SlidingWindowMapManager() #END handle mman -try: - import hashlib -except ImportError: - import sha +import hashlib try: from struct import unpack_from @@ -84,9 +81,8 @@ def unpack_from(fmt, data, offset=0): close = os.close fsync = os.fsync -# constants -NULL_HEX_SHA = "0"*40 -NULL_BIN_SHA = "\0"*20 +# Backwards compatibility imports +from gitdb.const import NULL_BIN_SHA, NULL_HEX_SHA #} END Aliases diff --git a/gitdb/utils/__init__.py b/gitdb/utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/gitdb/utils/compat.py b/gitdb/utils/compat.py new file mode 100644 index 000000000..b9da683fa --- /dev/null +++ b/gitdb/utils/compat.py @@ -0,0 +1,39 @@ +import sys + +PY3 = sys.version_info[0] == 3 + +try: + from itertools import izip +except ImportError: + izip = zip + +try: + # Python 2 + buffer = buffer + memoryview = buffer +except NameError: + # Python 3 has no `buffer`; only `memoryview` + def buffer(obj, offset, size=None): + if size is None: + return memoryview(obj)[offset:] + else: + return memoryview(obj[offset:offset+size]) + + memoryview = memoryview + +if PY3: + MAXSIZE = sys.maxsize +else: + # It's possible to have sizeof(long) != sizeof(Py_ssize_t). + class X(object): + def __len__(self): + return 1 << 31 + try: + len(X()) + except OverflowError: + # 32-bit + MAXSIZE = int((1 << 31) - 1) + else: + # 64-bit + MAXSIZE = int((1 << 63) - 1) + del X diff --git a/gitdb/utils/encoding.py b/gitdb/utils/encoding.py new file mode 100644 index 000000000..12164e756 --- /dev/null +++ b/gitdb/utils/encoding.py @@ -0,0 +1,35 @@ +from gitdb.utils import compat + +if compat.PY3: + string_types = (str, ) + text_type = str +else: + string_types = (basestring, ) + text_type = unicode + +def force_bytes(data, encoding="utf-8"): + if isinstance(data, bytes): + return data + + if isinstance(data, compat.memoryview): + return bytes(data) + + if isinstance(data, string_types): + return data.encode(encoding) + + return data + +def force_text(data, encoding="utf-8"): + if isinstance(data, text_type): + return data + + if isinstance(data, string_types): + return data.decode(encoding) + + if not isinstance(data, bytes): + data = force_bytes(data, encoding) + + if compat.PY3: + return text_type(data, encoding) + else: + return text_type(data) From ecdae96cdb8bbde322f59fd119dab302e7797c18 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Wed, 16 Jul 2014 20:36:02 -0400 Subject: [PATCH 0249/2375] Fixed a few more encoding issues Bytes should always be returned from the streams, so the tests should be checking against byte strings instead of text strings. This also fixes the `sha_iter` as it relied on the Python 2 `iterkeys` which has been renamed to `keys` in Python 3. --- gitdb/db/loose.py | 3 ++- gitdb/db/mem.py | 5 ++++- gitdb/test/db/lib.py | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index f66d6275f..63f96352b 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -52,6 +52,7 @@ ) from gitdb.utils.compat import MAXSIZE +from gitdb.utils.encoding import force_bytes import tempfile import mmap @@ -116,7 +117,7 @@ def partial_to_complete_sha_hex(self, partial_hexsha): :raise BadObject: """ candidate = None for binsha in self.sha_iter(): - if bin_to_hex(binsha).startswith(partial_hexsha): + if bin_to_hex(binsha).startswith(force_bytes(partial_hexsha)): # it can't ever find the same object twice if candidate is not None: raise AmbiguousObjectName(partial_hexsha) diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index efd85af27..a22454685 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -86,7 +86,10 @@ def size(self): return len(self._cache) def sha_iter(self): - return self._cache.iterkeys() + try: + return self._cache.iterkeys() + except AttributeError: + return self._cache.keys() #{ Interface diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index d0028b897..38747deb2 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -21,6 +21,7 @@ from gitdb.exc import BadObject from gitdb.typ import str_blob_type +from gitdb.utils.encoding import force_bytes from async import IteratorReader @@ -97,7 +98,7 @@ def _assert_object_writing(self, db): assert info.size == len(data) ostream = db.stream(sha) - assert ostream.read() == data + assert ostream.read() == force_bytes(data) assert ostream.type == str_blob_type assert ostream.size == len(data) else: From c63dcacbfa996b1d0d81d50c359fa37e4906cfb1 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Mon, 21 Jul 2014 20:38:17 -0400 Subject: [PATCH 0250/2375] Convert types to bytes This makes it easier to deal with things internally as now everything is passed as bytes. --- gitdb/fun.py | 32 +++++++++++++++++++------------- gitdb/stream.py | 4 ++-- gitdb/typ.py | 12 +++++------- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/gitdb/fun.py b/gitdb/fun.py index 2749f37d0..6495359bc 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -17,6 +17,12 @@ from itertools import islice from gitdb.utils.compat import izip +from gitdb.typ import ( + str_blob_type, + str_commit_type, + str_tree_type, + str_tag_type, +) from io import StringIO @@ -27,23 +33,23 @@ type_id_to_type_map = { 0 : "", # EXT 1 - 1 : "commit", - 2 : "tree", - 3 : "blob", - 4 : "tag", + 1 : str_commit_type, + 2 : str_tree_type, + 3 : str_blob_type, + 4 : str_tag_type, 5 : "", # EXT 2 OFS_DELTA : "OFS_DELTA", # OFFSET DELTA REF_DELTA : "REF_DELTA" # REFERENCE DELTA } -type_to_type_id_map = dict( - commit=1, - tree=2, - blob=3, - tag=4, - OFS_DELTA=OFS_DELTA, - REF_DELTA=REF_DELTA -) +type_to_type_id_map = { + str_commit_type: 1, + str_tree_type: 2, + str_blob_type: 3, + str_tag_type: 4, + "OFS_DELTA": OFS_DELTA, + "REF_DELTA": REF_DELTA, +} # used when dealing with larger streams chunk_size = 1000 * mmap.PAGESIZE @@ -398,7 +404,7 @@ def loose_object_header_info(m): hdr = decompressobj().decompress(m, decompress_size) type_name, size = hdr[:hdr.find(NULL_BYTE)].split(" ".encode("ascii")) - return force_text(type_name), int(size) + return type_name, int(size) def pack_object_header_info(data): """ diff --git a/gitdb/stream.py b/gitdb/stream.py index 9e49f50e0..5dd38ec97 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -29,7 +29,7 @@ from gitdb.const import NULL_BYTE from gitdb.utils.compat import buffer -from gitdb.utils.encoding import force_bytes, force_text +from gitdb.utils.encoding import force_bytes has_perf_mod = False try: @@ -117,7 +117,7 @@ def _parse_header_info(self): self._phi = True - return force_text(typ), size + return typ, size #{ Interface diff --git a/gitdb/typ.py b/gitdb/typ.py index e84dd2455..edd1f2731 100644 --- a/gitdb/typ.py +++ b/gitdb/typ.py @@ -4,11 +4,9 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module containing information about types known to the database""" -#{ String types +from gitdb.utils.encoding import force_bytes -str_blob_type = "blob" -str_commit_type = "commit" -str_tree_type = "tree" -str_tag_type = "tag" - -#} END string types +str_blob_type = force_bytes("blob") +str_commit_type = force_bytes("commit") +str_tree_type = force_bytes("tree") +str_tag_type = force_bytes("tag") From fda32852a1dd6f6b0988248fb2c7921104e3ea6c Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Fri, 25 Jul 2014 21:12:33 +0200 Subject: [PATCH 0251/2375] warnings fixes --- setup.py | 2 ++ smmap/test/test_buf.py | 44 ++++++++++++----------- smmap/test/test_mman.py | 79 ++++++++++++++++++++++------------------- 3 files changed, 68 insertions(+), 57 deletions(-) diff --git a/setup.py b/setup.py index 13d2063ab..204a2a75d 100644 --- a/setup.py +++ b/setup.py @@ -52,4 +52,6 @@ "Programming Language :: Python :: 3.4", ], long_description=long_description, + tests_require=('nose', 'nosexcover'), + test_suite='nose.collector' ) diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index 15dfb8238..807d2770f 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -1,3 +1,5 @@ +from __future__ import with_statement, print_function + from .lib import TestBase, FileCreator from smmap.mman import SlidingWindowMapManager, StaticWindowMapManager @@ -17,65 +19,66 @@ static_man = StaticWindowMapManager() class TestBuf(TestBase): - + def test_basics(self): fc = FileCreator(self.k_window_test_size, "buffer_test") - + # invalid paths fail upon construction c = man_optimal.make_cursor(fc.path) self.assertRaises(ValueError, SlidingWindowMapBuffer, type(c)()) # invalid cursor self.assertRaises(ValueError, SlidingWindowMapBuffer, c, fc.size) # offset too large - + buf = SlidingWindowMapBuffer() # can create uninitailized buffers assert buf.cursor() is None - + # can call end access any time buf.end_access() buf.end_access() assert len(buf) == 0 - + # begin access can revive it, if the offset is suitable offset = 100 assert buf.begin_access(c, fc.size) == False assert buf.begin_access(c, offset) == True assert len(buf) == fc.size - offset assert buf.cursor().is_valid() - + # empty begin access keeps it valid on the same path, but alters the offset assert buf.begin_access() == True assert len(buf) == fc.size assert buf.cursor().is_valid() - + # simple access - data = open(fc.path, 'rb').read() + with open(fc.path, 'rb') as fp: + data = fp.read() assert data[offset] == buf[0] assert data[offset:offset*2] == buf[0:offset] - + # negative indices, partial slices assert buf[-1] == buf[len(buf)-1] assert buf[-10:] == buf[len(buf)-10:len(buf)] - + # end access makes its cursor invalid buf.end_access() assert not buf.cursor().is_valid() assert buf.cursor().is_associated() # but it remains associated - + # an empty begin access fixes it up again assert buf.begin_access() == True and buf.cursor().is_valid() del(buf) # ends access automatically del(c) - + assert man_optimal.num_file_handles() == 1 - + # PERFORMANCE - # blast away with rnadom access and a full mapping - we don't want to + # blast away with rnadom access and a full mapping - we don't want to # exagerate the manager's overhead, but measure the buffer overhead - # We do it once with an optimal setting, and with a worse manager which + # We do it once with an optimal setting, and with a worse manager which # will produce small mappings only ! max_num_accesses = 100 fd = os.open(fc.path, os.O_RDONLY) for item in (fc.path, fd): - for manager, man_id in ( (man_optimal, 'optimal'), + for manager, man_id in ( (man_optimal, 'optimal'), (man_worst_case, 'worst case'), (static_man, 'static optimal')): buf = SlidingWindowMapBuffer(manager.make_cursor(item)) @@ -84,7 +87,7 @@ def test_basics(self): num_accesses_left = max_num_accesses num_bytes = 0 fsize = fc.size - + st = time() buf.begin_access() while num_accesses_left: @@ -102,7 +105,7 @@ def test_basics(self): num_bytes += 1 #END handle mode # END handle num accesses - + buf.end_access() assert manager.num_file_handles() assert manager.collect() @@ -110,8 +113,9 @@ def test_basics(self): elapsed = max(time() - st, 0.001) # prevent zero division errors on windows mb = float(1000*1000) mode_str = (access_mode and "slice") or "single byte" - sys.stderr.write("%s: Made %i random %s accesses to buffer created from %s reading a total of %f mb in %f s (%f mb/s)\n" - % (man_id, max_num_accesses, mode_str, type(item), num_bytes/mb, elapsed, (num_bytes/mb)/elapsed)) + print("%s: Made %i random %s accesses to buffer created from %s reading a total of %f mb in %f s (%f mb/s)" + % (man_id, max_num_accesses, mode_str, type(item), num_bytes/mb, elapsed, (num_bytes/mb)/elapsed), + file=sys.stderr) # END handle access mode # END for each manager # END for each input diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index e0516b21c..4d1839eca 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -1,3 +1,5 @@ +from __future__ import with_statement, print_function + from .lib import TestBase, FileCreator from smmap.mman import * @@ -12,43 +14,43 @@ from copy import copy class TestMMan(TestBase): - + def test_cursor(self): fc = FileCreator(self.k_window_test_size, "cursor_test") - + man = SlidingWindowMapManager() ci = WindowCursor(man) # invalid cursor assert not ci.is_valid() assert not ci.is_associated() assert ci.size() == 0 # this is cached, so we can query it in invalid state - + cv = man.make_cursor(fc.path) assert not cv.is_valid() # no region mapped yet assert cv.is_associated()# but it know where to map it from assert cv.file_size() == fc.size assert cv.path() == fc.path - + # copy module cio = copy(cv) assert not cio.is_valid() and cio.is_associated() - + # assign method assert not ci.is_associated() ci.assign(cv) assert not ci.is_valid() and ci.is_associated() - + # unuse non-existing region is fine cv.unuse_region() cv.unuse_region() - + # destruction is fine (even multiple times) cv._destroy() WindowCursor(man)._destroy() - + def test_memory_manager(self): slide_man = SlidingWindowMapManager() static_man = StaticWindowMapManager() - + for man in (static_man, slide_man): assert man.num_file_handles() == 0 assert man.num_open_files() == 0 @@ -59,15 +61,15 @@ def test_memory_manager(self): assert man.window_size() > winsize_cmp_val assert man.mapped_memory_size() == 0 assert man.max_mapped_memory_size() > 0 - + # collection doesn't raise in 'any' mode man._collect_lru_region(0) # doesn't raise if we are within the limit man._collect_lru_region(10) - - # doesn't fail if we overallocate + + # doesn't fail if we overallocate assert man._collect_lru_region(sys.maxsize) == 0 - + # use a region, verify most basic functionality fc = FileCreator(self.k_window_test_size, "manager_test") fd = os.open(fc.path, os.O_RDONLY) @@ -77,8 +79,9 @@ def test_memory_manager(self): assert c.use_region(10, 10).is_valid() assert c.ofs_begin() == 10 assert c.size() == 10 - assert c.buffer()[:] == open(fc.path, 'rb').read(20)[10:] - + with open(fc.path, 'rb') as fp: + assert c.buffer()[:] == fp.read(20)[10:] + if isinstance(item, int): self.assertRaises(ValueError, c.path) else: @@ -87,38 +90,39 @@ def test_memory_manager(self): #END for each input os.close(fd) # END for each manager type - + def test_memman_operation(self): # test more access, force it to actually unmap regions fc = FileCreator(self.k_window_test_size, "manager_operation_test") - data = open(fc.path, 'rb').read() + with open(fc.path, 'rb') as fp: + data = fp.read() fd = os.open(fc.path, os.O_RDONLY) max_num_handles = 15 - #small_size = + #small_size = for mtype, args in ( (StaticWindowMapManager, (0, fc.size // 3, max_num_handles)), (SlidingWindowMapManager, (fc.size // 100, fc.size // 3, max_num_handles)),): for item in (fc.path, fd): assert len(data) == fc.size - + # small windows, a reasonable max memory. Not too many regions at once man = mtype(window_size=args[0], max_memory_size=args[1], max_open_handles=args[2]) c = man.make_cursor(item) - + # still empty (more about that is tested in test_memory_manager() assert man.num_open_files() == 0 assert man.mapped_memory_size() == 0 - + base_offset = 5000 # window size is 0 for static managers, hence size will be 0. We take that into consideration size = man.window_size() // 2 assert c.use_region(base_offset, size).is_valid() rr = c.region_ref() assert rr().client_count() == 2 # the manager and the cursor and us - + assert man.num_open_files() == 1 assert man.num_file_handles() == 1 assert man.mapped_memory_size() == rr().size() - + #assert c.size() == size # the cursor may overallocate in its static version assert c.ofs_begin() == base_offset assert rr().ofs_begin() == 0 # it was aligned and expanded @@ -127,9 +131,9 @@ def test_memman_operation(self): else: assert rr().size() == fc.size #END ignore static managers which dont use windows and are aligned to file boundaries - - assert c.buffer()[:] == data[base_offset:base_offset+(size or c.size())] - + + assert c.buffer()[:] == data[base_offset:base_offset+(size or c.size())] + # obtain second window, which spans the first part of the file - it is a still the same window nsize = (size or fc.size) - 10 assert c.use_region(0, nsize).is_valid() @@ -138,7 +142,7 @@ def test_memman_operation(self): assert c.size() == nsize assert c.ofs_begin() == 0 assert c.buffer()[:] == data[:nsize] - + # map some part at the end, our requested size cannot be kept overshoot = 4000 base_offset = fc.size - (size or c.size()) + overshoot @@ -156,23 +160,23 @@ def test_memman_operation(self): assert rr().ofs_begin() < c.ofs_begin() # it should have extended itself to the left assert rr().ofs_end() <= fc.size # it cannot be larger than the file assert c.buffer()[:] == data[base_offset:base_offset+(size or c.size())] - + # unising a region makes the cursor invalid c.unuse_region() assert not c.is_valid() if man.window_size(): - # but doesn't change anything regarding the handle count - we cache it and only + # but doesn't change anything regarding the handle count - we cache it and only # remove mapped regions if we have to assert man.num_file_handles() == 2 #END ignore this for static managers - + # iterate through the windows, verify data contents # this will trigger map collection after a while max_random_accesses = 5000 num_random_accesses = max_random_accesses memory_read = 0 st = time() - + # cache everything to get some more performance includes_ofs = c.includes_ofs max_mapped_memory_size = man.max_mapped_memory_size() @@ -182,7 +186,7 @@ def test_memman_operation(self): while num_random_accesses: num_random_accesses -= 1 base_offset = randint(0, fc.size - 1) - + # precondition if man.window_size(): assert max_mapped_memory_size >= mapped_memory_size() @@ -192,19 +196,20 @@ def test_memman_operation(self): csize = c.size() assert c.buffer()[:] == data[base_offset:base_offset+csize] memory_read += csize - + assert includes_ofs(base_offset) assert includes_ofs(base_offset+csize-1) assert not includes_ofs(base_offset+csize) # END while we should do an access elapsed = max(time() - st, 0.001) # prevent zero divison errors on windows mb = float(1000 * 1000) - sys.stderr.write("%s: Read %i mb of memory with %i random on cursor initialized with %s accesses in %fs (%f mb/s)\n" - % (mtype, memory_read/mb, max_random_accesses, type(item), elapsed, (memory_read/mb)/elapsed)) - + print("%s: Read %i mb of memory with %i random on cursor initialized with %s accesses in %fs (%f mb/s)\n" + % (mtype, memory_read/mb, max_random_accesses, type(item), elapsed, (memory_read/mb)/elapsed), + file=sys.stderr) + # an offset as large as the size doesn't work ! assert not c.use_region(fc.size, size).is_valid() - + # collection - it should be able to collect all assert man.num_file_handles() assert man.collect() From cc32b0a99744b07bcacf3b027af597a4bdd10b85 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 10 Sep 2014 09:51:54 +0300 Subject: [PATCH 0252/2375] Setup: Fix invalid syntax --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 62bc6d007..07f810be8 100755 --- a/setup.py +++ b/setup.py @@ -21,7 +21,7 @@ def run(self): try: build_ext.run(self) except Exception: - print "Ignored failure when building extensions, pure python modules will be used instead" + print("Ignored failure when building extensions, pure python modules will be used instead") # END ignore errors From a9f7f7bc5a2819924992dcb536c8e72399ae6f16 Mon Sep 17 00:00:00 2001 From: Matt Hickford Date: Mon, 6 Oct 2014 17:35:19 +0100 Subject: [PATCH 0253/2375] Add installation instructions to readme Also, fix broken badge link. --- README.rst | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 0fc0534e6..f97d5c31e 100644 --- a/README.rst +++ b/README.rst @@ -6,6 +6,20 @@ aims at allowing full access to loose objects as well as packs with performance and scalability in mind. It operates exclusively on streams, allowing to operate on large objects with a small memory footprint. +Installation +============ + +.. image:: https://pypip.in/version/gitdb/badge.svg + :target: https://pypi.python.org/pypi/gitdb/ + :alt: Latest Version +.. image:: https://pypip.in/py_versions/gitdb/badge.svg + :target: https://pypi.python.org/pypi/gitdb/ + :alt: Supported Python versions + +From `PyPI `_ + + pip install gitdb + REQUIREMENTS ============ @@ -33,8 +47,9 @@ http://groups.google.com/group/git-python ISSUE TRACKER ============= -.. image:: https://travis-ci.org/gitpython-developers/gitdb.svg?branch=master :target: https://travis-ci.org/gitpython-developers/gitdb - +.. image:: https://travis-ci.org/gitpython-developers/gitdb.svg?branch=master + :target: https://travis-ci.org/gitpython-developers/gitdb + https://github.com/gitpython-developers/gitdb/issues LICENSE From 0e0b7e253f7635af9e24a15f4393481495565667 Mon Sep 17 00:00:00 2001 From: Matt Hickford Date: Mon, 6 Oct 2014 17:39:18 +0100 Subject: [PATCH 0254/2375] Clarify which Python versions are supported --- setup.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 07f810be8..6dd4fa4b4 100755 --- a/setup.py +++ b/setup.py @@ -90,5 +90,13 @@ def get_data_files(self): zip_safe=False, requires=('async (>=0.6.1)', 'smmap (>=0.8.0)'), install_requires=('async >= 0.6.1', 'smmap >= 0.8.0'), - long_description = """GitDB is a pure-Python git object database""" + long_description = """GitDB is a pure-Python git object database""", + # See https://pypi.python.org/pypi?%3Aaction=list_classifiers + classifiers=[ + # Specify the Python versions you support here. In particular, ensure + # that you indicate whether you support Python 2, Python 3 or both. + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + ], ) From ef59e98f74eeb00373b02f7a2b8bed1943924de9 Mon Sep 17 00:00:00 2001 From: David Schryer Date: Wed, 5 Nov 2014 10:48:33 +0200 Subject: [PATCH 0255/2375] Minor change to begin Python3 compatibility support. --- gitdb/db/ref.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitdb/db/ref.py b/gitdb/db/ref.py index 60004a77a..0a28b9efb 100644 --- a/gitdb/db/ref.py +++ b/gitdb/db/ref.py @@ -68,7 +68,7 @@ def _update_dbs_from_ref_file(self): db.databases() # END verification self._dbs.append(db) - except Exception, e: + except Exception as e: # ignore invalid paths or issues pass # END for each path to add From 977e666e2489ddc669a06481bb5192b59854da8d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 12 Nov 2014 20:30:47 +0100 Subject: [PATCH 0256/2375] Initial improvements to get rid of the performance regression in py3. Byte buffer concatenations are considerably slower here for some reason. Also there was no need for the memorybuffer. --- .travis.yml | 2 ++ README.md | 7 +------ doc/source/changes.rst | 6 +++++- smmap/buf.py | 10 +++++----- smmap/mman.py | 29 ++++++++++++++--------------- smmap/util.py | 5 +++-- 6 files changed, 30 insertions(+), 29 deletions(-) diff --git a/.travis.yml b/.travis.yml index 47cb41170..1f7872c86 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ language: python python: + - 2.4 + - 2.5 - 2.6 - 2.7 - 3.3 diff --git a/README.md b/README.md index c056ed1c1..6d2353820 100644 --- a/README.md +++ b/README.md @@ -25,19 +25,15 @@ For performance critical 64 bit applications, a simplified version of memory map ## Prerequisites -* Python 2.4, 2.5 or 2.6 +* Python 2.4, 2.5, 2.6, 2.7 or 3.3 * OSX, Windows or Linux The package was tested on all of the previously mentioned configurations. - - ## Limitations * The memory access is read-only by design. * In python below 2.6, memory maps will be created in compatibility mode which works, but creates inefficient memory mappings as they always start at offset 0. -* It wasn't tested on python 2.7 and 3.x. - ## Installing smmap @@ -80,7 +76,6 @@ Issues can be filed on github: * https://github.com/Byron/smmap/issues - ## License Information *smmap* is licensed under the New BSD License. diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 03148fb31..6174008e9 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,12 +2,16 @@ Changelog ######### +********** +v0.8.2 +********** +- Cleaned up code and assured it works sufficiently well with python 3 + ********** v0.8.1 ********** - A single bugfix - ********** v0.8.0 ********** diff --git a/smmap/buf.py b/smmap/buf.py index 2f27d4d01..4cde6dde4 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -79,18 +79,18 @@ def __getslice__(self, i, j): else: l = j-i # total length ofs = i - # Keeping tokens in a list could possible be faster, but the list - # overhead outweighs the benefits (tested) ! - md = bytes() + # It's fastest to keep tokens and join later, especially in py3, which was 7 times slower + # in the previous iteration of this code + md = list() while l: c.use_region(ofs, l) assert c.is_valid() d = c.buffer()[:l] ofs += len(d) l -= len(d) - md += d + md.append(d) #END while there are bytes to read - return md + return bytes().join(md) # END fast or slow path #{ Interface diff --git a/smmap/mman.py b/smmap/mman.py index 7cbb535bd..a89efd474 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -1,13 +1,12 @@ """Module containing a memory memory manager which provides a sliding window on a number of memory mapped files""" from .util import ( - MapWindow, - MapRegion, - MapRegionList, - is_64_bit, - align_to_mmap, - string_types, - buffer, - ) + MapWindow, + MapRegion, + MapRegionList, + is_64_bit, + string_types, + buffer, + ) from weakref import ref import sys @@ -261,14 +260,14 @@ class StaticWindowMapManager(object): def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys.maxsize): """initialize the manager with the given parameters. :param window_size: if -1, a default window size will be chosen depending on - the operating system's architechture. It will internally be quantified to a multiple of the page size + the operating system's architecture. It will internally be quantified to a multiple of the page size If 0, the window may have any size, which basically results in mapping the whole file at one :param max_memory_size: maximum amount of memory we may map at once before releasing mapped regions. - If 0, a viable default iwll be set dependning on the system's architecture. + If 0, a viable default will be set depending on the system's architecture. It is a soft limit that is tried to be kept, but nothing bad happens if we have to overallocate - :param max_open_handles: if not maxin, limit the amount of open file handles to the given number. - Otherwise the amount is only limited by the system iteself. If a system or soft limit is hit, - the manager will free as many handles as posisble""" + :param max_open_handles: if not maxint, limit the amount of open file handles to the given number. + Otherwise the amount is only limited by the system itself. If a system or soft limit is hit, + the manager will free as many handles as possible""" self._fdict = dict() self._window_size = window_size self._max_memory_size = max_memory_size @@ -277,7 +276,7 @@ def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys. self._handle_count = 0 if window_size < 0: - coeff = 32 + coeff = 64 if is_64_bit(): coeff = 1024 #END handle arch @@ -285,7 +284,7 @@ def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys. # END handle max window size if max_memory_size == 0: - coeff = 512 + coeff = 1024 if is_64_bit(): coeff = 8192 #END handle arch diff --git a/smmap/util.py b/smmap/util.py index c37dfdd31..3396d90c0 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -23,8 +23,9 @@ except NameError: # Python 3 has no `buffer`; only `memoryview` def buffer(obj, offset, size): - return memoryview(obj[offset:offset+size]) - + # return memoryview(obj[offset:offset+size]) + # doing it directly is much faster ! + return obj[offset:offset+size] def string_types(): if sys.version_info[0] >= 3: From 948a9274527d14702875581d7115389cf9aa8244 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 13 Nov 2014 08:21:09 +0100 Subject: [PATCH 0257/2375] Fixed a few typos and major linter errors --- .travis.yml | 5 +++-- README.md | 4 +--- doc/source/changes.rst | 2 +- doc/source/intro.rst | 8 ++------ setup.py | 10 +++++----- smmap/__init__.py | 2 +- smmap/buf.py | 2 -- smmap/mman.py | 16 ++++++---------- smmap/test/test_buf.py | 14 +++++++++----- smmap/test/test_mman.py | 12 +++++++----- smmap/test/test_util.py | 9 ++++++++- smmap/util.py | 4 ++-- 12 files changed, 45 insertions(+), 43 deletions(-) mode change 100644 => 100755 setup.py diff --git a/.travis.yml b/.travis.yml index 1f7872c86..cb0c16e44 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,8 @@ language: python python: - - 2.4 - - 2.5 + # These versions are unsupported by travis, even though smmap claims to still support these outdated versions + # - 2.4 + # - 2.5 - 2.6 - 2.7 - 3.3 diff --git a/README.md b/README.md index 6d2353820..327d66372 100644 --- a/README.md +++ b/README.md @@ -37,11 +37,9 @@ The package was tested on all of the previously mentioned configurations. ## Installing smmap -Its easiest to install smmap using the *easy_install* or *pip* program, which is part of the [setuptools](http://peak.telecommunity.com/DevCenter/setuptools) or [pip](http://www.pip-installer.org/en/latest) respectively: +Its easiest to install smmap using the [pip](http://www.pip-installer.org/en/latest) program: ```bash -$ easy_install smmap -# or $ pip install smmap ``` diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 6174008e9..d5ed8e378 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -3,7 +3,7 @@ Changelog ######### ********** -v0.8.2 +v0.8.3 ********** - Cleaned up code and assured it works sufficiently well with python 3 diff --git a/doc/source/intro.rst b/doc/source/intro.rst index 30bff0ded..ee3108a6a 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -22,7 +22,7 @@ For performance critical 64 bit applications, a simplified version of memory map ############# Prerequisites ############# -* Python 2.4, 2.5 or 2.6 +* Python 2.4, 2.5, 2.6, 2.7 or 3.3 * OSX, Windows or Linux The package was tested on all of the previously mentioned configurations. @@ -32,15 +32,12 @@ Limitations ########### * The memory access is read-only by design. * In python below 2.6, memory maps will be created in compatibility mode which works, but creates inefficient memory mappings as they always start at offset 0. -* It wasn't tested on python 2.7 and 3.x. ################ Installing smmap ################ -Its easiest to install smmap using the *easy_install* or *pip* program, which is part of the `setuptools`_ or `pip`_ respectively:: +Its easiest to install smmap using the *pip* program:: - $ easy_install smmap - # or $ pip install smmap As the command will install smmap in your respective python distribution, you will most likely need root permissions to authorize the required changes. @@ -75,5 +72,4 @@ License Information ################### *smmap* is licensed under the New BSD License. -.. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools .. _pip: http://www.pip-installer.org/en/latest/ diff --git a/setup.py b/setup.py old mode 100644 new mode 100755 index 204a2a75d..c6afc8960 --- a/setup.py +++ b/setup.py @@ -10,10 +10,10 @@ import smmap -if os.path.exists("README.rst"): - long_description = codecs.open('README.rst', "r", "utf-8").read() +if os.path.exists("README.md"): + long_description = codecs.open('README.md', "r", "utf-8").read() else: - long_description = "See http://github.com/nvie/smmap/tree/master" + long_description = "See http://github.com/Byron/smmap" setup( name="smmap", @@ -32,8 +32,8 @@ #"Development Status :: 1 - Planning", #"Development Status :: 2 - Pre-Alpha", #"Development Status :: 3 - Alpha", - "Development Status :: 4 - Beta", - #"Development Status :: 5 - Production/Stable", + # "Development Status :: 4 - Beta", + "Development Status :: 5 - Production/Stable", #"Development Status :: 6 - Mature", #"Development Status :: 7 - Inactive", "Environment :: Console", diff --git a/smmap/__init__.py b/smmap/__init__.py index 879ebea24..c494648d7 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/Byron/smmap" -version_info = (0, 8, 2) +version_info = (0, 8, 3) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience diff --git a/smmap/buf.py b/smmap/buf.py index 4cde6dde4..ef9d49e46 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -1,6 +1,4 @@ """Module with a simple buffer implementation using the memory manager""" -from .mman import WindowCursor - import sys __all__ = ["SlidingWindowMapBuffer"] diff --git a/smmap/mman.py b/smmap/mman.py index a89efd474..da6fd8153 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -101,7 +101,7 @@ def use_region(self, offset = 0, size = 0, flags = 0): :param flags: additional flags to be given to os.open in case a file handle is initially opened for mapping. Has no effect if a region can actually be reused. :return: this instance - it should be queried for whether it points to a valid memory region. - This is not the case if the mapping failed becaues we reached the end of the file + This is not the case if the mapping failed because we reached the end of the file **Note:**: The size actually mapped may be smaller than the given size. If that is the case, either the file has reached its end, or the map was created between two existing regions""" @@ -137,7 +137,7 @@ def unuse_region(self): """Unuse the ucrrent region. Does nothing if we have no current region **Note:** the cursor unuses the region automatically upon destruction. It is recommended - to unuse the region once you are done reading from it in persistent cursors as it + to un-use the region once you are done reading from it in persistent cursors as it helps to free up resource more quickly""" self._region = None # note: should reset ofs and size, but we spare that for performance. Its not @@ -203,7 +203,7 @@ def file_size(self): return self._rlist.file_size() def path_or_fd(self): - """:return: path or file decriptor of the underlying mapped file""" + """:return: path or file descriptor of the underlying mapped file""" return self._rlist.path_or_fd() def path(self): @@ -237,12 +237,12 @@ class StaticWindowMapManager(object): These clients would have to use a SlidingWindowMapBuffer to hide this fact. This type will always use a maximum window size, and optimize certain methods to - acomodate this fact""" + accommodate this fact""" __slots__ = [ '_fdict', # mapping of path -> StorageHelper (of some kind '_window_size', # maximum size of a window - '_max_memory_size', # maximum amount ofmemory we may allocate + '_max_memory_size', # maximum amount of memory we may allocate '_max_handle_count', # maximum amount of handles to keep open '_memory_size', # currently allocated memory size '_handle_count', # amount of currently allocated file handles @@ -264,7 +264,7 @@ def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys. If 0, the window may have any size, which basically results in mapping the whole file at one :param max_memory_size: maximum amount of memory we may map at once before releasing mapped regions. If 0, a viable default will be set depending on the system's architecture. - It is a soft limit that is tried to be kept, but nothing bad happens if we have to overallocate + It is a soft limit that is tried to be kept, but nothing bad happens if we have to over-allocate :param max_open_handles: if not maxint, limit the amount of open file handles to the given number. Otherwise the amount is only limited by the system itself. If a system or soft limit is hit, the manager will free as many handles as possible""" @@ -350,8 +350,6 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): # As many more operations are likely to fail in that condition ( # like reading a file from disk, etc) we free up as much as possible # As this invalidates our insert position, we have to recurse here - # NOTE: The c++ version uses a linked list to curcumvent this, but - # using that in python is probably too slow anyway if is_recursive: # we already tried this, and still have no success in obtaining # a mapping. This is an exception, so we propagate it @@ -562,8 +560,6 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): # As many more operations are likely to fail in that condition ( # like reading a file from disk, etc) we free up as much as possible # As this invalidates our insert position, we have to recurse here - # NOTE: The c++ version uses a linked list to curcumvent this, but - # using that in python is probably too slow anyway if is_recursive: # we already tried this, and still have no success in obtaining # a mapping. This is an exception, so we propagate it diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index 807d2770f..d3e51e2ee 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -1,14 +1,18 @@ -from __future__ import with_statement, print_function +from __future__ import print_function from .lib import TestBase, FileCreator -from smmap.mman import SlidingWindowMapManager, StaticWindowMapManager -from smmap.buf import * +from smmap.mman import ( + SlidingWindowMapManager, + StaticWindowMapManager + ) +from smmap.buf import SlidingWindowMapBuffer from random import randint from time import time import sys import os +import logging man_optimal = SlidingWindowMapManager() @@ -71,8 +75,8 @@ def test_basics(self): assert man_optimal.num_file_handles() == 1 # PERFORMANCE - # blast away with rnadom access and a full mapping - we don't want to - # exagerate the manager's overhead, but measure the buffer overhead + # blast away with random access and a full mapping - we don't want to + # exaggerate the manager's overhead, but measure the buffer overhead # We do it once with an optimal setting, and with a worse manager which # will produce small mappings only ! max_num_accesses = 100 diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 4d1839eca..cc5d91488 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -1,11 +1,13 @@ -from __future__ import with_statement, print_function +from __future__ import print_function from .lib import TestBase, FileCreator -from smmap.mman import * -from smmap.mman import WindowCursor +from smmap.mman import ( + WindowCursor, + SlidingWindowMapManager, + StaticWindowMapManager + ) from smmap.util import align_to_mmap -from smmap.exc import RegionCollectionError from random import randint from time import time @@ -67,7 +69,7 @@ def test_memory_manager(self): # doesn't raise if we are within the limit man._collect_lru_region(10) - # doesn't fail if we overallocate + # doesn't fail if we over-allocate assert man._collect_lru_region(sys.maxsize) == 0 # use a region, verify most basic functionality diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 8afba005e..745da83d7 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -1,6 +1,13 @@ from .lib import TestBase, FileCreator -from smmap.util import * +from smmap.util import ( + MapWindow, + MapRegion, + MapRegionList, + ALLOCATIONGRANULARITY, + is_64_bit, + align_to_mmap + ) import os import sys diff --git a/smmap/util.py b/smmap/util.py index 3396d90c0..a4d7d8f1d 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -113,7 +113,7 @@ class MapRegion(object): '__weakref__' ] _need_compat_layer = sys.version_info[0] < 3 and sys.version_info[1] < 6 - + if _need_compat_layer: __slots__.append('_mfb') # mapped memory buffer to provide offset #END handle additional slot @@ -283,4 +283,4 @@ def file_size(self): #END update file size return self._file_size -#} END utilty classes +#} END utility classes From 85dde34bc724570617f3df1cdc40ba1b0942c77e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 13 Nov 2014 09:00:44 +0100 Subject: [PATCH 0258/2375] Minor adjustments to adapt to changes in async (due to be removed anyway) --- gitdb/__init__.py | 2 +- gitdb/base.py | 6 +----- gitdb/ext/async | 2 +- gitdb/ext/smmap | 2 +- gitdb/fun.py | 2 +- gitdb/pack.py | 3 ++- gitdb/stream.py | 3 +-- gitdb/test/lib.py | 2 -- gitdb/test/test_stream.py | 3 +-- gitdb/util.py | 23 +++++++++-------------- setup.py | 35 ++++++++++++++++++++++++++--------- 11 files changed, 44 insertions(+), 39 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index ff750d14c..bb1d13b47 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -27,7 +27,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 5, 4) +version_info = (0, 5, 5) __version__ = '.'.join(str(i) for i in version_info) diff --git a/gitdb/base.py b/gitdb/base.py index bad5f7472..3476d0d1a 100644 --- a/gitdb/base.py +++ b/gitdb/base.py @@ -3,11 +3,7 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module with basic data structures - they are designed to be lightweight and fast""" -from util import ( - bin_to_hex, - zlib - ) - +from util import bin_to_hex from fun import ( type_id_to_type_map, type_to_type_id_map diff --git a/gitdb/ext/async b/gitdb/ext/async index 90326fb86..b930ee15c 160000 --- a/gitdb/ext/async +++ b/gitdb/ext/async @@ -1 +1 @@ -Subproject commit 90326fb867f94b193c277b07b23e364047e1ed28 +Subproject commit b930ee15c029860285db60aab4913dc8a9af2cd9 diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 616e9ceaf..f53ddc686 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 616e9ceaf917e4d8f3cf2c145401b8069ce307dd +Subproject commit f53ddc686c0d226b2c69cc3732406dd3796932cf diff --git a/gitdb/fun.py b/gitdb/fun.py index c1e73e895..177a2fb56 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -10,7 +10,7 @@ BadObjectType ) -from util import zlib +import zlib decompressobj = zlib.decompressobj import mmap diff --git a/gitdb/pack.py b/gitdb/pack.py index 48121f026..e2673ee1b 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -3,13 +3,14 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains PackIndexFile and PackFile implementations""" +import zlib + from gitdb.exc import ( BadObject, UnsupportedOperation, ParseError ) from util import ( - zlib, mman, LazyMixin, unpack_from, diff --git a/gitdb/stream.py b/gitdb/stream.py index 6441b1e1a..cbb10c1f1 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -4,7 +4,7 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php from cStringIO import StringIO -import errno +import zlib import mmap import os @@ -23,7 +23,6 @@ make_sha, write, close, - zlib ) has_perf_mod = False diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index ac8473a4e..af57e46d1 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -11,8 +11,6 @@ ZippedStoreShaWriter ) -from gitdb.util import zlib - import sys import random from array import array diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index 6dc27463c..d2487f6d1 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -18,12 +18,11 @@ hex_to_bin ) -from gitdb.util import zlib +import zlib from gitdb.typ import ( str_blob_type ) -import time import tempfile import os diff --git a/gitdb/util.py b/gitdb/util.py index 1662b662d..75f6bb927 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -7,27 +7,22 @@ import mmap import sys import errno - -from cStringIO import StringIO +import stat # in py 2.4, StringIO is only StringI, without write support. # Hence we must use the python implementation for this if sys.version_info[1] < 5: from StringIO import StringIO +else: + from cStringIO import StringIO # END handle python 2.4 -try: - import async.mod.zlib as zlib -except ImportError: - import zlib -# END try async zlib - from async import ThreadPool from smmap import ( - StaticWindowMapManager, - SlidingWindowMapManager, - SlidingWindowMapBuffer - ) + StaticWindowMapManager, + SlidingWindowMapManager, + SlidingWindowMapBuffer + ) # initialize our global memory manager instance # Use it to free cached (and unused) resources. @@ -304,7 +299,7 @@ def open(self, write=False, stream=False): binary = getattr(os, 'O_BINARY', 0) lockmode = os.O_WRONLY | os.O_CREAT | os.O_EXCL | binary try: - fd = os.open(self._lockfilepath(), lockmode, 0600) + fd = os.open(self._lockfilepath(), lockmode, stat.S_IREAD|stat.S_IWRITE) if not write: os.close(fd) else: @@ -373,7 +368,7 @@ def _end_writing(self, successful=True): # assure others can at least read the file - the tmpfile left it at rw-- # We may also write that file, on windows that boils down to a remove- # protection as well - chmod(self._filepath, 0644) + chmod(self._filepath, stat.S_IREAD|stat.S_IWRITE|stat.S_IRGRP|stat.S_IROTH) else: # just delete the file so far, we failed os.remove(lockfile) diff --git a/setup.py b/setup.py index 6dd4fa4b4..639370471 100755 --- a/setup.py +++ b/setup.py @@ -73,7 +73,7 @@ def get_data_files(self): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 5, 4) +version_info = (0, 5, 5) __version__ = '.'.join(str(i) for i in version_info) setup(cmdclass={'build_ext':build_ext_nofail}, @@ -88,15 +88,32 @@ def get_data_files(self): ext_modules=[Extension('gitdb._perf', ['gitdb/_fun.c', 'gitdb/_delta_apply.c'], include_dirs=['gitdb'])], license = "BSD License", zip_safe=False, - requires=('async (>=0.6.1)', 'smmap (>=0.8.0)'), + requires=('async (>=0.6.2)', 'smmap (>=0.8.3)'), install_requires=('async >= 0.6.1', 'smmap >= 0.8.0'), long_description = """GitDB is a pure-Python git object database""", # See https://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ - # Specify the Python versions you support here. In particular, ensure - # that you indicate whether you support Python 2, Python 3 or both. - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.6', - 'Programming Language :: Python :: 2.7', - ], - ) + # Picked from + # http://pypi.python.org/pypi?:action=list_classifiers + #"Development Status :: 1 - Planning", + #"Development Status :: 2 - Pre-Alpha", + #"Development Status :: 3 - Alpha", + # "Development Status :: 4 - Beta", + "Development Status :: 5 - Production/Stable", + #"Development Status :: 6 - Mature", + #"Development Status :: 7 - Inactive", + "Environment :: Console", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Operating System :: POSIX", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS :: MacOS X", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.6", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.3", + "Programming Language :: Python :: 3.4", + ],) From a8f2f63823324ad76cbb36b0f4115e73c7d9d594 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 13 Nov 2014 10:31:45 +0100 Subject: [PATCH 0259/2375] Made sure xrange is used instead of range in python 2 range in py2 will return a list, which can mean a lot of time and memory is spent on generating it even though it's just used for iteration. Simplified implementation of MAXSIZE --- gitdb/db/pack.py | 3 ++- gitdb/ext/async | 2 +- gitdb/ext/smmap | 2 +- gitdb/pack.py | 10 +++++----- gitdb/test/db/lib.py | 5 +++-- gitdb/test/lib.py | 3 ++- gitdb/test/test_pack.py | 3 ++- gitdb/util.py | 5 +---- gitdb/utils/compat.py | 20 +++++--------------- 9 files changed, 22 insertions(+), 31 deletions(-) diff --git a/gitdb/db/pack.py b/gitdb/db/pack.py index eca02bbff..b95bfed9d 100644 --- a/gitdb/db/pack.py +++ b/gitdb/db/pack.py @@ -18,6 +18,7 @@ ) from gitdb.pack import PackEntity +from gitdb.utils.compat import xrange from functools import reduce @@ -106,7 +107,7 @@ def sha_iter(self): for entity in self.entities(): index = entity.index() sha_by_index = index.sha - for index in range(index.size()): + for index in xrange(index.size()): yield sha_by_index(index) # END for each index # END for each entity diff --git a/gitdb/ext/async b/gitdb/ext/async index 3f26b05c2..b930ee15c 160000 --- a/gitdb/ext/async +++ b/gitdb/ext/async @@ -1 +1 @@ -Subproject commit 3f26b05c2f1a079d5807ed15c01b053ee846e745 +Subproject commit b930ee15c029860285db60aab4913dc8a9af2cd9 diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 552671191..f53ddc686 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 55267119140f3828a24b4986600ed21a1808d6cc +Subproject commit f53ddc686c0d226b2c69cc3732406dd3796932cf diff --git a/gitdb/pack.py b/gitdb/pack.py index 4e83ba39d..0b3ffd53e 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -64,7 +64,7 @@ from binascii import crc32 from gitdb.const import NULL_BYTE -from gitdb.utils.compat import izip, buffer +from gitdb.utils.compat import izip, buffer, xrange import tempfile import array @@ -208,7 +208,7 @@ def write(self, pack_sha, write): for t in self._objs: tmplist[ord(t[0][0])] += 1 #END prepare fanout - for i in range(255): + for i in xrange(255): v = tmplist[i] sha_write(pack('>L', v)) tmplist[i+1] += v @@ -374,7 +374,7 @@ def _read_fanout(self, byte_offset): d = self._cursor.map() out = list() append = out.append - for i in range(256): + for i in xrange(256): append(unpack_from('>L', d, byte_offset + i*4)[0]) # END for each entry return out @@ -415,7 +415,7 @@ def offsets(self): a.byteswap() return a else: - return tuple(self.offset(index) for index in range(self.size())) + return tuple(self.offset(index) for index in xrange(self.size())) # END handle version def sha_to_index(self, sha): @@ -703,7 +703,7 @@ def _iter_objects(self, as_stream): """Iterate over all objects in our index and yield their OInfo or OStream instences""" _sha = self._index.sha _object = self._object - for index in range(self._index.size()): + for index in xrange(self._index.size()): yield _object(_sha(index), as_stream, index) # END for each index diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index 38747deb2..8e333ddf2 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -22,6 +22,7 @@ from gitdb.exc import BadObject from gitdb.typ import str_blob_type from gitdb.utils.encoding import force_bytes +from gitdb.utils.compat import xrange from async import IteratorReader @@ -43,7 +44,7 @@ def _assert_object_writing_simple(self, db): # write a bunch of objects and query their streams and info null_objs = db.size() ni = 250 - for i in range(ni): + for i in xrange(ni): data = pack(">L", i) istream = IStream(str_blob_type, len(data), BytesIO(data)) new_istream = db.store(istream) @@ -131,7 +132,7 @@ def _assert_object_writing_async(self, db): """Test generic object writing using asynchronous access""" ni = 5000 def istream_generator(offset=0, ni=ni): - for data_src in range(ni): + for data_src in xrange(ni): data = bytes(data_src + offset) yield IStream(str_blob_type, len(data), BytesIO(data)) # END for each item diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index 75342f173..d692224ff 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -12,6 +12,7 @@ ) from gitdb.util import zlib +from gitdb.utils.compat import xrange import sys import random @@ -110,7 +111,7 @@ def make_bytes(size_in_bytes, randomize=False): """:return: string with given size in bytes :param randomize: try to produce a very random stream""" actual_size = size_in_bytes // 4 - producer = range(actual_size) + producer = xrange(actual_size) if randomize: producer = list(producer) random.shuffle(producer) diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index bcda3cfb8..6b67ad887 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -26,6 +26,7 @@ from gitdb.fun import delta_types from gitdb.exc import UnsupportedOperation from gitdb.util import to_bin_sha +from gitdb.utils.compat import xrange from itertools import chain try: @@ -64,7 +65,7 @@ def _assert_index_file(self, index, version, size): assert len(index.offsets()) == size # get all data of all objects - for oidx in range(index.size()): + for oidx in xrange(index.size()): sha = index.sha(oidx) assert oidx == index.sha_to_index(sha) diff --git a/gitdb/util.py b/gitdb/util.py index 5a82c553e..a3c44d446 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -122,13 +122,10 @@ def byte_ord(b): #{ Routines -def make_sha(source=None): +def make_sha(source=''.encode("ascii")): """A python2.4 workaround for the sha/hashlib module fiasco **Note** From the dulwich project """ - if source is None: - source = "".encode("ascii") - try: return hashlib.sha1(source) except NameError: diff --git a/gitdb/utils/compat.py b/gitdb/utils/compat.py index b9da683fa..eec319f3d 100644 --- a/gitdb/utils/compat.py +++ b/gitdb/utils/compat.py @@ -4,8 +4,10 @@ try: from itertools import izip + xrange = xrange except ImportError: izip = zip + xrange = range try: # Python 2 @@ -21,19 +23,7 @@ def buffer(obj, offset, size=None): memoryview = memoryview -if PY3: +try: + MAXSIZE = sys.maxint +except AttributeError: MAXSIZE = sys.maxsize -else: - # It's possible to have sizeof(long) != sizeof(Py_ssize_t). - class X(object): - def __len__(self): - return 1 << 31 - try: - len(X()) - except OverflowError: - # 32-bit - MAXSIZE = int((1 << 31) - 1) - else: - # 64-bit - MAXSIZE = int((1 << 63) - 1) - del X From 28fd45e0a7018f166820a5e00fce2ccb05ebdb61 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 13 Nov 2014 11:28:27 +0100 Subject: [PATCH 0260/2375] Fixed incorrect usage of memoryview. It's not getting faster though [ skip ci ] --- smmap/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smmap/util.py b/smmap/util.py index a4d7d8f1d..44e94124d 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -23,7 +23,7 @@ except NameError: # Python 3 has no `buffer`; only `memoryview` def buffer(obj, offset, size): - # return memoryview(obj[offset:offset+size]) + # return memoryview(obj)[offset:offset+size] # doing it directly is much faster ! return obj[offset:offset+size] From b64c771bcb2ec336dd549cfe9d072340c886f3c9 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 13 Nov 2014 12:17:01 +0100 Subject: [PATCH 0261/2375] Fixed all applicable lint issues --- gitdb/db/base.py | 2 -- gitdb/db/git.py | 7 +------ gitdb/db/loose.py | 8 -------- gitdb/db/pack.py | 1 - gitdb/db/ref.py | 1 - gitdb/ext/smmap | 2 +- gitdb/fun.py | 11 +++-------- gitdb/pack.py | 7 ++----- gitdb/stream.py | 4 +--- gitdb/test/db/lib.py | 8 ++++++-- gitdb/test/db/test_git.py | 6 +++++- gitdb/test/db/test_loose.py | 5 ++++- gitdb/test/db/test_mem.py | 5 ++++- gitdb/test/db/test_pack.py | 11 +++++++---- gitdb/test/lib.py | 9 +-------- gitdb/test/performance/lib.py | 4 +--- gitdb/test/performance/test_pack.py | 2 +- gitdb/test/performance/test_pack_streaming.py | 1 - gitdb/test/performance/test_stream.py | 18 +++++++----------- gitdb/test/test_base.py | 10 +++++++++- gitdb/test/test_example.py | 5 ++++- gitdb/test/test_pack.py | 3 --- gitdb/test/test_stream.py | 11 ++++++----- gitdb/test/test_util.py | 1 - gitdb/util.py | 6 +++++- gitdb/utils/compat.py | 10 ++++++++-- 26 files changed, 76 insertions(+), 82 deletions(-) diff --git a/gitdb/db/base.py b/gitdb/db/base.py index 53a94d249..c534705b7 100644 --- a/gitdb/db/base.py +++ b/gitdb/db/base.py @@ -22,7 +22,6 @@ from itertools import chain from functools import reduce -import sys __all__ = ('ObjectDBR', 'ObjectDBW', 'FileDBBase', 'CompoundDB', 'CachingDB') @@ -206,7 +205,6 @@ def _databases_recursive(database, output): """Fill output list with database from db, in order. Deals with Loose, Packed and compound databases.""" if isinstance(database, CompoundDB): - compounds = list() dbs = database.databases() output.extend(db for db in dbs if not isinstance(db, CompoundDB)) for cdb in (db for db in dbs if isinstance(db, CompoundDB)): diff --git a/gitdb/db/git.py b/gitdb/db/git.py index 5c74a2049..d22e3f1b9 100644 --- a/gitdb/db/git.py +++ b/gitdb/db/git.py @@ -12,12 +12,7 @@ from gitdb.db.pack import PackedDB from gitdb.db.ref import ReferenceDB -from gitdb.util import LazyMixin -from gitdb.exc import ( - InvalidDBRoot, - BadObject, - AmbiguousObjectName -) +from gitdb.exc import InvalidDBRoot import os diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index 63f96352b..3abdaa96f 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -10,7 +10,6 @@ from gitdb.exc import ( - InvalidDBRoot, BadObject, AmbiguousObjectName ) @@ -55,8 +54,6 @@ from gitdb.utils.encoding import force_bytes import tempfile -import mmap -import sys import os @@ -149,11 +146,6 @@ def _map_loose_object(self, sha): raise BadObject(sha) # END handle error # END exception handling - try: - return mmap.mmap(fd, 0, access=mmap.ACCESS_READ) - finally: - os.close(fd) - # END assure file is closed def set_ostream(self, stream): """:raise TypeError: if the stream does not support the Sha1Writer interface""" diff --git a/gitdb/db/pack.py b/gitdb/db/pack.py index b95bfed9d..4d0a7f8b3 100644 --- a/gitdb/db/pack.py +++ b/gitdb/db/pack.py @@ -103,7 +103,6 @@ def stream(self, sha): return entity.stream_at_index(index) def sha_iter(self): - sha_list = list() for entity in self.entities(): index = entity.index() sha_by_index = index.sha diff --git a/gitdb/db/ref.py b/gitdb/db/ref.py index 748f7c145..d98912643 100644 --- a/gitdb/db/ref.py +++ b/gitdb/db/ref.py @@ -6,7 +6,6 @@ CompoundDB, ) -import os __all__ = ('ReferenceDB', ) class ReferenceDB(CompoundDB): diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index f53ddc686..28fd45e0a 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit f53ddc686c0d226b2c69cc3732406dd3796932cf +Subproject commit 28fd45e0a7018f166820a5e00fce2ccb05ebdb61 diff --git a/gitdb/fun.py b/gitdb/fun.py index 22e56ddbb..80f01e6b2 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -6,18 +6,15 @@ Keeping this code separate from the beginning makes it easier to out-source it into c later, if required""" -from gitdb.exc import ( - BadObjectType -) - import zlib from gitdb.util import byte_ord decompressobj = zlib.decompressobj import mmap from itertools import islice +from functools import reduce -from gitdb.utils.compat import izip +from gitdb.utils.compat import izip, buffer, xrange from gitdb.typ import ( str_blob_type, str_commit_type, @@ -247,7 +244,6 @@ def compress(self): if slen < 2: return self i = 0 - slen_orig = slen first_data_index = None while i < slen: @@ -399,7 +395,6 @@ def loose_object_header_info(m): object as well as its uncompressed size in bytes. :param m: memory map from which to read the compressed object data""" from gitdb.const import NULL_BYTE - from gitdb.utils.encoding import force_text decompress_size = 8192 # is used in cgit as well hdr = decompressobj().decompress(m, decompress_size) @@ -684,7 +679,7 @@ def is_equal_canonical_sha(canonical_length, match, sha1): try: - # raise ImportError; # DEBUG + # NOQA from _perf import connect_deltas except ImportError: pass diff --git a/gitdb/pack.py b/gitdb/pack.py index fbfd18b08..87818b6e7 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -7,6 +7,7 @@ from gitdb.exc import ( BadObject, + AmbiguousObjectName, UnsupportedOperation, ParseError ) @@ -57,11 +58,7 @@ FlexibleSha1Writer ) -from struct import ( - pack, - unpack, -) - +from struct import pack from binascii import crc32 from gitdb.const import NULL_BYTE diff --git a/gitdb/stream.py b/gitdb/stream.py index de5884859..5daf01cb6 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -3,9 +3,8 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from io import BytesIO, StringIO +from io import BytesIO -import errno import mmap import os import zlib @@ -15,7 +14,6 @@ stream_copy, apply_delta_data, connect_deltas, - DeltaChunkList, delta_types ) diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index 8e333ddf2..67958c366 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -6,12 +6,16 @@ from gitdb.test.lib import ( with_rw_directory, with_packs_rw, - ZippedStoreShaWriter, fixture_path, TestBase ) -from gitdb.stream import Sha1Writer + + +from gitdb.stream import ( + Sha1Writer, + ZippedStoreShaWriter +) from gitdb.base import ( IStream, diff --git a/gitdb/test/db/test_git.py b/gitdb/test/db/test_git.py index cce2b9c09..4bce7dac8 100644 --- a/gitdb/test/db/test_git.py +++ b/gitdb/test/db/test_git.py @@ -2,7 +2,11 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from gitdb.test.db.lib import * +from gitdb.test.db.lib import ( + TestDBBase, + fixture_path, + with_rw_directory +) from gitdb.exc import BadObject from gitdb.db import GitDB from gitdb.base import OStream, OInfo diff --git a/gitdb/test/db/test_loose.py b/gitdb/test/db/test_loose.py index 5e42b639a..1299f7b86 100644 --- a/gitdb/test/db/test_loose.py +++ b/gitdb/test/db/test_loose.py @@ -2,7 +2,10 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from gitdb.test.db.lib import * +from gitdb.test.db.lib import ( + TestDBBase, + with_rw_directory +) from gitdb.db import LooseObjectDB from gitdb.exc import BadObject from gitdb.util import bin_to_hex diff --git a/gitdb/test/db/test_mem.py b/gitdb/test/db/test_mem.py index 9235b21d3..97f721719 100644 --- a/gitdb/test/db/test_mem.py +++ b/gitdb/test/db/test_mem.py @@ -2,7 +2,10 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from gitdb.test.db.lib import * +from gitdb.test.db.lib import ( + TestDBBase, + with_rw_directory +) from gitdb.db import ( MemoryDB, LooseObjectDB diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index f5a4dcb92..1177cf962 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -2,9 +2,12 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from gitdb.test.db.lib import * +from gitdb.test.db.lib import ( + TestDBBase, + with_rw_directory, + with_packs_rw +) from gitdb.db import PackedDB -from gitdb.test.lib import fixture_path from gitdb.exc import BadObject, AmbiguousObjectName @@ -46,8 +49,8 @@ def test_writing(self, path): random.shuffle(sha_list) for sha in sha_list: - info = pdb.info(sha) - stream = pdb.stream(sha) + pdb.info(sha) + pdb.stream(sha) # END for each sha to query diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index cb77e69bf..d88ec8b43 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -3,14 +3,7 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Utilities used in ODB testing""" -from gitdb import ( - OStream, - ) -from gitdb.stream import ( - Sha1Writer, - ZippedStoreShaWriter -) - +from gitdb import OStream from gitdb.utils.compat import xrange import sys diff --git a/gitdb/test/performance/lib.py b/gitdb/test/performance/lib.py index 3563fcfbe..5b5c40e0d 100644 --- a/gitdb/test/performance/lib.py +++ b/gitdb/test/performance/lib.py @@ -4,9 +4,7 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains library functions""" import os -from gitdb.test.lib import * -import shutil -import tempfile +from gitdb.test.lib import TestBase #{ Invvariants diff --git a/gitdb/test/performance/test_pack.py b/gitdb/test/performance/test_pack.py index 63856e218..b18e31ae6 100644 --- a/gitdb/test/performance/test_pack.py +++ b/gitdb/test/performance/test_pack.py @@ -9,11 +9,11 @@ from gitdb.exc import UnsupportedOperation from gitdb.db.pack import PackedDB +from gitdb.utils.compat import xrange import sys import os from time import time -import random from nose import SkipTest diff --git a/gitdb/test/performance/test_pack_streaming.py b/gitdb/test/performance/test_pack_streaming.py index c66e60cba..297426303 100644 --- a/gitdb/test/performance/test_pack_streaming.py +++ b/gitdb/test/performance/test_pack_streaming.py @@ -38,7 +38,6 @@ def test_pack_writing(self): ni = 5000 count = 0 - total_size = 0 st = time() for sha in pdb.sha_iter(): count += 1 diff --git a/gitdb/test/performance/test_stream.py b/gitdb/test/performance/test_stream.py index 010003d4b..6c8f71520 100644 --- a/gitdb/test/performance/test_stream.py +++ b/gitdb/test/performance/test_stream.py @@ -4,13 +4,13 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Performance data streaming performance""" from lib import TestBigRepoR -from gitdb.db import * -from gitdb.base import * -from gitdb.stream import * +from gitdb.db import LooseObjectDB +from gitdb.stream import IStream + from gitdb.util import ( - pool, - bin_to_hex - ) + pool, + bin_to_hex +) from gitdb.typ import str_blob_type from gitdb.fun import chunk_size @@ -19,19 +19,15 @@ ChannelThreadTask, ) -from cStringIO import StringIO from time import time import os import sys -import stat -import subprocess from lib import ( - TestBigRepoR, make_memory_file, with_rw_directory - ) +) #{ Utilities diff --git a/gitdb/test/test_base.py b/gitdb/test/test_base.py index 4cca7dabe..578c29f73 100644 --- a/gitdb/test/test_base.py +++ b/gitdb/test/test_base.py @@ -9,7 +9,15 @@ DeriveTest, ) -from gitdb import * +from gitdb import ( + OInfo, + OPackInfo, + ODeltaPackInfo, + OStream, + OPackStream, + ODeltaPackStream, + IStream +) from gitdb.util import ( NULL_BIN_SHA ) diff --git a/gitdb/test/test_example.py b/gitdb/test/test_example.py index c644b8849..433518c25 100644 --- a/gitdb/test/test_example.py +++ b/gitdb/test/test_example.py @@ -3,7 +3,10 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module with examples from the tutorial section of the docs""" -from gitdb.test.lib import * +from gitdb.test.lib import ( + TestBase, + fixture_path +) from gitdb import IStream from gitdb.db import LooseObjectDB from gitdb.util import pool diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index 6b67ad887..3ab2fec07 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -6,7 +6,6 @@ from gitdb.test.lib import ( TestBase, with_rw_directory, - with_packs_rw, fixture_path ) @@ -27,7 +26,6 @@ from gitdb.exc import UnsupportedOperation from gitdb.util import to_bin_sha from gitdb.utils.compat import xrange -from itertools import chain try: from itertools import izip @@ -37,7 +35,6 @@ from nose import SkipTest import os -import sys import tempfile diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index 984d6e1d7..671a146da 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -7,17 +7,18 @@ from gitdb.test.lib import ( TestBase, DummyStream, - Sha1Writer, make_bytes, make_object, fixture_path ) -from gitdb import * -from gitdb.util import ( - NULL_HEX_SHA, - hex_to_bin +from gitdb import ( + DecompressMemMapReader, + FDCompressedSha1Writer, + LooseObjectDB, + Sha1Writer ) +from gitdb.util import hex_to_bin import zlib from gitdb.typ import ( diff --git a/gitdb/test/test_util.py b/gitdb/test/test_util.py index ec9a86ce7..e79355aaf 100644 --- a/gitdb/test/test_util.py +++ b/gitdb/test/test_util.py @@ -5,7 +5,6 @@ """Test for object db""" import tempfile import os -import sys from gitdb.test.lib import TestBase from gitdb.util import ( diff --git a/gitdb/util.py b/gitdb/util.py index 77a0023e6..8843e8c88 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -77,7 +77,10 @@ def unpack_from(fmt, data, offset=0): fsync = os.fsync # Backwards compatibility imports -from gitdb.const import NULL_BIN_SHA, NULL_HEX_SHA +from gitdb.const import ( + NULL_BIN_SHA, + NULL_HEX_SHA +) #} END Aliases @@ -124,6 +127,7 @@ def make_sha(source=''.encode("ascii")): try: return hashlib.sha1(source) except NameError: + import sha sha1 = sha.sha(source) return sha1 diff --git a/gitdb/utils/compat.py b/gitdb/utils/compat.py index eec319f3d..a2640fd23 100644 --- a/gitdb/utils/compat.py +++ b/gitdb/utils/compat.py @@ -6,8 +6,10 @@ from itertools import izip xrange = xrange except ImportError: + # py3 izip = zip xrange = range +# end handle python version try: # Python 2 @@ -15,11 +17,15 @@ memoryview = buffer except NameError: # Python 3 has no `buffer`; only `memoryview` + # However, it's faster to just slice the object directly, maybe it keeps a view internally def buffer(obj, offset, size=None): if size is None: - return memoryview(obj)[offset:] + # return memoryview(obj)[offset:] + return obj[offset:] else: - return memoryview(obj[offset:offset+size]) + # return memoryview(obj)[offset:offset+size] + return obj[offset:offset+size] + # end buffer reimplementation memoryview = memoryview From bf942a913d69eb2079f9e82888aaccf2f6222643 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 13 Nov 2014 13:31:32 +0100 Subject: [PATCH 0262/2375] Fully removed all async dependencies --- .gitmodules | 3 - doc/source/changes.rst | 7 +++ gitdb/__init__.py | 4 +- gitdb/db/base.py | 55 ---------------- gitdb/db/mem.py | 8 +-- gitdb/db/pack.py | 4 -- gitdb/ext/async | 1 - gitdb/test/__init__.py | 12 ---- gitdb/test/db/lib.py | 83 ------------------------ gitdb/test/db/test_git.py | 1 - gitdb/test/db/test_loose.py | 1 - gitdb/test/performance/test_stream.py | 90 +-------------------------- gitdb/test/test_example.py | 23 ------- gitdb/util.py | 10 --- setup.py | 6 +- 15 files changed, 14 insertions(+), 294 deletions(-) delete mode 160000 gitdb/ext/async diff --git a/.gitmodules b/.gitmodules index 978105388..d85b15c9f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "async"] - path = gitdb/ext/async - url = https://github.com/gitpython-developers/async.git [submodule "smmap"] path = gitdb/ext/smmap url = https://github.com/Byron/smmap.git diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 839bf16a8..f544f76c0 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,13 @@ Changelog ######### +***** +0.6.0 +***** + +* Added support got python 3.X +* Removed all `async` dependencies and all `*_async` versions of methods with it. + ***** 0.5.4 ***** diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 72b5ab085..165993fc9 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -10,7 +10,7 @@ #{ Initialization def _init_externals(): """Initialize external projects by putting them into the path""" - for module in ('async', 'smmap'): + for module in ('smmap',): sys.path.append(os.path.join(os.path.dirname(__file__), 'ext', module)) try: @@ -27,7 +27,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 5, 5) +version_info = (0, 6, 0) __version__ = '.'.join(str(i) for i in version_info) diff --git a/gitdb/db/base.py b/gitdb/db/base.py index c534705b7..eac54ec38 100644 --- a/gitdb/db/base.py +++ b/gitdb/db/base.py @@ -4,7 +4,6 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains implementations of database retrieveing objects""" from gitdb.util import ( - pool, join, LazyMixin, hex_to_bin @@ -15,10 +14,6 @@ AmbiguousObjectName ) -from async import ( - ChannelThreadTask -) - from itertools import chain from functools import reduce @@ -41,47 +36,18 @@ def has_object(self, sha): binary sha is contained in the database""" raise NotImplementedError("To be implemented in subclass") - def has_object_async(self, reader): - """Return a reader yielding information about the membership of objects - as identified by shas - :param reader: Reader yielding 20 byte shas. - :return: async.Reader yielding tuples of (sha, bool) pairs which indicate - whether the given sha exists in the database or not""" - task = ChannelThreadTask(reader, str(self.has_object_async), lambda sha: (sha, self.has_object(sha))) - return pool.add_task(task) - def info(self, sha): """ :return: OInfo instance :param sha: bytes binary sha :raise BadObject:""" raise NotImplementedError("To be implemented in subclass") - def info_async(self, reader): - """Retrieve information of a multitude of objects asynchronously - :param reader: Channel yielding the sha's of the objects of interest - :return: async.Reader yielding OInfo|InvalidOInfo, in any order""" - task = ChannelThreadTask(reader, str(self.info_async), self.info) - return pool.add_task(task) - def stream(self, sha): """:return: OStream instance :param sha: 20 bytes binary sha :raise BadObject:""" raise NotImplementedError("To be implemented in subclass") - def stream_async(self, reader): - """Retrieve the OStream of multiple objects - :param reader: see ``info`` - :param max_threads: see ``ObjectDBW.store`` - :return: async.Reader yielding OStream|InvalidOStream instances in any order - - **Note:** depending on the system configuration, it might not be possible to - read all OStreams at once. Instead, read them individually using reader.read(x) - where x is small enough.""" - # base implementation just uses the stream method repeatedly - task = ChannelThreadTask(reader, str(self.stream_async), self.stream) - return pool.add_task(task) - def size(self): """:return: amount of objects in this database""" raise NotImplementedError() @@ -129,27 +95,6 @@ def store(self, istream): :raise IOError: if data could not be written""" raise NotImplementedError("To be implemented in subclass") - def store_async(self, reader): - """ - Create multiple new objects in the database asynchronously. The method will - return right away, returning an output channel which receives the results as - they are computed. - - :return: Channel yielding your IStream which served as input, in any order. - The IStreams sha will be set to the sha it received during the process, - or its error attribute will be set to the exception informing about the error. - - :param reader: async.Reader yielding IStream instances. - The same instances will be used in the output channel as were received - in by the Reader. - - **Note:** As some ODB implementations implement this operation atomic, they might - abort the whole operation if one item could not be processed. Hence check how - many items have actually been produced.""" - # base implementation uses store to perform the work - task = ChannelThreadTask(reader, str(self.store_async), self.store) - return pool.add_task(task) - #} END edit interface diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index a22454685..1aa0d511f 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -32,10 +32,7 @@ class MemoryDB(ObjectDBR, ObjectDBW): """A memory database stores everything to memory, providing fast IO and object retrieval. It should be used to buffer results and obtain SHAs before writing it to the actual physical storage, as it allows to query whether object already - exists in the target storage before introducing actual IO - - **Note:** memory is currently not threadsafe, hence the async methods cannot be used - for storing""" + exists in the target storage before introducing actual IO""" def __init__(self): super(MemoryDB, self).__init__() @@ -62,9 +59,6 @@ def store(self, istream): return istream - def store_async(self, reader): - raise UnsupportedOperation("MemoryDBs cannot currently be used for async write access") - def has_object(self, sha): return sha in self._cache diff --git a/gitdb/db/pack.py b/gitdb/db/pack.py index 4d0a7f8b3..eaf431a22 100644 --- a/gitdb/db/pack.py +++ b/gitdb/db/pack.py @@ -125,10 +125,6 @@ def store(self, istream): inefficient""" raise UnsupportedOperation() - def store_async(self, reader): - # TODO: add ObjectDBRW before implementing this - raise NotImplementedError() - #} END object db write diff --git a/gitdb/ext/async b/gitdb/ext/async deleted file mode 160000 index b930ee15c..000000000 --- a/gitdb/ext/async +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b930ee15c029860285db60aab4913dc8a9af2cd9 diff --git a/gitdb/test/__init__.py b/gitdb/test/__init__.py index ca104c0c5..8a681e428 100644 --- a/gitdb/test/__init__.py +++ b/gitdb/test/__init__.py @@ -2,15 +2,3 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php - -import gitdb.util - -#{ Initialization -def _init_pool(): - """Assure the pool is actually threaded""" - size = 2 - print("Setting ThreadPool to %i" % size) - gitdb.util.pool.set_size(size) - - -#} END initialization diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index 67958c366..962d4bc2a 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -10,8 +10,6 @@ TestBase ) - - from gitdb.stream import ( Sha1Writer, ZippedStoreShaWriter @@ -28,8 +26,6 @@ from gitdb.utils.encoding import force_bytes from gitdb.utils.compat import xrange -from async import IteratorReader - from io import BytesIO from struct import pack @@ -132,82 +128,3 @@ def _assert_object_writing(self, db): # END for each data set # END for each dry_run mode - def _assert_object_writing_async(self, db): - """Test generic object writing using asynchronous access""" - ni = 5000 - def istream_generator(offset=0, ni=ni): - for data_src in xrange(ni): - data = bytes(data_src + offset) - yield IStream(str_blob_type, len(data), BytesIO(data)) - # END for each item - # END generator utility - - # for now, we are very trusty here as we expect it to work if it worked - # in the single-stream case - - # write objects - reader = IteratorReader(istream_generator()) - istream_reader = db.store_async(reader) - istreams = istream_reader.read() # read all - assert istream_reader.task().error() is None - assert len(istreams) == ni - - for stream in istreams: - assert stream.error is None - assert len(stream.binsha) == 20 - assert isinstance(stream, IStream) - # END assert each stream - - # test has-object-async - we must have all previously added ones - reader = IteratorReader( istream.binsha for istream in istreams ) - hasobject_reader = db.has_object_async(reader) - count = 0 - for sha, has_object in hasobject_reader: - assert has_object - count += 1 - # END for each sha - assert count == ni - - # read the objects we have just written - reader = IteratorReader( istream.binsha for istream in istreams ) - ostream_reader = db.stream_async(reader) - - # read items individually to prevent hitting possible sys-limits - count = 0 - for ostream in ostream_reader: - assert isinstance(ostream, OStream) - count += 1 - # END for each ostream - assert ostream_reader.task().error() is None - assert count == ni - - # get info about our items - reader = IteratorReader( istream.binsha for istream in istreams ) - info_reader = db.info_async(reader) - - count = 0 - for oinfo in info_reader: - assert isinstance(oinfo, OInfo) - count += 1 - # END for each oinfo instance - assert count == ni - - - # combined read-write using a converter - # add 2500 items, and obtain their output streams - nni = 2500 - reader = IteratorReader(istream_generator(offset=ni, ni=nni)) - istream_to_sha = lambda istreams: [ istream.binsha for istream in istreams ] - - istream_reader = db.store_async(reader) - istream_reader.set_post_cb(istream_to_sha) - - ostream_reader = db.stream_async(istream_reader) - - count = 0 - # read it individually, otherwise we might run into the ulimit - for ostream in ostream_reader: - assert isinstance(ostream, OStream) - count += 1 - # END for each ostream - assert count == nni diff --git a/gitdb/test/db/test_git.py b/gitdb/test/db/test_git.py index 4bce7dac8..56899e579 100644 --- a/gitdb/test/db/test_git.py +++ b/gitdb/test/db/test_git.py @@ -48,4 +48,3 @@ def test_writing(self, path): # its possible to write objects self._assert_object_writing(gdb) - self._assert_object_writing_async(gdb) diff --git a/gitdb/test/db/test_loose.py b/gitdb/test/db/test_loose.py index 1299f7b86..1d6af9c99 100644 --- a/gitdb/test/db/test_loose.py +++ b/gitdb/test/db/test_loose.py @@ -18,7 +18,6 @@ def test_basics(self, path): # write data self._assert_object_writing(ldb) - self._assert_object_writing_async(ldb) # verify sha iteration and size shas = list(ldb.sha_iter()) diff --git a/gitdb/test/performance/test_stream.py b/gitdb/test/performance/test_stream.py index 6c8f71520..929c7e537 100644 --- a/gitdb/test/performance/test_stream.py +++ b/gitdb/test/performance/test_stream.py @@ -7,18 +7,9 @@ from gitdb.db import LooseObjectDB from gitdb.stream import IStream -from gitdb.util import ( - pool, - bin_to_hex -) -from gitdb.typ import str_blob_type +from gitdb.util import bin_to_hex from gitdb.fun import chunk_size -from async import ( - IteratorReader, - ChannelThreadTask, - ) - from time import time import os import sys @@ -43,15 +34,6 @@ def read_chunked_stream(stream): return stream -class TestStreamReader(ChannelThreadTask): - """Expects input streams and reads them in chunks. It will read one at a time, - requireing a queue chunk of size 1""" - def __init__(self, *args): - super(TestStreamReader, self).__init__(*args) - self.fun = read_chunked_stream - self.max_chunksize = 1 - - #} END utilities class TestObjDBPerformance(TestBigRepoR): @@ -119,73 +101,3 @@ def test_large_data_streaming(self, path): # del db file so we keep something to do os.remove(db_file) # END for each randomization factor - - - # multi-threaded mode - # want two, should be supported by most of todays cpus - pool.set_size(2) - total_kib = 0 - nsios = len(string_ios) - for stream in string_ios: - stream.seek(0) - total_kib += len(stream.getvalue()) / 1000 - # END rewind - - def istream_iter(): - for stream in string_ios: - stream.seek(0) - yield IStream(str_blob_type, len(stream.getvalue()), stream) - # END for each stream - # END util - - # write multiple objects at once, involving concurrent compression - reader = IteratorReader(istream_iter()) - istream_reader = ldb.store_async(reader) - istream_reader.task().max_chunksize = 1 - - st = time() - istreams = istream_reader.read(nsios) - assert len(istreams) == nsios - elapsed = time() - st - - print >> sys.stderr, "Threads(%i): Compressed %i KiB of data in loose odb in %f s ( %f Write KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) - - # decompress multiple at once, by reading them - # chunk size is not important as the stream will not really be decompressed - - # until its read - istream_reader = IteratorReader(iter([ i.binsha for i in istreams ])) - ostream_reader = ldb.stream_async(istream_reader) - - chunk_task = TestStreamReader(ostream_reader, "chunker", None) - output_reader = pool.add_task(chunk_task) - output_reader.task().max_chunksize = 1 - - st = time() - assert len(output_reader.read(nsios)) == nsios - elapsed = time() - st - - print >> sys.stderr, "Threads(%i): Decompressed %i KiB of data in loose odb in %f s ( %f Read KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) - - # store the files, and read them back. For the reading, we use a task - # as well which is chunked into one item per task. Reading all will - # very quickly result in two threads handling two bytestreams of - # chained compression/decompression streams - reader = IteratorReader(istream_iter()) - istream_reader = ldb.store_async(reader) - istream_reader.task().max_chunksize = 1 - - istream_to_sha = lambda items: [ i.binsha for i in items ] - istream_reader.set_post_cb(istream_to_sha) - - ostream_reader = ldb.stream_async(istream_reader) - - chunk_task = TestStreamReader(ostream_reader, "chunker", None) - output_reader = pool.add_task(chunk_task) - output_reader.max_chunksize = 1 - - st = time() - assert len(output_reader.read(nsios)) == nsios - elapsed = time() - st - - print >> sys.stderr, "Threads(%i): Compressed and decompressed and read %i KiB of data in loose odb in %f s ( %f Combined KiB / s)" % (pool.size(), total_kib, elapsed, total_kib / elapsed) diff --git a/gitdb/test/test_example.py b/gitdb/test/test_example.py index 433518c25..aa43a093f 100644 --- a/gitdb/test/test_example.py +++ b/gitdb/test/test_example.py @@ -9,12 +9,9 @@ ) from gitdb import IStream from gitdb.db import LooseObjectDB -from gitdb.util import pool from io import BytesIO -from async import IteratorReader - class TestExamples(TestBase): def test_base(self): @@ -45,23 +42,3 @@ def test_base(self): # now the sha is set assert len(istream.binsha) == 20 assert ldb.has_object(istream.binsha) - - - # async operation - # Create a reader from an iterator - reader = IteratorReader(ldb.sha_iter()) - - # get reader for object streams - info_reader = ldb.stream_async(reader) - - # read one - info = info_reader.read(1)[0] - - # read all the rest until depletion - ostreams = info_reader.read() - - # set the pool to use two threads - pool.set_size(2) - - # synchronize the mode of operation - pool.set_size(0) diff --git a/gitdb/util.py b/gitdb/util.py index 8843e8c88..93ba7f0ec 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -10,7 +10,6 @@ from io import StringIO -from async import ThreadPool from smmap import ( StaticWindowMapManager, SlidingWindowMapManager, @@ -43,15 +42,6 @@ def unpack_from(fmt, data, offset=0): # END own unpack_from implementation -#{ Globals - -# A pool distributing tasks, initially with zero threads, hence everything -# will be handled in the main thread -pool = ThreadPool(0) - -#} END globals - - #{ Aliases hex_to_bin = binascii.a2b_hex diff --git a/setup.py b/setup.py index 639370471..63ec5ddb3 100755 --- a/setup.py +++ b/setup.py @@ -73,7 +73,7 @@ def get_data_files(self): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 5, 5) +version_info = (0, 6, 0) __version__ = '.'.join(str(i) for i in version_info) setup(cmdclass={'build_ext':build_ext_nofail}, @@ -88,8 +88,8 @@ def get_data_files(self): ext_modules=[Extension('gitdb._perf', ['gitdb/_fun.c', 'gitdb/_delta_apply.c'], include_dirs=['gitdb'])], license = "BSD License", zip_safe=False, - requires=('async (>=0.6.2)', 'smmap (>=0.8.3)'), - install_requires=('async >= 0.6.1', 'smmap >= 0.8.0'), + requires=('smmap (>=0.8.3)'), + install_requires=('smmap >= 0.8.0'), long_description = """GitDB is a pure-Python git object database""", # See https://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ From 641b64c9f48139cf06774805d32892012fb9b82d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 13 Nov 2014 18:31:17 +0100 Subject: [PATCH 0263/2375] Now tests work consistently in py2 and 3 It's a nice way of saying that there is still one failing, consistently. --- gitdb/const.py | 5 +- gitdb/db/base.py | 7 +- gitdb/db/loose.py | 2 +- gitdb/fun.py | 229 +++++++++++++++++++++++++------------ gitdb/pack.py | 21 ++-- gitdb/stream.py | 8 +- gitdb/test/db/test_pack.py | 2 +- gitdb/typ.py | 10 +- gitdb/utils/encoding.py | 4 +- 9 files changed, 178 insertions(+), 110 deletions(-) diff --git a/gitdb/const.py b/gitdb/const.py index 147f79cb9..6391d796f 100644 --- a/gitdb/const.py +++ b/gitdb/const.py @@ -1,5 +1,4 @@ -from gitdb.utils.encoding import force_bytes - -NULL_BYTE = force_bytes("\0") +BYTE_SPACE = b' ' +NULL_BYTE = b'\0' NULL_HEX_SHA = "0" * 40 NULL_BIN_SHA = NULL_BYTE * 20 diff --git a/gitdb/db/base.py b/gitdb/db/base.py index eac54ec38..a670eea63 100644 --- a/gitdb/db/base.py +++ b/gitdb/db/base.py @@ -9,6 +9,7 @@ hex_to_bin ) +from gitdb.utils.encoding import force_text from gitdb.exc import ( BadObject, AmbiguousObjectName @@ -122,8 +123,6 @@ def db_path(self, rela_path): """ :return: the given relative path relative to our database root, allowing to pontentially access datafiles""" - from gitdb.utils.encoding import force_text - return join(self._root_path, force_text(rela_path)) #} END interface @@ -234,12 +233,12 @@ def update_cache(self, force=False): def partial_to_complete_sha_hex(self, partial_hexsha): """ - :return: 20 byte binary sha1 from the given less-than-40 byte hexsha + :return: 20 byte binary sha1 from the given less-than-40 byte hexsha (bytes or str) :param partial_hexsha: hexsha with less than 40 byte :raise AmbiguousObjectName: """ databases = list() _databases_recursive(self, databases) - + partial_hexsha = force_text(partial_hexsha) len_partial_hexsha = len(partial_hexsha) if len_partial_hexsha % 2 != 0: partial_binsha = hex_to_bin(partial_hexsha + "0") diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index 3abdaa96f..374302611 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -109,7 +109,7 @@ def readable_db_object_path(self, hexsha): def partial_to_complete_sha_hex(self, partial_hexsha): """:return: 20 byte binary sha1 string which matches the given name uniquely - :param name: hexadecimal partial name + :param name: hexadecimal partial name (bytes or ascii string) :raise AmbiguousObjectName: :raise BadObject: """ candidate = None diff --git a/gitdb/fun.py b/gitdb/fun.py index 80f01e6b2..064680adb 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -14,7 +14,9 @@ from itertools import islice from functools import reduce -from gitdb.utils.compat import izip, buffer, xrange +from gitdb.const import NULL_BYTE, BYTE_SPACE +from gitdb.utils.encoding import force_text +from gitdb.utils.compat import izip, buffer, xrange, PY3 from gitdb.typ import ( str_blob_type, str_commit_type, @@ -30,12 +32,12 @@ delta_types = (OFS_DELTA, REF_DELTA) type_id_to_type_map = { - 0 : "", # EXT 1 + 0 : b'', # EXT 1 1 : str_commit_type, 2 : str_tree_type, 3 : str_blob_type, 4 : str_tag_type, - 5 : "", # EXT 2 + 5 : b'', # EXT 2 OFS_DELTA : "OFS_DELTA", # OFFSET DELTA REF_DELTA : "REF_DELTA" # REFERENCE DELTA } @@ -394,11 +396,9 @@ def loose_object_header_info(m): :return: tuple(type_string, uncompressed_size_in_bytes) the type string of the object as well as its uncompressed size in bytes. :param m: memory map from which to read the compressed object data""" - from gitdb.const import NULL_BYTE - decompress_size = 8192 # is used in cgit as well hdr = decompressobj().decompress(m, decompress_size) - type_name, size = hdr[:hdr.find(NULL_BYTE)].split(" ".encode("ascii")) + type_name, size = hdr[:hdr.find(NULL_BYTE)].split(BYTE_SPACE) return type_name, int(size) @@ -413,12 +413,21 @@ def pack_object_header_info(data): type_id = (c >> 4) & 7 # numeric type size = c & 15 # starting size s = 4 # starting bit-shift size - while c & 0x80: - c = byte_ord(data[i]) - i += 1 - size += (c & 0x7f) << s - s += 7 - # END character loop + if PY3: + while c & 0x80: + c = data[i] + i += 1 + size += (c & 0x7f) << s + s += 7 + # END character loop + else: + while c & 0x80: + c = ord(data[i]) + i += 1 + size += (c & 0x7f) << s + s += 7 + # END character loop + # end performance at expense of maintenance ... return (type_id, size, i) def create_pack_object_header(obj_type, obj_size): @@ -429,16 +438,29 @@ def create_pack_object_header(obj_type, obj_size): :param obj_type: pack type_id of the object :param obj_size: uncompressed size in bytes of the following object stream""" c = 0 # 1 byte - hdr = str() # output string - - c = (obj_type << 4) | (obj_size & 0xf) - obj_size >>= 4 - while obj_size: - hdr += chr(c | 0x80) - c = obj_size & 0x7f - obj_size >>= 7 - #END until size is consumed - hdr += chr(c) + if PY3: + hdr = bytearray() # output string + + c = (obj_type << 4) | (obj_size & 0xf) + obj_size >>= 4 + while obj_size: + hdr.append(c | 0x80) + c = obj_size & 0x7f + obj_size >>= 7 + #END until size is consumed + hdr.append(c) + else: + hdr = bytes() # output string + + c = (obj_type << 4) | (obj_size & 0xf) + obj_size >>= 4 + while obj_size: + hdr += chr(c | 0x80) + c = obj_size & 0x7f + obj_size >>= 7 + #END until size is consumed + hdr += chr(c) + # end handle interpreter return hdr def msb_size(data, offset=0): @@ -449,24 +471,36 @@ def msb_size(data, offset=0): i = 0 l = len(data) hit_msb = False - while i < l: - c = byte_ord(data[i+offset]) - size |= (c & 0x7f) << i*7 - i += 1 - if not c & 0x80: - hit_msb = True - break - # END check msb bit - # END while in range + if PY3: + while i < l: + c = data[i+offset] + size |= (c & 0x7f) << i*7 + i += 1 + if not c & 0x80: + hit_msb = True + break + # END check msb bit + # END while in range + else: + while i < l: + c = ord(data[i+offset]) + size |= (c & 0x7f) << i*7 + i += 1 + if not c & 0x80: + hit_msb = True + break + # END check msb bit + # END while in range + # end performance ... if not hit_msb: raise AssertionError("Could not find terminating MSB byte in data stream") return i+offset, size def loose_object_header(type, size): """ - :return: string representing the loose object header, which is immediately + :return: bytes representing the loose object header, which is immediately followed by the content stream of size 'size'""" - return "%s %i\0" % (type, size) + return ('%s %i\0' % (force_text(type), size)).encode('ascii') def write_object(type, size, read, write, chunk_size=chunk_size): """ @@ -611,48 +645,93 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): **Note:** transcribed to python from the similar routine in patch-delta.c""" i = 0 db = delta_buf - while i < delta_buf_size: - c = ord(db[i]) - i += 1 - if c & 0x80: - cp_off, cp_size = 0, 0 - if (c & 0x01): - cp_off = ord(db[i]) - i += 1 - if (c & 0x02): - cp_off |= (ord(db[i]) << 8) - i += 1 - if (c & 0x04): - cp_off |= (ord(db[i]) << 16) - i += 1 - if (c & 0x08): - cp_off |= (ord(db[i]) << 24) - i += 1 - if (c & 0x10): - cp_size = ord(db[i]) - i += 1 - if (c & 0x20): - cp_size |= (ord(db[i]) << 8) - i += 1 - if (c & 0x40): - cp_size |= (ord(db[i]) << 16) - i += 1 - - if not cp_size: - cp_size = 0x10000 - - rbound = cp_off + cp_size - if (rbound < cp_size or - rbound > src_buf_size): - break - write(buffer(src_buf, cp_off, cp_size)) - elif c: - write(db[i:i+c]) - i += c - else: - raise ValueError("unexpected delta opcode 0") - # END handle command byte - # END while processing delta data + if PY3: + while i < delta_buf_size: + c = db[i] + i += 1 + if c & 0x80: + cp_off, cp_size = 0, 0 + if (c & 0x01): + cp_off = db[i] + i += 1 + if (c & 0x02): + cp_off |= (db[i] << 8) + i += 1 + if (c & 0x04): + cp_off |= (db[i] << 16) + i += 1 + if (c & 0x08): + cp_off |= (db[i] << 24) + i += 1 + if (c & 0x10): + cp_size = db[i] + i += 1 + if (c & 0x20): + cp_size |= (db[i] << 8) + i += 1 + if (c & 0x40): + cp_size |= (db[i] << 16) + i += 1 + + if not cp_size: + cp_size = 0x10000 + + rbound = cp_off + cp_size + if (rbound < cp_size or + rbound > src_buf_size): + break + write(buffer(src_buf, cp_off, cp_size)) + elif c: + write(db[i:i+c]) + i += c + else: + raise ValueError("unexpected delta opcode 0") + # END handle command byte + # END while processing delta data + else: + while i < delta_buf_size: + c = ord(db[i]) + i += 1 + if c & 0x80: + cp_off, cp_size = 0, 0 + if (c & 0x01): + cp_off = ord(db[i]) + i += 1 + if (c & 0x02): + cp_off |= (ord(db[i]) << 8) + i += 1 + if (c & 0x04): + cp_off |= (ord(db[i]) << 16) + i += 1 + if (c & 0x08): + cp_off |= (ord(db[i]) << 24) + i += 1 + if (c & 0x10): + cp_size = ord(db[i]) + i += 1 + if (c & 0x20): + cp_size |= (ord(db[i]) << 8) + i += 1 + if (c & 0x40): + cp_size |= (ord(db[i]) << 16) + i += 1 + + if not cp_size: + cp_size = 0x10000 + + rbound = cp_off + cp_size + if (rbound < cp_size or + rbound > src_buf_size): + break + write(buffer(src_buf, cp_off, cp_size)) + elif c: + write(db[i:i+c]) + i += c + else: + raise ValueError("unexpected delta opcode 0") + # END handle command byte + # END while processing delta data + # end save byte_ord call and prevent performance regression in py2 # yes, lets use the exact same error message that git uses :) assert i == delta_buf_size, "delta replay has gone wild" diff --git a/gitdb/pack.py b/gitdb/pack.py index 87818b6e7..375cc59a9 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -86,8 +86,6 @@ def pack_object_at(cursor, offset, as_stream): :parma offset: offset in to the data at which the object information is located :param as_stream: if True, a stream object will be returned that can read the data, otherwise you receive an info object only""" - from gitdb.utils.encoding import force_bytes - data = cursor.use_region(offset).buffer() type_id, uncomp_size, data_rela_offset = pack_object_header_info(data) total_rela_offset = None # set later, actual offset until data stream begins @@ -96,11 +94,11 @@ def pack_object_at(cursor, offset, as_stream): # OFFSET DELTA if type_id == OFS_DELTA: i = data_rela_offset - c = ord(data[i]) + c = byte_ord(data[i]) i += 1 delta_offset = c & 0x7f while c & 0x80: - c = ord(data[i]) + c = byte_ord(data[i]) i += 1 delta_offset += 1 delta_offset = (delta_offset << 7) + (c & 0x7f) @@ -118,12 +116,10 @@ def pack_object_at(cursor, offset, as_stream): # END handle type id abs_data_offset = offset + total_rela_offset if as_stream: - buff = buffer(data, total_rela_offset) - stream = DecompressMemMapReader(buff, False, uncomp_size) + stream = DecompressMemMapReader(buffer(data, total_rela_offset), False, uncomp_size) if delta_info is None: return abs_data_offset, OPackStream(offset, type_id, uncomp_size, stream) else: - delta_info = force_bytes(delta_info) return abs_data_offset, ODeltaPackStream(offset, type_id, uncomp_size, delta_info, stream) else: if delta_info is None: @@ -204,7 +200,7 @@ def write(self, pack_sha, write): # fanout tmplist = list((0,)*256) # fanout or list with 64 bit offsets for t in self._objs: - tmplist[ord(t[0][0])] += 1 + tmplist[byte_ord(t[0][0])] += 1 #END prepare fanout for i in xrange(255): v = tmplist[i] @@ -215,7 +211,7 @@ def write(self, pack_sha, write): # sha1 ordered # save calls, that is push them into c - sha_write(''.join(t[0] for t in self._objs)) + sha_write(b''.join(t[0] for t in self._objs)) # crc32 for t in self._objs: @@ -258,7 +254,7 @@ class PackIndexFile(LazyMixin): # used in v2 indices _sha_list_offset = 8 + 1024 - index_v2_signature = '\377tOc' + index_v2_signature = b'\xfftOc' index_version_default = 2 def __init__(self, indexpath): @@ -446,13 +442,14 @@ def partial_sha_to_index(self, partial_bin_sha, canonical_length): """ :return: index as in `sha_to_index` or None if the sha was not found in this index file - :param partial_bin_sha: an at least two bytes of a partial binary sha + :param partial_bin_sha: an at least two bytes of a partial binary sha as bytes :param canonical_length: lenght of the original hexadecimal representation of the given partial binary sha :raise AmbiguousObjectName:""" if len(partial_bin_sha) < 2: raise ValueError("Require at least 2 bytes of partial sha") + assert isinstance(partial_bin_sha, bytes), "partial_bin_sha must be bytes" first_byte = byte_ord(partial_bin_sha[0]) get_sha = self.sha @@ -680,7 +677,7 @@ def _set_cache_(self, attr): else: iter_offsets = iter(offsets_sorted) iter_offsets_plus_one = iter(offsets_sorted) - iter_offsets_plus_one.next() + next(iter_offsets_plus_one) consecutive = izip(iter_offsets, iter_offsets_plus_one) offset_map = dict(consecutive) diff --git a/gitdb/stream.py b/gitdb/stream.py index 5daf01cb6..43aa8e368 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -25,7 +25,7 @@ close, ) -from gitdb.const import NULL_BYTE +from gitdb.const import NULL_BYTE, BYTE_SPACE from gitdb.utils.compat import buffer from gitdb.utils.encoding import force_bytes @@ -102,7 +102,7 @@ def _parse_header_info(self): self._s = maxb hdr = self.read(maxb) hdrend = hdr.find(NULL_BYTE) - typ, size = hdr[:hdrend].split(" ".encode("ascii")) + typ, size = hdr[:hdrend].split(BYTE_SPACE) size = int(size) self._s = size @@ -378,8 +378,6 @@ def _set_cache_too_slow_without_c(self, attr): def _set_cache_brute_(self, attr): """If we are here, we apply the actual deltas""" - from gitdb.utils.compat import buffer - # TODO: There should be a special case if there is only one stream # Then the default-git algorithm should perform a tad faster, as the # delta is not peaked into, causing less overhead. @@ -421,7 +419,7 @@ def _set_cache_brute_(self, attr): # For the actual copying, we use a seek and write pattern of buffer # slices. final_target_size = None - for (dbuf, offset, src_size, target_size), dstream in reversed(zip(buffer_info_list, self._dstreams)): + for (dbuf, offset, src_size, target_size), dstream in zip(reversed(buffer_info_list), reversed(self._dstreams)): # allocate a buffer to hold all delta data - fill in the data for # fast access. We do this as we know that reading individual bytes # from our stream would be slower than necessary ( although possible ) diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index 1177cf962..963a71af7 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -73,4 +73,4 @@ def test_writing(self, path): # assert num_ambiguous # non-existing - self.failUnlessRaises(BadObject, pdb.partial_to_complete_sha, "\0\0", 4) + self.failUnlessRaises(BadObject, pdb.partial_to_complete_sha, b'\0\0', 4) diff --git a/gitdb/typ.py b/gitdb/typ.py index edd1f2731..bc7ba5828 100644 --- a/gitdb/typ.py +++ b/gitdb/typ.py @@ -4,9 +4,7 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module containing information about types known to the database""" -from gitdb.utils.encoding import force_bytes - -str_blob_type = force_bytes("blob") -str_commit_type = force_bytes("commit") -str_tree_type = force_bytes("tree") -str_tag_type = force_bytes("tag") +str_blob_type = b'blob' +str_commit_type = b'commit' +str_tree_type = b'tree' +str_tag_type = b'tag' diff --git a/gitdb/utils/encoding.py b/gitdb/utils/encoding.py index 12164e756..617b51c83 100644 --- a/gitdb/utils/encoding.py +++ b/gitdb/utils/encoding.py @@ -11,9 +11,6 @@ def force_bytes(data, encoding="utf-8"): if isinstance(data, bytes): return data - if isinstance(data, compat.memoryview): - return bytes(data) - if isinstance(data, string_types): return data.encode(encoding) @@ -27,6 +24,7 @@ def force_text(data, encoding="utf-8"): return data.decode(encoding) if not isinstance(data, bytes): + assert False, "Shouldn't be here" data = force_bytes(data, encoding) if compat.PY3: From 8ae4e9579a263684c6b760aec2869be480ff22ba Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 13 Nov 2014 18:46:49 +0100 Subject: [PATCH 0264/2375] reduced usage of force_bytes as clients are expected to pass bytes. It was useful for debugging though, maybe an explicit type assertions would help others ? As 'others' will be gitpython, I suppose I can handle it myself --- gitdb/stream.py | 6 +----- gitdb/test/db/lib.py | 7 +++---- gitdb/test/db/test_ref.py | 8 +++++--- gitdb/utils/encoding.py | 6 +----- 4 files changed, 10 insertions(+), 17 deletions(-) diff --git a/gitdb/stream.py b/gitdb/stream.py index 43aa8e368..e32fcf380 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -543,9 +543,9 @@ def __init__(self): def write(self, data): """:raise IOError: If not all bytes could be written + :param data: byte object :return: length of incoming data""" - data = force_bytes(data) self.sha1.update(data) return len(data) @@ -590,8 +590,6 @@ def __getattr__(self, attr): return getattr(self.buf, attr) def write(self, data): - data = force_bytes(data) - alen = Sha1Writer.write(self, data) self.buf.write(self.zip.compress(data)) @@ -634,8 +632,6 @@ def __init__(self, fd): def write(self, data): """:raise IOError: If not all bytes could be written :return: lenght of incoming data""" - data = force_bytes(data) - self.sha1.update(data) cdata = self.zip.compress(data) bytes_written = write(self.fd, cdata) diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index 962d4bc2a..af6d9e0fd 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -23,7 +23,6 @@ from gitdb.exc import BadObject from gitdb.typ import str_blob_type -from gitdb.utils.encoding import force_bytes from gitdb.utils.compat import xrange from io import BytesIO @@ -37,7 +36,7 @@ class TestDBBase(TestBase): """Base class providing testing routines on databases""" # data - two_lines = "1234\nhello world" + two_lines = b'1234\nhello world' all_data = (two_lines, ) def _assert_object_writing_simple(self, db): @@ -83,7 +82,7 @@ def _assert_object_writing(self, db): prev_ostream = db.set_ostream(ostream) assert type(prev_ostream) in ostreams or prev_ostream in ostreams - istream = IStream(str_blob_type, len(data), BytesIO(data.encode("ascii"))) + istream = IStream(str_blob_type, len(data), BytesIO(data)) # store returns same istream instance, with new sha set my_istream = db.store(istream) @@ -99,7 +98,7 @@ def _assert_object_writing(self, db): assert info.size == len(data) ostream = db.stream(sha) - assert ostream.read() == force_bytes(data) + assert ostream.read() == data assert ostream.type == str_blob_type assert ostream.size == len(data) else: diff --git a/gitdb/test/db/test_ref.py b/gitdb/test/db/test_ref.py index a1387ee26..db930827b 100644 --- a/gitdb/test/db/test_ref.py +++ b/gitdb/test/db/test_ref.py @@ -2,7 +2,11 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php -from gitdb.test.db.lib import * +from gitdb.test.db.lib import ( + TestDBBase, + with_rw_directory, + fixture_path +) from gitdb.db import ReferenceDB from gitdb.util import ( @@ -24,8 +28,6 @@ def make_alt_file(self, alt_path, alt_list): @with_rw_directory def test_writing(self, path): - NULL_BIN_SHA = '\0'.encode("ascii") * 20 - alt_path = os.path.join(path, 'alternates') rdb = ReferenceDB(alt_path) assert len(rdb.databases()) == 0 diff --git a/gitdb/utils/encoding.py b/gitdb/utils/encoding.py index 617b51c83..2d03ad30c 100644 --- a/gitdb/utils/encoding.py +++ b/gitdb/utils/encoding.py @@ -7,7 +7,7 @@ string_types = (basestring, ) text_type = unicode -def force_bytes(data, encoding="utf-8"): +def force_bytes(data, encoding="ascii"): if isinstance(data, bytes): return data @@ -23,10 +23,6 @@ def force_text(data, encoding="utf-8"): if isinstance(data, string_types): return data.decode(encoding) - if not isinstance(data, bytes): - assert False, "Shouldn't be here" - data = force_bytes(data, encoding) - if compat.PY3: return text_type(data, encoding) else: From 7fd369c8549a975efd74c312aa91194b4569b99e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 13 Nov 2014 19:49:40 +0100 Subject: [PATCH 0265/2375] setup.py works now, and binary python module can now be loaded as well. --- gitdb/_delta_apply.c | 2 -- gitdb/fun.py | 1 - setup.py | 4 ++-- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/gitdb/_delta_apply.c b/gitdb/_delta_apply.c index f03e7ea6d..8b0f8e064 100644 --- a/gitdb/_delta_apply.c +++ b/gitdb/_delta_apply.c @@ -506,7 +506,6 @@ DeltaInfo* DIV_closest_chunk(const DeltaInfoVector* vec, ull ofs) // Return the amount of chunks a slice at the given spot would have, as well as // its size in bytes it would have if the possibly partial chunks would be encoded // and added to the spot marked by sdc -inline uint DIV_count_slice_bytes(const DeltaInfoVector* src, uint ofs, uint size) { uint num_bytes = 0; @@ -559,7 +558,6 @@ uint DIV_count_slice_bytes(const DeltaInfoVector* src, uint ofs, uint size) // destination memory. The individual chunks written will be a byte copy of the source // data chunk stream // Return: number of chunks in the slice -inline uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar** dest, ull tofs, uint size) { assert(DIV_lbound(src) <= tofs); diff --git a/gitdb/fun.py b/gitdb/fun.py index 064680adb..b7662b495 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -758,7 +758,6 @@ def is_equal_canonical_sha(canonical_length, match, sha1): try: - # NOQA from _perf import connect_deltas except ImportError: pass diff --git a/setup.py b/setup.py index 63ec5ddb3..e01c6b475 100755 --- a/setup.py +++ b/setup.py @@ -83,12 +83,12 @@ def get_data_files(self): author = __author__, author_email = __contact__, url = __homepage__, - packages = ('gitdb', 'gitdb.db'), + packages = ('gitdb', 'gitdb.db', 'gitdb.utils'), package_dir = {'gitdb':'gitdb'}, ext_modules=[Extension('gitdb._perf', ['gitdb/_fun.c', 'gitdb/_delta_apply.c'], include_dirs=['gitdb'])], license = "BSD License", zip_safe=False, - requires=('smmap (>=0.8.3)'), + requires=('smmap (>=0.8.3)', ), install_requires=('smmap >= 0.8.0'), long_description = """GitDB is a pure-Python git object database""", # See https://pypi.python.org/pypi?%3Aaction=list_classifiers From f26c869025bc31d3920726a63b15fdb420b1d215 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 14 Nov 2014 09:43:19 +0100 Subject: [PATCH 0266/2375] Performance tests are now part of the test-suite. By default, a small repository will be tested, which doesn't take that long actually (~20s) Additionally, that way we enforce correctness tests, which didn't run by default previously. As we are handling data here, we must be sure that it's handled correctly, thus the tests should run. --- gitdb/test/lib.py | 4 +-- gitdb/test/performance/lib.py | 27 ++++++++----------- gitdb/test/performance/test_pack.py | 21 +++++++-------- gitdb/test/performance/test_pack_streaming.py | 17 ++++++------ gitdb/test/performance/test_stream.py | 20 +++++++------- 5 files changed, 43 insertions(+), 46 deletions(-) diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index d88ec8b43..ba653c91f 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -10,7 +10,7 @@ import random from array import array -from io import StringIO +from io import BytesIO import glob import unittest @@ -120,7 +120,7 @@ def make_memory_file(size_in_bytes, randomize=False): """:return: tuple(size_of_stream, stream) :param randomize: try to produce a very random stream""" d = make_bytes(size_in_bytes, randomize) - return len(d), StringIO(d) + return len(d), BytesIO(d) #} END routines diff --git a/gitdb/test/performance/lib.py b/gitdb/test/performance/lib.py index 5b5c40e0d..ec45cf3a7 100644 --- a/gitdb/test/performance/lib.py +++ b/gitdb/test/performance/lib.py @@ -4,6 +4,7 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains library functions""" import os +import logging from gitdb.test.lib import TestBase @@ -12,17 +13,6 @@ #} END invariants -#{ Utilities -def resolve_or_fail(env_var): - """:return: resolved environment variable or raise EnvironmentError""" - try: - return os.environ[env_var] - except KeyError: - raise EnvironmentError("Please set the %r envrionment variable and retry" % env_var) - # END exception handling - -#} END utilities - #{ Base Classes @@ -39,14 +29,19 @@ class TestBigRepoR(TestBase): head_sha_50 = '32347c375250fd470973a5d76185cac718955fd5' #} END invariants - @classmethod - def setUpAll(cls): + def setUp(self): try: - super(TestBigRepoR, cls).setUpAll() + super(TestBigRepoR, self).setUp() except AttributeError: pass - cls.gitrepopath = resolve_or_fail(k_env_git_repo) - assert cls.gitrepopath.endswith('.git') + + self.gitrepopath = os.environ.get(k_env_git_repo) + if not self.gitrepopath: + logging.info("You can set the %s environment variable to a .git repository of your choice - defaulting to the gitdb repository") + ospd = os.path.dirname + self.gitrepopath = os.path.join(ospd(ospd(ospd(ospd(__file__)))), '.git') + # end assure gitrepo is set + assert self.gitrepopath.endswith('.git') #} END base classes diff --git a/gitdb/test/performance/test_pack.py b/gitdb/test/performance/test_pack.py index b18e31ae6..b52e46fec 100644 --- a/gitdb/test/performance/test_pack.py +++ b/gitdb/test/performance/test_pack.py @@ -3,9 +3,11 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Performance tests for object store""" -from lib import ( +from __future__ import print_function + +from gitdb.test.performance.lib import ( TestBigRepoR - ) +) from gitdb.exc import UnsupportedOperation from gitdb.db.pack import PackedDB @@ -15,8 +17,6 @@ import os from time import time -from nose import SkipTest - class TestPackedDBPerformance(TestBigRepoR): def test_pack_random_access(self): @@ -27,7 +27,7 @@ def test_pack_random_access(self): sha_list = list(pdb.sha_iter()) elapsed = time() - st ns = len(sha_list) - print >> sys.stderr, "PDB: looked up %i shas by index in %f s ( %f shas/s )" % (ns, elapsed, ns / elapsed) + print("PDB: looked up %i shas by index in %f s ( %f shas/s )" % (ns, elapsed, ns / elapsed), file=sys.stderr) # sha lookup: best-case and worst case access pdb_pack_info = pdb._pack_info @@ -41,7 +41,7 @@ def test_pack_random_access(self): # discard cache del(pdb._entities) pdb.entities() - print >> sys.stderr, "PDB: looked up %i sha in %i packs in %f s ( %f shas/s )" % (ns, len(pdb.entities()), elapsed, ns / elapsed) + print("PDB: looked up %i sha in %i packs in %f s ( %f shas/s )" % (ns, len(pdb.entities()), elapsed, ns / elapsed), file=sys.stderr) # END for each random mode # query info and streams only @@ -51,7 +51,7 @@ def test_pack_random_access(self): for sha in sha_list[:max_items]: pdb_fun(sha) elapsed = time() - st - print >> sys.stderr, "PDB: Obtained %i object %s by sha in %f s ( %f items/s )" % (max_items, pdb_fun.__name__.upper(), elapsed, max_items / elapsed) + print("PDB: Obtained %i object %s by sha in %f s ( %f items/s )" % (max_items, pdb_fun.__name__.upper(), elapsed, max_items / elapsed), file=sys.stderr) # END for each function # retrieve stream and read all @@ -65,13 +65,12 @@ def test_pack_random_access(self): total_size += stream.size elapsed = time() - st total_kib = total_size / 1000 - print >> sys.stderr, "PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (max_items, total_kib, total_kib/elapsed , elapsed, max_items / elapsed) + print("PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (max_items, total_kib, total_kib/elapsed , elapsed, max_items / elapsed), file=sys.stderr) def test_correctness(self): - raise SkipTest("Takes too long, enable it if you change the algorithm and want to be sure you decode packs correctly") pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) # disabled for now as it used to work perfectly, checking big repositories takes a long time - print >> sys.stderr, "Endurance run: verify streaming of objects (crc and sha)" + print("Endurance run: verify streaming of objects (crc and sha)", file=sys.stderr) for crc in range(2): count = 0 st = time() @@ -88,6 +87,6 @@ def test_correctness(self): # END for each index # END for each entity elapsed = time() - st - print >> sys.stderr, "PDB: verified %i objects (crc=%i) in %f s ( %f objects/s )" % (count, crc, elapsed, count / elapsed) + print("PDB: verified %i objects (crc=%i) in %f s ( %f objects/s )" % (count, crc, elapsed, count / elapsed), file=sys.stderr) # END for each verify mode diff --git a/gitdb/test/performance/test_pack_streaming.py b/gitdb/test/performance/test_pack_streaming.py index 297426303..b1001f85b 100644 --- a/gitdb/test/performance/test_pack_streaming.py +++ b/gitdb/test/performance/test_pack_streaming.py @@ -3,9 +3,11 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Specific test for pack streams only""" -from lib import ( +from __future__ import print_function + +from gitdb.test.performance.lib import ( TestBigRepoR - ) +) from gitdb.db.pack import PackedDB from gitdb.stream import NullStream @@ -14,7 +16,6 @@ import os import sys from time import time -from nose import SkipTest class CountedNullStream(NullStream): __slots__ = '_bw' @@ -36,7 +37,7 @@ def test_pack_writing(self): ostream = CountedNullStream() pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) - ni = 5000 + ni = 1000 count = 0 st = time() for sha in pdb.sha_iter(): @@ -46,17 +47,17 @@ def test_pack_writing(self): break #END gather objects for pack-writing elapsed = time() - st - print >> sys.stderr, "PDB Streaming: Got %i streams by sha in in %f s ( %f streams/s )" % (ni, elapsed, ni / elapsed) + print("PDB Streaming: Got %i streams by sha in in %f s ( %f streams/s )" % (ni, elapsed, ni / elapsed), file=sys.stderr) st = time() PackEntity.write_pack((pdb.stream(sha) for sha in pdb.sha_iter()), ostream.write, object_count=ni) elapsed = time() - st total_kb = ostream.bytes_written() / 1000 - print >> sys.stderr, "PDB Streaming: Wrote pack of size %i kb in %f s (%f kb/s)" % (total_kb, elapsed, total_kb/elapsed) + print(sys.stderr, "PDB Streaming: Wrote pack of size %i kb in %f s (%f kb/s)" % (total_kb, elapsed, total_kb/elapsed), sys.stderr) def test_stream_reading(self): - raise SkipTest() + # raise SkipTest() pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) # streaming only, meant for --with-profile runs @@ -74,5 +75,5 @@ def test_stream_reading(self): count += 1 elapsed = time() - st total_kib = total_size / 1000 - print >> sys.stderr, "PDB Streaming: Got %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (ni, total_kib, total_kib/elapsed , elapsed, ni / elapsed) + print(sys.stderr, "PDB Streaming: Got %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (ni, total_kib, total_kib/elapsed , elapsed, ni / elapsed), sys.stderr) diff --git a/gitdb/test/performance/test_stream.py b/gitdb/test/performance/test_stream.py index 929c7e537..9d695a047 100644 --- a/gitdb/test/performance/test_stream.py +++ b/gitdb/test/performance/test_stream.py @@ -3,9 +3,11 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Performance data streaming performance""" -from lib import TestBigRepoR +from __future__ import print_function + +from gitdb.test.performance.lib import TestBigRepoR from gitdb.db import LooseObjectDB -from gitdb.stream import IStream +from gitdb import IStream from gitdb.util import bin_to_hex from gitdb.fun import chunk_size @@ -15,7 +17,7 @@ import sys -from lib import ( +from gitdb.test.lib import ( make_memory_file, with_rw_directory ) @@ -49,11 +51,11 @@ def test_large_data_streaming(self, path): # serial mode for randomize in range(2): desc = (randomize and 'random ') or '' - print >> sys.stderr, "Creating %s data ..." % desc + print("Creating %s data ..." % desc, file=sys.stderr) st = time() size, stream = make_memory_file(self.large_data_size_bytes, randomize) elapsed = time() - st - print >> sys.stderr, "Done (in %f s)" % elapsed + print("Done (in %f s)" % elapsed, file=sys.stderr) string_ios.append(stream) # writing - due to the compression it will seem faster than it is @@ -66,7 +68,7 @@ def test_large_data_streaming(self, path): size_kib = size / 1000 - print >> sys.stderr, "Added %i KiB (filesize = %i KiB) of %s data to loose odb in %f s ( %f Write KiB / s)" % (size_kib, fsize_kib, desc, elapsed_add, size_kib / elapsed_add) + print("Added %i KiB (filesize = %i KiB) of %s data to loose odb in %f s ( %f Write KiB / s)" % (size_kib, fsize_kib, desc, elapsed_add, size_kib / elapsed_add), file=sys.stderr) # reading all at once st = time() @@ -76,7 +78,7 @@ def test_large_data_streaming(self, path): stream.seek(0) assert shadata == stream.getvalue() - print >> sys.stderr, "Read %i KiB of %s data at once from loose odb in %f s ( %f Read KiB / s)" % (size_kib, desc, elapsed_readall, size_kib / elapsed_readall) + print("Read %i KiB of %s data at once from loose odb in %f s ( %f Read KiB / s)" % (size_kib, desc, elapsed_readall, size_kib / elapsed_readall), file=sys.stderr) # reading in chunks of 1 MiB @@ -93,10 +95,10 @@ def test_large_data_streaming(self, path): elapsed_readchunks = time() - st stream.seek(0) - assert ''.join(chunks) == stream.getvalue() + assert b''.join(chunks) == stream.getvalue() cs_kib = cs / 1000 - print >> sys.stderr, "Read %i KiB of %s data in %i KiB chunks from loose odb in %f s ( %f Read KiB / s)" % (size_kib, desc, cs_kib, elapsed_readchunks, size_kib / elapsed_readchunks) + print("Read %i KiB of %s data in %i KiB chunks from loose odb in %f s ( %f Read KiB / s)" % (size_kib, desc, cs_kib, elapsed_readchunks, size_kib / elapsed_readchunks), file=sys.stderr) # del db file so we keep something to do os.remove(db_file) From 232cf20efaef4218a71c348b0f59c5e59c59cbdb Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 14 Nov 2014 10:43:28 +0100 Subject: [PATCH 0267/2375] Fixed incorrect computation of compressed bytes read in zlib decompression stream. --- gitdb/stream.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gitdb/stream.py b/gitdb/stream.py index e32fcf380..0332df6e4 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -275,7 +275,10 @@ def read(self, size=-1): # We feed possibly overlapping chunks, which is why the unconsumed tail # has to be taken into consideration, as well as the unused data # if we hit the end of the stream - self._cbr += len(indata) - len(self._zip.unconsumed_tail) + # NOTE: For some reason, the code worked for a long time with substracting unconsumed_tail + # Now, however, it really asks for unused_data, and I wonder whether unconsumed_tail still has to + # be substracted. On the plus side, the tests work, so it seems to be ok for py 2.7 and 3.4 + self._cbr += len(indata) - len(self._zip.unconsumed_tail) - len(self._zip.unused_data) self._br += len(dcompdat) if dat: From 6f71b8a90250ed03f2e7de2e61d22e84c0fbb2ff Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 14 Nov 2014 11:04:23 +0100 Subject: [PATCH 0268/2375] Fixed .travis file to allow tests to work correctly. Previously, submodules were not initalized, which could have had an effect ... . Even though it shouldn't, but lets just try it. --- .travis.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cf1d13666..db7c2bc66 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,4 +6,11 @@ python: - "3.4" # - "pypy" - won't work as smmap doesn't work (see smmap/.travis.yml for details) -script: nosetests +install: + - git submodule update --init --recursive + - pip install coveralls +script: + - nosetests +after_success: + - coveralls + From b9d189d35073cc80ddbfa61269c65785264880f3 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 14 Nov 2014 11:29:18 +0100 Subject: [PATCH 0269/2375] Added requirements.txt for pip, and optimized test-suite performance on travis. With a bit of luck, this one will just work now. --- .travis.yml | 1 - README.rst | 33 +++++++++++-------- doc/source/intro.rst | 8 ++--- gitdb/test/db/test_git.py | 4 ++- gitdb/test/lib.py | 16 +++++++++ gitdb/test/performance/__init__.py | 1 + gitdb/test/performance/test_pack.py | 5 ++- gitdb/test/performance/test_pack_streaming.py | 3 ++ gitdb/test/performance/test_stream.py | 6 ++-- requirements.txt | 2 ++ setup.py | 2 +- 11 files changed, 56 insertions(+), 25 deletions(-) create mode 100644 gitdb/test/performance/__init__.py create mode 100644 requirements.txt diff --git a/.travis.yml b/.travis.yml index db7c2bc66..10b5e161b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,6 @@ python: # - "pypy" - won't work as smmap doesn't work (see smmap/.travis.yml for details) install: - - git submodule update --init --recursive - pip install coveralls script: - nosetests diff --git a/README.rst b/README.rst index f97d5c31e..194e24658 100644 --- a/README.rst +++ b/README.rst @@ -1,10 +1,7 @@ GitDB ===== -GitDB allows you to access bare git repositories for reading and writing. It -aims at allowing full access to loose objects as well as packs with performance -and scalability in mind. It operates exclusively on streams, allowing to operate -on large objects with a small memory footprint. +GitDB allows you to access bare git repositories for reading and writing. It aims at allowing full access to loose objects as well as packs with performance and scalability in mind. It operates exclusively on streams, allowing to handle large objects with a small memory footprint. Installation ============ @@ -23,13 +20,13 @@ From `PyPI `_ REQUIREMENTS ============ -* Python Nose - for running the tests +* Python Nose - for running the tests SOURCE ====== The source is available in a git repository at gitorious and github: -git://github.com/gitpython-developers/gitdb.git +https://github.com/gitpython-developers/gitdb Once the clone is complete, please be sure to initialize the submodules using @@ -40,17 +37,25 @@ Run the tests with nosetests -MAILING LIST -============ -http://groups.google.com/group/git-python - -ISSUE TRACKER -============= +DEVELOPMENT +=========== .. image:: https://travis-ci.org/gitpython-developers/gitdb.svg?branch=master :target: https://travis-ci.org/gitpython-developers/gitdb - -https://github.com/gitpython-developers/gitdb/issues + +.. image:: https://coveralls.io/repos/gitpython-developers/gitdb/badge.png + :target: https://coveralls.io/r/gitpython-developers/gitdb + +The library is considered mature, and not under active development. It's primary (known) use is in git-python. + +INFRASTRUCTURE +============== + +* Mailing List + * http://groups.google.com/group/git-python + +* Issue Tracker + * https://github.com/gitpython-developers/gitdb/issues LICENSE ======= diff --git a/doc/source/intro.rst b/doc/source/intro.rst index 8fc0ec098..434138616 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -11,9 +11,9 @@ Interfaces are used to describe the API, making it easy to provide alternate imp ================ Installing GitDB ================ -Its easiest to install gitdb using the *easy_install* program, which is part of the `setuptools`_:: +Its easiest to install gitdb using the *pip* program:: - $ easy_install gitdb + $ pip install gitdb As the command will install gitdb in your respective python distribution, you will most likely need root permissions to authorize the required changes. @@ -31,10 +31,8 @@ Source Repository ================= The latest source can be cloned using git from github: - * git://github.com/gitpython-developers/gitdb.git + * https://github.com/gitpython-developers/gitdb License Information =================== *GitDB* is licensed under the New BSD License. - -.. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools diff --git a/gitdb/test/db/test_git.py b/gitdb/test/db/test_git.py index 56899e579..e141c2ba0 100644 --- a/gitdb/test/db/test_git.py +++ b/gitdb/test/db/test_git.py @@ -24,9 +24,11 @@ def test_reading(self): gitdb_sha = hex_to_bin("5690fd0d3304f378754b23b098bd7cb5f4aa1976") assert isinstance(gdb.info(gitdb_sha), OInfo) assert isinstance(gdb.stream(gitdb_sha), OStream) - assert gdb.size() > 200 + ni = 50 + assert gdb.size() >= ni sha_list = list(gdb.sha_iter()) assert len(sha_list) == gdb.size() + sha_list = sha_list[:ni] # speed up tests ... # This is actually a test for compound functionality, but it doesn't diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index ba653c91f..d09b1cb8e 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -18,6 +18,7 @@ import shutil import os import gc +from functools import wraps #{ Bases @@ -30,6 +31,21 @@ class TestBase(unittest.TestCase): #{ Decorators +def skip_on_travis_ci(func): + """All tests decorated with this one will raise SkipTest when run on travis ci. + Use it to workaround difficult to solve issues + NOTE: copied from bcore (https://github.com/Byron/bcore)""" + @wraps(func) + def wrapper(self, *args, **kwargs): + if 'TRAVIS' in os.environ: + import nose + raise nose.SkipTest("Cannot run on travis-ci") + # end check for travis ci + return func(self, *args, **kwargs) + # end wrapper + return wrapper + + def with_rw_directory(func): """Create a temporary directory which can be written to, remove it if the test suceeds, but leave it otherwise to aid additional debugging""" diff --git a/gitdb/test/performance/__init__.py b/gitdb/test/performance/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/gitdb/test/performance/__init__.py @@ -0,0 +1 @@ + diff --git a/gitdb/test/performance/test_pack.py b/gitdb/test/performance/test_pack.py index b52e46fec..db3b48de5 100644 --- a/gitdb/test/performance/test_pack.py +++ b/gitdb/test/performance/test_pack.py @@ -12,13 +12,15 @@ from gitdb.exc import UnsupportedOperation from gitdb.db.pack import PackedDB from gitdb.utils.compat import xrange +from gitdb.test.lib import skip_on_travis_ci import sys import os from time import time class TestPackedDBPerformance(TestBigRepoR): - + + @skip_on_travis_ci def test_pack_random_access(self): pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) @@ -67,6 +69,7 @@ def test_pack_random_access(self): total_kib = total_size / 1000 print("PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (max_items, total_kib, total_kib/elapsed , elapsed, max_items / elapsed), file=sys.stderr) + @skip_on_travis_ci def test_correctness(self): pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) # disabled for now as it used to work perfectly, checking big repositories takes a long time diff --git a/gitdb/test/performance/test_pack_streaming.py b/gitdb/test/performance/test_pack_streaming.py index b1001f85b..fe160ea54 100644 --- a/gitdb/test/performance/test_pack_streaming.py +++ b/gitdb/test/performance/test_pack_streaming.py @@ -12,6 +12,7 @@ from gitdb.db.pack import PackedDB from gitdb.stream import NullStream from gitdb.pack import PackEntity +from gitdb.test.lib import skip_on_travis_ci import os import sys @@ -31,6 +32,7 @@ def write(self, d): class TestPackStreamingPerformance(TestBigRepoR): + @skip_on_travis_ci def test_pack_writing(self): # see how fast we can write a pack from object streams. # This will not be fast, as we take time for decompressing the streams as well @@ -56,6 +58,7 @@ def test_pack_writing(self): print(sys.stderr, "PDB Streaming: Wrote pack of size %i kb in %f s (%f kb/s)" % (total_kb, elapsed, total_kb/elapsed), sys.stderr) + @skip_on_travis_ci def test_stream_reading(self): # raise SkipTest() pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) diff --git a/gitdb/test/performance/test_stream.py b/gitdb/test/performance/test_stream.py index 9d695a047..84c9dea3f 100644 --- a/gitdb/test/performance/test_stream.py +++ b/gitdb/test/performance/test_stream.py @@ -19,7 +19,8 @@ from gitdb.test.lib import ( make_memory_file, - with_rw_directory + with_rw_directory, + skip_on_travis_ci ) @@ -42,7 +43,8 @@ class TestObjDBPerformance(TestBigRepoR): large_data_size_bytes = 1000*1000*50 # some MiB should do it moderate_data_size_bytes = 1000*1000*1 # just 1 MiB - + + @skip_on_travis_ci @with_rw_directory def test_large_data_streaming(self, path): ldb = LooseObjectDB(path) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..8a4cd3979 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +gitdb +smmap>=0.8.3 \ No newline at end of file diff --git a/setup.py b/setup.py index e01c6b475..dc142c518 100755 --- a/setup.py +++ b/setup.py @@ -89,7 +89,7 @@ def get_data_files(self): license = "BSD License", zip_safe=False, requires=('smmap (>=0.8.3)', ), - install_requires=('smmap >= 0.8.0'), + install_requires=('smmap >= 0.8.3'), long_description = """GitDB is a pure-Python git object database""", # See https://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ From 0bb576427f899631fbbbb822c6d3058174f96847 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 14 Nov 2014 11:37:12 +0100 Subject: [PATCH 0270/2375] Allow our clone to be deeper to help tests to work --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 10b5e161b..8a9e0afa6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,9 @@ python: - "3.4" # - "pypy" - won't work as smmap doesn't work (see smmap/.travis.yml for details) +git: + # a higher depth is needed for one of the tests - lets fet + depth: 1000 install: - pip install coveralls script: From e7fdd949d0cb2c42c9217e3c7009eb28c6b53446 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 14 Nov 2014 12:07:13 +0100 Subject: [PATCH 0271/2375] Now I am skipping a problematic test on travis CI. Maybe I can find a py 2.6 interpreter somewhere to reproduce it. --- .travis.yml | 2 +- gitdb/test/test_stream.py | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8a9e0afa6..761edc19b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ git: install: - pip install coveralls script: - - nosetests + - nosetests -v after_success: - coveralls diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index 671a146da..f8d9f5dcd 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -27,7 +27,8 @@ import tempfile import os - +import sys +from nose import SkipTest class TestStream(TestBase): """Test stream classes""" @@ -70,10 +71,16 @@ def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): # END handle special type def test_decompress_reader(self): + cache = dict() for close_on_deletion in range(2): for with_size in range(2): for ds in self.data_sizes: - cdata = make_bytes(ds, randomize=False) + if ds in cache: + cdata = cache[ds] + else: + cdata = make_bytes(ds, randomize=False) + cache[ds] = cdata + # end handle caching (maybe helps on py2.6 ?) # zdata = zipped actual data # cdata = original content data @@ -121,6 +128,9 @@ def test_sha_writer(self): assert writer.sha() != prev_sha def test_compressed_writer(self): + if sys.version_info[:2] < (2,7) and os.environ.get('TRAVIS'): + raise SkipTest("For some reason, this test STALLS on travis ci on py2.6, but works on my centos py2.6 interpreter") + # end special case ... for ds in self.data_sizes: fd, path = tempfile.mkstemp() ostream = FDCompressedSha1Writer(fd) From 0dcec5a27b341ce58e5ab169f91aa25b2cafec0c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 14 Nov 2014 12:39:09 +0100 Subject: [PATCH 0272/2375] It seems zlib works differently in py26, and thus requires special handling. This also explains why the tests suddenly stopped working - after all, the interpreter changed ... . --- gitdb/stream.py | 15 ++++++++++----- gitdb/test/test_stream.py | 13 +------------ 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/gitdb/stream.py b/gitdb/stream.py index 0332df6e4..edd6dd2b1 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -7,6 +7,7 @@ import mmap import os +import sys import zlib from gitdb.fun import ( @@ -30,6 +31,7 @@ from gitdb.utils.encoding import force_bytes has_perf_mod = False +PY26 = sys.version_info[:2] < (2, 7) try: from _perf import apply_delta as c_apply_delta has_perf_mod = True @@ -275,10 +277,14 @@ def read(self, size=-1): # We feed possibly overlapping chunks, which is why the unconsumed tail # has to be taken into consideration, as well as the unused data # if we hit the end of the stream - # NOTE: For some reason, the code worked for a long time with substracting unconsumed_tail - # Now, however, it really asks for unused_data, and I wonder whether unconsumed_tail still has to - # be substracted. On the plus side, the tests work, so it seems to be ok for py 2.7 and 3.4 - self._cbr += len(indata) - len(self._zip.unconsumed_tail) - len(self._zip.unused_data) + # NOTE: Behavior changed in PY2.7 onward, which requires special handling to make the tests work properly. + # They are thorough, and I assume it is truly working. + if PY26: + unused_datalen = len(self._zip.unconsumed_tail) + else: + unused_datalen = len(self._zip.unconsumed_tail) + len(self._zip.unused_data) + # end handle very special case ... + self._cbr += len(indata) - unused_datalen self._br += len(dcompdat) if dat: @@ -505,7 +511,6 @@ def new(cls, stream_list): if stream_list[-1].type_id in delta_types: raise ValueError("Cannot resolve deltas if there is no base object stream, last one was type: %s" % stream_list[-1].type) # END check stream - return cls(stream_list) #} END interface diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index f8d9f5dcd..50db44b1d 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -27,8 +27,6 @@ import tempfile import os -import sys -from nose import SkipTest class TestStream(TestBase): """Test stream classes""" @@ -71,16 +69,10 @@ def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): # END handle special type def test_decompress_reader(self): - cache = dict() for close_on_deletion in range(2): for with_size in range(2): for ds in self.data_sizes: - if ds in cache: - cdata = cache[ds] - else: - cdata = make_bytes(ds, randomize=False) - cache[ds] = cdata - # end handle caching (maybe helps on py2.6 ?) + cdata = make_bytes(ds, randomize=False) # zdata = zipped actual data # cdata = original content data @@ -128,9 +120,6 @@ def test_sha_writer(self): assert writer.sha() != prev_sha def test_compressed_writer(self): - if sys.version_info[:2] < (2,7) and os.environ.get('TRAVIS'): - raise SkipTest("For some reason, this test STALLS on travis ci on py2.6, but works on my centos py2.6 interpreter") - # end special case ... for ds in self.data_sizes: fd, path = tempfile.mkstemp() ostream = FDCompressedSha1Writer(fd) From 59589e0fddfc9f3ea318dd7b3c0ef5b4e1bb665c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 14 Nov 2014 14:57:01 +0100 Subject: [PATCH 0273/2375] Added pypi badges [ skip ci ] --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 327d66372..8c9ae4251 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,9 @@ The package was tested on all of the previously mentioned configurations. ## Installing smmap +[![Latest Version](https://pypip.in/version/smmap/badge.svg)](https://pypi.python.org/pypi/smmap/) +[![Supported Python versions](https://pypip.in/py_versions/smmap/badge.svg)](https://pypi.python.org/pypi/smmap/) + Its easiest to install smmap using the [pip](http://www.pip-installer.org/en/latest) program: ```bash From f4b6b2508cf164be237b2fdeaca01be7153efe8c Mon Sep 17 00:00:00 2001 From: Antoine Musso Date: Sun, 16 Nov 2014 22:24:34 +0100 Subject: [PATCH 0274/2375] Add tox env for flake8 linter Most people know about pep8 which enforce coding style. pyflakes goes a step beyond by analyzing the code. flake8 is basically a wrapper around both pep8 and pyflakes and comes with some additional checks. I find it very useful since you only need to require one package to have a lot of code issues reported to you. This patch provides a 'flake8' tox environement to easily install and run the utility on the code base. One simply has to: tox -eflake8 The env has been added to the default list of environement to have flake8 run by default. Configuration tweaking is done in setup.cfg [flake8] section. The repository in its current state does not pass checks We can later easily ensure there is no regression by adjusting Travis configuration to run this env. More informations about flake8: https://pypi.python.org/pypi/flake8 --- setup.cfg | 3 +++ tox.ini | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index 2a9acf13d..83a51c4b9 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,2 +1,5 @@ [bdist_wheel] universal = 1 + +[flake8] +exclude = .tox,.venv,build,dist,doc diff --git a/tox.ini b/tox.ini index e0e196418..35b813753 100644 --- a/tox.ini +++ b/tox.ini @@ -4,10 +4,14 @@ # and then run "tox" from this directory. [tox] -envlist = py26, py27, py33, py34 +envlist = flake8, py26, py27, py33, py34 [testenv] commands = nosetests {posargs:--with-coverage --cover-package=smmap} deps = nose nosexcover + +[testenv:flake8] +commands = flake8 {posargs} +deps = flake8 From 01dac15d2d2ad916083559747c3df497921cdec9 Mon Sep 17 00:00:00 2001 From: Antoine Musso Date: Sun, 16 Nov 2014 22:26:49 +0100 Subject: [PATCH 0275/2375] pep8 linting E201 whitespace after '(' E203 whitespace before ',' E221 multiple spaces before operator E225 missing whitespace around operator E227 missing whitespace around bitwise or shift operator E231 missing whitespace after ',' E251 unexpected spaces around keyword / parameter equals W291 trailing whitespace W293 blank line contains whitespace E302 expected 2 blank lines, found 1 E303 too many blank lines (3) W391 blank line at end of file --- smmap/buf.py | 47 ++++--- smmap/exc.py | 6 +- smmap/mman.py | 249 ++++++++++++++++++------------------ smmap/test/lib.py | 22 ++-- smmap/test/test_buf.py | 7 +- smmap/test/test_mman.py | 3 +- smmap/test/test_tutorial.py | 40 +++--- smmap/test/test_util.py | 51 ++++---- smmap/util.py | 93 +++++++------- 9 files changed, 258 insertions(+), 260 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index ef9d49e46..66029cb99 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -10,12 +10,12 @@ class SlidingWindowMapBuffer(object): - """A buffer like object which allows direct byte-wise object and slicing into + """A buffer like object which allows direct byte-wise object and slicing into memory of a mapped file. The mapping is controlled by the provided cursor. - - The buffer is relative, that is if you map an offset, index 0 will map to the + + The buffer is relative, that is if you map an offset, index 0 will map to the first byte at the offset you used during initialization or begin_access - + **Note:** Although this type effectively hides the fact that there are mapped windows underneath, it can unfortunately not be used in any non-pure python method which needs a buffer or string""" @@ -23,12 +23,11 @@ class SlidingWindowMapBuffer(object): '_c', # our cursor '_size', # our supposed size ) - - - def __init__(self, cursor = None, offset = 0, size = sys.maxsize, flags = 0): + + def __init__(self, cursor=None, offset=0, size=sys.maxsize, flags=0): """Initalize the instance to operate on the given cursor. :param cursor: if not None, the associated cursor to the file you want to access - If None, you have call begin_access before using the buffer and provide a cursor + If None, you have call begin_access before using the buffer and provide a cursor :param offset: absolute offset in bytes :param size: the total size of the mapping. Defaults to the maximum possible size From that point on, the __len__ of the buffer will be the given size or the file size. @@ -44,10 +43,10 @@ def __init__(self, cursor = None, offset = 0, size = sys.maxsize, flags = 0): def __del__(self): self.end_access() - + def __len__(self): return self._size - + def __getitem__(self, i): if isinstance(i, slice): return self.__getslice__(i.start or 0, i.stop or self._size) @@ -59,10 +58,10 @@ def __getitem__(self, i): c.use_region(i, 1) # END handle region usage return c.buffer()[i-c.ofs_begin()] - + def __getslice__(self, i, j): c = self._c - # fast path, slice fully included - safes a concatenate operation and + # fast path, slice fully included - safes a concatenate operation and # should be the default assert c.is_valid() if i < 0: @@ -91,18 +90,18 @@ def __getslice__(self, i, j): return bytes().join(md) # END fast or slow path #{ Interface - - def begin_access(self, cursor = None, offset = 0, size = sys.maxsize, flags = 0): + + def begin_access(self, cursor=None, offset=0, size=sys.maxsize, flags=0): """Call this before the first use of this instance. The method was already called by the constructor in case sufficient information was provided. - + For more information no the parameters, see the __init__ method - :param path: if cursor is None the existing one will be used. + :param path: if cursor is None the existing one will be used. :return: True if the buffer can be used""" if cursor: self._c = cursor #END update our cursor - + # reuse existing cursors if possible if self._c is not None and self._c.is_associated(): res = self._c.use_region(offset, size, flags).is_valid() @@ -114,27 +113,25 @@ def begin_access(self, cursor = None, offset = 0, size = sys.maxsize, flags = 0) if size > self._c.file_size(): size = self._c.file_size() - offset #END handle size - self._size = size + self._size = size #END set size return res # END use our cursor return False - + def end_access(self): - """Call this method once you are done using the instance. It is automatically + """Call this method once you are done using the instance. It is automatically called on destruction, and should be called just in time to allow system resources to be freed. - + Once you called end_access, you must call begin access before reusing this instance!""" self._size = 0 if self._c is not None: self._c.unuse_region() #END unuse region - + def cursor(self): """:return: the currently set cursor which provides access to the data""" return self._c - - #}END interface - + #}END interface diff --git a/smmap/exc.py b/smmap/exc.py index f0ed7dcd8..5e90cf722 100644 --- a/smmap/exc.py +++ b/smmap/exc.py @@ -1,7 +1,9 @@ """Module with system exceptions""" + class MemoryManagerError(Exception): """Base class for all exceptions thrown by the memory manager""" - + + class RegionCollectionError(MemoryManagerError): - """Thrown if a memory region could not be collected, or if no region for collection was found""" + """Thrown if a memory region could not be collected, or if no region for collection was found""" diff --git a/smmap/mman.py b/smmap/mman.py index da6fd8153..6663687d0 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -20,36 +20,36 @@ class WindowCursor(object): """ - Pointer into the mapped region of the memory manager, keeping the map + Pointer into the mapped region of the memory manager, keeping the map alive until it is destroyed and no other client uses it. Cursors should not be created manually, but are instead returned by the SlidingWindowMapManager - - **Note:**: The current implementation is suited for static and sliding window managers, but it also means - that it must be suited for the somewhat quite different sliding manager. It could be improved, but + + **Note:**: The current implementation is suited for static and sliding window managers, but it also means + that it must be suited for the somewhat quite different sliding manager. It could be improved, but I see no real need to do so.""" - __slots__ = ( + __slots__ = ( '_manager', # the manger keeping all file regions '_rlist', # a regions list with regions for our file '_region', # our current region or None '_ofs', # relative offset from the actually mapped area to our start area '_size' # maximum size we should provide ) - - def __init__(self, manager = None, regions = None): + + def __init__(self, manager=None, regions=None): self._manager = manager self._rlist = regions self._region = None self._ofs = 0 self._size = 0 - + def __del__(self): self._destroy() - + def _destroy(self): """Destruction code to decrement counters""" self.unuse_region() - + if self._rlist is not None: # Actual client count, which doesn't include the reference kept by the manager, nor ours # as we are about to be deleted @@ -67,7 +67,7 @@ def _destroy(self): pass #END exception handling #END handle regions - + def _copy_from(self, rhs): """Copy all data from rhs into this instance, handles usage count""" self._manager = rhs._manager @@ -75,41 +75,41 @@ def _copy_from(self, rhs): self._region = rhs._region self._ofs = rhs._ofs self._size = rhs._size - + if self._region is not None: self._region.increment_usage_count() # END handle regions - + def __copy__(self): """copy module interface""" cpy = type(self)() cpy._copy_from(self) return cpy - + #{ Interface def assign(self, rhs): """Assign rhs to this instance. This is required in order to get a real copy. Alternativly, you can copy an existing instance using the copy module""" self._destroy() self._copy_from(rhs) - - def use_region(self, offset = 0, size = 0, flags = 0): + + def use_region(self, offset=0, size=0, flags=0): """Assure we point to a window which allows access to the given offset into the file - + :param offset: absolute offset in bytes into the file :param size: amount of bytes to map. If 0, all available bytes will be mapped :param flags: additional flags to be given to os.open in case a file handle is initially opened for mapping. Has no effect if a region can actually be reused. :return: this instance - it should be queried for whether it points to a valid memory region. This is not the case if the mapping failed because we reached the end of the file - + **Note:**: The size actually mapped may be smaller than the given size. If that is the case, either the file has reached its end, or the map was created between two existing regions""" need_region = True man = self._manager fsize = self._rlist.file_size() size = min(size or fsize, man.window_size() or fsize) # clamp size to window size - + if self._region is not None: if self._region.includes_ofs(offset): need_region = False @@ -117,91 +117,91 @@ def use_region(self, offset = 0, size = 0, flags = 0): self.unuse_region() # END handle existing region # END check existing region - + # offset too large ? if offset >= fsize: return self #END handle offset - + if need_region: self._region = man._obtain_region(self._rlist, offset, size, flags, False) #END need region handling - + self._region.increment_usage_count() self._ofs = offset - self._region._b self._size = min(size, self._region.ofs_end() - offset) - + return self - + def unuse_region(self): """Unuse the ucrrent region. Does nothing if we have no current region - + **Note:** the cursor unuses the region automatically upon destruction. It is recommended - to un-use the region once you are done reading from it in persistent cursors as it + to un-use the region once you are done reading from it in persistent cursors as it helps to free up resource more quickly""" self._region = None - # note: should reset ofs and size, but we spare that for performance. Its not + # note: should reset ofs and size, but we spare that for performance. Its not # allowed to query information if we are not valid ! def buffer(self): """Return a buffer object which allows access to our memory region from our offset to the window size. Please note that it might be smaller than you requested when calling use_region() - + **Note:** You can only obtain a buffer if this instance is_valid() ! - - **Note:** buffers should not be cached passed the duration of your access as it will + + **Note:** buffers should not be cached passed the duration of your access as it will prevent resources from being freed even though they might not be accounted for anymore !""" return buffer(self._region.buffer(), self._ofs, self._size) - + def map(self): """ :return: the underlying raw memory map. Please not that the offset and size is likely to be different to what you set as offset and size. Use it only if you are sure about the region it maps, which is the whole file in case of StaticWindowMapManager""" return self._region.map() - + def is_valid(self): """:return: True if we have a valid and usable region""" return self._region is not None - + def is_associated(self): """:return: True if we are associated with a specific file already""" return self._rlist is not None - + def ofs_begin(self): """:return: offset to the first byte pointed to by our cursor - + **Note:** only if is_valid() is True""" return self._region._b + self._ofs - + def ofs_end(self): """:return: offset to one past the last available byte""" # unroll method calls for performance ! return self._region._b + self._ofs + self._size - + def size(self): """:return: amount of bytes we point to""" return self._size - + def region_ref(self): """:return: weak ref to our mapped region. :raise AssertionError: if we have no current region. This is only useful for debugging""" if self._region is None: raise AssertionError("region not set") return ref(self._region) - + def includes_ofs(self, ofs): - """:return: True if the given absolute offset is contained in the cursors + """:return: True if the given absolute offset is contained in the cursors current region - + **Note:** cursor must be valid for this to work""" # unroll methods return (self._region._b + self._ofs) <= ofs < (self._region._b + self._ofs + self._size) - + def file_size(self): """:return: size of the underlying file""" return self._rlist.file_size() - + def path_or_fd(self): """:return: path or file descriptor of the underlying mapped file""" return self._rlist.path_or_fd() @@ -213,32 +213,32 @@ def path(self): raise ValueError("Path queried although mapping was applied to a file descriptor") # END handle type return self._rlist.path_or_fd() - + def fd(self): """:return: file descriptor used to create the underlying mapping. - + **Note:** it is not required to be valid anymore :raise ValueError: if the mapping was not created by a file descriptor""" if isinstance(self._rlist.path_or_fd(), string_types()): raise ValueError("File descriptor queried although mapping was generated from path") #END handle type return self._rlist.path_or_fd() - + #} END interface - - + + class StaticWindowMapManager(object): """Provides a manager which will produce single size cursors that are allowed to always map the whole file. - + Clients must be written to specifically know that they are accessing their data through a StaticWindowMapManager, as they otherwise have to deal with their window size. - + These clients would have to use a SlidingWindowMapBuffer to hide this fact. - - This type will always use a maximum window size, and optimize certain methods to + + This type will always use a maximum window size, and optimize certain methods to accommodate this fact""" - + __slots__ = [ '_fdict', # mapping of path -> StorageHelper (of some kind '_window_size', # maximum size of a window @@ -247,26 +247,26 @@ class StaticWindowMapManager(object): '_memory_size', # currently allocated memory size '_handle_count', # amount of currently allocated file handles ] - + #{ Configuration MapRegionListCls = MapRegionList MapWindowCls = MapWindow MapRegionCls = MapRegion WindowCursorCls = WindowCursor #} END configuration - + _MB_in_bytes = 1024 * 1024 - - def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys.maxsize): + + def __init__(self, window_size=0, max_memory_size=0, max_open_handles=sys.maxsize): """initialize the manager with the given parameters. - :param window_size: if -1, a default window size will be chosen depending on + :param window_size: if -1, a default window size will be chosen depending on the operating system's architecture. It will internally be quantified to a multiple of the page size If 0, the window may have any size, which basically results in mapping the whole file at one :param max_memory_size: maximum amount of memory we may map at once before releasing mapped regions. If 0, a viable default will be set depending on the system's architecture. It is a soft limit that is tried to be kept, but nothing bad happens if we have to over-allocate :param max_open_handles: if not maxint, limit the amount of open file handles to the given number. - Otherwise the amount is only limited by the system itself. If a system or soft limit is hit, + Otherwise the amount is only limited by the system itself. If a system or soft limit is hit, the manager will free as many handles as possible""" self._fdict = dict() self._window_size = window_size @@ -274,7 +274,7 @@ def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys. self._max_handle_count = max_open_handles self._memory_size = 0 self._handle_count = 0 - + if window_size < 0: coeff = 64 if is_64_bit(): @@ -282,7 +282,7 @@ def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys. #END handle arch self._window_size = coeff * self._MB_in_bytes # END handle max window size - + if max_memory_size == 0: coeff = 1024 if is_64_bit(): @@ -290,18 +290,18 @@ def __init__(self, window_size = 0, max_memory_size = 0, max_open_handles = sys. #END handle arch self._max_memory_size = coeff * self._MB_in_bytes #END handle max memory size - + #{ Internal Methods - + def _collect_lru_region(self, size): """Unmap the region which was least-recently used and has no client :param size: size of the region we want to map next (assuming its not already mapped partially or full if 0, we try to free any available region :return: Amount of freed regions - + **Note:** We don't raise exceptions anymore, in order to keep the system working, allowing temporary overallocation. If the system runs out of memory, it will tell. - + **todo:** implement a case where all unusued regions are discarded efficiently. Currently its only brute force""" num_found = 0 while (size == 0) or (self._memory_size + size > self._max_memory_size): @@ -310,34 +310,34 @@ def _collect_lru_region(self, size): for regions in self._fdict.values(): for region in regions: # check client count - consider that we keep one reference ourselves ! - if (region.client_count()-2 == 0 and + if (region.client_count()-2 == 0 and (lru_region is None or region._uc < lru_region._uc)): lru_region = region lru_list = regions # END update lru_region #END for each region #END for each regions list - + if lru_region is None: break #END handle region not found - + num_found += 1 del(lru_list[lru_list.index(lru_region)]) self._memory_size -= lru_region.size() self._handle_count -= 1 #END while there is more memory to free return num_found - + def _obtain_region(self, a, offset, size, flags, is_recursive): - """Utilty to create a new region - for more information on the parameters, + """Utilty to create a new region - for more information on the parameters, see MapCursor.use_region. :param a: A regions (a)rray :return: The newly created region""" if self._memory_size + size > self._max_memory_size: self._collect_lru_region(size) #END handle collection - + r = None if a: assert len(a) == 1 @@ -351,40 +351,40 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): # like reading a file from disk, etc) we free up as much as possible # As this invalidates our insert position, we have to recurse here if is_recursive: - # we already tried this, and still have no success in obtaining + # we already tried this, and still have no success in obtaining # a mapping. This is an exception, so we propagate it raise #END handle existing recursion self._collect_lru_region(0) - return self._obtain_region(a, offset, size, flags, True) + return self._obtain_region(a, offset, size, flags, True) #END handle exceptions - + self._handle_count += 1 self._memory_size += r.size() a.append(r) # END handle array - + assert r.includes_ofs(offset) return r #}END internal methods - - #{ Interface + + #{ Interface def make_cursor(self, path_or_fd): """ - :return: a cursor pointing to the given path or file descriptor. + :return: a cursor pointing to the given path or file descriptor. It can be used to map new regions of the file into memory - + **Note:** if a file descriptor is given, it is assumed to be open and valid, but may be closed afterwards. To refer to the same file, you may reuse your existing file descriptor, but keep in mind that new windows can only be mapped as long as it stays valid. This is why the using actual file paths are preferred unless you plan to keep the file descriptor open. - - **Note:** file descriptors are problematic as they are not necessarily unique, as two + + **Note:** file descriptors are problematic as they are not necessarily unique, as two different files opened and closed in succession might have the same file descriptor id. - - **Note:** Using file descriptors directly is faster once new windows are mapped as it + + **Note:** Using file descriptors directly is faster once new windows are mapped as it prevents the file to be opened again just for the purpose of mapping it.""" regions = self._fdict.get(path_or_fd) if regions is None: @@ -392,92 +392,91 @@ def make_cursor(self, path_or_fd): self._fdict[path_or_fd] = regions # END obtain region for path return self.WindowCursorCls(self, regions) - + def collect(self): """Collect all available free-to-collect mapped regions :return: Amount of freed handles""" return self._collect_lru_region(0) - + def num_file_handles(self): """:return: amount of file handles in use. Each mapped region uses one file handle""" return self._handle_count - + def num_open_files(self): """Amount of opened files in the system""" - return reduce(lambda x,y: x+y, (1 for rlist in self._fdict.values() if len(rlist) > 0), 0) - + return reduce(lambda x, y: x+y, (1 for rlist in self._fdict.values() if len(rlist) > 0), 0) + def window_size(self): """:return: size of each window when allocating new regions""" return self._window_size - + def mapped_memory_size(self): """:return: amount of bytes currently mapped in total""" return self._memory_size - + def max_file_handles(self): """:return: maximium amount of handles we may have opened""" return self._max_handle_count - + def max_mapped_memory_size(self): """:return: maximum amount of memory we may allocate""" return self._max_memory_size - + #} END interface - + #{ Special Purpose Interface - + def force_map_handle_removal_win(self, base_path): """ONLY AVAILABLE ON WINDOWS On windows removing files is not allowed if anybody still has it opened. If this process is ourselves, and if the whole process uses this memory manager (as far as the parent framework is concerned) we can enforce - closing all memory maps whose path matches the given base path to + closing all memory maps whose path matches the given base path to allow the respective operation after all. The respective system must NOT access the closed memory regions anymore ! - This really may only be used if you know that the items which keep + This really may only be used if you know that the items which keep the cursors alive will not be using it anymore. They need to be recreated ! :return: Amount of closed handles - + **Note:** does nothing on non-windows platforms""" if sys.platform != 'win32': return #END early bailout - + num_closed = 0 for path, rlist in self._fdict.items(): if path.startswith(base_path): for region in rlist: region._mf.close() num_closed += 1 - #END path matches + #END path matches #END for each path return num_closed #} END special purpose interface - - - + + class SlidingWindowMapManager(StaticWindowMapManager): - """Maintains a list of ranges of mapped memory regions in one or more files and allows to easily + """Maintains a list of ranges of mapped memory regions in one or more files and allows to easily obtain additional regions assuring there is no overlap. - Once a certain memory limit is reached globally, or if there cannot be more open file handles + Once a certain memory limit is reached globally, or if there cannot be more open file handles which result from each mmap call, the least recently used, and currently unused mapped regions are unloaded automatically. - + **Note:** currently not thread-safe ! - + **Note:** in the current implementation, we will automatically unload windows if we either cannot - create more memory maps (as the open file handles limit is hit) or if we have allocated more than + create more memory maps (as the open file handles limit is hit) or if we have allocated more than a safe amount of memory already, which would possibly cause memory allocations to fail as our address space is full.""" - + __slots__ = tuple() - - def __init__(self, window_size = -1, max_memory_size = 0, max_open_handles = sys.maxsize): + + def __init__(self, window_size=-1, max_memory_size=0, max_open_handles=sys.maxsize): """Adjusts the default window size to -1""" super(SlidingWindowMapManager, self).__init__(window_size, max_memory_size, max_open_handles) - + def _obtain_region(self, a, offset, size, flags, is_recursive): - # bisect to find an existing region. The c++ implementation cannot + # bisect to find an existing region. The c++ implementation cannot # do that as it uses a linked list for regions. r = None lo = 0 @@ -495,20 +494,20 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): hi = mid #END handle position #END while bisecting - + if r is None: window_size = self._window_size left = self.MapWindowCls(0, 0) mid = self.MapWindowCls(offset, size) right = self.MapWindowCls(a.file_size(), 0) - + # we want to honor the max memory size, and assure we have anough # memory available # Save calls ! if self._memory_size + window_size > self._max_memory_size: self._collect_lru_region(window_size) #END handle collection - + # we assume the list remains sorted by offset insert_pos = 0 len_regions = len(a) @@ -526,29 +525,29 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): #END if insert position is correct #END for each region # END obtain insert pos - - # adjust the actual offset and size values to create the largest + + # adjust the actual offset and size values to create the largest # possible mapping if insert_pos == 0: if len_regions: right = self.MapWindowCls.from_region(a[insert_pos]) - #END adjust right side + #END adjust right side else: if insert_pos != len_regions: right = self.MapWindowCls.from_region(a[insert_pos]) # END adjust right window left = self.MapWindowCls.from_region(a[insert_pos - 1]) #END adjust surrounding windows - + mid.extend_left_to(left, window_size) mid.extend_right_to(right, window_size) mid.align() - + # it can happen that we align beyond the end of the file if mid.ofs_end() > right.ofs: mid.size = right.ofs - mid.ofs #END readjust size - + # insert new region at the right offset to keep the order try: if self._handle_count >= self._max_handle_count: @@ -561,18 +560,16 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): # like reading a file from disk, etc) we free up as much as possible # As this invalidates our insert position, we have to recurse here if is_recursive: - # we already tried this, and still have no success in obtaining + # we already tried this, and still have no success in obtaining # a mapping. This is an exception, so we propagate it raise #END handle existing recursion self._collect_lru_region(0) - return self._obtain_region(a, offset, size, flags, True) + return self._obtain_region(a, offset, size, flags, True) #END handle exceptions - + self._handle_count += 1 self._memory_size += r.size() a.insert(insert_pos, r) # END create new region return r - - diff --git a/smmap/test/lib.py b/smmap/test/lib.py index 01f6cc918..67aec6333 100644 --- a/smmap/test/lib.py +++ b/smmap/test/lib.py @@ -13,18 +13,18 @@ class FileCreator(object): and provides this info to the user. Once it gets deleted, it will remove the temporary file as well.""" __slots__ = ("_size", "_path") - + def __init__(self, size, prefix=''): assert size, "Require size to be larger 0" - + self._path = tempfile.mktemp(prefix=prefix) self._size = size - + fp = open(self._path, "wb") fp.seek(size-1) fp.write(b'1') fp.close() - + assert os.path.getsize(self.path) == size def __del__(self): @@ -33,33 +33,33 @@ def __del__(self): except OSError: pass #END exception handling - @property def path(self): return self._path - + @property def size(self): return self._size #} END utilities + class TestBase(TestCase): """Foundation used by all tests""" - + #{ Configuration k_window_test_size = 1000 * 1000 * 8 + 5195 #} END configuration - + #{ Overrides @classmethod def setUpAll(cls): # nothing for now pass - + #END overrides - + #{ Interface - + #} END interface diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index d3e51e2ee..d07b7f4eb 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -3,7 +3,7 @@ from .lib import TestBase, FileCreator from smmap.mman import ( - SlidingWindowMapManager, + SlidingWindowMapManager, StaticWindowMapManager ) from smmap.buf import SlidingWindowMapBuffer @@ -22,6 +22,7 @@ max_open_handles=15) static_man = StaticWindowMapManager() + class TestBuf(TestBase): def test_basics(self): @@ -82,7 +83,7 @@ def test_basics(self): max_num_accesses = 100 fd = os.open(fc.path, os.O_RDONLY) for item in (fc.path, fd): - for manager, man_id in ( (man_optimal, 'optimal'), + for manager, man_id in ((man_optimal, 'optimal'), (man_worst_case, 'worst case'), (static_man, 'static optimal')): buf = SlidingWindowMapBuffer(manager.make_cursor(item)) @@ -114,7 +115,7 @@ def test_basics(self): assert manager.num_file_handles() assert manager.collect() assert manager.num_file_handles() == 0 - elapsed = max(time() - st, 0.001) # prevent zero division errors on windows + elapsed = max(time() - st, 0.001) # prevent zero division errors on windows mb = float(1000*1000) mode_str = (access_mode and "slice") or "single byte" print("%s: Made %i random %s accesses to buffer created from %s reading a total of %f mb in %f s (%f mb/s)" diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index cc5d91488..d903af681 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -15,6 +15,7 @@ import sys from copy import copy + class TestMMan(TestBase): def test_cursor(self): @@ -101,7 +102,7 @@ def test_memman_operation(self): fd = os.open(fc.path, os.O_RDONLY) max_num_handles = 15 #small_size = - for mtype, args in ( (StaticWindowMapManager, (0, fc.size // 3, max_num_handles)), + for mtype, args in ((StaticWindowMapManager, (0, fc.size // 3, max_num_handles)), (SlidingWindowMapManager, (fc.size // 100, fc.size // 3, max_num_handles)),): for item in (fc.path, fd): assert len(data) == fc.size diff --git a/smmap/test/test_tutorial.py b/smmap/test/test_tutorial.py index ccc113b4f..5c931de73 100644 --- a/smmap/test/test_tutorial.py +++ b/smmap/test/test_tutorial.py @@ -1,7 +1,8 @@ from .lib import TestBase + class TestTutorial(TestBase): - + def test_example(self): # Memory Managers ################## @@ -9,76 +10,75 @@ def test_example(self): # This instance should be globally available in your application # It is configured to be well suitable for 32-bit or 64 bit applications. mman = smmap.SlidingWindowMapManager() - + # the manager provides much useful information about its current state # like the amount of open file handles or the amount of mapped memory assert mman.num_file_handles() == 0 assert mman.mapped_memory_size() == 0 # and many more ... - + # Cursors ########## import smmap.test.lib fc = smmap.test.lib.FileCreator(1024*1024*8, "test_file") - + # obtain a cursor to access some file. c = mman.make_cursor(fc.path) - + # the cursor is now associated with the file, but not yet usable assert c.is_associated() assert not c.is_valid() - - # before you can use the cursor, you have to specify a window you want to + + # before you can use the cursor, you have to specify a window you want to # access. The following just says you want as much data as possible starting # from offset 0. # To be sure your region could be mapped, query for validity assert c.use_region().is_valid() # use_region returns self - + # once a region was mapped, you must query its dimension regularly # to assure you don't try to access its buffer out of its bounds assert c.size() c.buffer()[0] # first byte c.buffer()[1:10] # first 9 bytes c.buffer()[c.size()-1] # last byte - + # its recommended not to create big slices when feeding the buffer - # into consumers (e.g. struct or zlib). + # into consumers (e.g. struct or zlib). # Instead, either give the buffer directly, or use pythons buffer command. from smmap.util import buffer buffer(c.buffer(), 1, 9) # first 9 bytes without copying them - + # you can query absolute offsets, and check whether an offset is included # in the cursor's data. assert c.ofs_begin() < c.ofs_end() assert c.includes_ofs(100) - - # If you are over out of bounds with one of your region requests, the + + # If you are over out of bounds with one of your region requests, the # cursor will be come invalid. It cannot be used in that state assert not c.use_region(fc.size, 100).is_valid() # map as much as possible after skipping the first 100 bytes assert c.use_region(100).is_valid() - + # You can explicitly free cursor resources by unusing the cursor's region c.unuse_region() assert not c.is_valid() - + # Buffers ######### # Create a default buffer which can operate on the whole file buf = smmap.SlidingWindowMapBuffer(mman.make_cursor(fc.path)) - + # you can use it right away assert buf.cursor().is_valid() - + buf[0] # access the first byte buf[-1] # access the last ten bytes on the file buf[-10:]# access the last ten bytes - + # If you want to keep the instance between different accesses, use the # dedicated methods buf.end_access() assert not buf.cursor().is_valid() # you cannot use the buffer anymore assert buf.begin_access(offset=10) # start using the buffer at an offset - + # it will stop using resources automatically once it goes out of scope - diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 745da83d7..745fedf2e 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -12,18 +12,19 @@ import os import sys + class TestMMan(TestBase): - + def test_window(self): wl = MapWindow(0, 1) # left wc = MapWindow(1, 1) # center wc2 = MapWindow(10, 5) # another center wr = MapWindow(8000, 50) # right - + assert wl.ofs_end() == 1 assert wc.ofs_end() == 2 assert wr.ofs_end() == 8050 - + # extension does nothing if already in place maxsize = 100 wc.extend_left_to(wl, maxsize) @@ -31,34 +32,33 @@ def test_window(self): wl.extend_right_to(wc, maxsize) wl.extend_right_to(wc, maxsize) assert wl.ofs == 0 and wl.size == 1 - + # an actual left extension pofs_end = wc2.ofs_end() wc2.extend_left_to(wc, maxsize) - assert wc2.ofs == wc.ofs_end() and pofs_end == wc2.ofs_end() - - + assert wc2.ofs == wc.ofs_end() and pofs_end == wc2.ofs_end() + # respects maxsize wc.extend_right_to(wr, maxsize) assert wc.ofs == 1 and wc.size == maxsize wc.extend_right_to(wr, maxsize) assert wc.ofs == 1 and wc.size == maxsize - + # without maxsize wc.extend_right_to(wr, sys.maxsize) assert wc.ofs_end() == wr.ofs and wc.ofs == 1 - + # extend left wr.extend_left_to(wc2, maxsize) wr.extend_left_to(wc2, maxsize) assert wr.size == maxsize - + wr.extend_left_to(wc2, sys.maxsize) assert wr.ofs == wc2.ofs_end() - + wc.align() assert wc.ofs == 0 and wc.size == align_to_mmap(wc.size, True) - + def test_region(self): fc = FileCreator(self.k_window_test_size, "window_test") half_size = fc.size // 2 @@ -66,56 +66,55 @@ def test_region(self): rfull = MapRegion(fc.path, 0, fc.size) rhalfofs = MapRegion(fc.path, rofs, fc.size) rhalfsize = MapRegion(fc.path, 0, half_size) - + # offsets assert rfull.ofs_begin() == 0 and rfull.size() == fc.size assert rfull.ofs_end() == fc.size # if this method works, it works always - + assert rhalfofs.ofs_begin() == rofs and rhalfofs.size() == fc.size - rofs assert rhalfsize.ofs_begin() == 0 and rhalfsize.size() == half_size - + assert rfull.includes_ofs(0) and rfull.includes_ofs(fc.size-1) and rfull.includes_ofs(half_size) assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxsize) - # with the values we have, this test only works on windows where an alignment + # with the values we have, this test only works on windows where an alignment # size of 4096 is assumed. - # We only test on linux as it is inconsitent between the python versions + # We only test on linux as it is inconsitent between the python versions # as they use different mapping techniques to circumvent the missing offset # argument of mmap. if sys.platform != 'win32': assert rhalfofs.includes_ofs(rofs) and not rhalfofs.includes_ofs(0) #END handle platforms - + # auto-refcount assert rfull.client_count() == 1 rfull2 = rfull assert rfull.client_count() == 2 - + # usage assert rfull.usage_count() == 0 rfull.increment_usage_count() assert rfull.usage_count() == 1 - + # window constructor w = MapWindow.from_region(rfull) assert w.ofs == rfull.ofs_begin() and w.ofs_end() == rfull.ofs_end() - + def test_region_list(self): fc = FileCreator(100, "sample_file") - + fd = os.open(fc.path, os.O_RDONLY) for item in (fc.path, fd): ml = MapRegionList(item) - + assert ml.client_count() == 1 - + assert len(ml) == 0 assert ml.path_or_fd() == item assert ml.file_size() == fc.size #END handle input os.close(fd) - + def test_util(self): assert isinstance(is_64_bit(), bool) # just call it assert align_to_mmap(1, False) == 0 assert align_to_mmap(1, True) == ALLOCATIONGRANULARITY - diff --git a/smmap/util.py b/smmap/util.py index 44e94124d..137c19d7b 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -12,7 +12,7 @@ from mmap import PAGESIZE as ALLOCATIONGRANULARITY #END handle pythons missing quality assurance -__all__ = [ "align_to_mmap", "is_64_bit", "buffer", +__all__ = ["align_to_mmap", "is_64_bit", "buffer", "MapWindow", "MapRegion", "MapRegionList", "ALLOCATIONGRANULARITY"] #{ Utilities @@ -27,6 +27,7 @@ def buffer(obj, offset, size): # doing it directly is much faster ! return obj[offset:offset+size] + def string_types(): if sys.version_info[0] >= 3: return str @@ -37,7 +38,7 @@ def string_types(): def align_to_mmap(num, round_up): """ Align the given integer number to the closest page offset, which usually is 4096 bytes. - + :param round_up: if True, the next higher multiple of page size is used, otherwise the lower page_size will be used (i.e. if True, 1 becomes 4096, otherwise it becomes 0) :return: num rounded to closest page""" @@ -46,15 +47,16 @@ def align_to_mmap(num, round_up): res += ALLOCATIONGRANULARITY #END handle size return res; - + + def is_64_bit(): """:return: True if the system is 64 bit. Otherwise it can be assumed to be 32 bit""" - return sys.maxsize > (1<<32) - 1 + return sys.maxsize > (1 << 32) - 1 #}END utilities -#{ Utility Classes +#{ Utility Classes class MapWindow(object): """Utility type which is used to snap windows towards each other, and to adjust their size""" @@ -68,7 +70,7 @@ def __init__(self, offset, size): self.size = size def __repr__(self): - return "MapWindow(%i, %i)" % (self.ofs, self.size) + return "MapWindow(%i, %i)" % (self.ofs, self.size) @classmethod def from_region(cls, region): @@ -86,7 +88,7 @@ def align(self): self.size = align_to_mmap(self.size, 1) def extend_left_to(self, window, max_size): - """Adjust the offset to start where the given window on our left ends if possible, + """Adjust the offset to start where the given window on our left ends if possible, but don't make yourself larger than max_size. The resize will assure that the new window still contains the old window area""" rofs = self.ofs - window.ofs_end() @@ -103,10 +105,10 @@ def extend_right_to(self, window, max_size): class MapRegion(object): """Defines a mapped region of memory, aligned to pagesizes - + **Note:** deallocates used region automatically on destruction""" __slots__ = [ - '_b' , # beginning of mapping + '_b', # beginning of mapping '_mf', # mapped memory chunk (as returned by mmap) '_uc', # total amount of usages '_size', # cached size of our memory map @@ -117,32 +119,31 @@ class MapRegion(object): if _need_compat_layer: __slots__.append('_mfb') # mapped memory buffer to provide offset #END handle additional slot - + #{ Configuration # Used for testing only. If True, all data will be loaded into memory at once. # This makes sure no file handles will remain open. _test_read_into_memory = False #} END configuration - - - def __init__(self, path_or_fd, ofs, size, flags = 0): + + def __init__(self, path_or_fd, ofs, size, flags=0): """Initialize a region, allocate the memory map :param path_or_fd: path to the file to map, or the opened file descriptor - :param ofs: **aligned** offset into the file to be mapped + :param ofs: **aligned** offset into the file to be mapped :param size: if size is larger then the file on disk, the whole file will be allocated the the size automatically adjusted - :param flags: additional flags to be given when opening the file. + :param flags: additional flags to be given when opening the file. :raise Exception: if no memory can be allocated""" self._b = ofs self._size = 0 self._uc = 0 - + if isinstance(path_or_fd, int): fd = path_or_fd else: - fd = os.open(path_or_fd, os.O_RDONLY|getattr(os, 'O_BINARY', 0)|flags) + fd = os.open(path_or_fd, os.O_RDONLY | getattr(os, 'O_BINARY', 0) | flags) #END handle fd - + try: kwargs = dict(access=ACCESS_READ, offset=ofs) corrected_size = size @@ -152,8 +153,8 @@ def __init__(self, path_or_fd, ofs, size, flags = 0): corrected_size += ofs sizeofs = 0 # END handle python not supporting offset ! Arg - - # have to correct size, otherwise (instead of the c version) it will + + # have to correct size, otherwise (instead of the c version) it will # bark that the size is too large ... many extra file accesses because # if this ... argh ! actual_size = min(os.fstat(fd).st_size - sizeofs, corrected_size) @@ -162,9 +163,9 @@ def __init__(self, path_or_fd, ofs, size, flags = 0): else: self._mf = mmap(fd, actual_size, **kwargs) #END handle memory mode - + self._size = len(self._mf) - + if self._need_compat_layer: self._mfb = buffer(self._mf, ofs, self._size) #END handle buffer wrapping @@ -173,7 +174,7 @@ def __init__(self, path_or_fd, ofs, size, flags = 0): os.close(fd) #END only close it if we opened it #END close file handle - + def _read_into_memory(self, fd, offset, size): """:return: string data as read from the given file descriptor, offset and size """ os.lseek(fd, offset, os.SEEK_SET) @@ -186,92 +187,92 @@ def _read_into_memory(self, fd, offset, size): mf += d #END loop copy items return mf - + def __repr__(self): return "MapRegion<%i, %i>" % (self._b, self.size()) - + #{ Interface def buffer(self): """:return: a buffer containing the memory""" return self._mf - + def map(self): """:return: a memory map containing the memory""" return self._mf - + def ofs_begin(self): """:return: absolute byte offset to the first byte of the mapping""" return self._b - + def size(self): """:return: total size of the mapped region in bytes""" return self._size - + def ofs_end(self): """:return: Absolute offset to one byte beyond the mapping into the file""" return self._b + self._size - + def includes_ofs(self, ofs): """:return: True if the given offset can be read in our mapped region""" return self._b <= ofs < self._b + self._size - + def client_count(self): """:return: number of clients currently using this region""" from sys import getrefcount # -1: self on stack, -1 self in this method, -1 self in getrefcount return getrefcount(self)-3 - + def usage_count(self): """:return: amount of usages so far""" return self._uc - + def increment_usage_count(self): """Adjust the usage count by the given positive or negative offset""" self._uc += 1 - + # re-define all methods which need offset adjustments in compatibility mode if _need_compat_layer: def size(self): return self._size - self._b - + def ofs_end(self): # always the size - we are as large as it gets return self._size - + def buffer(self): return self._mfb - + def includes_ofs(self, ofs): return self._b <= ofs < self._size #END handle compat layer - + #} END interface - - + + class MapRegionList(list): """List of MapRegion instances associating a path with a list of regions.""" __slots__ = ( '_path_or_fd', # path or file descriptor which is mapped by all our regions '_file_size' # total size of the file we map ) - + def __new__(cls, path): return super(MapRegionList, cls).__new__(cls) - + def __init__(self, path_or_fd): self._path_or_fd = path_or_fd self._file_size = None - + def client_count(self): """:return: amount of clients which hold a reference to this instance""" from sys import getrefcount return getrefcount(self)-3 - + def path_or_fd(self): """:return: path or file descriptor we are attached to""" return self._path_or_fd - + def file_size(self): """:return: size of file we manager""" if self._file_size is None: @@ -282,5 +283,5 @@ def file_size(self): #END handle path type #END update file size return self._file_size - + #} END utility classes From 1cd3760be374521a7fafe2262e58c1703b71b9aa Mon Sep 17 00:00:00 2001 From: Antoine Musso Date: Sun, 16 Nov 2014 22:37:15 +0100 Subject: [PATCH 0276/2375] Drop semicolon at end of statement Fix pep8: E703 statement ends with a semicolon --- smmap/util.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/smmap/util.py b/smmap/util.py index 137c19d7b..394e6b197 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -42,11 +42,11 @@ def align_to_mmap(num, round_up): :param round_up: if True, the next higher multiple of page size is used, otherwise the lower page_size will be used (i.e. if True, 1 becomes 4096, otherwise it becomes 0) :return: num rounded to closest page""" - res = (num // ALLOCATIONGRANULARITY) * ALLOCATIONGRANULARITY; + res = (num // ALLOCATIONGRANULARITY) * ALLOCATIONGRANULARITY if round_up and (res != num): res += ALLOCATIONGRANULARITY #END handle size - return res; + return res def is_64_bit(): From eb40b44ce4a6e646aabf7b7091d876738336c42f Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 19 Nov 2014 17:12:38 +0100 Subject: [PATCH 0277/2375] Added link to readthedocs --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8c9ae4251..e15c9bfc5 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ The package was tested on all of the previously mentioned configurations. [![Latest Version](https://pypip.in/version/smmap/badge.svg)](https://pypi.python.org/pypi/smmap/) [![Supported Python versions](https://pypip.in/py_versions/smmap/badge.svg)](https://pypi.python.org/pypi/smmap/) +[![Documentation Status](https://readthedocs.org/projects/smmap/badge/?version=latest)](https://readthedocs.org/projects/smmap/?badge=latest) Its easiest to install smmap using the [pip](http://www.pip-installer.org/en/latest) program: From ab4520683ab325046f2a9fe6ebf127dbbab60dfe Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 19 Nov 2014 17:19:52 +0100 Subject: [PATCH 0278/2375] Added readthedocs badge --- README.rst | 9 ++++++--- gitdb/ext/smmap | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index 194e24658..186218d1f 100644 --- a/README.rst +++ b/README.rst @@ -12,6 +12,9 @@ Installation .. image:: https://pypip.in/py_versions/gitdb/badge.svg :target: https://pypi.python.org/pypi/gitdb/ :alt: Supported Python versions +.. image:: https://readthedocs.org/projects/gitdb/badge/?version=latest + :target: https://readthedocs.org/projects/gitdb/?badge=latest + :alt: Documentation Status From `PyPI `_ @@ -44,7 +47,7 @@ DEVELOPMENT :target: https://travis-ci.org/gitpython-developers/gitdb .. image:: https://coveralls.io/repos/gitpython-developers/gitdb/badge.png - :target: https://coveralls.io/r/gitpython-developers/gitdb + :target: https://coveralls.io/r/gitpython-developers/gitdb The library is considered mature, and not under active development. It's primary (known) use is in git-python. @@ -52,10 +55,10 @@ INFRASTRUCTURE ============== * Mailing List - * http://groups.google.com/group/git-python + * http://groups.google.com/group/git-python * Issue Tracker - * https://github.com/gitpython-developers/gitdb/issues + * https://github.com/gitpython-developers/gitdb/issues LICENSE ======= diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 28fd45e0a..eb40b44ce 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 28fd45e0a7018f166820a5e00fce2ccb05ebdb61 +Subproject commit eb40b44ce4a6e646aabf7b7091d876738336c42f From 5e3dbccb05f85f178d3260a27df2f59a69221668 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Wed, 17 Dec 2014 23:09:42 -0500 Subject: [PATCH 0279/2375] Bring gitdb.test back into distribution --- MANIFEST.in | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index b14aed9b3..597944fd4 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -8,7 +8,7 @@ include gitdb/_fun.c include gitdb/_delta_apply.c include gitdb/_delta_apply.h -prune gitdb/test +graft gitdb/test global-exclude .git* global-exclude *.pyc diff --git a/setup.py b/setup.py index dc142c518..1d327eba0 100755 --- a/setup.py +++ b/setup.py @@ -83,7 +83,7 @@ def get_data_files(self): author = __author__, author_email = __contact__, url = __homepage__, - packages = ('gitdb', 'gitdb.db', 'gitdb.utils'), + packages = ('gitdb', 'gitdb.db', 'gitdb.utils', 'gitdb.test'), package_dir = {'gitdb':'gitdb'}, ext_modules=[Extension('gitdb._perf', ['gitdb/_fun.c', 'gitdb/_delta_apply.c'], include_dirs=['gitdb'])], license = "BSD License", From c38bd19706abe5cf0bf0e7b3e9ad2b3e554d28ef Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 1 Jan 2015 13:47:19 +0100 Subject: [PATCH 0280/2375] Increased initial size of decompressed data to obtain loose object header information This appears to fix https://github.com/gitpython-developers/GitPython/issues/220 , in this particular case. Nonetheless, we might just have gotten lucky here, and the actual issue is not yet solved and can thus re-occour. It would certainly be best to churn through plenty of loose objects to assure this truly works now. Maybe the pack could be recompressed as loose objects to get a sufficiently large data set --- gitdb/stream.py | 7 +++++-- .../88/8401851f15db0eed60eb1bc29dec5ddcace911 | Bin 0 -> 222336 bytes gitdb/test/performance/test_pack.py | 3 ++- gitdb/test/test_stream.py | 13 ++++++++----- 4 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 gitdb/test/fixtures/objects/88/8401851f15db0eed60eb1bc29dec5ddcace911 diff --git a/gitdb/stream.py b/gitdb/stream.py index edd6dd2b1..b0a89002a 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -100,7 +100,9 @@ def _parse_header_info(self): :return: parsed type_string, size""" # read header - maxb = 512 # should really be enough, cgit uses 8192 I believe + # should really be enough, cgit uses 8192 I believe + # And for good reason !! This needs to be that high for the header to be read correctly in all cases + maxb = 8192 self._s = maxb hdr = self.read(maxb) hdrend = hdr.find(NULL_BYTE) @@ -243,7 +245,7 @@ def read(self, size=-1): # moving the window into the memory map along as we decompress, which keeps # the tail smaller than our chunk-size. This causes 'only' the chunk to be # copied once, and another copy of a part of it when it creates the unconsumed - # tail. We have to use it to hand in the appropriate amount of bytes durin g + # tail. We have to use it to hand in the appropriate amount of bytes during # the next read. tail = self._zip.unconsumed_tail if tail: @@ -284,6 +286,7 @@ def read(self, size=-1): else: unused_datalen = len(self._zip.unconsumed_tail) + len(self._zip.unused_data) # end handle very special case ... + self._cbr += len(indata) - unused_datalen self._br += len(dcompdat) diff --git a/gitdb/test/fixtures/objects/88/8401851f15db0eed60eb1bc29dec5ddcace911 b/gitdb/test/fixtures/objects/88/8401851f15db0eed60eb1bc29dec5ddcace911 new file mode 100644 index 0000000000000000000000000000000000000000..d60aeeff74d2983bcc2abd03163d2cc8c422f819 GIT binary patch literal 222336 zcmV(zK<2-A0gReca4t*`reoW-ZQHhO<0ScF+qO<@+qP{xIkBDWzq;OiYieq`rn)cY zrl0C}Oza#@h*(%ySedzii2012O|1lA%*;)!jUDJstR0Me6?kAY$rk__!v%mWvr>c|!t=BR(^2i-&|PE)rDF zfk!^fRVBjq@wl-S!7GHO6AF3#{Ejj{^|X?hEje2mmunc@?hfXE+wMbLFsSn}W!6+7 zrYYW(|IjgGY6HhALjLvWd9t14+jh1M1wY}9KMQ@OOYlBu(6qS&Rz zG;LAnQ9Rj@lNGbDc1h^FSj3=9lCpHf@k2234o%CG%}5xx#lpPiD%5;uG3Xu2Yr(BE zon1Lm&JI?IPN%}Rb~b9`J+dXv>-8lU_vK#mm(pQQ7@{r{q2nMeA~qv@Gw_PqX;EKR zYJva*$1;8Hs{v+8yqVOgCAu|<0k-zn#_`2qrpm?Y)|1sb9eYEQUIOo7(7eT7IW>rD z?E~Qg7s|}D(Xf6qCW&m3kjSFF{$`C%`>Mr%1$O^_v}k3|KGQ{)D8SLPAkOhWPZ`cC zTr<&Dd2M?Xsd*_}V)+fm|3y>!`!?`BmM%X#f18>Fv0%gV(M0m5FYVjc^TBhVZhN>B zu4pO}qYsQ01JyGW&j?Y^0~ts%-Lbxx#!VtmBwzj1&3VWV+GKHGO(qNvzo#vR{&FYp3$w zc4GpwFu}I_h6%VBt7ja9Tfabd+ShP7$JuqZ4NNSYs=uu z8wE?Q0BA=a`2`jP95%&u>kb;CbZ1m4k@}HhSjcNEx3x!DVY}MHHLf!|bJZ+Em$9b~ za&;zCbTC$oV9E|m>Db+qog2;$-Bc#Zk5GW8B!-f~&+h2pA0L5N?ap_KsrSmh5LCus zCy`swgR^0vIWd*ul+cD(_e5zPdfG)xJJ1-k0`oygR|SN+^@J7@q_VR2Zz$AF>TcG1 zjg&v}aMCNNokyrbrU61s$f0t##PrL(?V`#ZZECh)u2>uZ^BN6doe+HpOO*$L#od20 z*^|GFj{XSQugs$!^!hZ#Ei#Y}Y|CfljmV~fgs6_L_=0xNY&btn3wP;sUJ61y&{5X$ z&tMgRGaF_77+>&!0GUI#G?SYC!wqn$p2-XzDA1k!dq)a>jgj!*2gA@%<7$#qnE$5HR4@*Evg7r zkckvjr^Kk@L}OWM&w^2fn*4Wj_B&+qFl`2fIX?VXcNltJq&X9*LwxMorn43jK}QBZ zSq@8!6<~+-%Q|Ni-7(!Wy?w32Q;A5C2BN*ntp*mcU0%DGLrmZ?f^HVXle;tEtj;J$ zH;rDQG*EySc(1En46dl$@+Sp^V&=StZtZ!WNYvg#|`S9#W5sVWE((c zcH3nuNGKume`Uz5gYrv)7;X!?f7h4+wIsk5xfVHM$7eY-hS`oJukZG z(SP#jJ^tYN{p%IuZuhqA!8iHIj|eueTaw^53?dVZ+*Q4Yq&!P`HA{2Y{zrQiNkd)S zUv^UHM*_q9;qDXmcocr41!2Py`O|BVuqH>)aHXsAi@k+OyK zBMsWy(Ny?X*J;T8;y2g7>E<{2hq392{kJT0(&E>@>&G7oh%8g@^WgJ}_&tU1>Z_Ie z_0J*M#~+b^*YRbk{kk`}-l~J1vtB}P(WS&z+tuRgiGnP$@XZuF8fIs8!X(j9$sd8Z z*bEt5XKkv)3KpX9FFAx02yQe+Le#Z{s)leVmu`wiEj*3SpZ3a?lh~2BTMuJo$1-0(qT)fX#lj^aI!=B?59>;u@NwcZ!}G-inz2$f5yh&#V% z!=CF&xAS!Aq%V;#LL98lQZM({K0Oszz;E{GSDv%L=kHek-bbzE13&qD zg^tCWDWJg3LKBfUk?-aT;;$`a`!)4~ZkgDFT>9N4ikrVoFZLd(<KAEZ5If zgsFSkRZptUwr?HYJd`+iPctHk^neYis^(M41lYT+*T)`{$2Tw?qD$I9E_K6NPZ<{b zW#X~cuG87WRVItW?SjU$wJOXRS^k8L0?e@X@_24$wXLYeKCFOWzlMQ~Gt7;T?m$?Pt6|Lt2uopo}W538|(i;XW-I~~7f3i1;Bd;T0hUU&~6zbK49vNj9sv57vGv3|XQ z^vu=O&=NEDe*5S=ttkqA+DZ2gG{(Qie8)~!j?#x!hIH6X)!ODi*J6*Zdgz}BhXO*W zFgqx|O?JZhjUiq^gZ712i)4pKTgB-K+BWmGZgm}H%TwQw^8KDjCwSMz*z$>W4Dd5I zOTAhgY`#RC>9z<^qE&zH1%H1ULVS!a&Wh>@NnHtOTL{e^6J(HekjUyM<=3uO*R0*5 z*YMX9d`&_BhI67!3-y{_E#kO>gA;v*XVePvp}`ZkqPEjurgV%2FkYvH9dl z!_8}ET#J4lNS(Si5jr9^yQmb?Fzmc2#Fh9w*YuIeoc(Rs^|X8zluh;c{$lLNc>HB7 z{E?&+;}EL#zlORSMC^Kzcox+7Az<*qE^>;He2(WrQ+!qjUBi*JOi0-Y1b65Oo*Hew zljY~fn+2)E$BQeCX}`2Xb{Vv-W59@5=ZdR#=m5_h9f6(SdMk_T8q?SR+nWtKGuO%8 zInzB3N%*zRTXO6^c1!lVmb&Ou#%4MigUxC&ox%M7b2!qB{sobdvPuC`0s=BK1{nV@ z)b;oeb^p`P!%Ta)Z^fB+E#WBf3Wr5bAg-+3JM>NzVyrc=S z6WKXBomuGkBiCkTGLyJJ!W&p9#o0El_Y8E^1=pV+I$hYxY@9Zkwm2;?Oci1INw|ka z`r?Dv447~fJEU(sNPF}P4F6^FA{j`NN4u$k+9q$9)g-Ir?j06JX~=5-S3?U@(~# zb|GVqm&EDHKE*2vh$6Ry>-x7r$|}PrUEPJnvtLU?P87dd1)4Ol&P>a4owNEXTt|bu z>e;y{uey|dID~k`XN*9378)iMtF+KF1Zib(B`4TYsQ$^1uVHVWVO$3NxV!X1Nr6+% z>c=YA_?LHy#l`Q5U5p)uTB=Td)yBP5z!wlHc3{SM`Lj#J#-t==qbTLWWC#G8*EZRb z#iEu->z;KUwS!dR0u?SBoRov;nv!5Fzv~@YV@J55Rb@jk4!toXz+wY;$j*PJhI~gu z#{~CCRMQ*nRU0`bjECEq-^k195jn=PM33EFo&;7CX1<4RppoMDdqo^g>ws4bxlW+( zgS+)=b_r=GH{i1-24BCcXmdZ$%i&+B4O2&+P$+{IJFf*5nAShRoh2-z(Soy1AQmTl zH&6p2wYDS6^`qy+^K+ygG8K>A9u{t)a<&lyfQ1=F(HGw_q?1mr;v6XQ7_0CHZb~=-IfVOZ0LNKvfJkZ`__*P-3aO>MzP!_GMe#$L zk0fF_RA2p#d#NS!a}-K{e>xBl0WIgrmf>pNWn;AA+ONdPaXxhNIE1&F)~enU#O;)_C?Lf^_e?O&eq6I;xuV!cL+sy8m*^d)^j0 z-N&YbCphB?inuKB-nnf7MUi%#zA4=zRE`@d8$|(_y;jv4=88PyfO=}4^?NA>M2)8j zW9B=a;hVo0Bqfw2IVY+^b?P%G;VJbfVODxAT@Dp_?9`W!NmK5IvO&&l3ElDU`upe0 zZ8y_MCU#EgspzjP@ItG8o`@ESy21}9a(Eb-QJS}| zHgCv>h2JIbjR@SpcusNqQRKo5>XlUo>;tt&Uo!MVB#&;x4(5x#Oc|`5W2_gFg~dKR zX-rFLWm@r^@M^1=or+AjEvWxi$u{rNAKp?_P2zq{meK+NZWA#SI5`)ot(yZ&tzy(y z;sH?Aa|s&g;3@@J@(Uq^2u*9oi|4u}FrST=AZ&Ut%_RWOB&c>GpKPuwcmkdHj=x-W zTDPuS4p~YVWep-Y*%YVHcQc7Mf8KS`6>fO2372*j&gf8`y$NP4DT5kp%> z(0W>4T`@YgpLi;8y@+be?XycShpWi6CjAcs!D=aa2Ic>* zQ;gT>i^zv%#Cj%cIT;2x5mN!Tl=OF@VN*Ho(D5I<+Nq- zKt$IZdN>4S%ro_EE>6iiUM~FWgv*qy08k^X(UmEGfQEBg1DY$QV|(W93N379e&5D9 zpji!szoxOQ7$2wQaq@q`q8A*C5vD=x&;dP|u*UnkSr2CQya>11($=f4)q%O^rS z5=FT@+?*4OE;39f>YM1gTw6AspaPMjFlE(amcfG~(ugNu12q-#W3B9Qw5{xCgLs+_ zfrRyrhO{3papdP&>&dIv$DV;P-Hs$-XI#CAQ7sBJz;a-zlw?5s)&}yPQU-xe0EL{w z)3@dIAb(7{vEr#H#QORIa@;wI0o;*iqmB$VJEj^&;=F)W4Pt`fNr?d34*85c59i)L zkXgw^jd&Blnas@4NT+tm1?RE+TWi8>hSGN+v2YRrTXhnm0o9A5vb7{L@Jv}nnIQij zY5epaAlh7k!#vRW4L!K|XhiG7J>x%uz8%Y+{{W9ypyINDjUm5Y*3A975X48fYTZD? z@wE!gBATVEEg>;D@A*N5(v+G4Zg~~64Me#SZ0TpdR@OYG-!p0oIQp_w^_10;o}MUt zXWd_APHhXZC4LKpN9vc=qLJH+C6H-ufB!L68wS`rD%`zw{NawHt<-%&T1s_>fUzuU zh$sQ!T|@v9kAfa$S*jY{^K?FwP-{E5h@j#+3hH$C&F(aGI_C7tsQ?#d)zIDP(3##I z6P;^BxMdZED6PgqYo12aQviwzv$&|Xs9)X>o1Ify54CGNZ*PARp9;U-Y7*!bj6Efr zO!q|c_3d?@m=;Y=^i;xqNC8ENt(iGiW>yWJ98CKp)F8Lz(K&j%Q>i4KM4rx^-bh5o zefNc&Pp(vxxen?Ois*nq(#T=6C77D`6tv}(ga4>AQ(ju*mF9{Svk|%b%~!2|<0{d{ zA-uy{jJDj=RiMhke`la9!nn&2_7Fl{^_Y3_w*iN$(B9n%VQO5($H;00Hy4@NAI+JX zWi&4vH8H1Fnl&1)rqJhDdGif0ZqXfw@bmSrCULRGD-;R-|)d)2}moJLRZ* zt=#K@&Tpe}60U-0eMyNV<+of~a}l4P4^njtRxwG`vv;Q<<1XT1APHY*(;z#wWz61Q zR(@T}d9TCyvLU|fw>dB!IEwJ9Gmrs(5WUBw1=%qt4>#v2eTV4}1ZC@;r_#3&1xG=g zSPtOAP+DtrMr`(jtb%~V^Z4yKs8TQik!AL?r;2|cS z5TfN_UDQsqCS{l^Y>KI&R8YlUf=;k&IVcm6qS%GaW-WiW|Mf2Kp1 z-2z77*hmR6Wr<%qm`r7wDwjaRi|8gv*GR)X1qo-UU2ZMK6jcp6BKh*!(vAq#ZAB|o zcrO7xW88Lm`Znm#`P1gTB6h&G*vS{syqVWjY$!8v(ARvbx>~cAspv~{W|zTx+{L&O zw&_qf?_E*{!s)LF)5hKw3?Uzv9o1yKi`H|ZfO=#7+N)ke0bLm_lU1);Rf)nDuFCnE z(ekU1^n5pFGdahQZzD#MpWDNJiA|@rW5|nnVhXsppnkgPo476Yk#&!lWwyXrbNslb z<&e2-#o`R43@emNZ67ePcfiU-)=j%f{F7Jp*~rHnm0NXnS9BZn5ue%d{`!l5;BFPE z`XgBQcpvD>DC=co&l7~M-ey&x@aHenqZ6GAW~~2l^?As})Otf+j;0ofoBqs?A21EY z#;Fy6x-&iFG7t(QtQhNEl5&K_=Xg{yBFK0NdI@y)C%pmNYF%!5;H(Fye`Fk$EVAzB zaBEvb*NBG#b8XUE>Yv4~lFO^PU!z(-AmvC|Y-6+WJ0N-HV>TQgy@gA~%^}J$2)KnU zS+lt*+Eanj3R(qe*8L2M3Dr`zEUNEW^sIx#mXG%wwLrD#kC z+Ci?O22Y- zuNYVBZ1B0=o`#|Aufn*@F&n-+x`M>+!Mo_2d3P>FL8zAKH1dENwnB7J%mlSpgIrSE zO8Et3$LbUXJitZU&G8pLp6CQ-L4{Mh>wZ2e^a)JsT~-f#0{-IhH($A5cd9ACr_jJC zY+tSoXz_)n6-iK7Bekxr%K){ZI4eX{GT33V92TPcni1Z^Nz(Io%873|Hy>~Y@(j|) zMtB_!@y7b&pMp3}n?j(w2NjAaXRcuWR>r>=90s@B+%oDO&6a1ZS$fPhDMHS|8w0(H zqVE>y{DY+NBw2+i>1|E|F$hMFMR*9}K>Xf^CLWQCFb;;ZB^wN$0 zEF6tRAcQD;8&`BEiReYc@FaO}>(hw!+TK+n;Lx;N2DHtzVloEb-S_puwV7H^y|2dI)%f;zj$ z0flpF!}1JMK6^LanpNo|MjS>Lg-|z^d@@om4MdiIcQYj-Azz%z(8gvUO9(I1l9bez z-}>w>(Ljn^_2ce5kK<)<_c~MWFVL>fZTQtW&l?GA6q04P%rkTf5{r$8#0BXOulW34 z-IW!;=&td36f4>J4e1`oKZQM@9_M(JAlzn~kmscF9UxvH6Pf@WbN7`KjHgdS2C->T zAQ2ap!Df78*dvUvzw!Vba4cx=k}AnA(?&Z!t?~~%4Exex^MUf+qV{CY7aJqfq-=({ zc$S+2ckG<(<btKP-7^jmT89<5y9l|3ZH-3HT7hi%N^Q zGJ<08m*nlcxuJR>G+}m<4-oUQC&TXexM3Wx9!M|B7=OLH$>yU)Bq&~64s9`%WzFoEiYz(c3E9#y2nkE571~0IXdCR zhW1C6a}VrupK!f;gI=6pQnlYN==bRm*CfC4gpG@LW#!ce)r+0D@1KdmJ!~OCO%I&H z4Hb+P%`y%Jmnq&b6!e9tgoVE((4S`G*;B=*dW|kt8Y?fcJID?|sPf|2ov4+{)AgX; z*wytF^F&C~NETQ#t!Uk0im0^=Na&Ey=%eAO@{rFg#2MOcg0=#prvfN$Hff*};MmO2 z^Kd3;0sY8nhTw7#IDqAUEtO3=#1q6bR#easG7Cd9x^A6^aWhNQ(6K;<)uHU*fmh^W zJHp1ZG#Q6dYGp&Xoiuby)P1UxS>Ym2Jfs`7gU&Ys_Fg=09Zugcae*9vjYLrl&owF8 zE%S6^3vT_;jB0r=rJ&euE6R6KNzvb{WLuP4lg3h&lPk>0RixQ7?XK;e=H8;1h51}> zFeo8hcr*Mw#l)@Mcn4HRr25qt{w2D5pU1-MaoY zYVE?c$?&m-I)Az3*TL>Xw^2(qe1D_f7MMm;4~22xWn#E3DriI~nvGr$;n}9r_q^2H z(MZqVFX~A~mo!Gzw|87lDddorAlAj_hSeIJ*6&tS*|NvJmVyb|E_Wx`Bg1T(J`xi2 z0qfK%-KSe_Hm$kp0lavCLXTdsfSNu$>??(^etgGg7Rf@wm||JGM31P}cGrwvu5_4` z)@GiuMsLZ>Ox*@eqFXM`Z4#C{9Abr0!!8DU>}TDgG(q!(qpEK$CveNuKbC|s%onPW z9@>5kk6|x&TnQQWEQ=a_5eZvkMzv#G?E_)Kj@6keR^sk5ti;^!HBdM=Zta2k zUO1?~M%!;%YpfrP3=kNmP`U(?T7%Y`3K#7&4EFI)l2C^F2&kW>{n=~I7wtA}JEmkk_q7wag19~GB7E7WqD%0=7&M`ubvICSxYoUgglzS)0}{4c z;`TnL=o2M>0x62xz`8xX^ECEqXa%jm<0&iW3q+zN$L091^HH6cv9{UUO-8rz!%#iw z<(<$`+y~+GXz9D4(Sze<2Zd<1X-pmGEA@+eRcya3O~_M?uL|>+NwbFWxG0Ea6C&ld zZe5XI{Bn5_da@ziq%i?lR1~BpgXL3qNBXc5#DuB7M}(P}3JaB8EEI&59TwStZ{h`J zK1gUH-`b{i2s>)BGkDZuty2rSq%pULW++an46Slp_A)3QX%v>d-nd`$a?c8oMo~?_ zuxpJ%QV0?Fuy)>ZVR)W1B$dpd#Ez(s75NHYK`lj|;q7sfVgjL`-iR>M5%r*J=Z|)j zW=NJXKAjW!!(qa*9kg>cp7Q4FF#{H2WC%^`7a-CMxde^1V8M$bXTXY|F<@C(LA(yfh<3qcBB zWC(=o+h4%)#b&{i%d@=LSmeh(w8oNuYv&xKkLf-ktdm*T|LtnLH|uzL-z6 z+Qbe1+qs*f^zzC2sPYGZPWR##x?4R%`vuxKyd=t&14m!@^M(@O(|nd|xRT{ON^8XK zsLvthgndCgetB-0bgq}I*yG^^&a3J#1nKqL4A>dQl~e|JqlVj&8mBr6G`;GeplWP0 zzG?gb+x4XUF;+@IG8U=I@^m8l%(cWrL214d%b=HZr+IAJx`Z;p`|HSfY!C$^|4ITq zH*|138Z3AgNng~V{~ne;2-5lrT@~IDY9wuR{pm_?(_gWiQv>Qa6?)G6z0SEafXjzpfqM4RiZCGCK% z?h)eW5C1_nN42n``T>6o5@0tC${98lv=AN?bbv5Qz@R9v; z1SRjV3=VQ!$K5Xrju=6yBbCj*#9+?vF4?8xM7ljT!hjosxB#m5w=3w9^(az(yX5<0 zx<7_^#xUTD)zLn+5PJY%4VV>DRDHP+z?OV;)Zl}W7=HIR1A3kB$2cG zrE?BnMID4{yP1=S9GIEV*aScaB)-2iAjvW3aWZGi9R~Nd|1wT-Oug!x>B*^l`NZIs z>%X#kD;lv1Rs$VjYq7Gj1+q|^>G2%10=viuT}=%XGcT6bwdeo@#6}#vSK)Ynz`T2o zQ*oSp!poM?>a}}C>c5nNKvA|#KxF(y8RZb1zOQ-4E-%R!f^bpfvHB9eL%>5v${qiZ zq_FIw_w*ux`Jd#%50_PhlzgJO*Jxt@dPw^cEuT+MNzFIF@&Y~U8U}Q{-exBj&>ebT z7na6~l6J|b3%Qdb5SCJ4ADrBjd3ekDcSjloI%}J^Zq`yIa{qmJ!Qae8y&ol`_u)DR zoWB!)a+p@w%r>$vm4c2cEVbdOylnkUV{u=zb8G*Tt3W>v=XGM44*yVmeLdGF&tJYF zlxjm|#nI1~fY0NcT9zN=kqrh>mmdnj>$Ek*Lf}m3)iikdF$sqBb+(#AsQM^F*oTg^ zVoxLbH&PEBIkAx28E+CV@)TYhQYU#buq5&afa=ZTv-kdPM`SJH>f2FGgO(<@o|HgH zQ9XG^zIdD}N|pxIhL#}-E8A8cZ=(2N>vo@N4M234Glp^X4%^8)E6d{}FNo(SNnvAj zSUg~+wTvGR47TxbiXyU_#F}bud_NTTxW0|c-^x6a3?auIuWork#=5%H;l$ZJCv{D> zpnm7#Jc*~(An%1kT-cU)zxA&OzI*{xsSgNvj(hg(- zd$(TS_!tRxphYx4`-e+Bkxu^1NymPI2(J6hy`2|Le>T2o9s>QgWM&%j$(xP_CQ8Dm z>Mnt3cbtd$F`-XJeHq6~ z>w@0(3s0s$VGOsQ1;CjaG-*e*0#SUD^Dh_ffB5|7g08X4eJ9|94+Q01hLd^aOFdh! z!L1k+97}fla{2oaWC_`S2OuH=Jce?MS*U!=7YA2%euL-&j|nP;`#WwYL@Wd%ph^+e z`idYF7o&6=Ja&_1Sy;L5$|56}Wt4C%!AptpDDPy*LrSWI>uG?{*K6=YG>K-=*jCK9 ziU~vHR!)f6d%gLzM9~JXKXi0E_DT){E&YwjfqogA?P^Rw_Zu^Dnlytt9_sXGrPM<^ z7{3@$3+?EqPRnck5omvvmT%f{KmYewU-Uu$OD8Y6PxrLH0hHsd%oTGRnkXfeWkgp! zL#khG?}yRUp`Ct$X8rH$Bi3KuU~kLg_H&9Q$&@_&y=ak2@c4#xO{6f{2>4$Ys54GNnD$OLH#PI>KZ!`0o7*)tus(Vb#kkjP?W6g_ zext61NOZd&=2QYozG`XN$VLtKv!D9+C_*Hp-;$tX)tQj3_fhUzM&#pUnqYW@a|(*D zg+^ihBerzJp!gNZ`J7jL378H{oUfxU9bO9%zf*WKP{j0`9;M8ppIFm#vtW;QhJ*l>d;(xmZn+$%RVzV&Ug(;B8UkLK^H6#rwJB{(!bN2)E2Ulgh03Yf05 zbnzw@Jrar`JviY)&LB!~qj?mh1Y_>FTt`G8!*q;$xy46)hp{mstF_x70&)UdILXCq zCj3}y6MnW_xS~w2gi#3|H8+s%bPpK>+KcIC;Qn$XQ!^@9H3jN3*r+eVK0JCQL$u-3H=D z-;r&j6-Y7OlnUqM+q_t+hV%@F8GMYm`Xv#ozV`;}&D=!MpD2c4HCx3G!_8<(8>rr< z6Ga|prj0?WkFn8nGam727_od%LsO52!GqfNKSr_+v58fnj`Vbg zBC&jX5g_?SA{r%7im%@Bm(^H3$MPteAS6oi!m5@~`|hAsKNs}UGzgrVb5oK&HTO|I z6RS41;}eOXq?W=}zH1Zj1FSHsF=cwyqEx^5G4QHLeqi_LV z+m@=?kyYq*02~0{vx&Smk@*f+n9bDmcHo($)mAPiqN`0Yf;jt@;a}Ggc>07-BOJ_A z3cPRPdjNKN&d5Bj_}-IVb=CpkWyWAz3p-WYZ!%kyQq5?lCmPtgwbv|+=FAOie#OX$ z@e6BR@b}~Q%fA&n8@n6wVt9Fsk6i$9BVe(&tzW%(uO`8^# zBpadH`z2L4l>s?tofrREU3(1L=U_q&Ns3%^-Z?mv<#P&FLf6-q$Di_nvv82aNwz-0 z*d@k}Z_*hirj^X#R-JJ}_wxl2J;)NpZ4+WM7J=~H2$czRziy}K&tUUEXP^=CyW~M@ zjuJ*lUT;QHXDfLTao@j!!Wmy~Jv*z+zb%rShQ;cbupSTUE7ssfGS1C8Ns#kNa7HvZ z@4UnfNh?puFAa)?@ix7$%`<|^p}H$}->qBg;8=jDYkXeU(UmNFiY3W5vl|^5 zo~*R?Nu-X;m8Pr>2=fI@+;)V?zLUR*0|Yfds3|en6x<*nd4X1~r{!_lS1(DtDWp#9 zwm!`f-C2Us5W2m<;a$<#FcHBPAU(FS?B$7__6#5#kFb2ys^WI@YI_XLsf(ycdloX> z=C#2$wk=Kpz;QD+jxJ0gYL-zl$@&vTE~t0rWN8>ils~tDVM_!X3l~w+Y*L+fcf2o5 zuRbp`na|}K-dDUA*squc%~6P|-*_XWpKXsy&ATmpq-ZJ-j-A&NhM`!l0;sEIle5Bh zZyJ5N`}&&HOHyndSMVqpll-t?*LZrmm?h*6^OtsI3JDvnELro2c2{V#i-bP=po;HU) z84$<>dSTg06s~c`0jPsrYqH0}GRayJn2$ka7Ru+ZyU}0QzE;KhZ07hegq2+6J;1!} zbttp-iwT7FjW$Wb{a$T}xbzcxdHAG=QSWtNzg6d@&-ut@d{MWd{(~U?9OwCQS zi^<|K$oPFaDPis#m0-vy$NMTG*!4qd8S&2*2F8-YH+fg`2-V%CF?DNI>z0FEs17=O zf8|e6^2n6Z0;j$u$>^^<|NGdy{8ak~+ID#hXHT#6&5ju}rY;+-$&lgGVd@5Y^Lm0u zjkKh=+SojtwP6El!89YX5epRX9bPGf6t6Ku#HDSSGCL(~u4lmRzv+cQv*}6JC`Y2$ z+twj7;iR}oD0ZR$huIus8CR}f9iL>Qe<%{ zCe(7|$Yp7*y5;D?hZvz!l*-IC`w|^05J0ee?nLD2m`J=tF_HkHB~bEWlH58GDC^V& z#t*et6KxYuT5xMt=l_P$Wa9-&re&gWj3oiAj&Mqrgm5}e<*4lo4L1<2EXf@g9am&W zz*62<^X|ILc_1ei1CH+*2i;0H*80|#<4de6S}c$QL^<6>a9Ne%m7q&IFw}oG}$1)vB%(52IZ#gXWrx4Mg!zzw(SCo{fFXZH z_OJPTHa)gQ^F*g2>|}#?;l7wGNf&Q5pFveA_9cGKG;bL2 zvSJXZBW4KBGEBQLvXRmd(5?BeC=nbR%x@k9W`)(VX_p$CRpU;Ecs@66G2VE`!yrs( zZARG`mPoPn+aDOg`>bprX*60Go>@mvQY$?JxmGZEHlSN=^1Ch^6C~6n+`p8c5qy!j z_FmPm;YP{@-Gk6gwlAatTB}M=)8U(+s6B4|RVU#UDOA>k%E|MVX=0rH>VapgF*RQk zul2&rfCJ<+Lm|4w4~3Zr7s$FqPJQy<*_Y;vyr=+45CM}jgqI7M6ajJekthIZ^vVc- zxSu`sI_tmdz{Na^%s)$1&zvqUdCl{hr`mUOrbLw>*QHLXPzgca7Dc+TGiC>{Q->eF zC$9xtlrDs$j!Cl?|Bk6=`n}X0j-&)en)LV6QR^exg~>5li8(xS4jgl@QKl<<2DD?i zux8!WoyJ@H;5JX42#DJEeXtGKnZw1N8e(8n5ku%; zsFE#RKpdmr;wMJVMbPi57K-QPrT$}n*3i%8+n$+%iGTCQ_mR~MP{F@Pb zmdCo{F8?xV-GA!9&UBT7(0pJ5J^&G*C7<27GG18UjWa|$Y-dxRg{`{^d38Xabm)KR z-_XGJ*neDs&53d>MpT7iDeuX)M-B^x2Mt3jKWJ&=c||!2mWqo&So4wI^<1mG0K^4j z)jw>?XFCKnVe=~eZaCTr$H;Y;`*H-`hBEwoV?}@@;E{!clPDAl00xxc9?s;W;~GeI z3E{_AKLX(~g{%beeyNrwr0&!mfgccjaUFbT%cq*$pdvs(tFNOc_fra0raxi)nDBvo ze9ojm0`sM~r(fjW#hCVHNE!l7#n$Fzt_0XyK$W^=v?3Qv>eHfo?+kq|^U{qnMXa$k zRk5g$bZuzTjtVcsEPT<+HUKKY;mQdzyUWC>#^>yEfVE4;k(dMI{#@b1aHBp5SjA<; z5eV@#nVl2DL|TdfJ@88)&xQdqG-2)MVn9aHsPbJIIYkpKlLEfaWS#sRPdQ|?4<&4h z?AtVM&YoOK)-dKA4jn_*M(bd=y82%=N2=2f^|OIrN*ukkXzd#C+5)c^p_8R&334zc zs{W8HFf&9K%sngv&ur4(uXnGxr^U-6e#ejP2>Kms_yWzhQgIH72L`sM2V#90Bm>Qj z94gTO@5nd2Ji>rTmWkr;a;GECfb&fRXK|Mta=^x!m(HHP;s~vq8 zX%886G4P?P7Fw-0$WI1rHw2N>aiE-$9d*N?#pMt<(51vwV8pZ0?6v&864${Eo7u=r zhA%7moRje1;x$Floj2fZB6u>pFucIJEm@OEAm%FaYR((ptn{`oVhA|Bu(2s7&E%%L zdAC%eQ9_!%A8jv3q@TNXpG`(X8PJ=Fs@GTz^sXg`qya?OZ0XdHO9icqP+0&nZcwZo znb#XNw*o}*jpuR(`^(p%H7XbsP1&S(gT5T%_<<#(aps-VpHP+^&xpgpGt>Fn6sFwF z1ddJF11kR}M(2mWY5%)a*YvBWutXCUSQJLcbDA#j#fMGeDd}o3B|mo$Z5E?LJdJhV zet+nz0g8WMg9@Tv(r`nvbG}d4iD}%8PGeWnE=_A`43{M|>lVlDh}pZ)1O2AZVdiX` zWyi7q5@v5e0(!O253Za=`H>v6r@m=qx>$GQZ&P(|y!`P5nr4Zm|FrG&;-bZYGDH>+ zzykMj@zZP}@hUWSZB!2Vu8ZZycsloVK&S?3xiUxYSz*pKD)s>HRH{yhFOvv|=>g)- z-jn!=Z?^n){^i}hH9&F%SZK?0!1e>*c!Yf zC7~mE=nd`Vy>j#LV0M!mm^q^JON=(P7{(9_l1{B8I&$J&M@aR%Kvgv`acmRr7D{$I zzYz+za}6c&qrumFv02OPXC0N)v6s$_sj__C<~$icOG13nUMU3xC2q>c6v?j@NhiUw z-BT||u!7z3rvU+YV!N|GT(c0w?wCo};g$veyum8NmUt>uMpcr`UC+{>eXzaOPkcq= zEOkS8OYu!i>^ke?jRaG~gvwie1TA7)cgMi01gC7O*mA*d>zRPn9zczdoCG2YQ7Mae zuX;0MGuYnZ{>h^b2U!s%Us}*{xF>a}{xc$l?tZst0TFB47hvav1>t@0i2V%k!i;c? z!Gah1jsZJCeU^c0BZK`Ze6=bTYxh2pz-N9hIP&oF4*Z$bQxdkT+7vyOn{NP=y8DaG zLN(5Ad~+kaEd4Q*l^PY2GTj`ZE)~FKPn5TlnT`{fyAtsWWOY1N0*4MsCBM662S?23 z&O-z-jyS}|Cb%I9_jmPv6k0v!$vb(=!Elww`Msr6E7?maJFFtB&yc_G1Ov>U`Y(J) z5VfPts_Kw?JAnqOtT0a-Qdzs7<4_(=f=p#&21Xq-Ys2c$JBDY;rrKG`6^axSS)}=& z$qFQ`skDH9)^e?ggWOyFAnJkm;{0}+__cg!Bbt&H{gS5lN2c^43}+zoH2+PR^DYMjf5}uB|7Tk8aR8C|ql^^m-bx48t5>E?kKz|S`L90frG-uj z{k#d}Q7o$5xlN;=gw&BKM(`jcOvkDcz^~{1svwtz*YJ3RdF@?LRzog&;)o?k=34*V z^Z_F6Yg(&BLZn#*RTzhZ+>dHgj3@JQe?efPaDwZT@+F!bSi9uYrXNVjip2fllm+oC zWaKHdYuWmSSx{Enisb;twIVYQ&$Xb!jcoB}t0g79ufGigLge9eHjkQC4FO#<7X?9- z3e+%~(vY$?gru#6LwzzxUZrn-lu($7`rA~N7DR{|dK`0DWH(+7(NiLsr%OyXw;qer2Zl#QYfA zBG7^5CVBVYN^~IrKG&}cWGXv%)um(`%W932Znt|c(Rvnvl=Od!f<`--5yR_zD#fu| zGWj;cOikav+%2N1-gwVtbRlmlSM==Rk4u!W>UvStXH`V3AKetF{4BeBuh(_JZ1q%d zi6h-8DdCIK47SoeK=a%cJM)mZ`RmsO>gpXE28o6vhnQ_;03$%$zcEI`P0TyR>i6?Q z63uVmT@4Y8m>7=bw8qdkZU1ZiBH}k3iA^ul3LK1HjGL0O3_c zEeFZ#{T~1)K-jYfHjWL5Bti_RAZrRJYIRqE&NE zti6!LbtHUgS5A<{@GEhSEHuPy(`tFZRbeEv5r?{u{w(awDND<(<8p z3iadW!qnEt_Jb0INzJPtjYXfwHu(F02)!3k6}*0BfpbUK>lD9d7e2ORspd1tgxM7c zp6=GJc2mu8$VG`#i5-bSB39kwf4f2c&G?~(XBAS{OFZoqD_qfo05iZ2iV#q1)M2q} z$>n*9OId2{Dus!5Ia73tutV#{`k;(a$}V3~CHw^_&U4In5G0SBLQB?ipa~c+n~t*-<`qWH?{%&4S{hUbXl*EJ*1|@)%M>yTx*l zXQf|eeii}t81)^zxVQMFm5gmj4@~{yOdL0FHYxXXatB(nwS*!ur9p5~ zv!phE;_GuDJ^nA~#t*hF#Jt2PtQV9Xo7Ltw_@ITTmz|1#|3|dSOH??`TbqcF5IRG8o{3Ia`3=76f0tF zD*9=>s3l;KLR6-)8ng!>iAAdxsJf6*YIz{yGoZ_r6IN<|Z(EfXeV!f56}zEC07Z}} z*4io}T|IB@f`ZVWHM$K+D(j(H5F2!OM$?t#14^YuRP_X8cjl7c&+hXAh1uk#1Bm!T z+PYwwie4=x^QF>4+m>WZxAgJgTkOZAV@|QvHPm$fr<);Lgm3DsQ^hMb_~mfNI)C6B z=Sp7o_X}eZjWgbFh?n%J@5+`Ynm;=s1UxjU2Im}F`4`ncy`jHT4QA<@G@1LRl(mp z=l44o4o25|tH(dy9Wg-|pkOJ@<$$ns#-~mk z<)JkZvgrso8s7XTY!Kr-T8SSUhY?G^w#(07gNbEb9AAYDOKGJH6CA)WOF1D}Bkn(0 zTa}Y1%}m8dslst*fTTz~q(8i$%0Gax0=W3lNdkppJPScm30)?Hs9gLYR?ys{jB3UN z8Jsm%_r-PfypTc8GMbQ}3zMTjcp8)nuXWpgg9wH%&8X43rFBv7XeZrzxqi;zIs$P2 zNq9K6QII+>%98Sr<6#TW7VHL4w|4MY$jP7d0LwZ`_yVx@N~>slOQw`{E_enevu)d}ck>KRG zBKU%@UdsXB`Ik~4t5%SrJFb}6stg<$z%yCfMQ=@`a9QZ#II80bJWFRYCW)fLz{HqV zD+HXqQNvz9_<|lS{)=54`t7X{qk+K_JOVz@=Hp$kOY_^cw zNBc#c*d&Bo4vBoI>qe~>qZna-oDGfWuEb+9K-pwrhCX(fjJtMI3v1LrOoTXYeYb(& zVCh$JaRM%Nj8z+c-%K9Uxv$0<)M!+?_+vr{b^Z}9It35H%7c6EbHcyEk9Cl!sw)mE zo#xm0Y)UauodiA%gtH;7Pj`zK&`PA5xcYYTlCl`iSrcAa?xlmvb6sP|=?{F;eAe&9 z3gtY;b&%yu)6pRIt4Rt>dsNHQ`h|9>)Jsf$&0hAd#fU!ohk5HkWu-4O!rU+! z4)#7KDk>`f<(Y8#Ui%xDcK5wygaN>tV; z6iQVBfD6!#K+Q^DdB$rC(yo7JJLEA0EsNxUGe8dQ2<^g)Qpu;t>l>=^8oM*=DLt#U9JD7Bi;)}wQSa#R%CJii<@;pRY)@Vbdh&$ejXl<()-TNRkOlaWaK8@i zzhmQV&|VMK0qFtuk`J|__WXBzweZBSU+UTScqgff&WyL4(oC%|ME|oClYj15K!50p z?2OG9h=siIKWE;c;FNl{5XB{m@04dk5Fp(%qD6z6)cM9QaUs!PtKQJtKwB*ptOYq+3b1r6FFsEMG1h4T?K)4E3|cE$fGjK4TtWh4zCoA7x~bA z*cO%G+Mg2OSZO*B^iShSj1)kB?t*k^WrmF{JRViBE39*xF$lVm(NyRpp}wWwo%0_YW#DrWwz{ z_-H?pl-8d)s2&6?EMR+^iQPpoFs# zc;(ejuxn=s1PwBFc;aahr)q8%mNVTd+-PKtRFXQ99-AM=w|p&@XGV*f!-ky}Sm=V155sKwkd<$WUt5;CPZr+1n*9Qd} z0Xz~@sa6=v3fqUwPRj$0t@70u`K;%_?lq#UA79ErD0#?~#UG=uV;M_V?#tf)0kueI zTiJPhntKQxPq0N&QmftnByfTLys$IX6HK9Jq|V{ubjsZ!GtIDQQzS<sZiE#-Gs+SFpCsm+ReROlu}`Ah$n#r23akYS~s0)u!Rk7xZ2=Cn8N z%Fg-T7b1g}Q;8R{xT4VAOCPy*tDt<*PN=3%|Kv2o+Arh{Ablr1=l<<;xXYv)jVG&T^10Z<_aEL>`GDQDO654F6_ zKSImVIXK6yNxSgoQLgeAYyiyQrGBo!lL=$Od_y)JPrqrZ3FP9V3W@ZpG`3w=YGUp8 z0p)IPY`Qw^3-JE)5UjuG24@rvbQ(U?RQAUITT?k#&lX%grgoEe(T<~P_L=w?uI>_vvR@7mpdPMJP6}X zUD=^xj(ybJwEIpDz)8T=m zsE{oW#QlOFIkBb?40~r`jBMje<;a7(wICs|h=-y~Ga-Nyr(bl$s*X22TTiUP`(*#L z?wY>*hUkDu>|?rjiPb7fIBE^zeTT)#I}`cQwGeyhgng;0S3zl?Q`ZY{13dk06j#Nd zN~|36O&y$Gq7}W5kkmk4_Azft2FcTM8KTr!#3Rz*2PTqsUMhjDQx3-7(RLYRjc=#D zz-Ofkk+OxN?kbh*WVGE&Ix6JCpk|-(S8U zHyKe)qX=ns^Zk+w5nFJPn?tnE(ORNo#aS)&L5YtcCt+HvRn{?MB41}s=zMQ`ge(Jd zLPVK;fY|c+DwK!iZ*OReBUfPBce&9wHF-#*g2)5fGx(CGy?kRd&d79E?$en68zTvu zvAJq;YtrpK$h}x%o4MV3h~*WdXc4oC<7D)Li4c#Ed-?+aFMn|57dZhg45)+@X0gIi zH7!T3l7ZtrM!HSA=v^%$rd<+ErYWuLR|Ao96+(o%IXINcAC!=4k1LM}|Ma5!JekBf z8}L|}v~s_iMc=)A%KiBC_PPKEs${m7GxCxWDRA$n!yv&?l_;23PFbcW7$`|)h%*(_ zD^25CjjNR{K9wqY%ax1IFk{%1Ls(Hi0oqggmw-ZJF}pUeA47DYa(yY1(MLmmLTLGD z6iJlfP~rRy&ssh5-@+m0h6+T9YRgDuSBF&g`Na%F{(67GH0ISRHm?z5Wsu^@R}-R7FdGk$aQWEA!?cI3olq`k4+s3Z9Q-x51ZPhP zc_9-qI9p-wm=+j#b(!sY826dycR}rZ<^p7xbr318zJC0xStcnGyz3>0;nh;a33Lah z(maU^DJ87Z?6WDXnPE|Fh+hx~RiXhFTn(51}%-n~!y?Nn*6lCPI)b2p%cjeMMm9Rb>j4HMJJ2loA3Yvn8lFZv2ME%o^6^)jiWGq0WgP16 z#x|F?O|1ls3|zlen_CoFsy{_F>W|#SkE=L*KGOHw(*@o)6Ch4C@!}R^Q-8K;NMn@w zini6M4R7#l(CX9> zrCIr6Ri;rr#4YTRl_G96u&&ap%6qRu9MkOsEET#4p`*n~Uen3F$YvoaG-u{t4x3kj z$CP}yp~?wI-)fh(EzmZ3D5dsHC%2^WNC<8+?fr$I+0_M_G7-ylhl0ZmeOrXg_zdUo z`?gQPGZh{<-LAxmQ3by+7}c4)&Tbzybo<9u=MqibJgeB=*Z~?)!`UQtti_w^e~LB* z``y~>rjhn8a6N_LzG=ly#=Et~foIx{6?}-Prw8_~=G6D=o5cX8_|F$z?nrYY1?{P95%JMUjvkN1{UhvT;PHb5QgDtnk-3_r3>O>TWQEetL zApbj^J_o60!C24NTk-$B;pY`sqQ ze6g@yA?j8LE`^T$Cl!m0`}jkWU)uC0piCgq6B5LlbAGt>Jg5t*H{GUC*E&w%1_F#^qQ=#M82)sL{H<6+$F7q&Us z%WJ45^qlJwGAEW3P*a+VXgojTqZDUbls=Grm}ffvA9AiP5+S$!#7zV6aIM?JLs`Po zq+?B#@$@*3ZjcVR#_=^k(2HBK=wXm?69A6YzC&$zy04E7XO_i563RsA+;r><=V0`y zV7~%(z?WglW}QA&TaznJUSElDMP!F%6eTH#b?A)O<6U55izWN>=l8IZ@y0}(Sutbg zU%=d3@$_wzC>XtUq>Y7RtdX^=Ae!N+M<}Nik0N+M+oS}kNbq#faG>BHu{SbpAKTQp z`CD;=2k*V#Ej-nK#oQaydVVwuz5{oT%JPWHos$FM<@u6$f<}>iuD7~D2a&uikI-TdUiq8YpfQ)&sxwUPq=pCKTTg)O(jOnCG zDE`z_mhyO_Z8u%yW+vdJOs5~McUcsMf_CfPyi`0Pw3{J@-7}4Gfd}GFf=o_1+*1B~ z-#do&S$Wi(4R~@S>DhA4_Rcyo6QG2T$(tFa2UV{Uvac~zvVl~ThNvQJNjNQ0SSYr0 zOU!I>mPo>x3eT;09_{eJTQ+Hn@J5F~nn|fWo`zGkEq@tef2IxU)B< zIUU!zzj`y=bQQ$$T^`LIAWSk;u=-T+Ix6;;hMUau^0|GDdD|U(PH5L&*P3BDh0%%i zUHe#4uY`cp@MB7AZnJ~OVkda28_PByiO&pxc!F=?RL#mI@Wm++RQg`%BY4j#g7ufX4N6hvs zjbz!@Bs@JVmsz#z)RINPa40v(Rt{3wSgr+9bQHQ1Ej=S4pJG!=-BhTnxNip;A~Q&E zK(c=3l_`|t8*Dzni&9mk(e2{lyf#O?#~ry4K^!FPdVV~nZb6lG+ff&wuxf;d7Or+@ zf!*3-;qQUi2<5bumS#IV2|}@wdm3eUOGn#-6b_%Z<=Ez;V}T5>J1d!fQHj}8ZSA@? zq&SZt?<}ndDjLD4m@EH7hZ2QmD$HoH{-_%X(*6HCycU&nn4eB6b*fY6>U$}UTnzT| z3)%Hy=~e?wK9gAM($#T4>uFjEC>kR~=%tk@#%2Tq<8J(?SDj(QtzSy0 z?fAS4XFvm<*3=_z`H^7-SZq5;eClB7)pSSijE>MI6cZc#@lDbi>f>QVkfc9;Dw zCBk#HL3_q3x9dr3KLa`;4W=&pmuGz>8~QVh#sIDJ$y7QF-2_qT^|n{=aeo$jnMJ zsfNbN)5R7u?!~Ckdmyavv8UOMR-BR0{ytb7_iKRAxirrvBWt8@@dNmaUQ7?7& z+OaaQ0rhttrak|inB*izsMLmAz1aT@=87zPR2MJZ ze>az$7CEc{KstA*He~{wzq$u<;E)zkeoHNp_NI}@b9Yc*I$qHm4J0B2WF_!-b)5z$ zrB1d#DW%3aIbCoEIMhRj>AI9T#9FG;F>Q8@Q_?Nau5(2^-iQFGwdar@YHjrsc^ysf zl20$mmF|olEwBF5SL{Nmlco+lMkQ3_%mppk+Bs@ymmcy%zi4lf5$M_(U|9VlXLdovx;p>{6db%-_SGgf7!Uve2 zqGS&V8r0D(AO= z@9l!-*>m!>;tz2evX?&DqwmsQviV96mRMGVN}pKbF4DY>_lv5t7c*F&n->pLo@o^_ z^eiVAQ8ej~{NJ-3ede6jS9}+hoDEc_T`HM}fu1@L(D9DrU|)7m3#MJGn{JWoH|%w7 zj$7NwIz*&qd_+sAOhePjJW(RgOaSeF;_c|f4*^XHvjmuwk9hNiI*Umw5#f#ml5jj= zmvb%u%Xv*N{xDJ@;zjQcOBP~ejaZt0;r`(Qgi1|Wc0`xEsHz`3IQZ^D-Y;mBBYaDw zZjFH4$&K4~R_)gl457R(@mS{4;gE)d4#KU*f`ejfOFjWaAHfaO9x5xX80Mj9(}b&> z%)ED2N}#cWPdgR1FUG#+jlH&Cx(Tyfhd{U%?3?!TgM&wSn~;RcoVb%{)#XKBcR&(q zz02*^0VMR=uE+Jd>Xj>{KG=19HJv`~nhD?*vZDn3*Bw$y-%W-_(F$qGRp?*od6?A$ zWGBDc5hGk?&KgP|k`2?-xK7ddZuX9ALhY3d5|}S05;Ymutn5b^|4S4fN4#8$r^8&k zMT_IAs@elsx0n_>$MX#>$RP?Yu1#TjqR0gf{@WcN??X@WVYcK3pSOT=&=b?r!hjCy zJ8v8$?fTdiBEdmG%iafJ3gg%+MjAQuI*25FaiHP!g=2)?Yc|BPjJSsW?OrJwIkcS@ z8fQU)+9Fjg?&pHQMH-EC2a|0rAR@!68Gnlb(I-Mt#^@l*$U&IAULt^9O)WSw7Uwkz zMTR`y3&6GEfqN-U!OHokyf?mMAk#NugXrYiOB*r^4ITKiB!@yWB(uGGe)=_%;dg+VTf!l}r&#d+gQ)`*%7YD+~jZ1sBKv1AVjo0sK_ z$7pF{i#3YSm7GP1WY=U9UUs)owh>>yg>B&xMwd8feb(QXWL&>f*NEcm|5vgvplWhFUz9N=c597RFf%jaVgK4TZ3XOd)Kqizp zH!l_2?y>}HG#cO0NB?B#3B?AiIxH~}wfw_``zN0cE3qoe$3vEag+z`UhfCK>4SZ=$ zO#n05H40&}zCPpP?W5`<4sM=e#Za_8sDlLL&d%+Ge@9geiC z^6B?Te4fy7p0w<2(cZDT{q&G|Mrdr?05tqZV!BIqUDjxd?8in|0Z?S4MzRNLzPSBfdNA zEg)d(;&ACmOi78OoQ}n-;Dz>|&F4fv%Z9gN9ZOa12L?KjV0^s@rT3nozD(UUohvxRD@9sa{&X5fO3m569Q%~i;xQOwlGV*DghZU2#=TB80^D% zbOTQVby-;LdlG-kyo_=AZgpTd93V0+A>#&{%zSAV+}{EjZuC*Cb2nO4c+}T9{>pk& zyWr(UI0VY;&`1_N-RIG7+~Aq}-&eLyLe2j&?q zOlGAgC4XZjQQcEnaUp^(5+_c8!P3KURr+x*IY8=-vm;RIE(wJV1|*zr;%|p_0zyW^ z-=)ad^`q2I%}~7gVPSK4Un?!Fn2gdHblP z3g&5(Foh_qAj&oNrWFbB_=@c?ZKaWBy2Z(zS}}gPP$^9Ka|5!x1#OrM>J`zZ2yGYR>3gzuTB>EiAFIBPXa1Wn z77E0TnruVBG$cldRoM!S>ia+D_iQ~7bOXx)5V6y2QfHv8fWoQ5SaDH#?icZ<@D99j zQYtFzc!-N5megGG%?B0WBOcLcaRD~8L@kx=D+f-SRgGX{f0lPnQj0?f2#53zA3F4e z5J<-y3r`@EM`;n$XqlK2r$G3mI_0PeXVr!8ZY5X@25pV=T7z2W0&x%CRW;!8Q{ zh)f_lBoRsp5QJ$Op8SPTNY-dz4c@@pFg2W$uwc*-^5xQU9i}jO$bmFCGLzKR?E$WRALE)q?%f2KFjux4k-EfaWZhx>@tq7WIKJ>(Gq+ zNgL4bR=DC?%d`^&WY)_5E#|=&-EoloV}Hl=vIjJOyWSm*5<$wh9=m5W#l`PM2K5?m zQ6xf_6ELor%;R`T>BiP!;_^x*vE+C}L7f zPmpFUGWSJgbkRhuS-qRMC%xv%@amHY{QZ4aA*7lZ!;2*`!H2NKm2=80+b$who23T! zEUs@YfW)8#5^Y-US->MyL=wZj zIFZr~t}KKIipm67sl$uvihRc!f6cm4zYX^4=I_1d{@k{aVd8;iuDx0D9>XD7oOp2Q zsIQ~0Zf~+}(p?KN;BTlqj>4G}V%Gk{gqXiWNGFEI+KhyXT7SY{h*;}X;IM`it(Z}@ zq6p{MFLp*xWjjt7j?~fCE=b#j^_hi&q-(EbmIiEaA_UY^jmwpfOUA$Ys(dhF|0mrJ zUQ-`ov$2j(tLI!)@a}Jh0cV5fx5`9tKQ=Nmb-Gk4WxNg<&Z&cbR9`y!IMm1yz6K-^ zVyl6FkJ2sA5!Ymb{~i7=N$nyw0E>vyg&)8{afs5RP6(7$1w35FbLsybayi=_SY?Q4 zWu6=}aSH1||3JE|g+R`rrZS2(CmZCNNjX%k*=zISw}T*nTIqk&orco(!<82UcMChe zuKABJ0ff3R23JAYWH&57wyH+lNGAjCLo`I;R?61-Mh}-@(kE)0$y%v1<(b4GGe^2i>)ATlHQzx}Td`uEZD9$aNpP6kooo$3*FFyL;Rwqs5@W z*joty` zJ|>TCCTRo*q;7Zl@1iQdF#}PQ9aCP^-|f7$>@u-JiX|ysf}XUR(Jz5aN8R$V@=_li zQLuZS^g)HVv|O1*GB4d=AFz?F;a!G53;T>W z{r!|O-LjxyvX%GlA_*v5?aC(T_YEG990S$@jAN@`<%b%UOw#av8G6BWm;2j0H@wiy zc9Jd{0rkpBVmX@V<~(Tq^6ufmb4~wc(;oTd7}|Apid~YA{&>_Y=JL9RB6n6ssC93P zSz}d^=Ct@xZD(hXp3pMb*0@0BIwp!y>)(3TCR&!Ugag@^r&U*PI9&?T0zjZEG+&h+ zrF8r}2W}5l$VpJVzV$dxqG>&b@G3Zpfg5WVszwr{U0D$AhRQJaYwM0%~!0FFtkDID|V)5tBNRewNDg|S;8() z_rx^{pMqa#I8j%jD@!yGsb`Ft<-|asJ zQ(|>dQWP@ehc8lXJk#^@2P+OmQ<>`{BxdPW0?k-{-bdfily88h?8*?6-2=Vx$t_OZ&<`c!vXmiKG>@> z7QWQ4h_!f|{vg|&ep6syN14A&dV*QO|DG1hj=VONSwyzf1uhqI#>?sOe-cLHL&30= z2SUVvg@+~+z`i_v2G2X+tq#K-vY&cExDxfQ^^h#RQS&$VGLE9_@%@Yu(&a~C4Y@Bb zzwt68$kTp5=j)3OF9G(J%h@MSbP)W|F|yXQ5K@xHi#J{KObtRvY<5#Uagx zl+gyrgW2df&P*It4F+VKe34X%y>W`G%c^F(g|*0)$Yad)IoU7B7y;=*XMgnCt;&Y_ zIcm6p$sZ*SeyF^+KvvO@LbQWE{}2g5Fr~h_!%`icW^eoII=av4RhjHMY--nA(R|l& zSO0HZBz}n~8PUzFw_0_e_7HI&KJelN({f4po*A5Tqjj#%mT4FaqVCD%z!}V(>(V-d zTA#Yam4?wj>0tqDq+xStaWlic=w!Yd=)b_UfAYqf&1?^ zyYedqME!)_{~2cpEA?#mS97H&yMxhcT2pc5qKzhLo)iz_MbJrP>I=UE&Lq*R-0N^7 zZhJVif?}B|KMlV7}r;rr&Ex$XS#Q`!@ac&P7bm8z!GG1I?x7%B8-!h==j& z$vTTE-wCYK51KxuvS;6^*usr;TX`=bdNwnxigk4sbg_$#5=5oXvM+iL9-C>T(7xNK zXa*&-xZK5>kd3&GQ2e;!qFTb4$`2CPA*6$`NzO$5N_`0Ue3@|5e?Og)vsZ#FkYj@S zaP1PqsWC*tB+3}M-&7Xo6-V_iKE;CO#GCL{Yo}hQcwvOGeN10{a_~JB@~<}3bh&=H zSY(AvIw1U$L||ToHnoV&?{KuWe4Y7KXG#~skuK#y)7lS10&_mos{}}M!!V_GyX?nV z4HIDx;#H76nt|jC>E#cX2h9%pTA2^QpD1>;+8A7$O|~~i=&?xUU%wf*qJm5}(qaoo z=*?uh7mQA_yBg)dm{g^wCyx<^eVX)Ez8@wIrb2(>la7~_ z!d4I)X-e-}bZUQz{P=T{(#)C`u(On#Jr^0#ZPg_za43 z^CWgpP#J3qE6%&Ks3wHT%-D@Of}dWVz@t^H#{x%V1H@vjP3qIAKfr!4@QY?c@HNc% z$HQN>;1w1+J9j7K7>MGQ|MielLt^sel46kZ#HsLd&S&Ulc;p4(TwIf}2vwZxaze&J zByDsuXc<4X>MBCf%a!~P{7Wf|MdL7^A>&){w%Da$D8S6-?d!(GyZ2a`OkzIXe0ipc zjxxDqA6}mkebiRmfKDSujJSUis(Qd{VK)CcAfo1{6up?{m;2^aV~6;9?Ngf2EByKR zL#nvJa`I!m&v}@8KVCQ8-fHrb#{}TU9ximm&W`cJ zH}I_srk5NAlohBZ?h`~_#?#*m!Qkh%8LYcRc?0u6ETN-}v=Ik|KN`Kq|8|=kO*)gC zS~I5qyE32w>im2Q;`e=d_E}z<&LBeoa%rfmNwkQ!zv#I&oo~{LBeiNCT=qjqsMvIy zyKFKxaMukUvFe0S$0O^7SH6D%Wp`o144s$@6NRbPH~4~=XS*|IAeogn%Fbf4oH^6V zfi~D6@EYK0VaQ6NNll7HjdT|pyxC;@Tmo54ziVcxv1{|@CO}UW(<*)Q!qHe(s}|BUIE-R zge5Lt5+%ZhHiRf+OAeCk=MsL=^$C7+abCvwyKtK*W~1WdrO427`^VRnQ)_5gru>#T zFuU%un=o-rNOZDAYp!Hp45nOP^#DZ$HMnr!*7!eBDLhHR^1QlJ6g>X4W)M$4m{8qe z+CG)DClTLiK$)6FLf%;v%;M`7hJ7`tfYQb%#>6W~Qbx7#vN_~WyG0%kmN1)$HW)(gY(rj0|LKz7F-o0L3i z{zg&*^rvPiSbAyHyPhXh697BiVHv9ZKOR2Bt2z>Zl=60frTH8b{b_$la@6VzvtY}j zpPyQ1SNim1_=JZzU6+jr!Wp0ylh*381-U}=l(XE5+mH<@V6}qcu8Gm}jW^rmB6E5V zvj56-jr0zY`Szy%MQ&c^eNPbZH)NIG++CNkzW_UFi@LhZkkazzwwK$SPGmKVz6d zV-1~kyuCYmctsG)82vRSr@`G|e;w$xKQg5IfaQj#LTBG}F*J1tpec*CAO^Hm0dbeT zY=;_&0SUC;e&8VQEl~K~45+UbNEu7m=9t74O=7o+l#za>?a)8`argg-IeqnMe=k@N zO{I6Rt%~-xDcLA7X#_A_!4z^2iS&W%yteECH_~3&@A{NJxD)ahQmxnyLG5+ z1-t-|jJB2eFk-?XLhAG$dA-Ag+16)#!zIc~-NOsyy}#Ir&jwXi9xoP-xATRvH_-nq0 zPOSr)p`YHcPe2rp-0WX@JM$NQRe||>C${YD;kNe&r5qz|GN9dMi4iRHwd8oDP}9(g z(je*SOPs*4QQOJXXb+L;jX{T&3{^KUz2w$!)+Z8!PxtxfaT6*Y5dSsWmYxT|BF%K8 zYdnMNThn4)a42wKJI#)nze2&(M!P;J>u))=0Pho#T8+@nME7L%)N5~r@jfO}4Roy+ z-`wpoL4%-iYXGuUD3t^9fv+Fu^h>#8pN1Ak2hyNJVCcMtvVY)TI^&;$*)#oC=;5JD z<~H<3G%^*uwcz**U zJw$j>)hpzqFTmaPDZ&naq_1m1`P#PAafKV#(6RqD!SwAiH-)?`*g2hAcH|S5WZ;ItUA%-m$>)U%x%+!@)euBIJmzQc ztI5oHqC-{>m;iYRyZQ2}K2(Y7M7peb;1kErG>;lkjR@mgms=F)Vc|ddDkDZ=DC{u7 z5(3VssrSU!fKP>S7#8I{x}lwOpwPQ?tqGts`7Gsz3V`Y-Fv$dYS?$zECGygf7B_AS zYQ?j@)9Ybgln%OG=}jN<6!zdE!Q|q|jA@2c^KE z#h+9#*u{UJr9T|NiP}L6{e@2LqMWmMizWHQ>h>#zR9F~3bvdDp2)uPm--zcu$F_5v zD48@^G4p}W#tD^)T1DMt(awK-oxd$L3rSmEG_aN8j*A7*qY$3cgDiIvHPGAixXDuN z>L;V`eLS!GU!qQ<(Z->vySOyLgBOsQ=rF53cj~Zxhx-6v*zHssYo(!*Pj99bW*81j zDg39NnrrS^E}bo@b?>e*+x4JblW@|@Fp(0DxO%h{&6Q6B2yXj?<@ej%yWL2P5SQIK z=_ad&V?r?qRZZh$#o7^TpAPVWvndJSxVH;vH_+>q#E`eVey`zc~0iDKvays+@7) z8BV?mm~h=NieUTqxT>(qIH?JuOvyg09ESJ}05w3$zo0Q6`kdUTc0gj<7tdo4;>)*V z@)j69DD4M)Bs%6l#*CG++jTarLq;~f`+8{EzaPIIoyiF*BINN$wmW`)%pR!J`r|Xf zOTqF^Huiu3J3z$0Hw}v9pv?~VK}XR?03>6FU1Ug_=0rFAX{$5;) z5F4!`(5^~!Vquvey#y7jXb@OXXQIIeHeET7x|#eWT_Uh;#V+tygBB;|Jph%){p%y1 z4@00*p{sAWlb!Jg*{E~Nisw$9=*}wc5u~xmt(}!F>lcGC21^8f$ZoxR(x(ROWy(Wy zlZM*7f{OL5_{=_vHued#9EGYPhC|Y28s(-=s|fTRR4X-HJt!Ipj$je^BKY<-h z=`O!|X(E%FK8$(vqx{UsjxrnKkjN?7De&I-LhhhgPuje!@d>h=lCUB&D)BURMnlud za5rtHb{x>7OxlkPmZ(Ww(OLe##b$KLPIL8ON=)4Rf?2HraV93s9O1|#IXJ!b*JRxd zdE5BkUut;~99_?lQ0_B{oR;eT_6iJHdW0YjyeFH-}pg@2AS7Ohs2 zkReQnX)46ZluzM9VXDK9DBY7cw>9YWI$)}B@XQJE1>r@AJA-e3{=zQ>H|APp>c3)Q zyEM3~ExWr->mUhCNcnA@wa&}1ouXAM?Myti5aenX(RsdQbb_Fp2XLewYyjkQ?z$KI z82er|kWUq)xb_sOh@M`9cY4%pbFt|4x z`FB$}QsBH>tBI!+FOP{sM&Aq}sJi#dWtJohd`i6(<0dad06c)rTZ^>!Eg^5+Jv3zF zD@|vKw*~8*j>skEmc^%gPaWZ`V_i$2xR9igxfq`l-X?i7SIHTPk95B6j^$KI zC7gGR%b35Gr!(XekzVH{)aA9(pJYo55`pLkW=CAk5D@!qy>X8gku5P0>dS0=!d6D) zX?vj`kK)d$3&{H~UOb%`71i=@eW`as3y9?x_5B-n36Wne4&b)I?QS_j#36;DL@=Fp z0oFLtN1wR%!yiQHMtPo3Ae7$j!I0^L$?>l+ByeIOk$GVK=ToYm)M@#!I;st7?{Pg5 z@)GHPZz501*fDx-qIv-8JVFou%W%=ae7nsM68%>j-lg&k)2LYY#(oM4eQG^?1`N!k z1o$-)3(cLE>nau>MQUUz%+Y{ZZsx&jFDI}(E?N%0tq<>#UETR2o^=uNKoOK|xqT$hgofkccvuDtkkqR6RHLbYR_DFQSK0pUZFCGDAbsu`6O8;5a&lM}I_L?~o3wKQ zlQYjbVKqP5ljw!O`;+zB0cxiv4=hTK~4`zu(o$1f}rv$12-( z5vV=EioXRzAZrq{o{$XRMAc2S{Aut49jGoiqg>8e zbMB!M6ps8;D2=SydX*b9(v7^bi1;hUaHRqv38=(06u<|{>^O~>gG>&Pr)C3X;=}_Y z`zg>w2VjFMiyb~wD3U}MPNKs)s_^ac)~y<9bZb^FXb`pqSnr&10Rw*3OxuE+a`5SO zKPB$wc~laFEehP$>Ge5>)MHR^rB<0Bg-it9tr8qs`A!!kg0WTxe08ywg;qxL(1yH_ z&VzK#6FO!jwtvw1O@CP144=D}h}%)|G%5VgX@hBan7mB;b`ws!5Q_^umGGEU@(m9I znJswX+L^VjV-0$w##Syll*tdCa<;gXzhXj;(1#GM29d#uNvm|dKr6DbQ& z4RG){l=!LgY4kBpq8eN4+v$net2RM0i^2WDgNsVjddtH+z(~ksvPljuMv0#}8_LQs zP~Wjs9GIikVmfJI z0dsR4^>pNiV$8-b-4h-jwax>ojRlPDXr}D(;s%C}Py;?aX73r>sbqxDIL_9G$1ORR zO=19*nFjU6{B-Asg*k9gb0>OZU6utq==hs>W5IP}e^!>D_L4sl;=l7oZtl&?bq7K) z1{MleBemteKcvee_GJP<(0*wx(Qc8*=J4m?KxJmC!Td)Lzm8go_ds8F-29P+l0wJa z1GX`u6io(Lj{$`*A_{q$n{h0Z^#r8E+=3A4Q?Gv8Y2U_;?P_NFH-&-WacEW)SJ*eZ z%lG28a7##Znah08*B1dRd-qCLMY~&`(w%CSdpr>4(H_2H8@xO|sz6vFbt~c( zoL%gavbc2NQOLM|FJWDqQ`xvPUK{`^_G(?zqJ8F;ddkmw)y#Jr}={$NRan?nfBg57K;M_cmtfz!KwZLs44 zmGoa_H;{xNn6en4sj^R|w~BRkdB#?CorJ17gZ+k)KZQ{BPu73hX)9dI***TKoU6c5AGt0*gQ!!1#?7zWFOLm|x^!kg$m-SsJ!hLP?Fuz~i{p;s(+(jhN>7aM#(jb!`3LN5T@2v4jL zBX)jGj`PzKm zEVW}OF+7wa+Crn?2%RYWv`M%Y!bLhXjvvAaU3OrRZu!0D5z+Z*KY^e}sDBYSI7-6r_Q<5)4Z6zBuu29c??iBX=%^Vlcu*F zSZ!7h`-CO1RCIUPk&j$4zbixAwjC&#-)iZCQLBMYDraTuTRnRbwhRu!IulIif6O&c zd*s-}ckiZ&s+bZ1E2shT;U_jgL~D*&-Ujb1FA}w=i~U&9k9#Z8TK$Pvb7=&}(zq$V zL9pBd`N*GyklbN2VmoG#i-7=?620*D1vXc)7{h^=bIy+YI08V~|x9 z9Mi##REth}w$5ydFgjPi<{kqip2aR;pqJ)huazdxDYR09CXim~87!5m+SXaxCkpR_ zJeW%tx;zWUl}a=0$-kY&0W2=n0^CFV*z12#G-X zn05bTE=d`@rN1PgI+^x%3e#~bZNx@@tOgE|gGVx+aKL%q1ZRt=nS;@jg}p=`H7Mg{ z`1BxM9v&M|dJ#eG2ngqI7u>*jUkJ03Ittc2^2)4A71@KTG5lG)U*AX z89|apd_E7H&BV#fp%N;>{<0Mh{}1^^esVh5w$Hh#J+&?7R3^h_jaixPE%2~7RhSHS zWW~Ji`bvo)4pgTR;wEMD`YY}S+&wL8<;C%(hdJoloAj5*S*b`JxNeG z2BXt|q@VIpQ7Z>r1K*lHIRfNxY&Otyk#+;gro=xou`$*ewazetsc?6n28MGl$WY!* z{m2HEu6%+?ZzCDhSGTMA<11;J_)Q0hhy>4jK|4KDGC+g2p2Lirkj0Df$Ih4Sht^Y| zOnc9OE4#gn$m_P=WVc@fYKsL(^SXqo0Zwq7KQq$5z3XB?1!-9(LaY$MehFQW)GeI+ zZJ@yGL4ouaELyJ}po9wlX?J<975UMCpLgc~F{c~5MQEeoFk1S5*;u&Txr%loec}BP zpr#Yx4d0gP^we_$RTY0+n3>3XvBz&L}Cf7{x6 z%DEaw_~2{$Furinq{l=Y%^jNlwwRK1|L>(033)-_Yp!3}HyB<7L_Zi=Z14QN^Qx?x z{Hta-s^*t6MQ%Hl;s1kamp^Ss7OzNII`6B;r&{?NDeQtKD z?i`)yR{ExVVkuhK!H_liP91YD%euV-#Yp?&B&U`T!M4lN{hswWp`H6f!p4~_C{JM!{yWi6l8$nXG0D6*BsO>HJNiPa#8_i?nKsd<4HBDuaW5SWx zcy~b0G*t{%04}qrESX=8^v%_@KScLH`4~Gzuzfv0)PX!0Rr+81b!z73w3%beh8JCp zugYw3wD!+2?hw%ls>Br1K)h>xk(J{Yz?mraZBr_I1A=OB#oi&gTy9M#+{026Xd={D zGxfba_l{?Pi(}`aYqVB6tHv=}Dq$>J)KR8C4v^+j{~ksV){a=`b&>v7RI{uDUkkIV zs(+**jDml{WD5~(I)7rd+&VaYr?75~G0%MkvPic}x1Hg)+e!e#pwswgHE{+`Elt_y z^;;ufu-%1OR;)GLZPOZ~pXbdOm6LuzqkvW*Ub^D*xd)9rcvt1x^^ZktL)Q&;b$zV) zS&-c$xUz$in&G5rY2ANR-4qAtuh3E-iLDqA^owf^VUBS?NlxnI_rvb8(3V=P<3l}c zw|Zc>@^o2DqMN)GBcX*w@;azx%Gee=K;0v^Z=Jo^7r+wNjHao)>!*}oy zdvR{I2mhY&`o!YpN`w5R@3V-`awiKQ!+hZdPc+p8`4vV#R3KX(5Bq~eex}m#zmln# zAqbzniYY4;{w^+miVdO@OAWzpOHHcd7Fr9M^2GMi0Y|>8W%&ao(2vI%R*SE;qS|F( zV!?L+sqYv!=0md*-w9w7xPmyS^^XTkECWGdLj+`N~K!yU<_l=^s zwEdO@^U{?QMY9D5b#wLy`8XfNn{?yUUcbMPiHdoP%l<561XPac*w2UQjsyCCnSR4` z2cY4e4OKVxs}R6?-bo1(JU_zDL9VV&*+J z3psy)06}O)&?r}t=*kE3X7|z5V)t-SsLPUQ7#T-(&Q`}QUZnt~45!kOCpHlGC`NPU zchJC8>oW`T?yBZ|p~8=f7W{CbumdSy5*=&rv`c=BG(*@6rFF=FlzzdEYD} z5?S;DCbWNOAzg)g+*{A3xXrX!ml-ZzlTnZYDu}CD$7>%sW26-k)E?@k@eB%Kcl9au z9XL8Z6Rn;H_`fvnarZOk7of`gnX`a?!bfOAfCh{r{gM8F7cTU@jTc^RAg`zg){3=` z=OfDW(gBF~NDx|(&t1B~)UtgtSjR*bE^`Z|+$nmOcfkv@B<6a~mHBQh_$nX*r;>qa9YIC1qOl%EwPb0WlNX;cR!*iK9rZ$ke?O@!(I_5B01e@(dl?!n-u#+ zn+40Yz%t)N;?Bwh&m!*bC&#};4&_ii>uk%5II@rs{Q{GLh5C)qWI22~6^uign&Y8R zyG`FVEM*(ITC{;%_AuxhM#;xVLAB%zB!R!?9MZOLUZAt(01^b^P-KrEt4b6Gnt6eA z!kFvmh@@qDBiAid>kTtjQZ7lZ?4btvC@1G+F>GXajQg`79ICu;u!D6?1d=ySB`MIR z{;F_N^3Xq{8lP(*C`e(G84@SuBq}p_e{LpuH+d*4pf|1_0>`JvP=FXdNFEPevzU&u6(LSc1+ z(b#ta$ZBAECgciNri8z;P23Vf;}L9~;J2rYjNj_Vf7gLSCw-1Wr5gihaN(ZbH`mRyjV$ZG(ii$Qz{?rytkzgzG{N2bY)Y>&EMCz19H;0(oR~hF@by2FO zDhi5Q(swky&4&)qXP^=kjDgBQ#&tW%*OIz|ouXylKbP?uUgWKu%aBo9 zDNyQ98qi+)o3vv6kvjKMfvw#oF{$aZ6-?ARfQSV65SVnlZ{>vH$Z;~wsqBLI9uYGI zG;+jn1AJH?#GyyH`OT@s>HXdAByA_rR-f-GofI$k^5dY?ft~z`lNU->0so;w(tMY> z_F1*AjSwl)l3t)QT|ek9bm%Qbk}{aaS)yCk7g4ntL$6udO37^m2s3d(=XBI3yW@)A zljdpi)+E0eOn0M1my4QJ_?du$;=kF^9Eh+V9p45sO*+|2xu1`%7*R|;d{Go6Mr3to z!f-Fv&WvzxFOvfjY=K-ZqImyKVWX*Ig|sVX+BRi7@(8|zxY?bMbL>`L#o{y4-J^u> zrQo`EI4W@1Qh)Mn)MqQ*M_NEz&3P~s2p>A*v$W>%XFEYc9=!MXniwPC_lAslRr#@7 z?q$}%+D&3%@#Ql}v)IQ*F+7WvJ$`)``z)bY$tbO<`89j)t(AMBtD(9O-#I)OzkP`` z{-l7V++0?~LT7R}oB=NcZZ@wuMACC$x1*e9{h|L1)EaeGCL$^;d|$Q|k#1584Y0Do zbD{01!kCh4;2#2Ftyc>|2XCjqFL&EI;n7d5e<(=U#uk-6y-pTMJo-9ncECoaZO98cH+&O~X#&uprJJ}2IJtO_C z9ON>}y&j_a{TNrI{h9NyN*8hiEpZ+1 zxLpXM{8JhuCLiBo+gAl@lF`05>Yh&b5}vu$eL_AjNit)oRm}n@(#tXXh@9=ai7+m@ zICe$)x=4p%lr=;1V`tDY7NP8-K8ezX(`Ch}Su`PhBz%3*s3eO&K%?appMrt@(bg7| zd}aFhkc-ZVO>O`Ss5jsL-sWN1i!Qq(6$q^Pq}7NPrAU-y_K%9 z)_7#B9Qz{$+wwA9&NS19dR?H0SZ#bvm||K1C5~d$l~wAu_ii&0{OXk(RoP&z(yG8g zaa(Be!29&j%T(+C)2_n|b69Ccloy^iWmh*D4Zs5ML!2FWWp7mTTU>bDklW`ljEWgr z+?1%bvgXKqfbJbSC@8t@t*9|sVMXgL*=oVdW&X=DOb|xk*M#*(Ao?sd3>Ue(dqIPh zRQ!h(u`**Dc@TmxJ@&3h>IO|F+KPSS_OR1ydkr_-7PR}|GT=q7g%>TapC%KP`Q$@& zmuCK7B4XhkaIE@^X3IJv*8~=3IGQr111n7m8S~WHav9rtoffIy=bX=5M1LO_zwfI? zF(K92JP%rYnoF79Qm-V$Z~2LN$J|i1c==qL(aW82#kM#U=D=>u|5@%Ot1z3ZxYw>r!C=yGD4Q`TO&^)yRK&I8x7Gx z%CEC*#?^&zQ`{C+8&~>GGIVC-!B4-;-ZH5&Hn`_KwHbb5<$RV=a#sE+i|ecbKKSp- ztBk0xhUvT0x!TmIQF)lQI@w$1%T{lu>Y}aL!f`><0X=tn(ENr?ejhVP=RO>bNOWR= zuzEn$t9# zLP^i)ms6ky&5b6Q3ANk_+o7jTB&z_f(=wC+rtTClSj29ervem<#5AkRbCk6 zfLA5Jz*0B^Oq^r`ShN#Z=c7E3vo_t#m%?-iC z;A+{&)a5LW0{walkNYVIchBtRiw9M7L@T!zw3_M9>(ri8$BMwEj?FmsV*vbZsx0BE-Ng<~D%@C?0Q`Ld2bw*WyV~t?HzAU50KE{ABUi4jm}Ac=RsqNdIQF1!WrNei~=>(Asj! zcXSGl@n9Zw;HVbseBuN`xtaeyw9vx(_ALwzyYBS%Nv)@CSUP^H)Rr(|q0nKED_sQP zJ|NoTClfK)QC3Q7Kz)N@={cK)AT9@N0(vflF&{9YY;0CA3bP_kg(b7ViIk!k5EtV$0jo{g;H0a=Mg9d|p|##ZeZ}yfqUbTeN$2)gRs4|wvsz*Bg_AJd zr+$+UEK;)lyZiS>dGb;O5$4YD$0kqvp?kV4L>rW&Z?$1z^HRCL+y&8>QZn>eGbF6{$FnnsJe zN0S`UYUfdQ*)yuK^$yul0hzWyj=1W{>Rp0{6z$a~w@^+q_u-US^ea;yZsF`A>s zDb2>Egsze_v^Fm6<=G;G$Yv61<(6g!gZ39s*Ygt%hB8qVU6zEiL@`7;=E^ zBi?T|@u8+45x6g=r;o9$M?SfT;yn-Vd? zXW%51+sKVn6L??n5^Y4H?|n>{$yl^t)8>ahUxEU?cPlWb4nqx+9V5*Dt?Ui`;>k23 z4@_2KauM*u9u)$xTk;d_&->PqYAT}kUKlpCFMB}aS}-G@HsNDcSzd8inVC|j^|%zK zr9aNlbfrST#2GeD3*~MsSXz-JwU%!_5!1y%AOxCVTYjz@%Ki8o7;3OG6fD$w+7kkM z!B3GN`r^1aX_&>USzAits7-%rNUacL%cAa#o^8#*)j7cMod(UE0w60y)lRuNk%~k3 z_eFYmT%o+_N-`9wE)h6$Cr3T_MhA^+)n7X?lLvMIH>V-OS>d(QaZkGwasWp%{uHk~ zo{0WbwrKPT|8I_=L5RVckPx0uDuabxvKn0dumrohK`ezevJGw$=2i8>e2;%l)T~E1 z%|8j6XIo5tf8yZ0OSK`FAurtyl9;8=s8nHfP*JWok{y$0(^sn8>T4hZ?57p5c$s?; zT+(D9>P`0g;2TJNVO%L(;kXz@bp5a{ve@}99}Xy`XV{8LcKS9O(X_}E6EXcl57Lhs zw$Fuul=J;I29qSL2{lCQ;Egb7l^}5vMqj(edW{EJO=aL-qua#R$c|kEFih3em)(&w z@bdg!DLWwQ&`Ov%{zMUtqqIg3sf4Xy7P1T%<=Jm$5SQ~gDzCn)?DLkD*zW!qbBt?` z8N*FSI;)_6_524Lopl9^(!ng|HXoypk+8oP0g_}=JMh~4*uM9GyoJSiH3ax?OeUJ) zXzyC1jy#`6^=soAlKX#Z1NUGv;H$0nMDlz37Oj@6pXYH}RD8dh8n(l*GUOxIN~moLd5-Svf*d(RVIdM8yfdHixV zBqnL(v?w)&!{GoS2CBtLg3xS4L-)S0b|i-)MO79vD-01W?kg3u&`6)%nV*b01G~1+ z&Hm*l5aOB=TULjzk+YF4i_=`lYCx63snlsGU8!D~`za=Uh70^o@c>g}qT226- zZt4f9!9C^t-;mj$I)yRQwK@lMUYg!!(;|hi>1)q%rJ_#az~i#wYOK$vWf5I83mS=P zAnN!r9Y@Z%RL$5-)H<^P3GVOIZ2F|{4vi7mLG?=)nprpWCfZ_+rZlE(hZc@?x}#bm z6^{7(9h?Sm9>z=gup(}HtQ0Sm5fQRk2apy#0}^_AIgk6ZPtJ`;M^dsfd=|U;+U9Rc z)q3C#{Cpx6B-kutRMTU)D%ack*BQGL2N*;QoL|4DIz?^X=b}M{GA;#pag9I4kx|Vm zNUULP+MADTv*kn>mFd`wfQ{YpvFwnij$0o6CD|@dP2D4V=nmu#GyZ_)-!m2dT zL9V8*LMiEe9OW^$Cz+j#k^$tsxicWIb9cQ`}4)FgQ8(?F(p7WqtOPjGF@&e3{RK}uA zEe&2gyQYbxFOnrb$Ovw}z4|5hzg(%GW(9}&ox)8#l{i_+hx@I&2&=bG1y^R3^N#@4 zIfml2rZK>!fIS{}gF(>y>+*tNjxAi#pyzQ21k|G0yP1oU1Qf$_-E3)ENZ&wu$g$-N zY$GE-2on0;m>Qd~s?;n9FM!Q5%s0meex5i;*%gWymTtOL+B@%Z{E!~9nv0saIst=g zB(iAQZ-;x3T@u2MKF-q%}L1_bw7{dprJ;L*T9~83e_ zYN+{>j!yWmERzB59Fm>6HLY8>@q2+Lm=D&PZ#3{)IG}wSG46Xi+px}=qQlU9^=O1v ztWhIuQ1y+Y5`79WxKJ%t+>xGC3#-JouHUx#z<7@D5>=;^1$414U|pLPj}(bf{vvzH9qitF zzV*I9a&>R9GH?*Yh^*W`iztLA44)BezSPYAi)-$L;KOa4V!cd^v(V3BUbvw@2}(hf z9cKf(_&0{{?7>gkoM_;kaoF$t^4Lmfz+mJJ>vx86yd}-)Onye^sm;xgudJF^g9}a9 z(wSR?zKWN+K6ivVN#N1h{p_fS6g!vp!_Su8Gh1YojCW~Ex@5*Z5iMIMy+YJgAroT5 zd}AB5;}!s#8)P^ZSB4lUigNAZj_mQ5b^qiGO6McN#nporu{E@p(L@pOAQSce!!RG2z#TBNgjmj;`!%50w=00Z#@!7McxCF0(XJ$rYtCP1La)Hj)iD^f?EdXjp>Jcb21g3Y5OTB84jzk(kqFPsUn`PbP_?-x}y0>c|F0X zMKXP3AvafA9$##u-g5P?j4jrz(ZTUJ(vctTMW{+lP5C zaEK;rY?ZjhRftKN%N$ATh}z;zD8mLPSj!hg4aip+5HvQHsg-ZNzfo) z*J!Ri)uM^n)QkG2C)A|ZyLG(G%Fmgu91cN)7^Xse@`!8sDcxl$ib9V0@!&EYIZ)i0D zCn!taPVd*0#BuPm>3$ckUh!o?l0d5>ky>K-2P%bz+&Gi9P3QpLCN-q>en50-T&49sn>snd^IubaCc_hkXA zbYVzR&XeFXU*Ecuqhv(bg?_ui27p_AIY)&5iw9BI?W?-Y^ zSTfDc@X0jgtp3Im@iYmcKC0l#a{y-GC8(FAuk%RAVhp_yH)iuAXcO+tw37S8PvhlH zf&XB1bF0@J&6R8I?*<~x_fpQ^6M|p7(VC+Sm1YjpbMRRo|Ic$4H|lB6i7M0Um0R(uMrS$C49mz4d%cb&B8Jy|{L4<;6IL>3j1C&$W!jrig z%q$yqL{+}HX!TSr&l;>ISF`vhGcjoKlgH^Pp!&+Ra#hD}&y2+j;`oevJU!QXT{khb?sKaLg~IQQ#sd0<97eKIj`3l)pUh?%$sZq5a(~IJ#lbyR z#$jYe&ab1bVHp+2Sk|uN3ncc)SW>MGQJF*j>vCICm1Y+6GlLBfvF$c;SU140cuJ$0 z$hUGaTlX$Ju~czAm?q`;M4|pzMD{|eZM+DUN^wIc6CMz4A>_+cnqG+owLY{fJfKyN z#?fNmswZW!J7Zob

0hg`=ORUFS&j6}jE2^5Vz**xk_zhH=`S^K82XeNMe|tLJ5c zi}Qmr<^dSdmYD*b6;(wQ0!_*jHHrYW8a#ILe>+9v3{sQuSSo7~F$UpOU{*7LV?+JH z0eNCNC4=8x>~fVbNN4ane=oMW+wlHT0O?N0P~6B($NBHLYmyZ07X2#wdHmQk8N@KD z#i_W^(j?cePftD8XP+xGi902--%73fLUaZ9v zCcns)4w>+gK`0%*Zm{@hj@lEN>q=b8Bb%m+Dw4B=Q zg=x*(8l8%WecJ&68S>8k?68i#ShHYwjF5>>q9jr3pNCt*Pkn;AXpGP>R$EojZ*m(q z(4cdObH2tjs8-Epj-qrgYJ^1;(YW)sQ&r7zj;ZJz$QO$D=4zCW^vQQ$ss#X|E$mF2 z>jZmOJM%K~_sq(xGw-f&0W9QpRhi6jIC6TiS~I>->DTA0n7+TD5x}qj=7zA1r>y7) z!v7{w0Gg#*X-9AKc_bI?lBQ1Z96xy8v(kA3-3V#;Y}tW=DGrJs{Y6MdMaNji=J-=k z@@3H3t~J5T%Fw6mh%A5?sD2qb++|=RP4@P8Bj(V5aLVf;6O_Jj_%$hgeYig&aX~8jibS-)ym%vsCGbRopsg5)Hz8P6_Mejn-&edm;^k8ok)cwyC<`1dKK4WEYt=!%Wb_ z*D>3*Bgd+7*?+;Ri3M!|&EB-alv0A8kPPtteXfRi0*~MxM~ih6wKv~7oBcbmW;%aF z%)t;M**dHI<-n4R|00v*_>2l7oWxlM_E**2mT_0w0 z#!?HlJ$5Q07$*65!pad%Pe&iL&@>qpR!vb~e8X4!ABQB@CoE)$F@hTa9YHLMVQvu` zIdKquNr5*}09 znJxc$u86uhaY9Xlyr*!NqY(daXE^^}y;xSAfhmRg8(vRHKf;LC0=YA~bjNLwQm9w9T%pAqe_$y?#!fiik8W0dg&Q z4*NKv(@=4Db#Xa(Lu9qI9XtgA`_SNB81#Qyos;C?cvMqG zOh&ktYdggM`{fGH;`xAtE73yTprNB^zL$Dmp+Y1$4aw8!HtAp)~+63L&ZeC$|&qK+z-KEz6Xu=d8wZe7Ga-Cdg`Y_CfY8&BMq%*4H+NX+b>joqEq5I zeU394GqsWttQsEz#;fa1NWY08yxvKCf}3Dfd40i&dO~zE3{-#{_Zl0gKPZ)SZ;|W2 z@`*=z-8eD(qkVzjMv1TEd3@~c=rn> z{mo9S7N!_ZO&^b<0}4<|{pN+*HkMO^;!;w=DS4}F8oX0pi;D2weO3fHhyo;P+&Svv zw9F++Of8AV-ffNt{=19a_l?#InWU@?Wh&vYw{LHrt&Vd>($UkgQ%L%AF`GeuaP$!2 z#o%NZezynQ-12iv{9d!GEnILs1;5#oND1lc1)k8Twv=JQ#6gU)73BKcPq^nJULxV)_$<&?(JrK#8oRg~Dz><+`9le0^wMG}OQTJ}J z(R$!Rl^W?pVR5al0L zYCxCrwq59V)2w{uxB1oE+%P%?Z8bMD`)~UasjXN0OMe_wUvbItrVnftk>*asa+>VH z`<{$XY8&?RFx^XFmk=m$T4GsB<5?C6-$=SZSijx*LeG0aL4Ut740+lvmH#WD6Wqv9 zhAO`fap`#*-VRi#Ui{W1;LK!$i+ruC)S*XmbW5-k#Q`nW`VTY6wEWc#;TiZQ+Dv8s zF26LR*BC4U}pc+F)>UhB+dcngGIf-dA=udTFdl=Tu&B>LkE*+2X;WqU|gKZDE=NCidl`8uXqNa zu|k5?q7t6oDWwc>2w=h^)nEd)klDmLukV7+q`0^g<^ij1{ZmEEfGg(4p*~jpYUJh= zR>=fDB_Fd>%|A>Rnj7YxRXCyW{bb}M$!Ay@jMlf-0DPix<6f1!1e)Z9{CM3ioH5eT zldMLp1Yj2m%a*6WlP+E9EmVY=vV7Gnb>0B%sht*DC%MC`&SxLk^8>WG4JJF@QEQDK zHrR!+m^{l=KcB)qxNPai)+@LJkxQ-$!L_x-#h|zw7yJF1Fxez^t=iJ&$}pW~G|JFY zt+ZqqBLa5KfheCfi9X}y%bp0sL$Kh9*@SiOsHH>DqStJ}Eh-7#f7ns^n;#a@2e0gU z^vRFfE$WAOP^O-RxyG}M#$oceYq9ivx#d4g{Sj5v$S||3*;n}i!6It`GICEVV{PX2 zL4;&L1t^8{$=r=cfj}Jo= zw+1?r$*dA9I$~E=VbnolEjw3VK1+E;unXW4G(8b^U6OHGG>_VZk>kEFk*8EIf>QlF zV3T53kw71q(2$G-R{v{S@1zJ-3EOIG60#)Ib_4Mr!L*P>Gs+;6x5sW!W_$@Iz_SwP zbSK3NZ{&r+ub<9*8E7i3PVf+&k4l($>rzVjCN3(p?ZUU2T)%yRa+rc^nzF<2#Wm(4 z%osM=KvP6ZJh!>wg9wXZ@~PLzSyK2?*Ad z)p*^n${A05Xz+Gq12Y!AU^@(|NWS zv{8sJg5Y4d&&>*c4$7yB?+*h{#N&Ong?}|M07XE$zm5S&$CbF^h8eJLU&_uMMw=I; zl$g+ZFF*ZtG%_lPHTQ4Cfp1!mUW?2o~kX3US{sDZDfdZ+j}15)B=^ zn#2`f>nOa1D=%6=1)<55Ec$}(nnM{hen2YheRFM|0W&eg?fvtF0?$t*mi!@5Iu|r) z?fGZO(tas?vU$dCcm|i}o$NsVhd^ zVsOWX1&_5+n1obu(FN1YkB^>~IYtZHVa631hreIAtnlFlp7L$XIhI^8Y6Sl3-T^T2 z?q5_f^H;)7k=cT;X5Jp?-3L0>L)3OWY?l+SiF64g5?N69;SCC)bFIh~w`6Xjw@z|e zBFhONPjx2akbjL=WIM8(*iHU3EF)$_?BGz61e7zt(?8x;xs@i#<$qaVQX4H??8Kme zbQszeDF8iexuqh*1g6Yz*$B`dU$*Ms^s7mJI@=7k$Q0oNF>68Jz6uq;Wo@G*F&8-l-Sjyq>TlMH@qX~75VP^`_QUJHVAkji#&0_X2zztUy-`p&2`eZY0;bf(0Rj+&rA853eFNB-Nm{vodON2Rwn+CA0mdQ`CD{ z(1T*|LQaM*MsnY4omUGRuDclsPz=}~6Q4JXfs#wQ|&Ua`+8O%E?YderUdeIyqujS4>*rZvzt-%RjFwWCNcg_~(G&!wahKSYT z?t^ArrYL;uz(B&_?oP8z*Ymy$GgUu=$5}wMn^E0e?CMesVq^1RYbu}PCa~?*S$?_( z>vbu;?826iiTe(?xjd*%O*N{dF^SHxR%o4>nzY0QGHdqvUuCC25v}@~-Ai?*7V^9> zt)K_;?ovV9O7NDcgep1OMU=`t1U%U4;Jw*~y3WOWU9b>WTB2uoOlq56>MT9d1_R%# zZ<(l8w@;`;l7QM6k4cUG;s|QRX_4DQhF}+DDskoRCwL-mylWf_o=ytclV!>OwKpA_ z5YiE3rCG@BYgT22Yc4$q2BrKQKu8v2>4War>*PfzKm3O3F?&W^_qqzd#X#0CEqGcw zWfS%SWsZ*teW!ML5SRS(juV3R*wC1^EHlO=a!?XH%eghV(fWXAaaw@oICVZZ^iw+Q zM&E$DK@sEXr40k!l<<7nR%QVgu*T9kTu_`-CVm?UXJdGuESwch-pM6y&HboUFRX?BmFNMjpQi z&xh=YyxR2k4+C95gM-aQMJC79x7SwLF^$?M-yHew$C3TuBQF<@x6Exi%j#-1%pb~K zjPcNvB^t^qZ3zTA&xJo@np{O+gwqopkeNUN(3&EkUbJhIc*@w zB+u+J(mNp~&{mkaVG{#R9hsHN2zJF4-ztzp$1Hl%dI-B5HFA9Lrx}LvA9rEnr1Pyv zSmEi0FAc|FAOIu)3Z6)Yi6#0%&72Mk)_7@*;v415N0&=!XT2^Yu+oWTXwV1RS4zqA zQ{=EO23wo^gPsv$CwLQ{MOn#Rz)?DerpG$n_X{GQnf%^KpS_k8kanvoq4 zvdVZL|8;&x{;M6m@KK~qJ{Hao}GbGa~7o_}1$s_aD+%S2*HO!y8I9}2U*?m%&N3qPMlKP|^X<@H4jkY~5h|vtT zzl{avD;0_xr&mkKl-Ji|?DMsw`NBGk-+irla4Yb=e9LInI)0h*(kO1r*~ekIZKjVW zdWb`tXKSGeblv=I+Eh8FM^me^$-!v+y`*ITBG(%;Wkk|awSv=Om4UYsTAM@%;=gB~bL9#;I&ZGryZpp}t_?7m0|# zUDeD?^-BZ|+jaxfkWl#mEDSla519pmW+1r=Yf5QE4K%m1Sl<8=_E_c1W=#J%mkb}G| zhk^--I^BwVb{~%l3av02Nfb26`uSIdF!4YTZ!t%lZmcCQAHeO{RVR#)l5T+*hRrJ5 zptUAlM%2FiS#dS+`ARmgFe@fDQ~6sq$s>MIcVcgC*rXWJD_ix zP%Bp7(^^BJ%#qsG^kJf~Wh3p_e|1m&eP$ zKaiOmdEl=m4_}2)!aY;)AR!&1L{Txtzl>$)@KGpn7jxrNCSqhAL4uHu{QiWVIKfgj z*)Dm7GS|Wlv>G@0V-|Az>vVS#zsm(9-{R<6yj%UX0@%vm3X?`*(s;YAr>`gLK?xi? zNQvy8h`KS4N)~<6u7srd*ZnnB)3pKkb0yT&@nkZ^YCBkE(0~p-t-hCYAzLt@?RXByaq8GRF^{|!=EwgFJM#wm5KjNB=M8E zl++k8#jD2#|E>=gQpSXv9NO;XK+HjQb&sd;h*Wr3c2;nNo3N&saH3l4^=s0aO)QL; zc-U=2iJ<+Sy~U}|JbiCzpaD$+x`{2ml{yX)FnjgRGuzTEwofQKE~AIHE>{j|l0D4k z6)V=RIP3nP2%&hbJktGTRb_sJLp~$W5bZiZJpXJrMvHfG30#P~2D@(1TgwBY`*uPp z=dJkzy>osqAEwzdGx3Hx@4ec;`@0>PE}v~eEmHnI1_ElzUPh?+YB;LuX4#THSlE{% zruTtuiIOUy)BkcL!!FA4m+Dw$DVqF6<|m}>M6vR#{^RdahyGNQ?4 zv_9G43sFo2v4)T2%*h*^=-3J4uLc7Ma@%_J0@8I69t1EhpXc=T-&I@;;DQ9jI&wzE zQ-^MB=Fs!>NK#L_RD3<&Sq}~Wmm;w44w$YlhoR^c9#{YukKGni(dhswOtI41mC;L{6$ z4NHvekyjm$PXX~C4hbI!Ol2-`K0)us#+%^)UC5O;%j1fH)3(|^Mt2fqBu5}M^Sp*)vGoIcEH`f>hDx{$&XjTG8IsxNIv1WF3_ zbbE{I`_#q-fbBIf<9Hl4k66?|^>R*cN~kaNIHdL%l8eKR{!bEa`nbN7TSeQ3F&`n6 zXSZ}FX9$#B%-^{2es7}FP)5=dRx5B_e98kYLz!!@%O8xE;16_H-~KncXMs0jpZzLl zq^620%588FgL#4)CAE%+&7j9DKTeM;25%SqeFOtx#T|O-mD3NzWpKG~HPKcg-$}hk z7$n!J!Q+2d8lANbn0;;r@?=gR>*WQ7Ib80DGsV?rAK#Uj6|z;N5>U0uR`N@Dk22|B^PV^{ zS9HC-jEVXsyYp&DQBkKy$+}MLUDiicb{%_J@`w#}MOmb4-)yB#Ur+}IwzySXFM;d4 zY0{KLXaGZ!N&D$_oP4I5bcosU*Dm;Y>bkG{jZ%eRaR^B0SGFP=`V~(v*`i}mxVTY! zeo(*A5pJ?r>oW(~RUncF9AqBGr^#{A{4{nMouI~fF;gJ>_u&RB#y5tjgX_N5g?R`8 zCYq>jy_tRpJHdiYCto3N=n6fy^^vV*ctlq_Dsb*<pX%S%D9Xx}!cgFDfLmo}j5S%8lhB@@ z!m5LF)YLTBVDDGi3=qwb?%n#53f040BX(ZFokwjNSk}iWTp@)LK~$)QVxV~Kx0EDO zUaK@+d6iubt*Y2>%8}J$ff${IUo4)HE%{~2q0+|XHL}3#Y&u#?8W&QBdc*OfA}Py7 zr3f&UEt|O;F(3jpJ~vw6Ge(0@qCBAlSNnFIAK9}Kz4WUn7WoJ<;C2=&RPQ-+GxAel z(+@_kVA1J<(e@Won5o_+B+R}`(|=Mwz2B(N?8XRv=%wv18&2|j<;~^WKU$)W5(PPV zX6{rD!2#V*AJ@XDTg=q&L$&~DW^fz;)yE-od2mKtB?E`q-T?|slbnMYu+%E=PSK7Q zPcK%>zNlcMy23gfMR{na!YaF+8bq+ROy2<`D|Vew|+IML`bcRxAHd-)sQCnnq3U{=B% zDt>mC@mS9yn~?!ZnhyOBYMLW;l7Z? z>kMp4T&Rfo>-(&VAh7lU4xsq(py&0*<|;J7z9%J|irx%GxoC$o+TaV#==8SFWJhAO zM+s3*+o$!g(~uTRB<@vjlR!1T#t@{=f^U%c8Hf0s($eh`pVI959?lAAc41VY_d!#Z zy!-SP$!*Gfv$$n{jQDm?RYa9OmjoZvhhh?{a;6g)1YZ*`+c&e6&*XP-0qK2n9$Ug! z4!lUSS1Z5qd!!lGGK^#II637FX$4m8ZNaA#HHc;Rqu9fbJoG9cYcFVu--OtuFt8J< z8;kpx#PG|{JGS7J{%+K{PlOIrzROtZ#bJTXU+vz&C-A4Xs{PrL4-3hVdyXYH_QFjM zE!FL(Yl|~W=C4h%{6bg!8+-FlFSW$$uIbBWqxKH3qR$a8t@!t7G$3QRq}*8SiIMW# z{qxlUsq%FX{1xCtq=07}Zq${muu$$Mp8(BfK5C#(bVvl`D!MDURd-kMcUV>VG(}IS zYv?vIW*17s%Sz}rR(e_PMEXtBkIsxj5W+WdUnhWA+8AOPH&`mz;DY^yMyLo~g{lIE z46{5$CyW#kFZ};;%ck=(WpAu>OTfj?)HI&HBg4L#{yuQWkQ8Syk6Kgu_w&O(BqR0M zS&!C@?hwzlsZM)Xk}Dh2{bFZls>+g=H)&|k)It8Q5Oqqw7RuuS{G(-p2Czn@-~z}A zmd;HaiAqnuEAgYa7E*Fm3#sH z&QN?fdbLM=xrb`e|HWmTI< z77*}L@ztw0yFp(SvfCWeFkvNq)wzWv_mxx*%|XRXAG53G%RgK#(IlT3s=6EF1)Q4C zPCthZ0eDzyB=HR%4VO-Bdp*e_#wZ1Y^-leuKwO0)jlq=%Ct>q)KS)_b=~egAKv&z#FK!3 zb88?Vo(Ivg9bHMqVS{=RZT6e6jLq~-jjF($&p{4Lt{8AZ!PS_sR7@O|We=2W9;5>= zXdwJPw$z(&4>Xl>%&RoEg)wu1GsXdxTx(89$Wb2s>(Jipj|gzOz3;*J|HeBau{&M zx@kt#iZp$Q^G8ujoSuA-a>4s0Wcqj?0!B)#5D&6}F_%7dtT2{;T9YZ->Y;P=B>ogn zJTuZsozo`ZKmex46oSdBi04tkhh#vKL`}3&K_irLZPvO%H_(WTw4AvfvWD8M>3AS5 zu1eL|(h%z4!&^viqtU1eQ3Ed#ngJP=7Z2~> zQ$FIwjAJHl&Zd%F6zyI9?{lF&GddgsghQLD4qGRPe^3@}mm%ObRj)t-v`MY1=>pPs zPP_O)Z)nx~!TL`~#08)?F~Xjs`>Tvlb6e!u{g%$^xo59 zyz2ksu(XW9{~ziuD1m%lPR7;c%L0CY6MnqutAYi)s*oaNYT_cq-8F_ep=N`M>vz;O zk?u&EH@2ey?gF51nlb0zkblgvei7~!Uk9H&)klj_GZXJ}F}BifFnw7pGtg{B z17f4F#y(3_+MvRVn2u+Xg!Kiojq$=H`U7dNP1^FMOUI#aU|Xc-Q=pG9CU1a@pzBQ1 zSMmK<92}E4ENqn?6YVon*gW50H^CbB_^yd-5VWH0u)m@W&b7{sbQz{C(Qfna5@wgU z2-NA@(#+uSuO2X?J)!->|9SjEUgoqo+$Bp=rveKVfY8IoJ|qe5GzV`r346kZ^+ucs9^Uk4jCVr)8*m>n2Fw`N;>jPq@+h&DhqoJIju4|B;z_cyS zSyCyJDnU1nplg}6RMZ7Tce1*l_wSQmN-JsgDIi&DM@2f805%~9w%#|@Q~;yU#kWsi z?mC-S(f(Yp7htf_4*NZizZmoLPg8St!TKjR0OL7#WV}3c>lSOB^BCA}S12y5DZ z%L;kT>O=ExoKqVa3>15ZJFpi<$}}M?Pgv$nLBQ#z!Tq8iZD7XW5*TNn9Ip#+kJYxJ$kdhrI-TD*!^8M{aSUAsPaY%Tz>y$(R>G1|`Q&0i(x( z@aMrV{X+}41YIMqmkuc#(&+m)V8m0d28j(ZxEtM|zwC^lz;Uhq$n(aeW5|ev4Z^Zk zN@|UG0FpN?3ZyT%=a32?o!sh-m>==?{X5#AeyU{WdjdTLEZZeGBp0f@%$3yt;bHkU zK1XzRN>u{ifyCBdk3Xj=Ks4yd=&WRW2U8|Rb!mwziVs639Wvp?1isO)MG2ZB;Y?v| zCWt z|2zYk47?0`hlZ;51LBm+vi_v1pD_@Mcptc(y^f5yFd1`Cz?WS0G0K%T@gnT>jg z;grC&EpC9Po@P$-5+bd2T{VV&t}%pfIZ}nj-}{he~aYSLDLvg8S*P z&NLR*dwf};$MF*KZpr|mfTzoNPQgI#OBdrcOmu|l8Hxs|O}rTQY$Z7#IEBCd!4ulZ z%b>>V+W&@P1NF#3@Pl{Uh!Q15Ah*-Mx=2d&X5JUXG7%(FC0+M)$syGcnTAm_X#)+pZ<^IiHgmo+gs zeSP?IZ<$>01{@K9+8UahzP!2-VG;+)j^Xq=ZdLZM1d?HV48IYFeu!2FFxC}^egPHb z?XEYU$&_jjnZ2L>EEBaYF`d3nL4Q{HMgVl$|LJ)}Eyk*}x@-ta(GR_VcrB{P>W z(l{f;^5*oaAA0rnAAlW!pOsC;SO)B9%COtqsjgIWf7%tt5pEEvaW}Y(z=C~uK=@Z! zbwxKPIQ0}q^3|!T23_ZW@r&;ss_Zw5@yHr2s_8e7@>YLY5jU%#g1=)059Qrq$n2UXgz3 zQ<`b)uMsm16%^_q@{RBYmXVo`Ph9x89gNoyyl7<7gj~&*Ol>B_Cv0f^iaS7tll%St zZX1NuH1o+Iw75e2L4o(l>U_)$5xQCUW+z_xaG)#en8l>4?=<1X;fmH5Ucxd)$am1R zt!Sa_N8W;rk&BWQ!r=WJwP4N0HO5cE&PC=@rTiey-4YRj*fLy^C_oFuD1f{;g3^xs zbu#-4NR8I;9K$$!(RIXW??Pgzq=A@=fnIF{RXx&ui64wTl&Y|DXf=}X)arvdP(#(T z6dt>7bNbnPnyn<&AxK}rb3hK&OO3L&8iRix!wPMCvOk~^APU;C@a3}jGl_8bcJIF5 zQ>?)JCNgmz+D?s{<47H8Su2}YsVf*y`n;SRnWxhmEB4TJ=5$DUM7Xv>V%vd!I{5za z>XXQJJyv5&tGuFrBQNGE*XrRl4 z^lGMJ#=oO#Xd(p?}jQT9ym#zf^h!4SLReW)r?~#lJUq{v_{Fyw(OSvT{Lz$`s~6QSiu8 zptmurq)0vyxifELS3+sDqIIEYX(GC#LOm@OUw(poxu5{1B+~-UR%McZ;jXpv$iHg$h_h=oQ1j!a5{2x z2js#BY-Bvn3%C!w&e-VKbeE!BgKsgx;8RU);u#uukHHK7j&5NPuNE<*UOG*2(bfXV zZ>vP=C#1oxb^RTdh)ZLkstrpT?S`j=mF2lOA6yt+CKL4Q{-#=^L@J1HlgL@C_xQ3H zDFUQ+WX8F;T?M9R=ny^<R;%fyVJ-?Fv-&fpCflEQ3lGc2v*CVs8c0s6K1PjEN zM;7S?bTQaSw3UWgApl2chh0m2_Vm>D3F?GxkVshZ&S3p$k*jn@30o<1!z*^%+W`L% zF2&7TtV&cuJ+e0r(1b-e{sQ(B{oYM{ce)htcyiojurR4jJP`~F`kAJ zC518jho#nHQ)o@7!4u~e2H&FGDV6sfg^sgkb>7L4k5?D>xxwiI4Q#QV4ZnD<0pPKl zyV~n^R-fbL*$97I;T+avMjX|<4PW_k=wFZ;hbbS=bT<9=edE8)h7Nx5=_hlqhJB>Df&A^>()@`%+muC5a75MMF%-X{VFQ9c;ut#o(h2xz)K5_ zbl<_Srqrxk9!w1)tp4>B2iZb<{=&A*62(K=8srXFGr1;aZt3YJ=q{xePvk&=3rzC< z+=bCGaDwq>@#0lwPuF>krLE{_zEgQ>GkS~Hv=HVakj)keKQ&!kImPK$k=g0tS&}*9 z1Lwz1I&b3OE0($aagW2@kKHUxcuC-l<-iJc#~@aQcQJb+?mDRB_~8!^MN$gdZh2X? zHln_2bRTWgp>6EAc`POYDKzHfiVR1%V-<(@>!aD3tu>3#Tq*PQGDgq}sAK9{tLh1Y zOeun9tjtQY1qnLS+VV!dCidfRPu*EYwCoAaEx;X1b@HzCQ$9z|(6R1S$Z1xt6F*J~ zg(;tz&_-5}!okj#_a?dh<{x7?({?d@>t77q^36g>kL`g?(W9BvqnnZ&{7V1Sm%NO^ zumsM0usZ76oYkR=3<5K4_j}CPmZ3m{q_|3(f=IW5V(9MO9j1J$5%N+Y+5U_G@YtE? zwZY@11nf+^x1@Agk;D(4uI@xR4MTCCm{Js~N?o_N}4MSFwe z<1DW6gRdKt(g_!~vwjFQ5u*5EIu*Lh}f4h61Z&nf8} zYKPhbK2v!sDj#$aj9Fgkjm42~sDvCT^%9CUhfF?RO)eN&)NXa-Z(mI!uhiZasJO2v zP0+IJByvq=i9CGxrf-ssLz?9uC{po- z=G=$dTo9k$UP#y=ESjFs69QL?xd}Y6gr|*IlfOuJ?Q)%c(6vEVMa8B?h9oOb2gTsp z>DUT4IZp2~*gwu?*aLgp1l`E(S#WkUGZyCE?3B5VQ?6~lXdvdMY_my?D}V2!Ee&Fj$-(+#+r$teW}|01N>8M^F7}1TmkKJupY8c& z?|j=J^hw)&oQPj+lY;xrCjOJeGz-3pt>`nwkBO|dVnm4o5YLWsyc;VYVpa6%*$OB) z!v$53KZc5C$TdzHz;eVtlL3A^IKwRzE9vFKW5fNkE`R-LYETgykHj!b9{zl*`6D%= zdTUNk3&2$vUKF4(4+~~eC>dd2!k9Tz6675SmLabxL3tAI{nXhNU43Mhz2gpJqmQup z3$m}v{8)Tw2fIo59aM2H3T_nZ09|-K=#9gP`RUuOBY2H_4&0{Hk16FP*Cn?q3^$Kc zR#7xTNj3RxeNnm2Ux&`FNSo@3idUx>1()3iYx~PEqnnIrxIBS1%I~agF6>qn8UM?5 zSY<(`GR(Cncg%$^-;?2PJh?G(9R>b<)BD5Ozm(4Zs~3GY;{7MK9WC7O0*B^eshP8H zzSX`R@MxqN=FY7o;Y<{BR|x}ScFBx^{R+M~((jm+tF(@c@NM`QyTmI4Xl??NeUn&D zchQOIvAD)zQE$)OQ_#Fhnk0j035!8wlQSu^vgRF#;>$Z+Pct4t`VM@3?ut^Fsx1v4 zsR@D`apO?~U+jn+C;GT4)6dylPd*rFk&L4i$|%0o?t#-mG&>fYskz(|`;kTML{ws~ zP#S2=S=$9I`1o&#sJEZn-fydBN0CXrIhPi*olNujF656sxWDd-?)CO*Z=w;akZXmr z%86b60pTniFm}LZ-xC>@?H%<0LJ&Qn!9FWrB3)Ox_30ZuUEU2bB^>iaOG z{c;?7y)cb={R{7=;(HrB?+}d@EX|JEcke)tvSqJfS70_Ydz+PZF5I*+{_0(*6tAYf zEU`p8yMn55xIp?U9i#}Dm0oqoaeYo8tN*0zZVCzR|Inp|AvG1G!g*5jsmh=)`Kp`m zmDMk;I?fV6s z-L_b#S7M=)DT>`zlAU0z?dt|GBsTI)EvH`Q>IgJI{}0Udxn^xZ z`&`?rk!LXlqww>bG z%XSpquFGfa@083TEh%BCUBcx4cOw&Mll*mNkDXaAioJ&?1exTsx3atY(@t5z|YD&BTRg|DC5)^G|h> z_!$$V`sf|9ZOJ(Jm8o(F1p#SCF4DDg-Ph5!ne&c=HC<6z>5&OT1TVGQKA6E^?gWlW z*846_Hf2-XYvz{N+ zNOiQ%^KXyD!X`|9plT8pL@~xCu`&Htm<9;{_~X^zQVH};pmtb-|6(4CY3ZK8y}}T& zN%;F1p%l;nmcVDd|UE1mZ0H;I*=2Qz^=Ce$){`-L;U7xuIKojS{*ES$4KeT!n zE?jUee2mxiUm8IZ58h+F9ldYTjQSgTklTE@&=qb)F8G&jfvw0(RAP2tAubUI52ZEB zX1O@g)mHOYmAtabp*x?Fg?72iCy5cf+}&EN?f*+8<}|ef z=WFBC=~+Uz0|}Vd$!PW$cy>g=k~Yrio?eAR2?uNn#kOe0m{+&A< z>W0^y;>a-HeyjbjiOmx!CYmpLd*5@*ODxI-3&cj)pbME=dV8gR@I6W>K*PlzN~c8C_T@+3|IVu3KFe>#B1Kz7geYx;Xe#uv zDuB{()U-d4dnL6Qkx_a(>z`V}_uP~0%?}M8k9PI-#ujXi(l}P!n#)-t)#oF^L{bt| zh@Z3Pyqm`2>*OJlpL|?GOlhM6?SVn0XP_e*FXEfCw(kf4@-~3@vU!XO#d)KKoI<~e6LyHC5Fxlq;te}@ zQScq+G^a<}Brl&yAp#hd5(C3Jc5Nv?HBRN|st@ORNCG=xjh%W9lOqEq9Rge5Kks6#*U!em1^;2V!#I}z^*uBfZt*ei}KK;;X=s4PKw!bh5I~w7o{~9ncxB0LkksE9>fOA93rt*Z!Nv zK@QnQzp#F!%XBhF7(E#NN-=aN2#w^v9nwE)*6V4(!b(Z3oQonWr#t#8xPm>26drlm z-*{ETiZuiQZj@*}pz3XZGQ=O{mw7-kB1=C)iT$GpkWdFmG3>^1P)+*ZPD_$8z&twpes>wX;xANr6PXDwR65I52p zQ9Ljt>@?lW@v6EJQ~f!@RW-F^NSgYVcK2!r2&}Q?5HT^o!`=gm+w$(`>sNjfK~kTE z+?e}k3W9eY0G){H-yWfA4+qN~KA-U_L29D2=)3xX#d2lOnSZKLoz69UfJz|_jwtVsL6{0Y4 zPgQuhd2c9G1WS`M@!u0dJQIC$rBhd|KFnTFLy&TE{ihFNT|Z2Bl+xYjOF++*^DxGg zmOfMUb{9aNH6pgVxCaG^9`W=Jku`{1-+1P5j31(Vg z-dx1`n2=fOtEWmv7CL{e6tyYX!k5gMoh6sIGqZI7V#r*hJh9hn8b6ypGodVvy*z7# zo;d+H+1|Sfvk4Vrmy9~)-RkU!uXh_Q@{;xu_#5v!J+YwvKT4@xY)6Va{o|mwPrv9v z0cxOW*^}&Mn}}RVs%y35wnHGoWv9srCGPg5gkbvLvX@4oIukb7?AP{`^JVsWawMKX zr2Euw56gqPPedM%HI!|}P&ZS0_MYF+%ez#Jr?yzQ4D@)QeKbZMb%Y`PehF}_$YgNCJ+yHttkuUijsdN(f{dZ#Hr_ocfZhncv|RRh$Xk&Lg3jpJkUG%4P-(W#Si4o z1lkWJJ~7fLA86iq=OAOe09G>$=j-m@L)WpuStx`}610re7oaG*&djP1*uTlAt5nfO zg`A*A`GGPOscdENRf(oQKkbvZkfr$b8^o!D#6E|Rw-k9l^cRE8K_pk8mIJPJ%tonr znrkmVHG4G|hjK*~j@xNy8mV^g8NST7S#} zVp5Q@@&R+c(dR+})jKLT>zLnuvh&Lksy($oi{ETni3u16+x4bo%$)4e(`4h649Wj7 zbRN3M%jE5qt2Pl8yFek7K62frpf`L|o1~zS&;m<~zLA}hlUz{j3+FW2N~7{!C|N!0vWHTXqhibQvLBZ;w%Mpi z#m2>AKoV1TA>+mqS-OcSx|CVnF1c{Sh;n-Uqmr|asJclTpFXKPPt{6)pCu? z4GIXfnuetD!+rIR682SG2lt)oOmTHhlLV~3H(L$&5B{n_X2WY{U3r*nAN_Aa)u>6{ z!AV8dhNg+k`oZ0B8vT|b<=RP*Ml3cAYu*@252OiPOihZm;?$vSjMn3sXX(H#hKd#z z(5d_rg{fK|0~tJrjX6S#*oV3rqVTa(__-cB%I?WRcZlPL%YzsiMv5!&!2nka*99^2IHn~(H0B+T${utk4% z1+hHks|&IkY9uADlbQVU)mlGVFrDGkm{761LVO{h+EGJZp%0mq9&g{-)}U+5yf5!y zxRzcGi4Obwtlf)k)V(OlYIrR;9aWc49_n&DzQGlA01CKU!u3vO+FA-oTgv}?uA&WS zSeR?JYn=sB3WAv?>KAxQ(ifjK|Kfc-eYxdUoG0*+d(zy6%uEdQ`Ii0&K;3=2QzdOZ`v*;xYV!ekvv?Gafj zUw0tyGF4e~gY}ae0XTlxB*`%e`f*5>CAi=<5 zlzMn?xdQ~6p*L-w)fnJA&w&a&lR{F;Q!-XI*t|shJ^~fjoLn#MX^>)pcE%RPK*xQp zkr(FSbZj$4tv%klu*-YKt01Spr3(8IG9H%3IG3;EWP>51#P~zmdY27??}`L4{Kq?> zwm2XWhfNTNxp4%uKHKctSq3RmL0~s=b!}Tnwdm9*D2n4qK$YeeUf;wswD?pur zS@fPpdl{w8hxAsl-Pxhc_@9nN^G(>^YC-E^OX-Xsq|r8}K8v};c1r2yxmDYuO@#w( zuC~a0L;9T&1=w+z`I|tU%>{O7V;NWLiTqA)0@sXU)UBqH5H?;5Ly(?F*4^w4+nCzcQEP` z*KDLlly!>5s}yfoYvN-gYo82%hjLUhXV*|*R1Dfgsa&UTB`=Aku*c>+ zvHA3UMbiA$(8N-6AGZ6TZ?$J8_g^>25Us=p6pQ=dF0)=`;c9k|L*lG2KR62JV)TsD z+^`*kyB|{p0BOv1)D~;MGw?}dqw99Ckn7dxFSh2783&@%nsA|C3He(NCMJ}UT;R*p z6DB3vV47}!MJK4OJ#Gz$=B)}1r!!rSoTs4X9ZX3#dfhkM=@jGlAcmdTd~cjmZ(tr7 zN)-fsC7bZ}$VI+DbrmKscBN)K`?|FN3V*i$@zgY;wQw2rNX?ZBx!QFw>Q;@sr`%T5 z-O3M*Rg2Rb=w7tuxh7X-!g-Y?JEi!6z2j1;`opUbYHdd5f>RHoT_`j2*t9dhw%|7% z!4{M}t)7cRlt1xOC`9?J{aEMFf5=cM zL!^O`I@t03w5S14&+mh2Sih@R1-Gx9MH~iW zdsjY%ktDGufj`FYOXCU1ED^`v$5&g)E$~^+v@F({s}M5NwqLqS;*)d!NFrDC#mT&8 ztDULY{*R6k)Q5D3Bpfg87y9r*lZL4RO|?jsa+41# z51#5FYHm>GOK7Xqc%bLYMt0M`MjlHCZ7OKBP=VIoE`i)9m^7EIWM*=l2%pB>UsiVN zA5x~cW_RBn zQeIP-_xAh6J6!BoZH-!CK^+ChtA(L_%w%;7pLZTu*2q&0o&N%{vd7#{YnTodMupAh zx23=$BC(hXqpd)GKdc(7N90Rkg+jfTI~SnE2Q&ktRmih||HmboTTE$PeVDG=3HR6^9Q2Fn5c8eiI z%;Epi%}BBGz4+&G5_A>pX+duLYX&zEkd&NKP<1Q=P&e6nBu+n7+-E4y1 zY;ec>h<4O^%p6@hXlzChy`1YjOtl%eup=10{Yhbs7rECAqKmk)W0wIY_MJHc`uFii{ zF{=--V`!-}*WVrnzY}W_E45j;9@@o=^qWhiwiMQ?C3Ks;L_kN2H}y(KID9}>U{%o7 z#Rty^3JcbydWr@9rBzo8a{gqHOi~{N8it};pjAy~E*RdJgzEj_=CNK)kg%sjZ88pk zbYXNA`_Jn=f{EHGF`w(A3>nDg44tk5@80`L@|}*jv<{78Q+AH_Ojkr%MTO6rcv(1) zpQUxRFDwmMCdo5KL+IQwJ=b&&X}wA7h#*1SiPwKhNu^ex_(KWMZw${AEi^ol*zo5-Xn1cdCGl0utL3fVq5 zE}2INL^@NQ-$tcO(H3l=S>Z7=n>Tmub!r3*E@AO0!oV zuMm}Pz_dU<4dm$GH1Qn?2nXZPS5XZlC`^7!z>#{?p&X!8cxCv(^Cga9Ci$nvM0`Bp z+=Xg+Rz#C2{_2zPA9Rq#dIkqB%0khvKlvlCVfSB0w#YTK-KG9{dgY%+&^wKS5w}5r zz0)%~M3dF`hxdC4idnJcw5zYQ-O14%l%sfD7GofmU4!$mkeH{RSe84it7x7aJJ^=w zp0^Wcs&|dYe1X{slZ9@r=dlY_nmyxEg^FcqR&F~@r)h}qR}ns^y+Qn{9UB$Qcv0im zJs?Ik{K2zxph6nR-Tm!gNjq1iMo22icN)%djXC@xkk(A(;XYRmU?$JUBjy# zi4J{;mVF`k*mQFtkzZ1yj~&|9>Wrgk3IU_DB2l8A>I5&(I*+e~aW%36hnm1zem;cw zR|UWHRHfvFb{SI*Bz$hd&=C#(60|UkPbe7LinUAqrG<}wKykXE2vZ{bD8HpPM|}*J3NF38K6D4U&87l zJWm1zZ+^0s9#=vA6J9f=`gzU^6{4+6Ny)~5q*HmYd#;m?(rv`T{;#@fMSR_Kkqruj zZx;7yOPAT={g%`fM`(7I>7^X>{I(C z%>&6h5W>pQQm#W0hb;}bm1eL$SA@cyN5eN<)E@E~2jBfsgXO=)VqQMlYfwx1exi~w zcL9<}y7X1avC|_%l82aZqpq9C7w2b`$|Q-%cJcnq-+BFUQBD2?yFj+)hPS9Xx1f6NE~f3x=WeB7;!;QS_aYc%lz81HsQ>(X$Q}T9!sL|w3FZ}ILTr2)T5OOBro~D z0Jt&S9*QP`mk%AEphJ53!SBSBLvG16d*@ZOJddO*9NcNapfZPx1WRTK<@o2>WyVel zJ;ai3)qvf1$(m4#b9gn&TWzR##Jr!>b@TSL{H*`p5eWH#YOSjF?I+04#=y1wQ31Zm zop-4$-R0N*WTy3_%>8s?$!cc;u>51rACnS**&3=NE=A1CsOOUlfJ1sRF^m`5>zaHV zoE;&)Ijhq>y1(=Plqlg)rWnMCihhZ@@~IpJh?!vl&q(VvmpUKo9>q}LK>8NRr7Boy zgYar9lptn5-_g#q{}cO%pKfxk3AdgA(~v+8$o#ulXSmzd-xQA8C0i249uF4)-ReNh zgV@oIoUri?)enGDf}cJRJ7SMe>9@dD?_NpX^kf^XCU{T_b-b$dXoKkXqC@gr1cCJF zJPzp}pK8}Drenu6!i`1K|8!=c#KXCKzJ%0?`u}<{8bkb09vpPPxYrgl$qj0~F(Y8Y z$j1}U9TsWMPx;QuYCGms4Olclqxwlvs$O^>Gzg>ls+Z73D5>;t*GVYbvY0HeeCo=$Bo zCYxnU)!}aZ7-|qMLYrgY?3ciVHyEZWXE}rQeJD6<4;Eedz12yiS#0o>OK)t7_Sn@N zqi>KN)@L8}_m|l!ES1GUF&#Ey^zbLjxX!-ku{3qS$zU|^_8S78^>%j)BFRw>v5<9I z9m9A@9qQqebfx8&0{K5=t@ZNU9Oy~x47q7_!o%(`dly<2+~qPE9(+N%YFhE8O7Pyg zpQyvw*|;B3KjmFaid4>hEo6P9nsRrKf6bg{uf7Jl`}-+@t4K zS1S8sV`5x@A?O$Z@OIIc8C#n6OkXevJwy(o3>sKVuzuG46u$+EJ2|SY&|z)l1X<}X zbL4ieJ*T}f+7CS=#YqY+7Xbz{2r+c+D0}w*3g%;HycuO7xZw7vDM8aEB_v~s)Lf2} ze95Kj{=X0BD9moN)_2%EENzOQ;^*h>HmwqAt0qnG{)%&oUwCzF$P)bCO1mEz)t|l% zd3aWdi%V!ceS%qPXchP#IRTWN$dHgO-RNCXV4@MtO|L(7^EZ7+sSasfs-eyPi6VW3 zGZoSMl~O;Ir$jbHFjm|OHSnLOQkv&qe{UtNbhCyG(0Aa2Ta2%{IMYZ37n7_rvTT*m zS3Y=xY^{Iv6yyRHxDe!qbjiOf(>a1r5~Cw^OH{rK~_Rl}S<& zCO}TQ;cHI4QA5~|zkArOLkA`xtsQ|BT4dv`vGT#9X{ljk>fofS^BTf zet>&+0)RLZ6zPvkz)Ee@Q?eknMIlrCd4&k6j5J5IJeRFjpl)xh&>hIW+J7oy;W?|K5iZ3$y4-O31sKc?xY-cV(e#8 zPC0L_j^n>Y=k+p~nPy=MbFm74LsY}w1yIa!HAvu>K*H4GPDAS;0gpLK-uU6mlbyQ_9X*0Qb=C;A1~bF9W~NFx~mG?t^Z@gM-v(0WxsZ<{J_1R zu+(r|!Ey??Dqq2r6U1v4hrLV-+P?LP?3l89wr7~aN!LqPawUy)+n>aA{kv=}od1zc z6TWnvkj@x;&EHfeAJpBnIzRu@;VhnGyM<$77_^*#x)s=tP9n4@U~0FVxA#9OCK9&2 zK^{QednILg1$WpZcXus|MmOKTVcAMApiwZ!I(EDALF%e+2Kg`fBofso3nb8JZepqL zyB?yqnv;g&tpVTby)EU)jli+Z=@y}(ALHbf^NK|9O6s9c{eHYpof#~W?o=Xy-=)`G2Y+9|*BF0@rrIMbC41cr-C;o>!E zsD4plMF6$isd!-?`Yl0qQyC;$w|un7Xw1+=6H^@rBTP3XNV!98^zl9;jz^0^YsQ@vp?p8-3)i>WyaWE)rLT18>kt=H$|m<>&HJ)!>pF^21QN47X_` z39m7h-2ZhYsLPcS;3-2NIV-SMwzQ;d;$>+Y(lAihIHE5Wem5gC(_fNbFY+bv$6w2b zuU>@&o6A4W-!jA;Xm7d!jac-eX+>1fC4)E3 zVG7h>{q=Qk3h<_gjz8+LJ?7$>IAD~*^p)Rc^8Q1K>IV{ebz zV46hPrwa})tne9s&_<%^l%f7Ktdx_$XS+)D5bY%5SxfB^4)WAdsw#95UiC}tIf z6z36aijSnPTqw?eV=x{dikW5pz^#^>rdqm?sSZ>j!9X8-rln&? zNlv7{VoGgY#jw1o-$~p!-BeKxN#7T`=6orhnE$kb@SarP9qJtNk_+Hbo{VT?%C&V_g?=(Hbd|Lh7ARGw$i;`FbvZG7qgOdYSJ7l-cjbLwZy-w4B{@-&g- z^;ieP8PIOoViGl1CX`j~80%wXCsyN}!i8(ZzPzoO=asSD7en(P0@*(mrFWbuM)EEn zW!N#jG)I6-agzNc!%@jW^ik;*09Pf(z1nzeJT)^SOyPb5tVN^ob{J7b2M&^{H-p7x zjfSJnW;xJLwYh-QS3HQ~=PYe%nO~t|*YTEwPJ) zStpMzD)qFgN=>p6uu>k3HlQIbL)PsO`Ma56(g5+ZHYV$Uz@qm~mbX$h1*Q zeMMtcbqS^*yX#7B4G>pf;mSmx;#rmScuQh zmKMIRchPv-3}aKD#7~-9t^@lz7f%PR4S_;EEHRMmDVjsp8nD)mMd(7!Mnd6Opv@ZJ zP>+Ll#z{Sdt^QlqKufiTVn1m|Ibx~=*InBKVVEt#6nD}M-Gu`V=Wl{{G0 z70lUmNeT&JQUo`o)_#F6HTol|EROV}l3u!{;yV?H`wdJAevWYa2ooul76K&UD(imT zAJboo0!5QIt0>G(Jz0E3 z89qR>)18&8iTbIcCnx!LpXS(WZxN9W?^bM;H6S4@xyWbTWrdxzDPxJ&FDi`a{6ZmslnFWJ7}OBZg#M4 z9yLVZ*ZC&!VU2C9(gHKri34@7_OTG>Ki7_YWBg%D)LiyeO_^aWie2b}^?`Q=CL3D-=Pu%)*=PR=5%_aQsMYCXKVJC7J$|KY$}I@ z)4Q<)^RR(Xu0PKw@518VCdi0r2&ye^`D8*QVC-IFoQcl})ehMbPk(x=Cmy$JnsL*5 z=qCqRA4V!j8ZO&<;3^5>CrJi~Xz>mWMyG|FuT_l$#GMDz{K;hpU44GQX`C+#6l2k# zN}#+fG>oTCiWbSvmhz`zc#QkPa9;GCVW~5*O0cE11zb#&ppBlvhsV+I+NmwHY~5WV zhJiI;!`}(gcAs(Sd|rcv-q2s0*>ZAelun9XA@ED%by5LZ6a(;rsNstwocP-1wl;NZ zG`bpS*m}IxbiJgFHIb(-2Q3hQd*U1v38k5(u$N6znxN4aA-MaBt9m;Zr~jQ1wsUBCE0_I}cNql4vzK zxeddifAG!pz#No9549(0S=dHIZx>WZO}WjND?F@g1iakE+u@@gijqvVv~tskSI-bC z2eo1H08fWh1Ryr=?^yEHuCE^|W*>YjbzMEEynL5&d9p`>yiG#~tAB+!xVHs_`@dOD z3$EW)pW(fxhwd;IWbtCLHBTsqiQwnhL?YjAm!Ra)3DIAeXQ)$`JL)TrE0F9cCz-sC@gLgyauQzU^a%T&oe&EGxfCy{h|%eP6_4KPp}s$R5Qj`ZI;a>oQG_$aTH9XbA3vEcqqhRhU%y6gQ1wJXE#S+FG6p? zvsrDp@NMrSfaQN-nFQN0Qvq`cuIQiI&DSX$)&7VTIy&pfqz;HLJrJaC!;fOF#>iK~ zc@bEzFn6g5Uu;+=a&IQ&6Ny9f3J9fjXCs5{i)G0E>G`8#9CbwU{AF(dulVFd{|0!m zRy}Kg>8iHMCA#-e5V|$UrIwRa^iaTdI)GI`ZV44%`bOA%;buy9>B^te9rVwVd#`2y zrtKD2_D5cN$`WfNV&FaTFUoF4*Z7?O%`?V2+UzygIiV$Ds;vO*W_UpR>u)zhcnb?PatX75ne&0r=#08{!k5jZH=F79oQS>g(@7Wnz{8 zF}X+<82~Y#r)h73C;{OH+9s=j5aj z+pJ!fL3L4$Y7x>`U&Vgb0W96Aqx?y7Pil@X^^WvEN->4C>a0x+bj%5$5|M9Sj*QZcXq$^t`kCHi3~gCa}MAjA~b=Q;z@s%l`nUK8{$`l zFe=1gs3e`G6b(#86S#KWGC=ejlIYYAw+HG9E{6Zr=}v+%u)a?K3U;lE)FCU?bg#eW zx(5=k|2G^t^l4{HN!FuT$!)tCQG({c+))t|Ag?e`6AtJTim3q}C8+vK_%d(gj7QaB zMR_hQhp=k!DjfYj^v}wbIcomnnX+!KXWb)c=cSf-aZc}S#~CQZuPmzEJVvEQ6D`5f}h- zS?>$l`AK5`=n&$NGJt>P&_Q2U?mf)cV+fdxaA7*Xpjh9q{LWuyQ^_iT&;aG9%*k)b zA4msFg<%a)#LB*y;+wL{)K+Q>e~+dj`bxBO+WI9?0A~+xl!jWztO3M>x%DDMJoPAc zz-`JEYe(ga(6#_MznTXPV$^V*k%kK@65!MPNLwr~k1 zJ*Z@y%$71^tKPk6h_b_v9`&3`nI1&5dXY&rL`GTm`DWD4CgNZ87$1yY>~VDvHlnt( zLXF}l$hHbcMYB*p?f0|4{d!NH4mW&A2E8@iRoea&DpaUf*xANX!=6Jm|4C?%l3t!y zb~R#~L&s9WAyJdGA< zXuvBg&u9Igr75hj^cis!@hY(8ZF(yq?<8&3;3&*~SA|Hk!zv(HJf9otN-P^-Bs**& zEpKG{8?c654TpN`VC1}^linDV0v9=LHefGo@*p8cE^eCWJ73)IL4}#$dyO+}@Bo*d zN9WFsQGs@c%u3#1ThT?r(%HCPde?{4wJeAZ^eFv* z25f{T_ib*lpiOW}BJ}c|NG_A%fIBB@H3&bg2PG>a^tG7 z^ViGM05#bM75OzadG;7B=p#2S1mqFrsg?{~g;I?jKrehQnk`hg-MYnQ{hVd;-`n0f zL3>!#obBE?HFb0UN_uTta%Pgo@Q(R?=G~L&j@iHrxxDPPKB|``+;tsBdeR;#p0UWW zcL_S+ex7%}W$r8}Vun0SH9e7C&)W3emqR+Ka8{Qf!CX;g%Sax{DS6^x{tdBg_}ZD% z1S>W{t&Aq)hfkFCgtCbn0;;p$k3QKiPU?Usw}QNSj6lgpJep(a$fs zl+`G{+HYBa-%5spbfYi!kud$tfQ^;5QlqGew&CjCW+}fx%2+puStuI0EeisV+*4%^oCHa$fDRdXw9oNu(TO#dG*wn{j-Nfm zT4-1^@2UG3c9m8FHJGbx5sa{BfW=&=NfzdI8x-k8;Sp+ZoU`J{Ai%dmqx1C%B~y~~ zi3sr{K-COzM)cl^*%w^LUpgsg=PfOIm3!XGm2St*A`+HfiURf-5IwJ8sh^~%?&20K z-%9EWpI%PByYOUV!on3xgXB@k|lx z+)2DQd}P!e$n$E+6BT?YRcd&OWlnHy#{|gjD_8nIwTNj;Mhq}T>yoa2rq<|7P(zkWqC%&$Y!C=2rPw$PQLc zpv%d&XWh{|jCXhKDs`Y_p&e=E(w$ChPlOr?}~EN$oNPYb=h4zR8H z|NW?PU(ON5du447Qfje0g4rJdaG0QIUL7*zQpQMYn8ucsk-SMco3oC70zMZfIE)|y z$0j63jh9Z+rN>5Wg~?IqtcTmob7a9pL~xt-fso=WKoTir;d)TRjE%I8 z4(pF+uWgVQZt=Z;6tA zAlx%#B#>RH;JuGF1c(#Q+fcfNsY|ge`IKmbs3jsr!CYiuRHa89xc2*guxH(-8?EN= z6N;P^E=6>e(}}`}ybr)=h4W{i1Y`VH9+D)}pA6~6-+K6s{GM^gU{~`2U{Q9m;WQF1 z8V|;TF5#+2InkpLygpDEL}qC4fFY=>VCg_qF*pFtX2d&w{og6d)Cbz>$6CoPJ@drL z>mkOI=lebPOzNynuG*hK)x;z`xWlr{V4#;oh-(28xrN}+T$<@m!H$&#mmr`xUQU1& zeq!}R&nzc9Ic}Ss_$zCE82Pc{cG2cS*QZ5GMuAN44 z!i4Szj&AcLNGv7wZ{Gz;P6Yy|Wb(d5krkWJv;kxUPORbNWH)wcg!w~1V@R6MY9(YB z!;?i-(-ZAvze1nF!Qrn?;1je2Y9014396x*NuXwKJj9!Ov1BtEK_4KRxHH9v_q4z+ z_!9Rzi=cNHI+Hf)vs4)Y1=`>XC+4^05br~RyLok5ks z!~S;Nji{>760dQ~ac(sijR85Kje}VeZno=0WLcv%(o-HN?A@$CUA%;UC*&*<9q%l{ zMatH=6>nM&%tL($=@K2~pDM&)TR9u%{w44QxjV93@K#*uZ7v&8ijXGd=?l1_>k*}H zlSp+~`f%7&4CRtA;iXqu!l|i02kcz8CKfJ?v?&MFP-jFPv6&G1 z=8kov+Vm!;hy)RA8KfS2Q+(LCJ`mOdOrnU;0tWfZ z|J|+gVHCe3zu(C)HU0HHeV?&B0cdzewW}>Al(Zexo98-V+xrA0@r=6Y7Wcs}(HR6F zDzBVW@|4Kx=|2e*>qv&n(u`aUHQt|I6a#%u+KhQ>94SpE#SD5RqZOyA-XRoUzJq}L z#*P??GGOD}t0>939N*K~;3)P;0iN!KTV2)5miCc+mCSE4f>st+RXI?Jn=Ex+Py8$o zJqY4;9KBY4o`vF6W5Iy8JY;ZGP6$B&DNf$fJ6-uJ!NJ~(p=RRXSC))SqZn9r?+z($ z`M$(g_|?P}E!=x&A)aWS&pDJFGI2n{GOA!|aFuTArw9U4WaNQe1_0 zed)LB8IT-zved!tuRd*J4&duprJFh|8#oaE^}{5RPY`piRAfSshuU;M?Nq9Fa~jygnIYzTu7!B%hQwioLU3FZuOE*s>N38bJ}x2N zR~6hShz9KaB5U;U1QO?0bT2_knA=q}0XpP6FYoNFE`ZiESQ8(r5ls}CAEvA-q`{C~ z8UMzOQLE}N*}H;tw$HJ5+bHR6ksk4I785Sn^1p$#QyJZ>*OMUkWBR|#4!(?%gLF>| zQoPcBYI18I1bS1^Df`5b?V5Zi`soh1lA33c_!MJ)lEGbg4>Bi1m{PQ&LJnC6Xl@mK~FDQ&5{>U5fa!hdg2jyeje5y^$l#tKpT! zIY+ax_Plkk)u3}Nu)mJshqw7|yv-@o)t$jvGr6b#la^~V;kgS*B=#FTIwQ3B)Z}Ff{EQ)~u0Op)NLUi{H%fFi`fQy6Z zi0_c;8xkB_6F=lW)6ANV=gA8I;KGj8a!vtFB=x!2C2hiE2_!E|&d#P>pUZb_|q+k&qYH~G-wxSqQf z3g60R$eW3)W(mibYmtQ;CnQoO281IvoJyR+4HS%yY6~uK_8n`uD|ElbexWlYn$-<5 z*)r;E{OB$MiB|o?Wn$4{?u;w)=(Ry{4Xz-441&n*3>3(j;G-s|C=t0`p6AZ z_m{Oh^Zpl&1-w|8VJ~D$fRFc*B0g*g%mifrdrlB=LwO4zAPf?`@A1}mQ>phHyu8s) zI?TqZ=vm4uE=nfGHWzreTPJ1KU?{WG(Ic_YkhfJqgH5u4LURoEL<^E=c0}+eps=#M zflU=p15=K`eGDCQuLXnV64rk6ix4p$%oLprM<=?X zk(S+ELO1?=Prs5gT!0y#q4mz?c73zL*1r_JQZz$%luI9#?<@E*X$beD!4Kx+P(FeUR+EQnpx7vgja zZh>OnAL+yraxy(*;pyN$z3@&+{x=JZ)z~hINAB3Zu=YMeOK|Y8=sfk%U+l;e1PgHE zI;x>H5E8iI4wFzSV*hMcd+|e0YfYbc26H(A znkW!gUqCQ@aC0Ki$cd#4`tWjCT5cb370e*FsV=L*dXm1qZ_Cw31fkb&TH&Wk1F@w3 z+YjF2P}|N&00u7+0X8fa8~{(ZpsUSx$Bgx{$hyn?b)&{9WN2hjQB`@jbN`Ze)~j`p zmNKy&71=`9U~DXe^U}jn!Whdje6jh$k07;2r>EGoGdi<@Y+~h#8kJ<>P#Ak*w#Yu# zFT_m}EKiKD7-$DscONo@w&-|_S^3|@n}|zWl6b@T2vH27-R&YYT7M<@I+DmOjg&xj zgnIm(rQ4~)tU-4}|Ai=JazP=60!GV0vX?8IG+|ZlGc9vRZjLcWNhl{J`uH#P5-MXa z9BxoH4}VoNvAOImDwV#e5O|Wso)U;My&NvX-vjbWz;*CRJ0pce)WNGTPD=kw_Ix!U zBs+R;C@Qu1A_i(RCfIOV16atWQhLRA?+VOkb+(528bhi78N{`(9tzDJ$q8~D9CeU=j zgr4e$rbp!r75dh>3%T7efIsQTvT6nu&g7Wmm7148AO9p5np#_UvzONOrhIX`0h31T z#*vc=1M%Hkv@d7zswc^Ql*0)#*R<9L*J}%z*QZ3%ZxjXJ(&194?wQjuLjC$u4Z>aB znW8x~!gsEfi{SavY_rea<|g|NsM|E4c3hb-kkQGC!gDuyw8KexQu1#zafF)L@lQu? zaoyIOjDY`quc=iMF5Xl*UI=x3XvP9xBx4D0bRU@b*0TNHr`k)s|B$4EP zklkQ6%bh~!FeoVcIdFsuEIPe(__?zBbtfQm~FwN z@oI0v;~_A9HNzbHM0aw8GH|eMuL@L1`U)~*$WdYGX^l5u|CFPLV{)EmaTmL-90v{$ zX_?#B3%U0Gp?fdBx~OM%9)-IT;g=_RU12+#F?}bO3vIYo2HJ7je;K@$a|vzBrqf~> z2j5dW%{399j`ZwM9kW~PJ1L`Rd-^MMP4HSm%zr-UE1d!ckvHt$wfQqcN|pr;J}z9} zkL%)TldzE4ey<`4tqVVW4re8kHHJH?vhFZ~mF)4B_9i-x>*H>&oNLH(GFtb1wXANz zAyCy9Kxk@(TfSV5(=JiPAp|TP*$>XRZve*jt;8Dk^^9t(xooEa<0rn{Ij4z1QL##5 zS%C-M(-JEUQ@kzEY&?4%U!Opz{Vhv{awcI-_tp6&?A@TsmVzJvWPme*f}Lt8EeRG- z8BZQl4jEgAj`$%aU0^5Pul$$#xW^tg)r4+xGlNz)vc%)MO^)cXS%Kg4#Dyt1LAA` z%?A;Q{#v++nx7ihIt)h!O^Bom0AbK3tAMW-3OGuGYAqjqRZv`~S;7F|chBVUch-j% zrQrLn82VMJh{i}2B&^h+1YY}eUY_%rwn>}Y7sAL8ttfcD$&btToq)fGFxSj=6Jf5x zo)!m>ei=;M$A9!keaM-0Lq?(3K>fwk+*mu?)-2|L>k2`aASxB7B8A$}D)Qw$ zwtQNOZ4gtKL{*PuPS3K@sJaU(62x+J;N8Oocck?aEi^0Z{?)w4sEyl6s*u)T0>-g6 z_}Su|=AgrsAWp0ij~@hOW5>tmJp`DD^^WNJS)ln;UD}tP7U`QcD$m60w>G)Fo2CXjxkxNPVmg|LBo3m@ z@C{xy+1M(@T>&qz1!@L)6{H#~r)>Ed{ZiJJ%MbM%piyHK`U2JH%$gmT-Kty&JUV@seO zm=8z!X6!{f8Pq2d-1Dy)L>47+U^lS&eUZ6TdB`=eQZD8Ftw8niStZ_;?AZJlefBLZ zwY^?OFt2voZ_BemN~!JV?05fHY?FeR28y-_7j$i|#)H;}@uy9jkHwTRtO;a~7|X=T zB+<4?Am zu}>S82}cte{mdiN@fu`{t;X*wCb4O0T>|s|?3`ID2+BxMNrrPxNdg7u%x=h#MeigV z6B{Kuz*7(B3n-AK^VD1?oloi@5W{|)CA^kO!59ncBsG9cY42g_2{3X5lOqkIHD?&> zOH6Z0t!Ri=m%U^>*lYXTy^df#BM9^QqKfdUaqqu&ayF0^NZdYsn@5*!Q9v?rSed;- zZu>pt#%O7Ig?~fYl6P_0cqFI(_CA4D7XmF*TsH8&o&|o{0%8^Rs5-MP$HOV9rwkyZ ze0hAYZMZmy$J~RnYTOIE5mSrx^+eP(K^39_wNBz*MRRRV#a5?^t)6wyp&-EaVPq}Q znGM6BlZfH%gQFq#0dA$C4Ui4F>{`F~&i!x%y#smEao7YzpYb_x4=&XPW$>YURI?@F(V9%7?76_Y}F0z`^w&f_*O=L!a3_#j_e3A&HoY6fT zFL_X82Rx*sqM)db2Pg)ypHQAffK^CLuv-fzYQVh^acjdmBQ;9W3mtZ+v&{419B@Nj?;A`{{S zC4-)FdEc;D0?VwoY^EC=w?xzP5QU6R*oBMm#yQ^%<=-{zDk6eLP>l6AW-5^-AVyUI zj>Yfb-tfhKEDBDJd%Vxt%cVQn1@2gjrqo~e8N1)j4|xf{$M%6g+3_0;EP`RBYYt!o zA~?HM_rrUmuF7y+S9g<8oWZ3kEG{xV)O@4%4zJS_@nnwb=2NCF0Dc`1bduCpYkLsU zE6_a7FeJ}%dh+sGDhMC}R)l5}eM_ZPZF`JYDIft!vv87+A#eYFD(fh~OV){xi;KPB zqY>udH8%fpDy+3slhKo)zu#emqR-QI>;ho9UN`oSmX2U1)rW_={*Sa5stf`oo7TIZ zeEW!j##o-&BMOc?3HZFq!z$NJuS&dfS!1j)`m$2snPaG4xZ+BT)Zh)16?EkH*utAm zB%x$-N2frpHww*x;(ELa4P3fi!AM)CjrIKny(idwr?(rMJ4v{n??pCYKSF>nb#RB3 zk*JdM3cxNt4)lg5As!I@jLQ(jAhIlDAN+AhT9ooqcI#eC25Wwjz{y$RA;?qn^slJN zV`fCr5P8M>U6y4#zQ+L*OcZnuSPu=OceKcaM2A9xu?lf!hxUX4Wby*YpT7-Hg#G`w z?IQopE1GEJ6P^Yj;XKKbIoJCPYqo+zdIH~ubXbA^_Cylb3rR2d>C+3@fc4=l2dUeK z^Ydj-vcVH3=xrWrEo+dS@%GWkATKwIH;C_dIV{(?o?r@T80ngQ`nkWDn^pPi#uAKE z=$Q=Ni*ph|*@?b;BV>7>jg#kKs7v>_PV68v*phl|501gGW**}D$6;8s$NbGETYUuq z`OG!&urQTT<}ELET+;(h`EFceQzT6aJ1MiMxz?5?04r~WT8uPkm8NL0x6_3f1x<0M zvEcYnoGeN(SO;#2S&?a%fm#{IO9RXvb#kAS|NphemQ#JZ5%7t(n!3s$tbmD*U04_P zvI_2@8S)VlA^;+s3BR#DmJ2H@RFV+GttPqDi8IOKm^$s=M5}lME$$egN|)IGT4aak z9di5s6eThOWIIp z)a3VkTF5%U=Kifgvi1fz$M0QsCFYP-Cn2Uk1`N83rwOLzMy{4e60( zfAzF$oHs6`a6o$NaG}8{J?-cUKk7p7`dgw!!ijy}AZh-(iTk|;#W?V zdnhF<_hK1~^U;7dT2-jIK`3C~BC!2PqX$r6fY zj{))P!?CA=qq~3NLBOBx&SRe(!Z4NGr-?Jup635?@329&ym}pcPMhX zDnw2|wzX(@%@7mMg$@0y3wB-fJ0+=Fx6_zi-6KLmCbqqSYG+1W7E(#%+4}vERs}Xa zIWx{f=R@RimFG&bX4=HU^#+@dQVc6$M*uHC(7!?JJxuOrp@fZ?@`BCy)&8Nq2O2?m zz?Op0NU~y&D843LDc%m!s-})OUDgOg6~DC48Cn@u>fdw%Gr52KBY?I!jXW$ldwReS z8Oa_--ZXyCe`zt<`k~4z1gBsS*VUKDSnumTI70Pe=wZQI0y1i(Pjo8-z*ZGMaykjq zf;3&vP{0wzcv4;;YdfL+sB`NV1c(=orZK*xVujnDo~1jI|G%ctzl&TYUkT%2r#krk z1Y^9DV@QJbN*=bNUE89xar$6+A7kbrJ7?wtj!t(H7hY7>`%2Nz5A7jgnWZgzI#;5} zzfPg`et)w;M^H?V+(25hzSQ$lQJq60sflrqeWUOwXX#Bse5bs$sM9JkkDvr{>MOxn z;&VK}DOQey@+(i2e_hJ|G#|;7XPY{?35~>2$%7JSFiA_Ul}jO&6*~s0!xEg@j;a|3 z_uKE!UNH}9JHwZRin36LKKAzxyVy-Y%CggxW zBn=tinHa1y@Lx*cXPHNVFe2I=G4FZDfFr`XObDapw;t;0>R@?=R`{DF5C)Y{Yh8?m zVp73#qb6)3pM}KNZCh7LY?@l}4r{ePvd8KrZfCmQM)K8F4^}q_pn<&|s|YC$owLod78Q?!sKJG}HG<8p!T=bjagZo5QYbTH!IRG=%@@sjZ%bd2NqSP9aLL;n# zf=iOmUfP)kcg&h6N!JiV2LPIEALwak~1_jT8ELSVEE_42i^Jh67`Ak3`tF^Qt&GJx)y~+vCqG9I&7OT|=-@ zjjNT~w%1*?*Jg`&^<;CuikD07W$!?}6(L}6lf)A@qo=#MzPD$N_dPWKUnwoanBrlW zWks$&&Q|;Helz?xBq&6mI^3SxG>lEEIY)Pf%zNy781-{aj^lfZ6~k#n&L%>Ka57{E z_i1icR=Nmw7>;X`#X=?^gkz>$R%+s#GBu+pJbqyh=--Ufls^(#TJWZ8?kgofY~ zTw6L24#SE&5yRKQ(h8!$<(@WsVfuP0!27ACp$=x5rvrlF9~uVTT};-0%i4=ljY2@c zi9TYq8(=;OYYOX&^D@!Ne~>g+uaMMPw5e+ncOP?|m_hnjVD zaSPpjbQ^ju&aTW3^9f)oa`P^o)D4w}<4e9KL{vqW`aEfdfGr^FI1NA(2Ok5Dd*#*)RrXpGN%99pe3k@9PeYS$LjD zK*Z(vs%$^aDS7XW`zLAas5ocG};e`QfMWONkx#UdZA5@}s90?L`jF z^KI>b{zegl@{VOgU4T<=tNZ;t##t(0t)cRdX)+ko#!k6Q?LisuZhks=B9y8Dc5q}| zM8U0pQ~DYt)byMPw6R$HqaGTbxQ1%zZp+o(8Ys>gL?* zNuilTxjcfo;)i?S_PYN1aFVbyt~=VY>F3qZqO530rC1?i^@(XjYw{AIp^TCh_Q%Yg z8=pfLtBABadva14QN`xHf`t5a$Z(T@OeMA|iK`!2amU&4crycL+D)Xik6Hws%6FX0Ls5{)hqEPeTPm4o02)Ok5%ug&mU&Qs>lO8rS z4I|)TCkHX6y15TIAHinh-LoV)Q36{hXaItS^ci+Yk4o#Vm8WM=Mg88(ox*6>E21aF z&+3*dGe-WH9hEfM{}pT!At3>>kpQg_Bgp!s(8{OHU}x6m`0bjW(r9Em#$}Mp?;6Z9 zC~KS}_T)`yz|f$C_r42%;22W;KnBbIXFf=Yio`ZJtY#IzBpG~N4uFfvmPZjn)CIB@ zqoysZw1p1oZD-PwKVmV&;SaXv(JFTTWitF!xERiS{od_{y~xu&0nV zmKg(FkLeSaBJ4ib!XTF#miiS-I3h@Fq9}~rZ}loguvHG$r+-5=!KtC2Wn$_|UOa9o zhFha9w>szI_Oj84bSmnp`s^M{QdhFKVN8>1?+R&`UJ_Qz-{9ZM?agECX2O95WsPBg zq&u%Ke_IJi;wjuo#g_J9)qw#cr`v%BqcvQ6K6rKuYK7Or!88!IO|ap-4;3Xteyh@g zH+B|7nG8J)c?!jr$6G1u3oI(!*sZ@;+e&sxSO&UHV!=dH`DA11N0emUGO`te=6I3k zPYJ_ZPRJa=kI$Ut6ldPKBShI!#D(ZOY`}205$x2hxgi<$kcRZ%1u+93Jx*qqD8pA@ zAZkd-u7SJ1>mHL49V}kRn1Hi}FfMB-)~2&n_=a3;3WLu5kO=oElbGnsxx*pSd$oc$ z7NrVWs$uiTM_kb+15N|OxT@6ZpeP5V>P9j$1MF3q z088v3un4 zCz3BG5k2;x6N{p+HT89^vUu?0gTFIrW-~DOst&MuujcXOQcyfKn4^({wBPhQkv2A$ z-C%Df#1%R=%A=nGMi0u0)FX-*Ry{uI(Xa3pzX^06xSVqy+)yZXlxmb<*2U}gs^lTZ zkPduh0=mX2v`U-eEJUvD{$hY{GWKmsw|T}Lo!M(KyLy}?Fg)!-M@ISLI-B`bxUR&6 zuR>02X@J(~NT|(T%HHFOUyze1mGaM>{%fWo2)6_eL!byaV8i1|zdyb7VsL8;To4qE z^GJty+(SanF0(}$BRfKaNE6R%IyZ3#YBuuqX&C(Zs%&q3vJYC6nUKR1iX!>%#?7EG zNpLf#k$nLyyG}Abuua6T^CDkH;nf>W*15h|2pB2GiAS8cqPaKn7cVlj5RNC4MM^yXV?zs(O7C$LbqdDRS=Vej}hzQnj`Ykq9Du(k1A$ zpu=zXGv9Y{&vt`pKF~Ru%FT<-$h#fFAr)pK4xKV+*}gK%6ozR~h-=N_7=GicJLxsB z${<>m%I1TTy<%jJ+*$<15De)jIOCz^dk^xblHid;8 z@kkS^#vyZ%3ze@gK7RJ>WA61YGg#(m<5UW)v2!pSA=QO^BLpm;mOJAsredd5VCV%L zCfNy4!+_WrX(DecaSzj~(uX-KyOAei^?4S$hoIzj&LDnxXiz+!7=M(~z^+KAv|ir3 zK|rNEK$NoMR;n|7af}ARZZjHEWLk`IG2A=^HxOYq+3&h)^J6pjyd)Fc^LCyoN%HtS zmWv0+qcX>ViYdjte_ole*cYq;);Q`512#tLCAU7)gW&zzn>+Y(Iyi$7?{1-qe2o9glwOZs=;eC}j&r^h`@fSh*_mwDY{ z87SQ?Ig2melR*W%aKE5~N}+Lh7G-6#?&=WYY%etm!wJQ7JaW1DfQc56v1P7iWS#X)O>6-JDp}S$pZDk{{koA~o_mgWz0>{u9GDkCAi5`MWtwwo1it{3YKTAnT21Y>9Y35nLtv0&*cn4LT+-_+A5wTk51H#am#BU9P7)rqs$_@K@!~&I$Lkwv7;+L>6T;t z8Y;MWTQ`zg55=ousU`U(-Hdv$U7nj~sEpDPA`)C@J1$O5OT%{vLXs<|Dns7e&;mY06ZOm#=(A51!opE;2YNs$k1@#@#~gi{gy znhEOLh}D-$0fBf;&fx6NNTwTUGCJV;^V6(2^7TfBorz=TqDl7AbhCpFyT1F`R9Q}8 z)>zzUJcZbWj?J$o3sjGGa*XVCJtULxxw}-dG8PXjU=xP%bB06p?b66e+2|V#+j-r< z*9gIm{WO&ET>q2MFWilo1=7DIabC!PA4!p)cW;h!EG8VMO<;($s3?|vPrtHJS#Jf1 zcJ|RUc&6}f(OtSuEf{GywwSG^g=R(f4VbbuiZfPoq<`_(=Lmi!fQg6tElG0aFx?Id z_I?-wMECN6?C^2=_NfCO_r_7hPQSmsPmal3LuJe!MDBP)XwP*x$=oNyM-LYtpW<}r zFF3OA(%p-fU~BJ3Y=WsFaZasy;o@TEc8L}ma5BTqUQmB^0g2%)1Y)WceXILh>~c@% z^fw07bEx;xlN6z|()hTz&Pwtze-mWFk#%jl^gcxB68F)nD&{^@e>Q3Sn?_&SXNj8$TL0TXf85 z2vPi&7Xi0C*YDJ!G>TCxHBdnYM(nO8`Ix}qE6zb8c>M=bU(sP<%8pl?_RWsVzKN(9 z&Q<8JIAAkL;g*Z!@`eZ8{0UnS>YLqh7X$}!ZjK>KUjoc_@;IfrLKz=ySIl;p9^>YL z&mw9=6m4!4Hn9nRNRyR?HOS;~lFEgbx=Uk^)Yi#cUQp$-Z^?YlZVOD?%L3#ghEcBScZD`sq@CR4Z<=U0>lvfn~y(n62kMbHf-D^Nof&ron%_ z1MMCfv!YnUP~NWoRv06V9W5pWebok}uA zKD&^iX#8HW)w>nOa5MO&p#eD}_dWa`3JB}qSbGaY5eZXf^yL@U8wV+ViZmPe5 zWc;i4>j>_AP=sq;cz%u2L2bERdUoc1La*CR(Lk=rn@aJKjXaawrT_B5@iV&`wiDaE z_r{|Q;8d#y2iKaa0f*0Sv<}M`^<&g|r~mf+M6A>0aA(25e_LNsC#U!QbMB`fRO9r+&=j}uzt#{;Xs@AGk|bzWG$yht9!)b>c5nt+ax`DMn5${p8t z9$6-VQLG_ttR7U&$gk>D$xE_JoF4Pw`I_H(V8%GEgTaZ0@kpGLDJX@`p>s1;K0rcG z@i#@PV50u|frgO@BrO?B>rTQX{#sSaB;C&)*LfT7sYA`3V-s7^n4~VK=aW>z65YQ#E>WJqbnck|m;+BaEC?UYlI1 zscp{f&yW^K6GImB&gk!hlmhuGVA-}8Zrz|@9xVKm%sto?r2~yG`sYq0nDm(FJzHb) z!8{CQZa@|{3e_CnJp;=I8SwW>MM+*u-FE@j{oAf^Obfic!t&w11_H`qum%3!k0`Qa zzBBRU4N;pAzX6co73mXQOd9ApjId>@GbzGf#Nj922{+nTf&6!V*;O*p6dOYl$a?0+ zwsD(y)f0@>YaOyh)v`e;*}K9Fd&HwiPa5@%|J>!=ookYf*H$QBT1q9nMW%p;!#>W= z27+4E@^%FiZsqmien zAKssmP4VSiM%?!Rddn&U?Jkb*w%bHd&K|}E5U$+0TbnEf%%vhX}!vU3x668Yn60}GVizuBA$Z2nLer^n)l%z}7sh<#j=n8Yj4`&evD4W$tD zT9!1>NY*IJ%0ziwq?ZcX#uhh@!-~O|BEsE+tn(&iC1M~)*M_JS6p$h7{~nt>l$LdZ zuBYOjL1?C}tc&Eze~KM$_udM{ZnAqoKgAi3O~D|m<*#iv>5 zQhXZ)#E`NI4!z`?3(#Nk}jIkyF@h<(5Dy( zo>5Q1+Q zFi*%%qUTn4dYxcO!iUlA5UPrQysw^@L1IaE<4R8?VzAgaRPH(=gmt%@w_V`2UEjdJ z-U%@d0l7_Qx{>$&C2@Yj_W(okv_I);yutrdQ#S5SQRIawqGVi**(wuPY@Se;FHZ@U z1JMe??-;5{e7>8Xnz#>pvD^Ol|pcB?z6>t1yceLD3P2;*(nIXYR5i~0N2GderU+<5a&#Cu(BqjW6j zwTcF=|I%IpV4K<}A5_2>OdP6mFip`DQfSx%Eg}P|^Q+A7?t_5;05IdpD+F?c0*wp$2f-F>MiSfy1dzn(x$zR%?01l|$HxjvQ9 z!F7u9RM)YJ-OmL%f?CW@uu#6aQ&A^loVJP^xr)S?A>|1u?HBtU3=NC5uSX>11)omi z2iwJAR6MI4ur^!E!Mr|D0IOYy3tDSx8#0$4Mlp!+B!8${sHoc~Ui5kJZUTkj+lHO3 zM-Ih54!h=Z6z&wRM}06e4gIfs2#E#V>llL=`(5zY5aHwt#m%q9?=(6pp1Pis9goX* zKb8}ZvPU0fHHFJDiEqIO1&}MO`(@QfV zKXqvcPoZXcXNiia@A)vC&ZG*ex!dBQ-JcC#pB=snJ>{1l%kEkkJgaVBR7P zn=&Z|o{)!8r(th}c(>JQNf+u*Wgxhj#V!0Cbfay%M1mB2XmZ}b=B&Z|89z_ez9ryT zT4LlN$@~jhZASFf*W7vVQCW+mjm3M@RkQUo8Gy8!M##JQlQl}m4eX1tMYsZl%pZqE zW2jj<5l*4LOx7^%WQX|UC_LNMhZ~9>lZy?%Z8~+I&(sND@aC?CN%+{Guz}wJNR;c) z6EQ~=PUIWxi(pnw(LplG(1y>&kqo4Zo(;G`(AVGEL*JnpAt?4Ubo z^Z$tQK->Kz|MAqnOX|~7WKr{!qTb`o$coZlS59c4IOb(ci+|&n!J+kAS!RmtXI4#a24nB~f;`gzc(ulv)IS;a|kc&wp zxx(@feY!vFb8g%JltTLl$tF@mpo10KtF{21+KTD$quM-E;fjyl{oo>jFu%GhuH=I} z)bmjr1_CD?Sc*_bv1JD5OtPz=Q`=R3BO_AdqPY0{(278oyC?nf%ms>h8H-zkqoK)X zt;~d$Z9dm*0(wY<2+U!IaK$P)%FXabX9o1mqTY)MkCi|fF> z?Xk{2$}<*TM%HyC3a=L=&WvL!@oy6jGm=xVrSY>f zTT|a4#d+1?60-41o9BupX4v$9Uk zR*0V_JI@gdh_!S2v!^*$_3NX1l^sf$Fn7X&xS!01>A(~L0}6kT%QRB?zhSSJ_GMRQ zUU@cS8U+D)AL(0s|B8#y*j>OBoVTt3Q zf;`RqwJLfUPLE$%ZgPjQxF6_l8?PzdD=fc4z8wGR1+VN61J3(!9w2E-f9DX`iXdRwZa$u;XL>=X4qOcY_N52m3CNi1(^>QyQ-cZj z?0rnBn`$u-I`g9;3?P*?3I;V``*4U4(W**U^}kb01$Rdhl*2WE6mE+ghS3ucmd&gp z+uaq#w*itDeFmbF@NvGT8p=GiV%a>REL|)ju?NTZjQ>|XoX*muQdn1ek>)!9LsjPT zl#fqMaxxX**n10JosKDG84oeRg390I*l0lYx**!0dtfSVR4i_l+{vFDN)Xc^5FZDh zXl7D}-jfY}NNHP8l&Z~2<1e_SpZR@e-}9zOG+-6hnQc_Qv?)!ouj#jiHD?N;6Xq~` zpm&BVB9tJyB)K@=0;u6M^gASz#KO-BO|+ozU8w6fj*arXC3OElA@TT7SU7Cs2;u1H zAw=%vcDOi>JCOE9yY*v%UG2YnB-Jode?}o(BH1zvYdM)m%AiTIAr)K%ZIPksXx}(XfPyt>%QWBpNv(!}DALc2zG1GPbL#BgIX)Z)4Lm-ZM;q7F>%_^Xftqd#|sJg4ud&QT&G*Ju){oXFKVQEbX#fM;=@ zn8fqf7Y~L*7WXIH;Qnu~*XkEO@_oh9z@U|#6iiGfWh&SRj_w5QYrU5KFl6y(z;&D@ z$kWcb#r#aJ=hX~JI`b`0j@X0$DQ{n(GG8~!7ud3hx?=N^PnZY3@dl`o7eLKH$jqc!bj-W#h})Z+k59`c z)K_Du&6*!?gYAb5X&MY-96?WxZfOhTLtNYor-KrdU4IN>A_I+bXXLK{C@+;2X}(2Qv|>0 z|GB+4MCzhn{yEg>44NX3INS|S!10~^>A@_%x1|E-6#P@qy3LR@Nwx7xmC9^90QE1E zC9zr=Q%n{)W+W~L0c1?aaxGh23!0<3v@_6B4 zMDC@$1++&5xucu1*(i9a&MSTAs?L^I zT>}DYHC>}8kOXDBB7&gYy6~v1{+z~VE2dA`~efLK3&n5EB+?qLloS)u(tZ}jdG6->vgH&~&)TswE2TZgBp^F2#DC)IJgGWXY*mc$x#PF z>BT+%5HgsK`r9CHS?*)f38()ddK%abkK}E3JC98FDqd;AgPZU^1==M$$%||{@avjU z3KWdL;B>)`da-NTT>_5$X7dDZjgrRywA4s}H4q`vR`*mPelYCC*YXy#9~$AWCkH+@ z0cCDmiw0GZ=X(g7!+`6(23mmuG2;cRWDOkc5v#%2Bu-|NPR|uy;Deni5tma2F9Aw} zVpDe518b7bldLs_zQn=$QG5X$K;7Zr++oas;X;)cMoq0i(|@dEeJk_7`<3i9GI(9p zcj(d;8nkzl^y=Tdh;^3*ePl+sD|XPlt@*S(vk{l_e}1V6&6eKE4bgUb;9BuIA<43V z=~M;Qufe}+o#wb$P=^mrTA>eDgCy7RGvo6a&?mfN+lj!}M-rQdmmPqt!z`8qVE0rj zAWw5b4)jak!n~7Me2NFN6e`1+isYf(s(PAY#B0X@h@bUiG&(igE9VL>kwvt+6!k7A zCh!rxE+;K^yjMcdr9G1->9x!iQQ9^lFgd6rBAk=!$p!!e0Fs@mCU-%6O@wjA--Xid z%8GQ~Iy=t)iM)c$Er{<$ovA#L_LgZZ(C^9>H2zwN4C|m6>L}3GL$57^^S4w`3kod! zNU#Cv?m(L$(AxgEJd?Y1mRRPdGJI11FmH@Wr61|`Eu+Hqyf2}_eZB4<1P1N3pxeWD z$6pDNXx%AXvwnfc6A^!v1rX#+9D1QP;NYMt)Xfd7v@Z?J9z0iKxhT&Rnh2P`4mgcM zZPEJ! znR|wCEGD4chvP4a;;rfZ?-jG-+w@c)s4#+YvwEK+iVE3&TGC8ON(F%%tuiGux?#xI zi|L3;hK*X_Hgd{`wqgnw0Q4u|5os9n{=6w_Y_HEwQFb>^c?Ge#P{E3wu3i=Tw{b5BP>|AG&q>?!|L#fBQSXcu27(z z4IbzHc8d%fi>@3pA0NTPyN@8}!visbsKS?OV4rBl8Os3I^~YG*Lc!d$pmlO0Y|~22 zXw>|=;YJy7R+s2NFQ2Vu%rn$-ktvqui&2;T?`$htDy`GYTeF(KUOJ5$k9>MWCSqwEZTlZ%x2g~F2eO}?&8s9278UEPDC;* z!NTH}i|XnCpmx}Q@lp`J9?eJ%T75aPLA?0|{f2bXn|a2HU>z^lPzzbgJ(@6R?R60B z!~iB<-?OyRrOMk8uk^}+!`QsmR0Q(@!>PQ}a{+KvW8Kq*LTK1F0M?ia_@oF3Cokqe zq%Jyiy8C`3jkmgg?p*6my|rMmk3#E2K~_O-EviV;d2`>@I3d)VRD+}^n5Lr|aZuyc zzCm6|MDJn-VJSd_tunn9^dOc5pXNV@Mi)~5XXuVh7&=uJfsWTr(L^bd8B)MW?o>k7 zZ6Cx!L%g^vxo-m!r4RwU6)KBLW$p+?CNc$VAXw46Avn-O{_hA}@c~5i42hzl_NZA^ z77de?ad8Y(o4GvrA-;}&tZ5XEn9B2ZVQLl-s(e@qnqZh<_NI2~62>c1PsOMA7M6zlUv?qn_FONxl+$ zhhjT4`7#@3MeNip4uh0g`l+&1k(TYXKysz$n^-5?vi!rj5vT{C0W z^yfN35m^gyZakr327CC1jgmm1AZEL?KMp$J9*jZzbX_Q+9--0mKCStR0O(a*|Eoz$ zTj$nV>R;13;UnrspClzr&pxmqi2k=NjFXVp{l>FM9Qq?5V^PcqC@1A;>$5%64>uKb z$lYkuGou0hoKu7u77Eg4cqPqWiSM)o#~gntEfsKh#V{l2oo&9}s-81Z`bp}$0*it) z_uYiIFvffQy+WQPPT-VA1H5o72`zw+z(S7AT^#|QfbRWfn_KA)+9J5D#jIwr0Jm;Nu~3!$4ZiGDb%<+^>W!1dxGK7eEU{1&atJB;9Y3VJ7+yoLRj z+d+m5K8DwybntgVCJYd8R@lrp?a9RY#4rt&DN;P081it8C&(A0yIw>~r>Rc%O&P-n z0-53hTAPzX0cc?7lBzf3#6> zh~$1tNMDDk7=LW1uHSc}A6sXJg(uVkZ?FxOX?T+<`!@y{*R$B6I0b7c>D>a~kfm=a zq-$W=c^0~Dl{930K|J_jv*Eyv*yfTWf@*=dysVV~2LH+9gz#C-AE8kwCiU4RHFf~jrD$W_#jaiEG`j+-$m&@-k z9)U2fi|31+3R)5^`w}NeGJV|y=;J4Ca}|F_ya8r;U9~;OoJvKRfCNUbZRj3L$zL(L zjJ+gPp^FoqC;``|o~RNg&6bkX*~e_{kd7;!sZO=cW#Wq*3AjG^T4I?zB*P>#m&T4g zT-4rwa+GPa%)Q3qZEw4o7hp$d##R^>H{~{(P?QeLx0)fql5dWkJMmJCkR=`kMGqAW zhUEhcykvq^tH^&c>|;%bsR1LHO{^?8JIG;!HyL20W6O0}zMyhg0npF$yu#dH~h97=V#(kcJhW2-~4%8I3Fc&su;#3L66G zy~&U6a0Wl=-+C~4vWjIisF=&R?Vp|c#9IE52^uREu57n$TF5v0|0{$i!QmU@G~)`| zxC>zM<;HE<^I5L{i$f_bD~pR@oc2tRUs%Ji6dgwqhxGs2t&CN^Int{%h<#Ea{Qj&_ zHs*y&!?0Td4=DYWDB!q>6Ej~du4CuXP2?bo0PJfaEQp5`oI6ldkWTXi#o(rc%pB#9 zZUoQngJ@!X&z^-5L1cq=nuE#~r~b}@i=f&Ir>880EDa}4=N{|eGOigjba+-|#OyWh z*HdkwE0B2AgVnZ~`}%u?z@QMsccXsy7(ts8FBtIDg}QFsX-Uv@*D_>?m#R-z5LV&< zxZC!bheP`p-?#??IVcTLSV=SX+xHFc!PFudU-rFnd*#3X&7xm8=XBg(F!uRYWUBOVH{J9gn$A;4gIm+u-SH3E?St=# z(m@Ix?AtqG*P(xnr01&S>~ZwgbGVQ`FS?U!D<6)Q{d%L=GO?ACh8^IMlrI4Dp^lq#diC^CIrcVL@LggM;68Y<>Gqu*^aRoP916m zyhk^Bk6XN=H*qYK`Gn>YK6?z8Ntxh7v#fs4E244K!}+uceluBcs(&t~4G3 z#7GK`DX2%?S?x|0NOdBikyh0OT2Dw5!wkVCwHBY{<;9%oYAj=@Dz}+95Mv%o`w%VU z^%95>({0w2WxPV6)%l;(SgyuA+S#VVa}wRY0xB3`^b~6Flvt8?>jS=s@#P?Xj7iPR zk-M$wm1%}B{1Mb>CfKo0t~z&j)o|*SFq*9pU=fH7ysk5=_$fT9DXzY=$N;DQf#f$k z-N{vdQ6aW7Is?Z#p(TfbUb%!iVH+xys2<)l%&cXo))m1sR_#kJxBkqTFm3-6hv=*A zlHK$2x!FYHiyuzdo%{hqg#1aHyz&s1c|LYy_8^qW!jS$JjbX~j8otSoTXNX&`R|ms z5=Q^D-+0BNZqVq|1QIa4EtKND3k6|gXS(WZSnqZX47==(rqs1MD<^-fGSnCy1++MC z3F_1uo+C_*#9OgEnyRzol>y31VfQGzBZ64C0u8V>kpq$y4_IVx7huSAYc*^McDjQh zMN6FF>y{ajFdd6B4ZWwtUM$EYp{}(eTZXp{XaMhzV;hdYeClHbeckJ9m5*QGB?`R+VGA|qZp=4Kr5>})~BMhG&?l63_S(Pub z@fi9^)xYmekxwRa$|3xn7-GengYjyo(bm8W3|xwX2_r6DcUYCCF;y&<_9nF3S?Q5A z#C2dMc-P}R98(c*g{$(Z`)r8!W~e)#)-(@VGXd8wreh|zO~x@__6PdH1bXX!#!e-u zkD)peHSNse>Uf}@PuPumwD~n;fs4vUpjCHXqf*OI`KKQ8y}nEvytowmaYT0hH`3y! z-4Gd3)FkuD_ezoPQ=`UnW8gEv_DWZc30ee60JBgDc}WPQSbr4Do%)a4*=_kmOv-Z7 zRVx`(=s|4c5T!O`aQC$UF7_P?>+O=;VY!AGPfQFy!H=8oUQO&NVu!xe`ql9K96K)5 zW(EV^hl8TVsF%xd!l103?YQxmt5OjQJ8jZJg`v`|u;F*8+q+NpIuDA#xoCKXzDFEN zW^XMBrtV@4wMH!-;bj)}|7P{7LxWhs~sp}4HdJy zsK^16O5!mH_&Fy}%KjjNg(X~H{#Xa>1iHMmIPY_|_!X~uM$`s$%Gg$_8^37V&XIPE zlL8>?{Xd7`&Jw7IQBxHMA zBgP>iPL8D5v<{Ie2XssB_vhp)`b!ok7r1--QaQQOWITxoQqYXNbb1O`@ZJ)u%%iZrGXS(L3fDiSBg)bZTA6{(VC?>@= z!5Jnj#Pm*ii}1KpZByU0yC@AN_7m_rt8NWFK?GOKLV#Z_^xTcDR=H#~~ zwFx$>F8Cm_e#u0O_Uxo{f6iWYsXuNRE&6_DaSr(w_8`j=v!w`E7-&+75`)u-=6&l_ zM&gaM7v6V}V>|u@rSGCkmgya?@*HV>+hD`S6w|TlBiL;$7mU0MRkSIX0p@fJH;F9f z6c1Q;B;Z4QZT>W{YL4t?>VMB`X(UVo!hAb| zdUV7S9b>ufwxM%T)Z+Gprpi#KA3c7^_QKH~jK|}*L&p9UM=Cq*g=ns? zu@{}7%dE;+bHDfvF6J9%ma6h@Ln{wc!}%Nd$lJfoO&4Wp)NE9!NRA!d^1{|Bo}42Q zIq-@w!o=*wnUpt^U6c)$ePHhqd0O~MRbedI_a)16@658ZGuM$pKn59{4+S^1;(C*7 z<^`XsKRuwK5z>N3o+>qtE4)jQZmvTc_#*7|>aE+i$Y^$24(a6HnV20Js|Pt7jDJXZWq#Ra=n``w0_N)r|nEnnvcJewDbsjRk_ z!x7@=x$jeMIA?>>*2kb8$Ns3Uc2-kBw#T?BGQAFxBMDNBdA3vH_+RbLMNcRpMPNzl!MkQLoe1OvTO^p~N z@FV0;>F6`a$c`PGTK>A0krI4R;AOSP`s_X(q^c4JX4PsuM65mRyBrXRn?inaoKkB~ zUH<(%$TgFBDimfTM(yyL()(xOh`Q6LrkeN1Sa4O*!kk@0=S;6-3FB(Vt#dQ$X_J&J zdm)I2AFVturvmt%y;BK}Mirv}Ge|@q?^e0JUyh=!l{ylG+~#+8OgKMs9EiY$!2Gp) zp0UKN%<9bBZrLZ>`e>|7RR_ouGIqhO*C-iOP&1Hj~F z?UVl@=LjyR!+gHW4O4@%SqHn{Kjy7U-UZE`kixBhWic6x#cvOSpEgQ^@yMZkH@?i1 zw3Ks>#_RU|hR#vTAi3iC-0s`AG-^rva9~>sB>wn*I0v_Zq(p%B!+}>M9n}l$JDq9_ z-u6{g!16v>d#ihYYFB;@^pF&+8BtLFI$5aU2WUhwNcq|e{r3rV41Ja@}GKL(sALGlkpCZuw@#C zV{d~0@wsb17fNw*twL8)eosdWGJ^qSfyQ(INkF#01y}##-FBuk_}sPH>SQ}T&bBu| zC?0qE0*!*HA*)(2x6#Yu)EAfnE-Ej6lU2i17J;+PkN3TcYfBC`{dZ2zTj!kN1B({g z4LXIL<$jk0>uDQVo3YCx^7%2Aj&)p6TrM>plhDS{feZjiK(@bBbljgCxEucxvo>?I za==0BD$YXqKe?zUE#O~1ToZZT56#uA%s39*EV7($n5~_~W|uVA=c{9Y++Zt0ME@VP zkX1s*p+<_BPp1IN>r(G>?UFTE`!1w0sutj)U<}Q0LEj6V|GCG%m?q3JIN39Cyc4g^ zFg(Q@<;&juFI6hQ1VaD4hXz(or-SPlbLEnWw#fdXp!>eisEHX-N*m`TnpCrmiL0M5HZo7P}+<>Lw zqio!*XqVCkY5kCbEBX!=R8G5)61zRe z=UQ%-D(=aeCp(eZ4d1yRPyXUVPb8bX%s?uB`=WYyT~QwUZy|5cks%=}RF|?oJR=Rw z@`Iq7`?*SMC8P?|W9@56^p)VB--4x5r#tzTp_og8Tg9T#a;TrdvqYM%8*xJjOlL^M zUn?U#qmv<`ZkG$#C#S$Iv=%iXrT~_~yhvoZ190u{F(LlPcHtghAo* ze}xKJ?OrT!EcgXdsmFJIXq7e=-qhUU#CMTd_W3q^wyT8ny5n1OA$Jj3gen~|E~T|O zv6{TEwJw6(-Z6F=g-4HgB?4M~Bhjo@&M_Yl*-5vGXtN5!s^+S@;G*Ptj8FxOzOQ^-s3J2BY@c}eU z;Z{JDWq9{lBcni==i}l$yjWoKsvwY622J}kWF>Upn63A+yosE9pk)o4$n5cb752qi zgSjl}Ws|doHSmNYrls2w^l{xhC8nMA4112x#YTcCXY9pIV3-+v4?DDE50`(BGtS z)o+GBExEM)fy8UA(0TbLQLVM+K7j}w_eJma^#Xnndy!3Bsg4pd38lkB;ksQ-?t$@K zM~vP3-U%U6xk9Xq-k%)TduHO-oCp^)uTc^P*Q2>-RGs7%Tmy2q=U$%#4HYpq?E$-f zFPA2I!4F`5zPWv1MfGR9vZF} z74Ddz8qjDwW~Wo$Kbz>X_rqJ2HBYH!@#$lg6(|SK+X|+z(TqRqU92opHjCQ2k+$o$ zAL?|-{KI79++;N#QW?#r)O_X?V7m7wZw`DleFYh`RzhHw~de6Sy2;mMi={9Dp1X;L4Odx74n!wwG$+b;lXBq1;f;vX$d|UZdRNwZ<$hUAa(eKLPSB9Xo z_|+S}e!xA_!oI1>6h!F4?x3C>Ayq|HfO8!PjF%z{>z5fiHCZ-Y!~_y5Yz6J-Q(chd5l%{lmLF zr2PQ|eU=bEutm|CB8hmRZS9zqR1geY*Y#5SX9W`fW`YYVZ$Q3o4tjTTbbBG;GZ&Kt z>UoQ(abF+AYWa4g99&!{kB}#bTYX|>m3_zT{Y9!eO0Pp3e5*+S1I!<4ots^O$>s$w zX3tfrF_;J)d%5U91eJeH`x#aofo%qc;v8^1P>we4o$msr@;!Snn7*OMS$>4wh>jf# z0WJr2GK-1VUzxDD&uDP@@zjR^B84q;bi_;x=2tt>9hrts-DVTstv<+XPkl@ra7bRM zq8Bjs*9|t*+wWxp7HVAs1G)oMgeO~)BDpZ?o7L|^T~*ds_iK)xowwB1J$leLH9i*8 zT73g$=KxL1$4@%y)X3)lQz5M;?U6%FwV#`#Ikd%H2Kj zY~=`K3|p5Cz>BHK8a!-Qff60B|6CMz*K#Dk{2w?0Cb-(aF-VzDDPD^mZ3s2dyW9`L zSn?TUJlh--nb8dIW8fE}#4q(8G230ooaOaZ-klo8tv=TfiGH?D1i!;qGPRc~e8q#Q zA%h0;mvQ?NU)BPH3ASREPgG&lehzUn)5=%r*JQNDxiN>cJtQ(=)nRIyHm`5z&fHth z(sVh9O7;rtxkNEt3z#L&Px0~7vCSBf^#b&`IL%#npjc+!R}2-z4MW$l6M2EX9OWkQ z4*t#6K{{1VtgTT<5tvyG-8qxph8)|_bPhuTc z7`=I8*EWN;I|S#wak2-nD^+TY9!-?&Y%<(wW878*b5dXXxxZw8x@FiSa)dD7m;Rxo zg-OV7a)%U5grS%>9>p|WNtMFLp>Mi>t40`9@(dR!g_}JrbM-tb?~No-QvXakP~4QC zu^7cz`Q5PLK3_uQrf)n6%ObPY*N%>OmUIqDblVM)Wu0&|Iinzt4MDc9?1(1-&J!$- z4%$f*)ZCsPGq=N4{+ZSIU-^hzJu8RC3WPK#E%vd&RT@4r_dp%|d|QEO*&&2-vgf*tER<<&XB!pl1kYktDUp4Q@F zAv9I&TjRq(tm}_huultY_(pXQNZ{wX{X{>qE=B(ONp?dWtwxjkin|rBYsPVM6=n~} z-y~D>h|C8!I&XPfmXO5K0wscljDl|@UJE_CndQI}*2$j|D{tfE)aO6k>PIxGZBMP|q`aqStG$qpgN9O+cb@ztNi=BV75) zgHR6Jx@Juj%4-vfvk#gqn1jPgh!n|`UB3jLXvB?6}L+f z{i@92(wh?xk`k`m4vo)zz-yI7fPQ0%0hqsawwF&UIm2BbA9$x)GKaExVcRVHGDez) zao&x=c%69TAt@E1)ioMT3uo$$9F)37od|M&#laBkmVTtT5LYxSsb7=L0W9IyP2H-YOdUBFupKWJ^3MqWT$491-nUC{{6Q(Wo>Ctd{)Yz)U z-VlqmUxco@pJbOIBsn!DS~7{T;zlVMc;Vg>R{emz5fhJY}$7V5OoD%I94 z?pqInzUR}t?f>Xorl0Y5ulz>9TPtI@#C68wudadKp5BtERN}Fi*)7n9b0X}M zB79+#NpnC(5bf#gd)zl+Oue;Vy~DcPg>52#sTP!i01#*U$ur70AG*fU$9*(ETqhoT4dU`U8J^P1#Ex(&G8soN?BX}X=#1D8WR;vlDV zfq;dfRY|MAP8PjqfbsDXUwQQA9*BT|?8a)`^0&>neXPMZF6JE?koBP^d3s;;t94hL zwEf)*Lv~66sHBB`!weQS#Y0^@VMEL5x8G1`E zJe@paBh?d=xSDK^$6`+*UI?p4##(6KnGJ%H7;c;I+cekyv4YybV{m?;ySesCRO~bT z?30Pq(X2ge`Pgm%T1~>;PTB+R`78tj`N@v0H_o(!-BUoeb^z=r_kJRMfT9B^Zk6|E z1G1RHr7lf$x=LFq*|;{LrJwZ58f1YqIw`LS0uvc|E|Oo&IbC{^w9WQfc9#g2*qi zBLJm(@!0EXWW(_$Pjgmsn$W>{OSd*W4(ah~*#2@?4Fd+Sr3L7V3E)>}s zTfq7NwekyY3+w5Gn?;TI8-Ozq?iO#&KZt=jmVt%b$`%bXLHdbxlQ?o|tO zb)nUCC<#Y=n?JWoL7kBv9CaUdv>j1nF%;2RnDu=2zTeV>v-hFqi|tvZTxiy`#-VQ% z@*M4mRLwh@(7jtC8lVs>tkfK^8WW?7)z2h8v}kF9@}ZhN&6e#7ezGWB_Uh<`B`H>Q zd3!+^-9MeW2TEMxP6V>jg}eKPj0J@BefWE(bLWBX;a54XQi2xJbFLF7!v@w0Y7I7@ zH2g<46Xh7zjHOxbX_Oaovm%eCDIx=6*mf~^5zY`0RIJJrjJMwM6(3((8@(_5{GBN* zcD|X3hsN0#nWAPkx4EpsZ8hl4@BkhsuI^d5r#4sxU;QD6{t^#!0fpfkRpaYXMf*!H zV2-dtUmb4hv7L6<6b;J6%F+le@uyh+HaYSp;hv`CPF{Cae%vUXo!d(Mp8134sO&GM z!AuIZc6o@6b9qS}<%Hil66HDhdNSP@77pziFQOLT_Ii(V(6-W^^KzTH7md$daNf&X z14zu`#pUw}G?TOJ|v3HJVVnY8Pcyu3_E?kRgScgikq(qC) z5Sp&j2~^npT@{nwiHS0o7kz8BNZFvC0FlBqgBUH%sCI31Pd6#fqt4lZSRJnI-T!iH z#uFjQo-V=pbm*Kz%=BZ$=57M4V8A`lXGV<9?NZD4PL42XEr1wkYMMbIRKe<$9K8i? zO?ufTK%6}TQ(uXa1Tl3GfFD>MX-vJ7I0E~E8^y+?EnbY^0>h>;V(C8CCGvTl>D;LP zQMFPU0K_@c)cz7OeuD!*ksSujh|NCHqcEodyF_4=3i7>?^+}A4(`^iFhX9lBEaDYV zuh$H6B`O;t2-e~+hj!q``fSh$ljpZf=(JOLs&_?QbLWThaYlG?OH_yDju>lUT|(k} z7s(=KbGXDS6TU8Vu%(P8bgAGeBDpQlYefboS%F=$^^xbIR1w@nQ&3=EbwDutcBn@# z1|2Y0Iua&OP1Rs$?zVKWCK27@VVOuf(<;vS1J&p-b^jW)BM?OePzvZ#Zq|J6^s+6f z4h3p_v~z%hJP*KsrL#d1=y+6;A*b)84bj)jeDw0g#H_|9yuat8Y`A3L*@49-{DAA6 zeu*}O9+C+SH^qt`w>t;{XY}Hgspv=#9bx*e=7R)>DOMbXUc+fmKDMvLFXU2I!#ilL z*|ur0VO%L2u0Z@WO+#{N=bs}^BcSpxPW60wZk_UD3)pD{`6oE_T0#A85Q^(CwHyPw z0HT{$w{Hh<)yxSS<16z-#~)$z+IoX8_cwchzU_SpLb6D9f=#7iB&zS^2(`aF`n-!O zHj$*J=o;kUb`kDj6e9BUOy`MBCu}tpnmWJHVa1MeYv2DKN`uHDC$~sQFtO2h0w7;h z#z}tBrtSx?d)feqs`~)qA}AdqP&Ci|bo(OfXl6{?_IxL3NmMLF5A&2C*1d((!=7 z>pK&d(&@2y)nS^5y4vWzPWIQH?zTH(IgPcqs>0g$?X(1%t!Z6{lPvZbA$h&zkE*FD zK;bJSvH^lX)a5z|505S@;3xk&xu*Idqw47B2@qi2B%fyY3-ODksQXCU3)(M?g}s>=GMh-KYp;k9K2vz4kU}37`5S_i^vi`LUcSo_^{1d9?G9T!!3O$ z1VarDAx|bnLLq$Rw8S}~FfW3wSYZgqy8WG5>gw^NQ1k7DX?`lulgg5`A&tx;%GK^o zjzOqq-MjG-@q(%Pdnh)5Sb~^b_Y(HtB!JG`_-M})j}Y>nPOflh8G9`i+;UD)sXzs6 znS=X2_Aq3Q#a=+J{Uqk_G3x{eb{wWHG+=p5LrcfGA5V<3${Z)$+1Gv3PoDk-jP)A4 zVzwtRM5M>67wb2u+SGLmTot54BjuT{$sPBDj$N7*(LSiD6|#ny8D`so;mt8h{pmO+ z?W`%r4rB`$a0y$}-PNIUxX5pcQ!ZqIDd53zmNV&uL0(QFVBbrdcnA{$!Bb^9PI0`S z{H;~ZOB}3Oj!CDNEAJmpLHn{WHb|F!XXocvZN>YBdLXrG^#`3w;B+r^Dtk`20iKmu zO?~&YA+!WFKCF4tO*f!?jYwpS7+E8a3D-vH$%la#I6C>Ik}j$9UnS8ioMyEM+ZJ3z zI^*$+$v-9}qw@?!JSOz_x%ZA1tZo1n!LBRKbodgoCMz}Agg!q=;AiHei-CzQ;xuSI zh_6S#-a;+evmbM5i$uTe)1*KL7_O>8Fl~Z$50AW_IRAG<$YAoGLM#sz7yJ7u<#7^- z)^^tsbYS#ozT7wJQ=D(~6hooo5X8zaL|s(cJJuHkEql|+4Q};w{t2hwhgDvq^*Nde z2>pq@6AWG^Zirrztyl2VAgJ!MYo;61LU=9(Z!{&(oLkNrD|XBM>WI6hki%Eh_)YU0 z3^Ll3lvR-l`dD_-?>;3sq1L>qF$PGnI6=fwr?etC>?Kuxa?hqoSdWqT;l3j<`&%A_ zqs0dh)1Miw@)!*ZVuteUHmK7;_iW7eNcLxG=KN7xy+3Mbc%Vk4q z0rl3Csikvwu$I;{JU`tVD^6%Xe2rN#k5o(pjLjB zNeMpZ&MwFaj>PIUw7~RAS`45j@&D%fVJ%6xTc=#via;lihB94h;qMx?2cv!Li&*Jb z0S;U^mSon&7ioYl6iH>-+CH#smIR0$j+_F~!-oF1ae1}$cS^%iM7Z3eyE*lLLdSOt zt{0@Q(80|IJkALrSga1BLqFgL&VtQZo-tZ8G{%nLF|O^?83YAJ%G>U@w!r&pUY#iL z#oH+cX5i$5$C&>`lm6E4RnGt_bpnV;Cp2LES(>uCg#*jr=Xim7))s`1^uLI86{9J? zuWuXnxf^SXzE|Ld4M=$PKNXTlvU(qHG8e>Ho5A!SPccO+Zj-4s+qI;^{I9|qQwo3I z>RSG)cyE`5g8JtEufyuc*DFD_Q*}6!Vkj)c*v#p_YH@;LS))nL_YyPPn%cX@bBM2{ z#f1@8QT$j3CRz{bkv1%|T&=4-iZh2Qj4H_uyXgCEu4l9!$Fe^^q%{s7eaEjp6ES}pXjSZLITWUNL$Y1>UVlc_*NJ1 z?jeiw-WGIO^zp~p;h8#V*~rAvB>>bMI&&$GOP7h{y9!RL>h7pgfK(54fRN{LLB(_P z2U_tGqbQ}_L!YUf=QdqJh43kA_6qQ}_Qq#sz+Cete)ZTy*ekhv&aFoExo8u|E040G z7N~!(3oHG~q>IV0mk>C%xln2b+3j@cJ<6SdCG*$Po8)qD zLH?yKxZ5*4kGXI9)@pby!Szh4a)fgW`tO{ssD&a&G!%oM)z1;Y8eztRz0AoB`=`TT z$I5z@RmdZ4!HAfOI#U9WZ!O@<&R?K44T%CaBVVXX8O(ujasfNgPORqRC6XO=07T-} z*U3Oaz_HXF^jp^ibYWGC2}hc@xxbon*HU~Pgu8U=t~*HMs=%B;?)>ng&MC)!xbw%T zfM$f205=D%Lg(vDM6Eb+ezyu?HNl0)-r62bl=D)L1exY%>W)aIzz*hk2}?Ylt87cf zeV;#e-Yl}Marle3h~7hxT0t~(#PV*SG*m_r+kR<@Z-cKkl%%ZAy3z@dW{ZUxou0cW z0x^YLl-WMu9cuGTB5@Gw6)H~MZw%%ID(hbd#vZT3EYN9-(uf(SoU0lqhrXM-n+y54$hcl(tJ_t&Bh;1~XW)ic2PP zGx}}3*CyDfo*KF>q*gDv=BDzS843=0dMi-MAW;u0?+w;=7UeG_m|kdp*>mwo9=-w< zjn_DfC@131w%pzQ^7Yvk1M=h<%R6`aD*bw-ggH641cLFFz_ET5MP06p4s{fTl}c7tDg*L+#0WmC-B4E11AU2N9d2pk;m252^Y~q3_ z@*uU|*+-?sqrnm#ZnI9nuE^eCRTr8LK1|^z@*SC{zRGePYedo>i=Ke7rwsQ7hI|+p zuAM}e`6FkS2_cX%x$ollyR41ta9xEv=)eJK&it8EXEF}pilZ|9ptJS`oVppmOl2fX z6_J>qV;Iu&E0^)^lpXQJVp3WJMv^+RNbB4G-1-+G#sp&57+)4HOp&(w!DcI!0i+}B z$J4r{vI3zA{|2~hE$<94gX6?hR1xm|Ci{15O_!*@#BU$ZzulXyLd%zGCFQ7!sKsny z>x4Kz-f4%jevBtIjo4RKP=F3+9&tcy{#0fUkr;Th8bQ4Fkb_b!GT*%E!-YKf3oxWZ zK!KxkX2O*Jb^deZcz#V7xTTnN$tDyqPepyx>t_G)6$?#e<1&O|t#Al{9~V4SLGUT+ za47+WsGa)sEHVWsc$2j`w(2uwv%cx9j_H%0J3`C^w%jk$EZ60Zf|@AnSn$tR78j)H zNXu^}7O2tA0N%#IX{PMEI>$KUqQa>vBXuaz^r1PS{4?V+iUZ!M3I6pX7wZ?VE1^Z{ zG~To_57B6+x>vp+?im4jnP**w&+(~TL8ty5J45JJy&$oKQc>*N@;#&oAvAC*Z(e9|2?oi>ZF+XMPykI$TeO#@x@@{6c z#Htk=%C?f~Io(^@6!Pz9;p?usHfut`*XgC9mRO#apOY6y(O>Jmah1PXIfD6**B$g< z>I6i2W`)5^Z-}ZAE;D|ZMnQI^p?H3IH8^bJ?gZ#{0eZS=R?FfO;Twn;DzIna<5#PL zgeY|bjkUoqJsGuJ?zknom{Xbhq=TlyZ(gnxj(w$Etm5*5WUa)3e(7GHVOo)pvv}WB z7_M@HO6J?Z+OQXG?*5vPUnU%rb&V!EfvD-~N z5x?}%pUi3qFHVNeSEj7r^j7{Nz!+u0zv&0cYXH-4~xWXY)<8jdd zdqXC0xg*Y_w0Km=o~|0>`g$ynP{-d2Eo1*=ZUQ8br0L>Vp}}8VgoET6EkF<7uC2l^ zOhNz0=-XvK7Kl*x|DK%c1>G>L8E<5T8RD41Yh&Qj;3>mWXF&j$ zF`u}Um4|%c?mzsv_AQnc&_PG!&cK5*CkV&FHi^m66+?O}co}AIm}6J5J9c|(9ZDf? z+*k|_`91(V!5V0J7VGA0jsdC0;9kFtL8Wj+8p~ydxa~sg=1eSrXcxjS?v`nwdg$7d8kW0aL<7NRfECV8Kb; zB$8(@&OB$iBx@g7=4C?w?)Vj`Bz$9_;{v!rO+X?AydxRbxc^CTig*TM;L|bXDT$Sq z^aFFm_Dr=8+H`;&Xcj%-^UkB}6hP|HQ-QYsG*K?p)6Hk1PONMH3`xCFKD_v&#Y;)H zfr3L=VebAao+3()n7rNnJ?nVQGarb51f6P0tVf@aPhi*p#;87do6kff#9|`T(C1iM zt!}yD)tW$Z8dQ_iKkKMGi5LHAKCb-K*&!(2Q-#!dy$D3b+4x6{<^8rKM%gd*&OI%! zyCG1=@zX(`fB+v$XVGBUZ%J=AawbKME%_Pp<^iD2siu4Q)`t=WYLvW%A((M**--1O zDB$A<0CEQ3rnNuumWcaZP-pLW;^wvy`*!;43dA@Dem~n8PHu zLTu7mkp|1ow{$Uxc)~x-*+Zt}btC|86WZj;A*hXr{=IZS!%T}!K}$H9Tw%ck;iWE+ zcPXfAs-;*xDr1%?BGIfgOK@pMgX~I`BnwIU;49rWjaH*=#g~}aaAfA{=K5cbmM`h; z0W>3Gkp}OoOXJI*=iB0ub;CbGTJb39uSc^_;m2Jl(Ehp0I{yW z5!#w_I~VfvD)v5B2!=fY7}5xg%Yg~mkS>G|wm#JnTbGWxsi4^n(?2MGVT~LXyPTg+ z?}=+paDVT3D6F(K_Oweb&Fi*+@awJ<%jQZ;Tr{2s_r3dK#m;(*r%dHPtqn35pmLqw z@Ve=-ZxRd{bXQcJ4mi5odw%GX%H9@{mgkiLRRW*I2mINzO8tUUB9G`>s*Yb6re5A~Gh8+(90POrI1{)B*^g zq0-RBK+GAIN?n@+9*Bm}wgoa+rpGIqUEFalx-tYm%Al@c^CD&5n2(mESSbQqRlKzH zH&cs-OHCNTv{^X5HBw3uApilMn|fFT=4A&{D(wFG?zE+^ToWs@jaEXW#jU02%k@h= zP$)pUnj6kWNCW0>Gmx<;$Lha>W zZAT(un|R}1Pr9*_li*o_aei&!uOZYnQgyCO9&6QCu!KfrdDf`3>b8^$hhWU{9ywb^ zn$kg&Tz}Jc2pW{RXTN67scJdUml(;nin{i&AgN^qmChcuVaOwy|CZZVJK7hDyj;c?z`B|}Gza{I*Ax8r*CB*& zu&yvpVNwAU6>w9D@u+&J@`EC>W3bX9$=xY-u@sB}kF=*vy4@TIfx-S*wf!GqqEh({ zO?RU#Uls8*xUje(mfni8k&_UNam(@G3;Nj3$k@Dx$nKc}ntP{gc5JF2G`ujWxD}jC zWlxJSzi#GOPgsuY>Zr}mhd;vv(8L+mr`}_59s1Higb6{mhW(rOBc`M=0J6a~8>|X+ zNZKxN&x=g)zr@5XR(rB;e=>1S5Xy_a1BevOI9Lxy?2X*fcV5V|U92mF9Aps!x!gIf zHAF%7vblGLh7ixfkPen>{8IT0BA(_Zs#%1_IS@L+VbcPa{D1{TofZ-R;Z{=$qqSvf zwKbHjiH6||#X>o{_yX6xM=)`jFH_X2x-vE)eVQ{g0tCLI2Vq8R4Q&FoQ~rh4Y6q*0 zqqW7;?7(05(t0Zw;EEpNVK336q|OcO8l&9z=E`Ku{sJO0x_6|$&VQm8!P;NZ(gA}n z6)QE+ZKYnD3*g1f5IYvau}Vcq#CgzM{>{Y0;v9#mt45L}KfSsUhhylbsQ zpgy`JJTZ^Abg(sv?Iw?c;xx^;(II4z6HHdZiUmk$RifRa6RhX}6}F<~&C10fpD=D) z6)9xs`8;g!2Yk zTb5H@zt7R_NOm$e#&0Jd>d*eSzYL^u9#%BVo%tQ|3>2(w)wR#65Ot<6#r)TC_(zcQ zBq@KHA_7EN5Xo8N0sWah{fkV?YNMXt@&O{;zbx^@*=&Xq_h?+xF3R*Jugr+D+w$<% zn(;Fv2jPO)1GqS%HU&OT&~vMSK6q4idV@XXqAGYe3k1#Xfoxqq4EnzmUf%fKz&pF| zw8)7O}fu_3Te1~Qcl5FZU=GBFylrV#;0cqWNvbZ9{&hnXNb%Yjcro@UX(497kj8v>R@%wa+8?}*ExF@CBv%T-t z#~%d<1zYaPylm?qqBt$l@jh`w4U*{e&sT}gXNMk!5$mHMZ)L*sWANsQc61y9=7dMM zZ4Z-b@W|gf29N^rM5l$XZGmK=i^}xFEi7}9m}>gQzEm$*djO{eYFjxH1}0<|*|2yF zm~5W~oZb z+HzX;c_Z1W_8>W&^5{^bV5e94=$uHjPI*xX8j}|ht0t~No|~1m5~rfx#+VV*LfI); z+ZdZ-0qOu=yFAs1dzuevwXFYD>)?*?GgP15jY0Xpm)jf&K@2>((Cb;V?nLMTWk%An z3dfg#Sswt;blzYF4u_Y!p2Mh*ML^{H&;B!Lmahi88!rEScx({g^Mnzu=9S89A>LDIdj$;OX_h8TC*G1Xi&ByAVwrliJ! zgge6SjG8*+_y6PD+cy@OYphXxT_e*gPT&bx!@}dORS)O_m!*4)#-x~`7@>=|Isde4 zGP>n)%o&XPA53GUET65hxkv6??0y7R7^Uw1pZGu#4?>NIys7l4K!Og+=^hq20qHM~ z!5;%Frl#w3s;guw8sG{LZsq6xWIC}qalw<8L zuL-JIR`g;SzAy0@F051^Chg?u>ETJHwKX)kg>uB@MINI)Qbv%bBZsM3z6qCWuh`0w zd750aOv6Y@g~;w_wq76}T(sPnv)DxW-K7_AufXsy#-U{Deo?+T6>G=lWm#^|Qoj4t z-yd##6!{y~mGgX0DkNGqg(P_BS>W*28?ZTLV~3}o!QBy+^T%x$^5xAHYcK{tg37nD zNP!hSKpqS6;TgCjz6!Fw>vjci{P4@??V7JymU|+{OpouMY9u|1C@@vkpf^y=9{GjT+1M@6oMy%MdjNr z13s#;>9U18*6W&sls=F6IGXMO8km9zW7w(%a0(NX>Hhl^<5yVT4pHB+$ zT13DcmW%Rjrg;Ug@FFQ<*_+WXw+&$zq zzw4a6AIGhg_m#*!jj1PRK=H5DbSWYTsaf6N+Lc{;9xpAEcT+D)KmOuNxpKa|rb#lo zQDjnZ63>XJ(?Hk0g}R%GFTg;w`!bcqmtM`<6VrLA&f|ERng4EE!@x=+Kc5#U7E2fs z5?{9@$C#)Mv|6bW3|{T^?vjC&J9QG}C(XtRt$kE*AnvMmF7_hjG3^GUmn%s%C7TZ` z(Nj!GSFV20tA03(5vvyV|6%Co>i&I0$33IvyYw^8(#tjhid2|a${Q|ymL`n%* z$af%XZ?@mncwcjQ`Z1%ZwQ*E?etmv150{I#%CI}^10TX4Ia^5ZNWRFY1ZY_g{a*kYZj7S086bNJ zK(YJc%o>(#kaS0G;gi|4ZB&{E-iXYj!vTIvRTsAgT+hA^?hAG7+iN`o5al>}V&lh( z5|nkEQ2t4m0os00+{O=Npt@tYq@csp%gTzzyRpvg1$pVqF5nU!N&Nz{3Ci{LqLT!s z!1Yye>gt$$*B{Uu<3qHStXi{{xx<|bStgqVcJtgKDLo|Nika825wTxFNKQ)(1M?q; z2V(nhb!6oPoeL0uHndAAr*5H&j3F(YE8qrB6Kv27BbTD*+!Ro-&o%Ew zKW90$vykgq5_M1(PH9!cJbh4RpsSD4PC*BTWwYF5UY!{NjUS?5a~8R+=wKr@OIZzU zrsgXT5s@$sI8?2ex2JB8n;b>oVFzuc&Wi6EhZ!_c^@Fzb$aE!CO!^`zH#PVVc1*fz z$<(+}$f&d2oDb$3Q1XWISt1%(HqnK@;aeiRxsoB{`rPOZ#SwFV+<>heNz6b!h5=F+ zs3_gq8jo=dtJ^#rP6)j{thZ)AfGOxaB(~V24-KG*qoIemv4o6dm&aYT0xKJ7iM;*# z*o(NM#u}fhq;E9~Mb40-lUp}_qafcCY%KBxom#JrDjLBaZ4sw>xv@_p#AcFd%NHdX z3H=)O@PSv9Xk9_^@0l722-!~vyi4%QFur*WY#AHoD*x6TBmx3%F%uFZ6h@!qgSlA|InGM#&&DGfQ^Urlryw%UkLT*9w`=KD@*M6DT^&5hn5f6~wdN^7 z2Og2mQyc?quhEAhTFWwTy}!JxZg zjct)1)kxW%B*HFZa&y=+xpr|E#oJc6B$E&EZ#^bpPh7+Um*$afBR)=_i@+f; z^1?+UufVy$XJv7y2YrKbPD8hp8vFMBIafB+I(Q%WGQB2Z(AO0u*5LO^mwoAq4sid3 zJWPJ4*a0xLd!1Isb9+ftAzgF3Wul&f_2W(eVBz+Ly-8bAHgsBGNbsFq$zSPVO=UE; zRUyV+v!AWzu|bj*&P6vazcRWlZqry~G z9rK7F0F|#l;1-$?0e=5**hn0D##38OdFH37y&-AS&0cbR4lAWxWv2!uA4Ajcwo$^+ z9tmJkpki#g4lT!6)}7pDWsMA63{HIn5VtzVn_&^WXOf{PITi86zy^87&!loBbDb5p zt`_a|+=JSgaW{1)Kd-RA6OowFJiB*A3>{K@1RU|ex@WX$vAlP&&)Yl}?gMqY{Je&K zlu6-*V3zzpN7FAhBC5{=a=y@*wqrBBk$jlNkG8Ve%{lqVa;tHn0YcdLR?1Xp(U?^t zX|($BIIRc?*~^_V0+=3~=bB1!GZ!co4K({(yzJ9_2a@W1Yakol7sEkULL-PDj!R|o zhSYoaz`Qn*#nJxAn)LkVEfNg5Q+nS_R`7rt>>wSIN<48^)eHJT1LZ!%w9JYKI?EuS z1N!9%-<92MtyxGTJxlI|dUba(pU=W-YW^?I4$4X(9K*PYuju5Dapp9;6Y%wg<~^9a z=QE6*wP;9&TzUuKfmgkY$q;1$8LaX7&lxTWQ~+oJ@VWtp6^U%2$5K*Ciu9Lqct{)fzAnIg-gJ9P-iQiVy0+Bf}4Tsfr ztkkr3r-EZtVzufnqc0TX%9~hB+rxpf%s(^*E`^v!sY5j%4k{GI;`C$_3ll#4#{K&) zy`fiL)UUga(`sp+u=vdPaE9URuie%aqpgn3VyX=sYU(YW*zVoO$=Q#yCc#%|^LZY} z&NoN~*C0imFMO$5W6GBm>U5LzW+Uef1V9VH*1}J?FSah@(Z~-mqvnwh)6tkqLm+cL z>t$3Q4e~X?#aqVX9%=!92IQzj37uhp&v$N?xrZqF*JK6S!N+h&2p*RLNhSsXCWmQwfL7C%94@Qi|I-5KGK}tzAO?d&V=< zKs|YJOoKw&&AomqXi(|zd2f#FOxe*ZhoZT1>`q2s7)7Dsn*%tHr;0fWP|;qYF#gb- z7%3!SZMxi%9qEsb_Vz5A{&bdx+A{Wt3imd`Y+GLWcRn5X87kF}9^6h9v>sNoqdOn{Ye6r3m?2vESVNmSNUT#wOJN2N^8|*6D0Jo{7s8HmP#V{mi2;8=-KH*XhWsw%f4art=j@dv)x{-tM<w*iI0fj z#(56EF{#J&5CqHig%i=YIODTwYqcExMxCdE9kki{)0SarVi+pH586}R`YMK?002zh z_;yV}9-;+8>bFf(k?YGhw(8V+(vtET#?$_$M(9mpQ3Mj;NkM&^W>cXC1#tzq3VLbf zu*w0j!y!w9ttfD0YL)Hr@wZBb@3OJ+SW%wveW(OX(h1pgoV88Y5(#P8%O9^&Fpdj8 zbU5x*tCl*2VY}|?y|bXY^k->k-Owyq#%0WbkSE6T1+3NEV5JvhQK$o2NU%jhd!RY8 z`kS|lNAi`DKJp-D5+1od!~meaSt6f|Y`CMa!9n+bVEIj^qGvu@K$xwQp0K??!*xxx zoYMFo8ppCT$;|e@e4$cH{qMnUvRm^7GD!ZsF25aukH?f=5OcEVsmkdb*zGOHdf@%Pv~h9d zPt-T#*pSf9>}e4o=gz)omYRK^It&d?2E$8U9?@iLyZXZ2-AqVRNO$hp^j-UT`*nhg z)OlMg%)@GoCFi%q{)bu&mQkH(5pFGIzq=f=&~-2H9MS+!2c=;B6iGhR@`J8YLd=x} zpfHm-!WkX#`w=uc!Kd-id=sPFXr5qu{#EO+rTe#zd|MQvS41Jjc0lzUN$ zQ?cEgWJjHjY>h=~g=Yi+(e5)OKMaXc_)Qa!x6>EhzbIhJ(2zDXBb5WphLIfSgOB7P zy8svD6M3yiEzg`hN7f0rPKE_Pv{JCMQXiv+Jy0ERk|j|#88PVNx8Ca={L(zwe5J1t z%^geCiAzf9ZrG+alpcrD_fgEcRz&CA9*b4LP^jtO#X-00lPoK$$iB)q<#ff=Vvi94 zkd4e?3#mb>B#Nb-ZvpKuG9&&6H~eZ&*0Eaza~IFbY2_wFi5PzlO;? zPa(qh2g^2WDSkP5Ns|UO}B*ByG#LdZHy2tC?Lcc<;;Zb3ku9 z^U`Ola-zX4c9l4B5E1jkqJAZ`+0l72)n}Nxb3A}I!R;UmOWB)=9Vw5+;aMVv{Cuk} zPot)yK9j3WP$!U#^^eYwqglr z8r_P&AjyiyesmBO3=ApNfvCN!4M&NJEA;i~8R}|ZPGzQlJ|G-HND)kMiAF>->f*M* zmEs`DBmhf5w7*9W+i3*sER~XzuC<&g&mHlq3Gf3qCSqYje}ZA;ZLQdMg~3%C*f881 zy~I#vX^rVUq{ql|E(BlkIcX_MB5lTB6&USi)DfosMsYUa0*1TJ7)23<$}+CgbH0%s zCHW6fF0Gv+%SnvBJ-|iPD*#JCw7==A2$GtruJd@aS?Eb-@GdjXfRrt-pM72`WPd_4YC9aZ!r-@dN zjg<7o2@;Izs_oY;*@Fiej$Y?hD`hNYBes-QrT4B<+rr~={o!UC1;c|ictzhCz0&B`i@dr6J7@ zDC);*c*j=FTu?SJ1DB4j8*tVLlcpWGPLY}uLy4ijknw_UcRISyEfdi>k=2fsa zd!jD~^DQgzWp4^$afZuvS~ScBurs0_{BJ=vP%cg$0g((Fy`6u6v_98EWlGf|jnZ@%^N_=|weavazq z8Sg*r+f|}F%&XFaYqtJ^J3FB*bRTrO0r!S+_PJmc-b@#!y zUyByAP=GD1vZdJY&la&&V<+DH+W^ag7iY!oImHTAmaY(ff)wdF^|^SGaaP{owd#@P z*^HCVnn%^i5!9hna&7%YChK%~@DvcVQ{{HX7YsQO_OF~$(ua!tJd6Wf{1>bC!2)!^ zor^HPoSd`fXL_+is51-rA865BFqj#UgYp<@04ev}wjKfzdD|PxBA@1A2B)}P0$a}* zn1kBn!8@GeDs61=Th^a1vI>ujC|$`TPY)cg^&t&m@Qr(u3^vW zC4Gc9V6{4Sr~+iZLpuQ)fahIe7N$?!K=6Am3|TdJ=+xLxJ{;svfi!_lnfLJ@e1KO3 zo%gAW#CqO3gagh2i$GKouBV$U>9`9Dbo!xC1NYc1S{iz&`k}o{a#oqI1QWr3n0-{e zns{j5ONYUnas`_3A|KSB58N{V|k)#^PRkuCvslc=xIfiaOP8I)5 zD`wD249g;%1_>q^W3l~!Y8g6QbxOFzO{_QdkuzM~ChCp4i#3oN=t3BuFfI|0-;E-g z@{BNYB36895^5-kO}4slnB$Q9$LaV-ERaV6|JJstxbzooC_$v=GNe}q(aOozKb0@e zmDQy_YAY$KULm&iXMHq$(~|3+hIBh#GI};Jv6m-A^gL&DJ8VQ=bFf9ZnHgT=#V!RAzRB!@PK6;Fj6q%;u%&<d|n)lG47T-U#_n`m6((s8&~}l3-R3nRVePwGM>tCDvcVRXDr>B+xHVD^*n)W~do6T_ zd^A4KiTkkU@6J_Ay(W1kP}jFR6v7g!$5p_-0@j{~%@yhb7gcNXEAQv(IlM_( zB;r}+Gw?lCi!xF=RP-V@s5QV9K-D`6uhM}ryBW#%mpSbDqf`)HRnJvW`2~WnU5(}? zfqn^*s67j;XE9nIxfOtNL3$8ZDLcAaozGo3oo_$3waveGDo5LM;9?I;Lb6@3^c@BB zOV<|7&;f+ac@9p)+I0q-$t35D_AO-0cn8It}`f0R_ln%R}89#w5pj>aF`1?gKz zqvrqL{nVHH&UeutHzy+%59ZE<#R$r@4s9f;ofMEry^CqB6zZ<9q(E?k;B{}cn@4Va zNO$Ce4G#>}xi3X6P`zWBN_X?r#YUmocC}=Xk5BiMAQ%;R#g2H(yOowiUxqR25^eVht$4Z8$|FP{vm6XT z3~YA~f+157f(T_JT|iR(v{c$lgY?SO`n=PDMX80HS%aZN^Vnm?2n#N$ z&{kL*nUt?79mJNx{1jL(TdL`e^Cm_e;9sx=)8C%Dwl(#3cV`TR=6sXEib6FdWJ~|J z+A~{-<6iq#08OJak(6~_v;A@j;<-XQ2kTcSH?B6=kNBFh*$*k|oU0p?jcJ<^p7HGl z)y!Nxtt2PX1o~{$7WDkjE%k6@5?vr9+5OF13tMOhdM1K zaRCl4hLXEh33XYjtm2lwn{#B&D#VoUVK~J8kr<}|kK3SpBZ9z?oNJ}n=#2C|3C2VE zdYt3pP6n?uKCA3}y#fgkFcmA1LQ;9Jb1uaLh$8p*$arUDwK=$9Gp1!rjs5Y6{Eo$X z2h5_08My?!-bFjZ!}!Ahbjfo(S$+n<2Z!<>Nzj33ybuL^co~q|vKxM>+wG@y6Dq`` z$erojljDwJP~ay47l6|#hNREWVh2#bpxXI3EG5epf)ye(X`WK7BmAiS6N_+=KbCSj9t?^7;HL#g9h*su7 zvvbgy0)w&I`>wYji|>(m<9-$!|H|vxWl?{CKMJ`!YKMiQ7j&*#yZ3mF26gAv1qIu8 z@0ER*?A?$_Bgyl|4p>M57oe0oOiszaL!&JxCh@;)SXXhX|MX<_JNy^Cwatg2&%5rs zI0zuIR~+uTm;dFC=Fp-()M}^9yKy8H&l`CYF`|Io!-G|-g46l#Q?e=@7qvXy5V1s| zm=v~HF50^O3DN>pt#eLtPUd{37jgg3+aOH#G@w7wPSTsG14%x;CIzC>e zzfyrFV2&R~Z%g8QL7?|$5bXYRykcvvKV)b2i-gHG#8HA(@Ysy;LHlL?0uwDkmi0hB zp!Nx|;aM1&?Wc#?*lh!|1B@|^5?{on`3nTr5?rk&whDxO(OW_)?0mfO4YP5CBiQ3I z$Je1y=J#v3@MymWlK$tF-Or8}25lbWi&itQJFPDD$F`7Diy@jAgJ4oG8< ze;m(EOA%D2V}@V2Ptdw?F9j+VfNznn>Zw7ZzM#eF(9FFcKYI4-yQTj=i;wQf8zxL&yN`ZOs0F|mPcn!N+uffUx7ZYIQ>>TQGb`!+V=HD6PT5$W4*$Vm z-1QyyZCw6YpcB(>i0_!RP?%amOV>6+lt4h;!X5IEhVlHA38S_@0pQA#CNVe+*Gr$} zX*MbIHU(6t%N_9QG0?#}c#GY+$?xj&%Yvs=$rTfVCXH5^Yz}6V4oYgE-U0c&nWPFB z64GU%HKSG|WHdoTCI$Y>ZnPrG9Jk6T}cdJ zEmeRdl)6*%Tbv&k>LwSNjL6%*V>(93%k zlO~~`w*Y5wi(d=|aOTMRfTCZaQ@Y$Yp%eH}m*@I)-0a2pTJpDDjH>cNBnvYiQre(* zC~kJqhE_2V>ZAe0pq+|q`}wIvulfH_uC7O%y^E7RYT zA*w(xAoie;jgLc5n4vXe%W<=7I1#?48305G8lzbs`7LUK%K&)b@iI>c0zYb3HHKip z)lA6)#%1Bv(iy&>X!7VyHg-mwx^87gZgG}ELKtRk33Wr1}teaH>EE~sJ_q6 zlhygyK-U9d6Bv-gujfht&A4WKPD~5VoWMpXu_%RU)&mt7(G((Yb)g`_Md9KXfEVEb znZE_QX>h)s_~}v>20-{}cUxdC;v|vTwOaqZ!W5NXHfBkq2P+nu++Xk3f`k{(q_{G>)Vm=Vb^I#$j8uLbelUOP(_xz0_h# zimh(WhiL8G3Gak3ILD=N!z9hOxr5O#I=CHaxh~rAZR00j`WWAv{!c^FY=U1LD<`Ot+(xlHM{}dtK3F|iAY}z*j-6qg`D-sEr_z! zXusJ*gAcFRv4z|JVdB% zah%MePx`Mn0q&SNxlqg7{4ObOA7PcpjM2hi4b+74j9KM8cR&L{&|fAAuM5Sobwoji zqH62&$d7g)Fh1)1CKsI*(nB)|cY;=r?yS;9Ek>;XO4dzm5Az-1X)W zuOBIUc|WiUAQsk{b|#ljKylgYwR7CWYfPlIZGpy$5Qpx#nLOLccSPo2R9S2a6QoSI zn^?uS{M3k?Nn=_F9P{@Wm1XU|CT@NbQhY4=Z@+Uo;IyC(+wb(Ixb^6T>UE@h=uZ_P z0cTOe8o|K^g!lpxt7FH@>a+`IJKtzlwLH9;q-`{z)MCFlW#?^Uh}Da^qVXwviEiB8 zj%f3Z4#;NZ(L|K-1{pq|)H4v7m%Hqz**LM>#ezGmarr$HM>4&HkaF{rYHxSZbm5$&EgY% z3BmASWW;XuTnk=Lg9MW=4BiW#UIs$}CRCoz94XHTV5rdgZKK>Q9hi-H8XXfbtPSFt zB@Amw^s5d~3aDMG2ZJ6jXZ@A1v)nbDs-hN}gB~WSV*11JLRAB7oza;O^8EFNbj;&( z!-!Sv7u&$J8;YEPJN}Jn8>AG!Q1P$Cy-ZWU|$_HK%p)7QXTqDfDuN#mUt* z0A1)@793_R|3f~pw;}JzqErdrvAP}4$SAbADf z5Sz#m@ME!J6&?j?pEJVKvyNNIB*IjEMDUI1m7~ z`Sw(hNexmUqO;!#*C)f(5v0@7G%H_Wb3mCt&~H)~ zY8BJXO#@IzZ*9{VGvZRVsLEz7y-2$+nrIg-oU#-u*{Ktu6*%$&zQq2BcarBWEe8rf zp56%w7Ygla3iB^!M2=0#t*R3&^xk1)%Yj9JJM+%^JmE8@+(a0RIV{$KRw{0!CyfwW zEBPb76a!z34QuXF(P3CLNYaGVY6h1 z?#5f_hS)`~oCfTPOve}j%ul^Uqc;Sw{5sSyMd%5Tabt~r)?5#Ctw#BG7v3Vb74rBC zW3S$<+%nSyy0ZF9P(%DGx^#sf_!wTbCT9T3`!o*SsbD3+}w0N(V<$+@gwXEpjp z+7qNT1n}EN`LX05@V5{9Q*bI6)ol)9M%HlG>Hb8W+h%4~N?oAln~Tg*2?wJH2g+lVf}}+QRETH$v+ep^-A~*ScE) zC6LfB&8H-VJcaoDh}}rZB_&bJwLZ~W{3tQg?n4unpa^{5TcsvsQu?~S(v2!iCCeWF zhtO7{+KnO2t!k(nd|jfZqe!fW8^DwHEvp0 z_y+LvgJ)Vlf1Mg^d&mLS#=>I|^82ph#dDY9HMDqKl{l-5K{^>tyY%>Y6f+G=WAFyI z&tEQE)jbftsE6byC0D>H3R?kTBWJl{k+xXDZf(!nitU5%>V#_e0ZdH5Q^q_eG&YvRf@) zX7^87#^aH|-t70$p2o4j7-GPVc4(=S%y|UVgDn4!z2gJ|kPnU^<(B0I>-atqinZOw z{hQ=fLp99ou$phI3WusV{X~8#gk2)Qrc4&c^UVK9KjqiFI_Q@Nbxe!F_V0O|P;DvVNc$o0r;$P=rxRF8Q z#N4;3m5=wCDG3~D&k4g4SRN>R9Ohk()ujA8K?Rl4qeC~7(3^gA9%e<8Qrf*iRI`)B z^N&tzRrN>DFpejueXRPH_G=wvPH0ziah{*WFI7L-(vMIlHXZ`-yt5bOn4J`Q~wO$%U}&g zD8gx)^2M4c-N>Q0NaC&rHd`{xTeDX+N_Vp{^dOQ^Yi8UjNo z9qRDi;cNo3Vp?+iNa2NNBQSJo8{SV`hbxq1;}#Z1lv1sk4RbAh!Bh9B3Ic}I3D5=u8>D(T+D~UK?xog zHtEZPn2>&pe=pJ^Y3(l9vdPR#zpF|HrDLnHDbK4^`SSgr{N~m)2Wp_?oV$YM24`LS(#3ynIn)e}R2QwUxev+}^ zSHyS*Ka5@VLfD;~eVnGcW)k%0aBb{X{(F-Lq;8ZUBDhFn9S`$Vgz5WfPq6N_ z06Xr(K}0!gAzdIHaO2Yy^`@M6hHHEg157=^W`4(#S=W?_{s4Bd6=5Is~R zGc)K*%ESCMOJ)A0;zXh<66R4Pt{!wrp+cL#Xot7?NLp%_e{K{r?}0wZa;big+ajet zF`@b(zsjEgsY2t`(ls;l*g6IJlz#)uRoXu4;ra=Y@Ch&TmmV7Pf|P(AEEk7TMwooV z+-4z3^-x;A*U+}zNF@W|xm4Zw)MZu%pJY8R0*PNj({O$WH@7Xu9xPwhwMV13G**RI9G9356cKw~xNwN(HPa)bOdH={{9&_KfmJJ&a5o7Z7 z*h{7&a@M^={?0MprhXsFlTWgA!ge*Mp900z#EEom`;G)mA}=OE`v1S zK^3!8NCv#2Kn}mzJgH~{Ks6ML{dIvo(}${6^<&4p-%b?xI6yt}4;BI@4whR-rDb%0 zw~BE)CpM_UBr|@56Ny;yP)i4&tTZwHo0t!>j`94ZlS7@Z0G~nzwSu%i_SuEyVmD;S ztUA(`khZUG)<$Wv#h`b+5q;Oya;8GFTJ+QMZ7PmZ&6Sly$u`ole(0lQ6=T`*-YRtf z9LL-En{d*1*c4r^(^+pe{Ch4*(E~=w`ZM<-WqX^gMc=M?r!g(xUZa3>K#o`b1u&O& zKUh7xW&!*v1xN)UceK{y!JcSEN73Ny6v)&Sy_`6)+H!~AAC6`w*76{|WuC&h?djt| zP$wM=IYh*!cF$cbsiGFVJ)Xw1d<~v*4^cs@gF}o7xk^xt z0dk}Fni2g2^t9I&TAwK+EcxFV8DO{pXVLMvC`rl)R>y+w38F8Y0>H7gBySnRdY10g zJ7O_{o~85BTcGg=I5I1U?&V436KyF~0EWB;A({k!99Cy6<^*~;0bXh&m%aT#E6xk@ z5|ap;|9(9l!LykVZHZ@z44$@9Yeq`?fG{&|Kc>>v$9e-X5Yd9LIDJ;+L4bz=nIC@F zPopQGoIsb!ZnR3+4q}jRAR}Cn!tH!xOCMMy!k>=c8M?OzkBnib_|=cK!XY_vk%zx- zm5HQ9^|?4wvu^{g3UQU$doPZDVqEsI@&^XNO=eu9c(hTl5{oj@iaNps843KEK$4dw zYmp9z32@i2^tz?$jTyuL;lvD^1Xv2R0z9p_Ytjx7oBaNG-5|IxuAH=jgs4G?KnwbE z#)Phpp5tW4B|3W-@4-9zi91b}z>6%&j+9;IFduW-cnZ})66*-B^YGehE`t;%?*qj( zU2Yac;;7-vT0I#Gh<@LMf&n)f7)Ac!?AlC|*183Kw0AH!6}qYlNJ z*!TYUo?gIvZaHe(=d%|ruh{q)_;UX>Irw?4n#jAQ_uQPl_dQ{&Phb#8BLMZ>9G(ND z*-sClna_6!iKA!6W5^1MiGuBGG~Ton()|-#it4N|00XnlkmgiRVw#SZi-3?|Cr*}bA*ELFN zLBMrkmC`r3jMqw4%Wf)xBh70p8gA!1sfJWZf!H+CM z%n|ko%dw^soi4X4hMxs9v@WD#y3cf1%BYe8z}>Qp`@tFP1Y9N1fMwC&=oTdQ^yD`& zNi0`HN}{s)IxR(?#lGZHjBBz&u3bMgRylXA1LioC71Z^S$>octA|rlsqn-oreyGi2 zU=K-s7g0J-i($A7X10U`kg({r5d3aKS!FQ<;^jD*2N(7b>6`Tc!Er$K55)Ql4!oxh z=B(`})NwNX=4b_1R8LkK6V z5^4!aVAWWt5KkC#AgO8Fy!8b?zi_=MHy;y$O1qB@J)|Vg=hN-_X=OT#^^s@LdGUSO z(BQ*F`O5I$|H+HOwFSvnM(xUcwEPh6wN|R`MnX6z+^s5MJgL$4Fi{bsvZwOH`y+n2 zFe#G04k$y??8hhDteu8ii!V5bT{RkNHvxhgh^A8=l^MsI|Bp0lsZ4sF8YuIFn>Upo zFG+-(kZgr?J@__ba5+-xW=wacChoQhX@$n4zYIS+y?S`Vr;ylh)K+asODO>%FKFn_QYej5;C_bwd*Ut#<9S(odcPdVJX6^O zCWW!6L<62kbFhrkav=O{2tgZT=J|$SJjRvmw?TJt6r`XlT}?Ik5~CxUN-x@!&KP}j z4$NF>US2GDj*zbM)~Eug6vFbl`eUU6!sO*s9fl7*11RZc3rwRV;%2QnYDj)gfkzp; zHe$ckgAK?#CfjFz9m#FXG31)_1?=q1{oVrqL;cW$#)DaLOwGv^#5?55g5x%2tB%^6 zWH)kB)KXBfA1hJ=-!m)>=*8Ns!e|Oa;TVGt2Q^;n8OK8UD+ChdgHAFjk7X4Gl^MVc zYL>UPVV7C*!9{g*LJX_Sir1altf)3dz^IX9Pg(nowRX;PtP_peDZq@LTpoP9uBrxs zqX(car7`&sc(8EUTR~J86uX*Hv-Zb(MbB_C7NpvWP-I>>d+IppTFia-MDBJehN8v}Y)vGxtgmS2A(V%r*e(PEs&VLILuolJwDoDGtM{{7kNBbFP>h&PhdbR-D3P zvQ7z-A*GQh*TF?Mj}y*0k1gv5@~w~P_W5n6)$fe}3RoFi&Rv9=0!*BLwQnCh*=p9g z?fZQOw1DnKly!Z8ijPC?BhWK9O|z+@cqNR`#xuafXvY3dfwW(z*#Sjvh(F`MU8eCe zemCqk=#*sWtL&Qm&pR@a%!Q(ha`% zlPqAww2-4P5REpbklL(YLkIbCkspazWM~%rgWi;)BqU^4QsFTaj$)z9u)wBx$x#*! z{OS#`a_MSSD<6|64s2p~i7!!93yUd_5iWA`Nb{1RqzQZ8Pu@Pfli*(nzDBS*wcAK1-| zV@Vq(wgva*8PPnBlPqf!k{Z|x=;1|VW;R-|kadM3X)|3m-Nrm_K!Sxg`-C~F`;mp; zgpMAJpC5h?hJQbo8=p33lv^sdoVhiPWnFQ*QFiwT%lqu&3mr3XK{?CmhC)* zPi(>(iP-#6wn31=CcBe3{gb~hr<33RV9iZ5VP|DmU$=XJl||LAv4@hW#i*-)U8}6V z2Oze3Zh-=fD?`SGG}b(qugf?gg|H~6`P*TaNz*Vkk6&q{!{zIH=!W343RY?CA=gK0A?o`{Z=mfuPn2PLrGyLoQ6t*!rUGmI0}O5rQJPh`MN(3R)vR zJ5X3iDr|}1^zabKAEbQJo^mjdRULi*#Q*G)>%0neftk4v3+hPL ztQolHuBj}bW|nSmGbuUG!aJBPjbADWyo8*|m#0QdWV2=@xw-2;bNESMK7`JQx=bEw zV9r!+TzGSR!k^;M0OoJk;rq4ctp1Tn8Ha^*baeK05$8ADo4eMSok<9Z;mawybz@uh0JrE<@>`=O+>Prxs%sF}VrOQ?EvK4RqxSzBzdqGY2cjdK{f_=wCs3Q%-joS30WY@Z@B-7 zWTXvU)0w*UJ7%U=IR#QL@A2+NYS=M5cmwc14FCe|#dJW1BGW(9-2%%bz=o=(cGt<@ zxmt*9D1BVBVUP}0{VR@B6c+DTYYvSI7IiOJ= z$|cw1HIoeAzMdw18aOsZhkaW+-5;+>=5)|qv-@$un?CGw3;EC~q1MK_!5bg>;JXar z@4)E5O@|e4?o~Te){~V}Jfs7o1BGybHw!m{E4o)?KPxse)W4`2xrhu+d1M+7)uz*W zv}O`v{&yM`FbpLsgk23P-5;%aqk@M9&m(EVSKi7FL$fUy@*@>seibUZSfT=JNT|^a zaUqRs6Au~8K`me+1GR7*z6%)Ehj4PEgGUFiJGd6EooH9>-aiO<3iu`^I_lFPWNYP-q@g9rdy2L5F1bt0vn>pkW_QP*In-8 zf^^-ZKV<2W){`}p3jI7X#Js8JL%KnR@-P|X-7utc;C{=9%2Op7uv6xRAwg_FWH64` zlMOjAG8jeF^{O~sL|Uqz7&XH9u?yFpwH7EHJe`%p-bT3 zAIllmQ#F$a?Q1`c2v`USBG}kBwA1~mnl~b-Z#9%Nuzg%ODVGu1b+rsCHbA-#9@y{` z0%MggWAg*7oRPWWf-Vz5eJeD^K?WWX^Zo!b#ElHnyF@=D%=IqOe$$4-KWN>6VN>AJ z9-6UA>!F$%6zpp|iw*Nq+nf#ij&`~~RFgD+sr@w7U8NhdHCTNc>9D;S!|6~^mu?fO zB08{e6oagwz=wXleV`zjOog%q@&P^V5;OUbz=xil53Yv;J-~-e4;RyU(cvLJBt{41 z)(`Pvojc_K?s{K zAns#V6BQES7VfD6At;C|oVyE+r$wvT384THyxy=0;=*OUp}vm^x7lcq{aV4ET+(R=}Ab4ozm z7`oQifD(hLCq~*mM$~wnM6hdKctHgvXe3)WfrtG_s8x>Qlu(5__@U9ge-+YilGOj< zv8&!miENLRsMn)5lMwl9K8q41xT@Z|-Jrz%q;fbVc)M^rzXpTI$q1|<10%W!;iCG% z4p!HLA6vlQG7_R?Cq%j4M^LzrfNC8PqLUD4VPP+K;xjHn6t=Lq6bXbFiV^wdB;IfC zS>$&|#YTz#juJze<$SLnx^S*XZYCwtiIga=tDixAf8o48bmIaTb`6LtDS@8Uqy+Q_ zpoD?|Z~x@PP>|>>MK%nt>f9JKr{!^WC6+AQN-$rjYr(M_R2y}bKmj{@F-n!{KD_=g zhEw7sd*M}-*dH61L*>fY$1;iaAdhSxE=jNs$i>5mZbD%iu$<&WGwDf^>*s zix7X-1}d-oBdG_3e`I^YVqimdfFJPU1+1>fhG38NxYuJhGdP5=@hmpf>?Op+K1_|(is(0`~bilHaFnA>(9Wvg%7&q5I_^@83l{M&|k-d#Y zfn3QtGC+squ7Onox!#-e!NbF!-+PxIbDUo6C4eCsbiVbm1Y$jP^EJNy{2ET9gU@GL zyV2slKXmiP2Gt={hUlz9Wu|i=LkbGjS!7@v3!9Fk$iSiQsF`nYA*8E(vPNAol6SHA zG!_o!VIy9mBcI4%MP$%f0e4@KA)n?h+qijWiw?zp1&6m^L*_{`^jaSy!#bM`uRmXZ zo<#;reK;F#bhz)&+`O?tXNB8$b>@fI$(%`t?Abm3cwns=Ds|Yd?q>x(XpZosY%^M+1gvf3YO+H}v9Qoi|tZ{UJ50!MN+?Ctl ztVlX^ZrFrKONR9CGY1Y^6pU7g4(M`o6JlV=I^>NERcxrvhU#>vpDCWj;%7z&dn`Dt z=WZqwzQ2AyiwpBM?_99`NpXMdCi~cp%!X@H9@%Nwm}uApE^L-7L1#teUU69SB$0uq zI_?`zhL*1LhN7!x&=A(3IIdKZ0pt8dQhKnViwqJxxR5%x_*>f-AHHT{;je9?&WA$7 zGLM{O`1bnkG&-0o>uq0n$l>ucQrFDn=J6&vR48I59V)LGkVujai1!g`Bh7|epee`v z>uwqdY2}qTuCk<&nTCN5tX6aN9Y%gpwrs=Mpx9u3Qe=+}Hh!B0&>vb+phd6Hbe4z0 zLtYQwOg?-)j}JYJjSu@icfLP(v&Dz1dxf7AC>_V7Y3^)VEfRG$fDbfF^K0iM0XL)K z@8{}-sQG$TYNd4q1=wN)a|dJL0V?GgQ-)JwL{UQZYV17`CCZ=OS@CBqMNN%ZlPksj z0Fl?DH#0oEzJ5K85Y?Afn1!?_#QkK_>ki)H%+3gm+Tk58Bt%mch-z67f+i?>=12(2 z+YnGZmn_%r^p&d$G8-MBLt=z5o)?+tMf3jVFtNeUi(<}(lMW1CEn?x-!g!yUv>Mca zz5g|@+7j|T)bP&h(VH0^#_MSUxe;7jKOdYu9qy0bywO2-3-^2MxcEh!43&K7G^@wP zQu1NO9r7V_o6+P$uF>-i@ge6cF-+yQf((}_@qz6uqW~iF#4uH=O&YoGgL%<4a=HF# zH=sY~7-!6Dq2UT_H}8KKK&_4C4oa(P>A zW53yV_))2xF<3#-mmgYZlGo!mlMns%G=g>AEY)oQVrryRQZ_xWb)yc%QIoQ3)md z@JI(~A7a~rLppm^Wk*tuhx%I2qC<4|VcVO)y!MIyK(Si06;bdOV;LO;NUh`>eu;^m@c|G5=p*$QNbk+3YB&}ajjfMsy zLt@UWCVUG?2-Iuqe6zCnkfTO5B6p)<*|Rnmyt`{!(ZwS8abav^aWx){e?W-fxnxnJ z+b8s*JJ#o9f05c=M?}1QK}vK|BFBeRa(O+CGs8oAO=nReLuDpPm}ZltHw{Y7hr}K?#m1Rb`jpM9DG(;0|7JqFiq7nrFgL$BY z8W=vN=e6pTf0JWn(?U@!|eJ zPIkS$>8i;tL&tk09i%BnbdGpqIG=>DC_-q1MN6u7W8^nDA#%Mk|1c;pllCWp5cGSf z+>pmN%P*KDgfl{f2wRBwvqHH)cVuAEJOvsL8C*AMJBj!OX>HI4}AyE;Lf1c`K_IQekGLpaFIL zpn>`pKBt$wOnq}R-fvRaw+9MP@NI-NBlO33u+Agn_&I)_#e)J97x7?UbGSc*^F{+* zGx_LtYQiX(XW{_q7@x`FYDvQ^H{O-u_lh=jN??$JOo-Pz42(`>34?lP#~W?#2c~a)Mz4A1;Av#lh*d5M5Sil?;tuG* z9#+#h4(Jf8=uo(MdC~#)!j}PpYm^d89pXbH9}4-vGo!dgwRLs6gOm>`ZxJG%U8ugp zhs^HlXb&A2>*<>r9KMckXAxpsdt>oNm-~U?n~e{;XExD6Q`+2!o83Y(swDw7&{hxm zrpS<5ar0u24b85~k}c{^;Z%scQp|`GxJHT13~y+5h6YamkO~sPq|rWR4D{%tJWn7J zeX9aSDdrbr%240`Qa%M}w2jBIhxPEyj18~j>uF@LO<+IYpdA|?7`|~fI2p3o!1>HD zpO;EHR0-6$cXiT1eLcjCDn8^PKCorjo#{ls-iBm|R(%zU!*a*?_dLK?Z| z!+FUya_ML|Zyg)#H`bvf_RX7-+#N!!$8Si8*Ru%GqA#|vaHGNf!2Hcd2wgCmCl8P? z4Au`p2;)S>m!g_Oui`_Ceptv90)m_TEwFqcpbxK}3=Y>HB9v3l5L5m&jq=OU> zsb;4`{j;~tKUv zj&&nSk_&@9tl?V_CK;NqOUl8?Fi*}aG888RdRVy0vOZlh$bcJtrYuop7$SqGk)AsA zc*91nytjiXmv%7s+&?}nu&;S*wLQdzbsjlJJCO^ed&45!=x~pR6UnZN1q#q$13U(Y z6m63ZLp{yhboM@5Kmdao5A9Dy zA7i6~GKc0x2lLFKmEYk zyrGK)9jYfKDqUq0?I!2{O4^>eUKJ;OB_%l63rc8BQsZ8dNr}ka$yb!%K@{2T0wpSY zSo6ySz8~mrxxpYVA(cu@r-Vc>$=YvHMBOV>FOCa~B!snx#<9wJ{$>VIg_LsyI8>4T9E82x+Ur~|JS8Kng90nbQ+Iwgq@nIWXj-*7(k>tzPq znUi!XfetJ@7>|p|4D>VHT@WVNWP_gzKU_kMImrOaSdf8}-cdWUz=kX~^x^|Hh8t7fgg$+6u2h+{dr^j=JVEOl59-ORu+(LId~=DFm4 z2U58|aLMS|r^S6z9&6IOJs;C9u_QzW9?%&F}L<48pYcN7%0F1ZkO&x9VD zTwvLuvFuP78j3p#Ho2C!D#Zihy~vQ(Q+a=Y3?H7!vq7;I*2h0^%Pi}un;96wd1Od1 z)Dj!^-R+Vd&m(!Y(8U5;KrFZ#x@0y#C!(_f3n`>r5F0oX5jCn$Hk9jK20e)lsVFi? z6W0_P64*f9JlQ}sRP%|v96U7KoXGo2j|%kQP&$1qHms*^M(jUFIE@a~S6fVU_eF>M zb2m;09uyWNhe{Bsa;BDa=tY+b^rt5sQYIS)kA>#;E$D8_NpP~^s(ID3ZWPhf&FoAX zc%jHVCXyQoHdAEqdAuAwGTdC3_eZMJ_DA*^puSEfgxVgX!a9Qt{YU?K78P>v#TIqO z);$&OXOJ@du#iOtWsnIEYNtF9WEh%;OG8D61fLEZp)`YP6#$PwaKE18WP=+CMw*LV z#s(Fj&?E&L=m1kYOAeU_MQj@#JTye7!xkF;Qb(X0bU=L?4?ua04$B;}|LouUkJIQ- ztT`R_%D8fW;^vJGMRf3^;@zs$5;%DaI&>8r(hwa?t!?-KDmawtbV%0=4LV1=0!x?V z17!e>Kytq?UEzU8MHtS9M%hctsyAd8#--eTvw7Ty8y5J^r~rScw_Vm#H)O>3(-<*) zM6=FRe$R;enPj6@Ei^#Lo=LAx7jaNc>s7L%buEJU%meBpq-B2VZfT;5Ixm%LEaFD6NYR#;PQ& z%ai!fueTX=?sX1$yu}CfxaVbteBfKtq=rIJCLKID6mMds{J|FYZ{3`S1COQjc^P|* z4(p8aYae}_Mu+Co*;;QjxbF|&Y;<5tasH2Il!J7ropBA;Z15o!@`0L%$Y+(S8%YSYuzZ6a`XnSo{9W?6{>PNm*uKCb$zxsa z_3X`z4*fhrSoF;nwchA*-ygmy)d`^+r>YMy2!w}sB^^xrZs|o0I>6KkW+*Zvu3COL z=}@!N!QypCa|F?$sD%|1n%p2E=)m{U+?=|*JT9t-l{a}@EWcGA_wnOmkPaz7R*PB> z-b^~oBk?pkpwlKg&9S0B9i5aW$1_0evu-`w0DkyMEJvF7%A z>Si7k*4tTBXj_rG-so-LAG#^#OwhF=DRIb|Oi0KS3+@7}5!3AfRLG)2QF9x+lNA~? z%RR|ZuJ;(QfIZ)hEFE>EI1a%8WN3J6ia8e)7LjGO*bRG9=U`C)8MP zMKZvN;gSqVWJu~@!4(7}gghn!-^Q$@p=+^b3!X*#og(Dlx{LdR%a4qVaiQlU{j2rF z%{(G%ucvWgxNChabdA^^E+rHUx7>L94^u|`fB5yxpBT0b1wVeC$8>-@#}kG#=M(J1 z+CwQ~4#W>KNK9VNm)wPde_rRmi{^Ka?K57y_y>KT<~uguWPSC_H+ueaY}7+1;Q3`< zP5ifM5{2nF)F)7$sJOZ?SK!pN;ceuire}CgJkgPA@{FG7_#Kc=hW9~!Bbei9{KCt( zahdAH5PpVpO37vz{j>QtB2UlzF7)lenE!)6$=~Ml!o2$>c_TS;-v%vIG6k;Oahx;P z8ovl-%)=l_JAh(66LKCDnLE8F6dc7!d4CBy9ty$#r~Vd`8Cb*k#I-4Cm{vL0M2?tZ zFD#5fQ5c_3033ADaa9YJ?Rzv`k|G!kYB(YK3~$}57yOD9O_WJO7+av3GrxM|Y7dcd z<0Ng4>a&XbPk2X0WR;$){~G6z;rXwTl=KX5=E%u4!Hf? zJ!%nE;(VU5g#yQHINGC7iu1j2Z0s5CGxM_qP5|KA+pb^z^AmO{2i{N87Br1VA6yC2 z_M*Y8V*cq1q8qv}sK!x6jmkYpFdy!OFa7o-U<*fo%A6G854rsHi!cxb%Llf9LhNz} zq36^whrRcZski4ew%8T6;19;r(7O9})+Y0hCPglFb8ml_Nb12UD>&+URN=(<)$x{l zk=NRu>NVUwkqc849F7Bao#aU#j3u%9D~>yIMG&~z7+Ls`L?qhUD1!1X>OGkealSXt zFkpc&4f7r-#RN@96}6Y=0n0Jk#-|B&!k4Y{9Hdz>uE=EpIz4qtnUfR>c*48MHxtu*n)OTb=A z;onW#2{ylCULw7g<)4f+Hn9Wg(Apm9JF zb^>ccorj=?Ua=G=tK0@psOy^8Yt8o0Z}>P3YAaDt&l}Pn>T(b2#%1nCn^E2gOi5cu zoB-HHmZ==h2VY=QMLj5^l7ZQ9u$j<}Vei1ssDN=eu(9aQT{=X2h7F)i&oZDL7)D~} z8=Oj7!@WKqzvAO8xEq{r2=@#md${{OxJ}l6vV_FlM7t)mT>$Ho5p9EWnI@ouyQ?*g zrUF-FDhWY}>xFi~ztE1HrO6&gf{w^cw4+W)x=)uv>oDxC4vN~TEzw?!j!#CrbAdUQ zZ|!{$YQB3$nk>1$1SJ%-R0G(8T1ZDHHfwY;!voSZ!3eCa3F$_p>2DBW&0D{)ADo+x z-8u+#64F7(BWJ4%oWSSX0JXZ1j_Yh>t?B)V{lBkgA>H92MWmzMK>F_aSWPiH@=~TA zD~g7&BE?-aDH(}!M$fV@R2>FrGu~sXx`SN_cGUS;2sSHk*%Y%O@yAz*3?oS~8}CZN z4(JZBX{jA33|)e~J|1B$I?e)n9*UV@&l}Mm>~i;bEPlh`lr1Dp&C&KClA6+ypl#e) zbJ+^%K)Wc<=0;Y+odI_rIv|<*1-b}k&vU9Le_kt`(Fl0c3j%;6q#JhU5%9jgdaebj zKRZ571Kijbf?6-^Z{p?dAqg*74lH^g8QTrSGZN0W1$Al&xN`08`5!R_;Mwy(Ms2(u zz}tv7yF|Gt*M=E%@*yf{-%WV)Zl5Vf!`{EnXDY7wy%u}^Z1^|_Zn)SdrGNA8djsyf zhomprmyk@j zX*LPCwE!tcg_GeaU~CRIBnyO_(Hl|W7v9{im;E@diHBvyKg>+?h<75~nD|2_FbVFm zzTK?ViWBVmvz`Svrlg7YOnPtNefO+Paf6`|@7(=R8%j*LG$6oo(ec({Ihte!Z05iq zc6j)1EC;r()3T}l*NC@1Z#2P8wEeI|EuL_v2)J9}k%79`67KbBS$~%E;7%dwhBKkv z!)h;HVWb~wTs5sk!Mf9%erQH*IN(mf;qD&1ao8fWQC&)X3VQYD=&4}f zX<3zZr>N7Ci%JWGhAh^zhZwlGcm?=cZ8zbbAEyDXr77?SOl=SN-P1C3@y<}M#tNzK zd`GKCyS)iGHzG{H1-GYygb8przrBN}NNwsnxRrT(!3)FR$(OT$EjlcDk1edlJnsW9Iyy*_aWk2V%-kFGD8S8@Y~heB5~RepIM_NDTuZWkMtq!wb}8Kc4A|2RwCx_+z4@ITej`Z3 zJVh=ZOqxosZ(yfqc~~kHl(B$o{|Pp)I>xDBfo&aC?&M#lRGpQHsUTz{=D!Orc8{@H{&tt(S&1<(Zg$9YhjENXBsOE;kI_np4uF@zTXe;$obvsoNTW)bf!~Vd!Z`791 zp|UWAX9AI#U~f527-BDTznCJ?R-X)_5E36UCxE?9{nqNAAK&qD7T9e9O|avQo6Wd; zHtHtRX?K;tWG@RciZt4FQ|Yjw9fh_hepw+qw+(C_jdK5wMwL$C(U`p&GgxyiU3s5F zjX=f$r})HAk^psDXMJli&W~^SI1B2IJ&J@nrCqz-!rjBM2x^W7plKrG0bZwxbrZ2u z_l@B?AJcHGy`7M^B%3*34e1@$ndf8LN?$wyIh_Paw$4ZO$>^E-L@P=XJ1_6-w$}Rm z_==Cy&^FKd!X(BX?Yrk=VavDA|E+|Z3oqy&XoNfJd`zmhCKsJ>f(K}OJ0Wi=cHt3O znvO^+r1Ibq>Eedm7`2Pk4Wa9ZG|mDgo(<5l43hf*Z972w^~dX3XpcB_qnT7ld$jK! zkvS`97tSuUZD3w2iGg-kg(NnITS<2I*D?I)1^;^_I!y4cU}*NZtU= z3E<|Mk^*l(pk1K#;w^Or_gc9#!5%-xX>d1s?#|PEq&?j6?iraFJ37xbz+Gj!F7teB zqL06JX7{b`scr zQ^jZ%(9X=YLpH&k6t&?=3$6cr$LGHfYi_TlI}_~raTeUTz7pRM9WZBZcp_C+T$#$l~As5x5Soe!`ZH~=vr%{Jw61%0@_BL7K z;2WGr2H{R=4fpz#G<=)|_sk)>;GXB%9`55&l7V1PxT*L}n&_o)3U$5QG)xlYn~m{s z<#DKFyi_?au*Nbo67xL^P&h!_{DyYH85#XwirP_Oo1`Vcoba6UIqB_vRQ$jQS+YEYMCB+d*ZltG~(=Oyjx`CsuKLaH9M zGp{yC#sg(PP@3Ty8MncfuB#1NKSDa0Vm2=DG)N%QHLj5^2S}G6J*4|*IXlEQ@?5 z$E12!EOz~Ib?IMG{7BiObz)l#9)-Y~Rlh(Fg6Klaq~b@WuR5kSiM9%a@Z+DkNJJ_N zwAWo4TT6B(*6Bw&3+)2K3U0@)H^46Uz~+5%Fg610Rurte2N1I;u$|YVq)Egs(RgHNK=8edW(ke0qZO^TJb@I6ud=~c%PY}<{j3VCu7=VZ!G%p zma0`nKs!)rf`v2jiB>B>JFP3MwpQy*tmnsRXrpWcv~Rf^S-p2QRt5$XrV(_99B4S3 zpgcr{D6CE(+Fs5!&-zN!T|ExJJtkggaMKTRzRH}sEOa|lg^O1j3ctC^U1;M3#zYpn zlUPsutnv0G*z4ml;NvW?Et}#kImKbl#WC$P-Iq}>E&586&V#_0CwewHY^tY_7qtyEb_%qGPDbP2$o5^;L7n_hRfH--x5sFn^F`hsV|)j- z{QX>k4<8Lc4dD|Ot8;2z!3$WYCwT`0>b2z0)*2l)4t|^kb(0-8ZoB;k)c4NE+;l$H zAgpWHh^y8C>`#HUH^ritvzzihKOMPinozSPhN|fs)=g`tU0E0vu(J|BisPgA#3E(L zFkua-t|nVwX4V3oiS+#MEUY1kC)T-_zQ_9B@yI^QP+~WsHcK9n6+%W=2=UpmsCeDn zjIes+AQq3;k*6b)mu2i%MffDmS7l`V8f9RU}L8zEF%)Z?&})VTAeeI z{`URbX<&OQlFQ!E$=bccF%^Mrl(r9ddc`hol>4xjP%$K{0u{ZI-9vk4?iN&uCE5g= z`;Q%LjKvps_i2na?B@z>g=;(kfEqw!=M73)YgVs?ITPlu=K(#k={l3f-Yd!4y^~Qz zA*>TkM4GZO+*cSu;J&YNh&RMk8iXOKhmfMHV~ifI1Mf2-=-X31Urz%YTkZ&UEqk#0y^}E#gyA_J_$jOzLNM8` za)`IXq8G8d=X|`x1M4lr#%D9Gxdhg1d1=dvItEb^h8$!rQLC`d%0jS2A#uzDSf^!E z-PYQiiS+z92kVN9fIcQk5(eUM|oIyJwDqstDky{sCY*s=OGUMXMojzRDU z66nq_YWamVjE4(1ViN7lt7DQyPcJ$gkw})vwVE&!3j}+ug}1dj=lj6NSzyO#s$t)- zFR?q~oK7`J#IA=(sEZ4oipP-TB~@>PY5LK)te8-DosH;Q3F}O(6SX;wy~Qe*PM0u5 zB_h=Hzy(NWBgK9I8y=5?ep`VJ%N5vbZO(+cfA6P(4K)qHzHv>zqs^IMqo)osMFkO# zU$7ydD3ZOX>aDOCq7MeU@#)anh{-UbO{}G0&>#o;>l16Ajp8hC(JUHj?t@sX7Z%y9 z;W>@EYF?YS*jk!1k#67HSy-oBmGsR!z+S;{N1M|%!49yoWEbXO*&By`7vYR> z1MG4KY#Yt}E78@Z$)L+YhQPKYu$|i7J7HPbi21xhNbaQpu^y_0<&D~?_UYd!gfLpS zu9Gpdvk*80!jX8u3^Vs7%?s56WU|0*FoWzY3*eYu zb9$}GnNZJ<)4;|68_^DJk9NFwHgbF&XbWs9njqgxLfaHSx`XYIdCF&A4+%kcbou~u z=QY7jn&E8#yKjzYtf^8+h1GOA8>xqY6*)X*(X$}fC9lC=pN$zGXMtUFNd$Y|F!CPk zduL;D+x$`$K#I3-J;65BREsylHl<~Buu+E|U)*j4_M?Ehu%g;E0hVBt$thG1JIQsG zi8E4wI*QhH(BBYmFTS0&M!Fv$oxZ2jkRG(-g57G|Bc1M@izO)w(cL9t217`D6tPwX zwVDON#oDo`4aPqnN=gVe&&8I0VLkr`SeuKgl8!~XU2|lQSO*1cTu-5(CDv`J4{2*T z&O|zXk7r?RHD_WCqq;rT_l`wobXX2Tq*d*R9zUAOshkia&iSoWN1OpHN+=$zJMS?j zxk4|R+K2$!^$MEVNL-7{EhE5L4KVN+FsF#pby-_+wY3gsq8z@5vv6*aR$LJVPGyht zy@Qd{>cF`vdT>Y}x(hq7Rz06pf77;a0v%|=+&Nx= zdG;mJ%Oi2({Np^NyT^_hVe1~~dnY1C)UkC8W<)vp~il=^R8ZizwuP=4Pjn)v`Faz;2?2ySX1kwnBR?#FH51y+GZACZ zt`aOb+ND2vIf`X(osSYMz#$Z9vjvuQ%tkgEfOcQs(AP?wiS_HZ*R#-$IqE7?a%g+B z?H<~`+Z!${d5aUY2@=>cLoM!`7+gi0>&7=3b-?*kk{ zi8Vq$7M0If#vVPe#x%nc>-7ow`fYq0r(r#k^1eKO(jC@!gg8w@olqK)$yxna9=wrY zCoiY61%@#wcdGCTAEPa##f~*&w%^c|MH|k??xITt>?EWqbPsHQWqzh7_LMO(V{zF; zZ)+LOgt>p~X9106lEk^>zQ?)T!I`7!*z>|s^z8mvFv(T~NnS~1|0}(f>Wb-b#1=W= zoc(%kjMsP|IC`=nw^TQuu%kCfXC6D6qV~ov%eW6X*7=orQFcN#)cW z!VReJ9gSKmK7$Wx{8;(X6+cjR#?Mb5*5Gqr5T`q(eY02O1--kWT(7*!6p0mdU+K7? z^DT(#(*WwI6&E@eHOtGM*OP|c0d-ktA!`ZF1lmr7x_QQz>b|Ml+P!m;Q|W-ZDS9w! z;xg*d13N+pbrRHVb3+rsl2-nmg(@k03?0)Xc_L(xPk{9;)!v zd6j8yB!}Gxz`EKStx+I_%ezBeS>FpoP;*}hiXcMz36E3Lx|ah|ua89gR=?HLa2`>i zI@;Ld-0vNU97u<(92y%esLAh4#{sm&sd+f5-+XG#fgVJ9ORXsi$@v$jYvqyXGi4h7 z554G*bctc(i|?sD(Oe$wfpzD+t@Sq(=kl$bh4kd261^MlajoAw6FG~{&ABL1gKXKo z^oes-B{g>^wEM97HqLG$w3{~f$`cWmWK_Hp%}Ahqrn<|CGDxHVA5b7o4;VzM`KF)< z&ryQ59{g`>_00r2f6HeX)?)T0_&Y^Q_HIYtk%1n=^?D85nV*%7&v^LN3 zSoj!H!YAJZ0qbF%iM)QJ$`9GKOaCGd#UP17Riek97gC)Lq%)fX2fcx{@@B%EzNOQE z)}GM`^uCNb?j4AnLC4BGRFpCX$#g9@j~ymasxF3@bZ>9#O|({&HIU|R%`6--^CZx` zdKYwIy33<_Q1p;E0RpJMZBBm7-5Zd`OI+30cbB#BW&$0*#j~J>Me~F@P&2s)``&>V z**C|~RVCP3K!Z-2uvR5Cd-(8*wGAoC`e5?W+%1lq@{AKOZ%`xh0PAh&Mkiub5Dz*L zStrM(bUrE&e{#sKm363I%Wfvp;Y6&5kgogPdOh4b5*kfcp$0+QLN%e* zrk}x+5B(KnkK1$;Z;Bx+ig%rgYM+T8n2>04Gq_3qn6YL*ff1C!l(J>BtviGZ%`W@+wX#yQf=Yuwc zaY7kzdm2L7D&Q8{UbF6=@v-DR=$R-$~doqh5$c zTS)*r85#tA?HSV7(whnO_pc{)V`%P?33i)Q*n@3%z-}zSC7FKY`sOWOJd6yLQDFii zw0${^8oKm89C8vS*t{>o*!GRum~@NZVHc9y)lvmjuP~>Wk_Gk zZzk5?zJ5CmZAiI@cD6m*cjPyQvyNypR7|wBf2MLzAsQr__|I&8VJ@!t<|XBQLk$9} zE_KSh%mnTF8BFeC<_TH0O>nf}(;va~lVG!03$4$5n_ynWQG%YAH}t;N-%P0Ie`kS> zt;_`5#(pbGPxnqpQy5{pC0EXW6KjMKfUSxDoW*PnsW+9h0d`|LV(u8nDwJt+=>|4< zo;lnFtV0vn#5y_DrV|oHg2=f%K)p5%>1zqj#QF6+s8bNFZKhFsr0*S&+-d~-nV=w| z^)prWduVA#1(DPpYF|vaWqxW8@E)1`Dvs7?e+PAC%+5ZOO7}ela};QaH4CG|I2$N_YCSQU9*YoxYv?;nLRUQLY(*xf7FgDu=3BmN;1 z5n|1KY!E&m3IkwnYQz3wpGs{qO|_z%Wf9sXDf26VVFWsdaJ134uZ1|1*!^oi4es8R z`PF%2+reE97aYIP(2#I*gdc0Gvf@bcI6|Xq&2zrg>^4FjbQQ|66f zk9N6-cGL~BjqFR5l=?+XC_!SE6i6@%4YY?WxDcfQps52kh&43`D2&j)Or{vrjb!O7 zxd2!PBp<0S*#k*UirRRhxVIhcf|1tLUMq1X)b`cR0=tIR1$It1z`l1xCRQnu50RQX zHKXiS1-92#y$9CiuF${XMVZw7b^97?}+4NKAvuw=erCidK4)VsixuCNENRGs0^%) zQKb6n!5+EV5wdA49wOEO)m8IpN#u5${}z4WgtcYG>=|IN+t~>9dO<{At8gaN6|~bp_C(`7^hHuHFa~Sw=MT3s5Mhi-7k*K0jxJ2gt`*y2zlA&M^a@4JfsiF^mpf$ zW!%-V6(j?0%wPwu&s)L0mf}oar?2@exLaw;{Zbt_;6A=SR*s@4_+`oQx+q@5$zFp( z+O_SyuwXVwLY=a__%c&t>||`jnnOy+{+!rZI}Yengv%w7 z4j!%p?=!8ocTi{C)2(d&iRCGII+$qmNvQd_0P2}cVheVCj=T!3kX~zXCeHC|JPm1U zO8R1pJJ~|Nqs6Hb6eP@gx=Afhzd}C>&ULD|n$!;KZoA3>4q%-KHtiS)HZL@dTYVht zI(Rr{H()iEpt@x6@cR_l2wkwIn^_BX1vh}bb`I%lEzX2Gd<|!TJup5`u;;0=2ixv| z-AsogjoPzo&H%O&k*3;e@`hNC@0NE2tw0`Zwg_t;jV^c^)$^%3+u>8udaI4@HuapY{c zDyzvnTx*#`@{}(Y)`DUGu3UgO7X_B;CsaQgS!sny?u_4D z>q)TJz9D_B$eC#WI16oTnW{?qLfJQH`n{8p1N&HikrYF;W(F-t#gI<*LaI*dP=DRh zlP@G4zFQVx^K3M#7aVN75ff~eFJJ-9rm;-4IhN(qXyBl?}F_<{aiE|1}6{cR8vt2s*UcqbdMtH85DPmqw8Cx z`!z2FxGc6O|JIzm|ehIQt6bae#-%w9IB zL!#BEu%_6(@!0TvWf7|w)>to($I0ujuiwtXI;HAh$8-bid&eWqXaH1^DGPIGI9Vc$ zAR$mH;@z<3H4zH7lj|g5?XIE-Q|0-%G!|D`Tg?ScgX$WFqL3{KL!#y6OXO6va!z~V z3T5PdF|KbjYh})4_1D+0r(q3wGqCQqU!XL?y#rFi=+xfHz=Gp4MWt4Nt}qh}wEaZd&4V;Dp5BkO!bU$W9R3ma09s2Dk`_6*CaL-mjb zG535)&vEqF_!mu$`>4+vv|$sq+~~cq#u0e<{ADEAaPeD0y*?XXU&re>3+e*XJ3!rf zx&igQ!%_3-Y?x>)Iw@Qmj6~>`C#0R!=B(~2KBdG=B)bdM-;`2y zHU_4B(fn*wGYsN@_B3e85V;t31@>B(Gr{h!{WP#q@Fm!JuMQsZ-r1;`^g^dL$-b2K z88eZ{ol!4tkx#T$f2yAMCFa=K%)#d2SlTbFV?!QNUAuscg@>qg4b{&^wZa>v~K5NJ#%9veKzV1tnVF-Qu%~ z_9C@9v2HvX3$+Uy*qIUA19leFM7sFNSm@h~0qUp04efZG4oJN|7yGNdw$p&_RXErE zwv&zwdH~5@Qw^$zNLbU=dk4_+9?HIX7jy*BQRgDSopBlM^t!qI zMc!qad={cZU2!6C%db5#qnTKzwR^}|3vwo<>#LoGwUy#vhkgU>#t}F59U^~ zF6q?+NcNg4dSJEi)Z%`npcP4`s|*X+R&}$1jJxWntVM1jMSoexqkmo=jg3!>TrROE zoW#ba$f!LYE3nr`qfM~uSztFb{Q!2gQukmVAB{y?1lfLTcw?y0hY@F*QA@PS{h464 zgKb$I$E0pSjvlTX!*#ayj@cZLu5oi#R1lGLVcvN~ZNs6E<;p)ef)JVctk7PIawgX0 zwVZ}F2t%|d7j|gh5#8B)&x^thtnCig z4TXHJ!c`dIj0UjwFj7@kjXn|9QvQ`;!_kk|M)z}X#!_F7?aCaW^O>@kG( zY;B7o(ov^li%LUs;^~;&EzYq{U8f^6n9eEb;wB4_X5uf(WFeSW`aEDmUD&z*Ai{%t z3HDl!Gr^AMfjvrA%9m$;w+Fl213M@cu}$n06tJ_05EItk1Zz<-qpD1cDbpiHTi}M=C&)0Ao*y!aE>`?Y#*Lx?U=X}i+LTXUXmpp_t z6;z}5z_yG}?Z&KD0V{w!?|6?%F}{PkqK#f$vXFIWlwu)dPp|3R2RY#k-r9;9nb<6m zUZ0C${1`vaLOLeZLXw3WK;JtS3$+7<>&|2vs|p{wQ(S{asVYqoq5X0-U-x{EdyVIp zPTm5mjMb5TI1;%w8pf5XYAU>f@%MrvNMemI3Fi4njb0=$GFe~E*D{>(bHe=NG?*bU zC(g0$8ZyJ~9g2*!smSk*w$qB!$)iVCB{ljqm?U|fdtT`$Oqkt;nH^xx-oC+X9FZ=* zo-hrbh+Zb#K64w9#xlvbnYbd#%EmwEjB2 zo(8r>#p=-ayOKt`cPPr-s%oMX^}MFUnzBf&zRe2O4z?+;9z_{Qk@-+`qc|3&DrOU& z-X;<%jpB-X#B0sGJ`JrtiM3i^m7DHZyav|moB3LUGg>l~!mJkkn*Kx+n!i`0N~ z)dH&!lz*@mIKFJ>V&S_VEwr%5>B z?5y^kY{7HABJZIXJ=e=zHb3e+oH-et-C{v7Cn{D)^aD|Td@wATD8rc&O0@Nbe66~f zD9^{@43vjyn_V55-oSg156(l5vGiw*f*Umdq?cAC-i;z`hOJoma3TlV1!0-U|tMrgF;Mn04+F__NsczaG032KJuD=Xrxg?qoagQuw3b<@ey_6?pA& z@bUq8YjMko;1w7_%`Dpr{4D!EF*tIYA$XLLz+DYbZQ4Jz`RJ)Fzw4=8i&f48FBd4# zX1Z)x-DW#O%=umQJIu2`_t>tOXYax5cfnh0PtF5xUO`c(zzL24;hi30epl%s=JgBa zjX%%4@-gP+PdG0kHFLF1@aUkB_uxHtV6;0i?}B;pqd~9Tjd{6$26(tm1H6Rkf*ar+ z=|e8TTVyI?UL3!u7e5^I+Fjw7pVbepmMn413SK@}7D9 zKJ)UDc^^D&>n9u-xuc;uCKp<}ovKv(EvZWWQwPQ)=zYeC!AYALdkS1x5cZO*o+}KZ%$$wnu${iVYRT2K6!*_^lNY=M`%nz_0v=!O#9vRBK{~ z`o{8%rrdY1KgX^Ap0{LQKpPJh(At9qw6zxEL`vVq???;r?+m~4pMugU7pN9yUSH7< zAN#!iNHYOTFX==oExK^l(XiV5ctM_jwVsY^#j+ficKY{?C&Atw;r4J$NP5m?psp+dPYBhpZ$lyum9(W z(Y;AOSYg7G%kJ2WhuVsH=4Kp$9AP&Z=SON5H{7bw1nPp0u}nLgp)Bl=Xn zi6d(FShsm@wr!j5KR?mO`Pnpswt7cm_=LOR1MrpqDDeF!xf(WYfvEv%({bYs>4$F! z)WJpbc^H?W2(5LTf$)OD_8`^SX66TnmxMP&wtl&``G(*$EZ8GFfse3DLyYP3k6?b$ zpSuc2*pI;P@8AuIpK&p~hu)zK;@=f||4FWe9cE89Gc5Q5rMiDZ?wy$J{fSxrpi*eu z$N|g8YELnK#;x!kd@1}#fiL~%xD>{UwZ)ll$Ovg4VGbo5Z`W`7J7d8*W$;BP@*a{| zzQF2(tO>z#$-2UjbR4W_ALXN(7VK=c|eTGu*A8&~tq* zWB#fK&P^M1icbdF`}4e3)%pbQ9UP4POT};p9P7$+gKtZIDlj;EwgzoIY!m0NF{k;| z?8`i2GbQ&o_44!kUtSc`YyLLQu^TCsvLemA9--b!xP6Ix| zJb4F0%n2nYRG+Ny?Ez5p{eih+FMt`VIE^zPfH_q17>-DQdEV~vsVB-9L3wJOdm@2y zT$6b%I+-Yc9q}xbAr)DJeCWVcI5@2>28|fQD;HS>h@C05>71|`og2>yaRJ1Tm>Y(l z2=Tlm0%G{O)J&ft!+iS$9P2kH{DEt&%HX7`@sR<XJ~+7q&+v(o#!ho_QKFGH?xh#g+PQk;_)7hD9>2JwO|n_W0zyilqDH_ z$^delr(+9zI|_YJ2r^8CX+Z;!;R(hDQM|7uY^>0Q2bI&w}|lbvrf{DcBg`esNZrtYLJybDlPa zNZ$*3HdFD26ghtJkkQI8aS%Il-{}%#ONSVr<8U!S!XBRkjE@h$&Hy2sr>ul{MqA$#KQS(h7cc}FmGjx8 zas`#)jcu52o>Wc@s59H`6ZMHQ?m;%VjH<$0h+!G)tmYT23>XcIezfG&5?xw)rq3u) zUK)+hpT`bSemx82TFOBlXUB)%keMN@EG!Y_nO6;Z?*U}ZVt;9q*P~#Okx-4)1}jpP7q}X_!=%R5h!Ped0t$KJm*aQlhFEQ9)4}PDsv{~M~B}` zc+P?u^G$1*+u`9?af9}u|H%B<@Sbr8?tD23NZY^pH3o1-Bp}WaIO9HJkqZ|M>onps zwamnMem}q&jusPVqC5i!P{s)gl;_0*-cpDykvU(7Jx?OaZ5@_dIYjxK>3@9NIK$T{ zAD(^{7N?mr=$$_5GbJO+qhz9ti~v5^Gb0$--PMTlyoNAqc2ys0N;`xIdq;dW5?5l|S6fXc)^C_FHO2C->Z2jbS|YK z%%Lq|9^nw?lS*>HpdDm#6OY0kV7rf%X$dH!uJjA$8HZ8Rj0GsC!UQ7>hUGHE zUKW|>Jx;_P06DVgY4g!3NqsE1LggoHDPv`EBEG&}uiZq_m>`FlaAJ&YXqm+~fM9+nnP|02cP5ZIl>4(@Wcej%XM}0$4Lhumv&B}2+3|N`2gf{2jn4)QOCh0q+y>{ z<)-Gr8^$v)!GlcmD~UCLj1BS#6qALhxy{5GK?J}ees`u6xS$jjhvvUy$)q-djO$5; zgXc5ep$Y4d-7P>~`s~dg#|}aMaTdsjNn8rYM_*$jL=IR@_vuKKv6*M0%tc`c5E(JE z`h{c?yA^H##IruLt_sUg1IoN!CoDPTB_t(Q=NfamNG{{;0L&B0A}^=;uVFntFmuWS z0Wzl*%xh81ggLkGXTfa9c9$^6waoPaVG6yic1S<(QrO?x(2q-9)&n!TXCN0?!~KV-WMn3qJ@=FtwCekmRweuLd7zzm;sT=fi9^oD&?fEgJ8N;(~BR`IgueB39@32+4(uU9Om zDS+8P?TFlh)uBLY_s-L=%==0)TJKGm%RC4$Nz)lL(oFJ3`Jzg}{A6tn^ZNMfIkj_& zMU_>Abt0G2;qeDHvbTzRh;Gz56Xrf+$SB zvG6|0pur1v;z~!OV=HhDg%|8H)9%8m_A{OaT!SjjXMyuNmrHAN65>40!nu}o0Q2Di z$Xgpx4k%O%*bhEq8(3ozF3$v^V248o$k}ftwF6{>G$}CULvfQB<9Z#r-vs64&a5s5 zmW^;gbLyw;Zj*&b6#vrfY zG#*$P!cOL*5>Gd=daz#E(4|v)FbFY<9Z2pb11rQ_tXlAT9aXd+u=fPWHdw#)4GIw8#GREoe9Y_(p(e5`PpFc0oQ!>w)r=7a}!Ks~|J2q5Qq zE_PaZ3*-WjaS{S#7By#f)__$gu zqnQIBzfHK%py|i!iL+L!mNL*7s98FJOx8+&k&PKM2WGgLfm)@(U|jk-7$1mSfN?ns z<6+|>OnKfNa#dI+`vX-oIq8q7rG+@P)Q}3T zhGY%uEuc&lP2*J%m5elia;DS~TNZibtxb_O>kjcWv>0@5h3X8@lZnmOJbzqaJ!E+=6WNe0}6496uC+5dF zL>4|Pxg5GKn}a_Jla3|I2d7^8(c)Ps_jJ(cOUE*o`O|Z;-lQv;jC3|(103sObz;tK z%1 zU}F^ySMepp>yytW#OIVcp$U!$a;;?H4#WdzKi1iImfa?muy=Jn&0gT;X6#G}ii_eV zk+F@B2VXMEX2;Ae8rt0ixpf8$T&N+pXp}5RMvHks5#!1>32K`YW25dd(>*+9=87wj z4>T?lWczs*$a%Db^3buy#fBCN#Xzahz@o?ml-o=VIy=rlIn6)okrA|T7c^kT4k1Y1 zkQNtS{955f4JE6_1f$O90WEdLWNd~nh4oUvoDF}38l0MgXqK1GlMm~)mnho-%HQq# zStwgSP-~@QjSIl?aFP95J1L5N3@W>!q>sLG2FNh>C&>21GA0i`>MDZgc(v? zgVs3%=EmL#@7IV{Gh$TU=OKHHlDOouzEU4ZT8g-;kfXn+{S2`tJfoEJ$!7|#HTVoxqC zP$tQSP}eNFS##Ujb3@&<^ZKllFQ}~-*nNtr17qmB=8q6LBE(MykWuhkqP#x&N_w@E z>YQjeA9eYT1unQjXa~DR3JcM+NJzOVYHnEDiw!x{%$n(9J@LUs8NNqUzyM@)=Kyjb z$e5PE-Mg@MtTqT%Fqh0VXaE^82Cdd-W`NMvfYvM!&9J+~_(0tPjN4fl=W(FbO2_IJ zH02^!VHG6Gm?@YT4;qnnSvElEQ#0q3qPo?SyU2W1KZE!f{pmil3(YWI1n-e<9-NmISb%n2O_O}EN!7bk5)24y#hB=d(J4&6JdCbVCrfc^8amFGj`Vw7gX3 z18Ga1AfHr&LlTh20m#RvUT01)K@O3cLJ&8jR8dfLL(s*BGUIe^>AF-CWMt21X3X;n zXw7^9-M&H|8zV&xyx%3)vYnBTiW1W?g?{4 znI4jq33FnNtY-?nIf|X7ebYr`KHYreJKIKs!4-9kmNgrq9!E>MRnvQb4ZSF_EQT$O z%lL3yPFyiG1&tWS-Heq^+)|b>ug^VPyG|;@O+JN#{$4&-w(zQ)0dr*qxy>wgqCC(H zfoz%QUTwxyPgycloY1rpSmJvuY3WhhqcIZE0q_jL8J&2J*3sMrY@|{s`!ytH z0F0V2G!~KJVK7#(K#ZlzOe}bt#=llE2zQdmR2m>>Ns3x|=70%6hQ9_=3%ClbKt9m3 zq-6ESSs+_KkZ0v%LCZuEZPORj8yl6Y^9G$Yafa$~<+0Z~TmMbD#SAJFrb#z8Kodbm ztD`BDV!XF8xtL)ZC@0l5BPv6zG7;sdVYC^$A~pb-NYCr;f!KU=eTp=sRwNk4l%V*XQ-xEiveSd?XkVYiwG{%g^3Dzor!9Nt{&M$ z!K)yMWsZTr2*C)ZRj~3J2;&;KM7SIx{Piq^=f(CQe>*mC>6N`ea-z;zAzzDyA8vi0+!g2a1+?YpSOd zH!BQRETW7&omwCxAC*T-ovS;KnJQc!h)NJ2O0id{&zI0(+r?cvT4wI(5nn43yF)TF(ofgvK7$|Jyp&! zyTWh;i&qiK&>Kh{%S~XOIr1~cuK4SMH8h4$MM*?sxQkTg!4)Mv1b8Y?6zNK6rvf}(+<~#W9j@8@0{@4Hh zFW*1Q>kScs9z%!-Gk@5>Pj)9Dl-7Y3whBaz<0B*#g@if}CxiqHhan{7rkKzf6mVE2 zIXfXJ)OiI==r}*Y2^gE63~G2@xsg2#1chKm_qbASzb~I)IYtc8asY9hm!SdkJr zyztBwa|E###Z_dZ6GTe_5i)t)mjN*K}3nSRj zMqvK!yjJyO`vgNVV3=?ZO{} zVgSJkj-ydU#1srfjEpyE+QU`}pES@Ca{jHP3qke%S)sl`-Pk2i6P|l=)h%R7-l$5$nP1=;l`Fo#EN_% zukw!zO=~a>2KE7=D7+7coTO0fsXP zh=<+& z2Jx`RMk1!}M6|Ld;wLzH0mOpT5Fpyf`+(TP9T1V;07SH&0;ORuykJIxh+}(#hz?|`89x=5V%Z-fJr9xEYBSbc~jYi0Yg-~1Vd=D2tPba>$RQ9Xf*8c($r}Kn7lP<> z?g(OrQ3w_+ZV(-64^uM(am?H!jP3_0uZUn1fIjR~X3;ILkjgswgJVZzQz3&xUzq>` zPf)*lrp!uZSb`2}0EoFpEV@hp!E=K-1-ETtG+f}q#SPQguuA+&o#XcdTvmyD34aOZ zg!XDe(bYA6pjrif7OY_UK*3n3Fn#Y> zara6zVvhC>{$UewMLzUmqW=M!Dj?VxPocut53e1B-qsL;U(`_)0X1CSqo^Q0pdm#I zFpUM6sPWkMk}@*ZfLJpDh~^beBf$?OGdXh?OwKWN(L{{^W5r|met>|A@S!ak@YU|6 z?%~U8_|OL9cuk-gOC=9aqGTdia@e1N>s|zQ(cTYc2XY|cZ}vO^G0_76&GQzB&{xWw zaqnK=NRERPBIw9tdeM*#CB_oqOSD^DD%DfH;cyfxa5}<>J~Nzjb$AKb-tM z&MaIfAVb5k?|A~2DEwR&euyfNE5w1=@#}w-02}#0oR|F(TbPeY_(kwJBZnjW=3D~N zet;7S`1vq)aO#)j9>3)sBBogkJ+(XBm-0I>bo#(VKu64UAbKJVm0K)FG!gdW5~IYd zLwHi(<1ueh9On0U9AvtbEsYg8=OK#W2k4%Np!&DF@oU$@zd(wE4s{z_wov|1_0sw2cL+yQ((E>|yP_F@iKD|lpKCt~y1%9x8ARU`k zg7f#x+rMq$ppeD_uMn5?)^0xF8PgANCJ{gQTfooxw$CJ-Fh~qH8bnAH(`x;%M4x&F zfEENG7*6^MWHuU^!J_67q`HtdRN2_EfdZU8V*z?CKyb^T!~$MI064!w(hm?K0l#Dc zg+^w3_h;a`)Sj3kb`l^#G)(+35DUkbVTd2uW)5LKkiCF44kWSBIO0_DKq3+A(QlcU zIGn_!O6gdC^Dfeu>JQ+4va2ScbuqEtd*rU?#;f>wBPHLS z%82;~h>8ec8#_41vOfXW<#qINLPynsf&uNbL=ZA84mCn?Ji(+zb^)ZVKqeP9{IHUvtOA)(`h)oI9KIhQ76N<~1xMi5gZzC8 zVO>*?>>%j)L9PPpiuj?S_yG}}@bgaiMebf^xElEjIa|=Q6nPe=x4sTG%b_9wZ!nQT zneffWbYuAe)*#}C5f$JUa@+gQ>vDReMx$pVLD3%_G&J;}A^QiY9gOuCm_kU#FE)(6 zWD34Lu-6UvS>50(f-krP_!JJK)IKf5#rgw$K!6W-CeX8TkUm(~(ZPA*(bwxMQVFb; znc|D8C6m>-1@ydjuR@a^{vz_xPLABkt!&AckOUs&upmPn26%Hx(pZ0h=7-=xlnvC2%X%}yKF)wXw=*F|(xFK}^yaD$Uo=&NqLa$68~gbs2LgpPTX zZZ2S#0+XufgY)37+@SMXcbI^I*mN1O%p&X3et?pP(A9)HmlQ<%GjClz57c|%d3KjM zF9qztCW&$*h^N4tO{WC?zJxEavm@h{Kw~jq>UD#-wB=kNV!}>_2%-7f1YezVpvCqB zR6BsrN6UiG?GpxRT{%ojS|O{Q!>+(WB;iMG4%cJ$iACo?-Br+BR9GZbyMtEU2iBi`hMZ zmzeQOh2d9g0MFDbjYBU}&tYJfm`DJva>p)(f!%zzI=LTU#{qVh#>Opv-*lDMHFMC_ zpi>##kUeBUbOpi-UZT+ce!z@XW7A7iM}8Vz(o#{VxO#OF`(R zX`&$cAK<+Kdch;l3vxEwFT8cN+=i!IJ;z0`FF{lvDvTSfdD=+z*v zjLwHQPY*OrK##Tc_&5>}bxsqT{14FC5Io2>1H69l?+?9ovD}m`;c+A(WWdL*DSlVL zm)M-E$cu7UBIMS@oafyP$`)L}wuNaPwQ*1apiCEq-JDfE`5$1a0d^5nS-`IQr2Ca; zZjD`l+rcpea2gXjwDZ7yGeH;GorZEQpv#Q8GKgA@A`?iZLNGkBm2V)Ig51-qlX{@#5_e6 zaL?+SiDD)tv`4Gn3LP9I+9K9bPmjQYSCo<4GnBz+83b{B~jnl`OZ2$)SW>a%$ zBzk@nV>P4XFTHj(Deom7QO#MNt zdEi&`9KRnRg8_ayqGPt>cQn0~*5&bj7vP)Ori&1i@Fg|IBL)F{P`l?SC><7XRMH2j zl)?2ZJ?6|2(6;Sehm9W9aP;u*{KS)FGp`Zej;1;xb^Dv6u?jubf6S3pX_hrnimj zqLvFrcfSwoW0mQ^AXn?qS244CB!WDv7gk5g?zUGu{ja_OSp7ITq zHO^8d5=8^Ms!eMG&qSq=;i7<3qF{nuBS?vJ?hw`+;5qHuf)mlkSVCF}9H;aHTq*#s zfscpi9Smlrburx04S~;lClWS*msQ|N!p>D;ru<)*K-{zc`xFD%Dds ztBE|maSWK?`T3ETet;r{;8iq+LBaZ9CM&H=;jVki{jveG9BPtPOV2kI$UGyB0tP|i zm$h*lA&K|k6C-+sE6SMVgkxZzw5#``6#*|1DEeMEHJC229W_DrtYCugmP{e?jID ztWy}C1C21*yNq)@XdWqdsNLB;TKwnuMVrai!g_oqADO937^Im%h!_j8XL9B*_?Z)K8z=YFdH+TeB5JX9{TJ(Uy2H8Iaax{hh6T#8h!*srdI{ zsQ|W8%0Gga?I^vn)@Q&~;L-o1bFbjsL&e6ZmM(H{Hj*{+q8DcOsEe2ANAW#s=Nh$7Ky)Ibk~A3JzG7G|n{CuXX^0Yaz|;mn>(Cao17j?Glw z&6Ia$vYDC6m(5f^m}z08Y3IV<+NtNj#ol~3QaWsAO6ztA#zXAJM!TG24KJV?>RGhM zWW3$Mg@SKU!X2u7@g9yY(@T($cw`eqB`rB77@;-FQC+A)*!!#cxr&4c&%9jj^n=Mx zl2(TLyKyDR#$3ChP}<-3t)w-30e4gR)^7UWdFU1HrutzwwX@yS{%(8-B!;0k3c~m! zpS+#<5aY;0VB)B^_I5Wx8-;c<3Sdz-?@r=EXo<@o&$B=6Pd)oT<#K9Y^C5mcW&iu% zw57m`NpBD0KPBx0&viq|_q@F{@%G}Cj(PiI-vr~D5e>^c6CT?+qn z`}gCY_nyVrW3f~=gTwU2BhQ1Ge;rIW|NUdog+A!kmh9W%5Sge%#&)@wIAAhxXv)vSxZw>eV``17IyZ;;D|Mjo`?|=RE^5@ro`Ah#x z^Z)%Y!!rZcJ^=gt$DjYx1AgrP@DF@%JpWJnE#3~T?b~j^pRk!0bh&hBD~d^JcSGeh zxi-j)FuIc|5&Vwqr>Dck9=>*WwAb|0M59MG33<2JLp@mRF&-}Vn5T;!yj#c-1#s^) z4%WfZGcpP$)#<%)iViIj7&pTsm5#_m3Z^bxE1a0;Kn%*blCbR82FVZ;ZXXv!S%_BK zto{@fyrn-}yvAP&-y@ZqBkQ9bQ~ciQkM(=2KkboDM@Z*mr1KQ%giTH%ar76nRfjDk z7-nwhi-!l4K+CJ?Tktn7qj91>o7q5ug81O8uP)ZKnIZp zAu!p1J<`-7PssxuAb)JGRd8(j;|zEdS4I?nTFiE*?|INSP2g+ags*-RzP5+29l%%I zA$-Lx;LDOm0}X!7Km)B9>PL=h)I%-u5x{h$BV}hWV)4gY5g4kf4`k`U`M}cyi?X}; zRV5@e_I-T4u}6@uQU7v%4pB6kb=tqT6J=^Zx~6VJepBM--xDgJww zDeilgDSl^};*Tt2$Ck0VWuyt;EtAPmKq?L>HL|lFyqpPsVCkD0#ZT~s6ZE%L4ar?F zcO-So7{?&k(`9jd{`T5Tc~?i;j(|hSkNTC2`26;D?tV0;>n-uc%4Ui2%KFh}ddu-u_#^)9 zfv=qy;G0)u`Q{Z__E%&%x+2T*6!2(8D^!r9lFm3kqYd3FKyxvV1uDR zB8(sucAgDV8B=}euhPT&>y2$KT+vmGyP7BUeDlZK(!mFm>o@Pl`pvts?(fEWbT`)H zyRk0rM$G2*6U7-@Cg^oUv{WE9|19?bouTLeWut`%l;G6qMH4{2d6m^~US;*;RW=Q? zYjn3^cD=psj>Bvs;x)~o`ZhEA; z$YE2&(HO(RDXQE1^MBt`pn7Bql-W@H>-g{U`#O%7Yi~5?zOXl%i?@5DIXmAQErWDzG%{qjJItG_U)~!W zB^7|_=HX~}H1Ga~cSrk}_uu|0?srEsceFd2**r~xW`)*w2L-v`$^p-tdf0nO;GY@X zadkolcAWZNYnz=0iR&43Q+VNc-B{Wmzjd;(+s%~E`ND1%zqhc1ePv<4k6LWs7Qf)7 z6m06gu0bteyEDH<_vLl{hF$pZ>EW7=f6Fzm7I!tT77uD(EgjapTAJ6qpa=nD1W;jk z@@#r^U?BVP{I(p?6i*cdGQQ#^4|>gHb>{Dts#^M9sjB6#l&V_(RH|zE3#BRoQu9FM z;Mgtpjbrx%njaqym+0S4r{s}I_L+-zl(}ffnTxi{Tx5zwy_Cyk9TXzy4cWq5Zf29OMP(_d#C&$D<&x|8t$!QZXL`f#*bGFLt1^jqUvi zMQWXrWGH{?1?0m%T%Ez$w_>{f`ftT_{q^-Lt25ljbp0RP7i#?gBjka`!SW1eG2P(8 z!36#XDBnLlT$|ymjYri3ptvhOX??7p%@bNsYKvwh(J1tzs_ptRi*&1)HA(%5^l z6@SDt-##5K)ABbQTlL@GcFVNHgJoLX;WDk$*eW?_*x#o}eQk7=1on|yDDQWCPV5o^ zwfKWx@t~JXR%mnITcI_6Z-qAd$_j1y(+X|pF%scG!;}Eokv|2$?ml#E=zR2rNY)L> zj}J$y)Bi1Z2KL|nbClHoX&)s8f7lt=|2fWAXXHq63Yq*lg{5|6P<(w~o`#l*Ch;k~ z;z2JtUY`DY{e1oR`&N+D-~S6iQh(KLkktPne_?q><)#G4PMtjXvwpt9J|!HWAFymU z4~Gl%%iVnTZ?BuL|Mq#eKo7bYfI&AkxJ`3zAw;}7{)8Pch6RaZGkp64L{@| zc&JxA@FkN4`n_(0{`=MMEztCp5XoovX@RCMgh<3A+5lu1#rJoOUtOR#SblssT%bAs zEuWxy7b5v`5F+_<7$W&H50M}>ibkdeHmS-U(kjA~_b7gA97ColOYa6RdeEyTi?n_( zQu6hCk&>@piIjZ%6e;=kg-D5*U~WgC?AB<@XVu#JUakEA=grgMDs6wm^{-%V7c7}O z2$swp221AW!4fEN%-<*K4cDzpDHJq-Qs+wCQjyIT!0-m@Tl$OZ~Jexra8h2%wq3klQf8=l{++|S85qhqSu%0c9?qo__;EW ziSVPh8vhJqpf%ehTM9Z%yyOj0y~+FMf80@lyPsXPzPDFlC*e4Yv|LRX_rwXN{_Y+m zP%9>oN8MK{-seCP`u?M!rwk{{N&dZ?@V<~9?E#lsL8^~)B&2L7Vb~qNF4~-%&;M~c z?bh*~(lhlS`nUVvNes6A-(Oz;>tFuet?~c)*I)ki&;RwmgU(2et`?){OFukPt{*>r z`0xq{)1p&5R&-fzdl!EMen9^t;0pZZKmVs+|DwO;zy1&Zur22Q?fp}}9xv+OupL6% zU;H2c|M2I3`CtBX_c2}{^b7o_*XKX~?qB%J zpa0{(yua+>|J8rRfA|mo-~Z?TgMWHA3n2Rs|L))YyQOiWE6IUVm^EW_(aOh9A3nUI zAuZ}c_tVH<>OUKYnab}N=dC)(@getpwAC07U82ux%~7kz8_Aqvb6_n*=Um8?Y#X0EeE6zI4HL{k;>nSgQ~A5vG_T(@Osh3_7Y0X~PtG;C*&jZA`0$GE?{pU$)BZJe zAIWTIo$q=BrLK>(P>cJ!x^Vu-?^>s|ZV6p24mrm`r10_cx7QdY_u72|8Da~&8>fEP zAE+n(Kr6nK|0~}(trky>SO<1-*W=6G=i5tq;EORmY#tDzY-zO**7>eKQ1jY4)+6%v zf8{%;j;q$lG1lPby7w%KvNY&L{G}^xF9JIA_;QB#Y(%+MP{+9#$d`Pf{uMBnc zSA9ybhOZ2Dq((hUkcnbA`%^A3tYxWGtR0*b;m)k@U`#U>BS{`2VdSYx2DjK9+)hyXWr>pl(WXYU?*T;MI-=cp1~BFoEt_exQ1Vw$cLs^_xL zvGlmxB2#-e4}aVl>8cQ@bGC=+LI@fsah-^b05WzXC5bi{G0s%uOho@ug190EyO`sI zc#mTnHU26{Cuh6ER5Q3KN~NqNq{;BrhF@O-7YX#`URs#}KP;1EKZpL;f$t)S*alL| zf4U3Od3^BT?@nYw=)Z6U0RpMxyWQ@Y6Qcn^g$HyR1@eKyjSfzSXfa>Hib)1t1j42b;ieL(s$cXX)Kb&ta4mMsQ# zLN`RUbeBL};i&-Y3S^cnq1tnw1Nnxu2#}4t8$9SJx~w6OKLI%g+`$!5&^hhn9`khp zcXVa=Cbe5kc5@eQ)G1)(KrsYjc6l2zI{x$PU;odyhEWI5+F>5O?0eM0TCIy~Ld6|} z;2iCqv4R|u{@}vUAq19^ik`|4!R%Q%hRoswi%s2!yn`xNV!vwc-+*ce&cR1?ypcCa zBJ_9G9s@K9JbH=yF_?JtfxQ50y|L2(N#@{|sSD%z)Mi+mS5=a+IJw1k^*e zg515WsdL1+NVcqdoc5)p+XtulR0v+c%_S9?euKt~M>aG+Y`8XIUYgLZGNC!Jo4|z8 z?OlkqPT4SFs<5E<>5f;Q!GaiR^wd9zlq&O5(?gp9_8@!-FG46MQ6$WRb(1BIJM~K) zj6{+EL18geo$K%l`kVAk8X@s$_oC=Z&=L^~TD;5B|03~FD|b*^lEs?8eHf#b&}O0m zv*^4a{sIFglK~?VYScnZOA9Wf(td@f<}b5g0mUvXSa$W`5bP@k?2exm{(-Qd(SpSa zEr@&E)0zQ3U$k5=2T8 zw_ta6u>}KyN=x*fDvQDJrC>Em**$c(vswQ1Boi7IN+z8!344YKOOpvHyh9U)wF%?W zgzhR624DsgHgA4!!~6vs#*T@JTp4o%eV+u>wfYqUZe-Yy_M|jc!#QOUxBSvq!3|l_~cSej~abKd3Bo@?0 z3=RSMV}jrjZ=`NSUui^MhW+TK5j}O2pg28r;kYaNf!eeYaTfOjGRU=X5j>l&$%w8m z1SoSdaLE)9>PAG+1|w1(r;%IM$a&RYf!*D$2C22%C)qF-vJruAm|9s;HViT$9d+KT zb!o%6a%g_l*UM}O$y3^}+TH_?UvX#xuEPwWXxPwVh7F@bGfb;=XlSsM`l5m$q(cj2pm0?zZmkJk#w;}F0FsoBO&qIP4vkH}5 zx7h7{3vy@Vy8!3axchJpf*DgBQ-xBx!DKEAw+}L1##YUs2j}ScX1Y3dpZDV$JUKy= zTbl0qD$`|<&C_%#>|L4k6<5YO+#n$J9H#SDVLIJ{6`qW1w4E^o><2b&r_F~5M4T~! zt+6I%U4(Z5yKij18qqD5MKKJcLR67i9wez?zrs)wtqL$7d*dV*n8`f-5D+hYev$!8 zq8~$PWSsd}2x8Kw0ed(ppQx>m&lHyi{B@ZDYrkY@z*^hhfM4-rJR*2NLj$@@1G>I~ zaWLZebUZPG@d|X5=O~fUL}>VmC$%nw2XSIH1?UJ8OddtYv+sjD2sCs1rM@Bzw6aN; zWj{azB7dU|Yo;4x@tUYdzB5rr418$+vi~NSDY9h$c`L_1^X3cjrmkq5bV;V^+k?`7A%bDW1t1$qWa8! z^nQBdz+?`Z{sNN6fmp(~EZv$gU#v8rm#YIick3mTKTJv8N(E!MxiVLi5@JjB)02$X zBK?=>$R=Ed@lqSc^Klq&9nEK38n0euJnF~NdVAUI{#$*;e{pnQ%xm%k(v*#?p0FN_ z$LJ4oGDNNlO+nle0)-Ww+nP%VkW&b`haP{nq|Q{M$=nuYYVR2mr~1R7OYu! zpl>PcE%+7p1&Zh0gkC0uH_=U4kmN+bt)mgHIqyIQ{f|Z4&jRJEX~7FM$&T(08^tm`CpaZCH9tL)d9!bC=|rGUF&Yc z9JQfaS)ZY$E^QbtvmwaAVMFlj>}*)w7i?G&#dmK|dR7=!Y2b*U3F*V|q=cSTP`O+Z z^xc9faJa=_!Ae8xaDj8)W_s5qXN7cB(jE%U19Q zaSJS1lQy9zUq&rD`})m*3pB`R(SLrD36rBE(_Lc@vT-{*_*cV*Zd`#nW9kbwEC)I5TEAe!(%-@4RG>=HuOR~qFJr+-XH+KSbaLhHDo(r56{@VTKV%I3 z!GM`XUzQBb@STjpVL#r1Oh9|8;J|uC#>4Sib<=T!W5-buG9VD}pPt5)Ax+n~`=C)y z(?yf%VjOp1S?6JzTbM4E-`uRa?oi`v;l78}nCC-5_ufp(f#~xr_pC-xQUgvYsuBIDM#ByiO!_f; zM^+};KQjqhlP)du@LsvwkdG_358I3=eVCfC)SOq=z;coKLK#6|UZ0*VF3tCPmHB#@ zUS+=+_DSsa6&EIl1p7tVFBaMlX(%YDLLRrVjBAk>V8sUQcMV+_Pk#oP>4!x68b8+i zSO6VnRb44Hrh88(Mfv8`gylLwUK%hS899h7HTU{VKYzxG<@^iYUYl8+HUxt!umi17_7J zbO2Qz*s!!j8z$N?P@*$YrzbM4#-IYV2fR$2dV$FRDFt;ChD;Oo(^4kv8$6%{Z+t1z z*D#?h=&|i0V!J@!_tTRsSfv6*6X}RW?q~C1wq84w?H3k|&XyK@y3B&zv8M%--zT%9 z`-%_Kk55<-W7ViiWEij?i!>mHm_=k@3?oX$=ecMPDyVntkIanfz1mVzW%>q{fo_x# z(B8s*Rr|%3AOh8x^zM#NzpVml`Z6_2$=!ZIH&?$HkU=e#Cc}{S?UM}HaGe%*zK8-4 z_KQjO^TQc>OTEqPH}_v^hxgZ2_DfkYMCvZx-h5wiUt(qq;fMKPJ%-60;tK20Vm8dj zNFgf^qasB~lu0W|bqQ_1O7UE#$8^vA2@){<@Iw^XZ#`6fFhk!@y;zig%a2rz>Bckd zJ`gGtsJh-mr>;AtpPumR!^E^5d#obX1dLZk7RI|UjJG^KVLob4u_@Z*vOHGpzN)%>*b>RSHtBx`f}P-Y zVEZ{Jgk`xNbbmaypNral(K8d{Mb^+*J}jgTam>`+KFNX}>W_#laAKs*gl)tRZWN|k z3TqR_g$aGBmzl5)FSMULes9CCcrgLvb&+jCs7q9CK}Z?FhA?4-q0BJ^%&aTr%x((D zTy{;Ps|XiR9mNL&IY{?2Yy@^_>Ew(*G?igN+?p^Tin+#2?~@4rO<#qr8(j^^{syycNdPV`m5QqKgZLq8eQBi#VVx1n;7 z)%+V_KW;gLbQb*=@qkw`kzg02fY?4g$$9~4wZd4^F+oe~#Wt+x#`PDMdF;4o?JdET zbd~jLh{}WJwkN!c_7(R92>=w~(0HaB%;aUjdh}nIXz@)3G~R#^lEl9-kCqgz z{gQZn7F8EA`*B&6z^_?gJoXTF<0V;7hbPo<;W?SC$6O320T7h3$>QUatj8`!W)Rum zm}I?@Wj!S2Wxe&`x#;S>)OwA2Z^#MTK8qdgE8a`@*MPB+3duP-pC}bzdW`Oi+{(%b zFf$VazP)ifnTn`%9)e;oCPzkdOC)lM?+cM!)Os^R5g4!U5rpHY$QzO>=o~E!9nkxY zlCDP`7Tz!m6d#{tJrrSJy`=kE+0W#>tXJ{~{+5}uxM=8w@h&St^n+coU&($SIfSox zFBtqs{msad)FQ3t=!u}gjT$Fl^kwLm$VitF2eN(z=P#-VhkP>H&6w{*9O86^Au8$H zG*X5elVl~rfarjv0X=tLWd0gGz_3|ia?Mjzp;A5)HVf=A{P-jb=0N8q(y?+@#^F8o zUv4A#3+v!v(a>A$ce$tn(cLy=5^2J=PhiLJ73T$Y_=r3Jv)MhwMwyka9Ig&rAdx0y z@-wkGl!NvkdR<&&`XeJp#TGVIjoRB?l!jtBlc5DQCs>f8u^6-n+=GGnYeO;x7RLW1SIv;Q+aaOZyi4@dU;_#yUKnZWI%yc(Om{K#;>?8 zIDk=ovqt+FXC$h25Vkj}s%&#dx`(ewW%Eo3-uP!3wkR52uX~4|rKjU;W4t+xM zy(Ud{c}z&C-##+89c;8?Q&EBjr2SA!u4q`I&9Dq^pJc&m^k0&i0yYbl;lHGj4#yq7 zvf!eVx7cg(mst=CkQU74z=Ws%OJnakif^)D;RYt;tefIG0CnXqZq=otoIk)2t@#GAYI+*Q`I?mEzV-G|@D4(Cn0jZH&{&xZ9l z7ML~YP?5mKpdZ3G#(rqLM*C@&UX79dllPAkizLcNW*h@{1M2RsRB(c#OP?}UuwE`Y zK7GF&gPPy)eaLQCP$Ws|3jR#uj#iER_Q_G5+Ie~~S^3tW;2mF<{cPNSwvHYaoxI(C z`S(@!>(Q?6zkWgQ6ENqUycoY?@PIlyJH}wY#7ttXl;dWS#q;#+*F4Qf>jgATaP9y- zRBXWvUiH4f7Vf}E5ChKPE-FcaxfzPyr!<60LZ+B<)9wol5-4g7`%xf{8#=Snc=I6h zd94cmk}25edn>YD*f!rfcvy7tW_!smml<#PF0F)p>~P-1+f;iGOmc8mHgF~vX<;-m zP>ce$3(R~X1ScCVt%pPKF`!|haM+V0eX196Z)m$=Mh4y|!#4F#!=H(2Z*R0+DZ2Ss zIw~g51@1^yT^C1fxP2I=YxG6rKoJVsMv?10z|yNoASRQofto2Cgc@W_r^s$yEV zR_?vrc=Lsz*&y7W!H*7XoVhd^>ldCS;L2V#d`J59AOq4wNawIEXBe=!It*xI_xbhF zxoF`{-GWb7SujClofeE?A3EeOI4)=(L`8uHjD@qEzB2eO$Xr)WSED2f1F|G5rM7}* z+(%t}sj7c=REiwyhMs9`#not!P^Vwz)n{Y4L^Aa1z-GfCttZDt=V-+`Rg~j*4VFMN-5{GjO z@4igmh4-EJ4E@x!3$hNz)@-}h0p@8zGR==#pCd0kESS6F5P0e$Ps8I=H61J*g9UL0 z!(mN4Kb^8Kp?_N&ZcU_m&Fzy6h#7FC!-4m2Qz#RYyH6 zSjQ2H*p?>T=9XqAoI5ble&u?V3H!>|CFs*Z?z()zgW*K{a4b3c$FW>y6WN~+wtwWM z8iPM*;CMm?6LMra)q!7@h^y*-POW^bBvnQe+`mk8Cm6669ili>gO@8pz9AT}%7?KK z`fo^PBAgOAetMDtM^VujiH;0x^-RB@<~Q!Z^$cfRH1NWJ+8yEOt9MT434i<+{Q6N3hK zP8{hFP5nDTK2sI;_d^91EOKHH+qb?EWit!y(~~R+LVB36G8_%cfFiu13F~MFUdQi? z2Ht4>NV>{^6$u6y&}^^g73&wA7}nnb2W66wsYZCrS{j;a(XhlFC}|pFnix4Lrnhj2 zX6!()6>tZJ;bmB%S88md#{iE&aKE8Qo|vdQFIXueOHdDtD!X|(^#lthj?L#HM+Vx} z7+#W-gTvtVNfyLX!z$wVXo!m8F;OTBYO1NW^&z_G--QX|RVM5avF<@jc^^sCFZeMm zzXy?rK#7Bcxj}mn24u<%`qq$WVqa2%kiBQ5X9~Ab?iHuU80kyO$bbNmKyJU_;(-(* zz?PNX)PH3jqKR6LaBUL|$SOXP-+?SZS=S&s48bQ>M`pl2J;{P-6^8{G*u>GqQO6c6 zX|v!ul329yf?)BoB1Gdxfd$*%k!fFWWP~8 zMa6(yk341X6>`sJT58yvz1mQ8AgtrUWdC7@p(KCsbS)S(v6!JtC#@B8i zWI5XoZ|v=;6byDHEtk?*5OsO=rA6zmfo=FQ%OOiCUWd3h+!ve|-&ZoKrnDTgT&Rtc z0;UFDeQX1S+W|HXj>D%wIr7Bxb>q2No2M!gTL2TsFPV{1r>2XWQ;|?;zhn3&S$K3A z1~GxFz zH01FEUG#klJGn3TF0OFz^*8|V7^fk~y1^D`=Ds*<&iaG81(Pv=NW5HFLRY^bT??zD zI+4|yPi-s5c^J^Q`HgoX@fyUb9O))8A>-A*%ML&klX)IEnas#(`|(Kz1dH2)x*bg% zGF%CM7|^F-z-1C9E&6xOa(cbWfY7m%0rNhMo%|Pk7Y@OTGoZ2IhqZAvbD{iRL{MnF z_#DgcXtzg-xgjjaS1=rnEVhYC3roO@(*v%4Ae${Gbh!x)xwkR$$Jm;i(2v$NL0Nu=s3Pgfe0Y!rljjyprVvG82$mWx7zPy##@?0|oVzZ*Tkz#F3$n$}NblD6 z7Cd!b=-PAWE5NhEXy#U>A>Clu2nwm%*66r+Mh`d)ajJ5--74)zYHJ+A(w1v7U)4yp z@d8Acg0%UYvr_JO$|~+Ip5dR940p*zEjmV3N2nX!*qQ;%vYsiWz@fB{pUP+) zo2fkdks6W*%O$$a=-#vF8=_E;+)iftf<6*VikoAn4`YN*CBy!|v7rB2( zE>dw;>Y^hPwoXa(n58N&1r?@uX;7bTA7rO0M;H16k0W&Vab#EA;3%l;3C*28{-@Y%~yw?)mGEr6J2i8@{|H$AE{^BZmF?SzB7*KppHR6(S~W>`wQO_K{4qvalmhJ@Xeg`Gc!)<( zNES)k45E~K^-|uAH)c*4Z1w@ZZMr98f^CYgxaq;-9Qaa#w0#A6j7kLnP1S*F3`18U zc5q1WVFp1)u|^jnP**q<&ZgJEhT7;konA)>>)C)#dVvTwq`q+){)-=y$zj(24m2|i z*Zqz>x=9lcNQAM&u-?Z+ClqEtQ%gaG77_{Ur2%Uz@JXx;Ld-fAuAzFLL==h(FF}L@ zUD=ZK5Q#G$hnPY);*iqS-_-4PPyOGai!elh%cB@aE46*=z1Hf-Po>t2RZ2~c#$N^N ztDr!fj(6z~NGez+Yo@=CV5W-uN>W-kV&m9zo8SjlOB7u-w$Sa9PF>SK)H?}%^p`Yh zmz1F^%vcUU_unSeO~(XyqgM(R1!DrgPP@?({UGIidNQJM^<+e_F0Ps!>3-G*W{=K4kH7!bSP?C`$x!u7b7>wlGnUqdf2j zIR%xYF7_rpjf!gp@YOau>9H_ZjlLHRZ=$CUlliC;4TCir6m)aw;iWDXGMMD8FaF(X zZx4gs#m8;T3}!>U*0T}x&~EcK>Tb7`;#GFTm>ta){62@d?xKEB0>enRdPe{Tm$9t) z@lj@DNSiel)-93*NwZ3`p%0J*q2YtsATs7Twji@X9bD9Rqsr%0#I1Dl1IHX_HVB8q z5zR0gx>ZS5CQCU?q-|zuEW0J|}w2pB`no?8G155QqnLKX`H%({$we#BG#5m<}V_*tNrO84u`V zfgwBsI@kvF9&9(dNwiyr-Pj9L)C+@=*v1Q~>Bpqohe1mhRZ@zX=d&l%R)vPdq21<< z)4x-7@%1XZ^~D-xH(&Pm)w*#SNVG9)=V&O`bT^=T_0yy5#wi`IunQiE*J?)77wqOM zxph!Of47_O;X6zPFN~IJcmx*#PCjaDL(PTEf&nF=I zZHDj|cVhCxX6>F)lTy$HnskAC5rbLXyyTCk%}~-!`eFv>fa5J$*bn$-ueXQ6{oh7& znc@KDG?5`V-fHvq=-1cMJ-e&y6_FN(y?kx^3+|*nddvws-B*RP8>A|_eHg6|PU(=K z6H-@QH=&QT7h1V0H_f}nI0IeSutkfZpk5$|fwZPPc+O;TVA6>w99_7e1Hhs{z~20Q zA;FdIN=jq03v~5lOg;3suxXxa-VgoyTtc*~43^My9wo`O4*^d4p&!E#O-M9RPU4m- z`^V97WZGXrCnGs+U^CMm>v7dR`l9WF%@W$EnT!}VN8xuZ(JNf&fKgG4xm zmP_sd8@w9r^W*5(jM{A+r9@{~ep4Iz<4(#(8Zv*kT*%x27^kD7jD&}=U5@3(cIvwy4kBLM}!u!#T# zLW7?kx6xRk09uSN2%+ItCRz>ojKrb*&1&dnr7SYK#Ar1nFGYTf#y(oD$)Lz6%2Q0x zO~DZYD`oaIJ5r-kf=>(*v3S~XuaAX>=(#=%AOliWTIDghe;z(%7DH?qMc>HGFRk<{zmU{IUJnV845 zhI_4X380w|ks6Og#?fxejr5Zl_6pQ#j?TXs5*_Go5%$gFu$XDu&*_)bcrwNXkKO)x zC-cioPN7_7F%N2tNM6Iez4F>#F(@kqr6w#!Kc?K`?s4N@iNj!xQChP)=!YXshAk9H zzWr{r%(~-n@t`r{M>UUX0{2d{Tc9?oNqMVrtre=MK!t-un>ZU4T_Uu8AJpGT{OJ(F}^w=fS5XyjNc4K>C~W6GbNHqNS{ z*37wIj9$q1_e}ruZn_6GSomPIgzUdsb!fNBT4`jPD%EH-$bZK+IktnLUk?H|uob#0 zF?m-Ri8G^>Gzz^L?d@S0jU<{$(M(X4UKz9_tL1t7@=HI|L%hmrAq__)msIywi)*Wu zQPDt4WR@HjZ-P%x8^>SOR%^;SwBh!9y8VteZZstKar$lnTjlwPUTK!^kw0!a z?4q(&Z5RVob5uv9)vPgpqEiz6tZ!C(dl*(j1p&;>eS#Q=cCk8r&S)))KO4>cX@q%lMI&eEhjW5D@^!**X zPXc4OcjHkdp>4%BNP>}4ojo_mB@gLrv@>8Op%3Bx1dJTE#E`2`_gk4XvBvPW>E0g3 zrfVh{MmhhXsI;4oo&P-VQhu@YWUp5lE=Sh4F;*Dc-f($sI1(c=g+NQ?qNe%+=l}L` zlU0c0Y(>Lx9OAx>!;dhWSJ|c14~7E|6lnLipbewwjzoUw(8H0)n2+8AH!*w5Wjbo~ zVO3$cHQ|<1V?rd8%P`%C2mQ?MT}O&YD+UNdLbLw{$EKV5CeOcnEdF$r=}H*BNj#9- z&g%wcV~#;ROf(%i^pLaAJ@@f()1t|vcToqXcZ%H1anE(Ly?c}3SxNU)`PD&IVY0&H zFxq>VqGtvJ4QsmUWGb|HwZ^VkTBf`ksoaCS%Qd~apz2ElgheZ1p1J^rC0N%{8W7FlR<+ID!&^p=?S z^Wjg(Fg+JZ!4>^Gq3wWTc0WW`TR6~C1b*%j)p?=Z-JJXOls;BrLZfTRTT zO>r{W_(K~xPUGfxi5eW2+5x`VzSpXlj!j&5iiG?~U!L zXb**|5SjYe0iEtEwkCS;zg|Z(;E3uWAVp;#lL(R-Q7 zYka;6u@)ft!)}9p4_}TaaeO3T)XfG1dmaK8wL82Rh$OAMfO)syYc1}Y zDlGu>J+u*GeqS}p=`5q|aBZTwRzW1HYSg8Kj#Kg)!%;^qxZE(uokk-?O`jhJRR*fY zoQ}+VAG||8j@ag1cCR5nh3Bg@hpJ0|GAr$E3Gm z+9x!r#NC6PiNqak%udkPZKVv6zun{DLqe?-JX?3D_Tp`NxOxoOJdgS-hmbA<40BqB zY)B7n_kf+8|6m)UUGU3{wm0jyd+|NFVvgMSuquCr%YnD`^<5B4E6#pPo4@+P@(>nIXolu zpk!7)KMvkPLzyR3=rVyh1++lNM}PT&oM9rRL^R@6^L{2Kmy@I4GJ4`0X*oc~gnIgQ-!Xs^iVGb}tmsR@#Kn2H}pi7n>* z9b8Y)MvU)4LSE%DQ72#?79|y&EbA%uJa31(F0BxAR<^6(H=u3X$9r{={(D!FHrDPl z8R#N;brW44mH!e+ToMxx8mYuguzYRwk|IA0McX^llp_U$0i>IUf8>w(Z^yvpzy4l{ z1@mfsIYtNGtbG7;#=D4QRP|VQqx%Y%*6q{qeNf5C%-WGrA0(&ve$gUqt6y2Oj}K$i zmD+<4X}DubEi!e8+JVC!3yJ$Ga8fdi{My^YKT;fpgOXW!#6$es59GrlC|@u-7aGbs z`(cp0ZY~Psiqecb2D{N49L?0?VUlnHoe#RKR3u8H=K=md>VPp5a*P0rtt7E9-lT91 zeHZ`vkvpYwF14|6$A%5^t@wQG&bA*&odH`<-pEF^=l$KeZUhQsnM1x3qB-iguWS_o zKQ9=u3m98Gm2A-#1$;vq6G!B{$Bb1>OtO&!KnUXmB@?Bwz28Ou`EelJ&s{jqg~hun zMj|)yf7>d}mQ%V4Vf32|;h1*_mvzeyRi1$`bK8j6k+9HMIj-D77OTLqz=xpOw9Lzo zBd~!|ZH*8^r-uy z;}^j0@SG^~mX!{0_g$|77!7g6*XNygR{Y5&hbjC1S9;{pS;0tRGBn9-1)_^cIHFts zPJRDMB~VYbIKdl%C=Uw(j7fb`#tG5=;{dpN%xDG*E>+;bs$d# z!hP8sAbfJwamwfsP6Rspk%l%P48aZvVHL79q05SDsW>aEGJ*+{NNE2CzR+m_zHHlb z?8=kMrj+Sg{rtG$8?b=0ac5xi6SU3MALF~a=zRQr6~1Ocu0#(7cG<*YCl?*XH+W0w z2+UIO6SXN2_Cy%tG*M(h;N>bK>54T>S*nP+Q-*mwW|4y|Iu)QSM^HaKZ3t(qU}S|z z-6DjKODV=&yFh==z@6|=nhgbbiq@ZjA+)|hYebuzCnu@Ghg8JPw^PqyeRGcjxSe1o1m*i zXycxswyax0NH~A5;0wExDI}f_ASBG>)5x~Ly^=qd9xPbqb0K2^kQwb*>nV=u^Y!XSB z0zd{r{)3m4U3e32>33Mwc(ETMIc!35Jenh=0RS)>HXAi3$;jq8I^1&n{I~(!qnk>X zjidWbTF%F(L-+x{3n1LQ4hNUY0l+7nlT2wl%PjlPygM z`>-qhl;ehptte~avm#$HxF3->!x=%)i7>q~cn~Hhm6M2eA(C2XT6#9pUDNOFCheSRDedlu@N)-brSsKRl4NX%PEu4CMZpanKv zbS3SH_{&)b38<>nQmqDOdI>sTscJ&m3Pcr@{LMU|1Bye?jgr<{BmFK0?a3d2;{+`w zfsnGtFw+(M^td4$&>mH_h?`P9$3sMAL22~TZ}e~#zy>mHBJAA(!Y3^!(2_8)N#Ehm zM|%wfjl6WVaBkMj68|RYim#L*=}Kukl!1XSGIM&>a}zDCXos51awb;bC?WRGh^6Lu$>{`2DoF3(>km@yK@iY9{o5TVv7d= zpEXq`cxfQj!w>=vU>m1E;SCqb#|DBZw9hBbPYq4+DsF#7Cji(gm$3QqQk@8J!hk5N z8#j*|z(uq=0vOpIlJ6fPJnuTWj`j-(hrnzPx|;p2>!h4g+92~w2~K#@=%9o@%jrKs zY)H7L%7tkToxh-87F=Qy!lI36pWv9>(C>pVChWjz?o8qNPmcp)WbdV0hW_hJh`}*; z2=V-q%lS3DUIlUTBjwYBxdVt#ZaHX*Gp0l9UW152(=mZUCxQd2c{9fl(-0s7z7%;7 zfqe{P2$3zEl@vo%MAf0oxy6r98@7hnF>CoE%mcRm_<)$Vom`7;t|QlTG!s|Pm|{@u zXHOXBJsSGNs!j-y`v6-QOk}Vgs>pwni z_;M61vY93K!vo4T@$hu0^Olp>lwZQjRq)o7mFNk!?>VmSj9U(ChSH&h#OGm?dKr4K zC}HA6OsWDws4j*fcvpxoXG-l-mg8~^$&h5(n-QH|lx0k$VxucCXmi~+^yIG$W3+Lr;YL->a7QZiMyJMp|T zYfhJoGY0@SD#JrPmLdC1K}_LECB~b_4c~;Av1;+6(ht%2c6>U_yG>qwZsFHe_@+2= zJU;IAYwC#{BFPqvprW$`qklXcAWTDDS>)M^Q;P$NJRJFD#SQfSRDlXaI4H*xr0&c) zH~6xJS6V5%#|`0<*`iH^TcV1VKUTh|^KO$@m+N&17aKVq@AgVf^+dRka<`b4!#FqO ztpoRKWAy?Mv+KGbHN)H`{A47ISsmsYM#&urTMVLLH0f7oLK@X%!Xc*H$AK_f;1l^H zoiaQft7CZcUw@Dg@YXg$ICnr%RZqxA7%UhWIGBXIm+E@s^cQkoh46A@mGi)e^q8c? z%So`E1uv-dAF_)1m3|!)nI`6p{OM@}*N_&CWb1?+58ypkkf`&1lb7xQhl^^RKy@T| zj#!&(IJw*q&>9&D(PCX7n!*DDxf;Oh(b!(t%I-N=l*J!uPzE8s%sE6;M^9GCqmnNH zhz@@Ns&O|@8@@b%MStour6XJP$N2sLe<<)Z_4B|XO$Yd%TyWm=bm-v#m%}VVg$Kcp8F@YX} zxYhSRJ#O$)F|u;;g0derIA&w0@dt*!fp38@H}Q?B?D0KQJL}FS@b!@Oz+j;%7zCrDhkxRR~*Ueg}hSN37!M=Ii046b;lfVsw9GqF<7~%Zar|JO0*>ulkYX< z?#Hd+Zi{HIOgtqZu!zcJK^nMGUlISsiY_=!0~#zj!;Q>NbXzM=W?vOWL!iwY*v6hQ zaDMx^0bKCon-{>90Ec64zq;T;N$DlHs{k(QyT(vfp5aMCN1E^wyIQwDC!hM)PH{507hxE!%XeEBz)cR5wRdo zxr`|r__i`uaN5&m)#FB!4~|4*8iH%KfzW!S)G8KMq82+k+&$@xi&~|Kk<+-Gm}oE| zM?ZqPi-r4vTDRiw%xU*H;H}ItWuCxIVVoUP|JQk+$xBF2SHX*#LRK8NPw~`qjcuL| z8JSd?x57Fubilj=SXwMOt2NfwtJP@|3{AYqk?RST_p$Q2%jCf`dNZDj4Rc$LeIJNkG~-_B z^eQ0EB#q%Yi&+qoL4X+%`1-6BTo}lK7??7*RX&-kpC31Xd8-bYcaZ!5U^_k}=B*~r zuc=%GaNGEK&`G!F=V|WjnqvbErT{2^7^r6fK3ktnWA0^8B4KC(a`x;P1HwoQi_AN^ zjZM4>UoSujXJVE9!^4Ix2*Zk}o_8Qg;p1(j_6BWpKS0?ZJ!gIT`CE{`-E(%eb(=}$ z?3-xLG4YPIWw_7o!XV@bR2+eO3|gd`$munN>i7k)n;~nN*w+rK#7Ge}RDGz=)!rW9 zLa;+h!wFRVVb^f#Cpp@kHpby^iF6` zmU+-r#VJcwb3Y&^5GweMl45Q1?!Z)MVggKL^2WmuR`JrCkPNO##twLn*Foqa45iQ^ zX%RGn(6X`CM_;5tUduB|grCzr7-Khuv5yn)mB#|1cDeM$!2!b9NO}Yf;wepnc)T-A zp|1S(z1u#nqxRJ+kIk0#nae*TZ5)qM9PHZ zA*M;#ToG)Zb{R)pn*z6BRQZLE%YcLAS0wMi5pXA$1OH;LfpV7ehAR@sNGPMZMsl?d zoX$Aku;NNktE?5~`kIgnMplcl;`jr~DRT46q2c2)ai#c)|t-{Z0wm(i1U1 z)?C!}5C?Q};&{ff(WRx$Q)WoEQ89oyg0gXc{sme z4&3~5DEPPxI1mkhrzs!dc6K*d9%8QaM||0E6Kq;%>hkI`!0=6f1+(?p?Ca1)SYd>qMyk)JsYShJa8Yp!h*ddn>>`0D9<|;>>G`5KfyLozP z-eK|EK1FVROE`R7hFsf_iwBGD?2?Fav_{c0ac%={Fm`zfPO)LlGluXS_K1?m zKut5Ch9|Y&$XkLEF^;Mbrs5ocn`h?c4H3T`Qkqu**Te51;11>vTRXcYa8Xh|fTI>L z!kca{Sc9cLl16T>$TKMpiwV@!Saj$|1LaPZ6b7KPvF4~kdJ5cpxICT0bD<_ z_7%u>c1M_&9EP$0TpqZYaFe3QaOgNm=-BCKWXmB{5oH^z8}x~|T}RZ)JXF|R;dy3m z!Ii=PT?Jh58*sJ*E;@I1L3jZNfg6rU$S*0mY%=hKPGj$Flknw&(|QY3D`(0#v&%Or zXmhMJVhnK{auI$n*f}vI^>MEh=o(&=HwR7__z$X)&_8K*LT~0tCIpmY+7=TTeWU` zRpU;Z{7)F}T$MYQ=%%5>_MqOztneQ_GnujgW65D}IY z%EdWu^V{JUJ}$$pI^h=b5pE~9LoC9rX!;h-?7~e%xO}V>li`vZirXoY6V~oUqXa%T z(OqV=&9U(6Sbel1qPYZaK^6GgUfWf`C3M0NINQ;_M`tHFrbro*i24nI3&S4?RSd#f za0sXZ37E0qBGSQ5W3`~m#w;FPIZSr^3CL-|dF*Hl@dUU9fkb<)uk|wE@&N9jFR=es zXN>Miz$N)3)%yXQ7jQb{%rb!!Zs;h{xGY#BIKs$EA({(;8>n3g96ODN3mp9%xdpr5 zYq<`&3~qEH7mtuTyB(tTDyjt-h8>BLBBloybg}y3%Z*G)U~6#JRt?=_%Y*hI_1G<9 zwob@JYDIb>XH(?Dg0&AHmmwGZK+f$N*86XD5tT$k zX>3nC^h5R06IhZS1G~OLy_B+y>hGXjZp1FI?H43d#BOt4PN17#5eXkxK}V__LT3li zot3DgCQLj=9>9q+kaM~rOtC)e{y!F@B-#2Qzs{a+F1a)saUA{SG_Hs| z2W~-X_v$YMt`a!>eY@tb{#%_~5ka%~Icmv;(dr8IjDeczjPuIMIZ6a`Q-g#mCN_I9 zOX3=56-FbD!}Z`sDtHCkf~yW6SHaf6VM5sK0JeN`J@D@Wp*XM3Jdz|?GFvTsA(ce>DNGUII*p!7Ei}BWZT@eW!?s|R!^btSq3>pc zt$Raz*v@W+AVQKLS0s%_k~|h$9gA%^ai*TbhH3-3*~ztKf&EItPP7|p!NCltSDj~# z-GXX>+04tZiyLx5&jy=^m1B=0mHoV7I>;bUE4$S_a%cB~*Q#^!Mbb!-&s%R7IHg}^nm&4e-I_ZKgiGt*BkLnYlL!k_HMj!`TAT%tF zHHXk_^h39R})UaC?*cYQ|K0aYWTPeIt&{` z%^@5>cXCCrcL7{4m zoI{O2DnJ8rxJk-zhSM||?B~_#j$3&tmm!x2aRp^e+MjPBqCa`XCh$1T02 z%aDr$xzL^d9dc*&X)`T4C%+_YNfMVNTds32vR|oUu9r+XAiN0V=PZ;P1G9y30P#;? z=&N4H;W#X&;gOW)$jz^a^b%jbsnlpKHNyGbr;ejj4sUz=%x-=tKPgSK7$C3*} z%8}6JIdpjmom~Z8-hzG$`2f0;E5cWi=O_6kmNw{gM>sv&@aV>Pt3j2S6@D?Q0Xj$M z92JukMKIdfhU6B&Eu;zT#lQH=fQth--wuE~t5IvZ3vIo;KS{All3zxyb!0bfICOc? z9zdxb8VzbbEE|h6Pdf@BY0ZIawO`Y!d8IOkZhl4h7x&^WgRWKu{oSqy(4AZn^u#zf zL$^c?Ab?KD>6r7wq02hv0HjkYWi-)69%qr&3gqJjoN}PTtf1!}H)608$W;ohr##jimS)PQ z*v%`{9l6)%%hJLHrF3BD$`N*FS47k~=jE38k&{cQ2|F!8uTD;v6}fWKQnfDB`Uf$W zup{kfva#%#1l^qBHpec{so|bqo-fM__uqD47j`Oy{kJ;1BZAf)SUG`R+!(Lum((IC z-EirOjyflbEOSG4Nf@aW25L5PHI6vPUV3q%gp?V#=`KnLVTU&Q=&o!6*4Y){XZ zCDd!(fJ;Zfom~-Lz!kYAexyrMWV)noWD+{*20@MkU87`BMqwfj1#KqxsH{lf5^mRR zP%is9bae^cWf}Db&!5owxX(15)v1M*6QO%h|0?;IW3n6f7 zLL}GX<6s)Xff(gNLsXaKIcmkBaQ54j+zPn)1@Y^-JztX+uI|xc_>{nf1K>{X2Up|J zm(+e7d)4HYB+>qj4kxi2qJ<@r_)wb_(fC-0E|^ z47ubgkt;3iBmT2$wQftt+}eXi1(gSuTN2aYei3wo2qBU)GHAC#oB)IWfzSasb>jpU z$->AA=Xru|UaRh~mFIF9aBTxF9RYX3(5HwBq?w|U+j1pdyH%UDlKru;xu0s1dCXC> zITI}t0SUU8$%P7(gd76bFg)QL=g7_Phw_}SL(Ze#Oys=nkvl6^yCme;=ZZ2VKj92%!$4Q|{daJ>JF}!i>WvMdus{{`<0&Bb?_M zx_P;p$fc{0Gru7htnQIJ8Kh?EzEKa8#Av!AVv|q8wrD6LkU5SCqgK&M9W+!e$x;ye zdk)BQx4O}j!%ELKD3|As@Vr>vVT;f4GT>Nn1>?2tQzd7$YG_Y9Aoh)7)RjvTtF8x< zlniB#ARQ%gAiyWl+)jO@gk$Aa^=zeXqa!D>&{I!gn_my{IXs8UVB;(>b*lHvt)1Nt z;=In0Y!J2i0h=xdKb9MZXsCCD^@e#7j@#z{);VtTd%-`u>u`f2iGT|}?}1x}4qo%*4QfmT zZsbQ|rY}Mf0rIKoeADsP4TSYJR-aQI4q+|Fh{?361s8Cm`r*Y*GfOrvP(S;p-_Pzc z;L-rD`{=s_iLDFNSU?2Mw;&nxQIJ+?zcj75n90h=GajQ57)ri>V zZc|@QL7U$S?&4G`qh2`QtE8icjLtd>DfUq~nF1sWxf zg-4)zjuErs2if&lYPd_c!MGJ{(@Wv$H>UNkf-P;gLhx?aMq=yPX-H<0^|#3hDWi*o z(LQh++Ux=8^xL{Z_+_;05U>ARtDc;3d#!mF|`lB&8N}O6f+ZVP!fC0Z!D3Hp{pN+SBPik zuuX4-4%+k6^Hs2ATx*0a9Klvk78}`D3kBLAM}nL^O2AF9iEC85t%*TdllTbC8UtK* z#)iRHC)99{I=Q=LnntpDF}g$6|92T^X@KTy+k+O)ZUfPB%l+7B(Lv1x)N&dWkv!PM zo76PL719T}x z2`LITcL3YE67ALAP&w5B*hV5m#hEfP<>qv{1)XlJ-@B0uuB6q(6Ix-((KotnFqZi? z54XT=UWM+c)eCVe12>mx2B$viASBIioVfioBwe>LM+Ci7 zvbkctfd`T6O|Zcy-sa&}u;nFemu1O&NIhV)9g}zetxoO)4slc_6dyMBXmnrdR)}(T zy&N}rxGj)#S|n5j>fc4%w1zq+6SdwvYOPKFZkgsQZC-xvsFkP7QoS{0;D({U1KiTd zwZH(r4mARfWf3+xAwlU%5)%kBBjI!?TiaVDH#|VgV?a#Z4sg}prr=7NgEqes%2R&2 zEXi9NN0QK1zb7-WbaExsM0M;Y46=cEXUihD+rt``y@y{2@|S_RjVp8X>^GM2~ri4 z^XBNhrK&85$4o;?Oh_UrRM`rGNjf)>GbJn4{k8eLbL8fQ=Z;%^x-7}tO3p;C<|E|J zu7w~$c6lMm269zih}n=)BR6u`i&r@%V{eB;bp|J;#|q>_Nc zQ#oU_I*lW42<4rCHZMAN(Ck9c(g3a01JKIZwIK1CNcnV7MhY~I<#S{ls5uem>x3g& za)0NJ8|bD$!j_5K$R4@TTBEM7k>xG(Y~{S@+}E0avde&L6nKEwa0J}h)!+zRkRKAq zbSk=a0oXPUNmr00l0Cey3tv~-lc8&t;{n>^O|#CZ~n<&1)L8X zaBhFT)svfHsKJ^TyJEC~n;a3LMsiy5EmK}LvFS)9<;sy>jHbJ++{$RHaqL@ac81!# z+}ts9Pwq0*%0MmWypQVZ$+f_gWFf~fU>m5ZO*#+iQ4m3nU>&$|xUvUll0^a$Rv~Uy zg`2M0;BcK59dGkZIxjUpIVdJwg_=QNk*MuiysVzw2t}$hPPvdU`tXOyHk~-93!(m*ZMv}hUAY>jv$Yd4R`6L2Uq9m%6Xx=qxSOa zt5;JA4zLQ{EV9Bj=CG*NXM)Un^@ z-0D2*Hm@>w(4K!?l;ce#?2X_`ImnEM6RB~WO;|G`>hkxAN%9Y$Qy2UZD#hr7!3w(X z?(N8SpjmFE-rIltLdmCgdtHV}7wF`aE<*>Q9MGxWA1s;rMR?SS(6<>*BY*p_0TiGo4`F~u13V+) zQw5JJOL*qh;NOtmh*!Zgr0$TQ+NCVQx)>~ZFruRzMGYO09R2OXh7Q1~EHq*9BpaM? z26XzBzeXo6(1|HrhE68gxIr*-k4`>C$B2&7tRAOKD*pCipo82h`q6+-KYc--JjmaK zk6Ie%_$=htYWG1d!zZ#VZbyCZ!A_53EgpK~IRX%MG`@Ylfs+9aX9ZAW13$7K$<#n} zL_|DA$5sckC3hJ*@+aAfv_E<*ehnTLH&S<#(pFh}f7k%(i-cNNj?}u6BO*Xi0G;5o zI+}g_eHA_#qvgP-9h}T|dNK!{%v>^1L>Ss7A0IY+?iqsMyTCUAuH(Vk#(N!-n=5=4 zQp>5j_<9*W%De4I@gX8+_XyDJ_F=$Nu)i7(aYs=m6fK0037_EvO!1kY z&Z+#4FPGsH+5jl!z2_57kLM5oka}ACAqh|{+&*jwrF*1I@LkYvg+AZdU_A^0LTP<} zEwqzUd5xF3%cCWNl0AEbqWdC3yxy(AAM_eadVkmu@<6C^kNIwv`Z%_j6F^~ofh{zW zQ+bI`R{@kz;v+z<0Ob>e7UGrV zSFD#Iq#-|Wpd2BTzm8A@dv7Ff>c`IqK0T5#PRo;o5i6*TW7@jM1c2iDB3q~!_X97M zs{n#}mH?`54^TcmrcK8XwE`Ph;nA3T`>;Wj0a0sPcv3l@wh_evB3s{N3%O!fO1vz| z5gDeUd1v2$8}jKnZH&aIWM5-<8pL1u@nHi9dkixw_^xL6jrBV5!D$V-brxt|&wTw| za=a|h0XJRW1E7ezJ{mV!;u`YfobIPmL|`34WpAkL^bB!~b{9u#hbXYDD@ z3z4tSrTdYWp_7svAz$~(LZP0X(X3Y_U0f;QSdOXOK5Y2dJ<|5P#xfA`+Y#-Ek6&M6 z^P1!9Q?UyHvL-*sT-figdU`~A9?^wL!4Z@@)Bw797yt#_^JLILU93Z5+Y#MAuWg-Z zofj8he|2~+OO*vs`VtW>#4Vwnp3hDf7@Z)L@FV4=ZXPy(A^?iqU^M`f;Ok(e;}S~i zBWNM;TZ;>q<;yhD+X3os+#aCQ^V#VF10>eN^~k)=&BKNdV)+abLv(Nz;4}PaUvOO4 zu)e?+I=&_Uz7QXaa)EllxLZN-ygKNZaLsgqK<$Xh<$C)t5Hj5GC2)&@3Amx)KRD*N zf<{$nf>2!O_2&E84{l)adr<#K7Kl|@wnk3fdXtQuu0nq9f(cLYi#Bx zbj;7;vV1FIFJY7S9pLe_U>F)p8X~mAh!7YQZa&}efeTFyV=@Z@pY4P;JQYi8eC8)~ z$WPbd<64pv6zX1kBAyluH++Jmbjy8sl%USr=NmrQTMgI0=Ll$HgM$d(h>u&wsBs~g zYx!5WEFJA~lMe*a{5?ML6dwi|S!#$qP!HfX`S|&U4{mtU$#@C~x3`KRIM>0my1u^_ z!nnTw372J~heQ*&2>0!v@w8-!q#*F2kXpY9!_eY*`+UITu$o-p_A(wnc^u7P*J;Q! zF5y|I-@05cghxH?0Zo|u<#SpwL?@3^U&oG|IQ^`l&nX}*yI2m(QU+Ven1l-5*((8GdYSg{rzDB2rJ4PZ!olBLp`Vt>NNu7 z%Nn3LQ*d{HLcI(iFpd+Tj?@mI(~4maWQmYuS_<|NgpY3?git?_fe`LGPij#}Q;j8* z3s3Cz9X2l+zP#iV%4GVTTS~Jwt0$QS}fC0DJO1OR45CUSxbDB{Fc)m2dQ2@ZD5V2@PAi6?GE*iJ2h$q4{d_|Qk4@-Q&(z`AU`%?Xa01W# zjQ*8FNSDErO-@iM@c^FFGrH;)6K8Zkk1z`!ZXX6f6@Y>12xLfs2yKV7aRIGM&T(EZ z>N14FsD|}3a(@J!)(g>P4}?T+1Plg;_WQ#I5UzQM6+KYI0~CZCK8RQA`VO1d z3SV0G7s3N47Vz{q=>VS76S^?U*hpm)UFCTDu;GJSJ{s?^Vk)3+M>LjG%)BFc3Lb993vo`I9iJsY+1a07zhkDk51Y6SY zV3)z8krwD;l>GuaEfsF?i02fUj1)h9xD6obrb<6z?wp@qIudb$uH zF*5})X6(1wX~A$qNYqSB_^>wr@nJ&7dh+VaV*83LHmI0f$c#IraO)1`*PW#{14`5vgPdW~RsjVq7D%5KKzH?Bz0q zKm|pFs;hg1@^=t|)~})M{`TP`LWQdhIcP7{1|r1#khS$)zmQk$(XKsTg-|L*M|E|3 z!r$c1k80j#0tNl(Mlqcrbj)8xU}#M6-XT)9^vu4r|X&kF-W;p>xz-x$6+J(ZJdL>Vrje zdR8Z%)nY%!a3zI6Zyz>njFY5@OS6lcijW>0 z=f6;9cV%w)>HXuK`|U0(7B|OSPDe8C)o{~V)0MPWXuOd4ZB?HIlMxk~UH3_Y1yHvp z$6C+^0>3eK#$2=|&Fh~R!jbzz%D(?W6l>V`U!;@zCo*~%F}9IVH(mk_%HKm5@AH%qJg}f7i9a30lHoO?!Tr0|9e#)ef=2g=R zQ7vd6Mb+J*47|UdPK&0V`9jEvpxFStLufYKG;#`sZcOZHVD0zVz@W}G&VExvr*-T( zl1ib!N-PN~#QV|i5p-BcBtPOv@<#6W%oh3Ab_;5%0^ZOxs z4zf2u21=|-#^M^<9Iv04)$Di$P)$TfPPpALeOfc)(m4UQoC?kqx}^p>vm6b88MKqC z$ibT@T!ms8=*xp{I+K>UH44ZlOi)8)E=k6!a?pAP*5(Z?BgQ6D6!RbZZndhL@ALvbjxOqaX)Ip1V zFYG`&t?GKo&qU9479z>g5>?7dlS*Uw>}F&pU_h;A~!x~qbtMM~vmFHOnX#Fn(Xf6q~ z#8D;VffmGe>e}4ZSd@RStKb1NlF2&<*5Lhtww7H5XjPz9R&}GufGcH>iqTao){y^* zrASpJ=x36yo@eI_)_LLi zN?6fCj-8A@$hmz+@}%$_ID?C3Lru;_xMnVk@^vuXAR6FM7*ixr+j9utT^Z765ssU# z3o{c5C-0T+6N31yFKoOpj~9Yf{GMC{clzlM`teg-^Ity+7afXMD1mrn>7-ok z(fNWsug*J10krXec_<{dkrZKe-!=YQy?g(9y;Dxkjeo-#l5Km?E4H>iz4`X~8I1Fi z_Jzw6d2Qy)`!cmX!D(7ov;!qtKm&`w9qO&5R7Vxz(-U3~RkScfz&ozK@$x}?7JQka za2TS&!HITv4psais7R02&#HO^RbE$>N)d@V$_X6k5H<+XFdkI&h;D#3MEUSlD7{oT zG65$n5|`C8163n-D*B!WY9?2*EW+7&#ryXwKCZ&eNb|r(_T2%P*GjDc#An1UgSN48 z5CqUvWPTf|F!-2RH_J9)C8vKi0p}7MGDajH?4$U8nbpo&fD-s)KQaE zOLK1hK1NY>LrwDCWv;-K7sR|z__zwTz=#8|`L=VR^I6fn_&f-~dG<5n05)1}RjUo< z1pv40;b3<|i_S2?1>ho2Ha!0cHH_MyD-OYeltM-;MY~y zMYDlj*o(|%JGmP2@IJif)ey$+%vI0{xkwJ9YnH}R}t9srg zEK<*4Tk!lgd|U<_7@q*!QMYfllbazI=@z!eQw{T`geLm;lBwpGAK3mdP^J6^FtNr~ zl>YxC%gxC0Wh$5s;HX&rIM++diz0Nz$5pr`R|anB2)C1)A?Km#NSrKaFS1X%QRo+_ zB|e3)9e8lypm*3oa~aunpCtrd5vk?8fhNJ$66bq#QHw74xC}Hk;~`gc09rV?7jl#+ zYstJ9{8&!8a&_fA7Taih8eU29aNi;%s;trrrkFKxGn{Yv{d99wq9D>!!xnJUH0B-eEvan}-~<;5LFGSNc#x*H@lgR8Llg7EMDPOij=y}TUlha;sKH3|%3 zMpXGE%#2^l^ZaL4Zswq|+EwM^7u-6Ah4vG?DEcB35Us^^BiWAS?!zp&?Hq)+MsN|S zCahTziZM%oO)#bA>@n4V!nl#YT$k*@j{V4u+#1AS5L=_i!kriD?NFiAtJ>;& z`H{BiH4@i{!H)T^t)KxFyKUY5O&UKJ$s{9s5o_PYTyMb7dKUVC_t=^~p{fGXXV<^O z{qNn3PdX{SoMM^%;84^=LZf_l#X?sY(T}F^5m9n}A$)R)NbM3w@g89`J{J+aT4ija z2;-`H#7p=h3TZ<(W4zOGG0t^yK}~98(<9A}O{W|o)!s*0X$~DZ3iBWzOW3Iv4F{!2 zJW(ZdNXUGz4vi*q>zLOs#;&23#t+n3MCJ(_(=2f$eStU zfL8a?|NPiKSzGimYH7pP__%o@b{j`bPE3L5x) z(1D;S5frqP=5-Fj@;&gT5nEN>sNCzw)Jhthmm3i0Nq5P8w)v|CMyNNAXin~t?19Es zY-6*v!D3pqU|85^f19qYayO}`TcxUE?NeYlFz!X{4?&OKBS23!5YunciMo*E$q`A|XFF`}T!fSF9RkK8C$&AA;KTJv05?z`*TR4>obye%usO;R&1hFz^y2JU;(_(rQBaO(+0RZ$zaZK+!jlH$`Qvu|WO z{?P}JW^17FIlaHU!p4wMK*_ExsXYJGD@%VM#8q+E_=MVlRhW!&YSzQmx)Rk3 znFB_#MFS~tvWo1sT& zE0p$aGW#g{zbj1ufA)SQ^?VBXmO~Ua-`lo}Cuu9GUck{B4k3-BI@MmHG(-aD1yk(X z&KesHC*Cr)i&4k7r&%g$n?t$f;X6JVTVM}V^3!U~q=Jf5ImRCI{-XGP->=Fi@&kz{ zH_UYZN@QOtTdsW9r)eAMk_7t?P&4K@M#GrXtDB;Dn3jRIx0JQ8>L@z%gywB$F{Qn3yULHFeM8=^XW$+&2 zdXI`^IhoGad7+MGU zo&UEZA}4+!D~UBIGWOXQCP=tjs^~DonhTheeRSqpO1ez%R}a8aM6N57@h8j?mvM;d zF}m6VEi#F!6ao@uLC?B}{VQ3n2Gf z)!DLFy&30At`qVD8e5Z`+&FZ`ml$6+NRc?M>>1d`-q4U@KqCAE(GpP;Pj;TCXp!Iw zj|!8@RdRJsO3?9u=!*7)Qi{gL#^HMJOeU!gz<1y3`6tA0jmyCiIZXK1h(~5*vjw3w zeOVQ!oUnNPr%;0^O_fT+eN&^AHPU`-by;R1%K2-_>u|;-55VV=oOOO`k8qDhX)5oi zsUh<6Af8<{)E~b&?J=QV<7jT6BuI@7HY_w@wK6nN zJ^mscD9YkfGW?#Y3qI`w^ZeRHfkHymku0q83&d5$CXyCw3@r4f`Owa_rFrch!(NJ) zW-qCt4C5tmbRhvI=y|U`8DCi$5dAMH>4U#T8^arjc6}q7QLRfZpSztJK)}OBAk-q1 zO9_=nDlOvrhy&3QsFHI)5rvE`%V1<8hkN5Kc@d95kX$-@clKw5=x4^R{QdrSkn^x^@UWfdO!ZUsoA5TiIn9uh) zYnF0~U{f8EaP{*iVu*;ayBa>l1GNb)jFKkt^e}x!`;7xHxZS^%v?slGITQx%gUISkv z{nw<gW_Qh zFp+fiDHYWjof8b@GAr%U5y~o85hVl<-r{6-MMD;)Q*6;_KUqSkx7h2-CzTMfKyP^PYJ3`*}W5I#w? zv4-lwk%>FiS_l;Hoya7BSTgNWzc8?ekPNpa>#~;jkzQybKJ~8tVTPUcCqoH4^$;yw zf(24C1@>vkgZWmr6Mx6<4s9$$Cx_8qu8N3wiJub|2mZM&4`cPNL_nmZd65Shl|ZA& z=Gv{p%gw48gnzE@U7^TPgDZ)%|0H`RO#1+J@sE81PC-FOeYY7B5xO&LZhR{VVDD4sIdB6F9jbS@p3ugfDAUGQ zcY75rMIo3?49Q2nnoR$Xu&e+?0E2g9B}b9k<%BozNJTC!IluRp*)5{*RecLW$eUvg zSJXH0h|gUnlsJ@=eYsNAdECLAp0;AiYj@HuvxD-3t++Me049iNPWE|{kIYe~?@iu+ z14@;I10?=SjD7zj!k_I&e>j&2q)qiQ@{bm!uA36a@lCOk;Oqvq%Q2C4Glqk*Z*F5) z<~C8@#AQktDJpF2TG~!R4`12tBP&lBm#C77s&yASXTtm9PjKVTuhT6{I&r$p_3GjS zwP;IrW_(K`KYOo4IiUqIBCF`YO7I8$d*~mJj8?w9&4JFo=A2;wBxC`?Rb@IE1s&~% zXo$8-%s;WNb4sBPG@jvzdB?H#`=a2(jZuV?M5U?pm+cA*YdM0?|sTf-=s zK}6DnsUgj0$l5(};F43?xO|_hf7LW@C|XuEaVnSYymb>ra|6XJAk5VS$Qd1C?}Mm| ziYp)oVs`gB+~SSh7yKZMMYJ!8^)`!a_eN{cd8S$If>|;N&%qYGk`Ah4+HA+;l-%-*JtW1aP80WsZH%=aOojQ&QUSP{pCQlP?7U+` z`8NIiSZ3Pp-ZsZFR6gSRbArakj+<001nA8_vc-a}71hX}J|`G)I`ka>GQ)0XCVkSu z`ADg9_$a7LGWlPwQuq+BuV~h-aSs7pQdfyQ2((-b%WX?pU6&SnD6;%Yo>5#N`R803 z^TDpKK?}8>o)H#}5mY-6WPG`1$sueLegb6%m4h&Hb<$h0n|;um;bG}FNj|p3bZ}fB z&h&#EsZfG9F@Jqyl4LjQj5Vx+A!GE)0SX-Vzb>D9gTQL62C;LB{Xj|*U@@KZKi$8m zZt+T8JIhnO+uOg5V{4YmZF%QLLAe~IZQ)8;#StcTWio+y)JBaQoKg+^zWk%dF&yLr zFq2>|T3M1sMLUbIoTZuOw4iEw^*zqz@qhKcbY12_kCOYD3H`+Z?58dp3WQOWmRKl} zk|tWRg$aoMORs4i-{lpZ^BMl)AwC`+gGs&L(2f$>)g8K8>ij&G@xegQC$|Skcn&%W z4_}mKZ0o{0KLmt_!3Px*lx4DZmUW-h#Mta%0+RWR$4)F+AS|;zg?XL}nQBT&fZMcNA?jA5PfL z$=^Y+4hq@29h$kpO2vGn&Lpzcmgv3Cro$?71f%@96h?nsV`k?CdKs@nE&-&?1mY2D zPDDSYOUFMS);`xsYX)TU5(yBH17LF8ck-$V6DsRdZ1x<7S4lT)xlaKsm%Fcm=i+a0 z`$tKCG*4$edF&R`5Mk#WLgykIW&1(a?vBe;@1Rlz!zCcn+q%Gf6XtdyOyBNjcGZZM zngTWrfDIV7<;041^*L}xi&4C>8>v@nKJR~UjpM9dqf;1$VA7=6!d|KKt0I z3=(#RMmPTBnfKP8Z3fkd2K?+~WLrn%!tX*rC%%oGLvDhBZv8fAvIv4QX~RjQg@sV6M7?jI<1pAsHXt$;fy(Haz$Oh&aE$GyQTjOy*wGl~ zOk07axhEQ!4u+c;vAtHH10v+-KzCAb_RAa3J&%Bq_4z=Re-+kY^6xGo@Yg~9E_Lpk zp%tqZm@$Ef<4Kdr!=Niwy1N(*Zf&Y%#5@$=9lcwjNUeILz&>BZ>M*(*;Pm|?l`A2y z=2dy#X4Z|`6FoW&p9+N_@XaqwtUvaQl+Rw|5nq>gV#1EiJ>H*uLThfMLEj=J7?j{W z?9AQ=>-KbGu_)y(;LCLI)Jy&X%#D#u8P)#^sAqHefVXrD4L-T(6t=YZnxV$^D)-g0 zF*V|-!?%^bdxhR=K0;V*Yq&Dc%5*^)MmHA96Kli15Gr~w#&RlGE@qD*)D(NoYyx8Y> zS~ckbbSGApT1^oiAM|p*{tS}ddSK6p08L9W&6=pX;Md{4TLPA~VSIxL)xOOg zz3n;?3{%D>ZWYtXZTEla{fQqW5X>LjwBlQ{=r$Se$)R`W9}=pEf0%S`Qwza~QKw$_ z$pCo)XY#OQiuw5Ai0*EfDasUrHT_RhSX^4xE{+^O?+CO zIp>IkWs(k@I+BrjF=95H(^%8)J9i`OE)&WGw9^pw5mNN(ee-(v2+Vu*`MePUlul#x z)0ZIUxG@Gh{=kJIosK#J3U(6t{%MH=X6{D$NG4Jc2oNk*apNx4M&0%ZR6xyNROA-o ze$ZW(Sjp0<%rN(eM*`;rObhwNp&s5%i0*RrL!@q6ZyPqDzLf07GtrAA@}d5}D?aM^ z*IJ(Rcq_Toa4sxJkiNcoz`l&vDr=%KE1ifUIqFsZ)cxu5t>Sk%yFXz3<7zaC`_F9| z4cfwG*VS=HcOBJ_77vIscNck?1*o51s`=DrF}dmI+}7#705TQ*gqrGHza(Eps(JK{#^^*K(d|cKcafd+pfOBlvvx~?wMf<*Rp;M*p*Z&( zBsH33u|eSoCsiKjoOV1F?CKA#7fO&U$=>Bzg_?{XjJr6VTpiL~_WrK*)&>hWR zN1m@?#V^K%yZGVOKnm2_ZnQ#JutLSSr5d{e(U29&r3 zHb<5gi@dq^+zZ}UrFEk-!wwy?GfFHzGYIObvys>D^5SyBRTk${>gf8W-`NL{-&E#=IO{k)9G;qS z%2D{RI5cJ(2u3?g10x$^p8k2>)Od9957o>{(_i7!2?LK z@`UH&2`wQcqw1+oLohGt9(+A`%3WK8gx4G1CTo1gePoXLJp|~-MJ(;6%6Sb~ni=>b zPe^FTM%BZ0Ri8L{p3?CYy_I8kHt}5)+94eP@`53mxFqhVpv0w(|2OS z&_?LtxKFY;JwQ;63b09x4coM^@;Mt&QdG-lX}UsWItufZwB`x7#*BVx4z*kP5Z3K{ zZ}lE*RXfy}`vJ!3p(+hWNt zjyTzid_OOMhZ6rfwKaskG=#Ig4zM;)?d42ttHVW-!ool*ZH}_ogngzfGJu}6x$;(T z$~Yn1MCILICaM?`*QPP}MY<46Q*Nj*%|Q)b>r3p@QiO%XFt84^eVok%u>jd9e>^k@ zYidy6xin8flbaHbQ?Ee}Tg1@QI8))%_2rF#AcQd6QQ1N}uZ1q-4k68VPGcNwnR6X* zwEU=KcUTP4&L_}kBKK}!buo0jh8RzryK>qX<2V8lr2gF5?hnbRiuny1>&#&v`&?k`CY-p!Jh{>;yIbwY9J93dnR@2T1ICi z&n(q`%okv=7;}Dd(5hg0cucuxZDwg=poBk~^JtqYcdhKoWx?(lt@Yv14Jmb|xS4L9 z{V+Rf8$9cR&{_WTswy7~Em&J{{{ zFgY!l?90;?O0)7oyd+5&S87s~PXC%;+4@T`ic_6Yw(Qqyc>=c^$yu3RH}w()OPJwm z|E>-aDvR@r#HRsZ82oanw6wO%@YT>Je#+f@a(i%WeaEJ(Uk_X+_pFiT-UD?{!15BP3Ci z+dwEf7o{a)wa5~)?3Q|o(hyDcVW%8^N~~gXcyTV6`_oRPC!>OsohxfqTj?Na75 z3oZBeTAq~hZ~Egfs?Z90%JuDZiH!=4SW^#EQ{#wTOV;E2jTOeSsyP9}Ke_zuA6a;s zNs;ej1H%b&oLqvmmBn_21Ul@QJqKffISrl$btlMN;Yae=q(V3I zQn9A&5CGI0P?3izShzNXL9x#qFx?jQ)OKV1qZy3V;V0ixP)mSih@DP&5CHMex7V_a zz%bRt-Q=gHF{K=z@A?-qGa0S(EShMsN>aw;m8Y-cNetNY7aTd@2Kwe-va`#E`p>4; zxn&!gFu;FD2-T_8P~?}{O16=DSXQb@`U1oATVH%41KCUpGr2gjEYRL+RIg7aVH(&Z zF3LoH(Cdf@OVUl$2Kw`U_gDoC2p^uH24d)_&auE?cbs(<;R;+E2j&sPFZ>M4((d~5 z6g124Ex)eeV@5>`u>n}t)DI>-28AW}Qz_S{Kq%dN|Chx39c;0yI)n}_>Zb81p0g~v z6~4LMtT0GhW%{K%Y)b$O*Zois`|rZ(pe6>pQhoeCZsv&K&^17LS877=Byu|iqae2Npon`aPnre#YL`~QFA@z9oR^0IkUHzq;;ggl>nUtu)7wdh!L`)! zgVqqx+H}lp&&56mXKYExqV7lQ`mxp_-9_yQgBbV=0v8FG*(c7x_l{DIq>#=rr0bd6 z4m+Yc<8FcwC6$*i)B^?@9)FEtuQ891{o{igtKvO82kEs4DNXCmvK_&|vL zN5%3|pj@ohs}~aXMowsdWw@WQlUyqciRG)q_|T8 z$ERTOx!hz6 zgJ_#VGg-Hf#1gR1a#b=A#)3`C)8$OMKz|LFhIEEc zUivbn{k?TJ{@s}K7ZE6eYRn2LnTTozaG`02rH9S_gOY#5zn&kyM5GM^P|TtDR?F*c zY;@Edd*#m}orQ=`)ZM-Y$V4ao*pIp(LqSB?TwP*OZYG&s&9lT0br$}duD7W;nRurKrGM6|P!)+c(||%3 znUh}%0;11%k1?4sq;sF-hT`gStFmk#FKXH{c3?v-wP71P?(q)pjUJ4=qzHegYipz> zniSWO!JpNapyd)_ZPTKSPw8hGAlTJRGHBQ}InGe(ifYKuoB;kI;;sgFmgmL7ezS(e zcuzDN*b1#0mLtINP~xG)LiY`#AJ&lVGyE`WVK+x=(gWo30Oq6T%ZOV+w@LWv$(rRj zM`fjEpWu4ktbf6l%E`Z`YMK>w`ne6p6rMUxpQh`2oqC@c?r-sB)6PhJVn5ZuGp2N) zIxbE#EnfBh#VlE8jNGvUhYT`^$kcY~|7Y zlWh~*qjef*o#>3W?ZtxkCHwybSwFIU11v2;BNGKY@x4n5AN~)`8I>-AIL(s4)TQzI z<&9fE_udiQIvA+r8AZ%{Eg5fC;Pgyzg2@ATIyB6uF0#Tepn1By*~EFjqD${#rX|@9 z!=rCS?yL~3>Ft?~G%4tqJUKk_M^~De&g%Tt zd}PZ`R^Derpze39eGBVs5wwPGkmsN-*ri1Cr$H9|Izhb;MAe%LC)xbgH_szu)xxqw zp{LH0Jt+b7`n70h2)&wO4SpMQDr3QV`+O!>+B1|wE7?J7lwwv}qWc}lja~S_HgUw) z>hPG00Jo&*D4Q=#z5DFqDkYy~yM`6ys|rt-X8l@Hny49^1zKxY)bbPj+_%Ls5!nfV zG)3ER|C(r%Ocz&?A}eIC<@;{{)m_2O{trrkmRl7au)dr$=)<*N?XsQhA{GSkStWHhc_|*k{ERWbCWkN*FV> zh^R~xFD^Fkkec*V_WA_nJmelp*z)0d%v+!jRt8FKPNoj%HtyN`JzlmI>@DVDj=QDm znX6+{O@gSFAIlXcA%^|etbmi73MF8)K+!0`V6dv^3@t{5p#+WU8b`ueZ6Y8Dir?FS zR@|gId%UZcZXJnhuvbc%T#Jm``hS`|A`%K~Ib-@0_yXVRs>x~VmP1`z0W2@PJUKn# zf7K?|d-yPr$+^sMt^!LcQ!SQs`znWRoHuZuc1;usHnx){?h0>apBPk1%`~UJ~CJ>01bbCL$glkw= zerg=@?@I!aqGJDG`mRf;pEFH(TBWegH?JbVs72J0pyh>)%x;M=hnt$&DYZ9A`FVHf zb(lEu`Bw<2Er@?QI=l4$W2O&ZnW|J zEW{bJUOPn2Jkwn*QQzFiD`^ zIi6)C&BmVdG?@p7=SG-Pt4ZE;pyrJ-fGd<-E(32p&~SA$BlDpqpX-VtWkUTVRW}Wc zp4UR(>sT)T0u5&zK+y$G+Q|-6jJ!Dfk?fP(t+}{AH@;(3(tmsZw3@%Np7q^Jiz50-af@8TxRLgHoHWrqUeM{l&{3(u+Bt z;0e~ZlRr%9(r`8So@;RKMbD}LN2-#Y&s-!I=hlp)hQNlT$1)ntU!CjVwP=2|9?v}j z)L={HWm%qr5c=t?2gkvr&IPgnJ3z$0IrE}j**=dibUbt=*6La0_GJ(=Hf3$IfCqN} ziOBuH0;C;DP@=_`BP1|waGOL5btNt$Mm13Zdv%Hrr{D>;7?RJKXa@Rsm6yfVbe$`; z9EV!sZ!1%B>8{0XYP1FQRf>1dtUoY9l)clJ>k*`%(0|A8VrpQmZ9jOf;^$i|+H~gr zb~&!b0OGACh`wmC9f1yusZ%M^es5~Ajc1rD_WKYo`@^XF;I`40mOv2h@FZOIJlE2n z2P*X6VaWNduLQOdJ)>%ANR-TvO1T9II9aXt*4~!F1RjeA(Mbqdy?;l2n}sd}ou^L8 zR^cc(FH2UF-gvk{tB5NWLzzszA94GyFefjT`z8x?6aE6jYPo!U45jVB>85_nz~_#Z z<@%B7>r=w!+<5X0!-cT5L9_qgIl~3xd${qs1%D9p+=<YVMF3BIqGCYSt+4l7X&w z&+>}5C$KP36%j|UXk0oaW6*MSyEzsGmMY&M0%&R#(Za&9@i@RbE{Vka4*DG+_G*07 z(P+PTZ9-2NI>2+Aw)hHBiW7ytm=B*IUkY3eC0bsDuE+bY^;kwius}TeSEnbf3X=62 z6fY5oA^qn0qn$`qssu#3RxUC6c8gPtH~#?$$6o~r6{VivHi%zP+xJYvLc^4*oo_Yw zeEoQ%mLD=l5kmbj2M+VClKa4`TN*33xaolyJDo9tv8MoGuzduyG|!GKNOnr77cQ_&my&2vIQpOXj@@PFo$)icvxHjXL2z4!8{fWm8gEw zHuV+ z!8Y7Nrq?OA^wRt|QWb>h%iDEe$tG!J!T)KX$_EMQ*><@_3NQHAy=eYUC} zY>Kn0{0sk!1Zs4F-_zL#!2cwx_!te%?x*|4t zoU$QA&56#PNd_C{)EBwjetw2bW4blhZ!`WxIFOdZDr-69PbRIIbadT>L3QVpW#M}s zgDLTx)jU+m+r7vZa>Vf@s&lxh6m^>WPpP$F8~;nrEK*7rp4~#&rbsGk4&>vwuEH%` zy^;1r&OuI=a$}2uKH_PHRat845rk6Dql%XWx|=hmWpJ?}*9O?Q_HM!{D`u90bbsW- zE6lg@ZIpq@ADUI)_%KA%inZ>upJ>~cIw20An9j?326htFA3?X)yt{6nGzJnE4=j9Z^GOvhRi-qq~kby zmH2$&6fRq|@kNF(g%f(bJnCp-B=t5C5$ev)Py_Kl5fZ%!95TCFUj(mcWfA@`zkW7M z>6;TQJs`Wex^t+kwC0Mef8~kBE^07cY;b>91WIc)N7+c#`L8GiLnk{sCpnj5yC9%s zDM?>0#^dDxes;d2)7|$5#W`d-DwWlUV4KBmgb$E3a9}>Td*64#gzH!%U6wp|2q#qx z@3-bgD&=g65S;i7)=vrj<}w9ix($>5WRI(=S5=ZWd&&qxIDELEm@$Byq`m+|`gruL zq`oiyKFotKC_$g!@I(y{`X=tl7KXhMMnYiYD^wzm;Wt~vKEx}=L0Ko8^xKN712xo` z#mK1oCk}&BHL}p_U)y`896YXd4UR@PzW~k2t$S4>vG1_4JZ4G{OAhxuPzay9=fq)C zs;P8-1L9TsO51KnpzibSO*YgdN%EsCz`*voJ8kZ&sA94B(*G1FAC20O&`bwFH9S*?c$-?<%C(3eX(}tK`DDvY%kXPF*grWe~-@zPh7QuLPoj%kZZ1u%&cIT2mh7 zX>#s#w=oX+Z9AfyissL58YL8zovvOT%;wq);b)F@-vzHSmtV?3B3U@blS}Yp?zQ@xl#|KPPYj*xFaN>ms1bgwgsRwS@@$~Wa$4B>#PH2bX0Ed(i6 z$W-2^zzw9-(4l!(7-HDl7C^;$Cwl|Fz_l}IeWb&KJ+5*1&OOnh{|0zrZJdszfwsmI z^7ac)R&v|g5XTrqUI9k*(;|D^UvE1ex>)nMyc%*Jj6=a5Ms|XiEgMLygIXjoCK=2k z19N3n)%u3YMZ}O#z7ub;g>p*i&L$=LQsOsPife_q))OK1Ws{r5jMn+%8fdJ=5@Xw| zxU@xy;?d$JV_F7*R+MZ3wo$bL8SFYF)hsi6KL-DJ_J@Cze0K*8^;>_6*w=+ovFVRj zPm3=QowWCaFieyV#5?5%1O>k&M@-pLI`1(~uq%lXyUe1Rxm$j>o}>vlJ=Ja#Pe}_Q zWgMW+Jr4zkInY<$G}fJ7uZmIhDw}>rK)o&|PN}E28u_Sz{zW;Oq27X0HE9-&y3!SB zx07XCV?W5P17daID)bk{YW?w|=qxzp0t`&Z6J~YZxE0HtBx~q>w4rY)G2n&*#aT;~ z%CVoRSJBlQ3U-+pHD6cd#=@7Oo(GWb=vX}Oe8w^NPOP2hB@h9P5m5`olL(sGbjmIq zMCR-Aej$l=InB*Wc524MESQX|q2Ee`bf=?mZcKg(isfX8w}%)@3)bCnA~7AVe;(Pu zh)T&_Lt+h0a6fnA|11i0gzxx6yzl)Er-*ADp$)OhF!+patLfPeWoI2>s$^J$$e|iugl_$+ySi(^)2P4U^(OTwo;t^k2w0oUS?8jEZiT5iqiz84sbCRBYRjhAF#9&Pn zURN`bsQI)boOk|3|A{Egqjk%2`{}jh@^HG0AZvgxPb<%+ft-s^VMv|(Y$3qo9|eQ) zpG_+)xPaMM*()}vf&7!WeBTc>+;UusK5Y^Dxbn1Dkvos#_Y`9O!bo3OAGJqjmObQR zE?*8?PlzG}FZ}k=W2EHH^xVh_#Pl&?e|Cig@1`tREw#&S>vC#w!s!XAH80gYp*fT+ zLr%Ts`eibbB#ztYvHct3!JrW#s)(vi3VY4SN|aYJI%npUM9QZ`j2bOm=*5=T zGTGt~Adh@|M~z`no1`|pn}D&PLdL%pHuI9DxJf+iKyqo8@)!*a@7Ojw%Xew#xVuTL z$(SuV+Q}!4`z%EJ;K?WLC5FdXQj!RP}oL zFqmbU(8?xy79GM>#q$wUYoKm-=es81So`{e3J*U|q)!L2>^Aov@xDck5WgJBADihT zVw-DcHH0@3t?3|Vvc|0UN*3&JY(&^pNNFU%wa1Bc6$U=-4D?U0jgI>4B?89#aQxCv z2y{iy5K=;8;7+xT_Dpf5u$0%AMTYLD7NROaHV;i|W_64FiK{`HmGdT1foRD`bJEWs z8);w9A5!P63I7&|Dog{IcVTEy>>MRLM#;yr?w2E`x^9&b`ha=T(XCS3`Bk+?&f0L- zPSUF_uKC8viKW*REr_8!C<}*+Z~14`$T(wQ^DX?7S_cmt_Wn&&EJxn*;&WJ^Tcx{& zbY$)&I6sf9bC4Y07w{@3+8`u7CY@`dX-gXxO=+?9V%CcywisYM4RV-P(zGCuLjRIo z{SDt6H!!3#AUx428f;Fnz(y5M9i-0r&yiJQ+gKYcpx~_rOD%oX1D(D@Ir@NTbtSnY6Dy zoFj3eoQR6?6p8=!7Ud>@0v@-PXYut^eCXaBA zU5YKB*)y%UE2@O+a6xNQa&yI9(P=pP08HO^rGrT!xFWW8!%J;Zd#w6`Mt7Hps=-E5 z2ipQpL_w+7giYm!b*Y}x{011*$96w6=b$xUPjB_5IFqq6?dY9pE z`>*ny+r_gxQzWJ{(!PDy1)jOm`EzJS)wOE-e^ET_ofu!g*G!;>6ozkvb<<0`nt4kS zBIk)kR%1!mDo|6D5U^FbC)29YRVJ|n(V!Y@-Lv+#6#dC&UihYf&%^e6wHW1%U3bb> z@)HAY_%gn0pW9zXpBIZ_)3THwEfH{bNINh`_d8H?<<{QvMJ$(5Ru{ec3tBHKK+;*^ z18D;N!)ar)b7Hy|SyKYXH@>rR-vn4=>;v_(m?=#!ow)307QURA*5Dx?Z}9d@6jbSO zY4bYEmVS?$E7v^uDpoGMxLo3`%@LyLC@KI?vK9KB60w#8bTWwpu?iKfXsnQd%RwprRd^K zGR((?EKA|lhf#7+Ol1)i>1D;nmWI`J0lqr>|MIhhA;p~u$k>2WHMsS=FWL^ST%uYX zf8UJtm*g3G&*Yh+i!PRf&7XI^UjJ9hf7AnVQ{zUCK#?qN{}&iV0;+7wAE1gK_Yk1EYlnA>)k5dD)(-A2kq0GW)S6w)31$DKpL6E(NinfLjMSy zP-aDu*>#J&Jpj^>o8+LO>u3tUjT=V*zYSRnkFdJap+PgP^LEl_FOFXpT|i_6xX1?r z+dapRQJ!_h5WaGDwNOl&3hz?FUo#@ zwme})k=HQ+T|XEUixqU_A*xiYE^MV%5|wr&KAk1VL>SiAbOTy-tVRrgc;G0i%<-S> zAg2m9ASB1i+1P+iV74;>S^{7#6kxuIh^+@_2v!l-Q93OrYh3m4+%CN*T{fENyBMY) zHSBe4Lm$E2ehHkwDzSs=#9TGyhHQ#6;M?Cz`wpierSCVJMa%{IQ1NfVprIG&9ILg! zkyRDR!7el2t@KXVUWH`3I~Jp3F~}>3fMULU{A^rj^JxEn(jf*Eqkrfyr@oHhb-(r% zcIjtumTb?}&uPvWPo-d7_m97$NX`Zk*#=U%09k7ISo>s3wRvQ8Xfl;q;NT|wuQNO* z1}q$+$GfKZUB*eR-%S#ZPZg99&0VU&gYm9^H7nkmW}r|(BoI7Uzs~?Gf%T=LuX@f< zp$92f2gChD&c?R_lp?kV$tCRfhzGRhrvLX*n`#Q)DMfCKcH6=n$%gu9n`R`#s|Iu6E5PZ=L4(42)kG&P+y(piKD{i(@;r4m zE%cjD*9}$o{LC+bWkH8^R@BiX@%Uh%VHVrz1|doOusf7*375?7A&n`PD5lTZL3gMB zz0pLo39jl&Q!(Ufs>bIn$PkA=@d*RxO zDs4yiZX-8u=7_q2&lGfEKY`I0msJCu8n@BNH|^|VMk>U=bk-Rsvv>y=Ys$UE zyueOYuQGCFp1G*Z5r`G8 z#xgl|c28Kknak5gg3Cu0DGFoHe|*1tPA>4-(0omN1k2=ve@TMGA389qSwR&S0cvQb zvWg|sjGWWToS;zZ`4+NO1fVckp#H9WD;j+{lUIW|_s9M9_k*#AV>``?(lFqE4Yqd~ z^azZT9J|~1pCoky`k%tk5=BXVh7vV|g~Ne5f_kEO5Ob43;eH8l8Gvg)4#sqU#%->;GVlOAr#sBCC zW-UsLrvQtlIcp{cRMRLC^frKL?w_7G=iopSBv^dh% zE74`n*2Ddo<5RyX%Z6n4FM3f=Ss-9YXBH|OfT;U%9ZQ{5Ye!Fb2K2FkA`%DpPw=sA5IRx(2+#N$ukE=(HF?gXw>sv9{2nfngB2avx zTjVfTD}BqQ$-!?`Iu_Ubw|yXL63~0! z#Q>ItB^?`V!;-YF6hpr84Pt9B4ncPykPE{|_>c!NU0UHBQ=~MNt!&A8h?HSBtZ3&# z-Nv6TfR^AJN(LZMJTM%Xn*KYjY~H0bpB08nv_V*Zx&|G!h(+Q{6>G&3tpTzeWTFd4F&V=OXP~{weXnsP982G2y^dT1sdO(n!mnE%uBqCmN})YERP?dc9;*mrPhKD zG%KAO(}%--tsGh!bJFDZl-5bhwVaCU2jb?4IB$?DVoyJ&0>xfJs=22Cys_z-!LXy; zFGPFnry9VJ3T4*^I-%9(sSB{9Bd+>KLa8%)Q~LEG4l0g zrV}1sdt%&jo}kMqKSko@b6+YYT&0=|pM7uvGxP8~m7LT(dz^Tw6Oyc*3RVTZaUx1W zF%#$5j+igR)v3IoGbXktWC~AT%l{gGxLYMmbSdC`DSVNaoBR4ulXy4ZTsZZz~9%&>fv zveik|=52-@NfvQ-8%CHsM?_-1KQ`C9hmTr>%YxsxySB)LR8Zyb zDQD>8KnI@)h1@WlK^S9}56z!>cl2AdoSI3$IxD^8diD6SAy3}vg9~H=tsoDN_V!hO zS@#kR#K(o*9;z&5tQ7YysSM5V+MYCk~WP@}|(7nDUiMX*}#7LVhX)aeHd(lRwQUX?FLnxo~)PiEO1kqPhi)qB^Xv zozHIH6vRv+y|7XJqPsw{^AmnoTtp}|yFRDjTU$*L%1_~=xq&l$cc@mKKpN%)HJ!t8 zHRT@Kg|o%Pq|m?a%gQ8u0w_#Z8l#QTfq&AK;=A6;@i;=;5QH06=vP>Iock-Ltu4?! zLC;SX$W2I-2Zx0+Y_~Z%!sE6k-Y5w^Mok>rb8)cmbTB%Uwm7FYpW)83VrF{;^FvRR z@8h5wOyOA&8T<>iA`)FE_GFvn>jbgM`LIP`@J^XeN&KPh``1|iEw~Vj#)_v}tcv}9 z1MADC<|U^9wAl5!T_+(?XQadC%lYa#41Bi~AzB)JKEkbJhP8jg>Y#5KYwOci1A;A=rec+a5=ZIH%Ns1WHw>%!kdTqYM#K=Bd| z{Xeb)19(w{Q5deQuov|#dj)Z!b+$?HZHG$N8m98E9*Eaj0vNvzFPjP#swAJq>qCcxW}wka%?*WjbFDW4&lcA(LIKH_UPtBjErMq5w z@9S7%VzwB>IO9A;Dtm&sxz0~oXE1{^rXP)!0KLgn*6xt~VzAAsH}Btzx~8$K-T^jr z!86l1jBejyJjf3#3$TUYGuh?He_0n*{ug)bd-7 zCkcdMN@Q`}oL}g)F@BIkJb>;OCOiyHx6v^%%Q_f$LVdpRu7crSev+Kl@c;UqCJ?gzgiqqU{o1~#-`k2VaQ1JGp4^>T_ksFC>Ruv+ zHcQ~uO|vHDpvKD?WD!1PDRA|)0<<}r^x{$WcJ!M>c$p9g9Y?Gogc8kTXZ}_#i ze{1Nb+VLcAo$|Oi_vBZrbuc`RD-^so2b_tn0>iB}B+>0(VdXrS)W49zzL&W==26J4 zD$l0h<$1*gcJmKQ!1kZ$Y9AgI{Zs~J{2za)E&V3Jbd$S`g9KH+o);~#iX71Fu&X#8 zPl{~@cXR8GJ5F&fgTd=en*{U~tcn`~shw70m)7Rm%E0ygV1W%5>IKWuuN`F{*i^aO z4}Ay!n$J5tY02F~^e23eK(2>NJ>+8_byx}PuWjx6-cRpKAaZ|TX>TnyBs%{XS2YXO z(-Uur(_^=oXee4l5!RJ3-W9EQgk-RfL0*#0(Iz~8C3Z$B=j?tn0;+Q2sSBGJBGdm; z=?5(0=Zo)}3^-5(P10X1NZlckQq`2tXUlT#B&uHw+#^82%COn*zgr9NaYYwp;yB8{ zXPuA^>Dn?tzE&^Gj@)eOm_64|tmI0wArriaw5L}`8>nnwx;_0rDTNxjqXHpsxin`i zJVVfJb8g|UT>t1im{kBxtVTlX4Zc*Eo3=(ucip^?qQ*m+gRvw!Q7r*Rh+;bSPLT7l zv$j!anp=iP9;f4)b%`FB^%{1KDN^xzlQWB`_<;*;K@1kJL~i_1*ub9P$gN?S#w z{EZ4;tdjS?CT^N*qqi&fVGqT{2kJ_%8?^w8D|-3O0jZ#*oasfWMvYWTl!Xs#Ts;pHD8U+rA(z{?<@ub#6A} zX{IU|6$E+|Gd6%jM=aIYqe+-6idsWO{As_6TXx7AxRjow68fO+dW=pex+0!Z&3R1h z*g8$}4yR+_YfYjF5=~w-opV5XDt?Tmq!UzhLgAimOre8Zc+Znk)0sK@%JG^Lye|Ry zAKr(}tp@YPGTZa`-ralgLRXg99*pV|2Q!Xq+Lp#6{&!E&hzCOOG8D+dCgA}-0hXq| zbzBoWZ^kBRY>&6KNjaA-jsgkaW7ZUX`o3kd$3?O+N~KqB3ZJ&q2VTxm`5uTejcy7N zFt5=(&t)2uHr^TiF8q_fWI@O2IQP_~lxO8xWWefk)R~#HXG1PjeNkXIYw|5MAmgFV zFg4T;Czod?l)59~L?d$I`a%(T)o0xT=W4HcqIid+gHHU%cI{)&IO-V3YalSljT(qI zy^^E>4CX16@0GvYy@ws!f-E;{RlT1751PctLtoCkKqbxd+!Qa8n1hQY>CUzl~j6)*j71S0G4@q^Sd8i9hQPX(}9>sh}k~+JU!WU zmx_#0x}s4P=J>27G@lzIL>WXLhDZvwED&mP?VyoNjInhNj)ir;a&KJ3&29-Qn1J*? zvEq24-kqVT1&b*6lzUCwAF;=;ex(L|+UHG7Eo{}t|Dbz=l5)ZhM{wbWB_`eXJlkw# zzKIAY*ovE)S8hfH?Jx(qCUN7natYQk(yyBZy2Bx11J-fSLDEsLO9IWXgw&f!k z6pwK3apIUDZ>Nw>72VuXg(CbMOY%8KCiu%y3U4U&M|nOzV#^P*^oq^$EdfSp zwcI9XXU9r+6CpsLwdC6JGVM_rrlsI;=8^2uDPY47Zj-CsP{b z4U}Q-)8hK&eKSJ$o~Euq)evey>`h~q0khr*CXh;G0R`Qe^gOrhic?9TL@ey+QCh}E zAYK8DF+_btI|!&Z5-UxBa3qPEUwj^8tym`M7>R~=+lxw!8Wpl4xm30PJDcaAga`Ib=>|YB5G9olWq9VgOTP1*@VLwcJXikaz3!9I;VUaJma`zv^~+!eOUte!{V+`v;j<@LQ~E?wNk|bue-P-$JyhF z?gW5R=~Qm#9LErIN#mD3mRqA;raVzyoZF9LwJ!oVdXZM8a`q6`y>K(kJ`;;8+e|{7 zK5sCNp^=DkKqh8JN`zo~J$;FPzdM78kAaKp{uOu7sd#Kj+S~P<_K_vT*zvROmp&3| zGjuAV>N4o&yimE#zZ^Nh?5KPWh^*Y(q)H>a#ya4U-DA8l?FVa@Bc>$9{|C_D{uz0~ zdB#VB27Kd~mQXoAU+|bnI_Tu3kiS>y>Hl61Whhne`2X%1hgF?MCbUCnBbOZX2q`5; zFOlK#geUyKZaX3I607gI6WdxWdx;e7e(={j5Fdf!=*`)ocrNIX0+1w{}*tH-E+DkH_|ISLZK8tyUdP{l?e5u&#d&HZ0wivGZ z)7Ymjyxyq9EOHdD)vfbHb{e z3*i9j{muSQ>kAtH?`a5cqr2B)klB3zpI1n;h_-zbrP=-;^Slmq*U3N7s6ff@mxXnO zyR7ZY?d}Yv{habTPwfQm@tVm8&Z&&PceTk?{35aMlPNN?OtTHp&?&a}w@t;jOG695 zbnC(7%_olD2FX=5_(fEYbcm3LhURNQ2E(Oa@(?o1(@G2NJ&lwwgg8wuRB}kqtA8V) zJ@c`lmUZf|4Yy)wp+#7gRG`-Iw<;x1sl|H*3l9$v|9k1(8bPz(mf$QHIT?uamTmuc z9VJxE4I&yf)S~%{Kh57}jJ1Yr*zdmo*B#gri`iGaag2gh1^r@jdIom-^v}yC#YQlX z`)6TF#M9BTccsNBdgp!yFY3D>3+I_rF>tXaNV;KNKqB9;mIe$v?d3KewLo?mH|(_9 zAfWC&k0g{c=AN1`g&#DL==RwtEBUqw9F(I9>L2nCtjl+eiw(qZ%3^Kv;4VyMX`r?+ z_ED9ZwjanX(AZGu_T4oydhiQzHK3($A>Q-qeI_Jx))GU|qIRzo*XYD=Y|(IWY#4vdFK9G4T3~7x;pHClNNY zUIpwurPqe^w^hj3742~XvvBKV*wv_K=Nnu?lZ4nF-04#zkx%VHhWK>uvgw5XDKQJC z`XayHGUWKo<&rJx^2IbI-1pm(GOte+daqxA^bcOn-> z9OtFs)n;|+S85iKE60p&dYF2sRTq((Tpeh}GrgEL?F4Ts>8&-l8?zpma?N>}9T@Z& zwpoun+}ztdU)~n&{p`Ts*>xrBSeZ@@`F_m{Pb%dJgR=WNfg4IQb-{&3&M z7#DHGge0d0Vv98rfWP@`OQg(y>U1HDzb-A`P%GBn>|8k^PnK}+_wH%%l}W4)IZ+@Y z42K^i7~$}JjWjpkrX06(6n$uB)u=^Mc#4;BjJkUYWG9>}pmbifQ!_-A;5RRoGA!q{ zm!vXr#?E_rk_>8t^N}};-nr4VTS3vshs=#lELSmCWZS3BOX5JGl|l<#lW-<6U00=hN=?;8aCKfvYiSc2&MVsScq;vn_g+)>clx~Z zfHl?4q)%+ZmHkCWU&fhr4t`@}7)Qy@+jmgz$1(*&Mk5B!BU&zn0X(ss0PO72hG9JP zd31b?XTDd=n3^);#aMtK!@2jrB6lL$tf)Feb6d)Ih3t0i!-UQK<@r`(3}=2o!aLm) z0>!`h?0h>!d6x_7^Smq=k0atz<`5QM*&gDOknzb`l(9;3YY)2!c81fuS!G12rGRnM z`;{wrEi?DLsEf00mGykY(rR~tfAesW71I$RKLccD#FrRAwiZ=FZACJz-LZncJ7C&b zu@03Eet-RAfRw~uY|Qei4pV%qCbUJ$b<3isYovEqA)hRc{BN{oFs+l`KNA#5PN`xM z*{xrF$QNzS{=EVh*w5c!%%YiyyjAM1dGin?j27z0a6!B-iOwZL%~Cou zqg5_+6M{$)oAS7*?@nPn(Ue@OlxFf)3$+M-6oMU9i1j4$ojh|7_LN644?w}H(yq_l_l8zF&_)N%KNiRSvcM*W z&Rd5x;7$92(ecgTIa{)C%tXp%bVqqK=X6xiaK=!f>9Pd0zec(ICIhkP;+eUn!{_-;Hl#8$XmTWJx6itmPrf-l;$qhve+HO>&MLLn zX)~OS8F^W)$ZQDIA9>pfjB%-^^YiVRh}?XH>GN_HBa$ozgrNGO>0uxN`ug%QX$A_U z%|Dd1-HO~qW;9qOm%<@&W?qCF&GCvK;V4f)yrDB2=o>6m00;B7TQtKwi%rsWy&cXk zg65knS0_!M@vPLBZ0mu5MjGGlwBT+`iW8p7NBnX_M32BQs_`uCpBixq)f>eiJ#1rk zQO&nOvLOTL0Y9uBrpATgj}exCGQ?*kn~$pO$AZlwW`NH~Y)Sc=8E7Z9z>km|Z#B|< zO!%UlMt4|^>_#;9`Hd1hEjJIhJ>QmF^@ixa4K@&l0VT^s>Q)3(RK?C(zxPZ@1K2zk zA~;S>fhfzZR>9!hTa0c zoD$U(Ig`|PZKyvL*u)z&+XCIy_oIf*HCB6D|eI7;c^rY{*dZ zfc4MDtn}da+O(K+)RGBcbT>2+p)JrECvghCE1oq0O$}9b-n=n|`f7B;XW;e5(q9DQ z!EjF!=ede;Bdbz9Tz%JP#Sw1fo+#^eFqg#k&qfNSb)0Qw+X}$0LsbxQOYQRCO?Oyu z5o`FRu=S^MxBLuIJ#?Et*}1^|q6SS=p(${FoTYC$V14>%LaCS&Yrj8GqW*kGwkGB^ z6%fmRs|&Yb%{4QjmsGhP3Etop&u`u!{_ITXHZP7Y%Ubvk11_;;AgEwjp$nA2*csmq zpq6y#?g^AiWKcNgNGxe?lF<_eszkT`S+S=zzmqOdbENjU^HbW1wG3JwohVCYTl03e zRy%Bk5nEB=0!P&p6)i3Dx01UQ)`UauBmPJWtd=IFa1e*!=OIg@8vtGJ-N_0t2$nGX z8n3@=v~X`u>SMgg@gIkBlmE8@C? z(0hQ~G>O1W-cXgD)}gRn`DE?Wj4Y3kjCaNu{?DWUGQ1dJS}RR~AD=c8hVLGvWUmO~ zLx>fT0_8|8%bf%~{zmP^S+pa|^pQ4_CN8a9;oDGa&NV0zigiZIHU`RC@k8t7rTu_f z`&xhUSvV_sRaOljRwH86{dvVPSsuw4=BOrf@z$Id!>|R(AXJfDTSzDFa&2lZapLs} ziIPi@5%%C>4)L6bbw$xjr_0A-H>Ekpcan>!(1AR&O!2JA37&}y(Ax4({?^B&o zKaB8DBbO&+d21JziPqje199K&C-O#ZQHG*9bnXH6Hkh{nYYEhLvFzh<8y1hDfl7n= z0~P7;-td-Zm-JAee8I)x2$PbJ%&v7}cYSqZnP$?Bg>H>V@VSeR2>b0%q|!HES<8aI zJ&b{8m-h3S5}nvSI|&30-vPM{|K`qglEOKe32~o^l1M*S3AZ}o{K09SB#V0kLk_Tw zi%0+P4Eik}v4ZpW+1wcpUa8(pZ3!1!a6SXkLcg{!bY7?+-N`Shll~yEe0}~Q<)IATPyjUZ2kT>wR_EFg?rD~%;kzNOLNoydK|Q^p zvEhF@sn=YB-u@S`>xowa{oPBKm{SY`#Uqo}+ z$Ed!sS5MyOB9kJM++cjZ*ZGs`d!tv&#Lm4CDM(1gErl+(1h~R0>gDdmK2G2N?r>1Z z@EV6F4~poF;z~@UQo<{blwzoylz#&x;*@yBp)Ofj^#kP_z-N+`y=T1*wtqv>4delA zjX^$dl+N(ZujP`;UJF!MWb=4K;rS?p3Twhbz3T;q)UP$dz5%@%_B0=jXu`Vo#&x?CjjVyE= zD|Ttu@nUHah!}Kx9V^Jk$&u74+RZ<*|NusYh|KF{LzOQS~;oyB|~H1WW%^+<`%oQw+Tc) z9i2Nv1EdXWJ+54{-6N%O|J;P!*&Z1{wYNQ-OpOW)eW0hFw@|Fq`zO>wYb_0F&bVL* z2|Cm0bdTNH8}^bu%KFXgM@jksXr?GGTA)P^8nzQ6)WB9nEmPPw{u(!^rWvIOPsWnC zc#)6Peoc(5ADPK3GpACklF`N(bc28W2g#ukk8P!ib+WorNm#sqGl~_l+S0bPXsDKY z-ZuFk?t1%*RC@FQR<4Ty4i+2wAaD}r;l-P4X^eBGnZ!?`SZJYsJ+FIo+Nzh_$K{SP zL;g4O9#`K%7xY@2YU(IiwpcD+VL}1<>N%6<4fIB) zqy{u)S@s+wc4N)(!aN-$&{s5XtK1?@g28?n{!NGr!_SUIflr>Z2M7i_qHnc8m@rLr z8PDVC`eS?Bji=Zo3DA>eWHVTe6be9VSj-z{hI%~*g(SZ1>2Z|*G37 z{_5?!AZ^nG33lw@UMZXH_Q7lsC4usZNCs5w>!5x~S>do!V=2WXb0QZzlFW7oiZU=&)44fdh7v# zAb#Kee?~znGl!cZq<+IBc&YuC`NoU$kz#BQ)) z?oSl?Zjomn`%ZSn*qx~+<2h&R=%%mE?AF%1Qr`@jDuQw7IIRw zj)M~#!B)haMV*C+vh}_l`b5G4W^!d&bVdv909p3vnS9TN5M(#+0qY+W;Dw9mrzG$D ztWwpWa-U?M)o@X!>xAgrMKw~)LwRMC1M-p^+%Tz7+{B`8XHUC%WvrXvnP+p$J&Xj_l6bn~%DTFGV(2zA+$Xt8F!NCo8$dP@z6Pqlik?_U z%Z3h>n=cH}@|d6|0kubm`kmpj5Y&KEB5Srh9lQM(n1i(GN75I=9Kd5yBH0)kjkXj< z))4lSz+$dd#027zYuQdrf`FzIrRYT{cA~7xDpc+^s&%j2?t4O#*E78}PF99PPu=B4Q|OSjXg$Vvv-z_ z8{?F%y@A$7{|Ue%`XEOdMvR~-l&0U0OtN)vs5z@xHPFAZ5UAh=86iC6a8TCyFCYm* zQ)u&#dnhYVGt^#poZjPBAJk-wlYop6SHh%??8+99*yQq(Iv;QTc z2+ytek7#!Comb@EHa!|k(_AJV{xw>HUA-}<>67mmf=|=OPbl6g+`8pTwO7I-EOpHMCaZZZpU$#_v&^}AFyj6O zVM+-_Lua9HS5hhBpJ+3v2}LBkF(n})Ud4}-MQjmEay;o&A!%zPB0EZe7|WTIrxhLc z=B_X8->szyHv#EWB)bu)Pa0876iLVo+bN;SyJInfViJABWgJN0(Xs)apNYo+&o+3n zh-lQ)kK83PEGpp9?qx~JT8M59c=^3Ge=bv7%SYegU{fI|2k@40nDGkRaKfA9wBt_g zf?m|23Kd}dtNYt^p3N=J?cHSCYB{zoD60_Cf2=)ac9lsgI+AQ;>-j&7o$L0X~ow{;O3^LgLT3s}yYp^HGom9ALj3g1i z4D=8`u4;}`KUfBV9e9S*$~gxXk3Lm1 z2uX(PRqTo#695D8_}?U{@5{t3$a!G-ZYFORN33H{VO%rU)d-B1J6HSmKzv^vJ9a$Q z6)9J@ry@IY*u2FbM_z08jm27lU16oZfY<=;`~};u_r!{9Xn0ibqC{)5;kR&zov8*| z5l!*-BL7Mi0VYIzf%)9_m1n*s&crCYwmvw9^DFF4tl%oyew?mdRiqU|wV)XL&LpMw zzaH5J3cT#OQlH;qU%>P0Ql7$!l(=?)7a0)(z`d2RzXLe#d+THk1~h+w{H}YcwCpz!3dHi3`QjLv z{J2sE^`dWC3ny|XLwr5YlxGj&^1%{7V&K!tV~YUHlH6`nO#^oX^e#a=bVKSoJzmYS zx@5#<;8IarK0nu2)fdyV+(fTyj{PILG zjrw1+)o+#-O~+6^sYn*`Zi*c8H#gT+J9tL~;p}AAh@oh(4SP&Fharqh1>c9LEJ29fln4kY? zN7pG_Hk?W}n@Jzy|EAD#!yA`6Z|vdjv+0TEi;5oN11^3jni7z!ufF-z+VL|{>R?P1 zX7;2h^#G7oAiC9)X_y!%=?c;Cs}4rM>90&NE+b!HCQi4GGf8q1F6b$8Re(r%2R(ab z=J*sDl0S@10`qAa_||kcQMe;KndWn^G^p5XA($&izKWED7{;Isv16)!iU1o}yIWsB z;zS|uy}fGR)ZX4?Fpj)-I2aOurD3bsue*a_v?!1)`IOoC35T|@%N60MqlnmXiGtfv zAmz^`Nnqtwn}P6f2v^r~IjtE{Ef6kz$KJA0OJ@6Y0eVT?7Di%?+h5^t1OaxG3vT`{ zq!Z*u{h4tS#TKHvX-iPb)Y-F=1y51BT!GL$w*s|*%PfGs+1}dr@FS)BhY8#x_g8@? zp)0dKkHnkYhx~zzp1bNs4jzZGYT(r^qFG=zBji;>Mg9a&dczLKz=pX2rW;wIx-^-f!h!!jGxZ< zW*Iu`2U$#$9J@6`EB2Ta`L%t0`fCc&n}0WytnQ7k)iV#fjrXL;D8Gwi<}$--Z&o=Y zg=J3N6&QN!RrScaRYq$L5A+%Is(IKfV=ZYYsM!2o zN*Cwc@6@FhTAro!@!LV(7atUmCfxW90NTEhqFzrSX(MdwgKftW-zPWF;SO# zJ`?l${Lxa9VaFz-^jOesoO6nHM}Pn&@p9lpt{+!-Yqq?Xl;Z&mE<^8z_}|NogPhMY zsTpk|Mf;RMG@jwv)%ZnVVM}C$Nf&!8#S$zmTcjiV8 z%IeUPN+%k8#SLP4#e_S`h&NE>n_ULqTo+F=#Ue33qlF(r1Tm0;4IhOIfE&iRK)@u$ zOAZ6Q^iCAtTJ~XWwh3lo>yaTU`7Dv1KY7aHBtp^f@$y)ZKd^w)|AB9`rCb}u%B7a7 z0OUTY)v44cE5E8FVX!@7Qm66&hc8FGA?Q*!!_?>YmtGir@UwVPo5$YnTbv6fAfD+N z-zqfl&raJtJ=XeBa5w z=?L&WGtNLNc=Q!;(;X=)zHPMR=$U-Q>yjxuU5Z19vE0JVjtUmI%3r?d={gSJj=zQK zM#F|lNG?_GP%|gZSA(&)Bv{_ig+2QBUN$AFHIyw_5nSgtV>A|f4+dOUAQ8ode}=! z+^TTlfCKC2FWg`pQ(M1BP1+H(QSN5d_kmF zv}^nWxJ7UA7)AOCg3@n|;L>Mu8(iyQ=&}bj&^bM}`mIP;qLL14(I)mu@@@<7djq#b zYzWx-tSd+8oPWKq=(PO!AUx+d=MikL z3o1fOgg$Prh4WNU&Yaw)_*r&Z=WrVSW|8BxPm*ba!yb!NFKe~KD368}ou0PZfn)(4 zCBblzc;v9B)zDK%giPbaTS5plh4udvS*`e%yS%t@Z;-3i9f(4s@Kpgp9}x^MxVdLv zFaB}nHKOrxfYFdbS{1KF5KXm{1?X^}w9+59TMvfFlUx6R6zeE>9Q%$ZufR}s!h~q{ zCb8~$ChJ%Z`wJ7*ZcIa`g?fG9a+=-+!c|pK(|$;HYo?*!3$I%P^Hsnz^LKhuT7o6D zeo?_zIf!iq4>f6wD2EE7eQ@Lx7E+hj_m~o`5|Ma6)di>CK+`dlEC;h>%U!!0L+>-8 z6)J4(uW%+>l&;xq13#2Jn4*ksdBH}kN<#-X^Gqz_U^4~uj`ed7hu@!?+*vTbk=4IJ zsnCI-MDhypp(pqPJAZ{cNGFQ$I2hxPD@Pw2{y9t8aDJD;NoB9x2`Z_+ZVCyv&1%dT zEQ51U&Xt;rpS1|4MZwXKIRRQ6@HPehj!bf%N1c{Zp>n!mX?n!gH8EI&8nMR((q*~@ z1D2+X)^rYVE2=H#qyIaP?2q=yV8~kg91JwDcY%^WvRxsVnV47z6w$9mY(iSnN%%@} zX+Js*gCHzbASk-@q!lMEw|v`$q72c7=~3Gme(iaq*p4~7Z_DLgyd56*Q(0=^gM z|7$IC+um{gLwzJeGHP8wNhQ>4?>p%=SSFm9@0=JhQ~Tg+L^-m&QbdfD;x|KtYNa9^ zWFQkcbk;E?^M(JbCNTrA0?7}S6$F4z!R)tMdXN1@9cu&WU>NQQY(HI{({%w!hTfm> zioU!NP%52STwj_)|9g3RlE;O|v|?Snki%%NsJ~2DgN)y4Oo{nVmJD(lJP?7(E8#R; zzJ48DDR{^q)B4_1ER4&fnh*k8e8_#a2NiWFa-o)ts_n3^O2m!yWMlsvnwacltW z_o5HP9Gv4l$LF;E7ce}D6VK|6q8%W$aXEVKdzu=O9E^l7E4uE$vG@$@%{bxWl8wg( zkgpD|nvSeeouiw^jyVA;Q3f=saonG_LkQEl$4%!Nn!rw^e>(pqt6v+)J%qkq1#+fN z4j9<;Heq>(D9VK=2GCsK4O^i^;p6*5PEAS>TEeDcA~$~-bKR@wG5ywF@7R2Ky{dk6 zgdY^cGz+~sc}I2rMriwt*I}#ePo0cC^4CTGDvOZiGP|k5dA^au zPx0tQ3G#ccTpd(g*jqZfuKcgLIuslPErm?bi4K)S=sJ5=4ek0bS~IyB!xJ?WzJUbj5L@ z0U{Yv;aFZ`HPu-LYe3`Au+oWz8ZB}nk;ID_cI%SU>fx;V8SWw9CC)LrhgPQP%Z*e28^|B7>nO|lRdvHOs znQ%yET$FV#y(!E$A1^=5c;b_`P5*Z#(m~Pb?Fh;d4;>*%EDlXdj2?T2ML|UL3vREw z9N@4&B~Rahy#Ql{m!pASz#Ap<@RmQgsa`spCgV&Af@{XBa(bf9qT7C>Cy?SF1Eq3|R-K#gN@B z6+mwA!{=E?GJw;DdKw?#7|1?uvu;-W*;X5dwDMhk+14x!6?BACGAltmC7(AvTeb3t z;ZhcKrhKS(iBxz|dP3PQD0YKy-d9k?&Ltjwa6rf6gZ=f8?KUFZO zSuN{C#RGY(+^nVVXz5N^2iJkk8}lCD5s>J-H?jhVQ#rSZ1u!xC0UX#G6jAbS)+3G! zKaKZ6|5IDN@6*)vY>!%nxItpNm=W6E-KzCN0HsTQQ*J=tLL(d=8Q=&EsP!iWVST&} z!h9R{`S|C`l>G(3Jrw0aoV~FLLTOMCI~llvzMj$0r>F=AaexSw&)BLMQPXjbmmivP ziOY&0b6rHJOG5R!hqYmhksB*s_^d!}`e+7>mO7r`3xjE?&^@0r{jkY$-&5UYIvbLu zGRhe{T`_@z_<(9QXHe2SWVx@alGXCOBl!{#pwQWz{KegAC2FcX3@K$hkm{*N)|G8=b)y@o*wo;#4((@%^LMl3G0{%pZrTQ{zUjpwG}|u8^+0f zl@g#f;xryALTxUjnUQR(K6}xzl04*`TT3=e3AqWP`<*0oMUp#^y0sPo#L2Nayu;YU zVjH36$MS{5*p3F52!O|=WsowW6M-~ejwZPcKQ$G0!E7hB<4J{WF-(xx{}(P;M-mGx z>s^%Bgd_-TT0SQx9Dm}s8DELoC;oHSL(L6Pb9Xr9E(#37m-|!3^6ExUm)?T&xH7x4#gF@X zxf3F*#i^P8r3PRR;hL^icrvTnz*;Royj?V0BhRlCOk{sXA>QOkk5ix}%IVC|8Zpk+ zOM8mLHifc?2uKPp>OXlL+vG&oKb@{EqtrF8S!&~Pu=p5dc}3W0arVHH)RHttpAWn( zvpm}>6se}fBZ%f01uN#j@f-!M8hf98f@|i35&3S zvIvz0pDsQ3#kKv;N~0H*&xO}D#sQk#?E221G$hH87ijW>q^3GGlQ+rY*81*wU9?N3 zxoW2t?v%6DgrbO|!FyG`{at<*+E5XZ@v zxWmZ;@k-X8EE3bG#HKD0RJp^H{pG8y`u!V@3~9+kJ^Icu+>vW?pkFUTWt%2x1Td`P zkNy6wYe4VHEx&EGR1Y{$t+8==Iv@CKk}pM$TOzYnsFZqAYxCV`+zx#_IU za~&m&HomuuOe&6ETySA_N0^Kqd^}O`E)ByJT`5`@eDNBZxQImwK^z*Aw^w@s2F&F; zAR2)gxzXK+TW`a&EIRTtux-fvuc-liqd}Dyr}w##*P}9t-Uc#!)NkX?`I-e)Kb8(oiJx^|ZI4Mj{psp<0QKml z5H#9F;056udsJS`1jzN<0#EM6;xIr%J9hS!{N)ZYMpH`8$2KJf7zD_{8J4mR4Co@` zG6S`a6xGp|$;A(KNZ`k}M2OY}w*Q1sWb=dP(6+v8kw`iT!UkWGNGI*q+r+a(o#z?q z0K#T%YP=G9TAXcH!Ce9|6izk_AyM+hK8gO#we37YX+rL$n+!P~AhCLOqSI(v`os1* zZInN;Qkloai^ND@51d_`t`>d0rl^RDB6_=iOR#(Y=@i^f@L)8uzhCjL# ztZTR*b{$5UP`5?45f|a0X9Vss-svWkdpB^nE-id&+p(C!t_L6)9YgJjd52R!z}g$* znNrf}Rl>0}&xOU#K}|hnVDakU0zd-lL=5g@A_}oP37uS zhgmXp%Z;#JADOtZ+#wb2W*J&F1wPFMb{iMUXd7f)56=!5KC)q-hAI%!8DP+5D@AB$ zg!Gje0ou+Bvr}gs>BOM!w{K2sV%7xjTazmPYB)L(udiw0k9MU3p2#V(-E7(vzk?Zo z$k(6X%@`!_nbAkuBd!tr-%yz{`}wxN(SSPx=k1+7`ibOIU|hfstG_8@Ho5{HiMkX9 zuGT@X@cFVo@_T(~I-k9EJVoGzx&lFo`s(#|y@Wv^^wr)L4b6#OsFGr_00000Vq20200Gvq4S Date: Thu, 1 Jan 2015 14:00:34 +0100 Subject: [PATCH 0281/2375] Slightly improved loose object decompression test --- gitdb/test/test_stream.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index eab9a1950..aa434ad3b 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -16,7 +16,9 @@ DecompressMemMapReader, FDCompressedSha1Writer, LooseObjectDB, - Sha1Writer + Sha1Writer, + MemoryDB, + IStream, ) from gitdb.util import hex_to_bin @@ -27,6 +29,7 @@ import tempfile import os +from io import BytesIO class TestStream(TestBase): """Test stream classes""" @@ -144,6 +147,7 @@ def test_compressed_writer(self): def test_decompress_reader_special_case(self): odb = LooseObjectDB(fixture_path('objects')) + mdb = MemoryDB() for sha in ('888401851f15db0eed60eb1bc29dec5ddcace911', '7bb839852ed5e3a069966281bb08d50012fb309b',): ostream = odb.stream(hex_to_bin(sha)) @@ -151,4 +155,8 @@ def test_decompress_reader_special_case(self): # if there is a bug, we will be missing one byte exactly ! data = ostream.read() assert len(data) == ostream.size + + # Putting it back in should yield nothing new - after all, we have + dump = mdb.store(IStream(ostream.type, ostream.size, BytesIO(data))) + assert dump.hexsha == sha # end for each loose object sha to test From 0d22c80e041dbb5d9d985926b39b7bd7a0573a7a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 1 Jan 2015 16:00:55 +0100 Subject: [PATCH 0282/2375] Added integrity test for loose objects to search large datasets for the issue described in https://github.com/gitpython-developers/GitPython/issues/220 See test notes for proper usage, it all depends on a useful dataset with high entropy --- gitdb/test/performance/test_pack.py | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/gitdb/test/performance/test_pack.py b/gitdb/test/performance/test_pack.py index 97c450d6b..d54a74cf7 100644 --- a/gitdb/test/performance/test_pack.py +++ b/gitdb/test/performance/test_pack.py @@ -9,6 +9,11 @@ TestBigRepoR ) +from gitdb import ( + MemoryDB, + IStream, +) +from gitdb.typ import str_blob_type from gitdb.exc import UnsupportedOperation from gitdb.db.pack import PackedDB from gitdb.utils.compat import xrange @@ -70,6 +75,32 @@ def test_pack_random_access(self): total_kib = total_size / 1000 print("PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (max_items, total_kib, total_kib/elapsed , elapsed, max_items / elapsed), file=sys.stderr) + @skip_on_travis_ci + def test_loose_correctness(self): + """based on the pack(s) of our packed object DB, we will just copy and verify all objects in the back + into the loose object db (memory). + This should help finding dormant issues like this one https://github.com/gitpython-developers/GitPython/issues/220 + faster + :note: It doesn't seem this test can find the issue unless the given pack contains highly compressed + data files, like archives.""" + pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) + mdb = MemoryDB() + for c, sha in enumerate(pdb.sha_iter()): + ostream = pdb.stream(sha) + # the issue only showed on larger files which are hardly compressible ... + if ostream.type != str_blob_type: + continue + istream = IStream(ostream.type, ostream.size, ostream.stream) + mdb.store(istream) + assert istream.binsha == sha + # this can fail ... sometimes, so the packs dataset should be huge + assert len(mdb.stream(sha).read()) == ostream.size + + if c and c % 1000 == 0: + print("Verified %i loose object compression/decompression cycles" % c, file=sys.stderr) + mdb._cache.clear() + # end for each sha to copy + @skip_on_travis_ci def test_correctness(self): pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) From 46a4a79f46ab5a8da97714262095318090674277 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 1 Jan 2015 16:12:15 +0100 Subject: [PATCH 0283/2375] Bumped new version Fixed tiny issue in python 3 --- doc/source/changes.rst | 8 ++++++++ gitdb/__init__.py | 2 +- gitdb/test/test_stream.py | 4 ++-- setup.py | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index f544f76c0..a36fd659c 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,14 @@ Changelog ######### +***** +0.6.1 +***** + +* Fixed possibly critical error, see https://github.com/gitpython-developers/GitPython/issues/220 + + - However, it only seems to occour on high-entropy data and didn't reoccour after the fix + ***** 0.6.0 ***** diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 165993fc9..2a689400e 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -27,7 +27,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 6, 0) +version_info = (0, 6, 1) __version__ = '.'.join(str(i) for i in version_info) diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index aa434ad3b..44a557d53 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -148,8 +148,8 @@ def test_compressed_writer(self): def test_decompress_reader_special_case(self): odb = LooseObjectDB(fixture_path('objects')) mdb = MemoryDB() - for sha in ('888401851f15db0eed60eb1bc29dec5ddcace911', - '7bb839852ed5e3a069966281bb08d50012fb309b',): + for sha in (b'888401851f15db0eed60eb1bc29dec5ddcace911', + b'7bb839852ed5e3a069966281bb08d50012fb309b',): ostream = odb.stream(hex_to_bin(sha)) # if there is a bug, we will be missing one byte exactly ! diff --git a/setup.py b/setup.py index dc142c518..c4d9b2ac4 100755 --- a/setup.py +++ b/setup.py @@ -73,7 +73,7 @@ def get_data_files(self): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 6, 0) +version_info = (0, 6, 1) __version__ = '.'.join(str(i) for i in version_info) setup(cmdclass={'build_ext':build_ext_nofail}, From 8b4939630a0d7362e5a6fbca052922d710a87c7e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 1 Jan 2015 18:26:04 +0100 Subject: [PATCH 0284/2375] Improved decompression test to scan the entire git repository, instead of just packs This should make it easier to assert the issue is truly fixed now [skip ci] --- gitdb/test/performance/test_pack.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gitdb/test/performance/test_pack.py b/gitdb/test/performance/test_pack.py index d54a74cf7..e46031115 100644 --- a/gitdb/test/performance/test_pack.py +++ b/gitdb/test/performance/test_pack.py @@ -11,6 +11,7 @@ from gitdb import ( MemoryDB, + GitDB, IStream, ) from gitdb.typ import str_blob_type @@ -83,7 +84,8 @@ def test_loose_correctness(self): faster :note: It doesn't seem this test can find the issue unless the given pack contains highly compressed data files, like archives.""" - pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) + from gitdb.util import bin_to_hex + pdb = GitDB(os.path.join(self.gitrepopath, 'objects')) mdb = MemoryDB() for c, sha in enumerate(pdb.sha_iter()): ostream = pdb.stream(sha) @@ -92,7 +94,7 @@ def test_loose_correctness(self): continue istream = IStream(ostream.type, ostream.size, ostream.stream) mdb.store(istream) - assert istream.binsha == sha + assert istream.binsha == sha, "Failed on object %s" % bin_to_hex(sha).decode('ascii') # this can fail ... sometimes, so the packs dataset should be huge assert len(mdb.stream(sha).read()) == ostream.size From 84929ed811142e366d6c5916125302c1419acad6 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 4 Jan 2015 11:19:57 +0100 Subject: [PATCH 0285/2375] Applied autopep8 autopep8 -v -j 8 --max-line-length 120 --in-place --recursive --- doc/source/conf.py | 7 ++- smmap/buf.py | 23 ++++---- smmap/exc.py | 2 + smmap/mman.py | 109 ++++++++++++++++++------------------ smmap/test/lib.py | 8 ++- smmap/test/test_buf.py | 20 +++---- smmap/test/test_mman.py | 59 +++++++++---------- smmap/test/test_tutorial.py | 8 +-- smmap/test/test_util.py | 20 +++---- smmap/util.py | 61 ++++++++++---------- 10 files changed, 165 insertions(+), 152 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 90409a138..5aa28e2a6 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -11,7 +11,8 @@ # All configuration values have a default; values that are commented out # serve to show the default. -import sys, os +import sys +import 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 @@ -172,8 +173,8 @@ # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ - ('index', 'smmap.tex', u'smmap Documentation', - u'Sebastian Thiel', 'manual'), + ('index', 'smmap.tex', u'smmap Documentation', + u'Sebastian Thiel', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of diff --git a/smmap/buf.py b/smmap/buf.py index 66029cb99..17d2d369b 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -10,6 +10,7 @@ class SlidingWindowMapBuffer(object): + """A buffer like object which allows direct byte-wise object and slicing into memory of a mapped file. The mapping is controlled by the provided cursor. @@ -20,9 +21,9 @@ class SlidingWindowMapBuffer(object): underneath, it can unfortunately not be used in any non-pure python method which needs a buffer or string""" __slots__ = ( - '_c', # our cursor - '_size', # our supposed size - ) + '_c', # our cursor + '_size', # our supposed size + ) def __init__(self, cursor=None, offset=0, size=sys.maxsize, flags=0): """Initalize the instance to operate on the given cursor. @@ -57,7 +58,7 @@ def __getitem__(self, i): if not c.includes_ofs(i): c.use_region(i, 1) # END handle region usage - return c.buffer()[i-c.ofs_begin()] + return c.buffer()[i - c.ofs_begin()] def __getslice__(self, i, j): c = self._c @@ -72,9 +73,9 @@ def __getslice__(self, i, j): j = self._size + j if (c.ofs_begin() <= i) and (j < c.ofs_end()): b = c.ofs_begin() - return c.buffer()[i-b:j-b] + return c.buffer()[i - b:j - b] else: - l = j-i # total length + l = j - i # total length ofs = i # It's fastest to keep tokens and join later, especially in py3, which was 7 times slower # in the previous iteration of this code @@ -86,7 +87,7 @@ def __getslice__(self, i, j): ofs += len(d) l -= len(d) md.append(d) - #END while there are bytes to read + # END while there are bytes to read return bytes().join(md) # END fast or slow path #{ Interface @@ -100,7 +101,7 @@ def begin_access(self, cursor=None, offset=0, size=sys.maxsize, flags=0): :return: True if the buffer can be used""" if cursor: self._c = cursor - #END update our cursor + # END update our cursor # reuse existing cursors if possible if self._c is not None and self._c.is_associated(): @@ -112,9 +113,9 @@ def begin_access(self, cursor=None, offset=0, size=sys.maxsize, flags=0): # If not, the user is in trouble. if size > self._c.file_size(): size = self._c.file_size() - offset - #END handle size + # END handle size self._size = size - #END set size + # END set size return res # END use our cursor return False @@ -128,7 +129,7 @@ def end_access(self): self._size = 0 if self._c is not None: self._c.unuse_region() - #END unuse region + # END unuse region def cursor(self): """:return: the currently set cursor which provides access to the data""" diff --git a/smmap/exc.py b/smmap/exc.py index 5e90cf722..117664502 100644 --- a/smmap/exc.py +++ b/smmap/exc.py @@ -2,8 +2,10 @@ class MemoryManagerError(Exception): + """Base class for all exceptions thrown by the memory manager""" class RegionCollectionError(MemoryManagerError): + """Thrown if a memory region could not be collected, or if no region for collection was found""" diff --git a/smmap/mman.py b/smmap/mman.py index 6663687d0..c7a459558 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -1,12 +1,12 @@ """Module containing a memory memory manager which provides a sliding window on a number of memory mapped files""" from .util import ( - MapWindow, - MapRegion, - MapRegionList, - is_64_bit, - string_types, - buffer, - ) + MapWindow, + MapRegion, + MapRegionList, + is_64_bit, + string_types, + buffer, +) from weakref import ref import sys @@ -19,6 +19,7 @@ class WindowCursor(object): + """ Pointer into the mapped region of the memory manager, keeping the map alive until it is destroyed and no other client uses it. @@ -29,12 +30,12 @@ class WindowCursor(object): that it must be suited for the somewhat quite different sliding manager. It could be improved, but I see no real need to do so.""" __slots__ = ( - '_manager', # the manger keeping all file regions - '_rlist', # a regions list with regions for our file + '_manager', # the manger keeping all file regions + '_rlist', # a regions list with regions for our file '_region', # our current region or None '_ofs', # relative offset from the actually mapped area to our start area '_size' # maximum size we should provide - ) + ) def __init__(self, manager=None, regions=None): self._manager = manager @@ -65,8 +66,8 @@ def _destroy(self): # this python problem (for now). # The next step is to get rid of the error prone getrefcount alltogether. pass - #END exception handling - #END handle regions + # END exception handling + # END handle regions def _copy_from(self, rhs): """Copy all data from rhs into this instance, handles usage count""" @@ -121,11 +122,11 @@ def use_region(self, offset=0, size=0, flags=0): # offset too large ? if offset >= fsize: return self - #END handle offset + # END handle offset if need_region: self._region = man._obtain_region(self._rlist, offset, size, flags, False) - #END need region handling + # END need region handling self._region.increment_usage_count() self._ofs = offset - self._region._b @@ -221,13 +222,14 @@ def fd(self): :raise ValueError: if the mapping was not created by a file descriptor""" if isinstance(self._rlist.path_or_fd(), string_types()): raise ValueError("File descriptor queried although mapping was generated from path") - #END handle type + # END handle type return self._rlist.path_or_fd() #} END interface class StaticWindowMapManager(object): + """Provides a manager which will produce single size cursors that are allowed to always map the whole file. @@ -240,13 +242,13 @@ class StaticWindowMapManager(object): accommodate this fact""" __slots__ = [ - '_fdict', # mapping of path -> StorageHelper (of some kind - '_window_size', # maximum size of a window - '_max_memory_size', # maximum amount of memory we may allocate - '_max_handle_count', # maximum amount of handles to keep open - '_memory_size', # currently allocated memory size - '_handle_count', # amount of currently allocated file handles - ] + '_fdict', # mapping of path -> StorageHelper (of some kind + '_window_size', # maximum size of a window + '_max_memory_size', # maximum amount of memory we may allocate + '_max_handle_count', # maximum amount of handles to keep open + '_memory_size', # currently allocated memory size + '_handle_count', # amount of currently allocated file handles + ] #{ Configuration MapRegionListCls = MapRegionList @@ -279,7 +281,7 @@ def __init__(self, window_size=0, max_memory_size=0, max_open_handles=sys.maxsiz coeff = 64 if is_64_bit(): coeff = 1024 - #END handle arch + # END handle arch self._window_size = coeff * self._MB_in_bytes # END handle max window size @@ -287,9 +289,9 @@ def __init__(self, window_size=0, max_memory_size=0, max_open_handles=sys.maxsiz coeff = 1024 if is_64_bit(): coeff = 8192 - #END handle arch + # END handle arch self._max_memory_size = coeff * self._MB_in_bytes - #END handle max memory size + # END handle max memory size #{ Internal Methods @@ -310,23 +312,23 @@ def _collect_lru_region(self, size): for regions in self._fdict.values(): for region in regions: # check client count - consider that we keep one reference ourselves ! - if (region.client_count()-2 == 0 and - (lru_region is None or region._uc < lru_region._uc)): + if (region.client_count() - 2 == 0 and + (lru_region is None or region._uc < lru_region._uc)): lru_region = region lru_list = regions # END update lru_region - #END for each region - #END for each regions list + # END for each region + # END for each regions list if lru_region is None: break - #END handle region not found + # END handle region not found num_found += 1 del(lru_list[lru_list.index(lru_region)]) self._memory_size -= lru_region.size() self._handle_count -= 1 - #END while there is more memory to free + # END while there is more memory to free return num_found def _obtain_region(self, a, offset, size, flags, is_recursive): @@ -336,7 +338,7 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): :return: The newly created region""" if self._memory_size + size > self._max_memory_size: self._collect_lru_region(size) - #END handle collection + # END handle collection r = None if a: @@ -354,10 +356,10 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): # we already tried this, and still have no success in obtaining # a mapping. This is an exception, so we propagate it raise - #END handle existing recursion + # END handle existing recursion self._collect_lru_region(0) return self._obtain_region(a, offset, size, flags, True) - #END handle exceptions + # END handle exceptions self._handle_count += 1 self._memory_size += r.size() @@ -404,7 +406,7 @@ def num_file_handles(self): def num_open_files(self): """Amount of opened files in the system""" - return reduce(lambda x, y: x+y, (1 for rlist in self._fdict.values() if len(rlist) > 0), 0) + return reduce(lambda x, y: x + y, (1 for rlist in self._fdict.values() if len(rlist) > 0), 0) def window_size(self): """:return: size of each window when allocating new regions""" @@ -441,7 +443,7 @@ def force_map_handle_removal_win(self, base_path): **Note:** does nothing on non-windows platforms""" if sys.platform != 'win32': return - #END early bailout + # END early bailout num_closed = 0 for path, rlist in self._fdict.items(): @@ -449,13 +451,14 @@ def force_map_handle_removal_win(self, base_path): for region in rlist: region._mf.close() num_closed += 1 - #END path matches - #END for each path + # END path matches + # END for each path return num_closed #} END special purpose interface class SlidingWindowMapManager(StaticWindowMapManager): + """Maintains a list of ranges of mapped memory regions in one or more files and allows to easily obtain additional regions assuring there is no overlap. Once a certain memory limit is reached globally, or if there cannot be more open file handles @@ -482,18 +485,18 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): lo = 0 hi = len(a) while lo < hi: - mid = (lo+hi)//2 + mid = (lo + hi) // 2 ofs = a[mid]._b if ofs <= offset: if a[mid].includes_ofs(offset): r = a[mid] break - #END have region - lo = mid+1 + # END have region + lo = mid + 1 else: hi = mid - #END handle position - #END while bisecting + # END handle position + # END while bisecting if r is None: window_size = self._window_size @@ -506,7 +509,7 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): # Save calls ! if self._memory_size + window_size > self._max_memory_size: self._collect_lru_region(window_size) - #END handle collection + # END handle collection # we assume the list remains sorted by offset insert_pos = 0 @@ -514,7 +517,7 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): if len_regions == 1: if a[0]._b <= offset: insert_pos = 1 - #END maintain sort + # END maintain sort else: # find insert position insert_pos = len_regions @@ -522,8 +525,8 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): if region._b > offset: insert_pos = i break - #END if insert position is correct - #END for each region + # END if insert position is correct + # END for each region # END obtain insert pos # adjust the actual offset and size values to create the largest @@ -531,13 +534,13 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): if insert_pos == 0: if len_regions: right = self.MapWindowCls.from_region(a[insert_pos]) - #END adjust right side + # END adjust right side else: if insert_pos != len_regions: right = self.MapWindowCls.from_region(a[insert_pos]) # END adjust right window left = self.MapWindowCls.from_region(a[insert_pos - 1]) - #END adjust surrounding windows + # END adjust surrounding windows mid.extend_left_to(left, window_size) mid.extend_right_to(right, window_size) @@ -546,13 +549,13 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): # it can happen that we align beyond the end of the file if mid.ofs_end() > right.ofs: mid.size = right.ofs - mid.ofs - #END readjust size + # END readjust size # insert new region at the right offset to keep the order try: if self._handle_count >= self._max_handle_count: raise Exception - #END assert own imposed max file handles + # END assert own imposed max file handles r = self.MapRegionCls(a.path_or_fd(), mid.ofs, mid.size, flags) except Exception: # apparently we are out of system resources or hit a limit @@ -563,10 +566,10 @@ def _obtain_region(self, a, offset, size, flags, is_recursive): # we already tried this, and still have no success in obtaining # a mapping. This is an exception, so we propagate it raise - #END handle existing recursion + # END handle existing recursion self._collect_lru_region(0) return self._obtain_region(a, offset, size, flags, True) - #END handle exceptions + # END handle exceptions self._handle_count += 1 self._memory_size += r.size() diff --git a/smmap/test/lib.py b/smmap/test/lib.py index 67aec6333..93cb09a5e 100644 --- a/smmap/test/lib.py +++ b/smmap/test/lib.py @@ -9,6 +9,7 @@ #{ Utilities class FileCreator(object): + """A instance which creates a temporary file with a prefix and a given size and provides this info to the user. Once it gets deleted, it will remove the temporary file as well.""" @@ -21,7 +22,7 @@ def __init__(self, size, prefix=''): self._size = size fp = open(self._path, "wb") - fp.seek(size-1) + fp.seek(size - 1) fp.write(b'1') fp.close() @@ -32,7 +33,7 @@ def __del__(self): os.remove(self.path) except OSError: pass - #END exception handling + # END exception handling @property def path(self): @@ -46,6 +47,7 @@ def size(self): class TestBase(TestCase): + """Foundation used by all tests""" #{ Configuration @@ -58,7 +60,7 @@ def setUpAll(cls): # nothing for now pass - #END overrides + # END overrides #{ Interface diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index d07b7f4eb..03377154b 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -3,9 +3,9 @@ from .lib import TestBase, FileCreator from smmap.mman import ( - SlidingWindowMapManager, - StaticWindowMapManager - ) + SlidingWindowMapManager, + StaticWindowMapManager +) from smmap.buf import SlidingWindowMapBuffer from random import randint @@ -57,11 +57,11 @@ def test_basics(self): with open(fc.path, 'rb') as fp: data = fp.read() assert data[offset] == buf[0] - assert data[offset:offset*2] == buf[0:offset] + assert data[offset:offset * 2] == buf[0:offset] # negative indices, partial slices - assert buf[-1] == buf[len(buf)-1] - assert buf[-10:] == buf[len(buf)-10:len(buf)] + assert buf[-1] == buf[len(buf) - 1] + assert buf[-10:] == buf[len(buf) - 10:len(buf)] # end access makes its cursor invalid buf.end_access() @@ -97,7 +97,7 @@ def test_basics(self): buf.begin_access() while num_accesses_left: num_accesses_left -= 1 - if access_mode: # multi + if access_mode: # multi ofs_start = randint(0, fsize) ofs_end = randint(ofs_start, fsize) d = buf[ofs_start:ofs_end] @@ -108,7 +108,7 @@ def test_basics(self): pos = randint(0, fsize) assert buf[pos] == data[pos] num_bytes += 1 - #END handle mode + # END handle mode # END handle num accesses buf.end_access() @@ -116,10 +116,10 @@ def test_basics(self): assert manager.collect() assert manager.num_file_handles() == 0 elapsed = max(time() - st, 0.001) # prevent zero division errors on windows - mb = float(1000*1000) + mb = float(1000 * 1000) mode_str = (access_mode and "slice") or "single byte" print("%s: Made %i random %s accesses to buffer created from %s reading a total of %f mb in %f s (%f mb/s)" - % (man_id, max_num_accesses, mode_str, type(item), num_bytes/mb, elapsed, (num_bytes/mb)/elapsed), + % (man_id, max_num_accesses, mode_str, type(item), num_bytes / mb, elapsed, (num_bytes / mb) / elapsed), file=sys.stderr) # END handle access mode # END for each manager diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index d903af681..b718b065f 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -3,10 +3,10 @@ from .lib import TestBase, FileCreator from smmap.mman import ( - WindowCursor, - SlidingWindowMapManager, - StaticWindowMapManager - ) + WindowCursor, + SlidingWindowMapManager, + StaticWindowMapManager +) from smmap.util import align_to_mmap from random import randint @@ -29,7 +29,7 @@ def test_cursor(self): cv = man.make_cursor(fc.path) assert not cv.is_valid() # no region mapped yet - assert cv.is_associated()# but it know where to map it from + assert cv.is_associated() # but it know where to map it from assert cv.file_size() == fc.size assert cv.path() == fc.path @@ -60,7 +60,7 @@ def test_memory_manager(self): winsize_cmp_val = 0 if isinstance(man, StaticWindowMapManager): winsize_cmp_val = -1 - #END handle window size + # END handle window size assert man.window_size() > winsize_cmp_val assert man.mapped_memory_size() == 0 assert man.max_mapped_memory_size() > 0 @@ -89,8 +89,8 @@ def test_memory_manager(self): self.assertRaises(ValueError, c.path) else: self.assertRaises(ValueError, c.fd) - #END handle value error - #END for each input + # END handle value error + # END for each input os.close(fd) # END for each manager type @@ -101,7 +101,7 @@ def test_memman_operation(self): data = fp.read() fd = os.open(fc.path, os.O_RDONLY) max_num_handles = 15 - #small_size = + # small_size = for mtype, args in ((StaticWindowMapManager, (0, fc.size // 3, max_num_handles)), (SlidingWindowMapManager, (fc.size // 100, fc.size // 3, max_num_handles)),): for item in (fc.path, fd): @@ -120,22 +120,23 @@ def test_memman_operation(self): size = man.window_size() // 2 assert c.use_region(base_offset, size).is_valid() rr = c.region_ref() - assert rr().client_count() == 2 # the manager and the cursor and us + assert rr().client_count() == 2 # the manager and the cursor and us assert man.num_open_files() == 1 assert man.num_file_handles() == 1 assert man.mapped_memory_size() == rr().size() - #assert c.size() == size # the cursor may overallocate in its static version + # assert c.size() == size # the cursor may overallocate in its static version assert c.ofs_begin() == base_offset assert rr().ofs_begin() == 0 # it was aligned and expanded if man.window_size(): - assert rr().size() == align_to_mmap(man.window_size(), True) # but isn't larger than the max window (aligned) + # but isn't larger than the max window (aligned) + assert rr().size() == align_to_mmap(man.window_size(), True) else: assert rr().size() == fc.size - #END ignore static managers which dont use windows and are aligned to file boundaries + # END ignore static managers which dont use windows and are aligned to file boundaries - assert c.buffer()[:] == data[base_offset:base_offset+(size or c.size())] + assert c.buffer()[:] == data[base_offset:base_offset + (size or c.size())] # obtain second window, which spans the first part of the file - it is a still the same window nsize = (size or fc.size) - 10 @@ -153,16 +154,16 @@ def test_memman_operation(self): if man.window_size(): assert man.num_file_handles() == 2 assert c.size() < size - assert c.region_ref()() is not rr() # old region is still available, but has not curser ref anymore - assert rr().client_count() == 1 # only held by manager + assert c.region_ref()() is not rr() # old region is still available, but has not curser ref anymore + assert rr().client_count() == 1 # only held by manager else: assert c.size() < fc.size - #END ignore static managers which only have one handle per file + # END ignore static managers which only have one handle per file rr = c.region_ref() - assert rr().client_count() == 2 # manager + cursor - assert rr().ofs_begin() < c.ofs_begin() # it should have extended itself to the left - assert rr().ofs_end() <= fc.size # it cannot be larger than the file - assert c.buffer()[:] == data[base_offset:base_offset+(size or c.size())] + assert rr().client_count() == 2 # manager + cursor + assert rr().ofs_begin() < c.ofs_begin() # it should have extended itself to the left + assert rr().ofs_end() <= fc.size # it cannot be larger than the file + assert c.buffer()[:] == data[base_offset:base_offset + (size or c.size())] # unising a region makes the cursor invalid c.unuse_region() @@ -171,7 +172,7 @@ def test_memman_operation(self): # but doesn't change anything regarding the handle count - we cache it and only # remove mapped regions if we have to assert man.num_file_handles() == 2 - #END ignore this for static managers + # END ignore this for static managers # iterate through the windows, verify data contents # this will trigger map collection after a while @@ -193,21 +194,21 @@ def test_memman_operation(self): # precondition if man.window_size(): assert max_mapped_memory_size >= mapped_memory_size() - #END statics will overshoot, which is fine + # END statics will overshoot, which is fine assert max_file_handles >= num_file_handles() assert c.use_region(base_offset, (size or c.size())).is_valid() csize = c.size() - assert c.buffer()[:] == data[base_offset:base_offset+csize] + assert c.buffer()[:] == data[base_offset:base_offset + csize] memory_read += csize assert includes_ofs(base_offset) - assert includes_ofs(base_offset+csize-1) - assert not includes_ofs(base_offset+csize) + assert includes_ofs(base_offset + csize - 1) + assert not includes_ofs(base_offset + csize) # END while we should do an access - elapsed = max(time() - st, 0.001) # prevent zero divison errors on windows + elapsed = max(time() - st, 0.001) # prevent zero divison errors on windows mb = float(1000 * 1000) print("%s: Read %i mb of memory with %i random on cursor initialized with %s accesses in %fs (%f mb/s)\n" - % (mtype, memory_read/mb, max_random_accesses, type(item), elapsed, (memory_read/mb)/elapsed), + % (mtype, memory_read / mb, max_random_accesses, type(item), elapsed, (memory_read / mb) / elapsed), file=sys.stderr) # an offset as large as the size doesn't work ! @@ -217,6 +218,6 @@ def test_memman_operation(self): assert man.num_file_handles() assert man.collect() assert man.num_file_handles() == 0 - #END for each item + # END for each item # END for each manager type os.close(fd) diff --git a/smmap/test/test_tutorial.py b/smmap/test/test_tutorial.py index 5c931de73..f7a2128a9 100644 --- a/smmap/test/test_tutorial.py +++ b/smmap/test/test_tutorial.py @@ -20,7 +20,7 @@ def test_example(self): # Cursors ########## import smmap.test.lib - fc = smmap.test.lib.FileCreator(1024*1024*8, "test_file") + fc = smmap.test.lib.FileCreator(1024 * 1024 * 8, "test_file") # obtain a cursor to access some file. c = mman.make_cursor(fc.path) @@ -40,7 +40,7 @@ def test_example(self): assert c.size() c.buffer()[0] # first byte c.buffer()[1:10] # first 9 bytes - c.buffer()[c.size()-1] # last byte + c.buffer()[c.size() - 1] # last byte # its recommended not to create big slices when feeding the buffer # into consumers (e.g. struct or zlib). @@ -72,8 +72,8 @@ def test_example(self): assert buf.cursor().is_valid() buf[0] # access the first byte - buf[-1] # access the last ten bytes on the file - buf[-10:]# access the last ten bytes + buf[-1] # access the last ten bytes on the file + buf[-10:] # access the last ten bytes # If you want to keep the instance between different accesses, use the # dedicated methods diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 745fedf2e..0bbf91b65 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -1,13 +1,13 @@ from .lib import TestBase, FileCreator from smmap.util import ( - MapWindow, - MapRegion, - MapRegionList, - ALLOCATIONGRANULARITY, - is_64_bit, - align_to_mmap - ) + MapWindow, + MapRegion, + MapRegionList, + ALLOCATIONGRANULARITY, + is_64_bit, + align_to_mmap +) import os import sys @@ -74,7 +74,7 @@ def test_region(self): assert rhalfofs.ofs_begin() == rofs and rhalfofs.size() == fc.size - rofs assert rhalfsize.ofs_begin() == 0 and rhalfsize.size() == half_size - assert rfull.includes_ofs(0) and rfull.includes_ofs(fc.size-1) and rfull.includes_ofs(half_size) + assert rfull.includes_ofs(0) and rfull.includes_ofs(fc.size - 1) and rfull.includes_ofs(half_size) assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxsize) # with the values we have, this test only works on windows where an alignment # size of 4096 is assumed. @@ -83,7 +83,7 @@ def test_region(self): # argument of mmap. if sys.platform != 'win32': assert rhalfofs.includes_ofs(rofs) and not rhalfofs.includes_ofs(0) - #END handle platforms + # END handle platforms # auto-refcount assert rfull.client_count() == 1 @@ -111,7 +111,7 @@ def test_region_list(self): assert len(ml) == 0 assert ml.path_or_fd() == item assert ml.file_size() == fc.size - #END handle input + # END handle input os.close(fd) def test_util(self): diff --git a/smmap/util.py b/smmap/util.py index 394e6b197..e079a527a 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -10,10 +10,10 @@ # in python pre 2.6, the ALLOCATIONGRANULARITY does not exist as it is mainly # useful for aligning the offset. The offset argument doesn't exist there though from mmap import PAGESIZE as ALLOCATIONGRANULARITY -#END handle pythons missing quality assurance +# END handle pythons missing quality assurance __all__ = ["align_to_mmap", "is_64_bit", "buffer", - "MapWindow", "MapRegion", "MapRegionList", "ALLOCATIONGRANULARITY"] + "MapWindow", "MapRegion", "MapRegionList", "ALLOCATIONGRANULARITY"] #{ Utilities @@ -25,7 +25,7 @@ def buffer(obj, offset, size): # return memoryview(obj)[offset:offset+size] # doing it directly is much faster ! - return obj[offset:offset+size] + return obj[offset:offset + size] def string_types(): @@ -45,7 +45,7 @@ def align_to_mmap(num, round_up): res = (num // ALLOCATIONGRANULARITY) * ALLOCATIONGRANULARITY if round_up and (res != num): res += ALLOCATIONGRANULARITY - #END handle size + # END handle size return res @@ -59,11 +59,12 @@ def is_64_bit(): #{ Utility Classes class MapWindow(object): + """Utility type which is used to snap windows towards each other, and to adjust their size""" __slots__ = ( - 'ofs', # offset into the file in bytes - 'size' # size of the window in bytes - ) + 'ofs', # offset into the file in bytes + 'size' # size of the window in bytes + ) def __init__(self, offset, size): self.ofs = offset @@ -104,21 +105,22 @@ def extend_right_to(self, window, max_size): class MapRegion(object): + """Defines a mapped region of memory, aligned to pagesizes **Note:** deallocates used region automatically on destruction""" __slots__ = [ - '_b', # beginning of mapping - '_mf', # mapped memory chunk (as returned by mmap) - '_uc', # total amount of usages - '_size', # cached size of our memory map - '__weakref__' - ] + '_b', # beginning of mapping + '_mf', # mapped memory chunk (as returned by mmap) + '_uc', # total amount of usages + '_size', # cached size of our memory map + '__weakref__' + ] _need_compat_layer = sys.version_info[0] < 3 and sys.version_info[1] < 6 if _need_compat_layer: __slots__.append('_mfb') # mapped memory buffer to provide offset - #END handle additional slot + # END handle additional slot #{ Configuration # Used for testing only. If True, all data will be loaded into memory at once. @@ -142,7 +144,7 @@ def __init__(self, path_or_fd, ofs, size, flags=0): fd = path_or_fd else: fd = os.open(path_or_fd, os.O_RDONLY | getattr(os, 'O_BINARY', 0) | flags) - #END handle fd + # END handle fd try: kwargs = dict(access=ACCESS_READ, offset=ofs) @@ -162,18 +164,18 @@ def __init__(self, path_or_fd, ofs, size, flags=0): self._mf = self._read_into_memory(fd, ofs, actual_size) else: self._mf = mmap(fd, actual_size, **kwargs) - #END handle memory mode + # END handle memory mode self._size = len(self._mf) if self._need_compat_layer: self._mfb = buffer(self._mf, ofs, self._size) - #END handle buffer wrapping + # END handle buffer wrapping finally: if isinstance(path_or_fd, string_types()): os.close(fd) - #END only close it if we opened it - #END close file handle + # END only close it if we opened it + # END close file handle def _read_into_memory(self, fd, offset, size): """:return: string data as read from the given file descriptor, offset and size """ @@ -181,11 +183,11 @@ def _read_into_memory(self, fd, offset, size): mf = '' bytes_todo = size while bytes_todo: - chunk = 1024*1024 + chunk = 1024 * 1024 d = os.read(fd, chunk) bytes_todo -= len(d) mf += d - #END loop copy items + # END loop copy items return mf def __repr__(self): @@ -221,7 +223,7 @@ def client_count(self): """:return: number of clients currently using this region""" from sys import getrefcount # -1: self on stack, -1 self in this method, -1 self in getrefcount - return getrefcount(self)-3 + return getrefcount(self) - 3 def usage_count(self): """:return: amount of usages so far""" @@ -245,17 +247,18 @@ def buffer(self): def includes_ofs(self, ofs): return self._b <= ofs < self._size - #END handle compat layer + # END handle compat layer #} END interface class MapRegionList(list): + """List of MapRegion instances associating a path with a list of regions.""" __slots__ = ( - '_path_or_fd', # path or file descriptor which is mapped by all our regions - '_file_size' # total size of the file we map - ) + '_path_or_fd', # path or file descriptor which is mapped by all our regions + '_file_size' # total size of the file we map + ) def __new__(cls, path): return super(MapRegionList, cls).__new__(cls) @@ -267,7 +270,7 @@ def __init__(self, path_or_fd): def client_count(self): """:return: amount of clients which hold a reference to this instance""" from sys import getrefcount - return getrefcount(self)-3 + return getrefcount(self) - 3 def path_or_fd(self): """:return: path or file descriptor we are attached to""" @@ -280,8 +283,8 @@ def file_size(self): self._file_size = os.stat(self._path_or_fd).st_size else: self._file_size = os.fstat(self._path_or_fd).st_size - #END handle path type - #END update file size + # END handle path type + # END update file size return self._file_size #} END utility classes From ff7615321ee31d981a171f7677a56a971c554059 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 4 Jan 2015 11:21:36 +0100 Subject: [PATCH 0286/2375] Applied autopep8 autopep8 -v -j 8 --max-line-length 120 --in-place --recursive --- doc/source/conf.py | 7 +- gitdb/__init__.py | 6 +- gitdb/base.py | 20 +- gitdb/db/base.py | 12 +- gitdb/db/git.py | 5 +- gitdb/db/loose.py | 8 +- gitdb/db/mem.py | 3 +- gitdb/db/pack.py | 6 +- gitdb/db/ref.py | 2 + gitdb/exc.py | 14 ++ gitdb/ext/smmap | 2 +- gitdb/fun.py | 104 ++++++----- gitdb/pack.py | 111 ++++++----- gitdb/stream.py | 52 +++--- gitdb/test/db/lib.py | 4 +- gitdb/test/db/test_git.py | 8 +- gitdb/test/db/test_loose.py | 3 +- gitdb/test/db/test_mem.py | 1 + gitdb/test/db/test_pack.py | 6 +- gitdb/test/db/test_ref.py | 5 +- gitdb/test/lib.py | 32 ++-- gitdb/test/performance/__init__.py | 1 - gitdb/test/performance/lib.py | 20 +- gitdb/test/performance/test_pack.py | 34 ++-- gitdb/test/performance/test_pack_streaming.py | 33 ++-- gitdb/test/performance/test_stream.py | 49 ++--- gitdb/test/test_base.py | 15 +- gitdb/test/test_example.py | 3 +- gitdb/test/test_pack.py | 34 ++-- gitdb/test/test_stream.py | 12 +- gitdb/test/test_util.py | 2 +- gitdb/typ.py | 6 +- gitdb/util.py | 34 ++-- gitdb/utils/compat.py | 2 +- gitdb/utils/encoding.py | 2 + setup.py | 174 +++++++++--------- 36 files changed, 460 insertions(+), 372 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 723a34503..68d9a3fcd 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -11,7 +11,8 @@ # All configuration values have a default; values that are commented out # serve to show the default. -import sys, os +import sys +import 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 @@ -171,8 +172,8 @@ # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ - ('index', 'GitDB.tex', u'GitDB Documentation', - u'Sebastian Thiel', 'manual'), + ('index', 'GitDB.tex', u'GitDB Documentation', + u'Sebastian Thiel', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 2a689400e..791a2ef2f 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -8,6 +8,8 @@ import os #{ Initialization + + def _init_externals(): """Initialize external projects by putting them into the path""" for module in ('smmap',): @@ -17,8 +19,8 @@ def _init_externals(): __import__(module) except ImportError: raise ImportError("'%s' could not be imported, assure it is located in your PYTHONPATH" % module) - #END verify import - #END handel imports + # END verify import + # END handel imports #} END initialization diff --git a/gitdb/base.py b/gitdb/base.py index a33fb67b9..5760b8af0 100644 --- a/gitdb/base.py +++ b/gitdb/base.py @@ -11,12 +11,14 @@ ) __all__ = ('OInfo', 'OPackInfo', 'ODeltaPackInfo', - 'OStream', 'OPackStream', 'ODeltaPackStream', - 'IStream', 'InvalidOInfo', 'InvalidOStream' ) + 'OStream', 'OPackStream', 'ODeltaPackStream', + 'IStream', 'InvalidOInfo', 'InvalidOStream') #{ ODB Bases + class OInfo(tuple): + """Carries information about an object in an ODB, provding information about the binary sha of the object, the type_string as well as the uncompressed size in bytes. @@ -62,6 +64,7 @@ def size(self): class OPackInfo(tuple): + """As OInfo, but provides a type_id property to retrieve the numerical type id, and does not include a sha. @@ -71,7 +74,7 @@ class OPackInfo(tuple): __slots__ = tuple() def __new__(cls, packoffset, type, size): - return tuple.__new__(cls, (packoffset,type, size)) + return tuple.__new__(cls, (packoffset, type, size)) def __init__(self, *args): tuple.__init__(self) @@ -98,6 +101,7 @@ def size(self): class ODeltaPackInfo(OPackInfo): + """Adds delta specific information, Either the 20 byte sha which points to some object in the database, or the negative offset from the pack_offset, so that pack_offset - delta_info yields @@ -115,6 +119,7 @@ def delta_info(self): class OStream(OInfo): + """Base for object streams retrieved from the database, providing additional information about the stream. Generally, ODB streams are read-only as objects are immutable""" @@ -124,7 +129,6 @@ def __new__(cls, sha, type, size, stream, *args, **kwargs): """Helps with the initialization of subclasses""" return tuple.__new__(cls, (sha, type, size, stream)) - def __init__(self, *args, **kwargs): tuple.__init__(self) @@ -141,6 +145,7 @@ def stream(self): class ODeltaStream(OStream): + """Uses size info of its stream, delaying reads""" def __new__(cls, sha, type, size, stream, *args, **kwargs): @@ -157,6 +162,7 @@ def size(self): class OPackStream(OPackInfo): + """Next to pack object information, a stream outputting an undeltified base object is provided""" __slots__ = tuple() @@ -176,13 +182,13 @@ def stream(self): class ODeltaPackStream(ODeltaPackInfo): + """Provides a stream outputting the uncompressed offset delta information""" __slots__ = tuple() def __new__(cls, packoffset, type, size, delta_info, stream): return tuple.__new__(cls, (packoffset, type, size, delta_info, stream)) - #{ Stream Reader Interface def read(self, size=-1): return self[4].read(size) @@ -194,6 +200,7 @@ def stream(self): class IStream(list): + """Represents an input content stream to be fed into the ODB. It is mutable to allow the ODB to record information about the operations outcome right in this instance. @@ -246,7 +253,6 @@ def _binsha(self): binsha = property(_binsha, _set_binsha) - def _type(self): return self[1] @@ -275,6 +281,7 @@ def _set_stream(self, stream): class InvalidOInfo(tuple): + """Carries information about a sha identifying an object which is invalid in the queried database. The exception attribute provides more information about the cause of the issue""" @@ -301,6 +308,7 @@ def error(self): class InvalidOStream(InvalidOInfo): + """Carries information about an invalid ODB stream""" __slots__ = tuple() diff --git a/gitdb/db/base.py b/gitdb/db/base.py index a670eea63..2615b13cc 100644 --- a/gitdb/db/base.py +++ b/gitdb/db/base.py @@ -19,11 +19,11 @@ from functools import reduce - __all__ = ('ObjectDBR', 'ObjectDBW', 'FileDBBase', 'CompoundDB', 'CachingDB') class ObjectDBR(object): + """Defines an interface for object database lookup. Objects are identified either by their 20 byte bin sha""" @@ -61,6 +61,7 @@ def sha_iter(self): class ObjectDBW(object): + """Defines an interface to create objects in the database""" def __init__(self, *args, **kwargs): @@ -100,6 +101,7 @@ def store(self, istream): class FileDBBase(object): + """Provides basic facilities to retrieve files of interest, including caching facilities to help mapping hexsha's to objects""" @@ -113,7 +115,6 @@ def __init__(self, root_path): super(FileDBBase, self).__init__() self._root_path = root_path - #{ Interface def root_path(self): """:return: path at which this db operates""" @@ -128,6 +129,7 @@ def db_path(self, rela_path): class CachingDB(object): + """A database which uses caches to speed-up access""" #{ Interface @@ -143,8 +145,6 @@ def update_cache(self, force=False): # END interface - - def _databases_recursive(database, output): """Fill output list with database from db, in order. Deals with Loose, Packed and compound databases.""" @@ -159,10 +159,12 @@ def _databases_recursive(database, output): class CompoundDB(ObjectDBR, LazyMixin, CachingDB): + """A database which delegates calls to sub-databases. Databases are stored in the lazy-loaded _dbs attribute. Define _set_cache_ to update it with your databases""" + def _set_cache_(self, attr): if attr == '_dbs': self._dbs = list() @@ -207,7 +209,7 @@ def stream(self, sha): def size(self): """:return: total size of all contained databases""" - return reduce(lambda x,y: x+y, (db.size() for db in self._dbs), 0) + return reduce(lambda x, y: x + y, (db.size() for db in self._dbs), 0) def sha_iter(self): return chain(*(db.sha_iter() for db in self._dbs)) diff --git a/gitdb/db/git.py b/gitdb/db/git.py index d22e3f1b9..a4f6f54c3 100644 --- a/gitdb/db/git.py +++ b/gitdb/db/git.py @@ -20,6 +20,7 @@ class GitDB(FileDBBase, ObjectDBW, CompoundDB): + """A git-style object database, which contains all objects in the 'objects' subdirectory""" # Configuration @@ -41,8 +42,8 @@ def _set_cache_(self, attr): self._dbs = list() loose_db = None for subpath, dbcls in ((self.packs_dir, self.PackDBCls), - (self.loose_dir, self.LooseDBCls), - (self.alternates_dir, self.ReferenceDBCls)): + (self.loose_dir, self.LooseDBCls), + (self.alternates_dir, self.ReferenceDBCls)): path = self.db_path(subpath) if os.path.exists(path): self._dbs.append(dbcls(path)) diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index 374302611..e924080ef 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -57,10 +57,11 @@ import os -__all__ = ( 'LooseObjectDB', ) +__all__ = ('LooseObjectDB', ) class LooseObjectDB(FileDBBase, ObjectDBR, ObjectDBW): + """A database which operates on loose object files""" # CONFIGURATION @@ -73,7 +74,6 @@ class LooseObjectDB(FileDBBase, ObjectDBR, ObjectDBW): if os.name == 'nt': new_objects_mode = int("644", 8) - def __init__(self, root_path): super(LooseObjectDB, self).__init__(root_path) self._hexsha_to_file = dict() @@ -164,7 +164,7 @@ def info(self, sha): def stream(self, sha): m = self._map_loose_object(sha) - type, size, stream = DecompressMemMapReader.new(m, close_on_deletion = True) + type, size, stream = DecompressMemMapReader.new(m, close_on_deletion=True) return OStream(sha, type, size, stream) def has_object(self, sha): @@ -199,7 +199,7 @@ def store(self, istream): else: # write object with header, we have to make a new one write_object(istream.type, istream.size, istream.read, writer.write, - chunk_size=self.stream_chunk_size) + chunk_size=self.stream_chunk_size) # END handle direct stream copies finally: if tmp_path: diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index 1aa0d511f..595dbf4fc 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -28,7 +28,9 @@ __all__ = ("MemoryDB", ) + class MemoryDB(ObjectDBR, ObjectDBW): + """A memory database stores everything to memory, providing fast IO and object retrieval. It should be used to buffer results and obtain SHAs before writing it to the actual physical storage, as it allows to query whether object already @@ -85,7 +87,6 @@ def sha_iter(self): except AttributeError: return self._cache.keys() - #{ Interface def stream_copy(self, sha_iter, odb): """Copy the streams as identified by sha's yielded by sha_iter into the given odb diff --git a/gitdb/db/pack.py b/gitdb/db/pack.py index eaf431a22..6b03d8383 100644 --- a/gitdb/db/pack.py +++ b/gitdb/db/pack.py @@ -31,6 +31,7 @@ class PackedDB(FileDBBase, ObjectDBR, CachingDB, LazyMixin): + """A database operating on a set of object packs""" # sort the priority list every N queries @@ -113,7 +114,7 @@ def sha_iter(self): def size(self): sizes = [item[1].index().size() for item in self._entities] - return reduce(lambda x,y: x+y, sizes, 0) + return reduce(lambda x, y: x + y, sizes, 0) #} END object db read @@ -127,7 +128,6 @@ def store(self, istream): #} END object db write - #{ Interface def update_cache(self, force=False): @@ -177,7 +177,7 @@ def update_cache(self, force=False): def entities(self): """:return: list of pack entities operated upon by this database""" - return [ item[1] for item in self._entities ] + return [item[1] for item in self._entities] def partial_to_complete_sha(self, partial_binsha, canonical_length): """:return: 20 byte sha as inferred by the given partial binary sha diff --git a/gitdb/db/ref.py b/gitdb/db/ref.py index d98912643..83a9f611d 100644 --- a/gitdb/db/ref.py +++ b/gitdb/db/ref.py @@ -8,7 +8,9 @@ __all__ = ('ReferenceDB', ) + class ReferenceDB(CompoundDB): + """A database consisting of database referred to in a file""" # Configuration diff --git a/gitdb/exc.py b/gitdb/exc.py index 73f84d299..d58442f2b 100644 --- a/gitdb/exc.py +++ b/gitdb/exc.py @@ -5,28 +5,42 @@ """Module with common exceptions""" from gitdb.util import to_hex_sha + class ODBError(Exception): + """All errors thrown by the object database""" + class InvalidDBRoot(ODBError): + """Thrown if an object database cannot be initialized at the given path""" + class BadObject(ODBError): + """The object with the given SHA does not exist. Instantiate with the failed sha""" def __str__(self): return "BadObject: %s" % to_hex_sha(self.args[0]) + class ParseError(ODBError): + """Thrown if the parsing of a file failed due to an invalid format""" + class AmbiguousObjectName(ODBError): + """Thrown if a possibly shortened name does not uniquely represent a single object in the database""" + class BadObjectType(ODBError): + """The object had an unsupported type""" + class UnsupportedOperation(ODBError): + """Thrown if the given operation cannot be supported by the object database""" diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index eb40b44ce..84929ed81 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit eb40b44ce4a6e646aabf7b7091d876738336c42f +Subproject commit 84929ed811142e366d6c5916125302c1419acad6 diff --git a/gitdb/fun.py b/gitdb/fun.py index b7662b495..17da4e5da 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -31,15 +31,15 @@ REF_DELTA = 7 delta_types = (OFS_DELTA, REF_DELTA) -type_id_to_type_map = { - 0 : b'', # EXT 1 - 1 : str_commit_type, - 2 : str_tree_type, - 3 : str_blob_type, - 4 : str_tag_type, - 5 : b'', # EXT 2 - OFS_DELTA : "OFS_DELTA", # OFFSET DELTA - REF_DELTA : "REF_DELTA" # REFERENCE DELTA +type_id_to_type_map = { + 0: b'', # EXT 1 + 1: str_commit_type, + 2: str_tree_type, + 3: str_blob_type, + 4: str_tag_type, + 5: b'', # EXT 2 + OFS_DELTA: "OFS_DELTA", # OFFSET DELTA + REF_DELTA: "REF_DELTA" # REFERENCE DELTA } type_to_type_id_map = { @@ -55,8 +55,8 @@ chunk_size = 1000 * mmap.PAGESIZE __all__ = ('is_loose_object', 'loose_object_header_info', 'msb_size', 'pack_object_header_info', - 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data', - 'is_equal_canonical_sha', 'connect_deltas', 'DeltaChunkList', 'create_pack_object_header') + 'write_object', 'loose_object_header', 'stream_copy', 'apply_delta_data', + 'is_equal_canonical_sha', 'connect_deltas', 'DeltaChunkList', 'create_pack_object_header') #{ Structures @@ -72,6 +72,7 @@ def _set_delta_rbound(d, size): # MUST NOT DO THIS HERE return d + def _move_delta_lbound(d, bytes): """Move the delta by the given amount of bytes, reducing its size so that its right bound stays static @@ -89,9 +90,11 @@ def _move_delta_lbound(d, bytes): return d + def delta_duplicate(src): return DeltaChunk(src.to, src.ts, src.so, src.data) + def delta_chunk_apply(dc, bbuf, write): """Apply own data to the target buffer :param bbuf: buffer providing source bytes for copy operations @@ -112,15 +115,16 @@ def delta_chunk_apply(dc, bbuf, write): class DeltaChunk(object): + """Represents a piece of a delta, it can either add new data, or copy existing one from a source buffer""" __slots__ = ( - 'to', # start offset in the target buffer in bytes + 'to', # start offset in the target buffer in bytes 'ts', # size of this chunk in the target buffer in bytes 'so', # start offset in the source buffer in bytes or None 'data', # chunk of bytes to be added to the target buffer, # DeltaChunkList to use as base, or None - ) + ) def __init__(self, to, ts, so, data): self.to = to @@ -142,6 +146,7 @@ def has_data(self): #} END interface + def _closest_index(dcl, absofs): """:return: index at which the given absofs should be inserted. The index points to the DeltaChunk with a target buffer absofs that equals or is greater than @@ -160,7 +165,8 @@ def _closest_index(dcl, absofs): lo = mid + 1 # END handle bound # END for each delta absofs - return len(dcl)-1 + return len(dcl) - 1 + def delta_list_apply(dcl, bbuf, write): """Apply the chain's changes and write the final result using the passed @@ -173,6 +179,7 @@ def delta_list_apply(dcl, bbuf, write): delta_chunk_apply(dc, bbuf, write) # END for each dc + def delta_list_slice(dcl, absofs, size, ndcl): """:return: Subsection of this list at the given absolute offset, with the given size in bytes. @@ -209,6 +216,7 @@ def delta_list_slice(dcl, absofs, size, ndcl): class DeltaChunkList(list): + """List with special functionality to deal with DeltaChunks. There are two types of lists we represent. The one was created bottom-up, working towards the latest delta, the other kind was created top-down, working from the @@ -252,16 +260,16 @@ def compress(self): dc = self[i] i += 1 if dc.data is None: - if first_data_index is not None and i-2-first_data_index > 1: - #if first_data_index is not None: + if first_data_index is not None and i - 2 - first_data_index > 1: + # if first_data_index is not None: nd = StringIO() # new data so = self[first_data_index].to # start offset in target buffer - for x in xrange(first_data_index, i-1): + for x in xrange(first_data_index, i - 1): xdc = self[x] nd.write(xdc.data[:xdc.ts]) # END collect data - del(self[first_data_index:i-1]) + del(self[first_data_index:i - 1]) buf = nd.getvalue() self.insert(first_data_index, DeltaChunk(so, len(buf), 0, buf)) @@ -274,10 +282,10 @@ def compress(self): # END skip non-data chunks if first_data_index is None: - first_data_index = i-1 + first_data_index = i - 1 # END iterate list - #if slen_orig != len(self): + # if slen_orig != len(self): # print "INFO: Reduced delta list len to %f %% of former size" % ((float(len(self)) / slen_orig) * 100) return self @@ -288,7 +296,7 @@ def check_integrity(self, target_size=-1): :raise AssertionError: if the size doen't match""" if target_size > -1: assert self[-1].rbound() == target_size - assert reduce(lambda x,y: x+y, (d.ts for d in self), 0) == target_size + assert reduce(lambda x, y: x + y, (d.ts for d in self), 0) == target_size # END target size verification if len(self) < 2: @@ -301,18 +309,19 @@ def check_integrity(self, target_size=-1): assert len(dc.data) >= dc.ts # END for each dc - left = islice(self, 0, len(self)-1) + left = islice(self, 0, len(self) - 1) right = iter(self) right.next() # this is very pythonic - we might have just use index based access here, # but this could actually be faster - for lft,rgt in izip(left, right): + for lft, rgt in izip(left, right): assert lft.rbound() == rgt.to assert lft.to + lft.ts == rgt.to # END for each pair class TopdownDeltaChunkList(DeltaChunkList): + """Represents a list which is generated by feeding its ancestor streams one by one""" __slots__ = tuple() @@ -356,19 +365,19 @@ def connect_with_next_base(self, bdcl): # END update target bounds if len(ccl) == 1: - self[dci-1] = ccl[0] + self[dci - 1] = ccl[0] else: # maybe try to compute the expenses here, and pick the right algorithm # It would normally be faster than copying everything physically though # TODO: Use a deque here, and decide by the index whether to extend # or extend left ! post_dci = self[dci:] - del(self[dci-1:]) # include deletion of dc + del(self[dci - 1:]) # include deletion of dc self.extend(ccl) self.extend(post_dci) slen = len(self) - dci += len(ccl)-1 # deleted dc, added rest + dci += len(ccl) - 1 # deleted dc, added rest # END handle chunk replacement # END for each chunk @@ -391,6 +400,7 @@ def is_loose_object(m): word = (b0 << 8) + b1 return b0 == 0x78 and (word % 31) == 0 + def loose_object_header_info(m): """ :return: tuple(type_string, uncompressed_size_in_bytes) the type string of the @@ -402,6 +412,7 @@ def loose_object_header_info(m): return type_name, int(size) + def pack_object_header_info(data): """ :return: tuple(type_id, uncompressed_size_in_bytes, byte_offset) @@ -430,6 +441,7 @@ def pack_object_header_info(data): # end performance at expense of maintenance ... return (type_id, size, i) + def create_pack_object_header(obj_type, obj_size): """ :return: string defining the pack header comprised of the object type @@ -439,7 +451,7 @@ def create_pack_object_header(obj_type, obj_size): :param obj_size: uncompressed size in bytes of the following object stream""" c = 0 # 1 byte if PY3: - hdr = bytearray() # output string + hdr = bytearray() # output string c = (obj_type << 4) | (obj_size & 0xf) obj_size >>= 4 @@ -447,10 +459,10 @@ def create_pack_object_header(obj_type, obj_size): hdr.append(c | 0x80) c = obj_size & 0x7f obj_size >>= 7 - #END until size is consumed + # END until size is consumed hdr.append(c) else: - hdr = bytes() # output string + hdr = bytes() # output string c = (obj_type << 4) | (obj_size & 0xf) obj_size >>= 4 @@ -458,11 +470,12 @@ def create_pack_object_header(obj_type, obj_size): hdr += chr(c | 0x80) c = obj_size & 0x7f obj_size >>= 7 - #END until size is consumed + # END until size is consumed hdr += chr(c) # end handle interpreter return hdr + def msb_size(data, offset=0): """ :return: tuple(read_bytes, size) read the msb size from the given random @@ -473,8 +486,8 @@ def msb_size(data, offset=0): hit_msb = False if PY3: while i < l: - c = data[i+offset] - size |= (c & 0x7f) << i*7 + c = data[i + offset] + size |= (c & 0x7f) << i * 7 i += 1 if not c & 0x80: hit_msb = True @@ -483,8 +496,8 @@ def msb_size(data, offset=0): # END while in range else: while i < l: - c = ord(data[i+offset]) - size |= (c & 0x7f) << i*7 + c = ord(data[i + offset]) + size |= (c & 0x7f) << i * 7 i += 1 if not c & 0x80: hit_msb = True @@ -494,7 +507,8 @@ def msb_size(data, offset=0): # end performance ... if not hit_msb: raise AssertionError("Could not find terminating MSB byte in data stream") - return i+offset, size + return i + offset, size + def loose_object_header(type, size): """ @@ -502,6 +516,7 @@ def loose_object_header(type, size): followed by the content stream of size 'size'""" return ('%s %i\0' % (force_text(type), size)).encode('ascii') + def write_object(type, size, read, write, chunk_size=chunk_size): """ Write the object as identified by type, size and source_stream into the @@ -522,6 +537,7 @@ def write_object(type, size, read, write, chunk_size=chunk_size): return tbw + def stream_copy(read, write, size, chunk_size): """ Copy a stream up to size bytes using the provided read and write methods, @@ -532,7 +548,7 @@ def stream_copy(read, write, size, chunk_size): # WRITE ALL DATA UP TO SIZE while True: - cs = min(chunk_size, size-dbw) + cs = min(chunk_size, size - dbw) # NOTE: not all write methods return the amount of written bytes, like # mmap.write. Its bad, but we just deal with it ... perhaps its not # even less efficient @@ -548,6 +564,7 @@ def stream_copy(read, write, size, chunk_size): # END duplicate data return dbw + def connect_deltas(dstreams): """ Read the condensed delta chunk information from dstream and merge its information @@ -602,7 +619,7 @@ def connect_deltas(dstreams): rbound = cp_off + cp_size if (rbound < cp_size or - rbound > base_size): + rbound > base_size): break dcl.append(DeltaChunk(tbw, cp_size, cp_off, None)) @@ -610,7 +627,7 @@ def connect_deltas(dstreams): elif c: # NOTE: in C, the data chunks should probably be concatenated here. # In python, we do it as a post-process - dcl.append(DeltaChunk(tbw, c, 0, db[i:i+c])) + dcl.append(DeltaChunk(tbw, c, 0, db[i:i + c])) i += c tbw += c else: @@ -632,6 +649,7 @@ def connect_deltas(dstreams): return tdcl + def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): """ Apply data from a delta buffer using a source buffer to the target file @@ -678,11 +696,11 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): rbound = cp_off + cp_size if (rbound < cp_size or - rbound > src_buf_size): + rbound > src_buf_size): break write(buffer(src_buf, cp_off, cp_size)) elif c: - write(db[i:i+c]) + write(db[i:i + c]) i += c else: raise ValueError("unexpected delta opcode 0") @@ -721,11 +739,11 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): rbound = cp_off + cp_size if (rbound < cp_size or - rbound > src_buf_size): + rbound > src_buf_size): break write(buffer(src_buf, cp_off, cp_size)) elif c: - write(db[i:i+c]) + write(db[i:i + c]) i += c else: raise ValueError("unexpected delta opcode 0") @@ -749,7 +767,7 @@ def is_equal_canonical_sha(canonical_length, match, sha1): return False if canonical_length - binary_length and \ - (byte_ord(match[-1]) ^ byte_ord(sha1[len(match)-1])) & 0xf0: + (byte_ord(match[-1]) ^ byte_ord(sha1[len(match) - 1])) & 0xf0: return False # END handle uneven canonnical length return True diff --git a/gitdb/pack.py b/gitdb/pack.py index 375cc59a9..b4ba7876c 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -72,8 +72,6 @@ __all__ = ('PackIndexFile', 'PackFile', 'PackEntity') - - #{ Utilities def pack_object_at(cursor, offset, as_stream): @@ -107,7 +105,7 @@ def pack_object_at(cursor, offset, as_stream): total_rela_offset = i # REF DELTA elif type_id == REF_DELTA: - total_rela_offset = data_rela_offset+20 + total_rela_offset = data_rela_offset + 20 delta_info = data[data_rela_offset:total_rela_offset] # BASE OBJECT else: @@ -129,6 +127,7 @@ def pack_object_at(cursor, offset, as_stream): # END handle info # END handle stream + def write_stream_to_pack(read, write, zstream, base_crc=None): """Copy a stream as read from read function, zip it, and write the result. Count the number of written bytes and return it @@ -142,7 +141,7 @@ def write_stream_to_pack(read, write, zstream, base_crc=None): crc = 0 if want_crc: crc = base_crc - #END initialize crc + # END initialize crc while True: chunk = read(chunk_size) @@ -153,18 +152,18 @@ def write_stream_to_pack(read, write, zstream, base_crc=None): if want_crc: crc = crc32(compressed, crc) - #END handle crc + # END handle crc if len(chunk) != chunk_size: break - #END copy loop + # END copy loop compressed = zstream.flush() bw += len(compressed) write(compressed) if want_crc: crc = crc32(compressed, crc) - #END handle crc + # END handle crc return (br, bw, crc) @@ -173,6 +172,7 @@ def write_stream_to_pack(read, write, zstream, base_crc=None): class IndexWriter(object): + """Utility to cache index information, allowing to write all information later in one go to the given stream **Note:** currently only writes v2 indices""" @@ -198,15 +198,15 @@ def write(self, pack_sha, write): sha_write(pack(">L", PackIndexFile.index_version_default)) # fanout - tmplist = list((0,)*256) # fanout or list with 64 bit offsets + tmplist = list((0,) * 256) # fanout or list with 64 bit offsets for t in self._objs: tmplist[byte_ord(t[0][0])] += 1 - #END prepare fanout + # END prepare fanout for i in xrange(255): v = tmplist[i] sha_write(pack('>L', v)) - tmplist[i+1] += v - #END write each fanout entry + tmplist[i + 1] += v + # END write each fanout entry sha_write(pack('>L', tmplist[255])) # sha1 ordered @@ -215,8 +215,8 @@ def write(self, pack_sha, write): # crc32 for t in self._objs: - sha_write(pack('>L', t[1]&0xffffffff)) - #END for each crc + sha_write(pack('>L', t[1] & 0xffffffff)) + # END for each crc tmplist = list() # offset 32 @@ -224,15 +224,15 @@ def write(self, pack_sha, write): ofs = t[2] if ofs > 0x7fffffff: tmplist.append(ofs) - ofs = 0x80000000 + len(tmplist)-1 - #END hande 64 bit offsets - sha_write(pack('>L', ofs&0xffffffff)) - #END for each offset + ofs = 0x80000000 + len(tmplist) - 1 + # END hande 64 bit offsets + sha_write(pack('>L', ofs & 0xffffffff)) + # END for each offset # offset 64 for ofs in tmplist: sha_write(pack(">Q", ofs)) - #END for each offset + # END for each offset # trailer assert(len(pack_sha) == 20) @@ -242,8 +242,8 @@ def write(self, pack_sha, write): return sha - class PackIndexFile(LazyMixin): + """A pack index provides offsets into the corresponding pack, allowing to find locations for offsets faster.""" @@ -273,8 +273,9 @@ def _set_cache_(self, attr): self._cursor = mman.make_cursor(self._indexpath).use_region() # We will assume that the index will always fully fit into memory ! if mman.window_size() > 0 and self._cursor.file_size() > mman.window_size(): - raise AssertionError("The index file at %s is too large to fit into a mapped window (%i > %i). This is a limitation of the implementation" % (self._indexpath, self._cursor.file_size(), mman.window_size())) - #END assert window size + raise AssertionError("The index file at %s is too large to fit into a mapped window (%i > %i). This is a limitation of the implementation" % ( + self._indexpath, self._cursor.file_size(), mman.window_size())) + # END assert window size else: # now its time to initialize everything - if we are here, someone wants # to access the fanout table or related properties @@ -293,27 +294,25 @@ def _set_cache_(self, attr): setattr(self, fname, getattr(self, "_%s_v%i" % (fname, self._version))) # END for each function to initialize - # INITIALIZE DATA # byte offset is 8 if version is 2, 0 otherwise self._initialize() # END handle attributes - #{ Access V1 def _entry_v1(self, i): """:return: tuple(offset, binsha, 0)""" - return unpack_from(">L20s", self._cursor.map(), 1024 + i*24) + (0, ) + return unpack_from(">L20s", self._cursor.map(), 1024 + i * 24) + (0, ) def _offset_v1(self, i): """see ``_offset_v2``""" - return unpack_from(">L", self._cursor.map(), 1024 + i*24)[0] + return unpack_from(">L", self._cursor.map(), 1024 + i * 24)[0] def _sha_v1(self, i): """see ``_sha_v2``""" - base = 1024 + (i*24)+4 - return self._cursor.map()[base:base+20] + base = 1024 + (i * 24) + 4 + return self._cursor.map()[base:base + 20] def _crc_v1(self, i): """unsupported""" @@ -343,7 +342,7 @@ def _offset_v2(self, i): def _sha_v2(self, i): """:return: sha at the given index of this file index instance""" base = self._sha_list_offset + i * 20 - return self._cursor.map()[base:base+20] + return self._cursor.map()[base:base + 20] def _crc_v2(self, i): """:return: 4 bytes crc for the object at index i""" @@ -369,7 +368,7 @@ def _read_fanout(self, byte_offset): out = list() append = out.append for i in xrange(256): - append(unpack_from('>L', d, byte_offset + i*4)[0]) + append(unpack_from('>L', d, byte_offset + i * 4)[0]) # END for each entry return out @@ -421,7 +420,7 @@ def sha_to_index(self, sha): get_sha = self.sha lo = 0 # lower index, the left bound of the bisection if first_byte != 0: - lo = self._fanout_table[first_byte-1] + lo = self._fanout_table[first_byte - 1] hi = self._fanout_table[first_byte] # the upper, right bound of the bisection # bisect until we have the sha @@ -455,7 +454,7 @@ def partial_sha_to_index(self, partial_bin_sha, canonical_length): get_sha = self.sha lo = 0 # lower index, the left bound of the bisection if first_byte != 0: - lo = self._fanout_table[first_byte-1] + lo = self._fanout_table[first_byte - 1] hi = self._fanout_table[first_byte] # the upper, right bound of the bisection # fill the partial to full 20 bytes @@ -481,7 +480,7 @@ def partial_sha_to_index(self, partial_bin_sha, canonical_length): if is_equal_canonical_sha(canonical_length, partial_bin_sha, cur_sha): next_sha = None if lo + 1 < self.size(): - next_sha = get_sha(lo+1) + next_sha = get_sha(lo + 1) if next_sha and next_sha == cur_sha: raise AmbiguousObjectName(partial_bin_sha) return lo @@ -500,6 +499,7 @@ def sha_to_index(self, sha): class PackFile(LazyMixin): + """A pack is a file written according to the Version 2 for git packs As we currently use memory maps, it could be assumed that the maximum size of @@ -516,7 +516,7 @@ class PackFile(LazyMixin): pack_version_default = 2 # offset into our data at which the first object starts - first_object_offset = 3*4 # header bytes + first_object_offset = 3 * 4 # header bytes footer_size = 20 # final sha def __init__(self, packpath): @@ -549,7 +549,6 @@ def _iter_objects(self, start_offset, as_stream=True): stream_copy(ostream.read, null.write, ostream.size, chunk_size) cur_offset += (data_offset - ostream.pack_offset) + ostream.stream.compressed_bytes_read() - # if a stream is requested, reset it beforehand # Otherwise return the Stream object directly, its derived from the # info object @@ -578,7 +577,7 @@ def data(self): def checksum(self): """:return: 20 byte sha1 hash on all object sha's contained in this file""" - return self._cursor.use_region(self._cursor.file_size()-20).buffer()[:] + return self._cursor.use_region(self._cursor.file_size() - 20).buffer()[:] def path(self): """:return: path to the packfile""" @@ -645,13 +644,14 @@ def stream_iter(self, start_offset=0): class PackEntity(LazyMixin): + """Combines the PackIndexFile and the PackFile into one, allowing the actual objects to be resolved and iterated""" - __slots__ = ( '_index', # our index file - '_pack', # our pack file - '_offset_map' # on demand dict mapping one offset to the next consecutive one - ) + __slots__ = ('_index', # our index file + '_pack', # our pack file + '_offset_map' # on demand dict mapping one offset to the next consecutive one + ) IndexFileCls = PackIndexFile PackFileCls = PackFile @@ -673,7 +673,7 @@ def _set_cache_(self, attr): offset_map = None if len(offsets_sorted) == 1: - offset_map = { offsets_sorted[0] : last_offset } + offset_map = {offsets_sorted[0]: last_offset} else: iter_offsets = iter(offsets_sorted) iter_offsets_plus_one = iter(offsets_sorted) @@ -895,10 +895,9 @@ def collect_streams(self, sha): :raise BadObject:""" return self.collect_streams_at_offset(self._index.offset(self._sha_to_index(sha))) - @classmethod def write_pack(cls, object_iter, pack_write, index_write=None, - object_count = None, zlib_compression = zlib.Z_BEST_SPEED): + object_count=None, zlib_compression=zlib.Z_BEST_SPEED): """ Create a new pack by putting all objects obtained by the object_iterator into a pack which is written using the pack_write method. @@ -923,9 +922,9 @@ def write_pack(cls, object_iter, pack_write, index_write=None, if not object_count: if not isinstance(object_iter, (tuple, list)): objs = list(object_iter) - #END handle list type + # END handle list type object_count = len(objs) - #END handle object + # END handle object pack_writer = FlexibleSha1Writer(pack_write) pwrite = pack_writer.write @@ -939,7 +938,7 @@ def write_pack(cls, object_iter, pack_write, index_write=None, if wants_index: index = IndexWriter() - #END handle index header + # END handle index header actual_count = 0 for obj in objs: @@ -952,30 +951,31 @@ def write_pack(cls, object_iter, pack_write, index_write=None, crc = crc32(hdr) else: crc = None - #END handle crc + # END handle crc pwrite(hdr) # data stream zstream = zlib.compressobj(zlib_compression) ostream = obj.stream - br, bw, crc = write_stream_to_pack(ostream.read, pwrite, zstream, base_crc = crc) + br, bw, crc = write_stream_to_pack(ostream.read, pwrite, zstream, base_crc=crc) assert(br == obj.size) if wants_index: index.append(obj.binsha, crc, ofs) - #END handle index + # END handle index ofs += len(hdr) + bw if actual_count == object_count: break - #END abort once we are done - #END for each object + # END abort once we are done + # END for each object if actual_count != object_count: - raise ValueError("Expected to write %i objects into pack, but received only %i from iterators" % (object_count, actual_count)) - #END count assertion + raise ValueError( + "Expected to write %i objects into pack, but received only %i from iterators" % (object_count, actual_count)) + # END count assertion # write footer - pack_sha = pack_writer.sha(as_hex = False) + pack_sha = pack_writer.sha(as_hex=False) assert len(pack_sha) == 20 pack_write(pack_sha) ofs += len(pack_sha) # just for completeness ;) @@ -983,12 +983,12 @@ def write_pack(cls, object_iter, pack_write, index_write=None, index_sha = None if wants_index: index_sha = index.write(pack_sha, index_write) - #END handle index + # END handle index return pack_sha, index_sha @classmethod - def create(cls, object_iter, base_dir, object_count = None, zlib_compression = zlib.Z_BEST_SPEED): + def create(cls, object_iter, base_dir, object_count=None, zlib_compression=zlib.Z_BEST_SPEED): """Create a new on-disk entity comprised of a properly named pack file and a properly named and corresponding index file. The pack contains all OStream objects contained in object iter. :param base_dir: directory which is to contain the files @@ -1012,5 +1012,4 @@ def create(cls, object_iter, base_dir, object_count = None, zlib_compression = z return cls(new_pack_path) - #} END interface diff --git a/gitdb/stream.py b/gitdb/stream.py index b0a89002a..4478a0f44 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -38,14 +38,15 @@ except ImportError: pass -__all__ = ( 'DecompressMemMapReader', 'FDCompressedSha1Writer', 'DeltaApplyReader', - 'Sha1Writer', 'FlexibleSha1Writer', 'ZippedStoreShaWriter', 'FDCompressedSha1Writer', - 'FDStream', 'NullStream') +__all__ = ('DecompressMemMapReader', 'FDCompressedSha1Writer', 'DeltaApplyReader', + 'Sha1Writer', 'FlexibleSha1Writer', 'ZippedStoreShaWriter', 'FDCompressedSha1Writer', + 'FDStream', 'NullStream') #{ RO Streams class DecompressMemMapReader(LazyMixin): + """Reads data in chunks from a memory map and decompresses it. The client sees only the uncompressed data, respective file-like read calls are handling on-demand buffered decompression accordingly @@ -63,9 +64,9 @@ class DecompressMemMapReader(LazyMixin): to better support streamed reading - it would only need to keep the mmap and decompress it into chunks, thats all ... """ __slots__ = ('_m', '_zip', '_buf', '_buflen', '_br', '_cws', '_cwe', '_s', '_close', - '_cbr', '_phi') + '_cbr', '_phi') - max_read_size = 512*1024 # currently unused + max_read_size = 512 * 1024 # currently unused def __init__(self, m, close_on_deletion, size=None): """Initialize with mmap for stream reading @@ -214,7 +215,6 @@ def read(self, size=-1): return bytes() # END handle depletion - # deplete the buffer, then just continue using the decompress object # which has an own buffer. We just need this to transparently parse the # header from the zlib stream @@ -263,7 +263,6 @@ def read(self, size=-1): self._cwe = cws + size # END handle tail - # if window is too small, make it larger so zip can decompress something if self._cwe - self._cws < 8: self._cwe = self._cws + 8 @@ -285,7 +284,7 @@ def read(self, size=-1): unused_datalen = len(self._zip.unconsumed_tail) else: unused_datalen = len(self._zip.unconsumed_tail) + len(self._zip.unused_data) - # end handle very special case ... + # end handle very special case ... self._cbr += len(indata) - unused_datalen self._br += len(dcompdat) @@ -301,12 +300,13 @@ def read(self, size=-1): # to read, if we are called by compressed_bytes_read - it manipulates # us to empty the stream if dcompdat and (len(dcompdat) - len(dat)) < size and self._br < self._s: - dcompdat += self.read(size-len(dcompdat)) + dcompdat += self.read(size - len(dcompdat)) # END handle special case return dcompdat class DeltaApplyReader(LazyMixin): + """A reader which dynamically applies pack deltas to a base object, keeping the memory demands to a minimum. @@ -332,15 +332,15 @@ class DeltaApplyReader(LazyMixin): * cmd == 0 - invalid operation ( or error in delta stream ) """ __slots__ = ( - "_bstream", # base stream to which to apply the deltas - "_dstreams", # tuple of delta stream readers - "_mm_target", # memory map of the delta-applied data - "_size", # actual number of bytes in _mm_target - "_br" # number of bytes read - ) + "_bstream", # base stream to which to apply the deltas + "_dstreams", # tuple of delta stream readers + "_mm_target", # memory map of the delta-applied data + "_size", # actual number of bytes in _mm_target + "_br" # number of bytes read + ) #{ Configuration - k_max_memory_move = 250*1000*1000 + k_max_memory_move = 250 * 1000 * 1000 #} END configuration def __init__(self, stream_list): @@ -414,7 +414,6 @@ def _set_cache_brute_(self, attr): base_size = target_size = max(base_size, max_target_size) # END adjust buffer sizes - # Allocate private memory map big enough to hold the first base buffer # We need random access to it bbuf = allocate_memory(base_size) @@ -440,11 +439,11 @@ def _set_cache_brute_(self, attr): ddata = allocate_memory(dstream.size - offset) ddata.write(dbuf) # read the rest from the stream. The size we give is larger than necessary - stream_copy(dstream.read, ddata.write, dstream.size, 256*mmap.PAGESIZE) + stream_copy(dstream.read, ddata.write, dstream.size, 256 * mmap.PAGESIZE) ####################################################################### if 'c_apply_delta' in globals(): - c_apply_delta(bbuf, ddata, tbuf); + c_apply_delta(bbuf, ddata, tbuf) else: apply_delta_data(bbuf, src_size, ddata, len(ddata), tbuf.write) ####################################################################### @@ -463,7 +462,6 @@ def _set_cache_brute_(self, attr): self._mm_target = bbuf self._size = final_target_size - #{ Configuration if not has_perf_mod: _set_cache_ = _set_cache_brute_ @@ -512,13 +510,13 @@ def new(cls, stream_list): # END single object special handling if stream_list[-1].type_id in delta_types: - raise ValueError("Cannot resolve deltas if there is no base object stream, last one was type: %s" % stream_list[-1].type) + raise ValueError( + "Cannot resolve deltas if there is no base object stream, last one was type: %s" % stream_list[-1].type) # END check stream return cls(stream_list) #} END interface - #{ OInfo like Interface @property @@ -543,6 +541,7 @@ def size(self): #{ W Streams class Sha1Writer(object): + """Simple stream writer which produces a sha whenever you like as it degests everything it is supposed to write""" __slots__ = "sha1" @@ -565,7 +564,7 @@ def write(self, data): #{ Interface - def sha(self, as_hex = False): + def sha(self, as_hex=False): """:return: sha so far :param as_hex: if True, sha will be hex-encoded, binary otherwise""" if as_hex: @@ -576,6 +575,7 @@ def sha(self, as_hex = False): class FlexibleSha1Writer(Sha1Writer): + """Writer producing a sha1 while passing on the written bytes to the given write function""" __slots__ = 'writer' @@ -590,8 +590,10 @@ def write(self, data): class ZippedStoreShaWriter(Sha1Writer): + """Remembers everything someone writes to it and generates a sha""" __slots__ = ('buf', 'zip') + def __init__(self): Sha1Writer.__init__(self) self.buf = BytesIO() @@ -623,6 +625,7 @@ def getvalue(self): class FDCompressedSha1Writer(Sha1Writer): + """Digests data written to it, making the sha available, then compress the data and write it to the file descriptor @@ -662,10 +665,12 @@ def close(self): class FDStream(object): + """A simple wrapper providing the most basic functions on a file descriptor with the fileobject interface. Cannot use os.fdopen as the resulting stream takes ownership""" __slots__ = ("_fd", '_pos') + def __init__(self, fd): self._fd = fd self._pos = 0 @@ -694,6 +699,7 @@ def close(self): class NullStream(object): + """A stream that does nothing but providing a stream interface. Use it like /dev/null""" __slots__ = tuple() diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index af6d9e0fd..528bcc144 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -32,7 +32,9 @@ __all__ = ('TestDBBase', 'with_rw_directory', 'with_packs_rw', 'fixture_path') + class TestDBBase(TestBase): + """Base class providing testing routines on databases""" # data @@ -65,7 +67,6 @@ def _assert_object_writing_simple(self, db): assert len(shas) == db.size() assert len(shas[0]) == 20 - def _assert_object_writing(self, db): """General tests to verify object writing, compatible to ObjectDBW **Note:** requires write access to the database""" @@ -126,4 +127,3 @@ def _assert_object_writing(self, db): assert ostream.getvalue() == new_ostream.getvalue() # END for each data set # END for each dry_run mode - diff --git a/gitdb/test/db/test_git.py b/gitdb/test/db/test_git.py index e141c2ba0..f96206744 100644 --- a/gitdb/test/db/test_git.py +++ b/gitdb/test/db/test_git.py @@ -3,7 +3,7 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php from gitdb.test.db.lib import ( - TestDBBase, + TestDBBase, fixture_path, with_rw_directory ) @@ -12,6 +12,7 @@ from gitdb.base import OStream, OInfo from gitdb.util import hex_to_bin, bin_to_hex + class TestGitDB(TestDBBase): def test_reading(self): @@ -28,8 +29,7 @@ def test_reading(self): assert gdb.size() >= ni sha_list = list(gdb.sha_iter()) assert len(sha_list) == gdb.size() - sha_list = sha_list[:ni] # speed up tests ... - + sha_list = sha_list[:ni] # speed up tests ... # This is actually a test for compound functionality, but it doesn't # have a separate test module @@ -39,7 +39,7 @@ def test_reading(self): # mix even/uneven hexshas for i, binsha in enumerate(sha_list): - assert gdb.partial_to_complete_sha_hex(bin_to_hex(binsha)[:8-(i%2)]) == binsha + assert gdb.partial_to_complete_sha_hex(bin_to_hex(binsha)[:8 - (i % 2)]) == binsha # END for each sha self.failUnlessRaises(BadObject, gdb.partial_to_complete_sha_hex, "0000") diff --git a/gitdb/test/db/test_loose.py b/gitdb/test/db/test_loose.py index 1d6af9c99..024c194a2 100644 --- a/gitdb/test/db/test_loose.py +++ b/gitdb/test/db/test_loose.py @@ -3,13 +3,14 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php from gitdb.test.db.lib import ( - TestDBBase, + TestDBBase, with_rw_directory ) from gitdb.db import LooseObjectDB from gitdb.exc import BadObject from gitdb.util import bin_to_hex + class TestLooseDB(TestDBBase): @with_rw_directory diff --git a/gitdb/test/db/test_mem.py b/gitdb/test/db/test_mem.py index 97f721719..eb563c098 100644 --- a/gitdb/test/db/test_mem.py +++ b/gitdb/test/db/test_mem.py @@ -11,6 +11,7 @@ LooseObjectDB ) + class TestMemoryDB(TestDBBase): @with_rw_directory diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index 963a71af7..a90158151 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -14,6 +14,7 @@ import os import random + class TestPackDB(TestDBBase): @with_rw_directory @@ -53,7 +54,6 @@ def test_writing(self, path): pdb.stream(sha) # END for each sha to query - # test short finding - be a bit more brutal here max_bytes = 19 min_bytes = 2 @@ -61,10 +61,10 @@ def test_writing(self, path): for i, sha in enumerate(sha_list): short_sha = sha[:max((i % max_bytes), min_bytes)] try: - assert pdb.partial_to_complete_sha(short_sha, len(short_sha)*2) == sha + assert pdb.partial_to_complete_sha(short_sha, len(short_sha) * 2) == sha except AmbiguousObjectName: num_ambiguous += 1 - pass # valid, we can have short objects + pass # valid, we can have short objects # END exception handling # END for each sha to find diff --git a/gitdb/test/db/test_ref.py b/gitdb/test/db/test_ref.py index db930827b..b774bafe4 100644 --- a/gitdb/test/db/test_ref.py +++ b/gitdb/test/db/test_ref.py @@ -3,8 +3,8 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php from gitdb.test.db.lib import ( - TestDBBase, - with_rw_directory, + TestDBBase, + with_rw_directory, fixture_path ) from gitdb.db import ReferenceDB @@ -16,6 +16,7 @@ import os + class TestReferenceDB(TestDBBase): def make_alt_file(self, alt_path, alt_list): diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index d09b1cb8e..c4acd9218 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -24,6 +24,7 @@ #{ Bases class TestBase(unittest.TestCase): + """Base class for all tests""" @@ -49,6 +50,7 @@ def wrapper(self, *args, **kwargs): def with_rw_directory(func): """Create a temporary directory which can be written to, remove it if the test suceeds, but leave it otherwise to aid additional debugging""" + def wrapper(self): path = tempfile.mktemp(prefix=func.__name__) os.mkdir(path) @@ -78,6 +80,7 @@ def wrapper(self): def with_packs_rw(func): """Function that provides a path into which the packs for testing should be copied. Will pass on the path to the actual function afterwards""" + def wrapper(self, path): src_pack_glob = fixture_path('packs/*') copy_files_globbed(src_pack_glob, path, hard_link_ok=True) @@ -91,12 +94,14 @@ def wrapper(self, path): #{ Routines + def fixture_path(relapath=''): """:return: absolute path into the fixture directory :param relapath: relative path into the fixtures directory, or '' to obtain the fixture directory itself""" return os.path.join(os.path.dirname(__file__), 'fixtures', relapath) + def copy_files_globbed(source_glob, target_dir, hard_link_ok=False): """Copy all files found according to the given source glob into the target directory :param hard_link_ok: if True, hard links will be created if possible. Otherwise @@ -127,11 +132,13 @@ def make_bytes(size_in_bytes, randomize=False): a = array('i', producer) return a.tostring() + def make_object(type, data): """:return: bytes resembling an uncompressed object""" odata = "blob %i\0" % len(data) return odata.encode("ascii") + data + def make_memory_file(size_in_bytes, randomize=False): """:return: tuple(size_of_stream, stream) :param randomize: try to produce a very random stream""" @@ -142,24 +149,27 @@ def make_memory_file(size_in_bytes, randomize=False): #{ Stream Utilities + class DummyStream(object): - def __init__(self): - self.was_read = False - self.bytes = 0 - self.closed = False - def read(self, size): - self.was_read = True - self.bytes = size + def __init__(self): + self.was_read = False + self.bytes = 0 + self.closed = False - def close(self): - self.closed = True + def read(self, size): + self.was_read = True + self.bytes = size - def _assert(self): - assert self.was_read + def close(self): + self.closed = True + + def _assert(self): + assert self.was_read class DeriveTest(OStream): + def __init__(self, sha, type, size, stream, *args, **kwargs): self.myarg = kwargs.pop('myarg') self.args = args diff --git a/gitdb/test/performance/__init__.py b/gitdb/test/performance/__init__.py index 8b1378917..e69de29bb 100644 --- a/gitdb/test/performance/__init__.py +++ b/gitdb/test/performance/__init__.py @@ -1 +0,0 @@ - diff --git a/gitdb/test/performance/lib.py b/gitdb/test/performance/lib.py index ec45cf3a7..cbc52bc77 100644 --- a/gitdb/test/performance/lib.py +++ b/gitdb/test/performance/lib.py @@ -13,22 +13,17 @@ #} END invariants - -#{ Base Classes +#{ Base Classes class TestBigRepoR(TestBase): + """TestCase providing access to readonly 'big' repositories using the following member variables: - + * gitrepopath - + * read-only base path of the git source repository, i.e. .../git/.git""" - - #{ Invariants - head_sha_2k = '235d521da60e4699e5bd59ac658b5b48bd76ddca' - head_sha_50 = '32347c375250fd470973a5d76185cac718955fd5' - #} END invariants - + def setUp(self): try: super(TestBigRepoR, self).setUp() @@ -37,11 +32,12 @@ def setUp(self): self.gitrepopath = os.environ.get(k_env_git_repo) if not self.gitrepopath: - logging.info("You can set the %s environment variable to a .git repository of your choice - defaulting to the gitdb repository") + logging.info( + "You can set the %s environment variable to a .git repository of your choice - defaulting to the gitdb repository", k_env_git_repo) ospd = os.path.dirname self.gitrepopath = os.path.join(ospd(ospd(ospd(ospd(__file__)))), '.git') # end assure gitrepo is set assert self.gitrepopath.endswith('.git') - + #} END base classes diff --git a/gitdb/test/performance/test_pack.py b/gitdb/test/performance/test_pack.py index e46031115..bdd2b0a37 100644 --- a/gitdb/test/performance/test_pack.py +++ b/gitdb/test/performance/test_pack.py @@ -6,7 +6,7 @@ from __future__ import print_function from gitdb.test.performance.lib import ( - TestBigRepoR + TestBigRepoR ) from gitdb import ( @@ -24,19 +24,20 @@ import os from time import time + class TestPackedDBPerformance(TestBigRepoR): - @skip_on_travis_ci + @skip_on_travis_ci def test_pack_random_access(self): pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) - + # sha lookup st = time() sha_list = list(pdb.sha_iter()) elapsed = time() - st ns = len(sha_list) print("PDB: looked up %i shas by index in %f s ( %f shas/s )" % (ns, elapsed, ns / elapsed), file=sys.stderr) - + # sha lookup: best-case and worst case access pdb_pack_info = pdb._pack_info # END shuffle shas @@ -45,13 +46,14 @@ def test_pack_random_access(self): pdb_pack_info(sha) # END for each sha to look up elapsed = time() - st - + # discard cache del(pdb._entities) pdb.entities() - print("PDB: looked up %i sha in %i packs in %f s ( %f shas/s )" % (ns, len(pdb.entities()), elapsed, ns / elapsed), file=sys.stderr) + print("PDB: looked up %i sha in %i packs in %f s ( %f shas/s )" % + (ns, len(pdb.entities()), elapsed, ns / elapsed), file=sys.stderr) # END for each random mode - + # query info and streams only max_items = 10000 # can wait longer when testing memory for pdb_fun in (pdb.info, pdb.stream): @@ -59,9 +61,10 @@ def test_pack_random_access(self): for sha in sha_list[:max_items]: pdb_fun(sha) elapsed = time() - st - print("PDB: Obtained %i object %s by sha in %f s ( %f items/s )" % (max_items, pdb_fun.__name__.upper(), elapsed, max_items / elapsed), file=sys.stderr) + print("PDB: Obtained %i object %s by sha in %f s ( %f items/s )" % + (max_items, pdb_fun.__name__.upper(), elapsed, max_items / elapsed), file=sys.stderr) # END for each function - + # retrieve stream and read all max_items = 5000 pdb_stream = pdb.stream @@ -74,8 +77,9 @@ def test_pack_random_access(self): total_size += stream.size elapsed = time() - st total_kib = total_size / 1000 - print("PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (max_items, total_kib, total_kib/elapsed , elapsed, max_items / elapsed), file=sys.stderr) - + print("PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % + (max_items, total_kib, total_kib / elapsed, elapsed, max_items / elapsed), file=sys.stderr) + @skip_on_travis_ci def test_loose_correctness(self): """based on the pack(s) of our packed object DB, we will just copy and verify all objects in the back @@ -89,7 +93,7 @@ def test_loose_correctness(self): mdb = MemoryDB() for c, sha in enumerate(pdb.sha_iter()): ostream = pdb.stream(sha) - # the issue only showed on larger files which are hardly compressible ... + # the issue only showed on larger files which are hardly compressible ... if ostream.type != str_blob_type: continue istream = IStream(ostream.type, ostream.size, ostream.stream) @@ -101,7 +105,7 @@ def test_loose_correctness(self): if c and c % 1000 == 0: print("Verified %i loose object compression/decompression cycles" % c, file=sys.stderr) mdb._cache.clear() - # end for each sha to copy + # end for each sha to copy @skip_on_travis_ci def test_correctness(self): @@ -124,6 +128,6 @@ def test_correctness(self): # END for each index # END for each entity elapsed = time() - st - print("PDB: verified %i objects (crc=%i) in %f s ( %f objects/s )" % (count, crc, elapsed, count / elapsed), file=sys.stderr) + print("PDB: verified %i objects (crc=%i) in %f s ( %f objects/s )" % + (count, crc, elapsed, count / elapsed), file=sys.stderr) # END for each verify mode - diff --git a/gitdb/test/performance/test_pack_streaming.py b/gitdb/test/performance/test_pack_streaming.py index fe160ea54..f805e59fa 100644 --- a/gitdb/test/performance/test_pack_streaming.py +++ b/gitdb/test/performance/test_pack_streaming.py @@ -6,7 +6,7 @@ from __future__ import print_function from gitdb.test.performance.lib import ( - TestBigRepoR + TestBigRepoR ) from gitdb.db.pack import PackedDB @@ -18,27 +18,29 @@ import sys from time import time + class CountedNullStream(NullStream): __slots__ = '_bw' + def __init__(self): self._bw = 0 - + def bytes_written(self): return self._bw - + def write(self, d): self._bw += NullStream.write(self, d) - + class TestPackStreamingPerformance(TestBigRepoR): - + @skip_on_travis_ci def test_pack_writing(self): # see how fast we can write a pack from object streams. # This will not be fast, as we take time for decompressing the streams as well ostream = CountedNullStream() pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) - + ni = 1000 count = 0 st = time() @@ -47,22 +49,23 @@ def test_pack_writing(self): pdb.stream(sha) if count == ni: break - #END gather objects for pack-writing + # END gather objects for pack-writing elapsed = time() - st - print("PDB Streaming: Got %i streams by sha in in %f s ( %f streams/s )" % (ni, elapsed, ni / elapsed), file=sys.stderr) - + print("PDB Streaming: Got %i streams by sha in in %f s ( %f streams/s )" % + (ni, elapsed, ni / elapsed), file=sys.stderr) + st = time() PackEntity.write_pack((pdb.stream(sha) for sha in pdb.sha_iter()), ostream.write, object_count=ni) elapsed = time() - st total_kb = ostream.bytes_written() / 1000 - print(sys.stderr, "PDB Streaming: Wrote pack of size %i kb in %f s (%f kb/s)" % (total_kb, elapsed, total_kb/elapsed), sys.stderr) - - + print(sys.stderr, "PDB Streaming: Wrote pack of size %i kb in %f s (%f kb/s)" % + (total_kb, elapsed, total_kb / elapsed), sys.stderr) + @skip_on_travis_ci def test_stream_reading(self): # raise SkipTest() pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack")) - + # streaming only, meant for --with-profile runs ni = 5000 count = 0 @@ -78,5 +81,5 @@ def test_stream_reading(self): count += 1 elapsed = time() - st total_kib = total_size / 1000 - print(sys.stderr, "PDB Streaming: Got %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % (ni, total_kib, total_kib/elapsed , elapsed, ni / elapsed), sys.stderr) - + print(sys.stderr, "PDB Streaming: Got %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % + (ni, total_kib, total_kib / elapsed, elapsed, ni / elapsed), sys.stderr) diff --git a/gitdb/test/performance/test_stream.py b/gitdb/test/performance/test_stream.py index 84c9dea3f..bd66b26ad 100644 --- a/gitdb/test/performance/test_stream.py +++ b/gitdb/test/performance/test_stream.py @@ -35,22 +35,22 @@ def read_chunked_stream(stream): # END read stream loop assert total == stream.size return stream - - + + #} END utilities class TestObjDBPerformance(TestBigRepoR): - - large_data_size_bytes = 1000*1000*50 # some MiB should do it - moderate_data_size_bytes = 1000*1000*1 # just 1 MiB - - @skip_on_travis_ci + + large_data_size_bytes = 1000 * 1000 * 50 # some MiB should do it + moderate_data_size_bytes = 1000 * 1000 * 1 # just 1 MiB + + @skip_on_travis_ci @with_rw_directory def test_large_data_streaming(self, path): ldb = LooseObjectDB(path) string_ios = list() # list of streams we previously created - - # serial mode + + # serial mode for randomize in range(2): desc = (randomize and 'random ') or '' print("Creating %s data ..." % desc, file=sys.stderr) @@ -59,32 +59,32 @@ def test_large_data_streaming(self, path): elapsed = time() - st print("Done (in %f s)" % elapsed, file=sys.stderr) string_ios.append(stream) - - # writing - due to the compression it will seem faster than it is + + # writing - due to the compression it will seem faster than it is st = time() sha = ldb.store(IStream('blob', size, stream)).binsha elapsed_add = time() - st assert ldb.has_object(sha) db_file = ldb.readable_db_object_path(bin_to_hex(sha)) fsize_kib = os.path.getsize(db_file) / 1000 - - + size_kib = size / 1000 - print("Added %i KiB (filesize = %i KiB) of %s data to loose odb in %f s ( %f Write KiB / s)" % (size_kib, fsize_kib, desc, elapsed_add, size_kib / elapsed_add), file=sys.stderr) - + print("Added %i KiB (filesize = %i KiB) of %s data to loose odb in %f s ( %f Write KiB / s)" % + (size_kib, fsize_kib, desc, elapsed_add, size_kib / elapsed_add), file=sys.stderr) + # reading all at once st = time() ostream = ldb.stream(sha) shadata = ostream.read() elapsed_readall = time() - st - + stream.seek(0) assert shadata == stream.getvalue() - print("Read %i KiB of %s data at once from loose odb in %f s ( %f Read KiB / s)" % (size_kib, desc, elapsed_readall, size_kib / elapsed_readall), file=sys.stderr) - - + print("Read %i KiB of %s data at once from loose odb in %f s ( %f Read KiB / s)" % + (size_kib, desc, elapsed_readall, size_kib / elapsed_readall), file=sys.stderr) + # reading in chunks of 1 MiB - cs = 512*1000 + cs = 512 * 1000 chunks = list() st = time() ostream = ldb.stream(sha) @@ -95,13 +95,14 @@ def test_large_data_streaming(self, path): break # END read in chunks elapsed_readchunks = time() - st - + stream.seek(0) assert b''.join(chunks) == stream.getvalue() - + cs_kib = cs / 1000 - print("Read %i KiB of %s data in %i KiB chunks from loose odb in %f s ( %f Read KiB / s)" % (size_kib, desc, cs_kib, elapsed_readchunks, size_kib / elapsed_readchunks), file=sys.stderr) - + print("Read %i KiB of %s data in %i KiB chunks from loose odb in %f s ( %f Read KiB / s)" % + (size_kib, desc, cs_kib, elapsed_readchunks, size_kib / elapsed_readchunks), file=sys.stderr) + # del db file so we keep something to do os.remove(db_file) # END for each randomization factor diff --git a/gitdb/test/test_base.py b/gitdb/test/test_base.py index 578c29f73..519cdfdc1 100644 --- a/gitdb/test/test_base.py +++ b/gitdb/test/test_base.py @@ -4,10 +4,10 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Test for object db""" from gitdb.test.lib import ( - TestBase, - DummyStream, - DeriveTest, - ) + TestBase, + DummyStream, + DeriveTest, +) from gitdb import ( OInfo, @@ -20,11 +20,11 @@ ) from gitdb.util import ( NULL_BIN_SHA - ) +) from gitdb.typ import ( str_blob_type - ) +) class TestBaseTypes(TestBase): @@ -54,7 +54,6 @@ def test_streams(self): assert dpinfo.delta_info == sha assert dpinfo.pack_offset == 0 - # test ostream stream = DummyStream() ostream = OStream(*(info + (stream, ))) @@ -80,7 +79,7 @@ def test_streams(self): assert stream.bytes == 5 # derive with own args - DeriveTest(sha, str_blob_type, s, stream, 'mine',myarg = 3)._assert() + DeriveTest(sha, str_blob_type, s, stream, 'mine', myarg=3)._assert() # test istream istream = IStream(str_blob_type, s, stream) diff --git a/gitdb/test/test_example.py b/gitdb/test/test_example.py index aa43a093f..ed0a885bf 100644 --- a/gitdb/test/test_example.py +++ b/gitdb/test/test_example.py @@ -4,7 +4,7 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module with examples from the tutorial section of the docs""" from gitdb.test.lib import ( - TestBase, + TestBase, fixture_path ) from gitdb import IStream @@ -12,6 +12,7 @@ from io import BytesIO + class TestExamples(TestBase): def test_base(self): diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index 3ab2fec07..ff1057237 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -43,6 +43,7 @@ def bin_sha_from_filename(filename): return to_bin_sha(os.path.splitext(os.path.basename(filename))[0][5:]) #} END utilities + class TestPack(TestBase): packindexfile_v1 = (fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx'), 1, 67) @@ -50,8 +51,8 @@ class TestPack(TestBase): packindexfile_v2_3_ascii = (fixture_path('packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx'), 2, 42) packfile_v2_1 = (fixture_path('packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.pack'), 2, packindexfile_v1[2]) packfile_v2_2 = (fixture_path('packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.pack'), 2, packindexfile_v2[2]) - packfile_v2_3_ascii = (fixture_path('packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.pack'), 2, packindexfile_v2_3_ascii[2]) - + packfile_v2_3_ascii = ( + fixture_path('packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.pack'), 2, packindexfile_v2_3_ascii[2]) def _assert_index_file(self, index, version, size): assert index.packfile_checksum() != index.indexfile_checksum() @@ -74,13 +75,12 @@ def _assert_index_file(self, index, version, size): assert entry[2] == index.crc(oidx) # verify partial sha - for l in (4,8,11,17,20): - assert index.partial_sha_to_index(sha[:l], l*2) == oidx + for l in (4, 8, 11, 17, 20): + assert index.partial_sha_to_index(sha[:l], l * 2) == oidx # END for each object index in indexfile self.failUnlessRaises(ValueError, index.partial_sha_to_index, "\0", 2) - def _assert_pack_file(self, pack, version, size): assert pack.version() == 2 assert pack.size() == size @@ -120,7 +120,6 @@ def _assert_pack_file(self, pack, version, size): dstream.seek(0) assert dstream.read() == data - # read chunks # NOTE: the current implementation is safe, it basically transfers # all calls to the underlying memory map @@ -128,7 +127,6 @@ def _assert_pack_file(self, pack, version, size): # END for each object assert num_obj == size - def test_pack_index(self): # check version 1 and 2 for indexfile, version, size in (self.packindexfile_v1, self.packindexfile_v2): @@ -146,9 +144,9 @@ def test_pack(self): @with_rw_directory def test_pack_entity(self, rw_dir): pack_objs = list() - for packinfo, indexinfo in ( (self.packfile_v2_1, self.packindexfile_v1), - (self.packfile_v2_2, self.packindexfile_v2), - (self.packfile_v2_3_ascii, self.packindexfile_v2_3_ascii)): + for packinfo, indexinfo in ((self.packfile_v2_1, self.packindexfile_v1), + (self.packfile_v2_2, self.packindexfile_v2), + (self.packfile_v2_3_ascii, self.packindexfile_v2_3_ascii)): packfile, version, size = packinfo indexfile, version, size = indexinfo entity = PackEntity(packfile) @@ -193,22 +191,23 @@ def test_pack_entity(self, rw_dir): pack_path = tempfile.mktemp('', "pack", rw_dir) index_path = tempfile.mktemp('', 'index', rw_dir) iteration = 0 + def rewind_streams(): for obj in pack_objs: obj.stream.seek(0) - #END utility - for ppath, ipath, num_obj in zip((pack_path, )*2, (index_path, None), (len(pack_objs), None)): + # END utility + for ppath, ipath, num_obj in zip((pack_path, ) * 2, (index_path, None), (len(pack_objs), None)): pfile = open(ppath, 'wb') iwrite = None if ipath: ifile = open(ipath, 'wb') iwrite = ifile.write - #END handle ip + # END handle ip # make sure we rewind the streams ... we work on the same objects over and over again if iteration > 0: rewind_streams() - #END rewind streams + # END rewind streams iteration += 1 pack_sha, index_sha = PackEntity.write_pack(pack_objs, pfile.write, iwrite, object_count=num_obj) @@ -230,8 +229,8 @@ def rewind_streams(): assert idx.packfile_checksum() == pack_sha assert idx.indexfile_checksum() == index_sha assert idx.size() == len(pack_objs) - #END verify files exist - #END for each packpath, indexpath pair + # END verify files exist + # END for each packpath, indexpath pair # verify the packs throughly rewind_streams() @@ -242,10 +241,9 @@ def rewind_streams(): for use_crc in range(2): assert entity.is_valid_stream(info.binsha, use_crc) # END for each crc mode - #END for each info + # END for each info assert count == len(pack_objs) - def test_pack_64(self): # TODO: hex-edit a pack helping us to verify that we can handle 64 byte offsets # of course without really needing such a huge pack diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index 44a557d53..96268252d 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -31,10 +31,12 @@ import os from io import BytesIO + class TestStream(TestBase): + """Test stream classes""" - data_sizes = (15, 10000, 1000*1024+512) + data_sizes = (15, 10000, 1000 * 1024 + 512) def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): """Make stream tests - the orig_stream is seekable, allowing it to be @@ -43,13 +45,13 @@ def _assert_stream_reader(self, stream, cdata, rewind_stream=lambda s: None): :param rewind_stream: function called to rewind the stream to make it ready for reuse""" ns = 10 - assert len(cdata) > ns-1, "Data must be larger than %i, was %i" % (ns, len(cdata)) + assert len(cdata) > ns - 1, "Data must be larger than %i, was %i" % (ns, len(cdata)) # read in small steps ss = len(cdata) // ns for i in range(ns): data = stream.read(ss) - chunk = cdata[i*ss:(i+1)*ss] + chunk = cdata[i * ss:(i + 1) * ss] assert data == chunk # END for each step rest = stream.read() @@ -136,7 +138,7 @@ def test_compressed_writer(self): self.failUnlessRaises(OSError, os.close, fd) # read everything back, compare to data we zip - fd = os.open(path, os.O_RDONLY|getattr(os, 'O_BINARY', 0)) + fd = os.open(path, os.O_RDONLY | getattr(os, 'O_BINARY', 0)) written_data = os.read(fd, os.path.getsize(path)) assert len(written_data) == os.path.getsize(path) os.close(fd) @@ -156,7 +158,7 @@ def test_decompress_reader_special_case(self): data = ostream.read() assert len(data) == ostream.size - # Putting it back in should yield nothing new - after all, we have + # Putting it back in should yield nothing new - after all, we have dump = mdb.store(IStream(ostream.type, ostream.size, BytesIO(data))) assert dump.hexsha == sha # end for each loose object sha to test diff --git a/gitdb/test/test_util.py b/gitdb/test/test_util.py index e79355aaf..1dee54461 100644 --- a/gitdb/test/test_util.py +++ b/gitdb/test/test_util.py @@ -16,6 +16,7 @@ class TestUtils(TestBase): + def test_basics(self): assert to_hex_sha(NULL_HEX_SHA) == NULL_HEX_SHA assert len(to_bin_sha(NULL_HEX_SHA)) == 20 @@ -73,7 +74,6 @@ def test_lockedfd(self): del(lfd) assert not os.path.isfile(lockfilepath) - # write data - concurrently lfd = LockedFD(my_file) olfd = LockedFD(my_file) diff --git a/gitdb/typ.py b/gitdb/typ.py index bc7ba5828..98d15f3ec 100644 --- a/gitdb/typ.py +++ b/gitdb/typ.py @@ -4,7 +4,7 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module containing information about types known to the database""" -str_blob_type = b'blob' +str_blob_type = b'blob' str_commit_type = b'commit' -str_tree_type = b'tree' -str_tag_type = b'tag' +str_tree_type = b'tree' +str_tag_type = b'tag' diff --git a/gitdb/util.py b/gitdb/util.py index 93ba7f0ec..5b451faad 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -11,10 +11,10 @@ from io import StringIO from smmap import ( - StaticWindowMapManager, - SlidingWindowMapManager, - SlidingWindowMapBuffer - ) + StaticWindowMapManager, + SlidingWindowMapManager, + SlidingWindowMapBuffer +) # initialize our global memory manager instance # Use it to free cached (and unused) resources. @@ -22,7 +22,7 @@ mman = StaticWindowMapManager() else: mman = SlidingWindowMapManager() -#END handle mman +# END handle mman import hashlib @@ -31,6 +31,7 @@ except ImportError: from struct import unpack, calcsize __calcsize_cache = dict() + def unpack_from(fmt, data, offset=0): try: size = __calcsize_cache[fmt] @@ -38,7 +39,7 @@ def unpack_from(fmt, data, offset=0): size = calcsize(fmt) __calcsize_cache[fmt] = size # END exception handling - return unpack(fmt, data[offset : offset + size]) + return unpack(fmt, data[offset: offset + size]) # END own unpack_from implementation @@ -67,8 +68,8 @@ def unpack_from(fmt, data, offset=0): fsync = os.fsync # Backwards compatibility imports -from gitdb.const import ( - NULL_BIN_SHA, +from gitdb.const import ( + NULL_BIN_SHA, NULL_HEX_SHA ) @@ -76,7 +77,9 @@ def unpack_from(fmt, data, offset=0): #{ compatibility stuff ... + class _RandomAccessStringIO(object): + """Wrapper to provide required functionality in case memory maps cannot or may not be used. This is only really required in python 2.4""" __slots__ = '_sio' @@ -96,6 +99,7 @@ def __getitem__(self, i): def __getslice__(self, start, end): return self.getvalue()[start:end] + def byte_ord(b): """ Return the integer representation of the byte string. This supports Python @@ -110,6 +114,7 @@ def byte_ord(b): #{ Routines + def make_sha(source=''.encode("ascii")): """A python2.4 workaround for the sha/hashlib module fiasco @@ -121,6 +126,7 @@ def make_sha(source=''.encode("ascii")): sha1 = sha.sha(source) return sha1 + def allocate_memory(size): """:return: a file-protocol accessible memory block of the given size""" if size == 0: @@ -134,7 +140,7 @@ def allocate_memory(size): # this of course may fail if the amount of memory is not available in # one chunk - would only be the case in python 2.4, being more likely on # 32 bit systems. - return _RandomAccessStringIO("\0"*size) + return _RandomAccessStringIO("\0" * size) # END handle memory allocation @@ -166,6 +172,7 @@ def file_contents_ro(fd, stream=False, allow_mmap=True): return _RandomAccessStringIO(contents) return contents + def file_contents_ro_filepath(filepath, stream=False, allow_mmap=True, flags=0): """Get the file contents at filepath as fast as possible @@ -178,25 +185,28 @@ def file_contents_ro_filepath(filepath, stream=False, allow_mmap=True, flags=0): **Note** for now we don't try to use O_NOATIME directly as the right value needs to be shared per database in fact. It only makes a real difference for loose object databases anyway, and they use it with the help of the ``flags`` parameter""" - fd = os.open(filepath, os.O_RDONLY|getattr(os, 'O_BINARY', 0)|flags) + fd = os.open(filepath, os.O_RDONLY | getattr(os, 'O_BINARY', 0) | flags) try: return file_contents_ro(fd, stream, allow_mmap) finally: close(fd) # END assure file is closed + def sliding_ro_buffer(filepath, flags=0): """ :return: a buffer compatible object which uses our mapped memory manager internally ready to read the whole given filepath""" return SlidingWindowMapBuffer(mman.make_cursor(filepath), flags=flags) + def to_hex_sha(sha): """:return: hexified version of sha""" if len(sha) == 40: return sha return bin_to_hex(sha) + def to_bin_sha(sha): if len(sha) == 20: return sha @@ -209,6 +219,7 @@ def to_bin_sha(sha): #{ Utilities class LazyMixin(object): + """ Base class providing an interface to lazily retrieve attribute values upon first access. If slots are used, memory will only be reserved once the attribute @@ -240,6 +251,7 @@ def _set_cache_(self, attr): class LockedFD(object): + """ This class facilitates a safe read and write operation to a file on disk. If we write to 'file', we obtain a lock file at 'file.lock' and write to @@ -290,7 +302,7 @@ def open(self, write=False, stream=False): # try to open the lock file binary = getattr(os, 'O_BINARY', 0) - lockmode = os.O_WRONLY | os.O_CREAT | os.O_EXCL | binary + lockmode = os.O_WRONLY | os.O_CREAT | os.O_EXCL | binary try: fd = os.open(self._lockfilepath(), lockmode, int("600", 8)) if not write: diff --git a/gitdb/utils/compat.py b/gitdb/utils/compat.py index a2640fd23..c08cab555 100644 --- a/gitdb/utils/compat.py +++ b/gitdb/utils/compat.py @@ -24,7 +24,7 @@ def buffer(obj, offset, size=None): return obj[offset:] else: # return memoryview(obj)[offset:offset+size] - return obj[offset:offset+size] + return obj[offset:offset + size] # end buffer reimplementation memoryview = memoryview diff --git a/gitdb/utils/encoding.py b/gitdb/utils/encoding.py index 2d03ad30c..5855062bf 100644 --- a/gitdb/utils/encoding.py +++ b/gitdb/utils/encoding.py @@ -7,6 +7,7 @@ string_types = (basestring, ) text_type = unicode + def force_bytes(data, encoding="ascii"): if isinstance(data, bytes): return data @@ -16,6 +17,7 @@ def force_bytes(data, encoding="ascii"): return data + def force_text(data, encoding="utf-8"): if isinstance(data, text_type): return data diff --git a/setup.py b/setup.py index 4f8d1d5b2..6c67dc6aa 100755 --- a/setup.py +++ b/setup.py @@ -1,70 +1,74 @@ #!/usr/bin/env python -from distutils.core import setup, Extension +from distutils.core import setup, Extension from distutils.command.build_py import build_py from distutils.command.build_ext import build_ext -import os, sys +import os +import sys -# wow, this is a mixed bag ... I am pretty upset about all of this ... +# wow, this is a mixed bag ... I am pretty upset about all of this ... setuptools_build_py_module = None try: - # don't pull it in if we don't have to - if 'setuptools' in sys.modules: - import setuptools.command.build_py as setuptools_build_py_module - from setuptools.command.build_ext import build_ext + # don't pull it in if we don't have to + if 'setuptools' in sys.modules: + import setuptools.command.build_py as setuptools_build_py_module + from setuptools.command.build_ext import build_ext except ImportError: - pass + pass + class build_ext_nofail(build_ext): - """Doesn't fail when build our optional extensions""" - def run(self): - try: - build_ext.run(self) - except Exception: - print("Ignored failure when building extensions, pure python modules will be used instead") - # END ignore errors - + + """Doesn't fail when build our optional extensions""" + + def run(self): + try: + build_ext.run(self) + except Exception: + print("Ignored failure when building extensions, pure python modules will be used instead") + # END ignore errors + def get_data_files(self): - """Can you feel the pain ? So, in python2.5 and python2.4 coming with maya, - the line dealing with the ``plen`` has a bug which causes it to truncate too much. - It is fixed in the system interpreters as they receive patches, and shows how - bad it is if something doesn't have proper unittests. - The code here is a plain copy of the python2.6 version which works for all. - - Generate list of '(package,src_dir,build_dir,filenames)' tuples""" - data = [] - if not self.packages: - return data - - # this one is just for the setup tools ! They don't iniitlialize this variable - # when they should, but do it on demand using this method.Its crazy - if hasattr(self, 'analyze_manifest'): - self.analyze_manifest() - # END handle setuptools ... - - for package in self.packages: - # Locate package source directory - src_dir = self.get_package_dir(package) - - # Compute package build directory - build_dir = os.path.join(*([self.build_lib] + package.split('.'))) - - # Length of path to strip from found files - plen = 0 - if src_dir: - plen = len(src_dir)+1 - - # Strip directory from globbed filenames - filenames = [ - file[plen:] for file in self.find_data_files(package, src_dir) - ] - data.append((package, src_dir, build_dir, filenames)) - return data - + """Can you feel the pain ? So, in python2.5 and python2.4 coming with maya, + the line dealing with the ``plen`` has a bug which causes it to truncate too much. + It is fixed in the system interpreters as they receive patches, and shows how + bad it is if something doesn't have proper unittests. + The code here is a plain copy of the python2.6 version which works for all. + + Generate list of '(package,src_dir,build_dir,filenames)' tuples""" + data = [] + if not self.packages: + return data + + # this one is just for the setup tools ! They don't iniitlialize this variable + # when they should, but do it on demand using this method.Its crazy + if hasattr(self, 'analyze_manifest'): + self.analyze_manifest() + # END handle setuptools ... + + for package in self.packages: + # Locate package source directory + src_dir = self.get_package_dir(package) + + # Compute package build directory + build_dir = os.path.join(*([self.build_lib] + package.split('.'))) + + # Length of path to strip from found files + plen = 0 + if src_dir: + plen = len(src_dir) + 1 + + # Strip directory from globbed filenames + filenames = [ + file[plen:] for file in self.find_data_files(package, src_dir) + ] + data.append((package, src_dir, build_dir, filenames)) + return data + build_py.get_data_files = get_data_files if setuptools_build_py_module: - setuptools_build_py_module.build_py._get_data_files = get_data_files + setuptools_build_py_module.build_py._get_data_files = get_data_files # END apply setuptools patch too # NOTE: This is currently duplicated from the gitdb.__init__ module, as we cannot @@ -76,15 +80,15 @@ def get_data_files(self): version_info = (0, 6, 1) __version__ = '.'.join(str(i) for i in version_info) -setup(cmdclass={'build_ext':build_ext_nofail}, - name = "gitdb", - version = __version__, - description = "Git Object Database", - author = __author__, - author_email = __contact__, - url = __homepage__, - packages = ('gitdb', 'gitdb.db', 'gitdb.utils', 'gitdb.test'), - package_dir = {'gitdb':'gitdb'}, +setup(cmdclass={'build_ext': build_ext_nofail}, + name="gitdb", + version=__version__, + description="Git Object Database", + author=__author__, + author_email=__contact__, + url=__homepage__, + packages=('gitdb', 'gitdb.db', 'gitdb.utils', 'gitdb.test'), + package_dir = {'gitdb': 'gitdb'}, ext_modules=[Extension('gitdb._perf', ['gitdb/_fun.c', 'gitdb/_delta_apply.c'], include_dirs=['gitdb'])], license = "BSD License", zip_safe=False, @@ -94,26 +98,26 @@ def get_data_files(self): # See https://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ # Picked from - # http://pypi.python.org/pypi?:action=list_classifiers - #"Development Status :: 1 - Planning", - #"Development Status :: 2 - Pre-Alpha", - #"Development Status :: 3 - Alpha", - # "Development Status :: 4 - Beta", - "Development Status :: 5 - Production/Stable", - #"Development Status :: 6 - Mature", - #"Development Status :: 7 - Inactive", - "Environment :: Console", - "Intended Audience :: Developers", - "License :: OSI Approved :: BSD License", - "Operating System :: OS Independent", - "Operating System :: POSIX", - "Operating System :: Microsoft :: Windows", - "Operating System :: MacOS :: MacOS X", - "Programming Language :: Python", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.6", - "Programming Language :: Python :: 2.7", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.3", - "Programming Language :: Python :: 3.4", - ],) + # http://pypi.python.org/pypi?:action=list_classifiers + #"Development Status :: 1 - Planning", + #"Development Status :: 2 - Pre-Alpha", + #"Development Status :: 3 - Alpha", + # "Development Status :: 4 - Beta", + "Development Status :: 5 - Production/Stable", + #"Development Status :: 6 - Mature", + #"Development Status :: 7 - Inactive", + "Environment :: Console", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Operating System :: POSIX", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS :: MacOS X", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.6", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.3", + "Programming Language :: Python :: 3.4", +],) From c1998a074d2fd1773322e4595f30a5ecbbd54e32 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 6 Jan 2015 15:23:00 +0100 Subject: [PATCH 0287/2375] Fixed python 3 performance regression It makes the difference between tests in 110s, or 11s --- doc/source/changes.rst | 5 +++++ smmap/__init__.py | 2 +- smmap/util.py | 5 +++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index d5ed8e378..6cf9c83fa 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,11 @@ Changelog ######### +********** +v0.8.4 +********** +- Fixed Python 3 performance regression + ********** v0.8.3 ********** diff --git a/smmap/__init__.py b/smmap/__init__.py index c494648d7..5f0e095cc 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/Byron/smmap" -version_info = (0, 8, 3) +version_info = (0, 8, 4) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience diff --git a/smmap/util.py b/smmap/util.py index e079a527a..6daa1fa12 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -23,9 +23,10 @@ except NameError: # Python 3 has no `buffer`; only `memoryview` def buffer(obj, offset, size): - # return memoryview(obj)[offset:offset+size] + # Actually, for gitpython this is fastest ... . + return memoryview(obj)[offset:offset+size] # doing it directly is much faster ! - return obj[offset:offset + size] + # return obj[offset:offset + size] def string_types(): From b1c9d3eb5b13f2feecb242701f5b4842184f6234 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 6 Jan 2015 15:28:56 +0100 Subject: [PATCH 0288/2375] A minor fix after porting git-python over to PY3 It doesn't do anything (in terms of fixing an issue), but it should be more correct than what was there previously --- gitdb/utils/encoding.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitdb/utils/encoding.py b/gitdb/utils/encoding.py index 5855062bf..4d270af9d 100644 --- a/gitdb/utils/encoding.py +++ b/gitdb/utils/encoding.py @@ -22,7 +22,7 @@ def force_text(data, encoding="utf-8"): if isinstance(data, text_type): return data - if isinstance(data, string_types): + if isinstance(data, bytes): return data.decode(encoding) if compat.PY3: From e0b0becd97afb9b7ac434c5fabdadd20070d643d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 6 Jan 2015 15:55:09 +0100 Subject: [PATCH 0289/2375] Restore compatibility to python 3.0 to 3.4 --- doc/source/changes.rst | 5 +++++ smmap/__init__.py | 2 +- smmap/buf.py | 37 +++++++++++++++++++++++++++---------- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 6cf9c83fa..ec423694c 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,11 @@ Changelog ######### +********** +v0.8.5 +********** +- Fixed Python 3.0-3.3 regression, which also causes smmap to become about 3 times slower depending on the code path. It's related to this bug (http://bugs.python.org/issue15958), which was fixed in python 3.4 + ********** v0.8.4 ********** diff --git a/smmap/__init__.py b/smmap/__init__.py index 5f0e095cc..46b0002e4 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/Byron/smmap" -version_info = (0, 8, 4) +version_info = (0, 8, 5) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience diff --git a/smmap/buf.py b/smmap/buf.py index 17d2d369b..b3b71c49c 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -3,6 +3,8 @@ __all__ = ["SlidingWindowMapBuffer"] +import sys + try: bytes except NameError: @@ -79,16 +81,31 @@ def __getslice__(self, i, j): ofs = i # It's fastest to keep tokens and join later, especially in py3, which was 7 times slower # in the previous iteration of this code - md = list() - while l: - c.use_region(ofs, l) - assert c.is_valid() - d = c.buffer()[:l] - ofs += len(d) - l -= len(d) - md.append(d) - # END while there are bytes to read - return bytes().join(md) + pyvers = sys.version_info[:2] + if (3, 0) <= pyvers <= (3, 3): + # Memory view cannot be joined below python 3.4 ... + out = bytes() + while l: + c.use_region(ofs, l) + assert c.is_valid() + d = c.buffer()[:l] + ofs += len(d) + l -= len(d) + # This is slower than the join ... but what can we do ... + out += d + # END while there are bytes to read + return out + else: + md = list() + while l: + c.use_region(ofs, l) + assert c.is_valid() + d = c.buffer()[:l] + ofs += len(d) + l -= len(d) + md.append(d) + # END while there are bytes to read + return bytes().join(md) # END fast or slow path #{ Interface From fdc1d68b01f0d5dd601cdcc29df0eee19787d7c9 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 6 Jan 2015 17:02:35 +0100 Subject: [PATCH 0290/2375] Fixed python 3 compatibility issue that only showed on windows And bumped version to 0.6.2 --- gitdb/__init__.py | 2 +- gitdb/util.py | 12 ++++++------ setup.py | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 791a2ef2f..020a5795f 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 6, 1) +version_info = (0, 6, 2) __version__ = '.'.join(str(i) for i in version_info) diff --git a/gitdb/util.py b/gitdb/util.py index 5b451faad..8f80156b2 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -8,7 +8,7 @@ import sys import errno -from io import StringIO +from io import BytesIO from smmap import ( StaticWindowMapManager, @@ -78,14 +78,14 @@ def unpack_from(fmt, data, offset=0): #{ compatibility stuff ... -class _RandomAccessStringIO(object): +class _RandomAccessBytesIO(object): """Wrapper to provide required functionality in case memory maps cannot or may not be used. This is only really required in python 2.4""" __slots__ = '_sio' def __init__(self, buf=''): - self._sio = StringIO(buf) + self._sio = BytesIO(buf) def __getattr__(self, attr): return getattr(self._sio, attr) @@ -130,7 +130,7 @@ def make_sha(source=''.encode("ascii")): def allocate_memory(size): """:return: a file-protocol accessible memory block of the given size""" if size == 0: - return _RandomAccessStringIO('') + return _RandomAccessBytesIO(b'') # END handle empty chunks gracefully try: @@ -140,7 +140,7 @@ def allocate_memory(size): # this of course may fail if the amount of memory is not available in # one chunk - would only be the case in python 2.4, being more likely on # 32 bit systems. - return _RandomAccessStringIO("\0" * size) + return _RandomAccessBytesIO(b"\0" * size) # END handle memory allocation @@ -169,7 +169,7 @@ def file_contents_ro(fd, stream=False, allow_mmap=True): # read manully contents = os.read(fd, os.fstat(fd).st_size) if stream: - return _RandomAccessStringIO(contents) + return _RandomAccessBytesIO(contents) return contents diff --git a/setup.py b/setup.py index 6c67dc6aa..12c936a17 100755 --- a/setup.py +++ b/setup.py @@ -77,7 +77,7 @@ def get_data_files(self): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 6, 1) +version_info = (0, 6, 2) __version__ = '.'.join(str(i) for i in version_info) setup(cmdclass={'build_ext': build_ext_nofail}, @@ -92,8 +92,8 @@ def get_data_files(self): ext_modules=[Extension('gitdb._perf', ['gitdb/_fun.c', 'gitdb/_delta_apply.c'], include_dirs=['gitdb'])], license = "BSD License", zip_safe=False, - requires=('smmap (>=0.8.3)', ), - install_requires=('smmap >= 0.8.3'), + requires=('smmap (>=0.8.5)', ), + install_requires=('smmap >= 0.8.5'), long_description = """GitDB is a pure-Python git object database""", # See https://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ From cb72f81e1407a86d85215a7fba4c2905c2451e0c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 6 Jan 2015 18:17:23 +0100 Subject: [PATCH 0291/2375] Added coverage configuration Adjusted sublime project too --- .coveragerc | 11 +++++++++++ .gitignore | 3 ++- .travis.yml | 2 +- etc/sublime-text/gitdb.sublime-project | 24 +++++++----------------- 4 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 .coveragerc diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 000000000..45d72abc9 --- /dev/null +++ b/.coveragerc @@ -0,0 +1,11 @@ +[run] +source = gitdb + +; to make nosetests happy +[report] +omit = + */smmap/* + */yaml* + */tests/* + */python?.?/* + */site-packages/nose/* \ No newline at end of file diff --git a/.gitignore b/.gitignore index c6247dbb0..e0b4e8579 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ MANIFEST +.coverage build/ dist/ *.pyc *.o *.so .noseids -*.sublime-workspace \ No newline at end of file +*.sublime-workspace diff --git a/.travis.yml b/.travis.yml index 761edc19b..d436229f0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ git: install: - pip install coveralls script: - - nosetests -v + - nosetests -v --with-coverage after_success: - coveralls diff --git a/etc/sublime-text/gitdb.sublime-project b/etc/sublime-text/gitdb.sublime-project index bc0e37f0a..d0e2e5132 100644 --- a/etc/sublime-text/gitdb.sublime-project +++ b/etc/sublime-text/gitdb.sublime-project @@ -15,7 +15,10 @@ "folder_exclude_patterns" : [ ".git", "cover", - "gitdb/ext" + "gitdb/ext", + "dist", + "doc/build", + ".tox" ] }, // SMMAP @@ -32,22 +35,9 @@ "folder_exclude_patterns" : [ ".git", "cover", - ] - }, - // ASYNC - //////// - { - "follow_symlinks": true, - "path": "../../gitdb/ext/async", - "file_exclude_patterns" : [ - "*.sublime-workspace", - ".git", - ".noseids", - ".coverage" - ], - "folder_exclude_patterns" : [ - ".git", - "cover", + "dist", + "doc/build", + ".tox" ] }, ] From de96c522ff20fa99d13128784a393b619dd0b33b Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 6 Jan 2015 18:26:18 +0100 Subject: [PATCH 0292/2375] Fixed yet another issue with smmap's latest changes Now we deal with memory views as well ... --- gitdb/pack.py | 9 +++++++-- gitdb/utils/compat.py | 8 ++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gitdb/pack.py b/gitdb/pack.py index b4ba7876c..d2666d601 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -62,7 +62,12 @@ from binascii import crc32 from gitdb.const import NULL_BYTE -from gitdb.utils.compat import izip, buffer, xrange +from gitdb.utils.compat import ( + izip, + buffer, + xrange, + to_bytes +) import tempfile import array @@ -864,7 +869,7 @@ def collect_streams_at_offset(self, offset): stream = streams[-1] while stream.type_id in delta_types: if stream.type_id == REF_DELTA: - sindex = self._index.sha_to_index(stream.delta_info) + sindex = self._index.sha_to_index(to_bytes(stream.delta_info)) if sindex is None: break stream = self._pack.stream(self._index.offset(sindex)) diff --git a/gitdb/utils/compat.py b/gitdb/utils/compat.py index c08cab555..a7899cb14 100644 --- a/gitdb/utils/compat.py +++ b/gitdb/utils/compat.py @@ -15,6 +15,9 @@ # Python 2 buffer = buffer memoryview = buffer + # Assume no memory view ... + def to_bytes(i): + return i except NameError: # Python 3 has no `buffer`; only `memoryview` # However, it's faster to just slice the object directly, maybe it keeps a view internally @@ -26,6 +29,11 @@ def buffer(obj, offset, size=None): # return memoryview(obj)[offset:offset+size] return obj[offset:offset + size] # end buffer reimplementation + # smmap can return memory view objects, which can't be compared as buffers/bytes can ... + def to_bytes(i): + if isinstance(i, memoryview): + return i.tobytes() + return i memoryview = memoryview From a64e64a9735e8067ca196ab19711d136bd9b309c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 6 Jan 2015 18:27:22 +0100 Subject: [PATCH 0293/2375] Bumped version to 0.6.3 --- gitdb/__init__.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 020a5795f..2ba8725eb 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 6, 2) +version_info = (0, 6, 3) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index 12c936a17..e634e37f2 100755 --- a/setup.py +++ b/setup.py @@ -77,7 +77,7 @@ def get_data_files(self): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 6, 2) +version_info = (0, 6, 3) __version__ = '.'.join(str(i) for i in version_info) setup(cmdclass={'build_ext': build_ext_nofail}, From 9b3a34b7d00285cf9028d19e82de6b155d0096c7 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 6 Jan 2015 18:53:52 +0100 Subject: [PATCH 0294/2375] Improved coverage configuration --- .coveragerc | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.coveragerc b/.coveragerc index 45d72abc9..71b6ef701 100644 --- a/.coveragerc +++ b/.coveragerc @@ -3,9 +3,5 @@ source = gitdb ; to make nosetests happy [report] -omit = - */smmap/* - */yaml* - */tests/* - */python?.?/* - */site-packages/nose/* \ No newline at end of file +include = */gitdb/* +omit = */gitdb/ext/* From 70fae1f98bb7d44b58d94a183e9eb8b590bc23bf Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 7 Jan 2015 16:01:06 +0100 Subject: [PATCH 0295/2375] Initial attempt to fix resource usage Reference counting is now done manually, but it seems that things can still go wrong at least during testing --- doc/source/changes.rst | 6 ++++++ smmap/mman.py | 27 +++++++++++++-------------- smmap/test/test_mman.py | 26 +++++++++++++------------- smmap/test/test_util.py | 9 +-------- smmap/util.py | 33 +++++++++++++++++++-------------- 5 files changed, 52 insertions(+), 49 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index ec423694c..f9f328757 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,12 @@ Changelog ######### +********** +v0.8.6 +********** +- Fixed issue with resources never being freed as mmaps were never closed. +- Client counting is now done manually, instead of relying on pyton's reference count + ********** v0.8.5 ********** diff --git a/smmap/mman.py b/smmap/mman.py index c7a459558..6e8b9eeaf 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -8,7 +8,6 @@ buffer, ) -from weakref import ref import sys from functools import reduce @@ -55,8 +54,7 @@ def _destroy(self): # Actual client count, which doesn't include the reference kept by the manager, nor ours # as we are about to be deleted try: - num_clients = self._rlist.client_count() - 2 - if num_clients == 0 and len(self._rlist) == 0: + if len(self._rlist) == 0: # Free all resources associated with the mapped file self._manager._fdict.pop(self._rlist.path_or_fd()) # END remove regions list from manager @@ -78,7 +76,7 @@ def _copy_from(self, rhs): self._size = rhs._size if self._region is not None: - self._region.increment_usage_count() + self._region.increment_client_count() # END handle regions def __copy__(self): @@ -126,20 +124,22 @@ def use_region(self, offset=0, size=0, flags=0): if need_region: self._region = man._obtain_region(self._rlist, offset, size, flags, False) + self._region.increment_client_count() # END need region handling - self._region.increment_usage_count() self._ofs = offset - self._region._b self._size = min(size, self._region.ofs_end() - offset) return self def unuse_region(self): - """Unuse the ucrrent region. Does nothing if we have no current region + """Unuse the current region. Does nothing if we have no current region **Note:** the cursor unuses the region automatically upon destruction. It is recommended to un-use the region once you are done reading from it in persistent cursors as it helps to free up resource more quickly""" + if self._region is not None: + self._region.increment_client_count(-1) self._region = None # note: should reset ofs and size, but we spare that for performance. Its not # allowed to query information if we are not valid ! @@ -184,12 +184,10 @@ def size(self): """:return: amount of bytes we point to""" return self._size - def region_ref(self): - """:return: weak ref to our mapped region. + def region(self): + """:return: our mapped region, or None if nothing is mapped yet :raise AssertionError: if we have no current region. This is only useful for debugging""" - if self._region is None: - raise AssertionError("region not set") - return ref(self._region) + return self._region def includes_ofs(self, ofs): """:return: True if the given absolute offset is contained in the cursors @@ -311,8 +309,8 @@ def _collect_lru_region(self, size): lru_list = None for regions in self._fdict.values(): for region in regions: - # check client count - consider that we keep one reference ourselves ! - if (region.client_count() - 2 == 0 and + # check client count - if it's 1, it's just us + if (region.client_count() == 1 and (lru_region is None or region._uc < lru_region._uc)): lru_region = region lru_list = regions @@ -326,6 +324,7 @@ def _collect_lru_region(self, size): num_found += 1 del(lru_list[lru_list.index(lru_region)]) + lru_region.increment_client_count(-1) self._memory_size -= lru_region.size() self._handle_count -= 1 # END while there is more memory to free @@ -449,7 +448,7 @@ def force_map_handle_removal_win(self, base_path): for path, rlist in self._fdict.items(): if path.startswith(base_path): for region in rlist: - region._mf.close() + region.release() num_closed += 1 # END path matches # END for each path diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index b718b065f..c8b9c703e 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -119,21 +119,21 @@ def test_memman_operation(self): # window size is 0 for static managers, hence size will be 0. We take that into consideration size = man.window_size() // 2 assert c.use_region(base_offset, size).is_valid() - rr = c.region_ref() - assert rr().client_count() == 2 # the manager and the cursor and us + rr = c.region() + assert rr.client_count() == 2 # the manager and the cursor and us assert man.num_open_files() == 1 assert man.num_file_handles() == 1 - assert man.mapped_memory_size() == rr().size() + assert man.mapped_memory_size() == rr.size() # assert c.size() == size # the cursor may overallocate in its static version assert c.ofs_begin() == base_offset - assert rr().ofs_begin() == 0 # it was aligned and expanded + assert rr.ofs_begin() == 0 # it was aligned and expanded if man.window_size(): # but isn't larger than the max window (aligned) - assert rr().size() == align_to_mmap(man.window_size(), True) + assert rr.size() == align_to_mmap(man.window_size(), True) else: - assert rr().size() == fc.size + assert rr.size() == fc.size # END ignore static managers which dont use windows and are aligned to file boundaries assert c.buffer()[:] == data[base_offset:base_offset + (size or c.size())] @@ -141,7 +141,7 @@ def test_memman_operation(self): # obtain second window, which spans the first part of the file - it is a still the same window nsize = (size or fc.size) - 10 assert c.use_region(0, nsize).is_valid() - assert c.region_ref()() == rr() + assert c.region() == rr assert man.num_file_handles() == 1 assert c.size() == nsize assert c.ofs_begin() == 0 @@ -154,15 +154,15 @@ def test_memman_operation(self): if man.window_size(): assert man.num_file_handles() == 2 assert c.size() < size - assert c.region_ref()() is not rr() # old region is still available, but has not curser ref anymore - assert rr().client_count() == 1 # only held by manager + assert c.region() is not rr # old region is still available, but has not curser ref anymore + assert rr.client_count() == 1 # only held by manager else: assert c.size() < fc.size # END ignore static managers which only have one handle per file - rr = c.region_ref() - assert rr().client_count() == 2 # manager + cursor - assert rr().ofs_begin() < c.ofs_begin() # it should have extended itself to the left - assert rr().ofs_end() <= fc.size # it cannot be larger than the file + rr = c.region() + assert rr.client_count() == 2 # manager + cursor + assert rr.ofs_begin() < c.ofs_begin() # it should have extended itself to the left + assert rr.ofs_end() <= fc.size # it cannot be larger than the file assert c.buffer()[:] == data[base_offset:base_offset + (size or c.size())] # unising a region makes the cursor invalid diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 0bbf91b65..0a162607e 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -88,12 +88,7 @@ def test_region(self): # auto-refcount assert rfull.client_count() == 1 rfull2 = rfull - assert rfull.client_count() == 2 - - # usage - assert rfull.usage_count() == 0 - rfull.increment_usage_count() - assert rfull.usage_count() == 1 + assert rfull.client_count() == 1, "no auto-counting" # window constructor w = MapWindow.from_region(rfull) @@ -106,8 +101,6 @@ def test_region_list(self): for item in (fc.path, fd): ml = MapRegionList(item) - assert ml.client_count() == 1 - assert len(ml) == 0 assert ml.path_or_fd() == item assert ml.file_size() == fc.size diff --git a/smmap/util.py b/smmap/util.py index 6daa1fa12..1d20e5040 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -177,6 +177,8 @@ def __init__(self, path_or_fd, ofs, size, flags=0): os.close(fd) # END only close it if we opened it # END close file handle + # We assume the first one to use us keeps us around + self.increment_client_count() def _read_into_memory(self, fd, offset, size): """:return: string data as read from the given file descriptor, offset and size """ @@ -222,17 +224,25 @@ def includes_ofs(self, ofs): def client_count(self): """:return: number of clients currently using this region""" - from sys import getrefcount - # -1: self on stack, -1 self in this method, -1 self in getrefcount - return getrefcount(self) - 3 - - def usage_count(self): - """:return: amount of usages so far""" return self._uc - def increment_usage_count(self): - """Adjust the usage count by the given positive or negative offset""" - self._uc += 1 + def increment_client_count(self, ofs = 1): + """Adjust the usage count by the given positive or negative offset. + If usage count equals 0, we will auto-release our resources + :return: True if we released resources, False otherwise. In the latter case, we can still be used""" + self._uc += ofs + assert self._uc > -1, "Increments must match decrements, usage counter negative: %i" % self._uc + + if self.client_count() == 0: + self.release() + return True + else: + return False + # end handle release + + def release(self): + """Release all resources this instance might hold. Must only be called if there usage_count() is zero""" + self._mf.close() # re-define all methods which need offset adjustments in compatibility mode if _need_compat_layer: @@ -268,11 +278,6 @@ def __init__(self, path_or_fd): self._path_or_fd = path_or_fd self._file_size = None - def client_count(self): - """:return: amount of clients which hold a reference to this instance""" - from sys import getrefcount - return getrefcount(self) - 3 - def path_or_fd(self): """:return: path or file descriptor we are attached to""" return self._path_or_fd From f071ffdcacbafff648cd29d6f75fe27c47f53210 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 7 Jan 2015 16:57:50 +0100 Subject: [PATCH 0296/2375] All tests work, bumped version --- doc/source/changes.rst | 2 +- smmap/__init__.py | 2 +- smmap/buf.py | 5 +++++ smmap/mman.py | 7 +++++-- smmap/test/test_buf.py | 3 ++- 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index f9f328757..f99e85fb7 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -3,7 +3,7 @@ Changelog ######### ********** -v0.8.6 +v0.9.0 ********** - Fixed issue with resources never being freed as mmaps were never closed. - Client counting is now done manually, instead of relying on pyton's reference count diff --git a/smmap/__init__.py b/smmap/__init__.py index 46b0002e4..e711bbbf3 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/Byron/smmap" -version_info = (0, 8, 5) +version_info = (0, 9, 0) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience diff --git a/smmap/buf.py b/smmap/buf.py index b3b71c49c..e6f24341d 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -93,6 +93,7 @@ def __getslice__(self, i, j): l -= len(d) # This is slower than the join ... but what can we do ... out += d + del(d) # END while there are bytes to read return out else: @@ -103,6 +104,10 @@ def __getslice__(self, i, j): d = c.buffer()[:l] ofs += len(d) l -= len(d) + # Make sure we don't keep references, as c.use_region() might attempt to free resources, but + # can't unless we use pure bytes + if hasattr(d, 'tobytes'): + d = d.tobytes() md.append(d) # END while there are bytes to read return bytes().join(md) diff --git a/smmap/mman.py b/smmap/mman.py index 6e8b9eeaf..7180c75b3 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -58,7 +58,7 @@ def _destroy(self): # Free all resources associated with the mapped file self._manager._fdict.pop(self._rlist.path_or_fd()) # END remove regions list from manager - except TypeError: + except (TypeError, KeyError): # sometimes, during shutdown, getrefcount is None. Its possible # to re-import it, however, its probably better to just ignore # this python problem (for now). @@ -70,11 +70,14 @@ def _destroy(self): def _copy_from(self, rhs): """Copy all data from rhs into this instance, handles usage count""" self._manager = rhs._manager - self._rlist = rhs._rlist + self._rlist = type(rhs._rlist)(rhs._rlist) self._region = rhs._region self._ofs = rhs._ofs self._size = rhs._size + for region in self._rlist: + region.increment_client_count() + if self._region is not None: self._region.increment_client_count() # END handle regions diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index 03377154b..984b43254 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -12,7 +12,6 @@ from time import time import sys import os -import logging man_optimal = SlidingWindowMapManager() @@ -104,6 +103,7 @@ def test_basics(self): assert len(d) == ofs_end - ofs_start assert d == data[ofs_start:ofs_end] num_bytes += len(d) + del d else: pos = randint(0, fsize) assert buf[pos] == data[pos] @@ -122,6 +122,7 @@ def test_basics(self): % (man_id, max_num_accesses, mode_str, type(item), num_bytes / mb, elapsed, (num_bytes / mb) / elapsed), file=sys.stderr) # END handle access mode + del buf # END for each manager # END for each input os.close(fd) From a38efa84daef914e4de58d1905a500d8d14aaf45 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 7 Jan 2015 18:03:33 +0100 Subject: [PATCH 0297/2375] Artificially restrict test-runs to assure we don't leak handles --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index cb0c16e44..b967f502e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,8 @@ python: install: - pip install coveralls script: + - ulimit -n 48 + - ulimit -n - nosetests --with-coverage after_success: - coveralls From 560a211001064261eb25ca874980591790fb7986 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 7 Jan 2015 18:09:45 +0100 Subject: [PATCH 0298/2375] Fixed possible file-handle leak Configured travis to artificially restrict handle count to protect from regression in that regard --- .travis.yml | 2 ++ gitdb/stream.py | 14 +++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index d436229f0..8cab8225f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,8 @@ git: install: - pip install coveralls script: + - ulimit -n 48 + - ulimit -n - nosetests -v --with-coverage after_success: - coveralls diff --git a/gitdb/stream.py b/gitdb/stream.py index 4478a0f44..d855257cd 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -91,9 +91,7 @@ def _set_cache_(self, attr): self._parse_header_info() def __del__(self): - if self._close: - self._m.close() - # END handle resource freeing + self.close() def _parse_header_info(self): """If this stream contains object data, parse the header info and skip the @@ -141,6 +139,16 @@ def data(self): """:return: random access compatible data we are working on""" return self._m + def close(self): + """Close our underlying stream of compressed bytes if this was allowed during initialization + :return: True if we closed the underlying stream + :note: can be called safely + """ + if self._close: + self._m.close() + self._close = False + # END handle resource freeing + def compressed_bytes_read(self): """ :return: number of compressed bytes read. This includes the bytes it From be294278a0087f21d565a1084fb220ff936ae0bd Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 7 Jan 2015 19:57:19 +0100 Subject: [PATCH 0299/2375] Protected stream closure against possibilty of being a bytes For some reason, it gets bytes where it did expect a stream ... . Probably I should have figured out where this was input, instead of fixing it the brutal way --- gitdb/db/loose.py | 3 ++- gitdb/stream.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index e924080ef..4732b56da 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -159,7 +159,8 @@ def info(self, sha): typ, size = loose_object_header_info(m) return OInfo(sha, typ, size) finally: - m.close() + if hasattr(m, 'close'): + m.close() # END assure release of system resources def stream(self, sha): diff --git a/gitdb/stream.py b/gitdb/stream.py index d855257cd..826def387 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -145,7 +145,8 @@ def close(self): :note: can be called safely """ if self._close: - self._m.close() + if hasattr(self._m, 'close'): + self._m.close() self._close = False # END handle resource freeing From 7bde7b098b07291227fcbc4eb900ebf13c9191a2 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 8 Jan 2015 17:34:53 +0100 Subject: [PATCH 0300/2375] Fixed up tests to use the GITDB_TEST_GIT_REPO_BASE at all times I have verified that all tests are working, even without a parent git repository, as long as the said environment variable is set. Fixes #16 --- gitdb/exc.py | 12 +++++++----- gitdb/test/db/test_git.py | 3 ++- gitdb/test/db/test_ref.py | 2 +- gitdb/test/lib.py | 29 ++++++++++++++++++++++++++++- gitdb/test/performance/lib.py | 30 ++---------------------------- gitdb/test/test_example.py | 8 +++----- 6 files changed, 43 insertions(+), 41 deletions(-) diff --git a/gitdb/exc.py b/gitdb/exc.py index d58442f2b..817ac7b62 100644 --- a/gitdb/exc.py +++ b/gitdb/exc.py @@ -12,12 +12,10 @@ class ODBError(Exception): class InvalidDBRoot(ODBError): - """Thrown if an object database cannot be initialized at the given path""" class BadObject(ODBError): - """The object with the given SHA does not exist. Instantiate with the failed sha""" @@ -25,19 +23,23 @@ def __str__(self): return "BadObject: %s" % to_hex_sha(self.args[0]) -class ParseError(ODBError): +class BadName(ODBError): + """A name provided to rev_parse wasn't understood""" + + def __str__(self): + return "Ref '%s' did not resolve to an object" % self.args[0] + +class ParseError(ODBError): """Thrown if the parsing of a file failed due to an invalid format""" class AmbiguousObjectName(ODBError): - """Thrown if a possibly shortened name does not uniquely represent a single object in the database""" class BadObjectType(ODBError): - """The object had an unsupported type""" diff --git a/gitdb/test/db/test_git.py b/gitdb/test/db/test_git.py index f96206744..f28ffb761 100644 --- a/gitdb/test/db/test_git.py +++ b/gitdb/test/db/test_git.py @@ -2,6 +2,7 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php +import os from gitdb.test.db.lib import ( TestDBBase, fixture_path, @@ -16,7 +17,7 @@ class TestGitDB(TestDBBase): def test_reading(self): - gdb = GitDB(fixture_path('../../../.git/objects')) + gdb = GitDB(os.path.join(self.gitrepopath, 'objects')) # we have packs and loose objects, alternates doesn't necessarily exist assert 1 < len(gdb.databases()) < 4 diff --git a/gitdb/test/db/test_ref.py b/gitdb/test/db/test_ref.py index b774bafe4..25cf37d1b 100644 --- a/gitdb/test/db/test_ref.py +++ b/gitdb/test/db/test_ref.py @@ -40,7 +40,7 @@ def test_writing(self, path): # setup alternate file # add two, one is invalid - own_repo_path = fixture_path('../../../.git/objects') # use own repo + own_repo_path = os.path.join(self.gitrepopath, 'objects') # use own repo self.make_alt_file(alt_path, [own_repo_path, "invalid/path"]) rdb.update_cache() assert len(rdb.databases()) == 1 diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index c4acd9218..a089eac6f 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -18,14 +18,41 @@ import shutil import os import gc +import logging from functools import wraps #{ Bases class TestBase(unittest.TestCase): + """Base class for all tests - """Base class for all tests""" + TestCase providing access to readonly repositories using the following member variables. + + * gitrepopath + + * read-only base path of the git source repository, i.e. .../git/.git + """ + + #{ Invvariants + k_env_git_repo = "GITDB_TEST_GIT_REPO_BASE" + #} END invariants + + @classmethod + def setUpClass(cls): + try: + super(TestBase, cls).setUpClass() + except AttributeError: + pass + + cls.gitrepopath = os.environ.get(cls.k_env_git_repo) + if not cls.gitrepopath: + logging.info( + "You can set the %s environment variable to a .git repository of your choice - defaulting to the gitdb repository", cls.k_env_git_repo) + ospd = os.path.dirname + cls.gitrepopath = os.path.join(ospd(ospd(ospd(__file__))), '.git') + # end assure gitrepo is set + assert cls.gitrepopath.endswith('.git') #} END bases diff --git a/gitdb/test/performance/lib.py b/gitdb/test/performance/lib.py index cbc52bc77..fa4dd209d 100644 --- a/gitdb/test/performance/lib.py +++ b/gitdb/test/performance/lib.py @@ -3,41 +3,15 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Contains library functions""" -import os -import logging from gitdb.test.lib import TestBase -#{ Invvariants -k_env_git_repo = "GITDB_TEST_GIT_REPO_BASE" -#} END invariants - #{ Base Classes class TestBigRepoR(TestBase): - - """TestCase providing access to readonly 'big' repositories using the following - member variables: - - * gitrepopath - - * read-only base path of the git source repository, i.e. .../git/.git""" - - def setUp(self): - try: - super(TestBigRepoR, self).setUp() - except AttributeError: - pass - - self.gitrepopath = os.environ.get(k_env_git_repo) - if not self.gitrepopath: - logging.info( - "You can set the %s environment variable to a .git repository of your choice - defaulting to the gitdb repository", k_env_git_repo) - ospd = os.path.dirname - self.gitrepopath = os.path.join(ospd(ospd(ospd(ospd(__file__)))), '.git') - # end assure gitrepo is set - assert self.gitrepopath.endswith('.git') + """A placeholder in case we want to add additional functionality to all performance test-cases + """ #} END base classes diff --git a/gitdb/test/test_example.py b/gitdb/test/test_example.py index ed0a885bf..6e80bf5c6 100644 --- a/gitdb/test/test_example.py +++ b/gitdb/test/test_example.py @@ -3,10 +3,8 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Module with examples from the tutorial section of the docs""" -from gitdb.test.lib import ( - TestBase, - fixture_path -) +import os +from gitdb.test.lib import TestBase from gitdb import IStream from gitdb.db import LooseObjectDB @@ -16,7 +14,7 @@ class TestExamples(TestBase): def test_base(self): - ldb = LooseObjectDB(fixture_path("../../../.git/objects")) + ldb = LooseObjectDB(os.path.join(self.gitrepopath, 'objects')) for sha1 in ldb.sha_iter(): oinfo = ldb.info(sha1) From f2233fbf40f3f69309ce5cc714e99fcbdcd33ec3 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 8 Jan 2015 17:49:05 +0100 Subject: [PATCH 0301/2375] Removed unused imports - should have been in the last commit obviously --- gitdb/test/db/test_git.py | 1 - gitdb/test/db/test_ref.py | 1 - 2 files changed, 2 deletions(-) diff --git a/gitdb/test/db/test_git.py b/gitdb/test/db/test_git.py index f28ffb761..2bda18f84 100644 --- a/gitdb/test/db/test_git.py +++ b/gitdb/test/db/test_git.py @@ -5,7 +5,6 @@ import os from gitdb.test.db.lib import ( TestDBBase, - fixture_path, with_rw_directory ) from gitdb.exc import BadObject diff --git a/gitdb/test/db/test_ref.py b/gitdb/test/db/test_ref.py index 25cf37d1b..0e90f938b 100644 --- a/gitdb/test/db/test_ref.py +++ b/gitdb/test/db/test_ref.py @@ -5,7 +5,6 @@ from gitdb.test.db.lib import ( TestDBBase, with_rw_directory, - fixture_path ) from gitdb.db import ReferenceDB From a88a777df3909a61be97f1a7b1194dad6de25702 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 8 Jan 2015 18:25:46 +0100 Subject: [PATCH 0302/2375] Make tests independent of actual repository data Therefore, hardcoded sha's are not allowed anymore, as the contents of the repository is unknown. Fixes #16, for real this time ;) --- gitdb/test/db/test_git.py | 7 ++++--- gitdb/test/db/test_ref.py | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/gitdb/test/db/test_git.py b/gitdb/test/db/test_git.py index 2bda18f84..acc0f153f 100644 --- a/gitdb/test/db/test_git.py +++ b/gitdb/test/db/test_git.py @@ -10,7 +10,7 @@ from gitdb.exc import BadObject from gitdb.db import GitDB from gitdb.base import OStream, OInfo -from gitdb.util import hex_to_bin, bin_to_hex +from gitdb.util import bin_to_hex class TestGitDB(TestDBBase): @@ -22,7 +22,7 @@ def test_reading(self): assert 1 < len(gdb.databases()) < 4 # access should be possible - gitdb_sha = hex_to_bin("5690fd0d3304f378754b23b098bd7cb5f4aa1976") + gitdb_sha = next(gdb.sha_iter()) assert isinstance(gdb.info(gitdb_sha), OInfo) assert isinstance(gdb.stream(gitdb_sha), OStream) ni = 50 @@ -35,7 +35,8 @@ def test_reading(self): # have a separate test module # test partial shas # this one as uneven and quite short - assert gdb.partial_to_complete_sha_hex('155b6') == hex_to_bin("155b62a9af0aa7677078331e111d0f7aa6eb4afc") + gitdb_sha_hex = bin_to_hex(gitdb_sha) + assert gdb.partial_to_complete_sha_hex(gitdb_sha_hex[:5]) == gitdb_sha # mix even/uneven hexshas for i, binsha in enumerate(sha_list): diff --git a/gitdb/test/db/test_ref.py b/gitdb/test/db/test_ref.py index 0e90f938b..6bac245c1 100644 --- a/gitdb/test/db/test_ref.py +++ b/gitdb/test/db/test_ref.py @@ -45,7 +45,7 @@ def test_writing(self, path): assert len(rdb.databases()) == 1 # we should now find a default revision of ours - gitdb_sha = hex_to_bin("5690fd0d3304f378754b23b098bd7cb5f4aa1976") + gitdb_sha = next(rdb.sha_iter()) assert rdb.has_object(gitdb_sha) # remove valid From 13ad9b1199331a35e23f65c735acf482be09eae3 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Thu, 8 Jan 2015 13:10:28 -0500 Subject: [PATCH 0303/2375] minor spell fixes + empty line unification + comparison for python 2.6 --- gitdb/base.py | 6 +++--- gitdb/exc.py | 2 -- gitdb/stream.py | 6 +++--- gitdb/util.py | 2 +- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/gitdb/base.py b/gitdb/base.py index 5760b8af0..42e71d0fa 100644 --- a/gitdb/base.py +++ b/gitdb/base.py @@ -19,7 +19,7 @@ class OInfo(tuple): - """Carries information about an object in an ODB, provding information + """Carries information about an object in an ODB, providing information about the binary sha of the object, the type_string as well as the uncompressed size in bytes. @@ -29,7 +29,7 @@ class OInfo(tuple): assert dbi[1] == dbi.type assert dbi[2] == dbi.size - The type is designed to be as lighteight as possible.""" + The type is designed to be as lightweight as possible.""" __slots__ = tuple() def __new__(cls, sha, type, size): @@ -69,7 +69,7 @@ class OPackInfo(tuple): does not include a sha. Additionally, the pack_offset is the absolute offset into the packfile at which - all object information is located. The data_offset property points to the abosolute + all object information is located. The data_offset property points to the absolute location in the pack at which that actual data stream can be found.""" __slots__ = tuple() diff --git a/gitdb/exc.py b/gitdb/exc.py index 817ac7b62..947e5d8bf 100644 --- a/gitdb/exc.py +++ b/gitdb/exc.py @@ -7,7 +7,6 @@ class ODBError(Exception): - """All errors thrown by the object database""" @@ -44,5 +43,4 @@ class BadObjectType(ODBError): class UnsupportedOperation(ODBError): - """Thrown if the given operation cannot be supported by the object database""" diff --git a/gitdb/stream.py b/gitdb/stream.py index 826def387..aaf5820bf 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -62,7 +62,7 @@ class DecompressMemMapReader(LazyMixin): hence we try to find a good tradeoff between allocation time and number of times we actually allocate. An own zlib implementation would be good here to better support streamed reading - it would only need to keep the mmap - and decompress it into chunks, thats all ... """ + and decompress it into chunks, that's all ... """ __slots__ = ('_m', '_zip', '_buf', '_buflen', '_br', '_cws', '_cwe', '_s', '_close', '_cbr', '_phi') @@ -128,7 +128,7 @@ def new(self, m, close_on_deletion=False): This method parses the object header from m and returns the parsed type and size, as well as the created stream instance. - :param m: memory map on which to oparate. It must be object data ( header + contents ) + :param m: memory map on which to operate. It must be object data ( header + contents ) :param close_on_deletion: if True, the memory map will be closed once we are being deleted""" inst = DecompressMemMapReader(m, close_on_deletion, 0) @@ -175,7 +175,7 @@ def compressed_bytes_read(self): # Only scrub the stream forward if we are officially done with the # bytes we were to have. if self._br == self._s and not self._zip.unused_data: - # manipulate the bytes-read to allow our own read method to coninute + # manipulate the bytes-read to allow our own read method to continue # but keep the window at its current position self._br = 0 if hasattr(self._zip, 'status'): diff --git a/gitdb/util.py b/gitdb/util.py index 8f80156b2..242be4405 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -18,7 +18,7 @@ # initialize our global memory manager instance # Use it to free cached (and unused) resources. -if sys.version_info[1] < 6: +if sys.version_info < (2, 6): mman = StaticWindowMapManager() else: mman = SlidingWindowMapManager() From 5b0dc5f89a666f450f39ef0002cf6d1761ecfca8 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 12 Jan 2015 19:10:42 +0100 Subject: [PATCH 0304/2375] Adjusted stream logic to make it work on all tested platforms ... . As taken from https://github.com/gitpython-developers/gitdb/blob/master/gitdb/stream.py#L292 -> NOTE: Behavior changed in PY2.7 onward, which requires special handling to make the tests work properly. They are thorough, and I assume it is truly working. Why is this logic as convoluted as it is ? Please look at the table in https://github.com/gitpython-developers/gitdb/issues/19 to learn about the test-results. Bascially, on py2.6, you want to use branch 1, whereas on all other python version, the second branch will be the one that works. However, the zlib VERSIONs as well as the platform check is used to further match the entries in the table in the github issue. This is it ... it was the only way I could make this work everywhere. IT's CERTAINLY GOING TO BITE US IN THE FUTURE ... . <- Fixes #19 --- gitdb/fun.py | 2 +- gitdb/pack.py | 1 + gitdb/stream.py | 12 +++++++++--- setup.py | 1 + 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gitdb/fun.py b/gitdb/fun.py index 17da4e5da..ac9d99395 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -426,7 +426,7 @@ def pack_object_header_info(data): s = 4 # starting bit-shift size if PY3: while c & 0x80: - c = data[i] + c = byte_ord(data[i]) i += 1 size += (c & 0x7f) << s s += 7 diff --git a/gitdb/pack.py b/gitdb/pack.py index d2666d601..511e5571c 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -552,6 +552,7 @@ def _iter_objects(self, start_offset, as_stream=True): # the amount of compressed bytes we need to get to the next offset stream_copy(ostream.read, null.write, ostream.size, chunk_size) + assert ostream.stream._br == ostream.size cur_offset += (data_offset - ostream.pack_offset) + ostream.stream.compressed_bytes_read() # if a stream is requested, reset it beforehand diff --git a/gitdb/stream.py b/gitdb/stream.py index aaf5820bf..04dd79f90 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -289,11 +289,18 @@ def read(self, size=-1): # if we hit the end of the stream # NOTE: Behavior changed in PY2.7 onward, which requires special handling to make the tests work properly. # They are thorough, and I assume it is truly working. - if PY26: + # Why is this logic as convoluted as it is ? Please look at the table in + # https://github.com/gitpython-developers/gitdb/issues/19 to learn about the test-results. + # Bascially, on py2.6, you want to use branch 1, whereas on all other python version, the second branch + # will be the one that works. + # However, the zlib VERSIONs as well as the platform check is used to further match the entries in the + # table in the github issue. This is it ... it was the only way I could make this work everywhere. + # IT's CERTAINLY GOING TO BITE US IN THE FUTURE ... . + if PY26 or ((zlib.ZLIB_VERSION == '1.2.7' or zlib.ZLIB_VERSION == '1.2.5') and not sys.platform == 'darwin'): unused_datalen = len(self._zip.unconsumed_tail) else: unused_datalen = len(self._zip.unconsumed_tail) + len(self._zip.unused_data) - # end handle very special case ... + # # end handle very special case ... self._cbr += len(indata) - unused_datalen self._br += len(dcompdat) @@ -374,7 +381,6 @@ def _set_cache_too_slow_without_c(self, attr): # Aggregate all deltas into one delta in reverse order. Hence we take # the last delta, and reverse-merge its ancestor delta, until we receive # the final delta data stream. - # print "Handling %i delta streams, sizes: %s" % (len(self._dstreams), [ds.size for ds in self._dstreams]) dcl = connect_deltas(self._dstreams) # call len directly, as the (optional) c version doesn't implement the sequence diff --git a/setup.py b/setup.py index e634e37f2..be2f6e211 100755 --- a/setup.py +++ b/setup.py @@ -118,6 +118,7 @@ def get_data_files(self): "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", ],) From b3237e804ae313503f5479349f90066c356b1548 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 12 Jan 2015 20:38:38 +0100 Subject: [PATCH 0305/2375] Bumped version to 0.6.4 --- gitdb/__init__.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 2ba8725eb..6554cf904 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 6, 3) +version_info = (0, 6, 4) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index be2f6e211..e4b1b1db1 100755 --- a/setup.py +++ b/setup.py @@ -77,7 +77,7 @@ def get_data_files(self): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 6, 3) +version_info = (0, 6, 4) __version__ = '.'.join(str(i) for i in version_info) setup(cmdclass={'build_ext': build_ext_nofail}, From 9aae93ea584c8cf9d1539a60e41c5c37119401d6 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 22 Jan 2015 18:16:34 +0100 Subject: [PATCH 0306/2375] Added issuestats to readme file --- README.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.rst b/README.rst index 186218d1f..766d9d66a 100644 --- a/README.rst +++ b/README.rst @@ -49,6 +49,12 @@ DEVELOPMENT .. image:: https://coveralls.io/repos/gitpython-developers/gitdb/badge.png :target: https://coveralls.io/r/gitpython-developers/gitdb +.. image:: http://www.issuestats.com/github/gitpython-developers/gitdb/badge/pr + :target: http://www.issuestats.com/github/gitpython-developers/gitdb + +.. image:: http://www.issuestats.com/github/gitpython-developers/gitdb/badge/issue + :target: http://www.issuestats.com/github/gitpython-developers/gitdb + The library is considered mature, and not under active development. It's primary (known) use is in git-python. INFRASTRUCTURE From a8af40edd969d79f1059fef774f5c7d600571999 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 22 Jan 2015 18:18:18 +0100 Subject: [PATCH 0307/2375] Added issuestats badges to readme file --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e15c9bfc5..84b84afd6 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ Although memory maps have many advantages, they represent a very limited system [![Build Status](https://travis-ci.org/Byron/smmap.svg?branch=master)](https://travis-ci.org/Byron/smmap) [![Coverage Status](https://coveralls.io/repos/Byron/smmap/badge.png)](https://coveralls.io/r/Byron/smmap) +[![Issue Stats](http://www.issuestats.com/github/gitpython-developers/smmap/badge/pr)](http://www.issuestats.com/github/gitpython-developers/smmap) +[![Issue Stats](http://www.issuestats.com/github/gitpython-developers/smmap/badge/issue)](http://www.issuestats.com/github/gitpython-developers/smmap) Smmap wraps an interface around mmap and tracks the mapped files as well as the amount of clients who use it. If the system runs out of resources, or if a memory limit is reached, it will automatically unload unused maps to allow continued operation. From 5a3877a091d16a064a6ec07b1e41e536580831bb Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 22 Jan 2015 18:20:30 +0100 Subject: [PATCH 0308/2375] Fixed urls, they changed after moving the repo to gitpython-developers --- README.md | 8 ++++---- doc/source/intro.rst | 4 ++-- setup.py | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 84b84afd6..1c09ecb89 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,8 @@ Although memory maps have many advantages, they represent a very limited system ## Overview -[![Build Status](https://travis-ci.org/Byron/smmap.svg?branch=master)](https://travis-ci.org/Byron/smmap) -[![Coverage Status](https://coveralls.io/repos/Byron/smmap/badge.png)](https://coveralls.io/r/Byron/smmap) +[![Build Status](https://travis-ci.org/gitpython-developers/smmap.svg?branch=master)](https://travis-ci.org/gitpython-developers/smmap) +[![Coverage Status](https://coveralls.io/repos/gitpython-developers/smmap/badge.png)](https://coveralls.io/r/gitpython-developers/smmap) [![Issue Stats](http://www.issuestats.com/github/gitpython-developers/smmap/badge/pr)](http://www.issuestats.com/github/gitpython-developers/smmap) [![Issue Stats](http://www.issuestats.com/github/gitpython-developers/smmap/badge/issue)](http://www.issuestats.com/github/gitpython-developers/smmap) @@ -63,7 +63,7 @@ It is advised to have a look at the **Usage Guide** for a brief introduction on ## Homepage and Links -The project is home on github at https://github.com/Byron/smmap . +The project is home on github at https://github.com/gitpython-developers/smmap . The latest source can be cloned from github as well: @@ -77,7 +77,7 @@ For support, please use the git-python mailing list: Issues can be filed on github: -* https://github.com/Byron/smmap/issues +* https://github.com/gitpython-developers/smmap/issues ## License Information diff --git a/doc/source/intro.rst b/doc/source/intro.rst index ee3108a6a..15f5bf08a 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -51,7 +51,7 @@ It is advised to have a look at the :ref:`Usage Guide ` for a br ################## Homepage and Links ################## -The project is home on github at `https://github.com/Byron/smmap `_. +The project is home on github at `https://github.com/gitpython-developers/smmap `_. The latest source can be cloned from github as well: @@ -65,7 +65,7 @@ For support, please use the git-python mailing list: Issues can be filed on github: - * https://github.com/Byron/smmap/issues + * https://github.com/gitpython-developers/smmap/issues ################### License Information diff --git a/setup.py b/setup.py index c6afc8960..267dfc7a5 100755 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ if os.path.exists("README.md"): long_description = codecs.open('README.md', "r", "utf-8").read() else: - long_description = "See http://github.com/Byron/smmap" + long_description = "See http://github.com/gitpython-developers/smmap" setup( name="smmap", From 016b58f3a7638d59ee766433649253e2d53e18b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20M=2E=20Bravo?= Date: Tue, 7 Apr 2015 08:32:38 -0500 Subject: [PATCH 0309/2375] Duplicate `const` fixed Remove duplicate `const` to stop the warning: "duplicate 'const' declaration specifier" --- gitdb/_delta_apply.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gitdb/_delta_apply.c b/gitdb/_delta_apply.c index 8b0f8e064..f4fffdcce 100644 --- a/gitdb/_delta_apply.c +++ b/gitdb/_delta_apply.c @@ -413,7 +413,7 @@ uint DIV_info_rbound(const DeltaInfoVector* vec, const DeltaInfo* di) // return size of the given delta info item inline -uint DIV_info_size2(const DeltaInfoVector* vec, const DeltaInfo* di, const DeltaInfo const* veclast) +uint DIV_info_size2(const DeltaInfoVector* vec, const DeltaInfo* di, const DeltaInfo* const veclast) { if (veclast == di){ return vec->di_last_size; @@ -534,7 +534,7 @@ uint DIV_count_slice_bytes(const DeltaInfoVector* src, uint ofs, uint size) } } - const DeltaInfo const* vecend = DIV_end(src); + const DeltaInfo* const vecend = DIV_end(src); const uchar* nstream; for( ;cdi < vecend; ++cdi){ nstream = next_delta_info(src->dstream + cdi->dso, &dc); @@ -753,7 +753,7 @@ PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) PyObject* tmpargs = PyTuple_New(1); const uchar* data = TSI_first(&self->istream); - const uchar const* dend = TSI_end(&self->istream); + const uchar* const dend = TSI_end(&self->istream); DeltaChunk dc; DC_init(&dc, 0, 0, 0, NULL); @@ -979,8 +979,8 @@ PyObject* connect_deltas(PyObject *self, PyObject *dstreams) const uchar* data; Py_ssize_t dlen; PyObject_AsReadBuffer(db, (const void**)&data, &dlen); - const uchar const* dstart = data; - const uchar const* dend = data + dlen; + const uchar* const dstart = data; + const uchar* const dend = data + dlen; div.dstream = dstart; if (dlen > pow(2, 32)){ From 18e4aea23644ea43657cb2e6846b6aaf78720c27 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 8 May 2015 08:56:47 +0200 Subject: [PATCH 0310/2375] fix(tests): remove line failing on power-pc It's worth noting that I never reproduced the issue, nor have I seen a stack-trace. Thus the line is removed in good-faith, but should also not pose any problem considering it was very specific and only in a test-case. The main problem is that I don't understand anymore why that assertion should be true, and thus can't judge the correctness of this fix at all. Closes #25 --- smmap/test/test_util.py | 8 -------- smmap/util.py | 1 - 2 files changed, 9 deletions(-) diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 0a162607e..5a9d7bdf2 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -76,14 +76,6 @@ def test_region(self): assert rfull.includes_ofs(0) and rfull.includes_ofs(fc.size - 1) and rfull.includes_ofs(half_size) assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxsize) - # with the values we have, this test only works on windows where an alignment - # size of 4096 is assumed. - # We only test on linux as it is inconsitent between the python versions - # as they use different mapping techniques to circumvent the missing offset - # argument of mmap. - if sys.platform != 'win32': - assert rhalfofs.includes_ofs(rofs) and not rhalfofs.includes_ofs(0) - # END handle platforms # auto-refcount assert rfull.client_count() == 1 diff --git a/smmap/util.py b/smmap/util.py index 1d20e5040..36ff1ab89 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -1,7 +1,6 @@ """Module containing a memory memory manager which provides a sliding window on a number of memory mapped files""" import os import sys -import mmap from mmap import mmap, ACCESS_READ try: From 17413029b0f780ac94c24ab2b5f527ded6abdd2a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 22 Aug 2015 16:39:34 +0200 Subject: [PATCH 0311/2375] docs(gitdb): discourage usage of GitDB type --- gitdb/db/git.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gitdb/db/git.py b/gitdb/db/git.py index a4f6f54c3..7a43d7235 100644 --- a/gitdb/db/git.py +++ b/gitdb/db/git.py @@ -22,7 +22,11 @@ class GitDB(FileDBBase, ObjectDBW, CompoundDB): """A git-style object database, which contains all objects in the 'objects' - subdirectory""" + subdirectory + + ``IMPORTANT``: The usage of this implementation is highly discouraged as it fails to release file-handles. + This can be a problem with long-running processes and/or big repositories. + """ # Configuration PackDBCls = PackedDB LooseDBCls = LooseObjectDB From 2389b75280efb1a63e6ea578eae7f897fd4beb1b Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 4 Oct 2015 19:17:44 +0200 Subject: [PATCH 0312/2375] fix(loose): avoid unnecessary file rename on windows This should workaround possible permission issues. Related to https://github.com/gitpython-developers/GitPython/issues/353 --- gitdb/db/loose.py | 13 +++++++++---- gitdb/ext/smmap | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index 4732b56da..1355e1cee 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -226,10 +226,15 @@ def store(self, istream): mkdir(obj_dir) # END handle destination directory # rename onto existing doesn't work on windows - if os.name == 'nt' and isfile(obj_path): - remove(obj_path) - # END handle win322 - rename(tmp_path, obj_path) + if os.name == 'nt': + if isfile(obj_path): + remove(tmp_path) + else: + rename(tmp_path, obj_path) + # end rename only if needed + else: + rename(tmp_path, obj_path) + # END handle win32 # make sure its readable for all ! It started out as rw-- tmp file # but needs to be rwrr diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 84929ed81..18e4aea23 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 84929ed811142e366d6c5916125302c1419acad6 +Subproject commit 18e4aea23644ea43657cb2e6846b6aaf78720c27 From 7a8b138290ccf75da9ec5812dc7b55a40e8eeaeb Mon Sep 17 00:00:00 2001 From: Felix Yan Date: Thu, 15 Oct 2015 09:57:26 +0800 Subject: [PATCH 0313/2375] Add Python 3.5 to test with travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index b967f502e..464fafb2e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,7 @@ python: - 2.7 - 3.3 - 3.4 + - 3.5 install: - pip install coveralls script: From 50d073bd7cf769686efc63e42cb75512952b25ed Mon Sep 17 00:00:00 2001 From: Jesse Weigert Date: Tue, 27 Oct 2015 14:02:20 -0700 Subject: [PATCH 0314/2375] Fix package description --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 267dfc7a5..f6a04827d 100755 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ setup( name="smmap", version=smmap.__version__, - description="A pure git implementation of a sliding window memory map manager", + description="A pure python implementation of a sliding window memory map manager", author=smmap.__author__, author_email=smmap.__contact__, url=smmap.__homepage__, From 490fdc2f27ca91898f09defdf20e1237a5ac12aa Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 30 Nov 2015 08:50:56 +0100 Subject: [PATCH 0315/2375] fix(distribution): remove redundant self-reference --- requirements.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 8a4cd3979..ed4898ec2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1 @@ -gitdb -smmap>=0.8.3 \ No newline at end of file +smmap>=0.8.3 From d1996e04dbf4841b853b60c1365f0f5fd28d170c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 28 Mar 2016 09:10:31 +0200 Subject: [PATCH 0316/2375] Ignore MANIFEST.in Fixes #25 --- MANIFEST.in | 1 + 1 file changed, 1 insertion(+) diff --git a/MANIFEST.in b/MANIFEST.in index 597944fd4..b939b5ded 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -3,6 +3,7 @@ include LICENSE include CHANGES include AUTHORS include README +include MANIFEST.in include gitdb/_fun.c include gitdb/_delta_apply.c From 5ff376161a2f2875d3fc0eb1d9f25027e29460ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Wed, 27 Jul 2016 08:49:52 +0300 Subject: [PATCH 0317/2375] travis: Test with Python 3.5 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 8cab8225f..ba0beaa7b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ python: - "2.7" - "3.3" - "3.4" + - "3.5" # - "pypy" - won't work as smmap doesn't work (see smmap/.travis.yml for details) git: From cadb3d8a095c3e51cede1c33f7dcbf49c1426418 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Wed, 27 Jul 2016 08:53:11 +0300 Subject: [PATCH 0318/2375] setup: Add Python 3.5 classifier --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index e4b1b1db1..c2f9f1eb1 100755 --- a/setup.py +++ b/setup.py @@ -121,4 +121,5 @@ def get_data_files(self): "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", ],) From 2af455266cb3ea454c4f38b182825b9e78b8398d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Wed, 27 Jul 2016 09:32:29 +0300 Subject: [PATCH 0319/2375] Spelling fixes --- doc/source/algorithm.rst | 2 +- doc/source/changes.rst | 2 +- gitdb/db/base.py | 2 +- gitdb/db/loose.py | 2 +- gitdb/db/mem.py | 2 +- gitdb/pack.py | 4 ++-- gitdb/stream.py | 2 +- gitdb/test/db/test_loose.py | 2 +- gitdb/test/lib.py | 2 +- gitdb/test/test_pack.py | 2 +- gitdb/test/test_util.py | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/source/algorithm.rst b/doc/source/algorithm.rst index 4374cb820..2e01b3fbe 100644 --- a/doc/source/algorithm.rst +++ b/doc/source/algorithm.rst @@ -92,6 +92,6 @@ Future work Another very promising option is that streaming of delta data is indeed possible. Depending on the configuration of the copy-from-base operations, different optimizations could be applied to reduce the amount of memory required for the final processed delta stream. Some configurations may even allow it to stream data from the base buffer, instead of pre-loading it for random access. -The ability to stream files at reduced memory costs would only be feasible for big files, and would have to be payed with extra pre-processing time. +The ability to stream files at reduced memory costs would only be feasible for big files, and would have to be paid with extra pre-processing time. A very first and simple implementation could avoid memory peaks by streaming the TDS in conjunction with a base buffer, instead of writing everything into a fully allocated target buffer. diff --git a/doc/source/changes.rst b/doc/source/changes.rst index a36fd659c..22deb6db3 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -8,7 +8,7 @@ Changelog * Fixed possibly critical error, see https://github.com/gitpython-developers/GitPython/issues/220 - - However, it only seems to occour on high-entropy data and didn't reoccour after the fix + - However, it only seems to occur on high-entropy data and didn't reoccour after the fix ***** 0.6.0 diff --git a/gitdb/db/base.py b/gitdb/db/base.py index 2615b13cc..2d7b9fa8d 100644 --- a/gitdb/db/base.py +++ b/gitdb/db/base.py @@ -177,7 +177,7 @@ def _db_query(self, sha): """:return: database containing the given 20 byte sha :raise BadObject:""" # most databases use binary representations, prevent converting - # it everytime a database is being queried + # it every time a database is being queried try: return self._db_cache[sha] except KeyError: diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index 1355e1cee..192c524af 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -174,7 +174,7 @@ def has_object(self, sha): return True except BadObject: return False - # END check existance + # END check existence def store(self, istream): """note: The sha we produce will be hex by nature""" diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index 595dbf4fc..871133468 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -98,7 +98,7 @@ def stream_copy(self, sha_iter, odb): for sha in sha_iter: if odb.has_object(sha): continue - # END check object existance + # END check object existence ostream = self.stream(sha) # compressed data including header diff --git a/gitdb/pack.py b/gitdb/pack.py index 511e5571c..2447455b5 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -85,7 +85,7 @@ def pack_object_at(cursor, offset, as_stream): an object of the correct type according to the type_id of the object. If as_stream is True, the object will contain a stream, allowing the data to be read decompressed. - :param data: random accessable data containing all required information + :param data: random accessible data containing all required information :parma offset: offset in to the data at which the object information is located :param as_stream: if True, a stream object will be returned that can read the data, otherwise you receive an info object only""" @@ -447,7 +447,7 @@ def partial_sha_to_index(self, partial_bin_sha, canonical_length): :return: index as in `sha_to_index` or None if the sha was not found in this index file :param partial_bin_sha: an at least two bytes of a partial binary sha as bytes - :param canonical_length: lenght of the original hexadecimal representation of the + :param canonical_length: length of the original hexadecimal representation of the given partial binary sha :raise AmbiguousObjectName:""" if len(partial_bin_sha) < 2: diff --git a/gitdb/stream.py b/gitdb/stream.py index 04dd79f90..be95c113a 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -660,7 +660,7 @@ def __init__(self, fd): def write(self, data): """:raise IOError: If not all bytes could be written - :return: lenght of incoming data""" + :return: length of incoming data""" self.sha1.update(data) cdata = self.zip.compress(data) bytes_written = write(self.fd, cdata) diff --git a/gitdb/test/db/test_loose.py b/gitdb/test/db/test_loose.py index 024c194a2..9c25a0249 100644 --- a/gitdb/test/db/test_loose.py +++ b/gitdb/test/db/test_loose.py @@ -33,4 +33,4 @@ def test_basics(self, path): # END for each sha self.failUnlessRaises(BadObject, ldb.partial_to_complete_sha_hex, '0000') - # raises if no object could be foudn + # raises if no object could be found diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index a089eac6f..bbdd241cd 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -76,7 +76,7 @@ def wrapper(self, *args, **kwargs): def with_rw_directory(func): """Create a temporary directory which can be written to, remove it if the - test suceeds, but leave it otherwise to aid additional debugging""" + test succeeds, but leave it otherwise to aid additional debugging""" def wrapper(self): path = tempfile.mktemp(prefix=func.__name__) diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index ff1057237..a8b0b60a4 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -232,7 +232,7 @@ def rewind_streams(): # END verify files exist # END for each packpath, indexpath pair - # verify the packs throughly + # verify the packs thoroughly rewind_streams() entity = PackEntity.create(pack_objs, rw_dir) count = 0 diff --git a/gitdb/test/test_util.py b/gitdb/test/test_util.py index 1dee54461..5026f4e62 100644 --- a/gitdb/test/test_util.py +++ b/gitdb/test/test_util.py @@ -60,7 +60,7 @@ def test_lockedfd(self): self._cmp_contents(my_file, orig_data) assert not os.path.isfile(lockfilepath) - # additional call doesnt fail + # additional call doesn't fail lfd.commit() lfd.rollback() From f957c812ac3221773058ba2fa8cd38017537da8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Wed, 27 Jul 2016 09:34:09 +0300 Subject: [PATCH 0320/2375] Handle more file open/close with "with" --- gitdb/db/ref.py | 3 ++- gitdb/test/db/test_ref.py | 7 +++---- gitdb/test/test_pack.py | 5 ++--- gitdb/test/test_util.py | 10 +++------- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/gitdb/db/ref.py b/gitdb/db/ref.py index 83a9f611d..2e3db86db 100644 --- a/gitdb/db/ref.py +++ b/gitdb/db/ref.py @@ -41,7 +41,8 @@ def _update_dbs_from_ref_file(self): # try to get as many as possible, don't fail if some are unavailable ref_paths = list() try: - ref_paths = [l.strip() for l in open(self._ref_file, 'r').readlines()] + with open(self._ref_file, 'r') as f: + ref_paths = [l.strip() for l in f] except (OSError, IOError): pass # END handle alternates diff --git a/gitdb/test/db/test_ref.py b/gitdb/test/db/test_ref.py index 6bac245c1..20496985e 100644 --- a/gitdb/test/db/test_ref.py +++ b/gitdb/test/db/test_ref.py @@ -21,10 +21,9 @@ class TestReferenceDB(TestDBBase): def make_alt_file(self, alt_path, alt_list): """Create an alternates file which contains the given alternates. The list can be empty""" - alt_file = open(alt_path, "wb") - for alt in alt_list: - alt_file.write(alt.encode("utf-8") + "\n".encode("ascii")) - alt_file.close() + with open(alt_path, "wb") as alt_file: + for alt in alt_list: + alt_file.write(alt.encode("utf-8") + "\n".encode("ascii")) @with_rw_directory def test_writing(self, path): diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index ff1057237..8ecfcd91a 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -197,7 +197,6 @@ def rewind_streams(): obj.stream.seek(0) # END utility for ppath, ipath, num_obj in zip((pack_path, ) * 2, (index_path, None), (len(pack_objs), None)): - pfile = open(ppath, 'wb') iwrite = None if ipath: ifile = open(ipath, 'wb') @@ -210,8 +209,8 @@ def rewind_streams(): # END rewind streams iteration += 1 - pack_sha, index_sha = PackEntity.write_pack(pack_objs, pfile.write, iwrite, object_count=num_obj) - pfile.close() + with open(ppath, 'wb') as pfile: + pack_sha, index_sha = PackEntity.write_pack(pack_objs, pfile.write, iwrite, object_count=num_obj) assert os.path.getsize(ppath) > 100 # verify pack diff --git a/gitdb/test/test_util.py b/gitdb/test/test_util.py index 1dee54461..c2989203e 100644 --- a/gitdb/test/test_util.py +++ b/gitdb/test/test_util.py @@ -25,19 +25,15 @@ def test_basics(self): def _cmp_contents(self, file_path, data): # raise if data from file at file_path # does not match data string - fp = open(file_path, "rb") - try: + with open(file_path, "rb") as fp: assert fp.read() == data.encode("ascii") - finally: - fp.close() def test_lockedfd(self): my_file = tempfile.mktemp() orig_data = "hello" new_data = "world" - my_file_fp = open(my_file, "wb") - my_file_fp.write(orig_data.encode("ascii")) - my_file_fp.close() + with open(my_file, "wb") as my_file_fp: + my_file_fp.write(orig_data.encode("ascii")) try: lfd = LockedFD(my_file) From 36ed59a1bb44ecada33ce83049605fd7d70e7876 Mon Sep 17 00:00:00 2001 From: Thomas Grainger Date: Wed, 7 Sep 2016 14:59:29 +0100 Subject: [PATCH 0321/2375] Support universal wheels --- setup.cfg | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 setup.cfg diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 000000000..3c6e79cf3 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal=1 From fde2dde8e6fe39c8548acb0c919cf18adaf2806a Mon Sep 17 00:00:00 2001 From: Thomas Grainger Date: Mon, 12 Sep 2016 20:16:22 +0100 Subject: [PATCH 0322/2375] Do not support universal wheels because you need to build manylinux1/mac/windows wheels instead --- setup.cfg | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 setup.cfg diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 3c6e79cf3..000000000 --- a/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[bdist_wheel] -universal=1 From e835f555c2d78601228c73ef048826c1f108cec7 Mon Sep 17 00:00:00 2001 From: Kostis Anagnostopoulos Date: Sat, 1 Oct 2016 21:45:21 +0200 Subject: [PATCH 0323/2375] ci: Enable Appveyor. --- .appveyor.yml | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .appveyor.yml diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 000000000..2daadaa4d --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,49 @@ +# CI on Windows via appveyor +environment: + + matrix: + ## MINGW + # + - PYTHON: "C:\\Python27" + PYTHON_VERSION: "2.7" + - PYTHON: "C:\\Python34-x64" + PYTHON_VERSION: "3.4" + - PYTHON: "C:\\Python35-x64" + PYTHON_VERSION: "3.5" + - PYTHON: "C:\\Miniconda35-x64" + PYTHON_VERSION: "3.5" + IS_CONDA: "yes" + +install: + - set PATH=%PYTHON%;%PYTHON%\Scripts;%PATH% + + ## Print configuration for debugging. + # + - | + echo %PATH% + uname -a + where python pip pip2 pip3 pip34 + python --version + python -c "import struct; print(struct.calcsize('P') * 8)" + + - IF "%IS_CONDA%"=="yes" ( + conda info -a & + conda install --yes --quiet pip + ) + - pip install nose wheel coveralls + + ## For commits performed with the default user. + - | + git config --global user.email "travis@ci.com" + git config --global user.name "Travis Runner" + + - pip install -e . + +build: false + +test_script: + - IF "%PYTHON_VERSION%"=="3.5" ( + nosetests -v --with-coverage + ) ELSE ( + nosetests -v + ) From dfadc166beaf28ba216e03e3592649437397fadb Mon Sep 17 00:00:00 2001 From: Kostis Anagnostopoulos Date: Sat, 1 Oct 2016 22:23:46 +0200 Subject: [PATCH 0324/2375] Appveyor: Add badge. --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1c09ecb89..ef0b23601 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ Although memory maps have many advantages, they represent a very limited system ## Overview [![Build Status](https://travis-ci.org/gitpython-developers/smmap.svg?branch=master)](https://travis-ci.org/gitpython-developers/smmap) +[![Build status](https://ci.appveyor.com/api/projects/status/h8rl7thsr42oc0pf?svg=true&passingText=windows%20OK&failingText=windows%20failed)](https://ci.appveyor.com/project/Byron/smmap) [![Coverage Status](https://coveralls.io/repos/gitpython-developers/smmap/badge.png)](https://coveralls.io/r/gitpython-developers/smmap) [![Issue Stats](http://www.issuestats.com/github/gitpython-developers/smmap/badge/pr)](http://www.issuestats.com/github/gitpython-developers/smmap) [![Issue Stats](http://www.issuestats.com/github/gitpython-developers/smmap/badge/issue)](http://www.issuestats.com/github/gitpython-developers/smmap) @@ -44,15 +45,15 @@ The package was tested on all of the previously mentioned configurations. [![Documentation Status](https://readthedocs.org/projects/smmap/badge/?version=latest)](https://readthedocs.org/projects/smmap/?badge=latest) Its easiest to install smmap using the [pip](http://www.pip-installer.org/en/latest) program: - + ```bash $ pip install smmap ``` - + As the command will install smmap in your respective python distribution, you will most likely need root permissions to authorize the required changes. If you have downloaded the source archive, the package can be installed by running the `setup.py` script: - + ```bash $ python setup.py install ``` @@ -68,17 +69,17 @@ The project is home on github at https://github.com/gitpython-developers/smmap . The latest source can be cloned from github as well: * git://github.com/gitpython-developers/smmap.git - - + + For support, please use the git-python mailing list: * http://groups.google.com/group/git-python - + Issues can be filed on github: * https://github.com/gitpython-developers/smmap/issues - + ## License Information From be5d4267f6cc4272e3fbfa1fbd262e984c2077bf Mon Sep 17 00:00:00 2001 From: Kostis Anagnostopoulos Date: Sun, 2 Oct 2016 01:28:06 +0200 Subject: [PATCH 0325/2375] io: retrofit classes wih destructors into context-mans --- smmap/buf.py | 12 +- smmap/mman.py | 6 + smmap/test/lib.py | 13 +- smmap/test/test_buf.py | 202 +++++++++++------------ smmap/test/test_mman.py | 317 ++++++++++++++++++------------------ smmap/test/test_tutorial.py | 121 +++++++------- smmap/test/test_util.py | 48 +++--- 7 files changed, 368 insertions(+), 351 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index e6f24341d..438292b60 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -47,6 +47,12 @@ def __init__(self, cursor=None, offset=0, size=sys.maxsize, flags=0): def __del__(self): self.end_access() + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.end_access() + def __len__(self): return self._size @@ -83,7 +89,7 @@ def __getslice__(self, i, j): # in the previous iteration of this code pyvers = sys.version_info[:2] if (3, 0) <= pyvers <= (3, 3): - # Memory view cannot be joined below python 3.4 ... + # Memory view cannot be joined below python 3.4 ... out = bytes() while l: c.use_region(ofs, l) @@ -91,7 +97,7 @@ def __getslice__(self, i, j): d = c.buffer()[:l] ofs += len(d) l -= len(d) - # This is slower than the join ... but what can we do ... + # This is slower than the join ... but what can we do ... out += d del(d) # END while there are bytes to read @@ -104,7 +110,7 @@ def __getslice__(self, i, j): d = c.buffer()[:l] ofs += len(d) l -= len(d) - # Make sure we don't keep references, as c.use_region() might attempt to free resources, but + # Make sure we don't keep references, as c.use_region() might attempt to free resources, but # can't unless we use pure bytes if hasattr(d, 'tobytes'): d = d.tobytes() diff --git a/smmap/mman.py b/smmap/mman.py index 7180c75b3..af12ee98f 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -46,6 +46,12 @@ def __init__(self, manager=None, regions=None): def __del__(self): self._destroy() + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self._destroy() + def _destroy(self): """Destruction code to decrement counters""" self.unuse_region() diff --git a/smmap/test/lib.py b/smmap/test/lib.py index 93cb09a5e..f86c0c6f1 100644 --- a/smmap/test/lib.py +++ b/smmap/test/lib.py @@ -21,10 +21,9 @@ def __init__(self, size, prefix=''): self._path = tempfile.mktemp(prefix=prefix) self._size = size - fp = open(self._path, "wb") - fp.seek(size - 1) - fp.write(b'1') - fp.close() + with open(self._path, "wb") as fp: + fp.seek(size - 1) + fp.write(b'1') assert os.path.getsize(self.path) == size @@ -35,6 +34,12 @@ def __del__(self): pass # END exception handling + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.__del__() + @property def path(self): return self._path diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index 984b43254..3b6009e11 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -25,104 +25,104 @@ class TestBuf(TestBase): def test_basics(self): - fc = FileCreator(self.k_window_test_size, "buffer_test") - - # invalid paths fail upon construction - c = man_optimal.make_cursor(fc.path) - self.assertRaises(ValueError, SlidingWindowMapBuffer, type(c)()) # invalid cursor - self.assertRaises(ValueError, SlidingWindowMapBuffer, c, fc.size) # offset too large - - buf = SlidingWindowMapBuffer() # can create uninitailized buffers - assert buf.cursor() is None - - # can call end access any time - buf.end_access() - buf.end_access() - assert len(buf) == 0 - - # begin access can revive it, if the offset is suitable - offset = 100 - assert buf.begin_access(c, fc.size) == False - assert buf.begin_access(c, offset) == True - assert len(buf) == fc.size - offset - assert buf.cursor().is_valid() - - # empty begin access keeps it valid on the same path, but alters the offset - assert buf.begin_access() == True - assert len(buf) == fc.size - assert buf.cursor().is_valid() - - # simple access - with open(fc.path, 'rb') as fp: - data = fp.read() - assert data[offset] == buf[0] - assert data[offset:offset * 2] == buf[0:offset] - - # negative indices, partial slices - assert buf[-1] == buf[len(buf) - 1] - assert buf[-10:] == buf[len(buf) - 10:len(buf)] - - # end access makes its cursor invalid - buf.end_access() - assert not buf.cursor().is_valid() - assert buf.cursor().is_associated() # but it remains associated - - # an empty begin access fixes it up again - assert buf.begin_access() == True and buf.cursor().is_valid() - del(buf) # ends access automatically - del(c) - - assert man_optimal.num_file_handles() == 1 - - # PERFORMANCE - # blast away with random access and a full mapping - we don't want to - # exaggerate the manager's overhead, but measure the buffer overhead - # We do it once with an optimal setting, and with a worse manager which - # will produce small mappings only ! - max_num_accesses = 100 - fd = os.open(fc.path, os.O_RDONLY) - for item in (fc.path, fd): - for manager, man_id in ((man_optimal, 'optimal'), - (man_worst_case, 'worst case'), - (static_man, 'static optimal')): - buf = SlidingWindowMapBuffer(manager.make_cursor(item)) - assert manager.num_file_handles() == 1 - for access_mode in range(2): # single, multi - num_accesses_left = max_num_accesses - num_bytes = 0 - fsize = fc.size - - st = time() - buf.begin_access() - while num_accesses_left: - num_accesses_left -= 1 - if access_mode: # multi - ofs_start = randint(0, fsize) - ofs_end = randint(ofs_start, fsize) - d = buf[ofs_start:ofs_end] - assert len(d) == ofs_end - ofs_start - assert d == data[ofs_start:ofs_end] - num_bytes += len(d) - del d - else: - pos = randint(0, fsize) - assert buf[pos] == data[pos] - num_bytes += 1 - # END handle mode - # END handle num accesses - - buf.end_access() - assert manager.num_file_handles() - assert manager.collect() - assert manager.num_file_handles() == 0 - elapsed = max(time() - st, 0.001) # prevent zero division errors on windows - mb = float(1000 * 1000) - mode_str = (access_mode and "slice") or "single byte" - print("%s: Made %i random %s accesses to buffer created from %s reading a total of %f mb in %f s (%f mb/s)" - % (man_id, max_num_accesses, mode_str, type(item), num_bytes / mb, elapsed, (num_bytes / mb) / elapsed), - file=sys.stderr) - # END handle access mode - del buf - # END for each manager - # END for each input - os.close(fd) + with FileCreator(self.k_window_test_size, "buffer_test") as fc: + + # invalid paths fail upon construction + c = man_optimal.make_cursor(fc.path) + self.assertRaises(ValueError, SlidingWindowMapBuffer, type(c)()) # invalid cursor + self.assertRaises(ValueError, SlidingWindowMapBuffer, c, fc.size) # offset too large + + buf = SlidingWindowMapBuffer() # can create uninitailized buffers + assert buf.cursor() is None + + # can call end access any time + buf.end_access() + buf.end_access() + assert len(buf) == 0 + + # begin access can revive it, if the offset is suitable + offset = 100 + assert buf.begin_access(c, fc.size) == False + assert buf.begin_access(c, offset) == True + assert len(buf) == fc.size - offset + assert buf.cursor().is_valid() + + # empty begin access keeps it valid on the same path, but alters the offset + assert buf.begin_access() == True + assert len(buf) == fc.size + assert buf.cursor().is_valid() + + # simple access + with open(fc.path, 'rb') as fp: + data = fp.read() + assert data[offset] == buf[0] + assert data[offset:offset * 2] == buf[0:offset] + + # negative indices, partial slices + assert buf[-1] == buf[len(buf) - 1] + assert buf[-10:] == buf[len(buf) - 10:len(buf)] + + # end access makes its cursor invalid + buf.end_access() + assert not buf.cursor().is_valid() + assert buf.cursor().is_associated() # but it remains associated + + # an empty begin access fixes it up again + assert buf.begin_access() == True and buf.cursor().is_valid() + del(buf) # ends access automatically + del(c) + + assert man_optimal.num_file_handles() == 1 + + # PERFORMANCE + # blast away with random access and a full mapping - we don't want to + # exaggerate the manager's overhead, but measure the buffer overhead + # We do it once with an optimal setting, and with a worse manager which + # will produce small mappings only ! + max_num_accesses = 100 + fd = os.open(fc.path, os.O_RDONLY) + for item in (fc.path, fd): + for manager, man_id in ((man_optimal, 'optimal'), + (man_worst_case, 'worst case'), + (static_man, 'static optimal')): + buf = SlidingWindowMapBuffer(manager.make_cursor(item)) + assert manager.num_file_handles() == 1 + for access_mode in range(2): # single, multi + num_accesses_left = max_num_accesses + num_bytes = 0 + fsize = fc.size + + st = time() + buf.begin_access() + while num_accesses_left: + num_accesses_left -= 1 + if access_mode: # multi + ofs_start = randint(0, fsize) + ofs_end = randint(ofs_start, fsize) + d = buf[ofs_start:ofs_end] + assert len(d) == ofs_end - ofs_start + assert d == data[ofs_start:ofs_end] + num_bytes += len(d) + del d + else: + pos = randint(0, fsize) + assert buf[pos] == data[pos] + num_bytes += 1 + # END handle mode + # END handle num accesses + + buf.end_access() + assert manager.num_file_handles() + assert manager.collect() + assert manager.num_file_handles() == 0 + elapsed = max(time() - st, 0.001) # prevent zero division errors on windows + mb = float(1000 * 1000) + mode_str = (access_mode and "slice") or "single byte" + print("%s: Made %i random %s accesses to buffer created from %s reading a total of %f mb in %f s (%f mb/s)" + % (man_id, max_num_accesses, mode_str, type(item), num_bytes / mb, elapsed, (num_bytes / mb) / elapsed), + file=sys.stderr) + # END handle access mode + del buf + # END for each manager + # END for each input + os.close(fd) diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index c8b9c703e..96bc355b7 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -19,19 +19,18 @@ class TestMMan(TestBase): def test_cursor(self): - fc = FileCreator(self.k_window_test_size, "cursor_test") - - man = SlidingWindowMapManager() - ci = WindowCursor(man) # invalid cursor - assert not ci.is_valid() - assert not ci.is_associated() - assert ci.size() == 0 # this is cached, so we can query it in invalid state - - cv = man.make_cursor(fc.path) - assert not cv.is_valid() # no region mapped yet - assert cv.is_associated() # but it know where to map it from - assert cv.file_size() == fc.size - assert cv.path() == fc.path + with FileCreator(self.k_window_test_size, "cursor_test") as fc: + man = SlidingWindowMapManager() + ci = WindowCursor(man) # invalid cursor + assert not ci.is_valid() + assert not ci.is_associated() + assert ci.size() == 0 # this is cached, so we can query it in invalid state + + cv = man.make_cursor(fc.path) + assert not cv.is_valid() # no region mapped yet + assert cv.is_associated() # but it know where to map it from + assert cv.file_size() == fc.size + assert cv.path() == fc.path # copy module cio = copy(cv) @@ -74,150 +73,154 @@ def test_memory_manager(self): assert man._collect_lru_region(sys.maxsize) == 0 # use a region, verify most basic functionality - fc = FileCreator(self.k_window_test_size, "manager_test") - fd = os.open(fc.path, os.O_RDONLY) - for item in (fc.path, fd): - c = man.make_cursor(item) - assert c.path_or_fd() is item - assert c.use_region(10, 10).is_valid() - assert c.ofs_begin() == 10 - assert c.size() == 10 - with open(fc.path, 'rb') as fp: - assert c.buffer()[:] == fp.read(20)[10:] - - if isinstance(item, int): - self.assertRaises(ValueError, c.path) - else: - self.assertRaises(ValueError, c.fd) - # END handle value error - # END for each input - os.close(fd) - # END for each manager type + with FileCreator(self.k_window_test_size, "manager_test") as fc: + fd = os.open(fc.path, os.O_RDONLY) + try: + for item in (fc.path, fd): + c = man.make_cursor(item) + assert c.path_or_fd() is item + assert c.use_region(10, 10).is_valid() + assert c.ofs_begin() == 10 + assert c.size() == 10 + with open(fc.path, 'rb') as fp: + assert c.buffer()[:] == fp.read(20)[10:] + + if isinstance(item, int): + self.assertRaises(ValueError, c.path) + else: + self.assertRaises(ValueError, c.fd) + # END handle value error + # END for each input + finally: + os.close(fd) + # END for each manasger type def test_memman_operation(self): # test more access, force it to actually unmap regions - fc = FileCreator(self.k_window_test_size, "manager_operation_test") - with open(fc.path, 'rb') as fp: - data = fp.read() - fd = os.open(fc.path, os.O_RDONLY) - max_num_handles = 15 - # small_size = - for mtype, args in ((StaticWindowMapManager, (0, fc.size // 3, max_num_handles)), - (SlidingWindowMapManager, (fc.size // 100, fc.size // 3, max_num_handles)),): - for item in (fc.path, fd): - assert len(data) == fc.size - - # small windows, a reasonable max memory. Not too many regions at once - man = mtype(window_size=args[0], max_memory_size=args[1], max_open_handles=args[2]) - c = man.make_cursor(item) - - # still empty (more about that is tested in test_memory_manager() - assert man.num_open_files() == 0 - assert man.mapped_memory_size() == 0 - - base_offset = 5000 - # window size is 0 for static managers, hence size will be 0. We take that into consideration - size = man.window_size() // 2 - assert c.use_region(base_offset, size).is_valid() - rr = c.region() - assert rr.client_count() == 2 # the manager and the cursor and us - - assert man.num_open_files() == 1 - assert man.num_file_handles() == 1 - assert man.mapped_memory_size() == rr.size() - - # assert c.size() == size # the cursor may overallocate in its static version - assert c.ofs_begin() == base_offset - assert rr.ofs_begin() == 0 # it was aligned and expanded - if man.window_size(): - # but isn't larger than the max window (aligned) - assert rr.size() == align_to_mmap(man.window_size(), True) - else: - assert rr.size() == fc.size - # END ignore static managers which dont use windows and are aligned to file boundaries - - assert c.buffer()[:] == data[base_offset:base_offset + (size or c.size())] - - # obtain second window, which spans the first part of the file - it is a still the same window - nsize = (size or fc.size) - 10 - assert c.use_region(0, nsize).is_valid() - assert c.region() == rr - assert man.num_file_handles() == 1 - assert c.size() == nsize - assert c.ofs_begin() == 0 - assert c.buffer()[:] == data[:nsize] - - # map some part at the end, our requested size cannot be kept - overshoot = 4000 - base_offset = fc.size - (size or c.size()) + overshoot - assert c.use_region(base_offset, size).is_valid() - if man.window_size(): - assert man.num_file_handles() == 2 - assert c.size() < size - assert c.region() is not rr # old region is still available, but has not curser ref anymore - assert rr.client_count() == 1 # only held by manager - else: - assert c.size() < fc.size - # END ignore static managers which only have one handle per file - rr = c.region() - assert rr.client_count() == 2 # manager + cursor - assert rr.ofs_begin() < c.ofs_begin() # it should have extended itself to the left - assert rr.ofs_end() <= fc.size # it cannot be larger than the file - assert c.buffer()[:] == data[base_offset:base_offset + (size or c.size())] - - # unising a region makes the cursor invalid - c.unuse_region() - assert not c.is_valid() - if man.window_size(): - # but doesn't change anything regarding the handle count - we cache it and only - # remove mapped regions if we have to - assert man.num_file_handles() == 2 - # END ignore this for static managers - - # iterate through the windows, verify data contents - # this will trigger map collection after a while - max_random_accesses = 5000 - num_random_accesses = max_random_accesses - memory_read = 0 - st = time() - - # cache everything to get some more performance - includes_ofs = c.includes_ofs - max_mapped_memory_size = man.max_mapped_memory_size() - max_file_handles = man.max_file_handles() - mapped_memory_size = man.mapped_memory_size - num_file_handles = man.num_file_handles - while num_random_accesses: - num_random_accesses -= 1 - base_offset = randint(0, fc.size - 1) - - # precondition - if man.window_size(): - assert max_mapped_memory_size >= mapped_memory_size() - # END statics will overshoot, which is fine - assert max_file_handles >= num_file_handles() - assert c.use_region(base_offset, (size or c.size())).is_valid() - csize = c.size() - assert c.buffer()[:] == data[base_offset:base_offset + csize] - memory_read += csize - - assert includes_ofs(base_offset) - assert includes_ofs(base_offset + csize - 1) - assert not includes_ofs(base_offset + csize) - # END while we should do an access - elapsed = max(time() - st, 0.001) # prevent zero divison errors on windows - mb = float(1000 * 1000) - print("%s: Read %i mb of memory with %i random on cursor initialized with %s accesses in %fs (%f mb/s)\n" - % (mtype, memory_read / mb, max_random_accesses, type(item), elapsed, (memory_read / mb) / elapsed), - file=sys.stderr) - - # an offset as large as the size doesn't work ! - assert not c.use_region(fc.size, size).is_valid() - - # collection - it should be able to collect all - assert man.num_file_handles() - assert man.collect() - assert man.num_file_handles() == 0 - # END for each item - # END for each manager type - os.close(fd) + with FileCreator(self.k_window_test_size, "manager_operation_test") as fc: + with open(fc.path, 'rb') as fp: + data = fp.read() + fd = os.open(fc.path, os.O_RDONLY) + try: + max_num_handles = 15 + # small_size = + for mtype, args in ((StaticWindowMapManager, (0, fc.size // 3, max_num_handles)), + (SlidingWindowMapManager, (fc.size // 100, fc.size // 3, max_num_handles)),): + for item in (fc.path, fd): + assert len(data) == fc.size + + # small windows, a reasonable max memory. Not too many regions at once + man = mtype(window_size=args[0], max_memory_size=args[1], max_open_handles=args[2]) + c = man.make_cursor(item) + + # still empty (more about that is tested in test_memory_manager() + assert man.num_open_files() == 0 + assert man.mapped_memory_size() == 0 + + base_offset = 5000 + # window size is 0 for static managers, hence size will be 0. We take that into consideration + size = man.window_size() // 2 + assert c.use_region(base_offset, size).is_valid() + rr = c.region() + assert rr.client_count() == 2 # the manager and the cursor and us + + assert man.num_open_files() == 1 + assert man.num_file_handles() == 1 + assert man.mapped_memory_size() == rr.size() + + # assert c.size() == size # the cursor may overallocate in its static version + assert c.ofs_begin() == base_offset + assert rr.ofs_begin() == 0 # it was aligned and expanded + if man.window_size(): + # but isn't larger than the max window (aligned) + assert rr.size() == align_to_mmap(man.window_size(), True) + else: + assert rr.size() == fc.size + # END ignore static managers which dont use windows and are aligned to file boundaries + + assert c.buffer()[:] == data[base_offset:base_offset + (size or c.size())] + + # obtain second window, which spans the first part of the file - it is a still the same window + nsize = (size or fc.size) - 10 + assert c.use_region(0, nsize).is_valid() + assert c.region() == rr + assert man.num_file_handles() == 1 + assert c.size() == nsize + assert c.ofs_begin() == 0 + assert c.buffer()[:] == data[:nsize] + + # map some part at the end, our requested size cannot be kept + overshoot = 4000 + base_offset = fc.size - (size or c.size()) + overshoot + assert c.use_region(base_offset, size).is_valid() + if man.window_size(): + assert man.num_file_handles() == 2 + assert c.size() < size + assert c.region() is not rr # old region is still available, but has not curser ref anymore + assert rr.client_count() == 1 # only held by manager + else: + assert c.size() < fc.size + # END ignore static managers which only have one handle per file + rr = c.region() + assert rr.client_count() == 2 # manager + cursor + assert rr.ofs_begin() < c.ofs_begin() # it should have extended itself to the left + assert rr.ofs_end() <= fc.size # it cannot be larger than the file + assert c.buffer()[:] == data[base_offset:base_offset + (size or c.size())] + + # unising a region makes the cursor invalid + c.unuse_region() + assert not c.is_valid() + if man.window_size(): + # but doesn't change anything regarding the handle count - we cache it and only + # remove mapped regions if we have to + assert man.num_file_handles() == 2 + # END ignore this for static managers + + # iterate through the windows, verify data contents + # this will trigger map collection after a while + max_random_accesses = 5000 + num_random_accesses = max_random_accesses + memory_read = 0 + st = time() + + # cache everything to get some more performance + includes_ofs = c.includes_ofs + max_mapped_memory_size = man.max_mapped_memory_size() + max_file_handles = man.max_file_handles() + mapped_memory_size = man.mapped_memory_size + num_file_handles = man.num_file_handles + while num_random_accesses: + num_random_accesses -= 1 + base_offset = randint(0, fc.size - 1) + + # precondition + if man.window_size(): + assert max_mapped_memory_size >= mapped_memory_size() + # END statics will overshoot, which is fine + assert max_file_handles >= num_file_handles() + assert c.use_region(base_offset, (size or c.size())).is_valid() + csize = c.size() + assert c.buffer()[:] == data[base_offset:base_offset + csize] + memory_read += csize + + assert includes_ofs(base_offset) + assert includes_ofs(base_offset + csize - 1) + assert not includes_ofs(base_offset + csize) + # END while we should do an access + elapsed = max(time() - st, 0.001) # prevent zero divison errors on windows + mb = float(1000 * 1000) + print("%s: Read %i mb of memory with %i random on cursor initialized with %s accesses in %fs (%f mb/s)\n" + % (mtype, memory_read / mb, max_random_accesses, type(item), elapsed, (memory_read / mb) / elapsed), + file=sys.stderr) + + # an offset as large as the size doesn't work ! + assert not c.use_region(fc.size, size).is_valid() + + # collection - it should be able to collect all + assert man.num_file_handles() + assert man.collect() + assert man.num_file_handles() == 0 + # END for each item + # END for each manager type + finally: + os.close(fd) diff --git a/smmap/test/test_tutorial.py b/smmap/test/test_tutorial.py index f7a2128a9..b03db9be2 100644 --- a/smmap/test/test_tutorial.py +++ b/smmap/test/test_tutorial.py @@ -20,65 +20,62 @@ def test_example(self): # Cursors ########## import smmap.test.lib - fc = smmap.test.lib.FileCreator(1024 * 1024 * 8, "test_file") - - # obtain a cursor to access some file. - c = mman.make_cursor(fc.path) - - # the cursor is now associated with the file, but not yet usable - assert c.is_associated() - assert not c.is_valid() - - # before you can use the cursor, you have to specify a window you want to - # access. The following just says you want as much data as possible starting - # from offset 0. - # To be sure your region could be mapped, query for validity - assert c.use_region().is_valid() # use_region returns self - - # once a region was mapped, you must query its dimension regularly - # to assure you don't try to access its buffer out of its bounds - assert c.size() - c.buffer()[0] # first byte - c.buffer()[1:10] # first 9 bytes - c.buffer()[c.size() - 1] # last byte - - # its recommended not to create big slices when feeding the buffer - # into consumers (e.g. struct or zlib). - # Instead, either give the buffer directly, or use pythons buffer command. - from smmap.util import buffer - buffer(c.buffer(), 1, 9) # first 9 bytes without copying them - - # you can query absolute offsets, and check whether an offset is included - # in the cursor's data. - assert c.ofs_begin() < c.ofs_end() - assert c.includes_ofs(100) - - # If you are over out of bounds with one of your region requests, the - # cursor will be come invalid. It cannot be used in that state - assert not c.use_region(fc.size, 100).is_valid() - # map as much as possible after skipping the first 100 bytes - assert c.use_region(100).is_valid() - - # You can explicitly free cursor resources by unusing the cursor's region - c.unuse_region() - assert not c.is_valid() - - # Buffers - ######### - # Create a default buffer which can operate on the whole file - buf = smmap.SlidingWindowMapBuffer(mman.make_cursor(fc.path)) - - # you can use it right away - assert buf.cursor().is_valid() - - buf[0] # access the first byte - buf[-1] # access the last ten bytes on the file - buf[-10:] # access the last ten bytes - - # If you want to keep the instance between different accesses, use the - # dedicated methods - buf.end_access() - assert not buf.cursor().is_valid() # you cannot use the buffer anymore - assert buf.begin_access(offset=10) # start using the buffer at an offset - - # it will stop using resources automatically once it goes out of scope + with smmap.test.lib.FileCreator(1024 * 1024 * 8, "test_file") as fc: + # obtain a cursor to access some file. + c = mman.make_cursor(fc.path) + + # the cursor is now associated with the file, but not yet usable + assert c.is_associated() + assert not c.is_valid() + + # before you can use the cursor, you have to specify a window you want to + # access. The following just says you want as much data as possible starting + # from offset 0. + # To be sure your region could be mapped, query for validity + assert c.use_region().is_valid() # use_region returns self + + # once a region was mapped, you must query its dimension regularly + # to assure you don't try to access its buffer out of its bounds + assert c.size() + c.buffer()[0] # first byte + c.buffer()[1:10] # first 9 bytes + c.buffer()[c.size() - 1] # last byte + + # its recommended not to create big slices when feeding the buffer + # into consumers (e.g. struct or zlib). + # Instead, either give the buffer directly, or use pythons buffer command. + from smmap.util import buffer + buffer(c.buffer(), 1, 9) # first 9 bytes without copying them + + # you can query absolute offsets, and check whether an offset is included + # in the cursor's data. + assert c.ofs_begin() < c.ofs_end() + assert c.includes_ofs(100) + + # If you are over out of bounds with one of your region requests, the + # cursor will be come invalid. It cannot be used in that state + assert not c.use_region(fc.size, 100).is_valid() + # map as much as possible after skipping the first 100 bytes + assert c.use_region(100).is_valid() + + # You can explicitly free cursor resources by unusing the cursor's region + c.unuse_region() + assert not c.is_valid() + + # Buffers + ######### + # Create a default buffer which can operate on the whole file + buf = smmap.SlidingWindowMapBuffer(mman.make_cursor(fc.path)) + + # you can use it right away + assert buf.cursor().is_valid() + + buf[0] # access the first byte + buf[-1] # access the last ten bytes on the file + buf[-10:] # access the last ten bytes + + # If you want to keep the instance between different accesses, use the + # dedicated methods + buf.end_access() + assert not buf.cursor().is_valid() # you cannot use the buffer anymore + assert buf.begin_access(offset=10) # start using the buffer at an offset diff --git a/smmap/test/test_util.py b/smmap/test/test_util.py index 5a9d7bdf2..e6ac10f35 100644 --- a/smmap/test/test_util.py +++ b/smmap/test/test_util.py @@ -60,22 +60,22 @@ def test_window(self): assert wc.ofs == 0 and wc.size == align_to_mmap(wc.size, True) def test_region(self): - fc = FileCreator(self.k_window_test_size, "window_test") - half_size = fc.size // 2 - rofs = align_to_mmap(4200, False) - rfull = MapRegion(fc.path, 0, fc.size) - rhalfofs = MapRegion(fc.path, rofs, fc.size) - rhalfsize = MapRegion(fc.path, 0, half_size) + with FileCreator(self.k_window_test_size, "window_test") as fc: + half_size = fc.size // 2 + rofs = align_to_mmap(4200, False) + rfull = MapRegion(fc.path, 0, fc.size) + rhalfofs = MapRegion(fc.path, rofs, fc.size) + rhalfsize = MapRegion(fc.path, 0, half_size) - # offsets - assert rfull.ofs_begin() == 0 and rfull.size() == fc.size - assert rfull.ofs_end() == fc.size # if this method works, it works always + # offsets + assert rfull.ofs_begin() == 0 and rfull.size() == fc.size + assert rfull.ofs_end() == fc.size # if this method works, it works always - assert rhalfofs.ofs_begin() == rofs and rhalfofs.size() == fc.size - rofs - assert rhalfsize.ofs_begin() == 0 and rhalfsize.size() == half_size + assert rhalfofs.ofs_begin() == rofs and rhalfofs.size() == fc.size - rofs + assert rhalfsize.ofs_begin() == 0 and rhalfsize.size() == half_size - assert rfull.includes_ofs(0) and rfull.includes_ofs(fc.size - 1) and rfull.includes_ofs(half_size) - assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxsize) + assert rfull.includes_ofs(0) and rfull.includes_ofs(fc.size - 1) and rfull.includes_ofs(half_size) + assert not rfull.includes_ofs(-1) and not rfull.includes_ofs(sys.maxsize) # auto-refcount assert rfull.client_count() == 1 @@ -87,17 +87,17 @@ def test_region(self): assert w.ofs == rfull.ofs_begin() and w.ofs_end() == rfull.ofs_end() def test_region_list(self): - fc = FileCreator(100, "sample_file") - - fd = os.open(fc.path, os.O_RDONLY) - for item in (fc.path, fd): - ml = MapRegionList(item) - - assert len(ml) == 0 - assert ml.path_or_fd() == item - assert ml.file_size() == fc.size - # END handle input - os.close(fd) + with FileCreator(100, "sample_file") as fc: + fd = os.open(fc.path, os.O_RDONLY) + try: + for item in (fc.path, fd): + ml = MapRegionList(item) + + assert len(ml) == 0 + assert ml.path_or_fd() == item + assert ml.file_size() == fc.size + finally: + os.close(fd) def test_util(self): assert isinstance(is_64_bit(), bool) # just call it From 62815b5c5a4c39e9ace3d20ec0c593011201dbcf Mon Sep 17 00:00:00 2001 From: Thomas Grainger Date: Tue, 4 Oct 2016 18:04:24 +0100 Subject: [PATCH 0326/2375] support optional gitdb_speedups --- README.rst | 7 + gitdb/_delta_apply.c | 1154 ------------------------------------------ gitdb/_delta_apply.h | 6 - gitdb/_fun.c | 107 ---- gitdb/fun.py | 2 +- gitdb/pack.py | 2 +- gitdb/stream.py | 2 +- setup.cfg | 2 + setup.py | 154 ++---- 9 files changed, 49 insertions(+), 1387 deletions(-) delete mode 100644 gitdb/_delta_apply.c delete mode 100644 gitdb/_delta_apply.h delete mode 100644 gitdb/_fun.c create mode 100644 setup.cfg diff --git a/README.rst b/README.rst index 766d9d66a..1b754d09b 100644 --- a/README.rst +++ b/README.rst @@ -20,6 +20,13 @@ From `PyPI `_ pip install gitdb +SPEEDUPS +======== + +If you want to go up to 20% faster, you can install gitdb-speedups with: + + pip install gitdb-speedups + REQUIREMENTS ============ diff --git a/gitdb/_delta_apply.c b/gitdb/_delta_apply.c deleted file mode 100644 index f4fffdcce..000000000 --- a/gitdb/_delta_apply.c +++ /dev/null @@ -1,1154 +0,0 @@ -#include <_delta_apply.h> -#include -#include -#include -#include -#include - - - -typedef unsigned long long ull; -typedef unsigned int uint; -typedef unsigned char uchar; -typedef unsigned short ushort; -typedef uchar bool; - -// Constants -const ull gDIV_grow_by = 100; - - - -// DELTA STREAM ACCESS -/////////////////////// -inline -ull msb_size(const uchar** datap, const uchar* top) -{ - const uchar *data = *datap; - ull cmd, size = 0; - uint i = 0; - do { - cmd = *data++; - size |= (cmd & 0x7f) << i; - i += 7; - } while (cmd & 0x80 && data < top); - *datap = data; - return size; -} - - -// TOP LEVEL STREAM INFO -///////////////////////////// -typedef struct { - const uchar *tds; // Toplevel delta stream - const uchar *cstart; // start of the chunks - Py_ssize_t tdslen; // size of tds in bytes - Py_ssize_t target_size; // size of the target buffer which can hold all data - uint num_chunks; // amount of chunks in the delta stream - PyObject *parent_object; -} ToplevelStreamInfo; - - -void TSI_init(ToplevelStreamInfo* info) -{ - info->tds = NULL; - info->cstart = NULL; - info->tdslen = 0; - info->num_chunks = 0; - info->target_size = 0; - info->parent_object = 0; -} - -void TSI_destroy(ToplevelStreamInfo* info) -{ -#ifdef DEBUG - fprintf(stderr, "TSI_destroy: %p\n", info); -#endif - - if (info->parent_object){ - Py_DECREF(info->parent_object); - info->parent_object = NULL; - } else if (info->tds){ - PyMem_Free((void*)info->tds); - } - info->tds = NULL; - info->cstart = NULL; - info->tdslen = 0; - info->num_chunks = 0; -} - -inline -const uchar* TSI_end(ToplevelStreamInfo* info) -{ - return info->tds + info->tdslen; -} - -inline -const uchar* TSI_first(ToplevelStreamInfo* info) -{ - return info->cstart; -} - -// set the stream, and initialize it -// initialize our set stream to point to the first chunk -// Fill in the header information, which is the base and target size -inline -void TSI_set_stream(ToplevelStreamInfo* info, const uchar* stream) -{ - info->tds = stream; - info->cstart = stream; - - assert(info->tds && info->tdslen); - - // init stream - const uchar* tdsend = TSI_end(info); - msb_size(&info->cstart, tdsend); // base size - info->target_size = msb_size(&info->cstart, tdsend); -} - - - -// duplicate the data currently owned by the parent object drop its refcount -// return 1 on success -bool TSI_copy_stream_from_object(ToplevelStreamInfo* info) -{ - assert(info->parent_object); - - uchar* ptmp = PyMem_Malloc(info->tdslen); - if (!ptmp){ - return 0; - } - uint ofs = (uint)(info->cstart - info->tds); - memcpy((void*)ptmp, info->tds, info->tdslen); - - info->tds = ptmp; - info->cstart = ptmp + ofs; - - Py_DECREF(info->parent_object); - info->parent_object = 0; - - return 1; -} - -// Transfer ownership of the given stream into our instance. The amount of chunks -// remains the same, and needs to be set by the caller -void TSI_replace_stream(ToplevelStreamInfo* info, const uchar* stream, uint streamlen) -{ - assert(info->parent_object == 0); - - uint ofs = (uint)(info->cstart - info->tds); - if (info->tds){ - PyMem_Free((void*)info->tds); - } - info->tds = stream; - info->cstart = info->tds + ofs; - info->tdslen = streamlen; - -} - -// DELTA CHUNK -//////////////// -// Internal Delta Chunk Objects -// They are just used to keep information parsed from a stream -// The data pointer is always shared -typedef struct { - ull to; - uint ts; - uint so; - const uchar* data; -} DeltaChunk; - -// forward declarations -const uchar* next_delta_info(const uchar*, DeltaChunk*); - -inline -void DC_init(DeltaChunk* dc, ull to, ull ts, ull so, const uchar* data) -{ - dc->to = to; - dc->ts = ts; - dc->so = so; - dc->data = NULL; -} - - -inline -ull DC_rbound(const DeltaChunk* dc) -{ - return dc->to + dc->ts; -} - -inline -void DC_print(const DeltaChunk* dc, const char* prefix) -{ - fprintf(stderr, "%s-dc: to = %i, ts = %i, so = %i, data = %p\n", prefix, (int)dc->to, dc->ts, dc->so, dc->data); -} - -// Apply -inline -void DC_apply(const DeltaChunk* dc, const uchar* base, PyObject* writer, PyObject* tmpargs) -{ - PyObject* buffer = 0; - if (dc->data){ - buffer = PyBuffer_FromMemory((void*)dc->data, dc->ts); - } else { - buffer = PyBuffer_FromMemory((void*)(base + dc->so), dc->ts); - } - - if (PyTuple_SetItem(tmpargs, 0, buffer)){ - assert(0); - } - - - // tuple steals reference, and will take care about the deallocation - PyObject_Call(writer, tmpargs, NULL); - -} - -// Encode the information in the given delta chunk and write the byte-stream -// into the given output stream -// It will be copied into the given bounds, the given size must be the final size -// and work with the given relative offset - hence the bounds are assumed to be -// correct and to fit within the unaltered dc -inline -void DC_encode_to(const DeltaChunk* dc, uchar** pout, uint ofs, uint size) -{ - uchar* out = *pout; - if (dc->data){ - *out++ = (uchar)size; - memcpy(out, dc->data+ofs, size); - out += size; - } else { - uchar i = 0x80; - uchar* op = out++; - uint moff = dc->so+ofs; - - if (moff & 0x000000ff) - *out++ = moff >> 0, i |= 0x01; - if (moff & 0x0000ff00) - *out++ = moff >> 8, i |= 0x02; - if (moff & 0x00ff0000) - *out++ = moff >> 16, i |= 0x04; - if (moff & 0xff000000) - *out++ = moff >> 24, i |= 0x08; - - if (size & 0x00ff) - *out++ = size >> 0, i |= 0x10; - if (size & 0xff00) - *out++ = size >> 8, i |= 0x20; - - *op = i; - } - - *pout = out; -} - -// Return: amount of bytes one would need to encode dc -inline -ushort DC_count_encode_bytes(const DeltaChunk* dc) -{ - if (dc->data){ - return 1 + dc->ts; // cmd byte + actual data bytes - } else { - ushort c = 1; // cmd byte - uint ts = dc->ts; - ull so = dc->so; - - // offset - c += (so & 0x000000FF) > 0; - c += (so & 0x0000FF00) > 0; - c += (so & 0x00FF0000) > 0; - c += (so & 0xFF000000) > 0; - - // size - max size is 0x10000, its encoded with 0 size bits - c += (ts & 0x000000FF) > 0; - c += (ts & 0x0000FF00) > 0; - - return c; - } -} - - - -// DELTA INFO -///////////// -typedef struct { - uint dso; // delta stream offset, relative to the very start of the stream - uint to; // target offset (cache) -} DeltaInfo; - - -// DELTA INFO VECTOR -////////////////////// - -typedef struct { - DeltaInfo *mem; // Memory for delta infos - uint di_last_size; // size of the last element - we can't compute it using the next bound - const uchar *dstream; // borrowed ointer to delta stream we index - Py_ssize_t size; // Amount of DeltaInfos - Py_ssize_t reserved_size; // Reserved amount of DeltaInfos -} DeltaInfoVector; - - - -// Reserve enough memory to hold the given amount of delta chunks -// Return 1 on success -// NOTE: added a minimum allocation to assure reallocation is not done -// just for a single additional entry. DIVs change often, and reallocs are expensive -inline -int DIV_reserve_memory(DeltaInfoVector* vec, uint num_dc) -{ - if (num_dc <= vec->reserved_size){ - return 1; - } - -#ifdef DEBUG - bool was_null = vec->mem == NULL; -#endif - - if (vec->mem == NULL){ - vec->mem = PyMem_Malloc(num_dc * sizeof(DeltaInfo)); - } else { - vec->mem = PyMem_Realloc(vec->mem, num_dc * sizeof(DeltaInfo)); - } - - if (vec->mem == NULL){ - Py_FatalError("Could not allocate memory for append operation"); - } - - vec->reserved_size = num_dc; - -#ifdef DEBUG - const char* format = "Allocated %i bytes at %p, to hold up to %i chunks\n"; - if (!was_null) - format = "Re-allocated %i bytes at %p, to hold up to %i chunks\n"; - fprintf(stderr, format, (int)(vec->reserved_size * sizeof(DeltaInfo)), vec->mem, (int)vec->reserved_size); -#endif - - return vec->mem != NULL; -} - -/* -Grow the delta chunk list by the given amount of bytes. -This may trigger a realloc, but will do nothing if the reserved size is already -large enough. -Return 1 on success, 0 on failure -*/ -inline -int DIV_grow_by(DeltaInfoVector* vec, uint num_dc) -{ - return DIV_reserve_memory(vec, vec->reserved_size + num_dc); -} - -int DIV_init(DeltaInfoVector* vec, ull initial_size) -{ - vec->mem = NULL; - vec->dstream = NULL; - vec->size = 0; - vec->reserved_size = 0; - vec->di_last_size = 0; - - return DIV_grow_by(vec, initial_size); -} - -inline -Py_ssize_t DIV_len(const DeltaInfoVector* vec) -{ - return vec->size; -} - -inline -uint DIV_lbound(const DeltaInfoVector* vec) -{ - assert(vec->size && vec->mem); - return vec->mem->to; -} - -// Return item at index -inline -DeltaInfo* DIV_get(const DeltaInfoVector* vec, Py_ssize_t i) -{ - assert(i < vec->size && vec->mem); - return &vec->mem[i]; -} - -// Return last item -inline -DeltaInfo* DIV_last(const DeltaInfoVector* vec) -{ - return DIV_get(vec, vec->size-1); -} - -inline -int DIV_empty(const DeltaInfoVector* vec) -{ - return vec->size == 0; -} - -// Return end pointer of the vector -inline -const DeltaInfo* DIV_end(const DeltaInfoVector* vec) -{ - assert(!DIV_empty(vec)); - return vec->mem + vec->size; -} - -// return first item in vector -inline -DeltaInfo* DIV_first(const DeltaInfoVector* vec) -{ - assert(!DIV_empty(vec)); - return vec->mem; -} - -// return rbound offset in bytes. We use information contained in the -// vec to do that -inline -uint DIV_info_rbound(const DeltaInfoVector* vec, const DeltaInfo* di) -{ - if (DIV_last(vec) == di){ - return di->to + vec->di_last_size; - } else { - return (di+1)->to; - } -} - -// return size of the given delta info item -inline -uint DIV_info_size2(const DeltaInfoVector* vec, const DeltaInfo* di, const DeltaInfo* const veclast) -{ - if (veclast == di){ - return vec->di_last_size; - } else { - return (di+1)->to - di->to; - } -} - -// return size of the given delta info item -inline -uint DIV_info_size(const DeltaInfoVector* vec, const DeltaInfo* di) -{ - return DIV_info_size2(vec, di, DIV_last(vec)); -} - -void DIV_destroy(DeltaInfoVector* vec) -{ - if (vec->mem){ -#ifdef DEBUG - fprintf(stderr, "DIV_destroy: %p\n", (void*)vec->mem); -#endif - PyMem_Free(vec->mem); - vec->size = 0; - vec->reserved_size = 0; - vec->mem = 0; - } -} - -// Reset this vector so that its existing memory can be filled again. -// Memory will be kept, but not cleaned up -inline -void DIV_forget_members(DeltaInfoVector* vec) -{ - vec->size = 0; -} - -// Reset the vector so that its size will be zero -// It will keep its memory though, and hence can be filled again -inline -void DIV_reset(DeltaInfoVector* vec) -{ - if (vec->size == 0) - return; - vec->size = 0; -} - - -// Append one chunk to the end of the list, and return a pointer to it -// It will not have been initialized ! -inline -DeltaInfo* DIV_append(DeltaInfoVector* vec) -{ - if (vec->size + 1 > vec->reserved_size){ - DIV_grow_by(vec, gDIV_grow_by); - } - - DeltaInfo* next = vec->mem + vec->size; - vec->size += 1; - return next; -} - -// Return delta chunk being closest to the given absolute offset -inline -DeltaInfo* DIV_closest_chunk(const DeltaInfoVector* vec, ull ofs) -{ - assert(vec->mem); - - ull lo = 0; - ull hi = vec->size; - ull mid; - DeltaInfo* di; - - while (lo < hi) - { - mid = (lo + hi) / 2; - di = vec->mem + mid; - if (di->to > ofs){ - hi = mid; - } else if ((DIV_info_rbound(vec, di) > ofs) | (di->to == ofs)) { - return di; - } else { - lo = mid + 1; - } - } - - return DIV_last(vec); -} - - -// Return the amount of chunks a slice at the given spot would have, as well as -// its size in bytes it would have if the possibly partial chunks would be encoded -// and added to the spot marked by sdc -uint DIV_count_slice_bytes(const DeltaInfoVector* src, uint ofs, uint size) -{ - uint num_bytes = 0; - DeltaInfo* cdi = DIV_closest_chunk(src, ofs); - - DeltaChunk dc; - DC_init(&dc, 0, 0, 0, NULL); - - // partial overlap - if (cdi->to != ofs) { - const ull relofs = ofs - cdi->to; - const uint cdisize = DIV_info_size(src, cdi); - const uint max_size = cdisize - relofs < size ? cdisize - relofs : size; - size -= max_size; - - // get the size in bytes the info would have - next_delta_info(src->dstream + cdi->dso, &dc); - dc.so += relofs; - dc.ts = max_size; - num_bytes += DC_count_encode_bytes(&dc); - - cdi += 1; - - if (size == 0){ - return num_bytes; - } - } - - const DeltaInfo* const vecend = DIV_end(src); - const uchar* nstream; - for( ;cdi < vecend; ++cdi){ - nstream = next_delta_info(src->dstream + cdi->dso, &dc); - - if (dc.ts < size) { - num_bytes += nstream - (src->dstream + cdi->dso); - size -= dc.ts; - } else { - dc.ts = size; - num_bytes += DC_count_encode_bytes(&dc); - size = 0; - break; - } - } - - assert(size == 0); - return num_bytes; -} - -// Write a slice as defined by its absolute offset in bytes and its size into the given -// destination memory. The individual chunks written will be a byte copy of the source -// data chunk stream -// Return: number of chunks in the slice -uint DIV_copy_slice_to(const DeltaInfoVector* src, uchar** dest, ull tofs, uint size) -{ - assert(DIV_lbound(src) <= tofs); - assert((tofs + size) <= DIV_info_rbound(src, DIV_last(src))); - - DeltaChunk dc; - DC_init(&dc, 0, 0, 0, NULL); - - DeltaInfo* cdi = DIV_closest_chunk(src, tofs); - uint num_chunks = 0; - - // partial overlap - if (cdi->to != tofs) { - const uint relofs = tofs - cdi->to; - next_delta_info(src->dstream + cdi->dso, &dc); - const uint max_size = dc.ts - relofs < size ? dc.ts - relofs : size; - - size -= max_size; - - // adjust dc proportions - DC_encode_to(&dc, dest, relofs, max_size); - - num_chunks += 1; - cdi += 1; - - if (size == 0){ - return num_chunks; - } - } - - const uchar* dstream = src->dstream + cdi->dso; - const uchar* nstream = dstream; - for( ; nstream; dstream = nstream) - { - num_chunks += 1; - nstream = next_delta_info(dstream, &dc); - if (dc.ts < size) { - memcpy(*dest, dstream, nstream - dstream); - *dest += nstream - dstream; - size -= dc.ts; - } else { - DC_encode_to(&dc, dest, 0, size); - size = 0; - break; - } - } - - assert(size == 0); - return num_chunks; -} - - -// Take slices of div into the corresponding area of the tsi, which is the topmost -// delta to apply. -bool DIV_connect_with_base(ToplevelStreamInfo* tsi, DeltaInfoVector* div) -{ - assert(tsi->num_chunks); - - - uint num_bytes = 0; - const uchar* data = TSI_first(tsi); - const uchar* dend = TSI_end(tsi); - - DeltaChunk dc; - DC_init(&dc, 0, 0, 0, NULL); - - - // COMPUTE SIZE OF TARGET STREAM - ///////////////////////////////// - for (;data < dend;) - { - data = next_delta_info(data, &dc); - - // Data chunks don't need processing - if (dc.data){ - num_bytes += 1 + dc.ts; - continue; - } - - num_bytes += DIV_count_slice_bytes(div, dc.so, dc.ts); - } - assert(DC_rbound(&dc) == tsi->target_size); - - - // GET NEW DELTA BUFFER - //////////////////////// - uchar *const dstream = PyMem_Malloc(num_bytes); - if (!dstream){ - return 0; - } - - - data = TSI_first(tsi); - const uchar *ndata = data; - dend = TSI_end(tsi); - - uint num_chunks = 0; - uchar* ds = dstream; - DC_init(&dc, 0, 0, 0, NULL); - - // pick slices from the delta and put them into the new stream - for (; data < dend; data = ndata) - { - ndata = next_delta_info(data, &dc); - - // Data chunks don't need processing - if (dc.data){ - // just copy it over - memcpy((void*)ds, (void*)data, ndata - data); - ds += ndata - data; - num_chunks += 1; - continue; - } - - // Copy Chunks - num_chunks += DIV_copy_slice_to(div, &ds, dc.so, dc.ts); - } - assert(ds - dstream == num_bytes); - assert(num_chunks >= tsi->num_chunks); - assert(DC_rbound(&dc) == tsi->target_size); - - // finally, replace the streams - TSI_replace_stream(tsi, dstream, num_bytes); - tsi->cstart = dstream; // we have NO header ! - assert(tsi->tds == dstream); - tsi->num_chunks = num_chunks; - - - return 1; - -} - -// DELTA CHUNK LIST (PYTHON) -///////////////////////////// -// Internally, it has nothing to do with a ChunkList anymore though -typedef struct { - PyObject_HEAD - // ----------- - ToplevelStreamInfo istream; - -} DeltaChunkList; - - - -int DCL_init(DeltaChunkList*self, PyObject *args, PyObject *kwds) -{ - if(args && PySequence_Size(args) > 0){ - PyErr_SetString(PyExc_ValueError, "Too many arguments"); - return -1; - } - - TSI_init(&self->istream); - return 0; -} - - -void DCL_dealloc(DeltaChunkList* self) -{ - TSI_destroy(&(self->istream)); -} - - -PyObject* DCL_py_rbound(DeltaChunkList* self) -{ - return PyLong_FromUnsignedLongLong(self->istream.target_size); -} - -// Write using a write function, taking remaining bytes from a base buffer - -PyObject* DCL_apply(DeltaChunkList* self, PyObject* args) -{ - PyObject* pybuf = 0; - PyObject* writeproc = 0; - if (!PyArg_ParseTuple(args, "OO", &pybuf, &writeproc)){ - PyErr_BadArgument(); - return NULL; - } - - if (!PyObject_CheckReadBuffer(pybuf)){ - PyErr_SetString(PyExc_ValueError, "First argument must be a buffer-compatible object, like a string, or a memory map"); - return NULL; - } - - if (!PyCallable_Check(writeproc)){ - PyErr_SetString(PyExc_ValueError, "Second argument must be a writer method with signature write(buf)"); - return NULL; - } - - const uchar* base; - Py_ssize_t baselen; - PyObject_AsReadBuffer(pybuf, (const void**)&base, &baselen); - - PyObject* tmpargs = PyTuple_New(1); - - const uchar* data = TSI_first(&self->istream); - const uchar* const dend = TSI_end(&self->istream); - - DeltaChunk dc; - DC_init(&dc, 0, 0, 0, NULL); - - while (data < dend){ - data = next_delta_info(data, &dc); - DC_apply(&dc, base, writeproc, tmpargs); - } - - Py_DECREF(tmpargs); - Py_RETURN_NONE; -} - -PyMethodDef DCL_methods[] = { - {"apply", (PyCFunction)DCL_apply, METH_VARARGS, "Apply the given iterable of delta streams" }, - {"rbound", (PyCFunction)DCL_py_rbound, METH_NOARGS, NULL}, - {NULL} /* Sentinel */ -}; - -PyTypeObject DeltaChunkListType = { - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ - "DeltaChunkList", /*tp_name*/ - sizeof(DeltaChunkList), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor)DCL_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - "Minimal Delta Chunk List",/* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - DCL_methods, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - (initproc)DCL_init, /* tp_init */ - 0, /* tp_alloc */ - 0, /* tp_new */ -}; - - -// Makes a new copy of the DeltaChunkList - you have to do everything yourselve -// in C ... want C++ !! -DeltaChunkList* DCL_new_instance(void) -{ - DeltaChunkList* dcl = (DeltaChunkList*) PyType_GenericNew(&DeltaChunkListType, 0, 0); - assert(dcl); - - DCL_init(dcl, 0, 0); - return dcl; -} - -// Read the next delta chunk from the given stream and advance it -// dc will contain the parsed information, its offset must be set by -// the previous call of next_delta_info, which implies it should remain the -// same instance between the calls. -// Return the altered uchar pointer, reassign it to the input data -inline -const uchar* next_delta_info(const uchar* data, DeltaChunk* dc) -{ - const char cmd = *data++; - - if (cmd & 0x80) - { - uint cp_off = 0, cp_size = 0; - if (cmd & 0x01) cp_off = *data++; - if (cmd & 0x02) cp_off |= (*data++ << 8); - if (cmd & 0x04) cp_off |= (*data++ << 16); - if (cmd & 0x08) cp_off |= ((unsigned) *data++ << 24); - if (cmd & 0x10) cp_size = *data++; - if (cmd & 0x20) cp_size |= (*data++ << 8); - if (cmd & 0x40) cp_size |= (*data++ << 16); // this should never get hit with current deltas ... - if (cp_size == 0) cp_size = 0x10000; - - dc->to += dc->ts; - dc->data = NULL; - dc->so = cp_off; - dc->ts = cp_size; - - } else if (cmd) { - // Just share the data - dc->to += dc->ts; - dc->data = data; - dc->ts = cmd; - dc->so = 0; - - data += cmd; - } else { - PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); - assert(0); - return NULL; - } - - return data; -} - -// Return amount of chunks encoded in the given delta stream -// If read_header is True, then the header msb chunks will be read first. -// Otherwise, the stream is assumed to be scrubbed one past the header -uint compute_chunk_count(const uchar* data, const uchar* dend, bool read_header) -{ - // read header - if (read_header){ - msb_size(&data, dend); - msb_size(&data, dend); - } - - DeltaChunk dc; - DC_init(&dc, 0, 0, 0, NULL); - uint num_chunks = 0; - - while (data < dend) - { - data = next_delta_info(data, &dc); - num_chunks += 1; - }// END handle command opcodes - - return num_chunks; -} - -PyObject* connect_deltas(PyObject *self, PyObject *dstreams) -{ - // obtain iterator - PyObject* stream_iter = 0; - if (!PyIter_Check(dstreams)){ - stream_iter = PyObject_GetIter(dstreams); - if (!stream_iter){ - PyErr_SetString(PyExc_RuntimeError, "Couldn't obtain iterator for streams"); - return NULL; - } - } else { - stream_iter = dstreams; - } - - DeltaInfoVector div; - ToplevelStreamInfo tdsinfo; - TSI_init(&tdsinfo); - DIV_init(&div, 0); - - - // GET TOPLEVEL DELTA STREAM - int error = 0; - PyObject* ds = 0; - unsigned int dsi = 0; // delta stream index we process - ds = PyIter_Next(stream_iter); - if (!ds){ - error = 1; - goto _error; - } - - dsi += 1; - tdsinfo.parent_object = PyObject_CallMethod(ds, "read", 0); - if (!PyObject_CheckReadBuffer(tdsinfo.parent_object)){ - Py_DECREF(ds); - error = 1; - goto _error; - } - - PyObject_AsReadBuffer(tdsinfo.parent_object, (const void**)&tdsinfo.tds, &tdsinfo.tdslen); - if (tdsinfo.tdslen > pow(2, 32)){ - // parent object is deallocated by info structure - Py_DECREF(ds); - PyErr_SetString(PyExc_RuntimeError, "Cannot handle deltas larger than 4GB"); - tdsinfo.parent_object = 0; - - error = 1; - goto _error; - } - Py_DECREF(ds); - - // let it officially know, and initialize its internal state - TSI_set_stream(&tdsinfo, tdsinfo.tds); - - // INTEGRATE ANCESTOR DELTA STREAMS - for (ds = PyIter_Next(stream_iter); ds != NULL; ds = PyIter_Next(stream_iter), ++dsi) - { - // Its important to initialize this before the next block which can jump - // to code who needs this to exist ! - PyObject* db = 0; - - // When processing the first delta, we know we will have to alter the tds - // Hence we copy it and deallocate the parent object - if (dsi == 1) { - if (!TSI_copy_stream_from_object(&tdsinfo)){ - PyErr_SetString(PyExc_RuntimeError, "Could not allocate memory to copy toplevel buffer"); - // info structure takes care of the parent_object - error = 1; - goto loop_end; - } - - tdsinfo.num_chunks = compute_chunk_count(tdsinfo.cstart, TSI_end(&tdsinfo), 0); - } - - db = PyObject_CallMethod(ds, "read", 0); - if (!PyObject_CheckReadBuffer(db)){ - error = 1; - PyErr_SetString(PyExc_RuntimeError, "Returned buffer didn't support the buffer protocol"); - goto loop_end; - } - - // Fill the stream info structure - const uchar* data; - Py_ssize_t dlen; - PyObject_AsReadBuffer(db, (const void**)&data, &dlen); - const uchar* const dstart = data; - const uchar* const dend = data + dlen; - div.dstream = dstart; - - if (dlen > pow(2, 32)){ - error = 1; - PyErr_SetString(PyExc_RuntimeError, "Cannot currently handle deltas larger than 4GB"); - goto loop_end; - } - - // READ HEADER - msb_size(&data, dend); - const ull target_size = msb_size(&data, dend); - - DIV_reserve_memory(&div, compute_chunk_count(data, dend, 0)); - - // parse command stream - DeltaInfo* di = 0; // temporary pointer - DeltaChunk dc; - DC_init(&dc, 0, 0, 0, NULL); - - assert(data < dend); - while (data < dend) - { - di = DIV_append(&div); - di->dso = data - dstart; - if ((data = next_delta_info(data, &dc))){ - di->to = dc.to; - } else { - error = 1; - goto loop_end; - } - }// END handle command opcodes - - // finalize information - div.di_last_size = dc.ts; - - if (DC_rbound(&dc) != target_size){ - PyErr_SetString(PyExc_RuntimeError, "Failed to parse delta stream"); - error = 1; - } - - #ifdef DEBUG - fprintf(stderr, "------------ Stream %i --------\n ", (int)dsi); - fprintf(stderr, "Before Connect: tdsinfo: num_chunks = %i, bytelen = %i KiB, target_size = %i KiB\n", (int)tdsinfo.num_chunks, (int)tdsinfo.tdslen/1000, (int)tdsinfo.target_size/1000); - fprintf(stderr, "div->num_chunks = %i, div->reserved_size = %i, div->bytelen=%i KiB\n", (int)div.size, (int)div.reserved_size, (int)dlen/1000); - #endif - - if (!DIV_connect_with_base(&tdsinfo, &div)){ - error = 1; - } - - #ifdef DEBUG - fprintf(stderr, "after connect: tdsinfo->num_chunks = %i, tdsinfo->bytelen = %i KiB\n", (int)tdsinfo.num_chunks, (int)tdsinfo.tdslen/1000); - #endif - - // destroy members, but keep memory - DIV_reset(&div); - -loop_end: - // perform cleanup - Py_DECREF(ds); - Py_DECREF(db); - - if (error){ - break; - } - }// END for each stream object - - if (dsi == 0){ - PyErr_SetString(PyExc_ValueError, "No streams provided"); - } - - -_error: - - if (stream_iter != dstreams){ - Py_DECREF(stream_iter); - } - - - DIV_destroy(&div); - - // Return the actual python object - its just a container - DeltaChunkList* dcl = DCL_new_instance(); - if (!dcl){ - PyErr_SetString(PyExc_RuntimeError, "Couldn't allocate list"); - // Otherwise tdsinfo would be deallocated by the chunk list - TSI_destroy(&tdsinfo); - error = 1; - } else { - // Plain copy, transfer ownership to dcl - dcl->istream = tdsinfo; - } - - if (error){ - // Will dealloc tdcv - Py_XDECREF(dcl); - return NULL; - } - - return (PyObject*)dcl; -} - - -// Write using a write function, taking remaining bytes from a base buffer -// replaces the corresponding method in python -PyObject* apply_delta(PyObject* self, PyObject* args) -{ - PyObject* pybbuf = 0; - PyObject* pydbuf = 0; - PyObject* pytbuf = 0; - if (!PyArg_ParseTuple(args, "OOO", &pybbuf, &pydbuf, &pytbuf)){ - PyErr_BadArgument(); - return NULL; - } - - PyObject* objects[] = { pybbuf, pydbuf, pytbuf }; - assert(sizeof(objects) / sizeof(PyObject*) == 3); - - uint i; - for(i = 0; i < 3; i++){ - if (!PyObject_CheckReadBuffer(objects[i])){ - PyErr_SetString(PyExc_ValueError, "Argument must be a buffer-compatible object, like a string, or a memory map"); - return NULL; - } - } - - Py_ssize_t lbbuf; Py_ssize_t ldbuf; Py_ssize_t ltbuf; - const uchar* bbuf; const uchar* dbuf; - uchar* tbuf; - PyObject_AsReadBuffer(pybbuf, (const void**)(&bbuf), &lbbuf); - PyObject_AsReadBuffer(pydbuf, (const void**)(&dbuf), &ldbuf); - - if (PyObject_AsWriteBuffer(pytbuf, (void**)(&tbuf), <buf)){ - PyErr_SetString(PyExc_ValueError, "Argument 3 must be a writable buffer"); - return NULL; - } - - const uchar* data = dbuf; - const uchar* dend = dbuf + ldbuf; - - while (data < dend) - { - const char cmd = *data++; - - if (cmd & 0x80) - { - unsigned long cp_off = 0, cp_size = 0; - if (cmd & 0x01) cp_off = *data++; - if (cmd & 0x02) cp_off |= (*data++ << 8); - if (cmd & 0x04) cp_off |= (*data++ << 16); - if (cmd & 0x08) cp_off |= ((unsigned) *data++ << 24); - if (cmd & 0x10) cp_size = *data++; - if (cmd & 0x20) cp_size |= (*data++ << 8); - if (cmd & 0x40) cp_size |= (*data++ << 16); - if (cp_size == 0) cp_size = 0x10000; - - memcpy(tbuf, bbuf + cp_off, cp_size); - tbuf += cp_size; - - } else if (cmd) { - memcpy(tbuf, data, cmd); - tbuf += cmd; - data += cmd; - } else { - PyErr_SetString(PyExc_RuntimeError, "Encountered an unsupported delta cmd: 0"); - return NULL; - } - }// END handle command opcodes - - Py_RETURN_NONE; -} diff --git a/gitdb/_delta_apply.h b/gitdb/_delta_apply.h deleted file mode 100644 index 1fcd53832..000000000 --- a/gitdb/_delta_apply.h +++ /dev/null @@ -1,6 +0,0 @@ -#include - -extern PyObject* connect_deltas(PyObject *self, PyObject *dstreams); -extern PyObject* apply_delta(PyObject* self, PyObject* args); - -extern PyTypeObject DeltaChunkListType; diff --git a/gitdb/_fun.c b/gitdb/_fun.c deleted file mode 100644 index 49970386f..000000000 --- a/gitdb/_fun.c +++ /dev/null @@ -1,107 +0,0 @@ -#include -#include "_delta_apply.h" - -static PyObject *PackIndexFile_sha_to_index(PyObject *self, PyObject *args) -{ - const unsigned char *sha; - const unsigned int sha_len; - - // Note: self is only set if we are a c type. We emulate an instance method, - // hence we have to get the instance as 'first' argument - - // get instance and sha - PyObject* inst = 0; - if (!PyArg_ParseTuple(args, "Os#", &inst, &sha, &sha_len)) - return NULL; - - if (sha_len != 20) { - PyErr_SetString(PyExc_ValueError, "Sha is not 20 bytes long"); - return NULL; - } - - if( !inst){ - PyErr_SetString(PyExc_ValueError, "Cannot be called without self"); - return NULL; - } - - // read lo and hi bounds - PyObject* fanout_table = PyObject_GetAttrString(inst, "_fanout_table"); - if (!fanout_table){ - PyErr_SetString(PyExc_ValueError, "Couldn't obtain fanout table"); - return NULL; - } - - unsigned int lo = 0, hi = 0; - if (sha[0]){ - PyObject* item = PySequence_GetItem(fanout_table, (const Py_ssize_t)(sha[0]-1)); - lo = PyInt_AS_LONG(item); - Py_DECREF(item); - } - PyObject* item = PySequence_GetItem(fanout_table, (const Py_ssize_t)sha[0]); - hi = PyInt_AS_LONG(item); - Py_DECREF(item); - item = 0; - - Py_DECREF(fanout_table); - - // get sha query function - PyObject* get_sha = PyObject_GetAttrString(inst, "sha"); - if (!get_sha){ - PyErr_SetString(PyExc_ValueError, "Couldn't obtain sha method"); - return NULL; - } - - PyObject *sha_str = 0; - while (lo < hi) { - const int mid = (lo + hi)/2; - sha_str = PyObject_CallFunction(get_sha, "i", mid); - if (!sha_str) { - return NULL; - } - - // we really trust that string ... for speed - const int cmp = memcmp(PyString_AS_STRING(sha_str), sha, 20); - Py_DECREF(sha_str); - sha_str = 0; - - if (cmp < 0){ - lo = mid + 1; - } - else if (cmp > 0) { - hi = mid; - } - else { - Py_DECREF(get_sha); - return PyInt_FromLong(mid); - }// END handle comparison - }// END while lo < hi - - // nothing found, cleanup - Py_DECREF(get_sha); - Py_RETURN_NONE; -} - -static PyMethodDef py_fun[] = { - { "PackIndexFile_sha_to_index", (PyCFunction)PackIndexFile_sha_to_index, METH_VARARGS, "TODO" }, - { "connect_deltas", (PyCFunction)connect_deltas, METH_O, "See python implementation" }, - { "apply_delta", (PyCFunction)apply_delta, METH_VARARGS, "See python implementation" }, - { NULL, NULL, 0, NULL } -}; - -#ifndef PyMODINIT_FUNC /* declarations for DLL import/export */ -#define PyMODINIT_FUNC void -#endif -PyMODINIT_FUNC init_perf(void) -{ - PyObject *m; - - if (PyType_Ready(&DeltaChunkListType) < 0) - return; - - m = Py_InitModule3("_perf", py_fun, NULL); - if (m == NULL) - return; - - Py_INCREF(&DeltaChunkListType); - PyModule_AddObject(m, "DeltaChunkList", (PyObject *)&DeltaChunkListType); -} diff --git a/gitdb/fun.py b/gitdb/fun.py index ac9d99395..8ca38c867 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -776,6 +776,6 @@ def is_equal_canonical_sha(canonical_length, match, sha1): try: - from _perf import connect_deltas + from gitdb_speedups._perf import connect_deltas except ImportError: pass diff --git a/gitdb/pack.py b/gitdb/pack.py index 2447455b5..20a451549 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -35,7 +35,7 @@ ) try: - from _perf import PackIndexFile_sha_to_index + from gitdb_speedups._perf import PackIndexFile_sha_to_index except ImportError: pass # END try c module diff --git a/gitdb/stream.py b/gitdb/stream.py index be95c113a..2f4c12dfb 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -33,7 +33,7 @@ has_perf_mod = False PY26 = sys.version_info[:2] < (2, 7) try: - from _perf import apply_delta as c_apply_delta + from gitdb_speedups._perf import apply_delta as c_apply_delta has_perf_mod = True except ImportError: pass diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 000000000..3c6e79cf3 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal=1 diff --git a/setup.py b/setup.py index c2f9f1eb1..eccb95278 100755 --- a/setup.py +++ b/setup.py @@ -1,125 +1,45 @@ -#!/usr/bin/env python -from distutils.core import setup, Extension -from distutils.command.build_py import build_py -from distutils.command.build_ext import build_ext +from setuptools import setup -import os -import sys +# NOTE: This is currently duplicated from the gitdb.__init__ module, because +# that's just how you write a setup.py (nobody reads this stuff out of the +# module) -# wow, this is a mixed bag ... I am pretty upset about all of this ... -setuptools_build_py_module = None -try: - # don't pull it in if we don't have to - if 'setuptools' in sys.modules: - import setuptools.command.build_py as setuptools_build_py_module - from setuptools.command.build_ext import build_ext -except ImportError: - pass - - -class build_ext_nofail(build_ext): - - """Doesn't fail when build our optional extensions""" - - def run(self): - try: - build_ext.run(self) - except Exception: - print("Ignored failure when building extensions, pure python modules will be used instead") - # END ignore errors - - -def get_data_files(self): - """Can you feel the pain ? So, in python2.5 and python2.4 coming with maya, - the line dealing with the ``plen`` has a bug which causes it to truncate too much. - It is fixed in the system interpreters as they receive patches, and shows how - bad it is if something doesn't have proper unittests. - The code here is a plain copy of the python2.6 version which works for all. - - Generate list of '(package,src_dir,build_dir,filenames)' tuples""" - data = [] - if not self.packages: - return data - - # this one is just for the setup tools ! They don't iniitlialize this variable - # when they should, but do it on demand using this method.Its crazy - if hasattr(self, 'analyze_manifest'): - self.analyze_manifest() - # END handle setuptools ... - - for package in self.packages: - # Locate package source directory - src_dir = self.get_package_dir(package) - - # Compute package build directory - build_dir = os.path.join(*([self.build_lib] + package.split('.'))) - - # Length of path to strip from found files - plen = 0 - if src_dir: - plen = len(src_dir) + 1 - - # Strip directory from globbed filenames - filenames = [ - file[plen:] for file in self.find_data_files(package, src_dir) - ] - data.append((package, src_dir, build_dir, filenames)) - return data - -build_py.get_data_files = get_data_files -if setuptools_build_py_module: - setuptools_build_py_module.build_py._get_data_files = get_data_files -# END apply setuptools patch too - -# NOTE: This is currently duplicated from the gitdb.__init__ module, as we cannot -# satisfy the dependencies at installation time, unfortunately, due to inherent limitations -# of distutils, which cannot install the prerequesites of a package before the acutal package. __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" version_info = (0, 6, 4) __version__ = '.'.join(str(i) for i in version_info) -setup(cmdclass={'build_ext': build_ext_nofail}, - name="gitdb", - version=__version__, - description="Git Object Database", - author=__author__, - author_email=__contact__, - url=__homepage__, - packages=('gitdb', 'gitdb.db', 'gitdb.utils', 'gitdb.test'), - package_dir = {'gitdb': 'gitdb'}, - ext_modules=[Extension('gitdb._perf', ['gitdb/_fun.c', 'gitdb/_delta_apply.c'], include_dirs=['gitdb'])], - license = "BSD License", - zip_safe=False, - requires=('smmap (>=0.8.5)', ), - install_requires=('smmap >= 0.8.5'), - long_description = """GitDB is a pure-Python git object database""", - # See https://pypi.python.org/pypi?%3Aaction=list_classifiers - classifiers=[ - # Picked from - # http://pypi.python.org/pypi?:action=list_classifiers - #"Development Status :: 1 - Planning", - #"Development Status :: 2 - Pre-Alpha", - #"Development Status :: 3 - Alpha", - # "Development Status :: 4 - Beta", - "Development Status :: 5 - Production/Stable", - #"Development Status :: 6 - Mature", - #"Development Status :: 7 - Inactive", - "Environment :: Console", - "Intended Audience :: Developers", - "License :: OSI Approved :: BSD License", - "Operating System :: OS Independent", - "Operating System :: POSIX", - "Operating System :: Microsoft :: Windows", - "Operating System :: MacOS :: MacOS X", - "Programming Language :: Python", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.6", - "Programming Language :: Python :: 2.7", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.2", - "Programming Language :: Python :: 3.3", - "Programming Language :: Python :: 3.4", - "Programming Language :: Python :: 3.5", -],) +setup( + name="gitdb", + version=__version__, + description="Git Object Database", + author=__author__, + author_email=__contact__, + url=__homepage__, + packages=('gitdb', 'gitdb.db', 'gitdb.utils', 'gitdb.test'), + license="BSD License", + zip_safe=False, + install_requires=['smmap >= 0.8.5'], + long_description="""GitDB is a pure-Python git object database""", + # See https://pypi.python.org/pypi?%3Aaction=list_classifiers + classifiers=[ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Operating System :: POSIX", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS :: MacOS X", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.6", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.2", + "Programming Language :: Python :: 3.3", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + ] +) From 55aa3d79607fdf9123d266612d58a65e04a8622e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 9 Oct 2016 10:31:02 +0200 Subject: [PATCH 0327/2375] doc(README): correct appveyor badge And remove some broken badges. --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index ef0b23601..83c674456 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Although memory maps have many advantages, they represent a very limited system ## Overview [![Build Status](https://travis-ci.org/gitpython-developers/smmap.svg?branch=master)](https://travis-ci.org/gitpython-developers/smmap) -[![Build status](https://ci.appveyor.com/api/projects/status/h8rl7thsr42oc0pf?svg=true&passingText=windows%20OK&failingText=windows%20failed)](https://ci.appveyor.com/project/Byron/smmap) +[![Build status](https://ci.appveyor.com/api/projects/status/kuws846av5lvmugo?svg=true&passingText=windows%20OK&failingText=windows%20failed)](https://ci.appveyor.com/project/Byron/smmap) [![Coverage Status](https://coveralls.io/repos/gitpython-developers/smmap/badge.png)](https://coveralls.io/r/gitpython-developers/smmap) [![Issue Stats](http://www.issuestats.com/github/gitpython-developers/smmap/badge/pr)](http://www.issuestats.com/github/gitpython-developers/smmap) [![Issue Stats](http://www.issuestats.com/github/gitpython-developers/smmap/badge/issue)](http://www.issuestats.com/github/gitpython-developers/smmap) @@ -40,8 +40,6 @@ The package was tested on all of the previously mentioned configurations. ## Installing smmap -[![Latest Version](https://pypip.in/version/smmap/badge.svg)](https://pypi.python.org/pypi/smmap/) -[![Supported Python versions](https://pypip.in/py_versions/smmap/badge.svg)](https://pypi.python.org/pypi/smmap/) [![Documentation Status](https://readthedocs.org/projects/smmap/badge/?version=latest)](https://readthedocs.org/projects/smmap/?badge=latest) Its easiest to install smmap using the [pip](http://www.pip-installer.org/en/latest) program: From 09023b1013e081755dca575f62c35eb93ee8065a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 16 Oct 2016 12:10:19 +0200 Subject: [PATCH 0328/2375] chore(rename): smmap -> smmap2 [skip ci] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index f6a04827d..2c519e648 100755 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ long_description = "See http://github.com/gitpython-developers/smmap" setup( - name="smmap", + name="smmap2", version=smmap.__version__, description="A pure python implementation of a sliding window memory map manager", author=smmap.__author__, From ac5df7061ee11232346b3d0eb3aa5b43eebc847d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 16 Oct 2016 12:18:20 +0200 Subject: [PATCH 0329/2375] chore(version): set version to 2.0 Just to match the name a bit better. [skip ci] --- smmap/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smmap/__init__.py b/smmap/__init__.py index e711bbbf3..8b4059c87 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/Byron/smmap" -version_info = (0, 9, 0) +version_info = (2, 0, 0) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From 38866bc7c4956170c681a62c4508f934ac826469 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 16 Oct 2016 12:23:27 +0200 Subject: [PATCH 0330/2375] chore(rename): gitdb2 v2.0 v2 is chosen to better match the name. --- gitdb/__init__.py | 2 +- gitdb/ext/smmap | 2 +- setup.py | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 6554cf904..bfa083bb3 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 6, 4) +version_info = (2, 0, 0) __version__ = '.'.join(str(i) for i in version_info) diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 18e4aea23..ac5df7061 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 18e4aea23644ea43657cb2e6846b6aaf78720c27 +Subproject commit ac5df7061ee11232346b3d0eb3aa5b43eebc847d diff --git a/setup.py b/setup.py index eccb95278..f7e3761ab 100755 --- a/setup.py +++ b/setup.py @@ -7,11 +7,11 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (0, 6, 4) +version_info = (2, 0, 0) __version__ = '.'.join(str(i) for i in version_info) setup( - name="gitdb", + name="gitdb2", version=__version__, description="Git Object Database", author=__author__, @@ -20,7 +20,7 @@ packages=('gitdb', 'gitdb.db', 'gitdb.utils', 'gitdb.test'), license="BSD License", zip_safe=False, - install_requires=['smmap >= 0.8.5'], + install_requires=['smmap2 >= 2.0.0'], long_description="""GitDB is a pure-Python git object database""", # See https://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ From 6a217abbbf1673ab2e5794a3cc0bc151e16b9bc0 Mon Sep 17 00:00:00 2001 From: Kostis Anagnostopoulos Date: Sat, 1 Oct 2016 22:28:40 +0200 Subject: [PATCH 0331/2375] ci: Test on Appveyor for Windows. --- .appveyor.yml | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .appveyor.yml diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 000000000..2daadaa4d --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,49 @@ +# CI on Windows via appveyor +environment: + + matrix: + ## MINGW + # + - PYTHON: "C:\\Python27" + PYTHON_VERSION: "2.7" + - PYTHON: "C:\\Python34-x64" + PYTHON_VERSION: "3.4" + - PYTHON: "C:\\Python35-x64" + PYTHON_VERSION: "3.5" + - PYTHON: "C:\\Miniconda35-x64" + PYTHON_VERSION: "3.5" + IS_CONDA: "yes" + +install: + - set PATH=%PYTHON%;%PYTHON%\Scripts;%PATH% + + ## Print configuration for debugging. + # + - | + echo %PATH% + uname -a + where python pip pip2 pip3 pip34 + python --version + python -c "import struct; print(struct.calcsize('P') * 8)" + + - IF "%IS_CONDA%"=="yes" ( + conda info -a & + conda install --yes --quiet pip + ) + - pip install nose wheel coveralls + + ## For commits performed with the default user. + - | + git config --global user.email "travis@ci.com" + git config --global user.name "Travis Runner" + + - pip install -e . + +build: false + +test_script: + - IF "%PYTHON_VERSION%"=="3.5" ( + nosetests -v --with-coverage + ) ELSE ( + nosetests -v + ) From 62202bbbb58379814c44bd26cf662e68d3fa6dbb Mon Sep 17 00:00:00 2001 From: Kostis Anagnostopoulos Date: Sat, 1 Oct 2016 22:34:51 +0200 Subject: [PATCH 0332/2375] appveyor: Add badge on ankostis repo for testing. --- README.rst | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.rst b/README.rst index 1b754d09b..ca51dfaba 100644 --- a/README.rst +++ b/README.rst @@ -43,8 +43,8 @@ Once the clone is complete, please be sure to initialize the submodules using cd gitdb git submodule update --init -Run the tests with - +Run the tests with + nosetests DEVELOPMENT @@ -52,13 +52,12 @@ DEVELOPMENT .. image:: https://travis-ci.org/gitpython-developers/gitdb.svg?branch=master :target: https://travis-ci.org/gitpython-developers/gitdb - +.. image:: https://ci.appveyor.com/api/projects/status/2qa4km4ln7bfv76r/branch/master?svg=true&passingText=windows%20OK&failingText=windows%20failed + :target: https://ci.appveyor.com/project/ankostis/gitpython/branch/master) .. image:: https://coveralls.io/repos/gitpython-developers/gitdb/badge.png :target: https://coveralls.io/r/gitpython-developers/gitdb - .. image:: http://www.issuestats.com/github/gitpython-developers/gitdb/badge/pr :target: http://www.issuestats.com/github/gitpython-developers/gitdb - .. image:: http://www.issuestats.com/github/gitpython-developers/gitdb/badge/issue :target: http://www.issuestats.com/github/gitpython-developers/gitdb From 587dc4ec1311e135d70996a077a2f978e303d3fc Mon Sep 17 00:00:00 2001 From: Kostis Anagnostopoulos Date: Sat, 1 Oct 2016 23:08:31 +0200 Subject: [PATCH 0333/2375] TCs: fix div-by-zero on elapsed times (appveyor CPU is fast!) --- gitdb/test/performance/test_pack.py | 10 +++++----- gitdb/test/performance/test_pack_streaming.py | 6 +++--- gitdb/test/performance/test_stream.py | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/gitdb/test/performance/test_pack.py b/gitdb/test/performance/test_pack.py index bdd2b0a37..fc8d9d54f 100644 --- a/gitdb/test/performance/test_pack.py +++ b/gitdb/test/performance/test_pack.py @@ -36,7 +36,7 @@ def test_pack_random_access(self): sha_list = list(pdb.sha_iter()) elapsed = time() - st ns = len(sha_list) - print("PDB: looked up %i shas by index in %f s ( %f shas/s )" % (ns, elapsed, ns / elapsed), file=sys.stderr) + print("PDB: looked up %i shas by index in %f s ( %f shas/s )" % (ns, elapsed, ns / (elapsed or 1)), file=sys.stderr) # sha lookup: best-case and worst case access pdb_pack_info = pdb._pack_info @@ -51,7 +51,7 @@ def test_pack_random_access(self): del(pdb._entities) pdb.entities() print("PDB: looked up %i sha in %i packs in %f s ( %f shas/s )" % - (ns, len(pdb.entities()), elapsed, ns / elapsed), file=sys.stderr) + (ns, len(pdb.entities()), elapsed, ns / (elapsed or 1)), file=sys.stderr) # END for each random mode # query info and streams only @@ -62,7 +62,7 @@ def test_pack_random_access(self): pdb_fun(sha) elapsed = time() - st print("PDB: Obtained %i object %s by sha in %f s ( %f items/s )" % - (max_items, pdb_fun.__name__.upper(), elapsed, max_items / elapsed), file=sys.stderr) + (max_items, pdb_fun.__name__.upper(), elapsed, max_items / (elapsed or 1)), file=sys.stderr) # END for each function # retrieve stream and read all @@ -78,7 +78,7 @@ def test_pack_random_access(self): elapsed = time() - st total_kib = total_size / 1000 print("PDB: Obtained %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % - (max_items, total_kib, total_kib / elapsed, elapsed, max_items / elapsed), file=sys.stderr) + (max_items, total_kib, total_kib / (elapsed or 1), elapsed, max_items / (elapsed or 1)), file=sys.stderr) @skip_on_travis_ci def test_loose_correctness(self): @@ -129,5 +129,5 @@ def test_correctness(self): # END for each entity elapsed = time() - st print("PDB: verified %i objects (crc=%i) in %f s ( %f objects/s )" % - (count, crc, elapsed, count / elapsed), file=sys.stderr) + (count, crc, elapsed, count / (elapsed or 1)), file=sys.stderr) # END for each verify mode diff --git a/gitdb/test/performance/test_pack_streaming.py b/gitdb/test/performance/test_pack_streaming.py index f805e59fa..76f0f4a07 100644 --- a/gitdb/test/performance/test_pack_streaming.py +++ b/gitdb/test/performance/test_pack_streaming.py @@ -52,14 +52,14 @@ def test_pack_writing(self): # END gather objects for pack-writing elapsed = time() - st print("PDB Streaming: Got %i streams by sha in in %f s ( %f streams/s )" % - (ni, elapsed, ni / elapsed), file=sys.stderr) + (ni, elapsed, ni / (elapsed or 1)), file=sys.stderr) st = time() PackEntity.write_pack((pdb.stream(sha) for sha in pdb.sha_iter()), ostream.write, object_count=ni) elapsed = time() - st total_kb = ostream.bytes_written() / 1000 print(sys.stderr, "PDB Streaming: Wrote pack of size %i kb in %f s (%f kb/s)" % - (total_kb, elapsed, total_kb / elapsed), sys.stderr) + (total_kb, elapsed, total_kb / (elapsed or 1)), sys.stderr) @skip_on_travis_ci def test_stream_reading(self): @@ -82,4 +82,4 @@ def test_stream_reading(self): elapsed = time() - st total_kib = total_size / 1000 print(sys.stderr, "PDB Streaming: Got %i streams by sha and read all bytes totallying %i KiB ( %f KiB / s ) in %f s ( %f streams/s )" % - (ni, total_kib, total_kib / elapsed, elapsed, ni / elapsed), sys.stderr) + (ni, total_kib, total_kib / (elapsed or 1), elapsed, ni / (elapsed or 1)), sys.stderr) diff --git a/gitdb/test/performance/test_stream.py b/gitdb/test/performance/test_stream.py index bd66b26ad..704f4d094 100644 --- a/gitdb/test/performance/test_stream.py +++ b/gitdb/test/performance/test_stream.py @@ -70,7 +70,7 @@ def test_large_data_streaming(self, path): size_kib = size / 1000 print("Added %i KiB (filesize = %i KiB) of %s data to loose odb in %f s ( %f Write KiB / s)" % - (size_kib, fsize_kib, desc, elapsed_add, size_kib / elapsed_add), file=sys.stderr) + (size_kib, fsize_kib, desc, elapsed_add, size_kib / (elapsed_add or 1)), file=sys.stderr) # reading all at once st = time() @@ -81,7 +81,7 @@ def test_large_data_streaming(self, path): stream.seek(0) assert shadata == stream.getvalue() print("Read %i KiB of %s data at once from loose odb in %f s ( %f Read KiB / s)" % - (size_kib, desc, elapsed_readall, size_kib / elapsed_readall), file=sys.stderr) + (size_kib, desc, elapsed_readall, size_kib / (elapsed_readall or 1)), file=sys.stderr) # reading in chunks of 1 MiB cs = 512 * 1000 @@ -101,7 +101,7 @@ def test_large_data_streaming(self, path): cs_kib = cs / 1000 print("Read %i KiB of %s data in %i KiB chunks from loose odb in %f s ( %f Read KiB / s)" % - (size_kib, desc, cs_kib, elapsed_readchunks, size_kib / elapsed_readchunks), file=sys.stderr) + (size_kib, desc, cs_kib, elapsed_readchunks, size_kib / (elapsed_readchunks or 1)), file=sys.stderr) # del db file so we keep something to do os.remove(db_file) From d48679a0b15feae754ebe9ef4c9d5809db0c0d08 Mon Sep 17 00:00:00 2001 From: Kostis Anagnostopoulos Date: Sun, 2 Oct 2016 01:10:47 +0200 Subject: [PATCH 0334/2375] tc: HALF FIX of `test_pack_entity ()` + On Windows, you cannot write onto a file held by another live file-pointer (test_pack.py:#L204). + The TC fails later, on clean up (the usual). --- gitdb/test/test_pack.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index 601c0eaba..6e31363bf 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -188,7 +188,8 @@ def test_pack_entity(self, rw_dir): # pack writing - write all packs into one # index path can be None - pack_path = tempfile.mktemp('', "pack", rw_dir) + pack_path1 = tempfile.mktemp('', "pack1", rw_dir) + pack_path2 = tempfile.mktemp('', "pack2", rw_dir) index_path = tempfile.mktemp('', 'index', rw_dir) iteration = 0 @@ -196,7 +197,9 @@ def rewind_streams(): for obj in pack_objs: obj.stream.seek(0) # END utility - for ppath, ipath, num_obj in zip((pack_path, ) * 2, (index_path, None), (len(pack_objs), None)): + for ppath, ipath, num_obj in zip((pack_path1, pack_path2), + (index_path, None), + (len(pack_objs), None)): iwrite = None if ipath: ifile = open(ipath, 'wb') @@ -214,7 +217,7 @@ def rewind_streams(): assert os.path.getsize(ppath) > 100 # verify pack - pf = PackFile(ppath) + pf = PackFile(ppath) # FIXME: Leaks file-pointer(s)! assert pf.size() == len(pack_objs) assert pf.version() == PackFile.pack_version_default assert pf.checksum() == pack_sha From b2eafcc9c99c8b00a4adc2a316e800a9a7dc7319 Mon Sep 17 00:00:00 2001 From: Kostis Anagnostopoulos Date: Sat, 22 Oct 2016 13:02:49 +0200 Subject: [PATCH 0335/2375] fix(MapWindow): unicode foes in read_into_memory() used by gitpython TCs Drop Windows only codepath bypassing memory-mapping due to some leaks in the past. Now Appveyor proves everything run ok. Additionally, this codepath had unicode problems on PY3. So deleting it, fixes 2 TCs in gitpython: + TestRepo.test_file_handle_leaks() + TestObjDbPerformance.test_random_access() See https://github.com/gitpython-developers/GitPython/issues/525 --- smmap/mman.py | 16 ++++++++++------ smmap/util.py | 25 +++---------------------- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index af12ee98f..9df69ed29 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -31,9 +31,9 @@ class WindowCursor(object): __slots__ = ( '_manager', # the manger keeping all file regions '_rlist', # a regions list with regions for our file - '_region', # our current region or None - '_ofs', # relative offset from the actually mapped area to our start area - '_size' # maximum size we should provide + '_region', # our current class:`MapRegion` or None + '_ofs', # relative offset from the actually mapped area to our start area + '_size' # maximum size we should provide ) def __init__(self, manager=None, regions=None): @@ -308,10 +308,14 @@ def _collect_lru_region(self, size): if 0, we try to free any available region :return: Amount of freed regions - **Note:** We don't raise exceptions anymore, in order to keep the system working, allowing temporary overallocation. - If the system runs out of memory, it will tell. + .. Note:: + We don't raise exceptions anymore, in order to keep the system working, allowing temporary overallocation. + If the system runs out of memory, it will tell. - **todo:** implement a case where all unusued regions are discarded efficiently. Currently its only brute force""" + .. TODO:: + implement a case where all unusued regions are discarded efficiently. + Currently its only brute force + """ num_found = 0 while (size == 0) or (self._memory_size + size > self._max_memory_size): lru_region = None diff --git a/smmap/util.py b/smmap/util.py index 36ff1ab89..02df41a13 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -116,16 +116,13 @@ class MapRegion(object): '_size', # cached size of our memory map '__weakref__' ] - _need_compat_layer = sys.version_info[0] < 3 and sys.version_info[1] < 6 + _need_compat_layer = sys.version_info[:2] < (2, 6) if _need_compat_layer: __slots__.append('_mfb') # mapped memory buffer to provide offset # END handle additional slot #{ Configuration - # Used for testing only. If True, all data will be loaded into memory at once. - # This makes sure no file handles will remain open. - _test_read_into_memory = False #} END configuration def __init__(self, path_or_fd, ofs, size, flags=0): @@ -160,10 +157,7 @@ def __init__(self, path_or_fd, ofs, size, flags=0): # bark that the size is too large ... many extra file accesses because # if this ... argh ! actual_size = min(os.fstat(fd).st_size - sizeofs, corrected_size) - if self._test_read_into_memory: - self._mf = self._read_into_memory(fd, ofs, actual_size) - else: - self._mf = mmap(fd, actual_size, **kwargs) + self._mf = mmap(fd, actual_size, **kwargs) # END handle memory mode self._size = len(self._mf) @@ -179,19 +173,6 @@ def __init__(self, path_or_fd, ofs, size, flags=0): # We assume the first one to use us keeps us around self.increment_client_count() - def _read_into_memory(self, fd, offset, size): - """:return: string data as read from the given file descriptor, offset and size """ - os.lseek(fd, offset, os.SEEK_SET) - mf = '' - bytes_todo = size - while bytes_todo: - chunk = 1024 * 1024 - d = os.read(fd, chunk) - bytes_todo -= len(d) - mf += d - # END loop copy items - return mf - def __repr__(self): return "MapRegion<%i, %i>" % (self._b, self.size()) @@ -267,7 +248,7 @@ class MapRegionList(list): """List of MapRegion instances associating a path with a list of regions.""" __slots__ = ( '_path_or_fd', # path or file descriptor which is mapped by all our regions - '_file_size' # total size of the file we map + '_file_size' # total size of the file we map ) def __new__(cls, path): From 6e55a1c70843e5e5e29686176325f309f8285f29 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 22 Oct 2016 16:28:19 +0200 Subject: [PATCH 0336/2375] chore(version): v2.0.1 Better windows support --- smmap/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smmap/__init__.py b/smmap/__init__.py index 8b4059c87..9cfd0a1c1 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/Byron/smmap" -version_info = (2, 0, 0) +version_info = (2, 0, 1) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From a36fbeb41ce0e29d7f4f9eeb301c60032e47577c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 8 Dec 2016 11:58:31 +0100 Subject: [PATCH 0337/2375] doc(readme): make limitations way more prominent Also inform about the likelyhood of leaking system resources. [skip ci] --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 83c674456..247848d04 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,12 @@ When reading from many possibly large files in a fashion similar to random acces Although memory maps have many advantages, they represent a very limited system resource as every map uses one file descriptor, whose amount is limited per process. On 32 bit systems, the amount of memory you can have mapped at a time is naturally limited to theoretical 4GB of memory, which may not be enough for some applications. +## Limitations + +* **System resources (file-handles) are likely to be leaked!** This is due to the library authors reliance on a deterministic `__del__()` destructor. +* The memory access is read-only by design. +* In python below 2.6, memory maps will be created in compatibility mode which works, but creates inefficient memory mappings as they always start at offset 0. + ## Overview @@ -33,11 +39,6 @@ For performance critical 64 bit applications, a simplified version of memory map The package was tested on all of the previously mentioned configurations. -## Limitations - -* The memory access is read-only by design. -* In python below 2.6, memory maps will be created in compatibility mode which works, but creates inefficient memory mappings as they always start at offset 0. - ## Installing smmap [![Documentation Status](https://readthedocs.org/projects/smmap/badge/?version=latest)](https://readthedocs.org/projects/smmap/?badge=latest) From 30329354b370ed6bfac74290ce0c5d2ab17307d1 Mon Sep 17 00:00:00 2001 From: stuertz Date: Sun, 26 Mar 2017 15:45:10 +0200 Subject: [PATCH 0338/2375] Skip Test on Windows Currently renaming files is not supported while the the OS doesn't support renaming open files. When closing the file, as done in the code by using http://smmap.readthedocs.io/en/latest/api.html#smmap.mman.StaticWindowMapManager.force_map_handle_removal_win force_map_handle_removal_win, we can rename, but the cache does still have a handle to this file and crashes. --- gitdb/test/db/test_pack.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index a90158151..e6c2032ca 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -10,13 +10,17 @@ from gitdb.db import PackedDB from gitdb.exc import BadObject, AmbiguousObjectName +from gitdb.util import mman import os import random +import sys +from unittest import skipIf class TestPackDB(TestDBBase): + @skipIf(sys.platform == "win32", "not supported on windows currently") @with_rw_directory @with_packs_rw def test_writing(self, path): @@ -30,6 +34,11 @@ def test_writing(self, path): # packs removed - rename a file, should affect the glob pack_path = pdb.entities()[0].pack().path() new_pack_path = pack_path + "renamed" + if sys.platform == "win32": + # This is just the beginning: While using thsi function, we are not + # allowed to have any handle to thsi path, which is currently not + # the case. The pack caching does have a handle :-( + mman.force_map_handle_removal_win(pack_path) os.rename(pack_path, new_pack_path) pdb.update_cache(force=True) From 57c3a4fc59b6babe71859b2bf92b2b2fc909ce2a Mon Sep 17 00:00:00 2001 From: stuertz Date: Sun, 26 Mar 2017 15:48:07 +0200 Subject: [PATCH 0339/2375] Fixed Tests / Code for Windows. Sometimes the OS or some other process has the handle to file a bit longer, and the file could not be deleted immediatly. Retry 10 Times with 100ms distance. --- gitdb/test/performance/test_stream.py | 4 ++-- gitdb/util.py | 27 +++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/gitdb/test/performance/test_stream.py b/gitdb/test/performance/test_stream.py index 704f4d094..bd8953e15 100644 --- a/gitdb/test/performance/test_stream.py +++ b/gitdb/test/performance/test_stream.py @@ -9,7 +9,7 @@ from gitdb.db import LooseObjectDB from gitdb import IStream -from gitdb.util import bin_to_hex +from gitdb.util import bin_to_hex, remove from gitdb.fun import chunk_size from time import time @@ -104,5 +104,5 @@ def test_large_data_streaming(self, path): (size_kib, desc, cs_kib, elapsed_readchunks, size_kib / (elapsed_readchunks or 1)), file=sys.stderr) # del db file so we keep something to do - os.remove(db_file) + remove(db_file) # END for each randomization factor diff --git a/gitdb/util.py b/gitdb/util.py index 242be4405..95ab9b28c 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -6,6 +6,7 @@ import os import mmap import sys +import time import errno from io import BytesIO @@ -58,7 +59,6 @@ def unpack_from(fmt, data, offset=0): isdir = os.path.isdir isfile = os.path.isfile rename = os.rename -remove = os.remove dirname = os.path.dirname basename = os.path.basename join = os.path.join @@ -67,6 +67,25 @@ def unpack_from(fmt, data, offset=0): close = os.close fsync = os.fsync + +def _retry(func, *args, **kwargs): + # Wrapper around functions, that are problematic on "Windows". Sometimes + # the OS or someone else has still a handle to the file + if sys.platform == "win32": + for _ in xrange(10): + try: + return func(*args, **kwargs) + except Exception: + time.sleep(0.1) + return func(*args, **kwargs) + else: + return func(*args, **kwargs) + + +def remove(*args, **kwargs): + return _retry(os.remove, *args, **kwargs) + + # Backwards compatibility imports from gitdb.const import ( NULL_BIN_SHA, @@ -321,7 +340,7 @@ def open(self, write=False, stream=False): self._fd = os.open(self._filepath, os.O_RDONLY | binary) except: # assure we release our lockfile - os.remove(self._lockfilepath()) + remove(self._lockfilepath()) raise # END handle lockfile # END open descriptor for reading @@ -365,7 +384,7 @@ def _end_writing(self, successful=True): # on windows, rename does not silently overwrite the existing one if sys.platform == "win32": if isfile(self._filepath): - os.remove(self._filepath) + remove(self._filepath) # END remove if exists # END win32 special handling os.rename(lockfile, self._filepath) @@ -376,7 +395,7 @@ def _end_writing(self, successful=True): chmod(self._filepath, int("644", 8)) else: # just delete the file so far, we failed - os.remove(lockfile) + remove(lockfile) # END successful handling #} END utilities From 060e5ea18b010e4d8441a5cfad699aba69593c72 Mon Sep 17 00:00:00 2001 From: stuertz Date: Sun, 26 Mar 2017 22:50:56 +0200 Subject: [PATCH 0340/2375] Release the file handle, before deleting, otherwise win fails. --- gitdb/test/performance/test_stream.py | 1 + 1 file changed, 1 insertion(+) diff --git a/gitdb/test/performance/test_stream.py b/gitdb/test/performance/test_stream.py index bd8953e15..92d28e4a3 100644 --- a/gitdb/test/performance/test_stream.py +++ b/gitdb/test/performance/test_stream.py @@ -104,5 +104,6 @@ def test_large_data_streaming(self, path): (size_kib, desc, cs_kib, elapsed_readchunks, size_kib / (elapsed_readchunks or 1)), file=sys.stderr) # del db file so we keep something to do + ostream = None # To release the file handle (win) remove(db_file) # END for each randomization factor From d6c097eaf759dabfd3c42b55958962b6e9a05063 Mon Sep 17 00:00:00 2001 From: stuertz Date: Mon, 27 Mar 2017 11:20:48 +0200 Subject: [PATCH 0341/2375] close smmap handles, to be able to delete files / trees in process (req. for windows) --- gitdb/pack.py | 12 ++++++++++++ gitdb/test/test_pack.py | 7 +++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/gitdb/pack.py b/gitdb/pack.py index 20a451549..115d94365 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -266,6 +266,10 @@ def __init__(self, indexpath): super(PackIndexFile, self).__init__() self._indexpath = indexpath + def close(self): + mman.force_map_handle_removal_win(self._indexpath) + self._cursor = None + def _set_cache_(self, attr): if attr == "_packfile_checksum": self._packfile_checksum = self._cursor.map()[-40:-20] @@ -527,6 +531,10 @@ class PackFile(LazyMixin): def __init__(self, packpath): self._packpath = packpath + def close(self): + mman.force_map_handle_removal_win(self._packpath) + self._cursor = None + def _set_cache_(self, attr): # we fill the whole cache, whichever attribute gets queried first self._cursor = mman.make_cursor(self._packpath).use_region() @@ -668,6 +676,10 @@ def __init__(self, pack_or_index_path): self._index = self.IndexFileCls("%s.idx" % basename) # PackIndexFile instance self._pack = self.PackFileCls("%s.pack" % basename) # corresponding PackFile instance + def close(self): + self._index.close() + self._pack.close() + def _set_cache_(self, attr): # currently this can only be _offset_map # TODO: make this a simple sorted offset array which can be bisected diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index 6e31363bf..24e2a3134 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -217,10 +217,11 @@ def rewind_streams(): assert os.path.getsize(ppath) > 100 # verify pack - pf = PackFile(ppath) # FIXME: Leaks file-pointer(s)! + pf = PackFile(ppath) assert pf.size() == len(pack_objs) assert pf.version() == PackFile.pack_version_default assert pf.checksum() == pack_sha + pf.close() # verify index if ipath is not None: @@ -231,6 +232,7 @@ def rewind_streams(): assert idx.packfile_checksum() == pack_sha assert idx.indexfile_checksum() == index_sha assert idx.size() == len(pack_objs) + idx.close() # END verify files exist # END for each packpath, indexpath pair @@ -245,7 +247,8 @@ def rewind_streams(): # END for each crc mode # END for each info assert count == len(pack_objs) - + entity.close() + def test_pack_64(self): # TODO: hex-edit a pack helping us to verify that we can handle 64 byte offsets # of course without really needing such a huge pack From 891ac5126540dcb087242f9bb0cadd02ca021324 Mon Sep 17 00:00:00 2001 From: stuertz Date: Mon, 27 Mar 2017 11:36:43 +0200 Subject: [PATCH 0342/2375] Use range instead of xrange, good enough here --- gitdb/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitdb/util.py b/gitdb/util.py index 95ab9b28c..8a1819b6d 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -72,7 +72,7 @@ def _retry(func, *args, **kwargs): # Wrapper around functions, that are problematic on "Windows". Sometimes # the OS or someone else has still a handle to the file if sys.platform == "win32": - for _ in xrange(10): + for _ in range(10): try: return func(*args, **kwargs) except Exception: From bcdffc46e3993d7743b90982009eec49df667ab4 Mon Sep 17 00:00:00 2001 From: stuertz Date: Mon, 27 Mar 2017 11:44:14 +0200 Subject: [PATCH 0343/2375] fixed to be py26 compat --- gitdb/test/db/test_pack.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index e6c2032ca..f6e275126 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -16,14 +16,16 @@ import random import sys -from unittest import skipIf +from nose.plugins.skip import SkipTest class TestPackDB(TestDBBase): - @skipIf(sys.platform == "win32", "not supported on windows currently") @with_rw_directory @with_packs_rw def test_writing(self, path): + if sys.platform == "win32": + raise SkipTest("FIXME: Currently fail on windows") + pdb = PackedDB(path) # on demand, we init our pack cache From 7bced788880015075754ce3645cef3a351166ff4 Mon Sep 17 00:00:00 2001 From: stuertz Date: Mon, 27 Mar 2017 11:46:23 +0200 Subject: [PATCH 0344/2375] Typos --- gitdb/test/db/test_pack.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index f6e275126..9694238bd 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -37,9 +37,9 @@ def test_writing(self, path): pack_path = pdb.entities()[0].pack().path() new_pack_path = pack_path + "renamed" if sys.platform == "win32": - # This is just the beginning: While using thsi function, we are not - # allowed to have any handle to thsi path, which is currently not - # the case. The pack caching does have a handle :-( + # While using this function, we are not allowed to have any handle + # to this path, which is currently not the case. The pack caching + # does still have a handle :-( mman.force_map_handle_removal_win(pack_path) os.rename(pack_path, new_pack_path) From ce7889ef31c41cf5ecdb468a69f7e195b0ea5826 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 28 May 2017 17:59:03 +0200 Subject: [PATCH 0345/2375] chore(version-up): v2.0.2 Include python 3.5/3.6 in list of supported versions, provide signed archives. --- Makefile | 18 +++++++++++++++--- setup.py | 2 ++ smmap/__init__.py | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index ca3051dd4..061588245 100644 --- a/Makefile +++ b/Makefile @@ -12,13 +12,14 @@ all: $(info sdist) doc: - cd docs && make html + cd doc && make html clean-docs: - cd docs && make clean + cd doc && make clean clean-files: git clean -fx + rm -rf build/ dist/ clean: clean-files clean-docs @@ -34,4 +35,15 @@ build: sdist: ./setup.py sdist - +release: clean + # Check if latest tag is the current head we're releasing + echo "Latest tag = $$(git tag | sort -nr | head -n1)" + echo "HEAD SHA = $$(git rev-parse head)" + echo "Latest tag SHA = $$(git tag | sort -nr | head -n1 | xargs git rev-parse)" + @test "$$(git rev-parse head)" = "$$(git tag | sort -nr | head -n1 | xargs git rev-parse)" + make force_release + +force_release: clean + git push --tags + python setup.py sdist bdist_wheel + twine upload -s -i byronimo@gmail.com dist/* diff --git a/setup.py b/setup.py index 2c519e648..800fe4fd1 100755 --- a/setup.py +++ b/setup.py @@ -50,6 +50,8 @@ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", ], long_description=long_description, tests_require=('nose', 'nosexcover'), diff --git a/smmap/__init__.py b/smmap/__init__.py index 9cfd0a1c1..dd9b0781a 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/Byron/smmap" -version_info = (2, 0, 1) +version_info = (2, 0, 2) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From 813166d9a93eff6ea2140c2ba1714aa83feb1d4c Mon Sep 17 00:00:00 2001 From: Joseph LaFreniere Date: Wed, 7 Jun 2017 20:53:57 -0500 Subject: [PATCH 0346/2375] Add MANIFEST.in to include LICENSE in distribution From https://packaging.python.org/distributing/#manifest-in: > A "MANIFEST.in" is needed in certain cases where you need to package > additional files that python setup.py sdist (or bdist_wheel) don't > automatically include. --- MANIFEST.in | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 MANIFEST.in diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 000000000..399a207e6 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,2 @@ +# Include the license file +include LICENSE From 91d506e120d4a0f98cbef202325e301c632445c5 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 10 Jun 2017 18:49:59 +0200 Subject: [PATCH 0347/2375] chore(version-up): v2.0.3 --- smmap/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smmap/__init__.py b/smmap/__init__.py index dd9b0781a..b252c211c 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/Byron/smmap" -version_info = (2, 0, 2) +version_info = (2, 0, 3) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From 3add9cea092514a82931108bbc05a15355900a52 Mon Sep 17 00:00:00 2001 From: wangweichen Date: Thu, 13 Jul 2017 13:55:49 +0800 Subject: [PATCH 0348/2375] fix open encoding error. --- gitdb/db/ref.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitdb/db/ref.py b/gitdb/db/ref.py index 2e3db86db..84f9f6cab 100644 --- a/gitdb/db/ref.py +++ b/gitdb/db/ref.py @@ -41,7 +41,7 @@ def _update_dbs_from_ref_file(self): # try to get as many as possible, don't fail if some are unavailable ref_paths = list() try: - with open(self._ref_file, 'r') as f: + with open(self._ref_file, 'r', encoding="utf-8") as f: ref_paths = [l.strip() for l in f] except (OSError, IOError): pass From 5e0fea5f6b9e47f52d045d0449dd1a09943496a0 Mon Sep 17 00:00:00 2001 From: wangweichen Date: Thu, 13 Jul 2017 14:34:09 +0800 Subject: [PATCH 0349/2375] change codecs to open with support encoding="utf-8" --- gitdb/db/ref.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gitdb/db/ref.py b/gitdb/db/ref.py index 84f9f6cab..94a2f01f8 100644 --- a/gitdb/db/ref.py +++ b/gitdb/db/ref.py @@ -2,6 +2,7 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php +import codecs from gitdb.db.base import ( CompoundDB, ) @@ -41,7 +42,7 @@ def _update_dbs_from_ref_file(self): # try to get as many as possible, don't fail if some are unavailable ref_paths = list() try: - with open(self._ref_file, 'r', encoding="utf-8") as f: + with codecs.open(self._ref_file, 'r', encoding="utf-8") as f: ref_paths = [l.strip() for l in f] except (OSError, IOError): pass From 0d5062eac9d03ea63975446439600e63feb83163 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 28 Sep 2017 10:52:51 +0200 Subject: [PATCH 0350/2375] Upgrade makefile --- Makefile | 16 +++++++++++++++- gitdb/__init__.py | 2 +- gitdb/ext/smmap | 2 +- setup.py | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index c6c159bdc..8cb323e9f 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,21 @@ SETUP = $(PYTHON) setup.py TESTRUNNER = $(shell which nosetests) TESTFLAGS = -all: build +all:: + @grep -Ee '^[a-z].*:' Makefile | cut -d: -f1 | grep -vF all + +release:: clean + # Check if latest tag is the current head we're releasing + echo "Latest tag = $$(git tag | sort -nr | head -n1)" + echo "HEAD SHA = $$(git rev-parse head)" + echo "Latest tag SHA = $$(git tag | sort -nr | head -n1 | xargs git rev-parse)" + @test "$$(git rev-parse head)" = "$$(git tag | sort -nr | head -n1 | xargs git rev-parse)" + make force_release + +force_release:: clean + git push --tags + python3 setup.py sdist bdist_wheel + twine upload -s -i byronimo@gmail.com dist/* doc:: make -C doc/ html diff --git a/gitdb/__init__.py b/gitdb/__init__.py index bfa083bb3..e184e4b1f 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (2, 0, 0) +version_info = (2, 0, 3) __version__ = '.'.join(str(i) for i in version_info) diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index ac5df7061..91d506e12 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit ac5df7061ee11232346b3d0eb3aa5b43eebc847d +Subproject commit 91d506e120d4a0f98cbef202325e301c632445c5 diff --git a/setup.py b/setup.py index f7e3761ab..4bff11dff 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (2, 0, 0) +version_info = (2, 0, 3) __version__ = '.'.join(str(i) for i in version_info) setup( From ed3ecbbe7b05433f6c70410a3f1fda1ae85508a3 Mon Sep 17 00:00:00 2001 From: Nathan Goldbaum Date: Thu, 3 Aug 2017 09:46:50 -0500 Subject: [PATCH 0351/2375] Update homepage --- smmap/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smmap/__init__.py b/smmap/__init__.py index b252c211c..725c420ea 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -2,7 +2,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" -__homepage__ = "https://github.com/Byron/smmap" +__homepage__ = "https://github.com/gitpython-developers/smmap" version_info = (2, 0, 3) __version__ = '.'.join(str(i) for i in version_info) From 90c4f25493b918ff9dc4ee52ae8216a554bb3446 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 29 Sep 2017 13:16:49 +0200 Subject: [PATCH 0352/2375] Add python 3.6 to the testing suite --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index ba0beaa7b..7288a2acb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,7 @@ python: - "3.3" - "3.4" - "3.5" + - "3.6" # - "pypy" - won't work as smmap doesn't work (see smmap/.travis.yml for details) git: From a4ca69e9c93d00185dc729e68f2ef86ffe138410 Mon Sep 17 00:00:00 2001 From: Michael Overmeyer Date: Mon, 5 Mar 2018 20:06:45 +0000 Subject: [PATCH 0353/2375] Switched broken pypip.in badges to shields.io --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index ca51dfaba..917b403b0 100644 --- a/README.rst +++ b/README.rst @@ -6,10 +6,10 @@ GitDB allows you to access bare git repositories for reading and writing. It aim Installation ============ -.. image:: https://pypip.in/version/gitdb/badge.svg +.. image:: https://img.shields.io/pypi/v/gitdb.svg :target: https://pypi.python.org/pypi/gitdb/ :alt: Latest Version -.. image:: https://pypip.in/py_versions/gitdb/badge.svg +.. image:: https://img.shields.io/pypi/pyversions/gitdb.svg :target: https://pypi.python.org/pypi/gitdb/ :alt: Supported Python versions .. image:: https://readthedocs.org/projects/gitdb/badge/?version=latest From 857196a7312209eed5c84fca857ab6c486bcbd6b Mon Sep 17 00:00:00 2001 From: Hugo Date: Fri, 7 Sep 2018 21:29:54 +0300 Subject: [PATCH 0354/2375] Drop support for EOL Python --- .travis.yml | 2 -- gitdb/util.py | 5 +---- setup.py | 4 +--- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7288a2acb..1341a1d9d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,6 @@ language: python python: - - "2.6" - "2.7" - - "3.3" - "3.4" - "3.5" - "3.6" diff --git a/gitdb/util.py b/gitdb/util.py index 8a1819b6d..d680f9766 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -19,10 +19,7 @@ # initialize our global memory manager instance # Use it to free cached (and unused) resources. -if sys.version_info < (2, 6): - mman = StaticWindowMapManager() -else: - mman = SlidingWindowMapManager() +mman = SlidingWindowMapManager() # END handle mman import hashlib diff --git a/setup.py b/setup.py index 4bff11dff..931596472 100755 --- a/setup.py +++ b/setup.py @@ -22,6 +22,7 @@ zip_safe=False, install_requires=['smmap2 >= 2.0.0'], long_description="""GitDB is a pure-Python git object database""", + python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*', # See https://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ "Development Status :: 5 - Production/Stable", @@ -34,11 +35,8 @@ "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.2", - "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", ] From 140104a7ecb3dfb5c43b57c4829b9d7142b4aeaf Mon Sep 17 00:00:00 2001 From: Hugo Date: Fri, 7 Sep 2018 21:32:56 +0300 Subject: [PATCH 0355/2375] Upgrade Python syntax with pyupgrade https://github.com/asottile/pyupgrade --- gitdb/db/pack.py | 2 +- gitdb/db/ref.py | 2 +- gitdb/test/lib.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gitdb/db/pack.py b/gitdb/db/pack.py index 6b03d8383..1e37d738e 100644 --- a/gitdb/db/pack.py +++ b/gitdb/db/pack.py @@ -148,7 +148,7 @@ def update_cache(self, force=False): # packs are supposed to be prefixed with pack- by git-convention # get all pack files, figure out what changed pack_files = set(glob.glob(os.path.join(self.root_path(), "pack-*.pack"))) - our_pack_files = set(item[1].pack().path() for item in self._entities) + our_pack_files = {item[1].pack().path() for item in self._entities} # new packs for pack_file in (pack_files - our_pack_files): diff --git a/gitdb/db/ref.py b/gitdb/db/ref.py index 94a2f01f8..2bb1de790 100644 --- a/gitdb/db/ref.py +++ b/gitdb/db/ref.py @@ -49,7 +49,7 @@ def _update_dbs_from_ref_file(self): # END handle alternates ref_paths_set = set(ref_paths) - cur_ref_paths_set = set(db.root_path() for db in self._dbs) + cur_ref_paths_set = {db.root_path() for db in self._dbs} # remove existing for path in (cur_ref_paths_set - ref_paths_set): diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index bbdd241cd..ab1842dbd 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -86,7 +86,7 @@ def wrapper(self): try: return func(self, path) except Exception: - sys.stderr.write("Test %s.%s failed, output is at %r\n" % (type(self).__name__, func.__name__, path)) + sys.stderr.write("Test {}.{} failed, output is at {!r}\n".format(type(self).__name__, func.__name__, path)) keep = True raise finally: From 186db667f703b695c2914040e98d7977f6e61272 Mon Sep 17 00:00:00 2001 From: Hugo Date: Fri, 7 Sep 2018 21:36:22 +0300 Subject: [PATCH 0356/2375] Python 3.6 is tested and supported --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 931596472..27bb75429 100755 --- a/setup.py +++ b/setup.py @@ -39,5 +39,6 @@ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", ] ) From 3e28e6e896543814ea312baa9ba6c6065caba797 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 13 Oct 2018 12:41:52 +0200 Subject: [PATCH 0357/2375] Bump patch level: remove support for old python versions --- gitdb/__init__.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index e184e4b1f..344c3de01 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (2, 0, 3) +version_info = (2, 0, 4) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index 27bb75429..ea6ba189f 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (2, 0, 3) +version_info = (2, 0, 4) __version__ = '.'.join(str(i) for i in version_info) setup( From b1adf606f416f82ec69cd83cfc2b94cddc6928bd Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 13 Oct 2018 12:45:29 +0200 Subject: [PATCH 0358/2375] Another version bump... dunno what happened there. --- gitdb/__init__.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 344c3de01..a2d26245b 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (2, 0, 4) +version_info = (2, 0, 5) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index ea6ba189f..27eb65c8e 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (2, 0, 4) +version_info = (2, 0, 5) __version__ = '.'.join(str(i) for i in version_info) setup( From 54a34e8976587762df7b02ef09b0150c065fb9e1 Mon Sep 17 00:00:00 2001 From: Hugo Date: Fri, 7 Sep 2018 22:04:27 +0300 Subject: [PATCH 0359/2375] Drop support for EOL Python --- .travis.yml | 5 ----- README.md | 3 +-- doc/source/intro.rst | 3 +-- setup.py | 6 ++---- smmap/buf.py | 43 ++++++++++++++----------------------------- smmap/util.py | 38 +------------------------------------- tox.ini | 2 +- 7 files changed, 20 insertions(+), 80 deletions(-) diff --git a/.travis.yml b/.travis.yml index 464fafb2e..ff77ede15 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,6 @@ language: python python: - # These versions are unsupported by travis, even though smmap claims to still support these outdated versions - # - 2.4 - # - 2.5 - - 2.6 - 2.7 - - 3.3 - 3.4 - 3.5 install: diff --git a/README.md b/README.md index 247848d04..08702930e 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ Although memory maps have many advantages, they represent a very limited system * **System resources (file-handles) are likely to be leaked!** This is due to the library authors reliance on a deterministic `__del__()` destructor. * The memory access is read-only by design. -* In python below 2.6, memory maps will be created in compatibility mode which works, but creates inefficient memory mappings as they always start at offset 0. ## Overview @@ -34,7 +33,7 @@ For performance critical 64 bit applications, a simplified version of memory map ## Prerequisites -* Python 2.4, 2.5, 2.6, 2.7 or 3.3 +* Python 2.7 or 3.4+ * OSX, Windows or Linux The package was tested on all of the previously mentioned configurations. diff --git a/doc/source/intro.rst b/doc/source/intro.rst index 15f5bf08a..8f7cf3c26 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -22,7 +22,7 @@ For performance critical 64 bit applications, a simplified version of memory map ############# Prerequisites ############# -* Python 2.4, 2.5, 2.6, 2.7 or 3.3 +* Python 2.7 or 3.4+ * OSX, Windows or Linux The package was tested on all of the previously mentioned configurations. @@ -31,7 +31,6 @@ The package was tested on all of the previously mentioned configurations. Limitations ########### * The memory access is read-only by design. -* In python below 2.6, memory maps will be created in compatibility mode which works, but creates inefficient memory mappings as they always start at offset 0. ################ Installing smmap diff --git a/setup.py b/setup.py index 800fe4fd1..23347a3e3 100755 --- a/setup.py +++ b/setup.py @@ -13,12 +13,12 @@ if os.path.exists("README.md"): long_description = codecs.open('README.md', "r", "utf-8").read() else: - long_description = "See http://github.com/gitpython-developers/smmap" + long_description = "See https://github.com/gitpython-developers/smmap" setup( name="smmap2", version=smmap.__version__, - description="A pure python implementation of a sliding window memory map manager", + description="A pure Python implementation of a sliding window memory map manager", author=smmap.__author__, author_email=smmap.__contact__, url=smmap.__homepage__, @@ -45,10 +45,8 @@ "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", diff --git a/smmap/buf.py b/smmap/buf.py index 438292b60..786775a8b 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -88,35 +88,20 @@ def __getslice__(self, i, j): # It's fastest to keep tokens and join later, especially in py3, which was 7 times slower # in the previous iteration of this code pyvers = sys.version_info[:2] - if (3, 0) <= pyvers <= (3, 3): - # Memory view cannot be joined below python 3.4 ... - out = bytes() - while l: - c.use_region(ofs, l) - assert c.is_valid() - d = c.buffer()[:l] - ofs += len(d) - l -= len(d) - # This is slower than the join ... but what can we do ... - out += d - del(d) - # END while there are bytes to read - return out - else: - md = list() - while l: - c.use_region(ofs, l) - assert c.is_valid() - d = c.buffer()[:l] - ofs += len(d) - l -= len(d) - # Make sure we don't keep references, as c.use_region() might attempt to free resources, but - # can't unless we use pure bytes - if hasattr(d, 'tobytes'): - d = d.tobytes() - md.append(d) - # END while there are bytes to read - return bytes().join(md) + md = list() + while l: + c.use_region(ofs, l) + assert c.is_valid() + d = c.buffer()[:l] + ofs += len(d) + l -= len(d) + # Make sure we don't keep references, as c.use_region() might attempt to free resources, but + # can't unless we use pure bytes + if hasattr(d, 'tobytes'): + d = d.tobytes() + md.append(d) + # END while there are bytes to read + return bytes().join(md) # END fast or slow path #{ Interface diff --git a/smmap/util.py b/smmap/util.py index 02df41a13..defef1f32 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -3,13 +3,7 @@ import sys from mmap import mmap, ACCESS_READ -try: - from mmap import ALLOCATIONGRANULARITY -except ImportError: - # in python pre 2.6, the ALLOCATIONGRANULARITY does not exist as it is mainly - # useful for aligning the offset. The offset argument doesn't exist there though - from mmap import PAGESIZE as ALLOCATIONGRANULARITY -# END handle pythons missing quality assurance +from mmap import ALLOCATIONGRANULARITY __all__ = ["align_to_mmap", "is_64_bit", "buffer", "MapWindow", "MapRegion", "MapRegionList", "ALLOCATIONGRANULARITY"] @@ -116,11 +110,6 @@ class MapRegion(object): '_size', # cached size of our memory map '__weakref__' ] - _need_compat_layer = sys.version_info[:2] < (2, 6) - - if _need_compat_layer: - __slots__.append('_mfb') # mapped memory buffer to provide offset - # END handle additional slot #{ Configuration #} END configuration @@ -147,11 +136,6 @@ def __init__(self, path_or_fd, ofs, size, flags=0): kwargs = dict(access=ACCESS_READ, offset=ofs) corrected_size = size sizeofs = ofs - if self._need_compat_layer: - del(kwargs['offset']) - corrected_size += ofs - sizeofs = 0 - # END handle python not supporting offset ! Arg # have to correct size, otherwise (instead of the c version) it will # bark that the size is too large ... many extra file accesses because @@ -161,10 +145,6 @@ def __init__(self, path_or_fd, ofs, size, flags=0): # END handle memory mode self._size = len(self._mf) - - if self._need_compat_layer: - self._mfb = buffer(self._mf, ofs, self._size) - # END handle buffer wrapping finally: if isinstance(path_or_fd, string_types()): os.close(fd) @@ -224,22 +204,6 @@ def release(self): """Release all resources this instance might hold. Must only be called if there usage_count() is zero""" self._mf.close() - # re-define all methods which need offset adjustments in compatibility mode - if _need_compat_layer: - def size(self): - return self._size - self._b - - def ofs_end(self): - # always the size - we are as large as it gets - return self._size - - def buffer(self): - return self._mfb - - def includes_ofs(self, ofs): - return self._b <= ofs < self._size - # END handle compat layer - #} END interface diff --git a/tox.ini b/tox.ini index 35b813753..74ca3481d 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ # and then run "tox" from this directory. [tox] -envlist = flake8, py26, py27, py33, py34 +envlist = flake8, py27, py34 [testenv] commands = nosetests {posargs:--with-coverage --cover-package=smmap} From 68a94764aeffe9b90f82f82bbf7d166cfdfacc87 Mon Sep 17 00:00:00 2001 From: Hugo Date: Fri, 7 Sep 2018 22:07:12 +0300 Subject: [PATCH 0360/2375] Add python_requires to help pip --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 23347a3e3..9136339ae 100755 --- a/setup.py +++ b/setup.py @@ -26,6 +26,7 @@ license="BSD", packages=find_packages(), zip_safe=True, + python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", classifiers=[ # Picked from # http://pypi.python.org/pypi?:action=list_classifiers From 48e9e30b0ef3c24ac7ed88e6e3bfa37dc945bf4c Mon Sep 17 00:00:00 2001 From: Hugo Date: Fri, 7 Sep 2018 22:07:54 +0300 Subject: [PATCH 0361/2375] Test Python 3.6 --- .travis.yml | 1 + tox.ini | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ff77ede15..9cccb75cf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,7 @@ python: - 2.7 - 3.4 - 3.5 + - 3.6 install: - pip install coveralls script: diff --git a/tox.ini b/tox.ini index 74ca3481d..d1f558bc0 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ # and then run "tox" from this directory. [tox] -envlist = flake8, py27, py34 +envlist = flake8, py27, py34, py35, py36 [testenv] commands = nosetests {posargs:--with-coverage --cover-package=smmap} From 53944ab34f18d05135ab4b507e718eccfe699248 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 13 Oct 2018 12:56:00 +0200 Subject: [PATCH 0362/2375] bump patch; remove old python versions --- smmap/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smmap/__init__.py b/smmap/__init__.py index 725c420ea..1728b832f 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/smmap" -version_info = (2, 0, 3) +version_info = (2, 0, 5) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From 2f075234b84511ee63b74e69ccc8ddc331de1199 Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Mon, 15 Oct 2018 10:51:19 +0100 Subject: [PATCH 0363/2375] Tell PyPI long_description is Markdown Rendering of the README on PyPI is broken because it expects RST by default and Markdown is being uploaded. This fixes it. --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 9136339ae..09755dac5 100755 --- a/setup.py +++ b/setup.py @@ -53,6 +53,7 @@ "Programming Language :: Python :: 3.6", ], long_description=long_description, + long_description_content_type='text/markdown', tests_require=('nose', 'nosexcover'), test_suite='nose.collector' ) From 0e4b57d4511686d1aeb5479a7aa0dad3a5338d6e Mon Sep 17 00:00:00 2001 From: xarx00 Date: Fri, 5 Apr 2019 10:46:53 +0200 Subject: [PATCH 0364/2375] Fix for UnicodeEncodeError in git.Repo.clone_from() when path contains non-ascii characters --- gitdb/utils/encoding.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitdb/utils/encoding.py b/gitdb/utils/encoding.py index 4d270af9d..d8fd59a4a 100644 --- a/gitdb/utils/encoding.py +++ b/gitdb/utils/encoding.py @@ -8,7 +8,7 @@ text_type = unicode -def force_bytes(data, encoding="ascii"): +def force_bytes(data, encoding="utf-8"): if isinstance(data, bytes): return data From a0060cfdc9166bb0b3104e8015faf0689aa6daf1 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 20 Jul 2019 18:45:04 +0800 Subject: [PATCH 0365/2375] Associate smmap2 on pypi with this repository Fixes #43 --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 08702930e..c7a38173c 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,10 @@ Issues can be filed on github: * https://github.com/gitpython-developers/smmap/issues +A link to the pypi page related to this repository: + +* https://pypi.org/project/smmap2/ + ## License Information From 79b705f061b51dc151a00729b722fbdebde59f5c Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Wed, 25 Sep 2019 21:00:30 +0300 Subject: [PATCH 0366/2375] loose: rename only if needed Our user was experiencing issue [1] when using a git repository on NTFS mount running on Linux. The current check checks if we are running on Windows, but it should really check if we are on NTFS. And since checking fs type is not that trivial and not efficient, it is simpler and better to just always apply NTFS-specific logic, since it works on other filesystems as well. [1] https://github.com/iterative/dvc/issues/1880#issuecomment-483253764 --- gitdb/db/loose.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index 192c524af..53ade9f79 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -225,16 +225,12 @@ def store(self, istream): if not isdir(obj_dir): mkdir(obj_dir) # END handle destination directory - # rename onto existing doesn't work on windows - if os.name == 'nt': - if isfile(obj_path): - remove(tmp_path) - else: - rename(tmp_path, obj_path) - # end rename only if needed + # rename onto existing doesn't work on NTFS + if isfile(obj_path): + remove(tmp_path) else: rename(tmp_path, obj_path) - # END handle win32 + # end rename only if needed # make sure its readable for all ! It started out as rw-- tmp file # but needs to be rwrr From d77bd023a61419effe77184c52ccf3e19afa6f60 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 28 Sep 2019 13:21:35 +0200 Subject: [PATCH 0367/2375] Bump version --- gitdb/__init__.py | 2 +- gitdb/ext/smmap | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index e184e4b1f..344c3de01 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (2, 0, 3) +version_info = (2, 0, 4) __version__ = '.'.join(str(i) for i in version_info) diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 91d506e12..a0060cfdc 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 91d506e120d4a0f98cbef202325e301c632445c5 +Subproject commit a0060cfdc9166bb0b3104e8015faf0689aa6daf1 diff --git a/setup.py b/setup.py index 27bb75429..ea6ba189f 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (2, 0, 3) +version_info = (2, 0, 4) __version__ = '.'.join(str(i) for i in version_info) setup( From 43e16318e9ab95f146e230afe0a7cbdc848473fe Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 28 Sep 2019 13:28:50 +0200 Subject: [PATCH 0368/2375] bump version again... --- gitdb/__init__.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 344c3de01..4e884076b 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (2, 0, 4) +version_info = (2, 0, 6) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index ea6ba189f..6a2174fce 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (2, 0, 4) +version_info = (2, 0, 6) __version__ = '.'.join(str(i) for i in version_info) setup( From 7729239951b5561f5bb5c2d5152ff76833b11826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Wed, 8 Jan 2020 09:36:55 +0100 Subject: [PATCH 0369/2375] Fix deprecated calls for Python 3.9 The array methods fromstring/tostring have been deprecated since Python 3.2. Python 3.9 removes them completely. This was discovered when trying to build gitdb package for Fedora 33. https://bugzilla.redhat.com/show_bug.cgi?id=1788660 --- gitdb/pack.py | 2 +- gitdb/test/lib.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gitdb/pack.py b/gitdb/pack.py index 115d94365..2ad2324eb 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -410,7 +410,7 @@ def offsets(self): if self._version == 2: # read stream to array, convert to tuple a = array.array('I') # 4 byte unsigned int, long are 8 byte on 64 bit it appears - a.fromstring(buffer(self._cursor.map(), self._pack_offset, self._pack_64_offset - self._pack_offset)) + a.frombytes(buffer(self._cursor.map(), self._pack_offset, self._pack_64_offset - self._pack_offset)) # networkbyteorder to something array likes more if sys.byteorder == 'little': diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index ab1842dbd..42b9ddc7e 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -157,7 +157,7 @@ def make_bytes(size_in_bytes, randomize=False): random.shuffle(producer) # END randomize a = array('i', producer) - return a.tostring() + return a.tobytes() def make_object(type, data): From c880f6b0550770eee559091d6276a2e2b097a83a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 15 Feb 2020 09:41:05 +0800 Subject: [PATCH 0370/2375] don't test python 2.7 anymore, support is dropped --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1341a1d9d..17d63804d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,5 @@ language: python python: - - "2.7" - "3.4" - "3.5" - "3.6" From 2f9a799a6c9d125012bb09473bbfe6110f2a7391 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 15 Feb 2020 09:59:38 +0800 Subject: [PATCH 0371/2375] remove appveyor It is slow, it fails, and windows support seems unmaintained, besides always having been an incredible time sink. Thanks to everyone who brought GitDb to where it is right now, and I am happy to bring windows testing back if a maintainer can be found. --- .appveyor.yml | 49 ------------------------------------------------- 1 file changed, 49 deletions(-) delete mode 100644 .appveyor.yml diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index 2daadaa4d..000000000 --- a/.appveyor.yml +++ /dev/null @@ -1,49 +0,0 @@ -# CI on Windows via appveyor -environment: - - matrix: - ## MINGW - # - - PYTHON: "C:\\Python27" - PYTHON_VERSION: "2.7" - - PYTHON: "C:\\Python34-x64" - PYTHON_VERSION: "3.4" - - PYTHON: "C:\\Python35-x64" - PYTHON_VERSION: "3.5" - - PYTHON: "C:\\Miniconda35-x64" - PYTHON_VERSION: "3.5" - IS_CONDA: "yes" - -install: - - set PATH=%PYTHON%;%PYTHON%\Scripts;%PATH% - - ## Print configuration for debugging. - # - - | - echo %PATH% - uname -a - where python pip pip2 pip3 pip34 - python --version - python -c "import struct; print(struct.calcsize('P') * 8)" - - - IF "%IS_CONDA%"=="yes" ( - conda info -a & - conda install --yes --quiet pip - ) - - pip install nose wheel coveralls - - ## For commits performed with the default user. - - | - git config --global user.email "travis@ci.com" - git config --global user.name "Travis Runner" - - - pip install -e . - -build: false - -test_script: - - IF "%PYTHON_VERSION%"=="3.5" ( - nosetests -v --with-coverage - ) ELSE ( - nosetests -v - ) From df73d7f6874ff11be1b09f65c8dc425671bb924e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 15 Feb 2020 10:01:11 +0800 Subject: [PATCH 0372/2375] Release 3.0.0 --- gitdb/__init__.py | 2 +- setup.py | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 4e884076b..c9c827970 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (2, 0, 6) +version_info = (3, 0, 0) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index 6a2174fce..a66267e48 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (2, 0, 6) +version_info = (3, 0, 0) __version__ = '.'.join(str(i) for i in version_info) setup( @@ -22,7 +22,7 @@ zip_safe=False, install_requires=['smmap2 >= 2.0.0'], long_description="""GitDB is a pure-Python git object database""", - python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*', + python_requires='>=3.4', # See https://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ "Development Status :: 5 - Production/Stable", @@ -34,11 +34,10 @@ "Operating System :: Microsoft :: Windows", "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7" ] ) From e6ee8bf864c726a5461600de28d64c1f06f4e163 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 15 Feb 2020 10:03:50 +0800 Subject: [PATCH 0373/2375] Change package signature to the only yubikey I can use right now --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 8cb323e9f..82c0a3bc8 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ release:: clean force_release:: clean git push --tags python3 setup.py sdist bdist_wheel - twine upload -s -i byronimo@gmail.com dist/* + twine upload -s -i 763629FEC8788FC35128B5F6EE029D1E5EB40300 dist/* doc:: make -C doc/ html From d6d1550a1e8dc327d5b310228a66f25a59d6ce9f Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 15 Feb 2020 14:19:38 -0600 Subject: [PATCH 0374/2375] Remove badges for no longer existing Issue Stats site from README --- README.rst | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.rst b/README.rst index 917b403b0..9febff0ed 100644 --- a/README.rst +++ b/README.rst @@ -56,10 +56,6 @@ DEVELOPMENT :target: https://ci.appveyor.com/project/ankostis/gitpython/branch/master) .. image:: https://coveralls.io/repos/gitpython-developers/gitdb/badge.png :target: https://coveralls.io/r/gitpython-developers/gitdb -.. image:: http://www.issuestats.com/github/gitpython-developers/gitdb/badge/pr - :target: http://www.issuestats.com/github/gitpython-developers/gitdb -.. image:: http://www.issuestats.com/github/gitpython-developers/gitdb/badge/issue - :target: http://www.issuestats.com/github/gitpython-developers/gitdb The library is considered mature, and not under active development. It's primary (known) use is in git-python. From 58bce6bd1051e4fd5df7c5c8123a1783cc6e9f84 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 16 Feb 2020 07:06:35 -0600 Subject: [PATCH 0375/2375] Remove and replace compat.izip --- gitdb/fun.py | 4 ++-- gitdb/pack.py | 3 +-- gitdb/utils/compat.py | 2 -- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/gitdb/fun.py b/gitdb/fun.py index 8ca38c867..3a2248fa1 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -16,7 +16,7 @@ from gitdb.const import NULL_BYTE, BYTE_SPACE from gitdb.utils.encoding import force_text -from gitdb.utils.compat import izip, buffer, xrange, PY3 +from gitdb.utils.compat import buffer, xrange, PY3 from gitdb.typ import ( str_blob_type, str_commit_type, @@ -314,7 +314,7 @@ def check_integrity(self, target_size=-1): right.next() # this is very pythonic - we might have just use index based access here, # but this could actually be faster - for lft, rgt in izip(left, right): + for lft, rgt in zip(left, right): assert lft.rbound() == rgt.to assert lft.to + lft.ts == rgt.to # END for each pair diff --git a/gitdb/pack.py b/gitdb/pack.py index 2ad2324eb..748df3880 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -63,7 +63,6 @@ from gitdb.const import NULL_BYTE from gitdb.utils.compat import ( - izip, buffer, xrange, to_bytes @@ -696,7 +695,7 @@ def _set_cache_(self, attr): iter_offsets = iter(offsets_sorted) iter_offsets_plus_one = iter(offsets_sorted) next(iter_offsets_plus_one) - consecutive = izip(iter_offsets, iter_offsets_plus_one) + consecutive = zip(iter_offsets, iter_offsets_plus_one) offset_map = dict(consecutive) diff --git a/gitdb/utils/compat.py b/gitdb/utils/compat.py index a7899cb14..586f3bb9d 100644 --- a/gitdb/utils/compat.py +++ b/gitdb/utils/compat.py @@ -3,11 +3,9 @@ PY3 = sys.version_info[0] == 3 try: - from itertools import izip xrange = xrange except ImportError: # py3 - izip = zip xrange = range # end handle python version From 73a9f7965139e319446c04bbcc9794a8db0de45a Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 16 Feb 2020 07:07:51 -0600 Subject: [PATCH 0376/2375] Remove and replace izip in TestPack --- gitdb/test/test_pack.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index 24e2a3134..dd1c8302b 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -27,11 +27,6 @@ from gitdb.util import to_bin_sha from gitdb.utils.compat import xrange -try: - from itertools import izip -except ImportError: - izip = zip - from nose import SkipTest import os @@ -155,7 +150,7 @@ def test_pack_entity(self, rw_dir): pack_objs.extend(entity.stream_iter()) count = 0 - for info, stream in izip(entity.info_iter(), entity.stream_iter()): + for info, stream in zip(entity.info_iter(), entity.stream_iter()): count += 1 assert info.binsha == stream.binsha assert len(info.binsha) == 20 From 4a692fdd43e67810509b1c1843fa203714b14f0e Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 16 Feb 2020 07:13:00 -0600 Subject: [PATCH 0377/2375] Remove and replace compat.xrange --- gitdb/db/pack.py | 3 +-- gitdb/fun.py | 4 ++-- gitdb/pack.py | 9 ++++----- gitdb/test/db/lib.py | 3 +-- gitdb/test/lib.py | 3 +-- gitdb/test/performance/test_pack.py | 3 +-- gitdb/test/test_pack.py | 3 +-- gitdb/utils/compat.py | 7 ------- 8 files changed, 11 insertions(+), 24 deletions(-) diff --git a/gitdb/db/pack.py b/gitdb/db/pack.py index 1e37d738e..177ed7bb2 100644 --- a/gitdb/db/pack.py +++ b/gitdb/db/pack.py @@ -18,7 +18,6 @@ ) from gitdb.pack import PackEntity -from gitdb.utils.compat import xrange from functools import reduce @@ -107,7 +106,7 @@ def sha_iter(self): for entity in self.entities(): index = entity.index() sha_by_index = index.sha - for index in xrange(index.size()): + for index in range(index.size()): yield sha_by_index(index) # END for each index # END for each entity diff --git a/gitdb/fun.py b/gitdb/fun.py index 3a2248fa1..7203de978 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -16,7 +16,7 @@ from gitdb.const import NULL_BYTE, BYTE_SPACE from gitdb.utils.encoding import force_text -from gitdb.utils.compat import buffer, xrange, PY3 +from gitdb.utils.compat import buffer, PY3 from gitdb.typ import ( str_blob_type, str_commit_type, @@ -264,7 +264,7 @@ def compress(self): # if first_data_index is not None: nd = StringIO() # new data so = self[first_data_index].to # start offset in target buffer - for x in xrange(first_data_index, i - 1): + for x in range(first_data_index, i - 1): xdc = self[x] nd.write(xdc.data[:xdc.ts]) # END collect data diff --git a/gitdb/pack.py b/gitdb/pack.py index 748df3880..f01055493 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -64,7 +64,6 @@ from gitdb.const import NULL_BYTE from gitdb.utils.compat import ( buffer, - xrange, to_bytes ) @@ -206,7 +205,7 @@ def write(self, pack_sha, write): for t in self._objs: tmplist[byte_ord(t[0][0])] += 1 # END prepare fanout - for i in xrange(255): + for i in range(255): v = tmplist[i] sha_write(pack('>L', v)) tmplist[i + 1] += v @@ -375,7 +374,7 @@ def _read_fanout(self, byte_offset): d = self._cursor.map() out = list() append = out.append - for i in xrange(256): + for i in range(256): append(unpack_from('>L', d, byte_offset + i * 4)[0]) # END for each entry return out @@ -416,7 +415,7 @@ def offsets(self): a.byteswap() return a else: - return tuple(self.offset(index) for index in xrange(self.size())) + return tuple(self.offset(index) for index in range(self.size())) # END handle version def sha_to_index(self, sha): @@ -715,7 +714,7 @@ def _iter_objects(self, as_stream): """Iterate over all objects in our index and yield their OInfo or OStream instences""" _sha = self._index.sha _object = self._object - for index in xrange(self._index.size()): + for index in range(self._index.size()): yield _object(_sha(index), as_stream, index) # END for each index diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index 528bcc144..c6f4316cd 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -23,7 +23,6 @@ from gitdb.exc import BadObject from gitdb.typ import str_blob_type -from gitdb.utils.compat import xrange from io import BytesIO @@ -45,7 +44,7 @@ def _assert_object_writing_simple(self, db): # write a bunch of objects and query their streams and info null_objs = db.size() ni = 250 - for i in xrange(ni): + for i in range(ni): data = pack(">L", i) istream = IStream(str_blob_type, len(data), BytesIO(data)) new_istream = db.store(istream) diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index 42b9ddc7e..a04084f5f 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -4,7 +4,6 @@ # the New BSD License: http://www.opensource.org/licenses/bsd-license.php """Utilities used in ODB testing""" from gitdb import OStream -from gitdb.utils.compat import xrange import sys import random @@ -151,7 +150,7 @@ def make_bytes(size_in_bytes, randomize=False): """:return: string with given size in bytes :param randomize: try to produce a very random stream""" actual_size = size_in_bytes // 4 - producer = xrange(actual_size) + producer = range(actual_size) if randomize: producer = list(producer) random.shuffle(producer) diff --git a/gitdb/test/performance/test_pack.py b/gitdb/test/performance/test_pack.py index fc8d9d54f..b59d5a971 100644 --- a/gitdb/test/performance/test_pack.py +++ b/gitdb/test/performance/test_pack.py @@ -17,7 +17,6 @@ from gitdb.typ import str_blob_type from gitdb.exc import UnsupportedOperation from gitdb.db.pack import PackedDB -from gitdb.utils.compat import xrange from gitdb.test.lib import skip_on_travis_ci import sys @@ -118,7 +117,7 @@ def test_correctness(self): for entity in pdb.entities(): pack_verify = entity.is_valid_stream sha_by_index = entity.index().sha - for index in xrange(entity.index().size()): + for index in range(entity.index().size()): try: assert pack_verify(sha_by_index(index), use_crc=crc) count += 1 diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index dd1c8302b..8bf78f0d2 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -25,7 +25,6 @@ from gitdb.fun import delta_types from gitdb.exc import UnsupportedOperation from gitdb.util import to_bin_sha -from gitdb.utils.compat import xrange from nose import SkipTest @@ -58,7 +57,7 @@ def _assert_index_file(self, index, version, size): assert len(index.offsets()) == size # get all data of all objects - for oidx in xrange(index.size()): + for oidx in range(index.size()): sha = index.sha(oidx) assert oidx == index.sha_to_index(sha) diff --git a/gitdb/utils/compat.py b/gitdb/utils/compat.py index 586f3bb9d..99e7ae654 100644 --- a/gitdb/utils/compat.py +++ b/gitdb/utils/compat.py @@ -2,13 +2,6 @@ PY3 = sys.version_info[0] == 3 -try: - xrange = xrange -except ImportError: - # py3 - xrange = range -# end handle python version - try: # Python 2 buffer = buffer From 3d14cc84b0a5e42d755d24d77a6e4af6bea8c3c1 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 16 Feb 2020 07:36:03 -0600 Subject: [PATCH 0378/2375] Remove and replace compat.buffer --- gitdb/fun.py | 8 ++++---- gitdb/pack.py | 11 ++++------- gitdb/stream.py | 5 ++--- gitdb/utils/compat.py | 10 ---------- 4 files changed, 10 insertions(+), 24 deletions(-) diff --git a/gitdb/fun.py b/gitdb/fun.py index 7203de978..92b8b1c70 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -16,7 +16,7 @@ from gitdb.const import NULL_BYTE, BYTE_SPACE from gitdb.utils.encoding import force_text -from gitdb.utils.compat import buffer, PY3 +from gitdb.utils.compat import PY3 from gitdb.typ import ( str_blob_type, str_commit_type, @@ -101,7 +101,7 @@ def delta_chunk_apply(dc, bbuf, write): :param write: write method to call with data to write""" if dc.data is None: # COPY DATA FROM SOURCE - write(buffer(bbuf, dc.so, dc.ts)) + write(bbuf[dc.so:dc.so + dc.ts]) else: # APPEND DATA # whats faster: if + 4 function calls or just a write with a slice ? @@ -698,7 +698,7 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): if (rbound < cp_size or rbound > src_buf_size): break - write(buffer(src_buf, cp_off, cp_size)) + write(src_buf[cp_off:cp_off + cp_size]) elif c: write(db[i:i + c]) i += c @@ -741,7 +741,7 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): if (rbound < cp_size or rbound > src_buf_size): break - write(buffer(src_buf, cp_off, cp_size)) + write(src_buf[cp_off:cp_off + cp_size]) elif c: write(db[i:i + c]) i += c diff --git a/gitdb/pack.py b/gitdb/pack.py index f01055493..68da2b7fb 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -62,10 +62,7 @@ from binascii import crc32 from gitdb.const import NULL_BYTE -from gitdb.utils.compat import ( - buffer, - to_bytes -) +from gitdb.utils.compat import to_bytes import tempfile import array @@ -117,7 +114,7 @@ def pack_object_at(cursor, offset, as_stream): # END handle type id abs_data_offset = offset + total_rela_offset if as_stream: - stream = DecompressMemMapReader(buffer(data, total_rela_offset), False, uncomp_size) + stream = DecompressMemMapReader(data[total_rela_offset:], False, uncomp_size) if delta_info is None: return abs_data_offset, OPackStream(offset, type_id, uncomp_size, stream) else: @@ -408,7 +405,7 @@ def offsets(self): if self._version == 2: # read stream to array, convert to tuple a = array.array('I') # 4 byte unsigned int, long are 8 byte on 64 bit it appears - a.frombytes(buffer(self._cursor.map(), self._pack_offset, self._pack_64_offset - self._pack_offset)) + a.frombytes(self._cursor.map()[self._pack_offset:self._pack_64_offset]) # networkbyteorder to something array likes more if sys.byteorder == 'little': @@ -836,7 +833,7 @@ def is_valid_stream(self, sha, use_crc=False): while cur_pos < next_offset: rbound = min(cur_pos + chunk_size, next_offset) size = rbound - cur_pos - this_crc_value = crc_update(buffer(pack_data, cur_pos, size), this_crc_value) + this_crc_value = crc_update(pack_data[cur_pos:cur_pos + size], this_crc_value) cur_pos += size # END window size loop diff --git a/gitdb/stream.py b/gitdb/stream.py index 2f4c12dfb..b94ef245d 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -27,7 +27,6 @@ ) from gitdb.const import NULL_BYTE, BYTE_SPACE -from gitdb.utils.compat import buffer from gitdb.utils.encoding import force_bytes has_perf_mod = False @@ -278,7 +277,7 @@ def read(self, size=-1): # END adjust winsize # takes a slice, but doesn't copy the data, it says ... - indata = buffer(self._m, self._cws, self._cwe - self._cws) + indata = self._m[self._cws:self._cwe] # get the actual window end to be sure we don't use it for computations self._cwe = self._cws + len(indata) @@ -414,7 +413,7 @@ def _set_cache_brute_(self, attr): buf = dstream.read(512) # read the header information + X offset, src_size = msb_size(buf) offset, target_size = msb_size(buf, offset) - buffer_info_list.append((buffer(buf, offset), offset, src_size, target_size)) + buffer_info_list.append((buf[offset:], offset, src_size, target_size)) max_target_size = max(max_target_size, target_size) # END for each delta stream diff --git a/gitdb/utils/compat.py b/gitdb/utils/compat.py index 99e7ae654..8c7c06bd7 100644 --- a/gitdb/utils/compat.py +++ b/gitdb/utils/compat.py @@ -4,22 +4,12 @@ try: # Python 2 - buffer = buffer memoryview = buffer # Assume no memory view ... def to_bytes(i): return i except NameError: # Python 3 has no `buffer`; only `memoryview` - # However, it's faster to just slice the object directly, maybe it keeps a view internally - def buffer(obj, offset, size=None): - if size is None: - # return memoryview(obj)[offset:] - return obj[offset:] - else: - # return memoryview(obj)[offset:offset+size] - return obj[offset:offset + size] - # end buffer reimplementation # smmap can return memory view objects, which can't be compared as buffers/bytes can ... def to_bytes(i): if isinstance(i, memoryview): From d1c20d559a1f264dad12d1033a052ffc1c159260 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 16 Feb 2020 07:37:34 -0600 Subject: [PATCH 0379/2375] Remove compat.memoryview --- gitdb/utils/compat.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/gitdb/utils/compat.py b/gitdb/utils/compat.py index 8c7c06bd7..d5791edcf 100644 --- a/gitdb/utils/compat.py +++ b/gitdb/utils/compat.py @@ -4,20 +4,15 @@ try: # Python 2 - memoryview = buffer - # Assume no memory view ... def to_bytes(i): return i except NameError: - # Python 3 has no `buffer`; only `memoryview` # smmap can return memory view objects, which can't be compared as buffers/bytes can ... def to_bytes(i): if isinstance(i, memoryview): return i.tobytes() return i - memoryview = memoryview - try: MAXSIZE = sys.maxint except AttributeError: From 59c053ee05d6e5f50f8699260aa0e362b567c033 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 16 Feb 2020 07:54:24 -0600 Subject: [PATCH 0380/2375] Remove and replace compat.to_bytes --- gitdb/pack.py | 7 +++++-- gitdb/utils/compat.py | 11 ----------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/gitdb/pack.py b/gitdb/pack.py index 68da2b7fb..a38468e37 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -62,7 +62,6 @@ from binascii import crc32 from gitdb.const import NULL_BYTE -from gitdb.utils.compat import to_bytes import tempfile import array @@ -877,7 +876,11 @@ def collect_streams_at_offset(self, offset): stream = streams[-1] while stream.type_id in delta_types: if stream.type_id == REF_DELTA: - sindex = self._index.sha_to_index(to_bytes(stream.delta_info)) + # smmap can return memory view objects, which can't be compared as buffers/bytes can ... + if isinstance(stream.delta_info, memoryview): + sindex = self._index.sha_to_index(stream.delta_info.tobytes()) + else: + sindex = self._index.sha_to_index(stream.delta_info) if sindex is None: break stream = self._pack.stream(self._index.offset(sindex)) diff --git a/gitdb/utils/compat.py b/gitdb/utils/compat.py index d5791edcf..6909c53e0 100644 --- a/gitdb/utils/compat.py +++ b/gitdb/utils/compat.py @@ -2,17 +2,6 @@ PY3 = sys.version_info[0] == 3 -try: - # Python 2 - def to_bytes(i): - return i -except NameError: - # smmap can return memory view objects, which can't be compared as buffers/bytes can ... - def to_bytes(i): - if isinstance(i, memoryview): - return i.tobytes() - return i - try: MAXSIZE = sys.maxint except AttributeError: From 321c3b46b4792cf83bf0c5814d5a1a43cdf6933d Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 16 Feb 2020 07:57:23 -0600 Subject: [PATCH 0381/2375] Remove and replace compat.MAXSIZE --- gitdb/db/loose.py | 4 ++-- gitdb/utils/compat.py | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index 53ade9f79..7bf92dacf 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -50,11 +50,11 @@ stream_copy ) -from gitdb.utils.compat import MAXSIZE from gitdb.utils.encoding import force_bytes import tempfile import os +import sys __all__ = ('LooseObjectDB', ) @@ -196,7 +196,7 @@ def store(self, istream): if istream.binsha is not None: # copy as much as possible, the actual uncompressed item size might # be smaller than the compressed version - stream_copy(istream.read, writer.write, MAXSIZE, self.stream_chunk_size) + stream_copy(istream.read, writer.write, sys.maxsize, self.stream_chunk_size) else: # write object with header, we have to make a new one write_object(istream.type, istream.size, istream.read, writer.write, diff --git a/gitdb/utils/compat.py b/gitdb/utils/compat.py index 6909c53e0..c4264748d 100644 --- a/gitdb/utils/compat.py +++ b/gitdb/utils/compat.py @@ -1,8 +1,3 @@ import sys PY3 = sys.version_info[0] == 3 - -try: - MAXSIZE = sys.maxint -except AttributeError: - MAXSIZE = sys.maxsize From c41268071bba593cecd420c400603e094f40a6dc Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 16 Feb 2020 08:01:00 -0600 Subject: [PATCH 0382/2375] Remove and replace encoding.string_types --- gitdb/utils/encoding.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/gitdb/utils/encoding.py b/gitdb/utils/encoding.py index 4d270af9d..156f01677 100644 --- a/gitdb/utils/encoding.py +++ b/gitdb/utils/encoding.py @@ -1,10 +1,8 @@ from gitdb.utils import compat if compat.PY3: - string_types = (str, ) text_type = str else: - string_types = (basestring, ) text_type = unicode @@ -12,7 +10,7 @@ def force_bytes(data, encoding="ascii"): if isinstance(data, bytes): return data - if isinstance(data, string_types): + if isinstance(data, str): return data.encode(encoding) return data From 77dc809542d15c40dbe60ff55cd830082c3ad904 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 16 Feb 2020 08:02:08 -0600 Subject: [PATCH 0383/2375] Remove and replace encoding.text_type --- gitdb/utils/encoding.py | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/gitdb/utils/encoding.py b/gitdb/utils/encoding.py index 156f01677..25ebeadd7 100644 --- a/gitdb/utils/encoding.py +++ b/gitdb/utils/encoding.py @@ -1,11 +1,3 @@ -from gitdb.utils import compat - -if compat.PY3: - text_type = str -else: - text_type = unicode - - def force_bytes(data, encoding="ascii"): if isinstance(data, bytes): return data @@ -17,13 +9,10 @@ def force_bytes(data, encoding="ascii"): def force_text(data, encoding="utf-8"): - if isinstance(data, text_type): + if isinstance(data, str): return data if isinstance(data, bytes): return data.decode(encoding) - if compat.PY3: - return text_type(data, encoding) - else: - return text_type(data) + return str(data, encoding) From db9a65e3b0eceb9c52359273afb3313860e5e322 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 16 Feb 2020 08:11:54 -0600 Subject: [PATCH 0384/2375] Remove compat.PY3 --- gitdb/fun.py | 211 ++++++++++++++---------------------------- gitdb/utils/compat.py | 3 - 2 files changed, 67 insertions(+), 147 deletions(-) delete mode 100644 gitdb/utils/compat.py diff --git a/gitdb/fun.py b/gitdb/fun.py index 92b8b1c70..98465975d 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -16,7 +16,6 @@ from gitdb.const import NULL_BYTE, BYTE_SPACE from gitdb.utils.encoding import force_text -from gitdb.utils.compat import PY3 from gitdb.typ import ( str_blob_type, str_commit_type, @@ -424,20 +423,12 @@ def pack_object_header_info(data): type_id = (c >> 4) & 7 # numeric type size = c & 15 # starting size s = 4 # starting bit-shift size - if PY3: - while c & 0x80: - c = byte_ord(data[i]) - i += 1 - size += (c & 0x7f) << s - s += 7 - # END character loop - else: - while c & 0x80: - c = ord(data[i]) - i += 1 - size += (c & 0x7f) << s - s += 7 - # END character loop + while c & 0x80: + c = byte_ord(data[i]) + i += 1 + size += (c & 0x7f) << s + s += 7 + # END character loop # end performance at expense of maintenance ... return (type_id, size, i) @@ -450,28 +441,16 @@ def create_pack_object_header(obj_type, obj_size): :param obj_type: pack type_id of the object :param obj_size: uncompressed size in bytes of the following object stream""" c = 0 # 1 byte - if PY3: - hdr = bytearray() # output string - - c = (obj_type << 4) | (obj_size & 0xf) - obj_size >>= 4 - while obj_size: - hdr.append(c | 0x80) - c = obj_size & 0x7f - obj_size >>= 7 - # END until size is consumed - hdr.append(c) - else: - hdr = bytes() # output string - - c = (obj_type << 4) | (obj_size & 0xf) - obj_size >>= 4 - while obj_size: - hdr += chr(c | 0x80) - c = obj_size & 0x7f - obj_size >>= 7 - # END until size is consumed - hdr += chr(c) + hdr = bytearray() # output string + + c = (obj_type << 4) | (obj_size & 0xf) + obj_size >>= 4 + while obj_size: + hdr.append(c | 0x80) + c = obj_size & 0x7f + obj_size >>= 7 + # END until size is consumed + hdr.append(c) # end handle interpreter return hdr @@ -484,26 +463,15 @@ def msb_size(data, offset=0): i = 0 l = len(data) hit_msb = False - if PY3: - while i < l: - c = data[i + offset] - size |= (c & 0x7f) << i * 7 - i += 1 - if not c & 0x80: - hit_msb = True - break - # END check msb bit - # END while in range - else: - while i < l: - c = ord(data[i + offset]) - size |= (c & 0x7f) << i * 7 - i += 1 - if not c & 0x80: - hit_msb = True - break - # END check msb bit - # END while in range + while i < l: + c = data[i + offset] + size |= (c & 0x7f) << i * 7 + i += 1 + if not c & 0x80: + hit_msb = True + break + # END check msb bit + # END while in range # end performance ... if not hit_msb: raise AssertionError("Could not find terminating MSB byte in data stream") @@ -663,93 +631,48 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): **Note:** transcribed to python from the similar routine in patch-delta.c""" i = 0 db = delta_buf - if PY3: - while i < delta_buf_size: - c = db[i] - i += 1 - if c & 0x80: - cp_off, cp_size = 0, 0 - if (c & 0x01): - cp_off = db[i] - i += 1 - if (c & 0x02): - cp_off |= (db[i] << 8) - i += 1 - if (c & 0x04): - cp_off |= (db[i] << 16) - i += 1 - if (c & 0x08): - cp_off |= (db[i] << 24) - i += 1 - if (c & 0x10): - cp_size = db[i] - i += 1 - if (c & 0x20): - cp_size |= (db[i] << 8) - i += 1 - if (c & 0x40): - cp_size |= (db[i] << 16) - i += 1 - - if not cp_size: - cp_size = 0x10000 - - rbound = cp_off + cp_size - if (rbound < cp_size or - rbound > src_buf_size): - break - write(src_buf[cp_off:cp_off + cp_size]) - elif c: - write(db[i:i + c]) - i += c - else: - raise ValueError("unexpected delta opcode 0") - # END handle command byte - # END while processing delta data - else: - while i < delta_buf_size: - c = ord(db[i]) - i += 1 - if c & 0x80: - cp_off, cp_size = 0, 0 - if (c & 0x01): - cp_off = ord(db[i]) - i += 1 - if (c & 0x02): - cp_off |= (ord(db[i]) << 8) - i += 1 - if (c & 0x04): - cp_off |= (ord(db[i]) << 16) - i += 1 - if (c & 0x08): - cp_off |= (ord(db[i]) << 24) - i += 1 - if (c & 0x10): - cp_size = ord(db[i]) - i += 1 - if (c & 0x20): - cp_size |= (ord(db[i]) << 8) - i += 1 - if (c & 0x40): - cp_size |= (ord(db[i]) << 16) - i += 1 - - if not cp_size: - cp_size = 0x10000 - - rbound = cp_off + cp_size - if (rbound < cp_size or - rbound > src_buf_size): - break - write(src_buf[cp_off:cp_off + cp_size]) - elif c: - write(db[i:i + c]) - i += c - else: - raise ValueError("unexpected delta opcode 0") - # END handle command byte - # END while processing delta data - # end save byte_ord call and prevent performance regression in py2 + while i < delta_buf_size: + c = db[i] + i += 1 + if c & 0x80: + cp_off, cp_size = 0, 0 + if (c & 0x01): + cp_off = db[i] + i += 1 + if (c & 0x02): + cp_off |= (db[i] << 8) + i += 1 + if (c & 0x04): + cp_off |= (db[i] << 16) + i += 1 + if (c & 0x08): + cp_off |= (db[i] << 24) + i += 1 + if (c & 0x10): + cp_size = db[i] + i += 1 + if (c & 0x20): + cp_size |= (db[i] << 8) + i += 1 + if (c & 0x40): + cp_size |= (db[i] << 16) + i += 1 + + if not cp_size: + cp_size = 0x10000 + + rbound = cp_off + cp_size + if (rbound < cp_size or + rbound > src_buf_size): + break + write(src_buf[cp_off:cp_off + cp_size]) + elif c: + write(db[i:i + c]) + i += c + else: + raise ValueError("unexpected delta opcode 0") + # END handle command byte + # END while processing delta data # yes, lets use the exact same error message that git uses :) assert i == delta_buf_size, "delta replay has gone wild" diff --git a/gitdb/utils/compat.py b/gitdb/utils/compat.py deleted file mode 100644 index c4264748d..000000000 --- a/gitdb/utils/compat.py +++ /dev/null @@ -1,3 +0,0 @@ -import sys - -PY3 = sys.version_info[0] == 3 From 5dd0f302f101e66d9d70a3b17ce0f379b4db214b Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 17 Feb 2020 09:15:48 +0800 Subject: [PATCH 0385/2375] bump version to 3.0.1 --- doc/source/changes.rst | 6 ++++++ gitdb/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 22deb6db3..9d3b2dca2 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,12 @@ Changelog ######### +***** +3.0.1 +***** + +* removed all python2 compatibility shims, GitDB now is a Python 3 program. + ***** 0.6.1 ***** diff --git a/gitdb/__init__.py b/gitdb/__init__.py index c9c827970..6fa31e470 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (3, 0, 0) +version_info = (3, 0, 1) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index a66267e48..12cebcd66 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (3, 0, 0) +version_info = (3, 0, 1) __version__ = '.'.join(str(i) for i in version_info) setup( From f356e12766480852d0e30ae7b786cdf5f24d8cea Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 17 Feb 2020 11:16:43 +0800 Subject: [PATCH 0386/2375] Now with PR: 3.0.2 --- doc/source/changes.rst | 2 +- gitdb/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 9d3b2dca2..aa7a8901c 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -3,7 +3,7 @@ Changelog ######### ***** -3.0.1 +3.0.2 ***** * removed all python2 compatibility shims, GitDB now is a Python 3 program. diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 6fa31e470..5a52cf205 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (3, 0, 1) +version_info = (3, 0, 2) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index 12cebcd66..a66b229f3 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (3, 0, 1) +version_info = (3, 0, 2) __version__ = '.'.join(str(i) for i in version_info) setup( From 02de02cbd938015ff6ba3e668da4e641fdd74c4a Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 22 Feb 2020 16:25:56 -0600 Subject: [PATCH 0387/2375] Restrict smmap2 version to <3 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a66b229f3..49cbf3650 100755 --- a/setup.py +++ b/setup.py @@ -20,7 +20,7 @@ packages=('gitdb', 'gitdb.db', 'gitdb.utils', 'gitdb.test'), license="BSD License", zip_safe=False, - install_requires=['smmap2 >= 2.0.0'], + install_requires=['smmap2>=2,<3'], long_description="""GitDB is a pure-Python git object database""", python_requires='>=3.4', # See https://pypi.python.org/pypi?%3Aaction=list_classifiers From 139811a89279482c4df9cddb7d7e69d2e2c36c47 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 22 Feb 2020 16:26:11 -0600 Subject: [PATCH 0388/2375] Update requirements.txt --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ed4898ec2..92b887293 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -smmap>=0.8.3 +smmap2>=2,<3 From 09aa35b62ed341124a7b4757acf35b849a7a39ad Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 22 Feb 2020 18:15:58 -0600 Subject: [PATCH 0389/2375] Improve changelog for v3.0.2 --- doc/source/changes.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index aa7a8901c..e4d4ebc14 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -6,7 +6,8 @@ Changelog 3.0.2 ***** -* removed all python2 compatibility shims, GitDB now is a Python 3 program. +* Removed Python 2 compatibility shims + (`#56 `_) ***** 0.6.1 From 541472db1dcae538875f95216f1655652aa30181 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 23 Feb 2020 09:31:01 +0800 Subject: [PATCH 0390/2375] Change package name to 'smmap'; bump version to 3.0.0 https://github.com/gitpython-developers/smmap/issues/44 --- README.md | 2 +- setup.py | 2 +- smmap/__init__.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c7a38173c..175bc3445 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ Issues can be filed on github: A link to the pypi page related to this repository: -* https://pypi.org/project/smmap2/ +* https://pypi.org/project/smmap/ ## License Information diff --git a/setup.py b/setup.py index 9136339ae..ea02f457b 100755 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ long_description = "See https://github.com/gitpython-developers/smmap" setup( - name="smmap2", + name="smmap", version=smmap.__version__, description="A pure Python implementation of a sliding window memory map manager", author=smmap.__author__, diff --git a/smmap/__init__.py b/smmap/__init__.py index 1728b832f..2bdf05543 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/smmap" -version_info = (2, 0, 5) +version_info = (3, 0, 0) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From 1b92f4f4a4ff2bd1057b2b3fcf472e78c3d7abc3 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 23 Feb 2020 09:33:52 +0800 Subject: [PATCH 0391/2375] Update makefile to sign with new signature --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 061588245..328c836b9 100644 --- a/Makefile +++ b/Makefile @@ -43,7 +43,7 @@ release: clean @test "$$(git rev-parse head)" = "$$(git tag | sort -nr | head -n1 | xargs git rev-parse)" make force_release -force_release: clean +force_release:: clean git push --tags - python setup.py sdist bdist_wheel - twine upload -s -i byronimo@gmail.com dist/* + python3 setup.py sdist bdist_wheel + twine upload -s -i 763629FEC8788FC35128B5F6EE029D1E5EB40300 dist/* From 74aef73b0dd1f97b89f95f67500ae9c4c405ff15 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 23 Feb 2020 00:00:54 -0600 Subject: [PATCH 0392/2375] v3.0.3.post1 --- doc/source/changes.rst | 15 +++++++++++++++ gitdb/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index e4d4ebc14..ac4b477d4 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,21 @@ Changelog ######### +*********** +3.0.3.post1 +*********** + +* Fixed changelogs for v3.0.2 and v3.0.3 + +***** +3.0.3 +***** + +* Changed ``force_bytes`` to use UTF-8 encoding by default + (`#49 `_) +* Restricted smmap2 version requirement to < 3 +* Updated requirements.txt + ***** 3.0.2 ***** diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 5a52cf205..b6a0341c8 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (3, 0, 2) +version_info = (3, 0, 3, "post1") __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index 49cbf3650..b79dcb29f 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (3, 0, 2) +version_info = (3, 0, 3, "post1") __version__ = '.'.join(str(i) for i in version_info) setup( From 72698cc333654430a2cc8bd103dc5994d95b3f1b Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 23 Feb 2020 08:27:32 -0600 Subject: [PATCH 0393/2375] Remove carriage returns in setup.py long_description Mitigates https://github.com/pypa/setuptools/issues/1440 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 6b71e6795..f0c67ad2d 100755 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ import smmap if os.path.exists("README.md"): - long_description = codecs.open('README.md', "r", "utf-8").read() + long_description = codecs.open('README.md', "r", "utf-8").read().replace('\r\n', '\n') else: long_description = "See https://github.com/gitpython-developers/smmap" From d076f665dae16bd03eeb9df862860d54968eda84 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 23 Feb 2020 08:32:24 -0600 Subject: [PATCH 0394/2375] v3.0.1 --- doc/source/changes.rst | 8 ++++++++ smmap/__init__.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index f99e85fb7..e9c2662ef 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,14 @@ Changelog ######### +****** +v3.0.1 +****** +- Switched back to the smmap package name on PyPI and fixed the smmap2 mirror package + (`#44 `_) +- Fixed setup.py ``long_description`` rendering + (`#40 `_) + ********** v0.9.0 ********** diff --git a/smmap/__init__.py b/smmap/__init__.py index 2bdf05543..40861f5be 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/smmap" -version_info = (3, 0, 0) +version_info = (3, 0, 1) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From 253dfe7092f83229d9e99059e7c51f678a557fd2 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sun, 23 Feb 2020 09:13:36 -0600 Subject: [PATCH 0395/2375] v4.0.1 --- doc/source/changes.rst | 10 ++++++++++ gitdb/__init__.py | 2 +- gitdb/ext/smmap | 2 +- requirements.txt | 2 +- setup.py | 6 +++--- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index ac4b477d4..236b9543e 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,16 @@ Changelog ######### +***** +4.0.1 +***** + +* Switched back to the gitdb package name on PyPI and fixed the gitdb2 mirror package + (`#59 `_) +* Switched back to require smmap package and fixed version requirement to >= 3.0.1, < 4 + (`#59 `_) +* Updated smmap submodule + *********** 3.0.3.post1 *********** diff --git a/gitdb/__init__.py b/gitdb/__init__.py index b6a0341c8..5d68ccbe9 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (3, 0, 3, "post1") +version_info = (4, 0, 1) __version__ = '.'.join(str(i) for i in version_info) diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index a0060cfdc..d076f665d 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit a0060cfdc9166bb0b3104e8015faf0689aa6daf1 +Subproject commit d076f665dae16bd03eeb9df862860d54968eda84 diff --git a/requirements.txt b/requirements.txt index 92b887293..b6ccf50fa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -smmap2>=2,<3 +smmap>=3.0.1,<4 diff --git a/setup.py b/setup.py index b79dcb29f..7617583eb 100755 --- a/setup.py +++ b/setup.py @@ -7,11 +7,11 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (3, 0, 3, "post1") +version_info = (4, 0, 1) __version__ = '.'.join(str(i) for i in version_info) setup( - name="gitdb2", + name="gitdb", version=__version__, description="Git Object Database", author=__author__, @@ -20,7 +20,7 @@ packages=('gitdb', 'gitdb.db', 'gitdb.utils', 'gitdb.test'), license="BSD License", zip_safe=False, - install_requires=['smmap2>=2,<3'], + install_requires=['smmap>=3.0.1,<4'], long_description="""GitDB is a pure-Python git object database""", python_requires='>=3.4', # See https://pypi.python.org/pypi?%3Aaction=list_classifiers From 02d83a8bad286eba61de54616f1df183825800de Mon Sep 17 00:00:00 2001 From: Nicusor97 Date: Mon, 24 Feb 2020 17:56:18 +0200 Subject: [PATCH 0396/2375] Remove setup.cfg because the gitdb dropped Python 2 support --- setup.cfg | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 setup.cfg diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 3c6e79cf3..000000000 --- a/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[bdist_wheel] -universal=1 From 9b0309553be36cd188b3fd7d2ab95e7497a5e80d Mon Sep 17 00:00:00 2001 From: Harmon Date: Mon, 24 Feb 2020 10:45:10 -0600 Subject: [PATCH 0397/2375] v4.0.2 --- doc/source/changes.rst | 7 +++++++ gitdb/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 236b9543e..1e91121da 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,13 @@ Changelog ######### +***** +4.0.2 +***** + +* Updated to release as Pure Python Wheel rather than Universal Wheel + (`#62 `_) + ***** 4.0.1 ***** diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 5d68ccbe9..df1f242d4 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -29,7 +29,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 1) +version_info = (4, 0, 2) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index 7617583eb..d1100991a 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 1) +version_info = (4, 0, 2) __version__ = '.'.join(str(i) for i in version_info) setup( From 77b39e915ef32ca83fb61276128e41e5d7886dc2 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 13:57:34 +0800 Subject: [PATCH 0398/2375] Create pythonpackage.yml --- .github/workflows/pythonpackage.yml | 44 +++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/workflows/pythonpackage.yml diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml new file mode 100644 index 000000000..4c67fbf5b --- /dev/null +++ b/.github/workflows/pythonpackage.yml @@ -0,0 +1,44 @@ +# This workflow will install Python dependencies, run tests and lint with a variety of Python versions +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: Python package + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.5, 3.6, 3.7, 3.8] + + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 1000 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: Lint with flake8 + run: | + pip install flake8 + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - name: Test with nose + run: | + pip install nose + ulimit -n 48 + ulimit -n + nosetests -v From cc21afae16d00291ea97cc1f159a4c268b94a198 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:08:42 +0800 Subject: [PATCH 0399/2375] Replace travis with github actions --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 9febff0ed..05511a716 100644 --- a/README.rst +++ b/README.rst @@ -50,8 +50,8 @@ Run the tests with DEVELOPMENT =========== -.. image:: https://travis-ci.org/gitpython-developers/gitdb.svg?branch=master - :target: https://travis-ci.org/gitpython-developers/gitdb +.. image:: https://github.com/gitpython-developers/gitdb/workflows/Python%20package/badge.svg + :target: https://github.com/gitpython-developers/gitdb/actions .. image:: https://ci.appveyor.com/api/projects/status/2qa4km4ln7bfv76r/branch/master?svg=true&passingText=windows%20OK&failingText=windows%20failed :target: https://ci.appveyor.com/project/ankostis/gitpython/branch/master) .. image:: https://coveralls.io/repos/gitpython-developers/gitdb/badge.png From e6cc702bf8fdd5e742ed77d607e7b697d27bcfef Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:09:05 +0800 Subject: [PATCH 0400/2375] don't try to use __file__ when using pyoxidizer --- gitdb/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index df1f242d4..2b06b24bb 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -13,7 +13,8 @@ def _init_externals(): """Initialize external projects by putting them into the path""" for module in ('smmap',): - sys.path.append(os.path.join(os.path.dirname(__file__), 'ext', module)) + if 'PYOXIDIZER' not in os.environ: + sys.path.append(os.path.join(os.path.dirname(__file__), 'ext', module)) try: __import__(module) From aa1275255741ce55722a72c932c45fc43e501d58 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:16:01 +0800 Subject: [PATCH 0401/2375] Add github actions --- .github/workflows/pythonpackage.yml | 44 +++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/workflows/pythonpackage.yml diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml new file mode 100644 index 000000000..4c67fbf5b --- /dev/null +++ b/.github/workflows/pythonpackage.yml @@ -0,0 +1,44 @@ +# This workflow will install Python dependencies, run tests and lint with a variety of Python versions +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: Python package + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.5, 3.6, 3.7, 3.8] + + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 1000 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: Lint with flake8 + run: | + pip install flake8 + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - name: Test with nose + run: | + pip install nose + ulimit -n 48 + ulimit -n + nosetests -v From b22f159593594111c513daddf3ad55c5bb0ba7f9 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:19:26 +0800 Subject: [PATCH 0402/2375] Fix github actions - no dependencies need to be installed --- .github/workflows/pythonpackage.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 4c67fbf5b..4f06a18d9 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -28,7 +28,6 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install -r requirements.txt - name: Lint with flake8 run: | pip install flake8 From 2ceedc91958dc080b31e426150610eef52774f5f Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:21:10 +0800 Subject: [PATCH 0403/2375] Remove basestring reference, no py2 support --- smmap/util.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/smmap/util.py b/smmap/util.py index defef1f32..13604c581 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -23,11 +23,7 @@ def buffer(obj, offset, size): def string_types(): - if sys.version_info[0] >= 3: - return str - else: - return basestring - + return str def align_to_mmap(num, round_up): """ From ebec89621ed48b5cba97b695fda28389fafaa0a1 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:23:23 +0800 Subject: [PATCH 0404/2375] Update badges to represent reality --- .appveyor.yml | 1 + .travis.yml | 1 + README.md | 4 +--- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 2daadaa4d..2090a0569 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -1,3 +1,4 @@ +# NOT USED, just for reference. See github actions for CI configuration # CI on Windows via appveyor environment: diff --git a/.travis.yml b/.travis.yml index 9cccb75cf..50e5b97e1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ +# NOT USED, just for reference. See github actions for CI configuration language: python python: - 2.7 diff --git a/README.md b/README.md index 175bc3445..780168e31 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,7 @@ Although memory maps have many advantages, they represent a very limited system ## Overview -[![Build Status](https://travis-ci.org/gitpython-developers/smmap.svg?branch=master)](https://travis-ci.org/gitpython-developers/smmap) -[![Build status](https://ci.appveyor.com/api/projects/status/kuws846av5lvmugo?svg=true&passingText=windows%20OK&failingText=windows%20failed)](https://ci.appveyor.com/project/Byron/smmap) -[![Coverage Status](https://coveralls.io/repos/gitpython-developers/smmap/badge.png)](https://coveralls.io/r/gitpython-developers/smmap) +![Python package](https://github.com/gitpython-developers/smmap/workflows/Python%20package/badge.svg) [![Issue Stats](http://www.issuestats.com/github/gitpython-developers/smmap/badge/pr)](http://www.issuestats.com/github/gitpython-developers/smmap) [![Issue Stats](http://www.issuestats.com/github/gitpython-developers/smmap/badge/issue)](http://www.issuestats.com/github/gitpython-developers/smmap) From f4d7a58b4d96200cd057a38a0758d3c84901f57e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:25:21 +0800 Subject: [PATCH 0405/2375] bump patch level --- doc/source/changes.rst | 6 ++++++ smmap/__init__.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index e9c2662ef..e5b0e79ce 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,12 @@ Changelog ######### +****** +v3.0.2 +****** + +- signed release + ****** v3.0.1 ****** diff --git a/smmap/__init__.py b/smmap/__init__.py index 40861f5be..72df0cf3a 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/smmap" -version_info = (3, 0, 1) +version_info = (3, 0, 2) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From 57d3f7544820f9fd4202f4ebd0f198c43c8e575d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:35:01 +0800 Subject: [PATCH 0406/2375] bump patch level; mark travis-ci as unused --- .travis.yml | 1 + gitdb/ext/smmap | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 17d63804d..b980d36e9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ +# NOT USED, just for reference. See github actions for CI configuration language: python python: - "3.4" diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index d076f665d..f4d7a58b4 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit d076f665dae16bd03eeb9df862860d54968eda84 +Subproject commit f4d7a58b4d96200cd057a38a0758d3c84901f57e diff --git a/setup.py b/setup.py index d1100991a..e8f8d68c4 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 2) +version_info = (4, 0, 3) __version__ = '.'.join(str(i) for i in version_info) setup( From 0002408bc03033ed90041d04c4547343a1505537 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:37:37 +0800 Subject: [PATCH 0407/2375] update changelog; remove sublime text (editor) configuration --- doc/source/changes.rst | 6 ++++ etc/sublime-text/gitdb.sublime-project | 44 -------------------------- 2 files changed, 6 insertions(+), 44 deletions(-) delete mode 100644 etc/sublime-text/gitdb.sublime-project diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 1e91121da..3c116c309 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,12 @@ Changelog ######### +***** +4.0.3 +***** + +* Support for PyOxidizer + ***** 4.0.2 ***** diff --git a/etc/sublime-text/gitdb.sublime-project b/etc/sublime-text/gitdb.sublime-project deleted file mode 100644 index d0e2e5132..000000000 --- a/etc/sublime-text/gitdb.sublime-project +++ /dev/null @@ -1,44 +0,0 @@ -{ - "folders": - [ - // GITDB - //////// - { - "follow_symlinks": true, - "path": "../..", - "file_exclude_patterns" : [ - "*.sublime-workspace", - ".git", - ".noseids", - ".coverage" - ], - "folder_exclude_patterns" : [ - ".git", - "cover", - "gitdb/ext", - "dist", - "doc/build", - ".tox" - ] - }, - // SMMAP - //////// - { - "follow_symlinks": true, - "path": "../../gitdb/ext/smmap", - "file_exclude_patterns" : [ - "*.sublime-workspace", - ".git", - ".noseids", - ".coverage" - ], - "folder_exclude_patterns" : [ - ".git", - "cover", - "dist", - "doc/build", - ".tox" - ] - }, - ] -} From b8ab128b7ff8dc951ac42c1fd57d61c26864680a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:40:07 +0800 Subject: [PATCH 0408/2375] =?UTF-8?q?Bump=20patch=20again;=20=E2=80=A6uplo?= =?UTF-8?q?ad=20error=20due=20to=20state=20on=20disk,=20yikes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/source/changes.rst | 2 +- gitdb/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 3c116c309..69a6dba98 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -3,7 +3,7 @@ Changelog ######### ***** -4.0.3 +4.0.4 ***** * Support for PyOxidizer diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 2b06b24bb..5f56773d0 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -30,7 +30,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 2) +version_info = (4, 0, 4) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index e8f8d68c4..48d641a8c 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 3) +version_info = (4, 0, 4) __version__ = '.'.join(str(i) for i in version_info) setup( From 4f08b0a2bb6715b1f143782c64e18dc33bb77487 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:44:35 +0800 Subject: [PATCH 0409/2375] Remove windows build badge [skip CI] --- README.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.rst b/README.rst index 05511a716..13dad89fc 100644 --- a/README.rst +++ b/README.rst @@ -52,8 +52,6 @@ DEVELOPMENT .. image:: https://github.com/gitpython-developers/gitdb/workflows/Python%20package/badge.svg :target: https://github.com/gitpython-developers/gitdb/actions -.. image:: https://ci.appveyor.com/api/projects/status/2qa4km4ln7bfv76r/branch/master?svg=true&passingText=windows%20OK&failingText=windows%20failed - :target: https://ci.appveyor.com/project/ankostis/gitpython/branch/master) .. image:: https://coveralls.io/repos/gitpython-developers/gitdb/badge.png :target: https://coveralls.io/r/gitpython-developers/gitdb From 919695d4e4101237a8d2c4fb65807a42b7ff63d4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:45:44 +0800 Subject: [PATCH 0410/2375] Also remove coveralls [skip CI] --- README.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.rst b/README.rst index 13dad89fc..44b3eddf8 100644 --- a/README.rst +++ b/README.rst @@ -52,8 +52,6 @@ DEVELOPMENT .. image:: https://github.com/gitpython-developers/gitdb/workflows/Python%20package/badge.svg :target: https://github.com/gitpython-developers/gitdb/actions -.. image:: https://coveralls.io/repos/gitpython-developers/gitdb/badge.png - :target: https://coveralls.io/r/gitpython-developers/gitdb The library is considered mature, and not under active development. It's primary (known) use is in git-python. From 5a42c622639b12977f8735043f059704c869427d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:46:28 +0800 Subject: [PATCH 0411/2375] Remove issuestats, which doesn't exist anymore [skip CI] --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 780168e31..fcb9217f2 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,6 @@ Although memory maps have many advantages, they represent a very limited system ## Overview ![Python package](https://github.com/gitpython-developers/smmap/workflows/Python%20package/badge.svg) -[![Issue Stats](http://www.issuestats.com/github/gitpython-developers/smmap/badge/pr)](http://www.issuestats.com/github/gitpython-developers/smmap) -[![Issue Stats](http://www.issuestats.com/github/gitpython-developers/smmap/badge/issue)](http://www.issuestats.com/github/gitpython-developers/smmap) Smmap wraps an interface around mmap and tracks the mapped files as well as the amount of clients who use it. If the system runs out of resources, or if a memory limit is reached, it will automatically unload unused maps to allow continued operation. From 24668c4e2463aad775edb9d23732d5d11d0e7754 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 19:16:11 +0800 Subject: [PATCH 0412/2375] Change required key to 2CF*, which seems to be the only good one --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 328c836b9..b867ad70c 100644 --- a/Makefile +++ b/Makefile @@ -46,4 +46,4 @@ release: clean force_release:: clean git push --tags python3 setup.py sdist bdist_wheel - twine upload -s -i 763629FEC8788FC35128B5F6EE029D1E5EB40300 dist/* + twine upload -s -i 2CF6E0B51AAF73F09B1C21174D1DA68C88710E60 dist/* From 09f96f289dbb674e64668bcb0a088aae9dff2a29 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 19:17:40 +0800 Subject: [PATCH 0413/2375] re-release with different signing key --- doc/source/changes.rst | 2 +- smmap/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index e5b0e79ce..f859b6076 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -3,7 +3,7 @@ Changelog ######### ****** -v3.0.2 +v3.0.3 ****** - signed release diff --git a/smmap/__init__.py b/smmap/__init__.py index 72df0cf3a..e7e43d8cd 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/smmap" -version_info = (3, 0, 2) +version_info = (3, 0, 3) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From a5d3d7e7ec4e2b52c93509bdf35999d66f91e06d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 19:41:43 +0800 Subject: [PATCH 0414/2375] change package signing key back to what it was --- Makefile | 2 +- gitdb/ext/smmap | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 82c0a3bc8..a5098b754 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ release:: clean force_release:: clean git push --tags python3 setup.py sdist bdist_wheel - twine upload -s -i 763629FEC8788FC35128B5F6EE029D1E5EB40300 dist/* + twine upload -s -i 2CF6E0B51AAF73F09B1C21174D1DA68C88710E60 dist/* doc:: make -C doc/ html diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index f4d7a58b4..09f96f289 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit f4d7a58b4d96200cd057a38a0758d3c84901f57e +Subproject commit 09f96f289dbb674e64668bcb0a088aae9dff2a29 From 5e5f940dff80beaa3eedf9342ef502f5e630d5ed Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 5 May 2020 11:37:02 +0800 Subject: [PATCH 0415/2375] Bump patch level (to create a new correctly signed release) --- doc/source/changes.rst | 6 ++++++ smmap/__init__.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index f859b6076..f8ddb1da0 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,12 @@ Changelog ######### +****** +v3.0.4 +****** + +- signed release (with correct key this time) + ****** v3.0.3 ****** diff --git a/smmap/__init__.py b/smmap/__init__.py index e7e43d8cd..a6671e104 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/smmap" -version_info = (3, 0, 3) +version_info = (3, 0, 4) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From 163f2649e5a5f7b8ba03fc1714bf4693b1a015d0 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 5 May 2020 11:45:15 +0800 Subject: [PATCH 0416/2375] Bump patch level for creating a new properly signed release --- doc/source/changes.rst | 6 ++++++ gitdb/__init__.py | 2 +- gitdb/ext/smmap | 2 +- setup.py | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 69a6dba98..05748a08d 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,12 @@ Changelog ######### +***** +4.0.5 +***** + +* Re-release of 4.0.4, with known signature + ***** 4.0.4 ***** diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 5f56773d0..813fe5af6 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -30,7 +30,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 4) +version_info = (4, 0, 5) __version__ = '.'.join(str(i) for i in version_info) diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 09f96f289..5e5f940df 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 09f96f289dbb674e64668bcb0a088aae9dff2a29 +Subproject commit 5e5f940dff80beaa3eedf9342ef502f5e630d5ed diff --git a/setup.py b/setup.py index 48d641a8c..facdf3d73 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 4) +version_info = (4, 0, 5) __version__ = '.'.join(str(i) for i in version_info) setup( From e5410b4166d177f90901db4986753787d34bc48f Mon Sep 17 00:00:00 2001 From: Ram Rachum Date: Fri, 12 Jun 2020 13:52:38 +0300 Subject: [PATCH 0417/2375] Fix exception causes in loose.py --- gitdb/db/loose.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gitdb/db/loose.py b/gitdb/db/loose.py index 7bf92dacf..a63a2ef33 100644 --- a/gitdb/db/loose.py +++ b/gitdb/db/loose.py @@ -138,12 +138,12 @@ def _map_loose_object(self, sha): # try again without noatime try: return file_contents_ro_filepath(db_path) - except OSError: - raise BadObject(sha) + except OSError as new_e: + raise BadObject(sha) from new_e # didn't work because of our flag, don't try it again self._fd_open_flags = 0 else: - raise BadObject(sha) + raise BadObject(sha) from e # END handle error # END exception handling From 112252cef0d418fd070671e64b18558c2f2cf2f1 Mon Sep 17 00:00:00 2001 From: Ram Rachum Date: Sun, 14 Jun 2020 14:35:48 +0300 Subject: [PATCH 0418/2375] Fix exception causes all over the codebase --- gitdb/__init__.py | 4 ++-- gitdb/db/mem.py | 4 ++-- gitdb/util.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 5f56773d0..31e4d4583 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -18,8 +18,8 @@ def _init_externals(): try: __import__(module) - except ImportError: - raise ImportError("'%s' could not be imported, assure it is located in your PYTHONPATH" % module) + except ImportError as e: + raise ImportError("'%s' could not be imported, assure it is located in your PYTHONPATH" % module) from e # END verify import # END handel imports diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index 871133468..5b242e46e 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -74,8 +74,8 @@ def stream(self, sha): # rewind stream for the next one to read ostream.stream.seek(0) return ostream - except KeyError: - raise BadObject(sha) + except KeyError as e: + raise BadObject(sha) from e # END exception handling def size(self): diff --git a/gitdb/util.py b/gitdb/util.py index d680f9766..c4cafecc6 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -326,8 +326,8 @@ def open(self, write=False, stream=False): else: self._fd = fd # END handle file descriptor - except OSError: - raise IOError("Lock at %r could not be obtained" % self._lockfilepath()) + except OSError as e: + raise IOError("Lock at %r could not be obtained" % self._lockfilepath()) from e # END handle lock retrieval # open actual file if required From c96c755fa30277fbaadf79603a0b4fa1054ce2cb Mon Sep 17 00:00:00 2001 From: Ram Rachum Date: Mon, 15 Jun 2020 10:48:01 +0300 Subject: [PATCH 0419/2375] Add Ram Rachum to AUTHORS --- AUTHORS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AUTHORS b/AUTHORS index 490baad8e..6c7e9b997 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1 +1,4 @@ Creator: Sebastian Thiel + +Contributors: + - Ram Rachum (@cool-RR) From 56cbfa002a44dce471b58ca3e6680d89ba9ec8a0 Mon Sep 17 00:00:00 2001 From: Harmon Date: Mon, 18 Jan 2021 13:31:13 -0600 Subject: [PATCH 0420/2375] Fix changelog version number v3.0.3 was skipped --- doc/source/changes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index f8ddb1da0..3169674de 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -9,7 +9,7 @@ v3.0.4 - signed release (with correct key this time) ****** -v3.0.3 +v3.0.2 ****** - signed release From 0b53ddc88a1221a9b933bc53570729c96cb4f09d Mon Sep 17 00:00:00 2001 From: Harmon Date: Mon, 18 Jan 2021 13:44:30 -0600 Subject: [PATCH 0421/2375] Remove Sublime Text project definition --- etc/sublime-text/smmap.sublime-project | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 etc/sublime-text/smmap.sublime-project diff --git a/etc/sublime-text/smmap.sublime-project b/etc/sublime-text/smmap.sublime-project deleted file mode 100644 index 251ebbd28..000000000 --- a/etc/sublime-text/smmap.sublime-project +++ /dev/null @@ -1,21 +0,0 @@ -{ - "folders": - [ - // SMMAP - //////// - { - "follow_symlinks": true, - "path": "../..", - "file_exclude_patterns" : [ - "*.sublime-workspace", - ".git", - ".noseids", - ".coverage" - ], - "folder_exclude_patterns" : [ - ".git", - "cover", - ] - }, - ] -} From e79fe25f16c3a8bfcf315b269412f0927486155d Mon Sep 17 00:00:00 2001 From: Harmon Date: Mon, 18 Jan 2021 13:48:06 -0600 Subject: [PATCH 0422/2375] Remove duplicate sys import --- smmap/buf.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index 786775a8b..cdbfad3a8 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -3,8 +3,6 @@ __all__ = ["SlidingWindowMapBuffer"] -import sys - try: bytes except NameError: From 066f038cfc74d6095289b5dc3f8810a242e81ecb Mon Sep 17 00:00:00 2001 From: Harmon Date: Mon, 18 Jan 2021 13:53:34 -0600 Subject: [PATCH 0423/2375] Remove bytes existence check Python < 2.6 is no longer supported --- smmap/buf.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/smmap/buf.py b/smmap/buf.py index cdbfad3a8..18766daf8 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -3,11 +3,6 @@ __all__ = ["SlidingWindowMapBuffer"] -try: - bytes -except NameError: - bytes = str - class SlidingWindowMapBuffer(object): From 93c7ba67f0614416482916741f24829bef06e22f Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 11 Apr 2020 14:21:10 +0800 Subject: [PATCH 0424/2375] Revert "Remove basestring reference, no py2 support" This reverts commit 2ceedc91958dc080b31e426150610eef52774f5f. --- smmap/util.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/smmap/util.py b/smmap/util.py index 13604c581..defef1f32 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -23,7 +23,11 @@ def buffer(obj, offset, size): def string_types(): - return str + if sys.version_info[0] >= 3: + return str + else: + return basestring + def align_to_mmap(num, round_up): """ From 06c4972c87dcd07bb42071b86c2b0d2aae03e581 Mon Sep 17 00:00:00 2001 From: Harmon Date: Thu, 21 Jan 2021 06:06:50 -0600 Subject: [PATCH 0425/2375] Ignore Flake8 undefined name error for Python 2 support --- smmap/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smmap/util.py b/smmap/util.py index defef1f32..3d7329158 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -26,7 +26,7 @@ def string_types(): if sys.version_info[0] >= 3: return str else: - return basestring + return basestring # noqa: F821 def align_to_mmap(num, round_up): From c661324746a26df609d1ace2106a1c8b916cf802 Mon Sep 17 00:00:00 2001 From: Harmon Date: Thu, 21 Jan 2021 06:12:51 -0600 Subject: [PATCH 0426/2375] Improve changelog for v3.0.2 --- doc/source/changes.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 3169674de..f92db64ad 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -12,7 +12,8 @@ v3.0.4 v3.0.2 ****** -- signed release +- Signed release +- Switched to GitHub Actions for CI ****** v3.0.1 From 37cc3c09c188b65996e170cddce2d151bf682388 Mon Sep 17 00:00:00 2001 From: Harmon Date: Thu, 21 Jan 2021 06:14:03 -0600 Subject: [PATCH 0427/2375] Improve capitalization consistency in changelog for v3.0.4 --- doc/source/changes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index f92db64ad..bc1db5d59 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -6,7 +6,7 @@ Changelog v3.0.4 ****** -- signed release (with correct key this time) +- Signed release (with correct key this time) ****** v3.0.2 From 65f171aadffb2d83124065fc6c193f133936643b Mon Sep 17 00:00:00 2001 From: Harmon Date: Thu, 21 Jan 2021 06:17:49 -0600 Subject: [PATCH 0428/2375] Add changelog for v3.0.5 --- doc/source/changes.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index bc1db5d59..c9665b673 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,12 @@ Changelog ######### +****** +v3.0.5 +****** + +- Restored Python 2 support removed in v3.0.2 + ****** v3.0.4 ****** From 119cc417541f400b3533c02d53d3d5f236e87023 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 23 Jan 2021 09:59:05 +0800 Subject: [PATCH 0429/2375] bump patch level --- Makefile | 2 +- doc/source/changes.rst | 2 ++ smmap/__init__.py | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b867ad70c..593a758ee 100644 --- a/Makefile +++ b/Makefile @@ -46,4 +46,4 @@ release: clean force_release:: clean git push --tags python3 setup.py sdist bdist_wheel - twine upload -s -i 2CF6E0B51AAF73F09B1C21174D1DA68C88710E60 dist/* + twine upload -s -i 27C50E7F590947D7273A741E85194C08421980C9 dist/* diff --git a/doc/source/changes.rst b/doc/source/changes.rst index c9665b673..041711bae 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -7,6 +7,8 @@ v3.0.5 ****** - Restored Python 2 support removed in v3.0.2 +- changed release signature key to 27C50E7F590947D7273A741E85194C08421980C9. See + https://keybase.io/byronbates for proof of ownership. ****** v3.0.4 diff --git a/smmap/__init__.py b/smmap/__init__.py index a6671e104..abc09d952 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/smmap" -version_info = (3, 0, 4) +version_info = (3, 0, 5) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From 9c2570bf07db6dfc7d616b5ffaee84cc33b5c0f5 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:01:32 -0600 Subject: [PATCH 0430/2375] Improve changelog for v3.0.5 --- doc/source/changes.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 041711bae..bc0b1b63c 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -7,8 +7,8 @@ v3.0.5 ****** - Restored Python 2 support removed in v3.0.2 -- changed release signature key to 27C50E7F590947D7273A741E85194C08421980C9. See - https://keybase.io/byronbates for proof of ownership. +- Changed release signature key to 27C50E7F590947D7273A741E85194C08421980C9. + See https://keybase.io/byronbates for proof of ownership. ****** v3.0.4 From 341b27890a0e1353ccdf08b345aee9f5934d1847 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:08:03 -0600 Subject: [PATCH 0431/2375] Remove string_types --- smmap/mman.py | 3 +-- smmap/util.py | 11 ++--------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index 9df69ed29..d7dfe6d62 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -4,7 +4,6 @@ MapRegion, MapRegionList, is_64_bit, - string_types, buffer, ) @@ -227,7 +226,7 @@ def fd(self): **Note:** it is not required to be valid anymore :raise ValueError: if the mapping was not created by a file descriptor""" - if isinstance(self._rlist.path_or_fd(), string_types()): + if isinstance(self._rlist.path_or_fd(), str): raise ValueError("File descriptor queried although mapping was generated from path") # END handle type return self._rlist.path_or_fd() diff --git a/smmap/util.py b/smmap/util.py index 3d7329158..4e713f8ae 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -22,13 +22,6 @@ def buffer(obj, offset, size): # return obj[offset:offset + size] -def string_types(): - if sys.version_info[0] >= 3: - return str - else: - return basestring # noqa: F821 - - def align_to_mmap(num, round_up): """ Align the given integer number to the closest page offset, which usually is 4096 bytes. @@ -146,7 +139,7 @@ def __init__(self, path_or_fd, ofs, size, flags=0): self._size = len(self._mf) finally: - if isinstance(path_or_fd, string_types()): + if isinstance(path_or_fd, str): os.close(fd) # END only close it if we opened it # END close file handle @@ -229,7 +222,7 @@ def path_or_fd(self): def file_size(self): """:return: size of file we manager""" if self._file_size is None: - if isinstance(self._path_or_fd, string_types()): + if isinstance(self._path_or_fd, str): self._file_size = os.stat(self._path_or_fd).st_size else: self._file_size = os.fstat(self._path_or_fd).st_size From da0a610bd9a050239299d37ce40d4c01d5cacc81 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:15:53 -0600 Subject: [PATCH 0432/2375] Remove buffer --- smmap/mman.py | 3 +-- smmap/util.py | 13 +------------ 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/smmap/mman.py b/smmap/mman.py index d7dfe6d62..19c3a0223 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -4,7 +4,6 @@ MapRegion, MapRegionList, is_64_bit, - buffer, ) import sys @@ -160,7 +159,7 @@ def buffer(self): **Note:** buffers should not be cached passed the duration of your access as it will prevent resources from being freed even though they might not be accounted for anymore !""" - return buffer(self._region.buffer(), self._ofs, self._size) + return memoryview(self._region.buffer())[self._ofs:self._ofs+self._size] def map(self): """ diff --git a/smmap/util.py b/smmap/util.py index 4e713f8ae..72b2394a3 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -5,22 +5,11 @@ from mmap import mmap, ACCESS_READ from mmap import ALLOCATIONGRANULARITY -__all__ = ["align_to_mmap", "is_64_bit", "buffer", +__all__ = ["align_to_mmap", "is_64_bit", "MapWindow", "MapRegion", "MapRegionList", "ALLOCATIONGRANULARITY"] #{ Utilities -try: - # Python 2 - buffer = buffer -except NameError: - # Python 3 has no `buffer`; only `memoryview` - def buffer(obj, offset, size): - # Actually, for gitpython this is fastest ... . - return memoryview(obj)[offset:offset+size] - # doing it directly is much faster ! - # return obj[offset:offset + size] - def align_to_mmap(num, round_up): """ From 0e59cc906065c36e2605f9b76d797d5227f84460 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:20:13 -0600 Subject: [PATCH 0433/2375] Update Python requirement to >= 3.4 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index f0c67ad2d..c4a9f4e4f 100755 --- a/setup.py +++ b/setup.py @@ -26,7 +26,7 @@ license="BSD", packages=find_packages(), zip_safe=True, - python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", + python_requires=">=3.4", classifiers=[ # Picked from # http://pypi.python.org/pypi?:action=list_classifiers From ee01c2e6f661b76ddde94cdfa02176dc573cd95b Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:21:16 -0600 Subject: [PATCH 0434/2375] Update setup classifiers to be only Python 3 --- setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/setup.py b/setup.py index c4a9f4e4f..d2c6a21d2 100755 --- a/setup.py +++ b/setup.py @@ -45,12 +45,11 @@ "Operating System :: Microsoft :: Windows", "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3 :: Only", ], long_description=long_description, long_description_content_type='text/markdown', From 9478708e6663fabbeb8464d6a943054e8927c2ce Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:25:14 -0600 Subject: [PATCH 0435/2375] Update Python prerequisite in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fcb9217f2..9e6ea427c 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ For performance critical 64 bit applications, a simplified version of memory map ## Prerequisites -* Python 2.7 or 3.4+ +* Python 3.4+ * OSX, Windows or Linux The package was tested on all of the previously mentioned configurations. From cc7d2b8516a9bc23d7b3ac599395b80461b738cd Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:26:22 -0600 Subject: [PATCH 0436/2375] Remove information about Python < 2.5 in README --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 9e6ea427c..9707e5036 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,6 @@ Smmap wraps an interface around mmap and tracks the mapped files as well as the To allow processing large files even on 32 bit systems, it allows only portions of the file to be mapped. Once the user reads beyond the mapped region, smmap will automatically map the next required region, unloading unused regions using a LRU algorithm. -The interface also works around the missing offset parameter in python implementations up to python 2.5. - Although the library can be used most efficiently with its native interface, a Buffer implementation is provided to hide these details behind a simple string-like interface. For performance critical 64 bit applications, a simplified version of memory mapping is provided which always maps the whole file, but still provides the benefit of unloading unused mappings on demand. From 3646d133e3be66ce1297560542f43b547d47e318 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:27:08 -0600 Subject: [PATCH 0437/2375] Remove Python 2.7 from tox configuration --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index d1f558bc0..8a5ce02ad 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ # and then run "tox" from this directory. [tox] -envlist = flake8, py27, py34, py35, py36 +envlist = flake8, py34, py35, py36 [testenv] commands = nosetests {posargs:--with-coverage --cover-package=smmap} From d20070534a443543fabfae24e249921821a0f991 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:29:39 -0600 Subject: [PATCH 0438/2375] Update Python prerequisite in documentation --- doc/source/intro.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/intro.rst b/doc/source/intro.rst index 8f7cf3c26..63480fc28 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -22,7 +22,7 @@ For performance critical 64 bit applications, a simplified version of memory map ############# Prerequisites ############# -* Python 2.7 or 3.4+ +* Python 3.4+ * OSX, Windows or Linux The package was tested on all of the previously mentioned configurations. From 72d47eb937f22de5c71abe5630af6c1dc999bbe0 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:30:19 -0600 Subject: [PATCH 0439/2375] Remove information about Python < 2.5 in documentation --- doc/source/intro.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/doc/source/intro.rst b/doc/source/intro.rst index 63480fc28..a4c82d295 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -13,8 +13,6 @@ Smmap wraps an interface around mmap and tracks the mapped files as well as the To allow processing large files even on 32 bit systems, it allows only portions of the file to be mapped. Once the user reads beyond the mapped region, smmap will automatically map the next required region, unloading unused regions using a LRU algorithm. -The interface also works around the missing offset parameter in python implementations up to python 2.5. - Although the library can be used most efficiently with its native interface, a Buffer implementation is provided to hide these details behind a simple string-like interface. For performance critical 64 bit applications, a simplified version of memory mapping is provided which always maps the whole file, but still provides the benefit of unloading unused mappings on demand. From 812ad85acd3eda5b1d6dc5aa837d390a72ce1538 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:32:29 -0600 Subject: [PATCH 0440/2375] Replace codecs.open with open --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index d2c6a21d2..46eecdd9b 100755 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ #!/usr/bin/env python import os -import codecs + try: from setuptools import setup, find_packages except ImportError: @@ -11,7 +11,7 @@ import smmap if os.path.exists("README.md"): - long_description = codecs.open('README.md', "r", "utf-8").read().replace('\r\n', '\n') + long_description = open('README.md', "r", encoding="utf-8").read().replace('\r\n', '\n') else: long_description = "See https://github.com/gitpython-developers/smmap" From 960cbc5b01aafe4d0b1706ab236d40d1125e05ac Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:42:41 -0600 Subject: [PATCH 0441/2375] Remove buffer usage from TestTutorial.test_example --- smmap/test/test_tutorial.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/smmap/test/test_tutorial.py b/smmap/test/test_tutorial.py index b03db9be2..31c272abb 100644 --- a/smmap/test/test_tutorial.py +++ b/smmap/test/test_tutorial.py @@ -41,12 +41,6 @@ def test_example(self): c.buffer()[1:10] # first 9 bytes c.buffer()[c.size() - 1] # last byte - # its recommended not to create big slices when feeding the buffer - # into consumers (e.g. struct or zlib). - # Instead, either give the buffer directly, or use pythons buffer command. - from smmap.util import buffer - buffer(c.buffer(), 1, 9) # first 9 bytes without copying them - # you can query absolute offsets, and check whether an offset is included # in the cursor's data. assert c.ofs_begin() < c.ofs_end() From 230725f81e0298d110f8b136e1a6a19c9105d961 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:45:48 -0600 Subject: [PATCH 0442/2375] Remove Development Status classifier comments in setup.py --- setup.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/setup.py b/setup.py index 46eecdd9b..755fddafd 100755 --- a/setup.py +++ b/setup.py @@ -28,15 +28,7 @@ zip_safe=True, python_requires=">=3.4", classifiers=[ - # Picked from - # http://pypi.python.org/pypi?:action=list_classifiers - #"Development Status :: 1 - Planning", - #"Development Status :: 2 - Pre-Alpha", - #"Development Status :: 3 - Alpha", - # "Development Status :: 4 - Beta", "Development Status :: 5 - Production/Stable", - #"Development Status :: 6 - Mature", - #"Development Status :: 7 - Inactive", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", From 710fb1994adda7215261d240e6332c2a10bfff6a Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:48:38 -0600 Subject: [PATCH 0443/2375] Remove Travis CI configuration file --- .travis.yml | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 50e5b97e1..000000000 --- a/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -# NOT USED, just for reference. See github actions for CI configuration -language: python -python: - - 2.7 - - 3.4 - - 3.5 - - 3.6 -install: - - pip install coveralls -script: - - ulimit -n 48 - - ulimit -n - - nosetests --with-coverage -after_success: - - coveralls From 724540cd82856e850ab9175775db8caa1ea42ec7 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:49:29 -0600 Subject: [PATCH 0444/2375] Remove AppVeyor configuration file --- .appveyor.yml | 50 -------------------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 .appveyor.yml diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index 2090a0569..000000000 --- a/.appveyor.yml +++ /dev/null @@ -1,50 +0,0 @@ -# NOT USED, just for reference. See github actions for CI configuration -# CI on Windows via appveyor -environment: - - matrix: - ## MINGW - # - - PYTHON: "C:\\Python27" - PYTHON_VERSION: "2.7" - - PYTHON: "C:\\Python34-x64" - PYTHON_VERSION: "3.4" - - PYTHON: "C:\\Python35-x64" - PYTHON_VERSION: "3.5" - - PYTHON: "C:\\Miniconda35-x64" - PYTHON_VERSION: "3.5" - IS_CONDA: "yes" - -install: - - set PATH=%PYTHON%;%PYTHON%\Scripts;%PATH% - - ## Print configuration for debugging. - # - - | - echo %PATH% - uname -a - where python pip pip2 pip3 pip34 - python --version - python -c "import struct; print(struct.calcsize('P') * 8)" - - - IF "%IS_CONDA%"=="yes" ( - conda info -a & - conda install --yes --quiet pip - ) - - pip install nose wheel coveralls - - ## For commits performed with the default user. - - | - git config --global user.email "travis@ci.com" - git config --global user.name "Travis Runner" - - - pip install -e . - -build: false - -test_script: - - IF "%PYTHON_VERSION%"=="3.5" ( - nosetests -v --with-coverage - ) ELSE ( - nosetests -v - ) From 18b499e213b1fd81c4cf5e5340a5af6302f26bef Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:49:54 -0600 Subject: [PATCH 0445/2375] Remove MemoryManagerError and RegionCollectionError --- smmap/exc.py | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 smmap/exc.py diff --git a/smmap/exc.py b/smmap/exc.py deleted file mode 100644 index 117664502..000000000 --- a/smmap/exc.py +++ /dev/null @@ -1,11 +0,0 @@ -"""Module with system exceptions""" - - -class MemoryManagerError(Exception): - - """Base class for all exceptions thrown by the memory manager""" - - -class RegionCollectionError(MemoryManagerError): - - """Thrown if a memory region could not be collected, or if no region for collection was found""" From fe64cbd88c37e0a5fb52709790b44cba7a5f5fd8 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:52:16 -0600 Subject: [PATCH 0446/2375] Remove Exceptions documentation --- doc/source/api.rst | 8 -------- 1 file changed, 8 deletions(-) diff --git a/doc/source/api.rst b/doc/source/api.rst index cddd268c4..2e2dac41a 100644 --- a/doc/source/api.rst +++ b/doc/source/api.rst @@ -20,14 +20,6 @@ Buffers :members: :undoc-members: -********** -Exceptions -********** - -.. automodule:: smmap.exc - :members: - :undoc-members: - ********* Utilities ********* From 95431a22d559c17e96ed2ca094247f0d227a544c Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:55:43 -0600 Subject: [PATCH 0447/2375] Add Python 3.9 to GitHub Actions workflow --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 4f06a18d9..e070c68f8 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.5, 3.6, 3.7, 3.8] + python-version: [3.5, 3.6, 3.7, 3.8, 3.9] steps: - uses: actions/checkout@v2 From 8fda48842fb422025b498cd21644b7a480593cc2 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 21:57:21 -0600 Subject: [PATCH 0448/2375] Add Python 3.7, 3.8, and 3.9 to setup classifiers --- setup.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/setup.py b/setup.py index 755fddafd..039f30241 100755 --- a/setup.py +++ b/setup.py @@ -41,6 +41,9 @@ "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3 :: Only", ], long_description=long_description, From c64ac58cf768d5416fcc3e306fa72843089313a2 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 22:00:26 -0600 Subject: [PATCH 0449/2375] Drop support for Python 3.4 --- README.md | 2 +- doc/source/intro.rst | 2 +- setup.py | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9707e5036..412dfd9c0 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ For performance critical 64 bit applications, a simplified version of memory map ## Prerequisites -* Python 3.4+ +* Python 3.5+ * OSX, Windows or Linux The package was tested on all of the previously mentioned configurations. diff --git a/doc/source/intro.rst b/doc/source/intro.rst index a4c82d295..e458d53aa 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -20,7 +20,7 @@ For performance critical 64 bit applications, a simplified version of memory map ############# Prerequisites ############# -* Python 3.4+ +* Python 3.5+ * OSX, Windows or Linux The package was tested on all of the previously mentioned configurations. diff --git a/setup.py b/setup.py index 039f30241..0718c15ef 100755 --- a/setup.py +++ b/setup.py @@ -26,7 +26,7 @@ license="BSD", packages=find_packages(), zip_safe=True, - python_requires=">=3.4", + python_requires=">=3.5", classifiers=[ "Development Status :: 5 - Production/Stable", "Environment :: Console", @@ -38,7 +38,6 @@ "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", From 689ab6fb040e218ca16e4c0aa4944e608649df04 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 22:02:43 -0600 Subject: [PATCH 0450/2375] Add Python 3.7, 3.8, and 3.9 to tox configuration --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 8a5ce02ad..9e8dd22b2 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ # and then run "tox" from this directory. [tox] -envlist = flake8, py34, py35, py36 +envlist = flake8, py34, py35, py36, py37, py38, py39 [testenv] commands = nosetests {posargs:--with-coverage --cover-package=smmap} From ed11471388a3c4dc4756605ec76650e7ad994eb9 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 22:03:00 -0600 Subject: [PATCH 0451/2375] Remove Python 3.4 from tox configuration --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 9e8dd22b2..e33f567f2 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ # and then run "tox" from this directory. [tox] -envlist = flake8, py34, py35, py36, py37, py38, py39 +envlist = flake8, py35, py36, py37, py38, py39 [testenv] commands = nosetests {posargs:--with-coverage --cover-package=smmap} From e762f17a0bc479d52d4f9cda46cec3f98c89e812 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 22:06:54 -0600 Subject: [PATCH 0452/2375] Remove unused pyvers variable in SlidingWindowMapBuffer.__getslice__ --- smmap/buf.py | 1 - 1 file changed, 1 deletion(-) diff --git a/smmap/buf.py b/smmap/buf.py index 18766daf8..af8496eff 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -80,7 +80,6 @@ def __getslice__(self, i, j): ofs = i # It's fastest to keep tokens and join later, especially in py3, which was 7 times slower # in the previous iteration of this code - pyvers = sys.version_info[:2] md = list() while l: c.use_region(ofs, l) From 30e93fee57286afae25c28a97ba65a9770f9a729 Mon Sep 17 00:00:00 2001 From: Harmon Date: Sat, 23 Jan 2021 22:17:37 -0600 Subject: [PATCH 0453/2375] v4.0.0 --- doc/source/changes.rst | 8 ++++++++ smmap/__init__.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index bc0b1b63c..ff5ca9918 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,14 @@ Changelog ######### +****** +v4.0.0 +****** + +- Dropped support for Python 2.7 and 3.4 +- Added support for Python 3.7, 3.8, and 3.9 +- Removed unused exc.MemoryManagerError and exc.RegionCollectionError + ****** v3.0.5 ****** diff --git a/smmap/__init__.py b/smmap/__init__.py index abc09d952..45f8abec8 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/smmap" -version_info = (3, 0, 5) +version_info = (4, 0, 0) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From 45d1cd59d39227ee6841042eab85116a59a26d22 Mon Sep 17 00:00:00 2001 From: Bert Wesarg Date: Thu, 11 Mar 2021 16:35:24 +0100 Subject: [PATCH 0454/2375] Remove support for Python 3.5 --- .appveyor.yml | 29 ++--------------------------- .github/workflows/pythonpackage.yml | 4 ++-- .travis.yml | 4 +--- README.md | 2 +- doc/source/intro.rst | 2 +- git/cmd.py | 9 --------- setup.py | 4 ++-- 7 files changed, 9 insertions(+), 45 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 0a86c1a75..833f5c7b9 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -6,29 +6,12 @@ environment: CYGWIN64_GIT_PATH: "C:\\cygwin64\\bin;%GIT_DAEMON_PATH%" matrix: - - PYTHON: "C:\\Python34-x64" - PYTHON_VERSION: "3.4" - GIT_PATH: "%GIT_DAEMON_PATH%" - - PYTHON: "C:\\Python35-x64" - PYTHON_VERSION: "3.5" - GIT_PATH: "%GIT_DAEMON_PATH%" - PYTHON: "C:\\Python36-x64" PYTHON_VERSION: "3.6" GIT_PATH: "%GIT_DAEMON_PATH%" - PYTHON: "C:\\Python37-x64" PYTHON_VERSION: "3.7" GIT_PATH: "%GIT_DAEMON_PATH%" - - PYTHON: "C:\\Miniconda35-x64" - PYTHON_VERSION: "3.5" - IS_CONDA: "yes" - MAYFAIL: "yes" - GIT_PATH: "%GIT_DAEMON_PATH%" - ## Cygwin - - PYTHON: "C:\\Python35-x64" - PYTHON_VERSION: "3.5" - IS_CYGWIN: "yes" - MAYFAIL: "yes" - GIT_PATH: "%CYGWIN64_GIT_PATH%" matrix: allow_failures: @@ -76,18 +59,10 @@ install: build: false test_script: - - IF "%IS_CYGWIN%" == "yes" ( - nosetests -v - ) ELSE ( - IF "%PYTHON_VERSION%" == "3.5" ( - nosetests -v --with-coverage - ) ELSE ( - nosetests -v - ) - ) + - nosetests -v on_success: - - IF "%PYTHON_VERSION%" == "3.5" IF NOT "%IS_CYGWIN%" == "yes" (codecov) + - IF "%PYTHON_VERSION%" == "3.6" IF NOT "%IS_CYGWIN%" == "yes" (codecov) # Enable this to be able to login to the build worker. You can use the # `remmina` program in Ubuntu, use the login information that the line below diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 5e94cd05e..618d6b97a 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.5, 3.6, 3.7, 3.8, 3.9] + python-version: [3.6, 3.7, 3.8, 3.9] steps: - uses: actions/checkout@v2 @@ -56,4 +56,4 @@ jobs: run: | set -x pip install -r doc/requirements.txt - make -C doc html \ No newline at end of file + make -C doc html diff --git a/.travis.yml b/.travis.yml index 1fbb1ddb8..570beaad6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,6 @@ # UNUSED, only for reference. If adjustments are needed, please see github actions language: python python: - - "3.4" - - "3.5" - "3.6" - "3.7" - "3.8" @@ -38,7 +36,7 @@ script: - ulimit -n - coverage run --omit="test/*" -m unittest --buffer - coverage report - - if [ "$TRAVIS_PYTHON_VERSION" == '3.5' ]; then cd doc && make html; fi + - if [ "$TRAVIS_PYTHON_VERSION" == '3.6' ]; then cd doc && make html; fi - if [ "$TRAVIS_PYTHON_VERSION" == '3.6' ]; then flake8 --ignore=W293,E265,E266,W503,W504,E731; fi after_success: - codecov diff --git a/README.md b/README.md index 0d0edeb43..4725d3aeb 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ If it is not in your `PATH`, you can help GitPython find it by setting the `GIT_PYTHON_GIT_EXECUTABLE=` environment variable. * Git (1.7.x or newer) -* Python >= 3.5 +* Python >= 3.6 The list of dependencies are listed in `./requirements.txt` and `./test-requirements.txt`. The installer takes care of installing them for you. diff --git a/doc/source/intro.rst b/doc/source/intro.rst index 7168c91b1..956a36073 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -13,7 +13,7 @@ The object database implementation is optimized for handling large quantities of Requirements ============ -* `Python`_ >= 3.5 +* `Python`_ >= 3.6 * `Git`_ 1.7.0 or newer It should also work with older versions, but it may be that some operations involving remotes will not work as expected. diff --git a/git/cmd.py b/git/cmd.py index ec630d93c..72ec0381a 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -17,9 +17,7 @@ import subprocess import sys import threading -from collections import OrderedDict from textwrap import dedent -import warnings from git.compat import ( defenc, @@ -903,13 +901,6 @@ def transform_kwarg(self, name, value, split_single_char_options): def transform_kwargs(self, split_single_char_options=True, **kwargs): """Transforms Python style kwargs into git command line options.""" - # Python 3.6 preserves the order of kwargs and thus has a stable - # order. For older versions sort the kwargs by the key to get a stable - # order. - if sys.version_info[:2] < (3, 6): - kwargs = OrderedDict(sorted(kwargs.items(), key=lambda x: x[0])) - warnings.warn("Python 3.5 support is deprecated and will be removed 2021-09-05.\n" + - "It does not preserve the order for key-word arguments and enforce lexical sorting instead.") args = [] for k, v in kwargs.items(): if isinstance(v, (list, tuple)): diff --git a/setup.py b/setup.py index f8829c386..850d680d4 100755 --- a/setup.py +++ b/setup.py @@ -99,7 +99,7 @@ def build_py_modules(basedir, excludes=[]): include_package_data=True, py_modules=build_py_modules("./git", excludes=["git.ext.*"]), package_dir={'git': 'git'}, - python_requires='>=3.5', + python_requires='>=3.6', install_requires=requirements, tests_require=requirements + test_requirements, zip_safe=False, @@ -127,6 +127,6 @@ def build_py_modules(basedir, excludes=[]): "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9" + "Programming Language :: Python :: 3.9" ] ) From 447c8a4b0cc6e8fbc4a20a5a6e2c7cfabe05368e Mon Sep 17 00:00:00 2001 From: Tom McClintock Date: Wed, 24 Mar 2021 08:57:44 -0700 Subject: [PATCH 0455/2375] Bumped smmap upper bound --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index b6ccf50fa..72957a243 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -smmap>=3.0.1,<4 +smmap>=3.0.1,<5 From aa7228e8dbdc2ee6b6bc385e8bee21245a10e98d Mon Sep 17 00:00:00 2001 From: Harmon Date: Thu, 25 Mar 2021 06:29:35 -0500 Subject: [PATCH 0456/2375] v4.0.6 --- doc/source/changes.rst | 8 ++++++++ gitdb/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 05748a08d..6217ffb99 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,14 @@ Changelog ######### +***** +4.0.6 +***** + +* Bumped upper bound for smmap requirement + (`#67 `_, + `#68 `_) + ***** 4.0.5 ***** diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 2e127cac4..ea7d1bcc6 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -30,7 +30,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 5) +version_info = (4, 0, 6) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index facdf3d73..071b8c6c1 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 5) +version_info = (4, 0, 6) __version__ = '.'.join(str(i) for i in version_info) setup( From fc11a03b6d94cdf9d5841595caf104c2982934bb Mon Sep 17 00:00:00 2001 From: Harmon Date: Fri, 26 Mar 2021 07:41:26 -0500 Subject: [PATCH 0457/2375] Update smmap upper bound in setup.py Fixes #69 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 071b8c6c1..edbeeffe3 100755 --- a/setup.py +++ b/setup.py @@ -20,7 +20,7 @@ packages=('gitdb', 'gitdb.db', 'gitdb.utils', 'gitdb.test'), license="BSD License", zip_safe=False, - install_requires=['smmap>=3.0.1,<4'], + install_requires=['smmap>=3.0.1,<5'], long_description="""GitDB is a pure-Python git object database""", python_requires='>=3.4', # See https://pypi.python.org/pypi?%3Aaction=list_classifiers From 6b997cd5fd01dd91ecb08d39e5e9736bc1dc9ba5 Mon Sep 17 00:00:00 2001 From: Harmon Date: Fri, 26 Mar 2021 07:43:45 -0500 Subject: [PATCH 0458/2375] v4.0.7 --- doc/source/changes.rst | 7 +++++++ gitdb/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 6217ffb99..1a41d537b 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,13 @@ Changelog ######### +***** +4.0.7 +***** + +* Updated upper bound for smmap requirement in setup.py + (`#69 `_) + ***** 4.0.6 ***** diff --git a/gitdb/__init__.py b/gitdb/__init__.py index ea7d1bcc6..bef9696c7 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -30,7 +30,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 6) +version_info = (4, 0, 7) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index edbeeffe3..59817d8b2 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 6) +version_info = (4, 0, 7) __version__ = '.'.join(str(i) for i in version_info) setup( From 03ab3a1d40c04d6a944299c21db61cf9ce30f6bb Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 25 Mar 2021 20:46:35 +0800 Subject: [PATCH 0459/2375] change signing key to the one I have --- Makefile | 2 +- gitdb/ext/smmap | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index a5098b754..82907561b 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ release:: clean force_release:: clean git push --tags python3 setup.py sdist bdist_wheel - twine upload -s -i 2CF6E0B51AAF73F09B1C21174D1DA68C88710E60 dist/* + twine upload -s -i 27C50E7F590947D7273A741E85194C08421980C9 dist/* doc:: make -C doc/ html diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 5e5f940df..30e93fee5 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 5e5f940dff80beaa3eedf9342ef502f5e630d5ed +Subproject commit 30e93fee57286afae25c28a97ba65a9770f9a729 From ea43defd777a9c0751fc44a9c6a622fc2dbd18a0 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 1 Apr 2021 18:44:45 +0800 Subject: [PATCH 0460/2375] Run actions on main branch --- .github/workflows/pythonpackage.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 5e94cd05e..eb5c894e9 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -5,9 +5,9 @@ name: Python package on: push: - branches: [ master ] + branches: [ main ] pull_request: - branches: [ master ] + branches: [ main ] jobs: build: @@ -56,4 +56,4 @@ jobs: run: | set -x pip install -r doc/requirements.txt - make -C doc html \ No newline at end of file + make -C doc html From 11837f61aa4b5c286c6ee9870e23a7ee342858c5 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 18 May 2021 13:11:25 +0100 Subject: [PATCH 0461/2375] Add types to objects.base.py --- git/diff.py | 4 +-- git/index/fun.py | 2 +- git/objects/base.py | 63 +++++++++++++++++++++++++++++++-------------- 3 files changed, 46 insertions(+), 23 deletions(-) diff --git a/git/diff.py b/git/diff.py index a40fc244e..346a2ca7b 100644 --- a/git/diff.py +++ b/git/diff.py @@ -16,7 +16,7 @@ # typing ------------------------------------------------------------------ from typing import Any, Iterator, List, Match, Optional, Tuple, Type, Union, TYPE_CHECKING -from git.types import PathLike, TBD, Final, Literal +from git.types import PathLike, TBD, Literal if TYPE_CHECKING: from .objects.tree import Tree @@ -31,7 +31,7 @@ __all__ = ('Diffable', 'DiffIndex', 'Diff', 'NULL_TREE') # Special object to compare against the empty tree in diffs -NULL_TREE = object() # type: Final[object] +NULL_TREE = object() _octal_byte_re = re.compile(b'\\\\([0-9]{3})') diff --git a/git/index/fun.py b/git/index/fun.py index f40928c33..96d9b4755 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -108,7 +108,7 @@ def run_commit_hook(name: str, index: 'IndexFile', *args: str) -> None: # end handle return code -def stat_mode_to_index_mode(mode): +def stat_mode_to_index_mode(mode: int) -> int: """Convert the given mode from a stat call to the corresponding index mode and return it""" if S_ISLNK(mode): # symlinks diff --git a/git/objects/base.py b/git/objects/base.py index 59f0e8368..e50387468 100644 --- a/git/objects/base.py +++ b/git/objects/base.py @@ -3,16 +3,34 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php + +from git.exc import WorkTreeRepositoryUnsupported from git.util import LazyMixin, join_path_native, stream_copy, bin_to_hex import gitdb.typ as dbtyp import os.path as osp -from typing import Optional # noqa: F401 unused import from .util import get_object_type_by_name -_assertion_msg_format = "Created object %r whose python type %r disagrees with the acutal git object type %r" +# typing ------------------------------------------------------------------ + +from typing import Any, TYPE_CHECKING, Optional, Union + +from git.types import PathLike + +if TYPE_CHECKING: + from git.repo import Repo + from gitdb.base import OStream + from .tree import Tree + from .blob import Blob + from .tag import TagObject + from .commit import Commit + +# -------------------------------------------------------------------------- + + +_assertion_msg_format = "Created object %r whose python type %r disagrees with the acutual git object type %r" __all__ = ("Object", "IndexObject") @@ -27,7 +45,7 @@ class Object(LazyMixin): __slots__ = ("repo", "binsha", "size") type = None # type: Optional[str] # to be set by subclass - def __init__(self, repo, binsha): + def __init__(self, repo: 'Repo', binsha: bytes): """Initialize an object by identifying it by its binary sha. All keyword arguments will be set on demand if None. @@ -40,7 +58,7 @@ def __init__(self, repo, binsha): assert len(binsha) == 20, "Require 20 byte binary sha, got %r, len = %i" % (binsha, len(binsha)) @classmethod - def new(cls, repo, id): # @ReservedAssignment + def new(cls, repo: 'Repo', id): # @ReservedAssignment """ :return: New Object instance of a type appropriate to the object type behind id. The id of the newly created object will be a binsha even though @@ -53,7 +71,7 @@ def new(cls, repo, id): # @ReservedAssignment return repo.rev_parse(str(id)) @classmethod - def new_from_sha(cls, repo, sha1): + def new_from_sha(cls, repo: 'Repo', sha1: bytes) -> Union['Commit', 'TagObject', 'Tree', 'Blob']: """ :return: new object instance of a type appropriate to represent the given binary sha1 @@ -67,7 +85,7 @@ def new_from_sha(cls, repo, sha1): inst.size = oinfo.size return inst - def _set_cache_(self, attr): + def _set_cache_(self, attr: str) -> None: """Retrieve object information""" if attr == "size": oinfo = self.repo.odb.info(self.binsha) @@ -76,43 +94,43 @@ def _set_cache_(self, attr): else: super(Object, self)._set_cache_(attr) - def __eq__(self, other): + def __eq__(self, other: Any) -> bool: """:return: True if the objects have the same SHA1""" if not hasattr(other, 'binsha'): return False return self.binsha == other.binsha - def __ne__(self, other): + def __ne__(self, other: Any) -> bool: """:return: True if the objects do not have the same SHA1 """ if not hasattr(other, 'binsha'): return True return self.binsha != other.binsha - def __hash__(self): + def __hash__(self) -> int: """:return: Hash of our id allowing objects to be used in dicts and sets""" return hash(self.binsha) - def __str__(self): + def __str__(self) -> str: """:return: string of our SHA1 as understood by all git commands""" return self.hexsha - def __repr__(self): + def __repr__(self) -> str: """:return: string with pythonic representation of our object""" return '' % (self.__class__.__name__, self.hexsha) @property - def hexsha(self): + def hexsha(self) -> str: """:return: 40 byte hex version of our 20 byte binary sha""" # b2a_hex produces bytes return bin_to_hex(self.binsha).decode('ascii') @property - def data_stream(self): + def data_stream(self) -> 'OStream': """ :return: File Object compatible stream to the uncompressed raw data of the object :note: returned streams must be read in order""" return self.repo.odb.stream(self.binsha) - def stream_data(self, ostream): + def stream_data(self, ostream: 'OStream') -> 'Object': """Writes our data directly to the given output stream :param ostream: File object compatible stream object. :return: self""" @@ -130,7 +148,9 @@ class IndexObject(Object): # for compatibility with iterable lists _id_attribute_ = 'path' - def __init__(self, repo, binsha, mode=None, path=None): + def __init__(self, + repo: 'Repo', binsha: bytes, mode: Union[None, int] = None, path: Union[None, PathLike] = None + ) -> None: """Initialize a newly instanced IndexObject :param repo: is the Repo we are located in @@ -150,14 +170,14 @@ def __init__(self, repo, binsha, mode=None, path=None): if path is not None: self.path = path - def __hash__(self): + def __hash__(self) -> int: """ :return: Hash of our path as index items are uniquely identifiable by path, not by their data !""" return hash(self.path) - def _set_cache_(self, attr): + def _set_cache_(self, attr: str) -> None: if attr in IndexObject.__slots__: # they cannot be retrieved lateron ( not without searching for them ) raise AttributeError( @@ -168,16 +188,19 @@ def _set_cache_(self, attr): # END handle slot attribute @property - def name(self): + def name(self) -> str: """:return: Name portion of the path, effectively being the basename""" return osp.basename(self.path) @property - def abspath(self): + def abspath(self) -> PathLike: """ :return: Absolute path to this index object in the file system ( as opposed to the .path field which is a path relative to the git repository ). The returned path will be native to the system and contains '\' on windows. """ - return join_path_native(self.repo.working_tree_dir, self.path) + if self.repo.working_tree_dir is not None: + return join_path_native(self.repo.working_tree_dir, self.path) + else: + raise WorkTreeRepositoryUnsupported From 434306e7d09300b62763b7ebd797d08e7b99ea77 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 18 May 2021 14:14:11 +0100 Subject: [PATCH 0462/2375] Add types to objects.blob.py --- git/objects/base.py | 2 +- git/objects/blob.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/git/objects/base.py b/git/objects/base.py index e50387468..34c595eee 100644 --- a/git/objects/base.py +++ b/git/objects/base.py @@ -203,4 +203,4 @@ def abspath(self) -> PathLike: if self.repo.working_tree_dir is not None: return join_path_native(self.repo.working_tree_dir, self.path) else: - raise WorkTreeRepositoryUnsupported + raise WorkTreeRepositoryUnsupported("Working_tree_dir was None or empty") diff --git a/git/objects/blob.py b/git/objects/blob.py index 897f892bf..b027adabd 100644 --- a/git/objects/blob.py +++ b/git/objects/blob.py @@ -4,6 +4,7 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php from mimetypes import guess_type +from typing import Tuple, Union from . import base __all__ = ('Blob', ) @@ -23,7 +24,7 @@ class Blob(base.IndexObject): __slots__ = () @property - def mime_type(self): + def mime_type(self) -> Union[None, Tuple[Union[None, str], Union[None, str]]]: """ :return: String describing the mime type of this file (based on the filename) :note: Defaults to 'text/plain' in case the actual file type is unknown. """ From ecb12c27b6dc56387594df26a205161a1e75c1b9 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 18 May 2021 14:21:47 +0100 Subject: [PATCH 0463/2375] Add types to objects.tag.py --- git/objects/tag.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/git/objects/tag.py b/git/objects/tag.py index b9bc6c248..84d65d3fb 100644 --- a/git/objects/tag.py +++ b/git/objects/tag.py @@ -9,6 +9,12 @@ from ..util import hex_to_bin from ..compat import defenc +from typing import List, TYPE_CHECKING, Union + +if TYPE_CHECKING: + from git.repo import Repo + from git.util import Actor + __all__ = ("TagObject", ) @@ -18,8 +24,10 @@ class TagObject(base.Object): type = "tag" __slots__ = ("object", "tag", "tagger", "tagged_date", "tagger_tz_offset", "message") - def __init__(self, repo, binsha, object=None, tag=None, # @ReservedAssignment - tagger=None, tagged_date=None, tagger_tz_offset=None, message=None): + def __init__(self, repo: 'Repo', binsha: bytes, object: Union[None, base.Object] = None, + tag: Union[None, str] = None, tagger: Union[None, Actor] = None, tagged_date: Union[int, None] = None, + tagger_tz_offset: Union[int, None] = None, message: Union[str, None] = None + ) -> None: # @ReservedAssignment """Initialize a tag object with additional data :param repo: repository this object is located in @@ -46,11 +54,11 @@ def __init__(self, repo, binsha, object=None, tag=None, # @ReservedAssignment if message is not None: self.message = message - def _set_cache_(self, attr): + def _set_cache_(self, attr: str) -> None: """Cache all our attributes at once""" if attr in TagObject.__slots__: ostream = self.repo.odb.stream(self.binsha) - lines = ostream.read().decode(defenc, 'replace').splitlines() + lines = ostream.read().decode(defenc, 'replace').splitlines() # type: List[str] _obj, hexsha = lines[0].split(" ") _type_token, type_name = lines[1].split(" ") From 01c8d59e426ae097e486a0bffa5b21d2118a48c3 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 18 May 2021 14:39:47 +0100 Subject: [PATCH 0464/2375] Add initial types to objects.util.py --- git/objects/blob.py | 2 +- git/objects/util.py | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/git/objects/blob.py b/git/objects/blob.py index b027adabd..a6a5b2241 100644 --- a/git/objects/blob.py +++ b/git/objects/blob.py @@ -24,7 +24,7 @@ class Blob(base.IndexObject): __slots__ = () @property - def mime_type(self) -> Union[None, Tuple[Union[None, str], Union[None, str]]]: + def mime_type(self) -> Union[None, str, Tuple[Union[None, str], Union[None, str]]]: """ :return: String describing the mime type of this file (based on the filename) :note: Defaults to 'text/plain' in case the actual file type is unknown. """ diff --git a/git/objects/util.py b/git/objects/util.py index d15d83c35..e823d39aa 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -17,6 +17,15 @@ import calendar from datetime import datetime, timedelta, tzinfo + +from typing import TYPE_CHECKING, Union + +if TYPE_CHECKING: + from .commit import Commit + from .blob import Blob + from .tag import TagObject + from .tree import Tree + __all__ = ('get_object_type_by_name', 'parse_date', 'parse_actor_and_date', 'ProcessStreamAdapter', 'Traversable', 'altz_to_utctz_str', 'utctz_to_altz', 'verify_utctz', 'Actor', 'tzoffset', 'utc') @@ -26,7 +35,7 @@ #{ Functions -def mode_str_to_int(modestr): +def mode_str_to_int(modestr: str) -> int: """ :param modestr: string like 755 or 644 or 100644 - only the last 6 chars will be used :return: @@ -41,7 +50,7 @@ def mode_str_to_int(modestr): return mode -def get_object_type_by_name(object_type_name): +def get_object_type_by_name(object_type_name: str) -> Union['Commit', 'TagObject', 'Tree', 'Blob']: """ :return: type suitable to handle the given object type name. Use the type to create new instances. @@ -65,7 +74,7 @@ def get_object_type_by_name(object_type_name): raise ValueError("Cannot handle unknown object type: %s" % object_type_name) -def utctz_to_altz(utctz): +def utctz_to_altz(utctz: str) -> int: """we convert utctz to the timezone in seconds, it is the format time.altzone returns. Git stores it as UTC timezone which has the opposite sign as well, which explains the -1 * ( that was made explicit here ) @@ -73,7 +82,7 @@ def utctz_to_altz(utctz): return -1 * int(float(utctz) / 100 * 3600) -def altz_to_utctz_str(altz): +def altz_to_utctz_str(altz: int) -> str: """As above, but inverses the operation, returning a string that can be used in commit objects""" utci = -1 * int((float(altz) / 3600) * 100) @@ -83,7 +92,7 @@ def altz_to_utctz_str(altz): return prefix + utcs -def verify_utctz(offset): +def verify_utctz(offset: str) -> str: """:raise ValueError: if offset is incorrect :return: offset""" fmt_exc = ValueError("Invalid timezone offset format: %s" % offset) @@ -101,6 +110,7 @@ def verify_utctz(offset): class tzoffset(tzinfo): + def __init__(self, secs_west_of_utc, name=None): self._offset = timedelta(seconds=-secs_west_of_utc) self._name = name or 'fixed' From 9c3255387fe2ce9b156cc06714148436ad2490d9 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 20 May 2021 13:47:11 +0100 Subject: [PATCH 0465/2375] Add types to objects.util.py tzoffset parse_actor_and_date() --- git/objects/util.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index e823d39aa..ebfb37585 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -17,14 +17,15 @@ import calendar from datetime import datetime, timedelta, tzinfo - -from typing import TYPE_CHECKING, Union +# typing ------------------------------------------------------------ +from typing import Literal, TYPE_CHECKING, Tuple, Union if TYPE_CHECKING: from .commit import Commit from .blob import Blob from .tag import TagObject from .tree import Tree + from subprocess import Popen __all__ = ('get_object_type_by_name', 'parse_date', 'parse_actor_and_date', 'ProcessStreamAdapter', 'Traversable', 'altz_to_utctz_str', 'utctz_to_altz', @@ -111,27 +112,27 @@ def verify_utctz(offset: str) -> str: class tzoffset(tzinfo): - def __init__(self, secs_west_of_utc, name=None): + def __init__(self, secs_west_of_utc: float, name: Union[None, str] = None) -> None: self._offset = timedelta(seconds=-secs_west_of_utc) self._name = name or 'fixed' - def __reduce__(self): + def __reduce__(self) -> Tuple['tzoffset', Tuple[float, str]]: return tzoffset, (-self._offset.total_seconds(), self._name) - def utcoffset(self, dt): + def utcoffset(self, dt) -> timedelta: return self._offset - def tzname(self, dt): + def tzname(self, dt) -> str: return self._name - def dst(self, dt): + def dst(self, dt) -> timedelta: return ZERO utc = tzoffset(0, 'UTC') -def from_timestamp(timestamp, tz_offset): +def from_timestamp(timestamp, tz_offset: float) -> datetime: """Converts a timestamp + tz_offset into an aware datetime instance.""" utc_dt = datetime.fromtimestamp(timestamp, utc) try: @@ -141,7 +142,7 @@ def from_timestamp(timestamp, tz_offset): return utc_dt -def parse_date(string_date): +def parse_date(string_date: str) -> Tuple[int, int]: """ Parse the given date as one of the following @@ -228,7 +229,7 @@ def parse_date(string_date): _re_only_actor = re.compile(r'^.+? (.*)$') -def parse_actor_and_date(line): +def parse_actor_and_date(line: str) -> Tuple[Actor, int, int]: """Parse out the actor (author or committer) info from a line like:: author Tom Preston-Werner 1191999972 -0700 @@ -257,7 +258,7 @@ class ProcessStreamAdapter(object): it if the instance goes out of scope.""" __slots__ = ("_proc", "_stream") - def __init__(self, process, stream_name): + def __init__(self, process: Popen, stream_name: str): self._proc = process self._stream = getattr(process, stream_name) From f875ddea28b09f2b78496266c80502d5dc2b7411 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 20 May 2021 14:27:15 +0100 Subject: [PATCH 0466/2375] Mypy fixes --- git/objects/base.py | 2 +- git/objects/tag.py | 8 ++++++-- git/objects/util.py | 26 ++++++++++++++------------ 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/git/objects/base.py b/git/objects/base.py index 34c595eee..884f96515 100644 --- a/git/objects/base.py +++ b/git/objects/base.py @@ -89,7 +89,7 @@ def _set_cache_(self, attr: str) -> None: """Retrieve object information""" if attr == "size": oinfo = self.repo.odb.info(self.binsha) - self.size = oinfo.size + self.size = oinfo.size # type: int # assert oinfo.type == self.type, _assertion_msg_format % (self.binsha, oinfo.type, self.type) else: super(Object, self)._set_cache_(attr) diff --git a/git/objects/tag.py b/git/objects/tag.py index 84d65d3fb..abcc75345 100644 --- a/git/objects/tag.py +++ b/git/objects/tag.py @@ -14,6 +14,9 @@ if TYPE_CHECKING: from git.repo import Repo from git.util import Actor + from .commit import Commit + from .blob import Blob + from .tree import Tree __all__ = ("TagObject", ) @@ -42,7 +45,7 @@ def __init__(self, repo: 'Repo', binsha: bytes, object: Union[None, base.Object] authored_date is in, in a format similar to time.altzone""" super(TagObject, self).__init__(repo, binsha) if object is not None: - self.object = object + self.object = object # type: Union['Commit', 'Blob', 'Tree', 'TagObject'] if tag is not None: self.tag = tag if tagger is not None: @@ -62,8 +65,9 @@ def _set_cache_(self, attr: str) -> None: _obj, hexsha = lines[0].split(" ") _type_token, type_name = lines[1].split(" ") + object_type = get_object_type_by_name(type_name.encode('ascii')) self.object = \ - get_object_type_by_name(type_name.encode('ascii'))(self.repo, hex_to_bin(hexsha)) + object_type(self.repo, hex_to_bin(hexsha)) self.tag = lines[2][4:] # tag diff --git a/git/objects/util.py b/git/objects/util.py index ebfb37585..6bc1b7093 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -18,7 +18,7 @@ from datetime import datetime, timedelta, tzinfo # typing ------------------------------------------------------------ -from typing import Literal, TYPE_CHECKING, Tuple, Union +from typing import Literal, TYPE_CHECKING, Tuple, Type, Union, cast if TYPE_CHECKING: from .commit import Commit @@ -36,7 +36,7 @@ #{ Functions -def mode_str_to_int(modestr: str) -> int: +def mode_str_to_int(modestr: Union[bytes, str]) -> int: """ :param modestr: string like 755 or 644 or 100644 - only the last 6 chars will be used :return: @@ -46,12 +46,14 @@ def mode_str_to_int(modestr: str) -> int: for example.""" mode = 0 for iteration, char in enumerate(reversed(modestr[-6:])): + char = cast(Union[str, int], char) mode += int(char) << iteration * 3 # END for each char return mode -def get_object_type_by_name(object_type_name: str) -> Union['Commit', 'TagObject', 'Tree', 'Blob']: +def get_object_type_by_name(object_type_name: bytes + ) -> Union[Type['Commit'], Type['TagObject'], Type['Tree'], Type['Blob']]: """ :return: type suitable to handle the given object type name. Use the type to create new instances. @@ -72,7 +74,7 @@ def get_object_type_by_name(object_type_name: str) -> Union['Commit', 'TagObject from . import tree return tree.Tree else: - raise ValueError("Cannot handle unknown object type: %s" % object_type_name) + raise ValueError("Cannot handle unknown object type: %s" % object_type_name.decode()) def utctz_to_altz(utctz: str) -> int: @@ -116,7 +118,7 @@ def __init__(self, secs_west_of_utc: float, name: Union[None, str] = None) -> No self._offset = timedelta(seconds=-secs_west_of_utc) self._name = name or 'fixed' - def __reduce__(self) -> Tuple['tzoffset', Tuple[float, str]]: + def __reduce__(self) -> Tuple[Type['tzoffset'], Tuple[float, str]]: return tzoffset, (-self._offset.total_seconds(), self._name) def utcoffset(self, dt) -> timedelta: @@ -163,18 +165,18 @@ def parse_date(string_date: str) -> Tuple[int, int]: # git time try: if string_date.count(' ') == 1 and string_date.rfind(':') == -1: - timestamp, offset = string_date.split() + timestamp, offset_str = string_date.split() if timestamp.startswith('@'): timestamp = timestamp[1:] - timestamp = int(timestamp) - return timestamp, utctz_to_altz(verify_utctz(offset)) + timestamp_int = int(timestamp) + return timestamp_int, utctz_to_altz(verify_utctz(offset_str)) else: - offset = "+0000" # local time by default + offset_str = "+0000" # local time by default if string_date[-5] in '-+': - offset = verify_utctz(string_date[-5:]) + offset_str = verify_utctz(string_date[-5:]) string_date = string_date[:-6] # skip space as well # END split timezone info - offset = utctz_to_altz(offset) + offset = utctz_to_altz(offset_str) # now figure out the date and time portion - split time date_formats = [] @@ -235,7 +237,7 @@ def parse_actor_and_date(line: str) -> Tuple[Actor, int, int]: author Tom Preston-Werner 1191999972 -0700 :return: [Actor, int_seconds_since_epoch, int_timezone_offset]""" - actor, epoch, offset = '', 0, 0 + actor, epoch, offset = '', '0', '0' m = _re_actor_epoch.search(line) if m: actor, epoch, offset = m.groups() From 82b03c2eb07f08dd5d6174a04e4288d41f49920f Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 20 May 2021 14:29:11 +0100 Subject: [PATCH 0467/2375] flake8 fixes --- git/objects/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/objects/util.py b/git/objects/util.py index 6bc1b7093..b30733815 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -18,7 +18,7 @@ from datetime import datetime, timedelta, tzinfo # typing ------------------------------------------------------------ -from typing import Literal, TYPE_CHECKING, Tuple, Type, Union, cast +from typing import TYPE_CHECKING, Tuple, Type, Union, cast if TYPE_CHECKING: from .commit import Commit From c5c69071fd6c730d29c31759caddb0ba8b8e92c3 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 20 May 2021 14:34:57 +0100 Subject: [PATCH 0468/2375] Mypy fixes --- git/objects/blob.py | 2 +- git/objects/util.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/git/objects/blob.py b/git/objects/blob.py index a6a5b2241..013eaf8c8 100644 --- a/git/objects/blob.py +++ b/git/objects/blob.py @@ -30,5 +30,5 @@ def mime_type(self) -> Union[None, str, Tuple[Union[None, str], Union[None, str] :note: Defaults to 'text/plain' in case the actual file type is unknown. """ guesses = None if self.path: - guesses = guess_type(self.path) + guesses = guess_type(str(self.path)) return guesses and guesses[0] or self.DEFAULT_MIME_TYPE diff --git a/git/objects/util.py b/git/objects/util.py index b30733815..c123b02a8 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -27,6 +27,8 @@ from .tree import Tree from subprocess import Popen +# -------------------------------------------------------------------- + __all__ = ('get_object_type_by_name', 'parse_date', 'parse_actor_and_date', 'ProcessStreamAdapter', 'Traversable', 'altz_to_utctz_str', 'utctz_to_altz', 'verify_utctz', 'Actor', 'tzoffset', 'utc') From 82b60ab31cfa2ca146069df8dbc21ebfc917db0f Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 20 May 2021 14:37:25 +0100 Subject: [PATCH 0469/2375] Change Popen to forwardref --- git/objects/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/objects/util.py b/git/objects/util.py index c123b02a8..012f9f235 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -262,7 +262,7 @@ class ProcessStreamAdapter(object): it if the instance goes out of scope.""" __slots__ = ("_proc", "_stream") - def __init__(self, process: Popen, stream_name: str): + def __init__(self, process: 'Popen', stream_name: str): self._proc = process self._stream = getattr(process, stream_name) From da88d360d040cfde4c2bdb6c2f38218481b9676b Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 20 May 2021 17:29:43 +0100 Subject: [PATCH 0470/2375] Change Actor to forwardref --- git/objects/tag.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/git/objects/tag.py b/git/objects/tag.py index abcc75345..cb6efbe9b 100644 --- a/git/objects/tag.py +++ b/git/objects/tag.py @@ -27,9 +27,13 @@ class TagObject(base.Object): type = "tag" __slots__ = ("object", "tag", "tagger", "tagged_date", "tagger_tz_offset", "message") - def __init__(self, repo: 'Repo', binsha: bytes, object: Union[None, base.Object] = None, - tag: Union[None, str] = None, tagger: Union[None, Actor] = None, tagged_date: Union[int, None] = None, - tagger_tz_offset: Union[int, None] = None, message: Union[str, None] = None + def __init__(self, repo: 'Repo', binsha: bytes, + object: Union[None, base.Object] = None, + tag: Union[None, str] = None, + tagger: Union[None, 'Actor'] = None, + tagged_date: Union[int, None] = None, + tagger_tz_offset: Union[int, None] = None, + message: Union[str, None] = None ) -> None: # @ReservedAssignment """Initialize a tag object with additional data From c242b55d7c64ee43405f8b335c762bcf92189d38 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 20 May 2021 17:34:26 +0100 Subject: [PATCH 0471/2375] Add types to objects.util.py ProcessStreamAdapter --- git/objects/util.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index 012f9f235..fdc1406b7 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -18,7 +18,7 @@ from datetime import datetime, timedelta, tzinfo # typing ------------------------------------------------------------ -from typing import TYPE_CHECKING, Tuple, Type, Union, cast +from typing import Any, IO, TYPE_CHECKING, Tuple, Type, Union, cast if TYPE_CHECKING: from .commit import Commit @@ -262,11 +262,11 @@ class ProcessStreamAdapter(object): it if the instance goes out of scope.""" __slots__ = ("_proc", "_stream") - def __init__(self, process: 'Popen', stream_name: str): + def __init__(self, process: 'Popen', stream_name: str) -> None: self._proc = process - self._stream = getattr(process, stream_name) + self._stream = getattr(process, stream_name) # type: IO[str] ## guess - def __getattr__(self, attr): + def __getattr__(self, attr: str) -> Any: return getattr(self._stream, attr) From 5402a166a4971512f9d513bf36159dead9672ae9 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 20 May 2021 20:44:53 +0100 Subject: [PATCH 0472/2375] Add types to objects _get_intermediate_items() --- git/objects/commit.py | 12 ++++--- git/objects/submodule/base.py | 6 ++-- git/objects/tree.py | 8 +++-- git/objects/util.py | 64 ++++++++++++++++++++++++++++------- 4 files changed, 68 insertions(+), 22 deletions(-) diff --git a/git/objects/commit.py b/git/objects/commit.py index 45e6d772c..6d3f0bac0 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -4,6 +4,7 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php +from typing import Tuple, Union from gitdb import IStream from git.util import ( hex_to_bin, @@ -70,7 +71,8 @@ class Commit(base.Object, Iterable, Diffable, Traversable, Serializable): def __init__(self, repo, binsha, tree=None, author=None, authored_date=None, author_tz_offset=None, committer=None, committed_date=None, committer_tz_offset=None, - message=None, parents=None, encoding=None, gpgsig=None): + message=None, parents: Union[Tuple['Commit', ...], None] = None, + encoding=None, gpgsig=None): """Instantiate a new Commit. All keyword arguments taking None as default will be implicitly set on first query. @@ -133,7 +135,7 @@ def __init__(self, repo, binsha, tree=None, author=None, authored_date=None, aut self.gpgsig = gpgsig @classmethod - def _get_intermediate_items(cls, commit): + def _get_intermediate_items(cls, commit: 'Commit') -> Tuple['Commit', ...]: # type: ignore return commit.parents @classmethod @@ -477,7 +479,7 @@ def _deserialize(self, stream): readline = stream.readline self.tree = Tree(self.repo, hex_to_bin(readline().split()[1]), Tree.tree_id << 12, '') - self.parents = [] + self.parents_list = [] # List['Commit'] next_line = None while True: parent_line = readline() @@ -485,9 +487,9 @@ def _deserialize(self, stream): next_line = parent_line break # END abort reading parents - self.parents.append(type(self)(self.repo, hex_to_bin(parent_line.split()[-1].decode('ascii')))) + self.parents_list.append(type(self)(self.repo, hex_to_bin(parent_line.split()[-1].decode('ascii')))) # END for each parent line - self.parents = tuple(self.parents) + self.parents = tuple(self.parents_list) # type: Tuple['Commit', ...] # we don't know actual author encoding before we have parsed it, so keep the lines around author_line = next_line diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index e3be1a728..b03fa22a5 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -3,6 +3,7 @@ import logging import os import stat +from typing import List from unittest import SkipTest import uuid @@ -134,10 +135,11 @@ def _set_cache_(self, attr): super(Submodule, self)._set_cache_(attr) # END handle attribute name - def _get_intermediate_items(self, item): + @classmethod + def _get_intermediate_items(cls, item: 'Submodule') -> List['Submodule']: # type: ignore """:return: all the submodules of our module repository""" try: - return type(self).list_items(item.module()) + return cls.list_items(item.module()) except InvalidGitRepositoryError: return [] # END handle intermediate items diff --git a/git/objects/tree.py b/git/objects/tree.py index 68e98329b..65c9be4c7 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -3,6 +3,7 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php +from typing import Iterable, Iterator, Tuple, Union, cast from git.util import join_path import git.diff as diff from git.util import to_bin_sha @@ -182,8 +183,10 @@ def __init__(self, repo, binsha, mode=tree_id << 12, path=None): super(Tree, self).__init__(repo, binsha, mode, path) @classmethod - def _get_intermediate_items(cls, index_object): + def _get_intermediate_items(cls, index_object: 'Tree', # type: ignore + ) -> Tuple['Tree', ...]: if index_object.type == "tree": + index_object = cast('Tree', index_object) return tuple(index_object._iter_convert_to_object(index_object._cache)) return () @@ -196,7 +199,8 @@ def _set_cache_(self, attr): super(Tree, self)._set_cache_(attr) # END handle attribute - def _iter_convert_to_object(self, iterable): + def _iter_convert_to_object(self, iterable: Iterable[Tuple[bytes, int, str]] + ) -> Iterator[Union[Blob, 'Tree', Submodule]]: """Iterable yields tuples of (binsha, mode, name), which will be converted to the respective object representation""" for binsha, mode, name in iterable: diff --git a/git/objects/util.py b/git/objects/util.py index fdc1406b7..88183567c 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -4,6 +4,8 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php """Module for general utility functions""" + + from git.util import ( IterableList, Actor @@ -18,9 +20,10 @@ from datetime import datetime, timedelta, tzinfo # typing ------------------------------------------------------------ -from typing import Any, IO, TYPE_CHECKING, Tuple, Type, Union, cast +from typing import Any, Callable, IO, Iterator, Sequence, TYPE_CHECKING, Tuple, Type, Union, cast, overload if TYPE_CHECKING: + from .submodule.base import Submodule from .commit import Commit from .blob import Blob from .tag import TagObject @@ -115,7 +118,7 @@ def verify_utctz(offset: str) -> str: class tzoffset(tzinfo): - + def __init__(self, secs_west_of_utc: float, name: Union[None, str] = None) -> None: self._offset = timedelta(seconds=-secs_west_of_utc) self._name = name or 'fixed' @@ -275,29 +278,61 @@ class Traversable(object): """Simple interface to perform depth-first or breadth-first traversals into one direction. Subclasses only need to implement one function. - Instances of the Subclass must be hashable""" + Instances of the Subclass must be hashable + + Defined subclasses = [Commit, Tree, SubModule] + """ __slots__ = () + @overload + @classmethod + def _get_intermediate_items(cls, item: 'Commit') -> Tuple['Commit', ...]: + ... + + @overload @classmethod - def _get_intermediate_items(cls, item): + def _get_intermediate_items(cls, item: 'Submodule') -> Tuple['Submodule', ...]: + ... + + @overload + @classmethod + def _get_intermediate_items(cls, item: 'Tree') -> Tuple['Tree', ...]: + ... + + @overload + @classmethod + def _get_intermediate_items(cls, item: 'Traversable') -> Tuple['Traversable', ...]: + ... + + @classmethod + def _get_intermediate_items(cls, item: 'Traversable' + ) -> Sequence['Traversable']: """ Returns: - List of items connected to the given item. + Tuple of items connected to the given item. Must be implemented in subclass + + class Commit:: (cls, Commit) -> Tuple[Commit, ...] + class Submodule:: (cls, Submodule) -> Iterablelist[Submodule] + class Tree:: (cls, Tree) -> Tuple[Tree, ...] """ raise NotImplementedError("To be implemented in subclass") - def list_traverse(self, *args, **kwargs): + def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList: """ :return: IterableList with the results of the traversal as produced by traverse()""" - out = IterableList(self._id_attribute_) + out = IterableList(self._id_attribute_) # type: ignore[attr-defined] # defined in sublcasses out.extend(self.traverse(*args, **kwargs)) return out - def traverse(self, predicate=lambda i, d: True, - prune=lambda i, d: False, depth=-1, branch_first=True, - visit_once=True, ignore_self=1, as_edge=False): + def traverse(self, + predicate: Callable[[object, int], bool] = lambda i, d: True, + prune: Callable[[object, int], bool] = lambda i, d: False, + depth: int = -1, + branch_first: bool = True, + visit_once: bool = True, ignore_self: int = 1, as_edge: bool = False + ) -> Union[Iterator['Traversable'], Iterator[Tuple['Traversable', 'Traversable']]]: """:return: iterator yielding of items found when traversing self :param predicate: f(i,d) returns False if item i at depth d should not be included in the result @@ -329,13 +364,16 @@ def traverse(self, predicate=lambda i, d: True, destination, i.e. tuple(src, dest) with the edge spanning from source to destination""" visited = set() - stack = Deque() + stack = Deque() # type: Deque[Tuple[int, Traversable, Union[Traversable, None]]] stack.append((0, self, None)) # self is always depth level 0 - def addToStack(stack, item, branch_first, depth): + def addToStack(stack: Deque[Tuple[int, 'Traversable', Union['Traversable', None]]], + item: 'Traversable', + branch_first: bool, + depth) -> None: lst = self._get_intermediate_items(item) if not lst: - return + return None if branch_first: stack.extendleft((depth, i, item) for i in lst) else: From 6503ef72d90164840c06f168ab08f0426fb612bf Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 20 May 2021 20:55:17 +0100 Subject: [PATCH 0473/2375] Add types to objects.util.py change deque to typing.Deque --- git/objects/util.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index 88183567c..106bab0e3 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -12,7 +12,7 @@ ) import re -from collections import deque as Deque +from collections import deque from string import digits import time @@ -20,7 +20,7 @@ from datetime import datetime, timedelta, tzinfo # typing ------------------------------------------------------------ -from typing import Any, Callable, IO, Iterator, Sequence, TYPE_CHECKING, Tuple, Type, Union, cast, overload +from typing import Any, Callable, Deque, IO, Iterator, Sequence, TYPE_CHECKING, Tuple, Type, Union, cast, overload if TYPE_CHECKING: from .submodule.base import Submodule @@ -364,7 +364,7 @@ def traverse(self, destination, i.e. tuple(src, dest) with the edge spanning from source to destination""" visited = set() - stack = Deque() # type: Deque[Tuple[int, Traversable, Union[Traversable, None]]] + stack = deque() # type: Deque[Tuple[int, Traversable, Union[Traversable, None]]] stack.append((0, self, None)) # self is always depth level 0 def addToStack(stack: Deque[Tuple[int, 'Traversable', Union['Traversable', None]]], From ce8cc4a6123a3ea11fc4e35416d93a8bd68cfd65 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 20 May 2021 21:06:09 +0100 Subject: [PATCH 0474/2375] Add types to commit.py spit parents into list and tuple types --- git/objects/commit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/git/objects/commit.py b/git/objects/commit.py index 6d3f0bac0..b95f4c657 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -129,6 +129,7 @@ def __init__(self, repo, binsha, tree=None, author=None, authored_date=None, aut self.message = message if parents is not None: self.parents = parents + self.parents_list = list(parents) if encoding is not None: self.encoding = encoding if gpgsig is not None: From 76bcd7081265f1d72fcc3101bfda62c67d8a7f32 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 20 May 2021 21:10:33 +0100 Subject: [PATCH 0475/2375] Add types to commit.py undo --- git/objects/commit.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/git/objects/commit.py b/git/objects/commit.py index b95f4c657..228e897ea 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -129,7 +129,6 @@ def __init__(self, repo, binsha, tree=None, author=None, authored_date=None, aut self.message = message if parents is not None: self.parents = parents - self.parents_list = list(parents) if encoding is not None: self.encoding = encoding if gpgsig is not None: @@ -480,7 +479,7 @@ def _deserialize(self, stream): readline = stream.readline self.tree = Tree(self.repo, hex_to_bin(readline().split()[1]), Tree.tree_id << 12, '') - self.parents_list = [] # List['Commit'] + self.parents = [] next_line = None while True: parent_line = readline() @@ -488,9 +487,9 @@ def _deserialize(self, stream): next_line = parent_line break # END abort reading parents - self.parents_list.append(type(self)(self.repo, hex_to_bin(parent_line.split()[-1].decode('ascii')))) + self.parents.append(type(self)(self.repo, hex_to_bin(parent_line.split()[-1].decode('ascii')))) # END for each parent line - self.parents = tuple(self.parents_list) # type: Tuple['Commit', ...] + self.parents = tuple(self.parents) # we don't know actual author encoding before we have parsed it, so keep the lines around author_line = next_line From c51f93823d46f0882b49822ce6f9e668228e5b8d Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 20 May 2021 21:34:33 +0100 Subject: [PATCH 0476/2375] Add types to objects _serialize() and _deserialize() --- git/objects/commit.py | 20 ++++++++++++-------- git/objects/tree.py | 16 +++++++++++++--- git/objects/util.py | 8 ++++---- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/git/objects/commit.py b/git/objects/commit.py index 228e897ea..26db6e36d 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -4,7 +4,6 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php -from typing import Tuple, Union from gitdb import IStream from git.util import ( hex_to_bin, @@ -37,6 +36,11 @@ from io import BytesIO import logging +from typing import List, Tuple, Union, TYPE_CHECKING + +if TYPE_CHECKING: + from git.repo import Repo + log = logging.getLogger('git.objects.commit') log.addHandler(logging.NullHandler()) @@ -71,7 +75,7 @@ class Commit(base.Object, Iterable, Diffable, Traversable, Serializable): def __init__(self, repo, binsha, tree=None, author=None, authored_date=None, author_tz_offset=None, committer=None, committed_date=None, committer_tz_offset=None, - message=None, parents: Union[Tuple['Commit', ...], None] = None, + message=None, parents: Union[Tuple['Commit', ...], List['Commit'], None] = None, encoding=None, gpgsig=None): """Instantiate a new Commit. All keyword arguments taking None as default will be implicitly set on first query. @@ -135,11 +139,11 @@ def __init__(self, repo, binsha, tree=None, author=None, authored_date=None, aut self.gpgsig = gpgsig @classmethod - def _get_intermediate_items(cls, commit: 'Commit') -> Tuple['Commit', ...]: # type: ignore - return commit.parents + def _get_intermediate_items(cls, commit: 'Commit') -> Tuple['Commit', ...]: # type: ignore ## cos overriding super + return tuple(commit.parents) @classmethod - def _calculate_sha_(cls, repo, commit): + def _calculate_sha_(cls, repo: 'Repo', commit: 'Commit') -> bytes: '''Calculate the sha of a commit. :param repo: Repo object the commit should be part of @@ -432,7 +436,7 @@ def create_from_tree(cls, repo, tree, message, parent_commits=None, head=False, #{ Serializable Implementation - def _serialize(self, stream): + def _serialize(self, stream: BytesIO) -> 'Commit': write = stream.write write(("tree %s\n" % self.tree).encode('ascii')) for p in self.parents: @@ -473,7 +477,7 @@ def _serialize(self, stream): # END handle encoding return self - def _deserialize(self, stream): + def _deserialize(self, stream: BytesIO) -> 'Commit': """:param from_rev_list: if true, the stream format is coming from the rev-list command Otherwise it is assumed to be a plain data stream from our object""" readline = stream.readline @@ -513,7 +517,7 @@ def _deserialize(self, stream): buf = enc.strip() while buf: if buf[0:10] == b"encoding ": - self.encoding = buf[buf.find(' ') + 1:].decode( + self.encoding = buf[buf.find(b' ') + 1:].decode( self.encoding, 'ignore') elif buf[0:7] == b"gpgsig ": sig = buf[buf.find(b' ') + 1:] + b"\n" diff --git a/git/objects/tree.py b/git/objects/tree.py index 65c9be4c7..29b2a6846 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -3,7 +3,6 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php -from typing import Iterable, Iterator, Tuple, Union, cast from git.util import join_path import git.diff as diff from git.util import to_bin_sha @@ -18,6 +17,17 @@ tree_to_stream ) + +# typing ------------------------------------------------- + +from typing import Iterable, Iterator, Tuple, Union, cast, TYPE_CHECKING + +if TYPE_CHECKING: + from io import BytesIO + +#-------------------------------------------------------- + + cmp = lambda a, b: (a > b) - (a < b) __all__ = ("TreeModifier", "Tree") @@ -321,7 +331,7 @@ def __contains__(self, item): def __reversed__(self): return reversed(self._iter_convert_to_object(self._cache)) - def _serialize(self, stream): + def _serialize(self, stream: 'BytesIO') -> 'Tree': """Serialize this tree into the stream. Please note that we will assume our tree data to be in a sorted state. If this is not the case, serialization will not generate a correct tree representation as these are assumed to be sorted @@ -329,7 +339,7 @@ def _serialize(self, stream): tree_to_stream(self._cache, stream.write) return self - def _deserialize(self, stream): + def _deserialize(self, stream: 'BytesIO') -> 'Tree': self._cache = tree_entries_from_data(stream.read()) return self diff --git a/git/objects/util.py b/git/objects/util.py index 106bab0e3..b94e9f122 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -5,7 +5,6 @@ # the BSD License: http://www.opensource.org/licenses/bsd-license.php """Module for general utility functions""" - from git.util import ( IterableList, Actor @@ -20,9 +19,10 @@ from datetime import datetime, timedelta, tzinfo # typing ------------------------------------------------------------ -from typing import Any, Callable, Deque, IO, Iterator, Sequence, TYPE_CHECKING, Tuple, Type, Union, cast, overload +from typing import (Any, Callable, Deque, IO, Iterator, Sequence, TYPE_CHECKING, Tuple, Type, Union, cast, overload) if TYPE_CHECKING: + from io import BytesIO from .submodule.base import Submodule from .commit import Commit from .blob import Blob @@ -412,14 +412,14 @@ class Serializable(object): """Defines methods to serialize and deserialize objects from and into a data stream""" __slots__ = () - def _serialize(self, stream): + def _serialize(self, stream: 'BytesIO') -> 'Serializable': """Serialize the data of this object into the given data stream :note: a serialized object would ``_deserialize`` into the same object :param stream: a file-like object :return: self""" raise NotImplementedError("To be implemented in subclass") - def _deserialize(self, stream): + def _deserialize(self, stream: 'BytesIO') -> 'Serializable': """Deserialize all information regarding this object from the stream :param stream: a file-like object :return: self""" From 90f0fb8f449b6d3e4f12c28d8699ee79a6763b80 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 20 May 2021 21:51:56 +0100 Subject: [PATCH 0477/2375] change IO[str] to stringIO --- git/objects/blob.py | 3 +-- git/objects/util.py | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/git/objects/blob.py b/git/objects/blob.py index 013eaf8c8..017178f05 100644 --- a/git/objects/blob.py +++ b/git/objects/blob.py @@ -4,7 +4,6 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php from mimetypes import guess_type -from typing import Tuple, Union from . import base __all__ = ('Blob', ) @@ -24,7 +23,7 @@ class Blob(base.IndexObject): __slots__ = () @property - def mime_type(self) -> Union[None, str, Tuple[Union[None, str], Union[None, str]]]: + def mime_type(self) -> str: """ :return: String describing the mime type of this file (based on the filename) :note: Defaults to 'text/plain' in case the actual file type is unknown. """ diff --git a/git/objects/util.py b/git/objects/util.py index b94e9f122..087f0166b 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -19,10 +19,10 @@ from datetime import datetime, timedelta, tzinfo # typing ------------------------------------------------------------ -from typing import (Any, Callable, Deque, IO, Iterator, Sequence, TYPE_CHECKING, Tuple, Type, Union, cast, overload) +from typing import (Any, Callable, Deque, Iterator, Sequence, TYPE_CHECKING, Tuple, Type, Union, cast, overload) if TYPE_CHECKING: - from io import BytesIO + from io import BytesIO, StringIO from .submodule.base import Submodule from .commit import Commit from .blob import Blob @@ -267,7 +267,7 @@ class ProcessStreamAdapter(object): def __init__(self, process: 'Popen', stream_name: str) -> None: self._proc = process - self._stream = getattr(process, stream_name) # type: IO[str] ## guess + self._stream = getattr(process, stream_name) # type: StringIO ## guess def __getattr__(self, attr: str) -> Any: return getattr(self._stream, attr) From 385a8c6c1a72dc34f69c5273c1b4c1285cc1d3c5 Mon Sep 17 00:00:00 2001 From: Robert Westman Date: Sat, 5 Jun 2021 12:15:38 +0200 Subject: [PATCH 0478/2375] Adds repo.is_valid_object check --- git/repo/base.py | 21 ++++++++++++++++++++- test/test_repo.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/git/repo/base.py b/git/repo/base.py index 55682411a..e7b1274b1 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -3,12 +3,14 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php - +import binascii import logging import os import re import warnings +from gitdb.exc import BadObject + from git.cmd import ( Git, handle_process_output @@ -618,6 +620,23 @@ def is_ancestor(self, ancestor_rev: 'Commit', rev: 'Commit') -> bool: raise return True + def is_valid_object(self, sha: str, object_type: Union['blob', 'commit', 'tree', 'tag'] = None) -> bool: + try: + complete_sha = self.odb.partial_to_complete_sha_hex(sha) + object_info = self.odb.info(complete_sha) + if object_type: + if object_info.type == object_type.encode(): + return True + else: + log.debug(f"Commit hash points to an object of type '{object_info.type.decode()}'. " + f"Requested were objects of type '{object_type}'") + return False + else: + return True + except BadObject as e: + log.debug("Commit hash is invalid.") + return False + def _get_daemon_export(self) -> bool: if self.git_dir: filename = osp.join(self.git_dir, self.DAEMON_EXPORT_FILE) diff --git a/test/test_repo.py b/test/test_repo.py index 04102b013..8aced94d4 100644 --- a/test/test_repo.py +++ b/test/test_repo.py @@ -989,6 +989,34 @@ def test_is_ancestor(self): for i, j in itertools.permutations([c1, 'ffffff', ''], r=2): self.assertRaises(GitCommandError, repo.is_ancestor, i, j) + def test_is_valid_object(self): + repo = self.rorepo + commit_sha = 'f6aa8d1' + blob_sha = '1fbe3e4375' + tree_sha = '960b40fe36' + tag_sha = '42c2f60c43' + + # Check for valid objects + self.assertTrue(repo.is_valid_object(commit_sha)) + self.assertTrue(repo.is_valid_object(blob_sha)) + self.assertTrue(repo.is_valid_object(tree_sha)) + self.assertTrue(repo.is_valid_object(tag_sha)) + + # Check for valid objects of specific type + self.assertTrue(repo.is_valid_object(commit_sha, 'commit')) + self.assertTrue(repo.is_valid_object(blob_sha, 'blob')) + self.assertTrue(repo.is_valid_object(tree_sha, 'tree')) + self.assertTrue(repo.is_valid_object(tag_sha, 'tag')) + + # Check for invalid objects + self.assertFalse(repo.is_valid_object(b'1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a', 'blob')) + + # Check for invalid objects of specific type + self.assertFalse(repo.is_valid_object(commit_sha, 'blob')) + self.assertFalse(repo.is_valid_object(blob_sha, 'commit')) + self.assertFalse(repo.is_valid_object(tree_sha, 'commit')) + self.assertFalse(repo.is_valid_object(tag_sha, 'commit')) + @with_rw_directory def test_git_work_tree_dotgit(self, rw_dir): """Check that we find .git as a worktree file and find the worktree From ac4fe6efbccc2ad5c2044bf36e34019363018630 Mon Sep 17 00:00:00 2001 From: Robert Westman Date: Sat, 5 Jun 2021 12:22:24 +0200 Subject: [PATCH 0479/2375] Fixes type check for is_valid_object --- git/repo/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/repo/base.py b/git/repo/base.py index e7b1274b1..b19503ee2 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -620,7 +620,7 @@ def is_ancestor(self, ancestor_rev: 'Commit', rev: 'Commit') -> bool: raise return True - def is_valid_object(self, sha: str, object_type: Union['blob', 'commit', 'tree', 'tag'] = None) -> bool: + def is_valid_object(self, sha: str, object_type: str = None) -> bool: try: complete_sha = self.odb.partial_to_complete_sha_hex(sha) object_info = self.odb.info(complete_sha) From 4832aa6bf82e4853f8f426fc06350540e2c8a9e7 Mon Sep 17 00:00:00 2001 From: Robert Westman Date: Sat, 5 Jun 2021 12:34:24 +0200 Subject: [PATCH 0480/2375] Removes local variable 'e' that is assigned to but never used --- git/repo/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/repo/base.py b/git/repo/base.py index b19503ee2..d38cf756d 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -633,7 +633,7 @@ def is_valid_object(self, sha: str, object_type: str = None) -> bool: return False else: return True - except BadObject as e: + except BadObject: log.debug("Commit hash is invalid.") return False From fb2461d84f97a72641ef1e878450aeab7cd17241 Mon Sep 17 00:00:00 2001 From: Robert Westman Date: Sat, 5 Jun 2021 12:35:41 +0200 Subject: [PATCH 0481/2375] Removes unused import --- git/repo/base.py | 1 - 1 file changed, 1 deletion(-) diff --git a/git/repo/base.py b/git/repo/base.py index d38cf756d..0db0bd0cd 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -3,7 +3,6 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php -import binascii import logging import os import re From 464504ce0069758fdb88b348e4a626a265fb3fe3 Mon Sep 17 00:00:00 2001 From: Robert Westman Date: Sat, 5 Jun 2021 12:39:44 +0200 Subject: [PATCH 0482/2375] Removes f-string syntax for p35 compatibility --- git/repo/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index 0db0bd0cd..6cc560310 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -627,8 +627,8 @@ def is_valid_object(self, sha: str, object_type: str = None) -> bool: if object_info.type == object_type.encode(): return True else: - log.debug(f"Commit hash points to an object of type '{object_info.type.decode()}'. " - f"Requested were objects of type '{object_type}'") + log.debug("Commit hash points to an object of type '%s'. Requested were objects of type '%s'", + object_info.type.decode(), object_type) return False else: return True From 4d86d883714072b6e3bbc56a2127c06e9d6a6582 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 16 Jun 2021 11:03:13 +0800 Subject: [PATCH 0483/2375] prepare patch level 3.1.18 --- VERSION | 2 +- doc/source/changes.rst | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 3797f3f9c..5762a6ffe 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.17 +3.1.18 diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 68a94516c..aabef8023 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,14 @@ Changelog ========= +3.1.18 +====== + +* drop support for python 3.5 to reduce maintenance burden on typing. Lower patch levels of python 3.5 would break, too. + +See the following for details: +https://github.com/gitpython-developers/gitpython/milestone/50?closed=1 + 3.1.17 ====== From 820d3cc9ceda3e5690d627677883b7f9d349b326 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 16 Jun 2021 11:22:27 +0800 Subject: [PATCH 0484/2375] Revert "Remove support for Python 3.5" - fix CI for now. This reverts commit 45d1cd59d39227ee6841042eab85116a59a26d22. See #1201 which will hopefully help to get a proper fix soon. --- .appveyor.yml | 29 +++++++++++++++++++++++++++-- .github/workflows/pythonpackage.yml | 4 ++-- .travis.yml | 4 +++- README.md | 2 +- doc/source/intro.rst | 2 +- git/cmd.py | 9 +++++++++ setup.py | 4 ++-- 7 files changed, 45 insertions(+), 9 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 833f5c7b9..0a86c1a75 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -6,12 +6,29 @@ environment: CYGWIN64_GIT_PATH: "C:\\cygwin64\\bin;%GIT_DAEMON_PATH%" matrix: + - PYTHON: "C:\\Python34-x64" + PYTHON_VERSION: "3.4" + GIT_PATH: "%GIT_DAEMON_PATH%" + - PYTHON: "C:\\Python35-x64" + PYTHON_VERSION: "3.5" + GIT_PATH: "%GIT_DAEMON_PATH%" - PYTHON: "C:\\Python36-x64" PYTHON_VERSION: "3.6" GIT_PATH: "%GIT_DAEMON_PATH%" - PYTHON: "C:\\Python37-x64" PYTHON_VERSION: "3.7" GIT_PATH: "%GIT_DAEMON_PATH%" + - PYTHON: "C:\\Miniconda35-x64" + PYTHON_VERSION: "3.5" + IS_CONDA: "yes" + MAYFAIL: "yes" + GIT_PATH: "%GIT_DAEMON_PATH%" + ## Cygwin + - PYTHON: "C:\\Python35-x64" + PYTHON_VERSION: "3.5" + IS_CYGWIN: "yes" + MAYFAIL: "yes" + GIT_PATH: "%CYGWIN64_GIT_PATH%" matrix: allow_failures: @@ -59,10 +76,18 @@ install: build: false test_script: - - nosetests -v + - IF "%IS_CYGWIN%" == "yes" ( + nosetests -v + ) ELSE ( + IF "%PYTHON_VERSION%" == "3.5" ( + nosetests -v --with-coverage + ) ELSE ( + nosetests -v + ) + ) on_success: - - IF "%PYTHON_VERSION%" == "3.6" IF NOT "%IS_CYGWIN%" == "yes" (codecov) + - IF "%PYTHON_VERSION%" == "3.5" IF NOT "%IS_CYGWIN%" == "yes" (codecov) # Enable this to be able to login to the build worker. You can use the # `remmina` program in Ubuntu, use the login information that the line below diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 53da76149..65d5e6cd4 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.5, 3.6, 3.7, 3.8, 3.9] steps: - uses: actions/checkout@v2 @@ -61,4 +61,4 @@ jobs: run: | set -x pip install -r doc/requirements.txt - make -C doc html + make -C doc html \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 570beaad6..1fbb1ddb8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,8 @@ # UNUSED, only for reference. If adjustments are needed, please see github actions language: python python: + - "3.4" + - "3.5" - "3.6" - "3.7" - "3.8" @@ -36,7 +38,7 @@ script: - ulimit -n - coverage run --omit="test/*" -m unittest --buffer - coverage report - - if [ "$TRAVIS_PYTHON_VERSION" == '3.6' ]; then cd doc && make html; fi + - if [ "$TRAVIS_PYTHON_VERSION" == '3.5' ]; then cd doc && make html; fi - if [ "$TRAVIS_PYTHON_VERSION" == '3.6' ]; then flake8 --ignore=W293,E265,E266,W503,W504,E731; fi after_success: - codecov diff --git a/README.md b/README.md index 4725d3aeb..0d0edeb43 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ If it is not in your `PATH`, you can help GitPython find it by setting the `GIT_PYTHON_GIT_EXECUTABLE=` environment variable. * Git (1.7.x or newer) -* Python >= 3.6 +* Python >= 3.5 The list of dependencies are listed in `./requirements.txt` and `./test-requirements.txt`. The installer takes care of installing them for you. diff --git a/doc/source/intro.rst b/doc/source/intro.rst index 956a36073..7168c91b1 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -13,7 +13,7 @@ The object database implementation is optimized for handling large quantities of Requirements ============ -* `Python`_ >= 3.6 +* `Python`_ >= 3.5 * `Git`_ 1.7.0 or newer It should also work with older versions, but it may be that some operations involving remotes will not work as expected. diff --git a/git/cmd.py b/git/cmd.py index 4f58b3146..d8b82352d 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -17,7 +17,9 @@ import subprocess import sys import threading +from collections import OrderedDict from textwrap import dedent +import warnings from git.compat import ( defenc, @@ -1003,6 +1005,13 @@ def transform_kwarg(self, name: str, value: Any, split_single_char_options: bool def transform_kwargs(self, split_single_char_options: bool = True, **kwargs: Any) -> List[str]: """Transforms Python style kwargs into git command line options.""" + # Python 3.6 preserves the order of kwargs and thus has a stable + # order. For older versions sort the kwargs by the key to get a stable + # order. + if sys.version_info[:2] < (3, 6): + kwargs = OrderedDict(sorted(kwargs.items(), key=lambda x: x[0])) + warnings.warn("Python 3.5 support is deprecated and will be removed 2021-09-05.\n" + + "It does not preserve the order for key-word arguments and enforce lexical sorting instead.") args = [] for k, v in kwargs.items(): if isinstance(v, (list, tuple)): diff --git a/setup.py b/setup.py index 850d680d4..f8829c386 100755 --- a/setup.py +++ b/setup.py @@ -99,7 +99,7 @@ def build_py_modules(basedir, excludes=[]): include_package_data=True, py_modules=build_py_modules("./git", excludes=["git.ext.*"]), package_dir={'git': 'git'}, - python_requires='>=3.6', + python_requires='>=3.5', install_requires=requirements, tests_require=requirements + test_requirements, zip_safe=False, @@ -127,6 +127,6 @@ def build_py_modules(basedir, excludes=[]): "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9" + "Programming Language :: Python :: 3.9" ] ) From b0f79c58ad919e90261d1e332df79a4ad0bc40de Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 16 Jun 2021 11:27:07 +0800 Subject: [PATCH 0485/2375] Revert "Revert "Remove support for Python 3.5" - fix CI for now." This reverts commit 820d3cc9ceda3e5690d627677883b7f9d349b326. --- .appveyor.yml | 29 ++--------------------------- .github/workflows/pythonpackage.yml | 4 ++-- .travis.yml | 4 +--- README.md | 2 +- doc/source/intro.rst | 2 +- git/cmd.py | 9 --------- setup.py | 4 ++-- 7 files changed, 9 insertions(+), 45 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 0a86c1a75..833f5c7b9 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -6,29 +6,12 @@ environment: CYGWIN64_GIT_PATH: "C:\\cygwin64\\bin;%GIT_DAEMON_PATH%" matrix: - - PYTHON: "C:\\Python34-x64" - PYTHON_VERSION: "3.4" - GIT_PATH: "%GIT_DAEMON_PATH%" - - PYTHON: "C:\\Python35-x64" - PYTHON_VERSION: "3.5" - GIT_PATH: "%GIT_DAEMON_PATH%" - PYTHON: "C:\\Python36-x64" PYTHON_VERSION: "3.6" GIT_PATH: "%GIT_DAEMON_PATH%" - PYTHON: "C:\\Python37-x64" PYTHON_VERSION: "3.7" GIT_PATH: "%GIT_DAEMON_PATH%" - - PYTHON: "C:\\Miniconda35-x64" - PYTHON_VERSION: "3.5" - IS_CONDA: "yes" - MAYFAIL: "yes" - GIT_PATH: "%GIT_DAEMON_PATH%" - ## Cygwin - - PYTHON: "C:\\Python35-x64" - PYTHON_VERSION: "3.5" - IS_CYGWIN: "yes" - MAYFAIL: "yes" - GIT_PATH: "%CYGWIN64_GIT_PATH%" matrix: allow_failures: @@ -76,18 +59,10 @@ install: build: false test_script: - - IF "%IS_CYGWIN%" == "yes" ( - nosetests -v - ) ELSE ( - IF "%PYTHON_VERSION%" == "3.5" ( - nosetests -v --with-coverage - ) ELSE ( - nosetests -v - ) - ) + - nosetests -v on_success: - - IF "%PYTHON_VERSION%" == "3.5" IF NOT "%IS_CYGWIN%" == "yes" (codecov) + - IF "%PYTHON_VERSION%" == "3.6" IF NOT "%IS_CYGWIN%" == "yes" (codecov) # Enable this to be able to login to the build worker. You can use the # `remmina` program in Ubuntu, use the login information that the line below diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 65d5e6cd4..53da76149 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.5, 3.6, 3.7, 3.8, 3.9] + python-version: [3.6, 3.7, 3.8, 3.9] steps: - uses: actions/checkout@v2 @@ -61,4 +61,4 @@ jobs: run: | set -x pip install -r doc/requirements.txt - make -C doc html \ No newline at end of file + make -C doc html diff --git a/.travis.yml b/.travis.yml index 1fbb1ddb8..570beaad6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,6 @@ # UNUSED, only for reference. If adjustments are needed, please see github actions language: python python: - - "3.4" - - "3.5" - "3.6" - "3.7" - "3.8" @@ -38,7 +36,7 @@ script: - ulimit -n - coverage run --omit="test/*" -m unittest --buffer - coverage report - - if [ "$TRAVIS_PYTHON_VERSION" == '3.5' ]; then cd doc && make html; fi + - if [ "$TRAVIS_PYTHON_VERSION" == '3.6' ]; then cd doc && make html; fi - if [ "$TRAVIS_PYTHON_VERSION" == '3.6' ]; then flake8 --ignore=W293,E265,E266,W503,W504,E731; fi after_success: - codecov diff --git a/README.md b/README.md index 0d0edeb43..4725d3aeb 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ If it is not in your `PATH`, you can help GitPython find it by setting the `GIT_PYTHON_GIT_EXECUTABLE=` environment variable. * Git (1.7.x or newer) -* Python >= 3.5 +* Python >= 3.6 The list of dependencies are listed in `./requirements.txt` and `./test-requirements.txt`. The installer takes care of installing them for you. diff --git a/doc/source/intro.rst b/doc/source/intro.rst index 7168c91b1..956a36073 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -13,7 +13,7 @@ The object database implementation is optimized for handling large quantities of Requirements ============ -* `Python`_ >= 3.5 +* `Python`_ >= 3.6 * `Git`_ 1.7.0 or newer It should also work with older versions, but it may be that some operations involving remotes will not work as expected. diff --git a/git/cmd.py b/git/cmd.py index d8b82352d..4f58b3146 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -17,9 +17,7 @@ import subprocess import sys import threading -from collections import OrderedDict from textwrap import dedent -import warnings from git.compat import ( defenc, @@ -1005,13 +1003,6 @@ def transform_kwarg(self, name: str, value: Any, split_single_char_options: bool def transform_kwargs(self, split_single_char_options: bool = True, **kwargs: Any) -> List[str]: """Transforms Python style kwargs into git command line options.""" - # Python 3.6 preserves the order of kwargs and thus has a stable - # order. For older versions sort the kwargs by the key to get a stable - # order. - if sys.version_info[:2] < (3, 6): - kwargs = OrderedDict(sorted(kwargs.items(), key=lambda x: x[0])) - warnings.warn("Python 3.5 support is deprecated and will be removed 2021-09-05.\n" + - "It does not preserve the order for key-word arguments and enforce lexical sorting instead.") args = [] for k, v in kwargs.items(): if isinstance(v, (list, tuple)): diff --git a/setup.py b/setup.py index f8829c386..850d680d4 100755 --- a/setup.py +++ b/setup.py @@ -99,7 +99,7 @@ def build_py_modules(basedir, excludes=[]): include_package_data=True, py_modules=build_py_modules("./git", excludes=["git.ext.*"]), package_dir={'git': 'git'}, - python_requires='>=3.5', + python_requires='>=3.6', install_requires=requirements, tests_require=requirements + test_requirements, zip_safe=False, @@ -127,6 +127,6 @@ def build_py_modules(basedir, excludes=[]): "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9" + "Programming Language :: Python :: 3.9" ] ) From 567c892322776756e8d0095e89f39b25b9b01bc2 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 17 Jun 2021 17:22:31 +0100 Subject: [PATCH 0486/2375] rebase with dropped 3.5 --- .appveyor.yml | 29 ++--------------------------- .github/workflows/pythonpackage.yml | 2 +- .travis.yml | 3 +-- README.md | 2 +- doc/source/intro.rst | 2 +- git/cmd.py | 3 +-- git/repo/base.py | 2 +- setup.py | 3 +-- 8 files changed, 9 insertions(+), 37 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 0a86c1a75..833f5c7b9 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -6,29 +6,12 @@ environment: CYGWIN64_GIT_PATH: "C:\\cygwin64\\bin;%GIT_DAEMON_PATH%" matrix: - - PYTHON: "C:\\Python34-x64" - PYTHON_VERSION: "3.4" - GIT_PATH: "%GIT_DAEMON_PATH%" - - PYTHON: "C:\\Python35-x64" - PYTHON_VERSION: "3.5" - GIT_PATH: "%GIT_DAEMON_PATH%" - PYTHON: "C:\\Python36-x64" PYTHON_VERSION: "3.6" GIT_PATH: "%GIT_DAEMON_PATH%" - PYTHON: "C:\\Python37-x64" PYTHON_VERSION: "3.7" GIT_PATH: "%GIT_DAEMON_PATH%" - - PYTHON: "C:\\Miniconda35-x64" - PYTHON_VERSION: "3.5" - IS_CONDA: "yes" - MAYFAIL: "yes" - GIT_PATH: "%GIT_DAEMON_PATH%" - ## Cygwin - - PYTHON: "C:\\Python35-x64" - PYTHON_VERSION: "3.5" - IS_CYGWIN: "yes" - MAYFAIL: "yes" - GIT_PATH: "%CYGWIN64_GIT_PATH%" matrix: allow_failures: @@ -76,18 +59,10 @@ install: build: false test_script: - - IF "%IS_CYGWIN%" == "yes" ( - nosetests -v - ) ELSE ( - IF "%PYTHON_VERSION%" == "3.5" ( - nosetests -v --with-coverage - ) ELSE ( - nosetests -v - ) - ) + - nosetests -v on_success: - - IF "%PYTHON_VERSION%" == "3.5" IF NOT "%IS_CYGWIN%" == "yes" (codecov) + - IF "%PYTHON_VERSION%" == "3.6" IF NOT "%IS_CYGWIN%" == "yes" (codecov) # Enable this to be able to login to the build worker. You can use the # `remmina` program in Ubuntu, use the login information that the line below diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 3c7215cbe..53da76149 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.5, 3.6, 3.7, 3.8, 3.9] + python-version: [3.6, 3.7, 3.8, 3.9] steps: - uses: actions/checkout@v2 diff --git a/.travis.yml b/.travis.yml index 1fbb1ddb8..8a171b4fd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,6 @@ language: python python: - "3.4" - - "3.5" - "3.6" - "3.7" - "3.8" @@ -38,7 +37,7 @@ script: - ulimit -n - coverage run --omit="test/*" -m unittest --buffer - coverage report - - if [ "$TRAVIS_PYTHON_VERSION" == '3.5' ]; then cd doc && make html; fi + - if [ "$TRAVIS_PYTHON_VERSION" == '3.6' ]; then cd doc && make html; fi - if [ "$TRAVIS_PYTHON_VERSION" == '3.6' ]; then flake8 --ignore=W293,E265,E266,W503,W504,E731; fi after_success: - codecov diff --git a/README.md b/README.md index 0d0edeb43..4725d3aeb 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ If it is not in your `PATH`, you can help GitPython find it by setting the `GIT_PYTHON_GIT_EXECUTABLE=` environment variable. * Git (1.7.x or newer) -* Python >= 3.5 +* Python >= 3.6 The list of dependencies are listed in `./requirements.txt` and `./test-requirements.txt`. The installer takes care of installing them for you. diff --git a/doc/source/intro.rst b/doc/source/intro.rst index 7168c91b1..956a36073 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -13,7 +13,7 @@ The object database implementation is optimized for handling large quantities of Requirements ============ -* `Python`_ >= 3.5 +* `Python`_ >= 3.6 * `Git`_ 1.7.0 or newer It should also work with older versions, but it may be that some operations involving remotes will not work as expected. diff --git a/git/cmd.py b/git/cmd.py index d8b82352d..d15b97ca5 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -150,7 +150,6 @@ def dashify(string: str) -> str: def slots_to_dict(self, exclude: Sequence[str] = ()) -> Dict[str, Any]: - # annotate self.__slots__ as Tuple[str, ...] once 3.5 dropped return {s: getattr(self, s) for s in self.__slots__ if s not in exclude} @@ -462,7 +461,7 @@ class CatFileContentStream(object): If not all data is read to the end of the objects's lifetime, we read the rest to assure the underlying stream continues to work""" - __slots__ = ('_stream', '_nbr', '_size') + __slots__: Tuple[str, ...] = ('_stream', '_nbr', '_size') def __init__(self, size: int, stream: IO[bytes]) -> None: self._stream = stream diff --git a/git/repo/base.py b/git/repo/base.py index e23ebb1ac..2d2e915cf 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -519,7 +519,7 @@ def iter_trees(self, *args: Any, **kwargs: Any) -> Iterator['Tree']: :note: Takes all arguments known to iter_commits method""" return (c.tree for c in self.iter_commits(*args, **kwargs)) - def tree(self, rev: Union['Commit', 'Tree', None] = None) -> 'Tree': + def tree(self, rev: Union['Commit', 'Tree', str, None] = None) -> 'Tree': """The Tree object for the given treeish revision Examples:: diff --git a/setup.py b/setup.py index f8829c386..3fbcbbad1 100755 --- a/setup.py +++ b/setup.py @@ -99,7 +99,7 @@ def build_py_modules(basedir, excludes=[]): include_package_data=True, py_modules=build_py_modules("./git", excludes=["git.ext.*"]), package_dir={'git': 'git'}, - python_requires='>=3.5', + python_requires='>=3.6', install_requires=requirements, tests_require=requirements + test_requirements, zip_safe=False, @@ -123,7 +123,6 @@ def build_py_modules(basedir, excludes=[]): "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", From df39446bb7b90ab9436fa3a76f6d4182c2a47da2 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 17 Jun 2021 17:35:46 +0100 Subject: [PATCH 0487/2375] del travis --- .travis.yml | 43 ------------------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 8a171b4fd..000000000 --- a/.travis.yml +++ /dev/null @@ -1,43 +0,0 @@ -# UNUSED, only for reference. If adjustments are needed, please see github actions -language: python -python: - - "3.4" - - "3.6" - - "3.7" - - "3.8" - - "nightly" - # - "pypy" - won't work as smmap doesn't work (see gitdb/.travis.yml for details) -matrix: - allow_failures: - - python: "nightly" -git: - # a higher depth is needed for most of the tests - must be high enough to not actually be shallow - # as we clone our own repository in the process - depth: 99999 -install: - - python --version; git --version - - git submodule update --init --recursive - - git fetch --tags - - pip install -r test-requirements.txt - - pip install -r doc/requirements.txt - - pip install codecov - - # generate some reflog as git-python tests need it (in master) - - ./init-tests-after-clone.sh - - # as commits are performed with the default user, it needs to be set for travis too - - git config --global user.email "travis@ci.com" - - git config --global user.name "Travis Runner" - # If we rewrite the user's config by accident, we will mess it up - # and cause subsequent tests to fail - - cat git/test/fixtures/.gitconfig >> ~/.gitconfig -script: - # Make sure we limit open handles to see if we are leaking them - - ulimit -n 128 - - ulimit -n - - coverage run --omit="test/*" -m unittest --buffer - - coverage report - - if [ "$TRAVIS_PYTHON_VERSION" == '3.6' ]; then cd doc && make html; fi - - if [ "$TRAVIS_PYTHON_VERSION" == '3.6' ]; then flake8 --ignore=W293,E265,E266,W503,W504,E731; fi -after_success: - - codecov From f8ec952343583324c4f5dbefa4fb846f395ea6e4 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 17 Jun 2021 17:49:48 +0100 Subject: [PATCH 0488/2375] fix issue with mypy update to 0.9 --- git/util.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/util.py b/git/util.py index edbd5f1e7..05eeb4ad3 100644 --- a/git/util.py +++ b/git/util.py @@ -971,7 +971,7 @@ def __getattr__(self, attr: str) -> Any: # END for each item return list.__getattribute__(self, attr) - def __getitem__(self, index: Union[int, slice, str]) -> Any: + def __getitem__(self, index: Union[int, slice, str]) -> Any: # type: ignore if isinstance(index, int): return list.__getitem__(self, index) elif isinstance(index, slice): @@ -983,7 +983,7 @@ def __getitem__(self, index: Union[int, slice, str]) -> Any: raise IndexError("No item found with id %r" % (self._prefix + index)) from e # END handle getattr - def __delitem__(self, index: Union[int, str, slice]) -> None: + def __delitem__(self, index: Union[int, str, slice]) -> None: # type: ignore delindex = cast(int, index) if not isinstance(index, int): From 18b6aa55309adfa8aa99bdaf9e8f80337befe74e Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 17 Jun 2021 18:10:46 +0100 Subject: [PATCH 0489/2375] add SupportsIndex to IterableList, with version import guards --- git/types.py | 9 +++------ git/util.py | 12 ++++++++---- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/git/types.py b/git/types.py index 91d35b567..a410cb366 100644 --- a/git/types.py +++ b/git/types.py @@ -7,15 +7,12 @@ from typing import Union, Any if sys.version_info[:2] >= (3, 8): - from typing import Final, Literal # noqa: F401 + from typing import Final, Literal, SupportsIndex # noqa: F401 else: - from typing_extensions import Final, Literal # noqa: F401 + from typing_extensions import Final, Literal, SupportsIndex # noqa: F401 -if sys.version_info[:2] < (3, 6): - # os.PathLike (PEP-519) only got introduced with Python 3.6 - PathLike = str -elif sys.version_info[:2] < (3, 9): +if sys.version_info[:2] < (3, 9): # Python >= 3.6, < 3.9 PathLike = Union[str, os.PathLike] elif sys.version_info[:2] >= (3, 9): diff --git a/git/util.py b/git/util.py index 05eeb4ad3..516c315c1 100644 --- a/git/util.py +++ b/git/util.py @@ -29,7 +29,7 @@ if TYPE_CHECKING: from git.remote import Remote from git.repo.base import Repo -from .types import PathLike, TBD, Literal +from .types import PathLike, TBD, Literal, SupportsIndex # --------------------------------------------------------------------- @@ -971,7 +971,10 @@ def __getattr__(self, attr: str) -> Any: # END for each item return list.__getattribute__(self, attr) - def __getitem__(self, index: Union[int, slice, str]) -> Any: # type: ignore + def __getitem__(self, index: Union[SupportsIndex, int, slice, str]) -> Any: + + assert isinstance(index, (int, str, slice)), "Index of IterableList should be an int or str" + if isinstance(index, int): return list.__getitem__(self, index) elif isinstance(index, slice): @@ -983,12 +986,13 @@ def __getitem__(self, index: Union[int, slice, str]) -> Any: # type: ignore raise IndexError("No item found with id %r" % (self._prefix + index)) from e # END handle getattr - def __delitem__(self, index: Union[int, str, slice]) -> None: # type: ignore + def __delitem__(self, index: Union[SupportsIndex, int, slice, str]) -> Any: + + assert isinstance(index, (int, str)), "Index of IterableList should be an int or str" delindex = cast(int, index) if not isinstance(index, int): delindex = -1 - assert not isinstance(index, slice) name = self._prefix + index for i, item in enumerate(self): if getattr(item, self._id_attr) == name: From bef6d375fd21e3047ed94b79a26183050c1cc4cb Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 18 Jun 2021 11:23:26 +0800 Subject: [PATCH 0490/2375] Remove travis file as it's not used anymore in favor or Github Actions --- .travis.yml | 46 ---------------------------------------------- 1 file changed, 46 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 1bed8368c..000000000 --- a/.travis.yml +++ /dev/null @@ -1,46 +0,0 @@ -# UNUSED, only for reference. If adjustments are needed, please see github actions -language: python -python: -<<<<<<< HEAD - - "3.4" -======= ->>>>>>> b0f79c58ad919e90261d1e332df79a4ad0bc40de - - "3.6" - - "3.7" - - "3.8" - - "nightly" - # - "pypy" - won't work as smmap doesn't work (see gitdb/.travis.yml for details) -matrix: - allow_failures: - - python: "nightly" -git: - # a higher depth is needed for most of the tests - must be high enough to not actually be shallow - # as we clone our own repository in the process - depth: 99999 -install: - - python --version; git --version - - git submodule update --init --recursive - - git fetch --tags - - pip install -r test-requirements.txt - - pip install -r doc/requirements.txt - - pip install codecov - - # generate some reflog as git-python tests need it (in master) - - ./init-tests-after-clone.sh - - # as commits are performed with the default user, it needs to be set for travis too - - git config --global user.email "travis@ci.com" - - git config --global user.name "Travis Runner" - # If we rewrite the user's config by accident, we will mess it up - # and cause subsequent tests to fail - - cat git/test/fixtures/.gitconfig >> ~/.gitconfig -script: - # Make sure we limit open handles to see if we are leaking them - - ulimit -n 128 - - ulimit -n - - coverage run --omit="test/*" -m unittest --buffer - - coverage report - - if [ "$TRAVIS_PYTHON_VERSION" == '3.6' ]; then cd doc && make html; fi - - if [ "$TRAVIS_PYTHON_VERSION" == '3.6' ]; then flake8 --ignore=W293,E265,E266,W503,W504,E731; fi -after_success: - - codecov From 8340e0bb6ad0d7c1cdb26cbe62828d3595c3b7a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20K=C3=A4ufl?= Date: Mon, 21 Jun 2021 16:34:38 +0200 Subject: [PATCH 0491/2375] Fix link to latest changelog --- CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index aa8116b23..9796566ae 100644 --- a/CHANGES +++ b/CHANGES @@ -1,2 +1,2 @@ Please see the online documentation for the latest changelog: -https://github.com/gitpython-developers/GitPython/blob/master/doc/source/changes.rst +https://github.com/gitpython-developers/GitPython/blob/main/doc/source/changes.rst From 5b6fe83f4d817a3b73b44df16cfb4f96bd4d9904 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 23 Jun 2021 02:22:34 +0100 Subject: [PATCH 0492/2375] Update typing-extensions version in requirements.txt --- .appveyor.yml | 29 +------ .github/workflows/pythonpackage.yml | 2 +- .travis.yml | 44 ---------- CHANGES | 2 +- README.md | 2 +- VERSION | 2 +- doc/source/changes.rst | 8 ++ doc/source/intro.rst | 2 +- doc/source/tutorial.rst | 2 +- git/cmd.py | 12 +-- git/diff.py | 4 +- git/index/fun.py | 2 +- git/objects/base.py | 65 +++++++++----- git/objects/blob.py | 4 +- git/objects/commit.py | 20 +++-- git/objects/submodule/base.py | 6 +- git/objects/tag.py | 28 ++++-- git/objects/tree.py | 22 ++++- git/objects/util.py | 129 ++++++++++++++++++++-------- git/repo/base.py | 22 ++++- git/types.py | 9 +- git/util.py | 12 ++- requirements.txt | 2 +- setup.py | 5 +- test-requirements.txt | 2 +- test/test_repo.py | 30 ++++++- tox.ini | 2 +- 27 files changed, 279 insertions(+), 190 deletions(-) delete mode 100644 .travis.yml diff --git a/.appveyor.yml b/.appveyor.yml index 0a86c1a75..833f5c7b9 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -6,29 +6,12 @@ environment: CYGWIN64_GIT_PATH: "C:\\cygwin64\\bin;%GIT_DAEMON_PATH%" matrix: - - PYTHON: "C:\\Python34-x64" - PYTHON_VERSION: "3.4" - GIT_PATH: "%GIT_DAEMON_PATH%" - - PYTHON: "C:\\Python35-x64" - PYTHON_VERSION: "3.5" - GIT_PATH: "%GIT_DAEMON_PATH%" - PYTHON: "C:\\Python36-x64" PYTHON_VERSION: "3.6" GIT_PATH: "%GIT_DAEMON_PATH%" - PYTHON: "C:\\Python37-x64" PYTHON_VERSION: "3.7" GIT_PATH: "%GIT_DAEMON_PATH%" - - PYTHON: "C:\\Miniconda35-x64" - PYTHON_VERSION: "3.5" - IS_CONDA: "yes" - MAYFAIL: "yes" - GIT_PATH: "%GIT_DAEMON_PATH%" - ## Cygwin - - PYTHON: "C:\\Python35-x64" - PYTHON_VERSION: "3.5" - IS_CYGWIN: "yes" - MAYFAIL: "yes" - GIT_PATH: "%CYGWIN64_GIT_PATH%" matrix: allow_failures: @@ -76,18 +59,10 @@ install: build: false test_script: - - IF "%IS_CYGWIN%" == "yes" ( - nosetests -v - ) ELSE ( - IF "%PYTHON_VERSION%" == "3.5" ( - nosetests -v --with-coverage - ) ELSE ( - nosetests -v - ) - ) + - nosetests -v on_success: - - IF "%PYTHON_VERSION%" == "3.5" IF NOT "%IS_CYGWIN%" == "yes" (codecov) + - IF "%PYTHON_VERSION%" == "3.6" IF NOT "%IS_CYGWIN%" == "yes" (codecov) # Enable this to be able to login to the build worker. You can use the # `remmina` program in Ubuntu, use the login information that the line below diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 3c7215cbe..53da76149 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.5, 3.6, 3.7, 3.8, 3.9] + python-version: [3.6, 3.7, 3.8, 3.9] steps: - uses: actions/checkout@v2 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 1fbb1ddb8..000000000 --- a/.travis.yml +++ /dev/null @@ -1,44 +0,0 @@ -# UNUSED, only for reference. If adjustments are needed, please see github actions -language: python -python: - - "3.4" - - "3.5" - - "3.6" - - "3.7" - - "3.8" - - "nightly" - # - "pypy" - won't work as smmap doesn't work (see gitdb/.travis.yml for details) -matrix: - allow_failures: - - python: "nightly" -git: - # a higher depth is needed for most of the tests - must be high enough to not actually be shallow - # as we clone our own repository in the process - depth: 99999 -install: - - python --version; git --version - - git submodule update --init --recursive - - git fetch --tags - - pip install -r test-requirements.txt - - pip install -r doc/requirements.txt - - pip install codecov - - # generate some reflog as git-python tests need it (in master) - - ./init-tests-after-clone.sh - - # as commits are performed with the default user, it needs to be set for travis too - - git config --global user.email "travis@ci.com" - - git config --global user.name "Travis Runner" - # If we rewrite the user's config by accident, we will mess it up - # and cause subsequent tests to fail - - cat git/test/fixtures/.gitconfig >> ~/.gitconfig -script: - # Make sure we limit open handles to see if we are leaking them - - ulimit -n 128 - - ulimit -n - - coverage run --omit="test/*" -m unittest --buffer - - coverage report - - if [ "$TRAVIS_PYTHON_VERSION" == '3.5' ]; then cd doc && make html; fi - - if [ "$TRAVIS_PYTHON_VERSION" == '3.6' ]; then flake8 --ignore=W293,E265,E266,W503,W504,E731; fi -after_success: - - codecov diff --git a/CHANGES b/CHANGES index aa8116b23..9796566ae 100644 --- a/CHANGES +++ b/CHANGES @@ -1,2 +1,2 @@ Please see the online documentation for the latest changelog: -https://github.com/gitpython-developers/GitPython/blob/master/doc/source/changes.rst +https://github.com/gitpython-developers/GitPython/blob/main/doc/source/changes.rst diff --git a/README.md b/README.md index 0d0edeb43..4725d3aeb 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ If it is not in your `PATH`, you can help GitPython find it by setting the `GIT_PYTHON_GIT_EXECUTABLE=` environment variable. * Git (1.7.x or newer) -* Python >= 3.5 +* Python >= 3.6 The list of dependencies are listed in `./requirements.txt` and `./test-requirements.txt`. The installer takes care of installing them for you. diff --git a/VERSION b/VERSION index 3797f3f9c..5762a6ffe 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.17 +3.1.18 diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 68a94516c..aabef8023 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,14 @@ Changelog ========= +3.1.18 +====== + +* drop support for python 3.5 to reduce maintenance burden on typing. Lower patch levels of python 3.5 would break, too. + +See the following for details: +https://github.com/gitpython-developers/gitpython/milestone/50?closed=1 + 3.1.17 ====== diff --git a/doc/source/intro.rst b/doc/source/intro.rst index 7168c91b1..956a36073 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -13,7 +13,7 @@ The object database implementation is optimized for handling large quantities of Requirements ============ -* `Python`_ >= 3.5 +* `Python`_ >= 3.6 * `Git`_ 1.7.0 or newer It should also work with older versions, but it may be that some operations involving remotes will not work as expected. diff --git a/doc/source/tutorial.rst b/doc/source/tutorial.rst index d548f8829..303e89cff 100644 --- a/doc/source/tutorial.rst +++ b/doc/source/tutorial.rst @@ -10,7 +10,7 @@ GitPython Tutorial GitPython provides object model access to your git repository. This tutorial is composed of multiple sections, most of which explains a real-life usecase. -All code presented here originated from `test_docs.py `_ to assure correctness. Knowing this should also allow you to more easily run the code for your own testing purposes, all you need is a developer installation of git-python. +All code presented here originated from `test_docs.py `_ to assure correctness. Knowing this should also allow you to more easily run the code for your own testing purposes, all you need is a developer installation of git-python. Meet the Repo type ****************** diff --git a/git/cmd.py b/git/cmd.py index d8b82352d..e078e4a18 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -17,9 +17,7 @@ import subprocess import sys import threading -from collections import OrderedDict from textwrap import dedent -import warnings from git.compat import ( defenc, @@ -150,7 +148,6 @@ def dashify(string: str) -> str: def slots_to_dict(self, exclude: Sequence[str] = ()) -> Dict[str, Any]: - # annotate self.__slots__ as Tuple[str, ...] once 3.5 dropped return {s: getattr(self, s) for s in self.__slots__ if s not in exclude} @@ -462,7 +459,7 @@ class CatFileContentStream(object): If not all data is read to the end of the objects's lifetime, we read the rest to assure the underlying stream continues to work""" - __slots__ = ('_stream', '_nbr', '_size') + __slots__: Tuple[str, ...] = ('_stream', '_nbr', '_size') def __init__(self, size: int, stream: IO[bytes]) -> None: self._stream = stream @@ -1005,13 +1002,6 @@ def transform_kwarg(self, name: str, value: Any, split_single_char_options: bool def transform_kwargs(self, split_single_char_options: bool = True, **kwargs: Any) -> List[str]: """Transforms Python style kwargs into git command line options.""" - # Python 3.6 preserves the order of kwargs and thus has a stable - # order. For older versions sort the kwargs by the key to get a stable - # order. - if sys.version_info[:2] < (3, 6): - kwargs = OrderedDict(sorted(kwargs.items(), key=lambda x: x[0])) - warnings.warn("Python 3.5 support is deprecated and will be removed 2021-09-05.\n" + - "It does not preserve the order for key-word arguments and enforce lexical sorting instead.") args = [] for k, v in kwargs.items(): if isinstance(v, (list, tuple)): diff --git a/git/diff.py b/git/diff.py index a40fc244e..346a2ca7b 100644 --- a/git/diff.py +++ b/git/diff.py @@ -16,7 +16,7 @@ # typing ------------------------------------------------------------------ from typing import Any, Iterator, List, Match, Optional, Tuple, Type, Union, TYPE_CHECKING -from git.types import PathLike, TBD, Final, Literal +from git.types import PathLike, TBD, Literal if TYPE_CHECKING: from .objects.tree import Tree @@ -31,7 +31,7 @@ __all__ = ('Diffable', 'DiffIndex', 'Diff', 'NULL_TREE') # Special object to compare against the empty tree in diffs -NULL_TREE = object() # type: Final[object] +NULL_TREE = object() _octal_byte_re = re.compile(b'\\\\([0-9]{3})') diff --git a/git/index/fun.py b/git/index/fun.py index 1012f4801..3fded3473 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -109,7 +109,7 @@ def run_commit_hook(name: str, index: 'IndexFile', *args: str) -> None: # end handle return code -def stat_mode_to_index_mode(mode): +def stat_mode_to_index_mode(mode: int) -> int: """Convert the given mode from a stat call to the corresponding index mode and return it""" if S_ISLNK(mode): # symlinks diff --git a/git/objects/base.py b/git/objects/base.py index 59f0e8368..884f96515 100644 --- a/git/objects/base.py +++ b/git/objects/base.py @@ -3,16 +3,34 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php + +from git.exc import WorkTreeRepositoryUnsupported from git.util import LazyMixin, join_path_native, stream_copy, bin_to_hex import gitdb.typ as dbtyp import os.path as osp -from typing import Optional # noqa: F401 unused import from .util import get_object_type_by_name -_assertion_msg_format = "Created object %r whose python type %r disagrees with the acutal git object type %r" +# typing ------------------------------------------------------------------ + +from typing import Any, TYPE_CHECKING, Optional, Union + +from git.types import PathLike + +if TYPE_CHECKING: + from git.repo import Repo + from gitdb.base import OStream + from .tree import Tree + from .blob import Blob + from .tag import TagObject + from .commit import Commit + +# -------------------------------------------------------------------------- + + +_assertion_msg_format = "Created object %r whose python type %r disagrees with the acutual git object type %r" __all__ = ("Object", "IndexObject") @@ -27,7 +45,7 @@ class Object(LazyMixin): __slots__ = ("repo", "binsha", "size") type = None # type: Optional[str] # to be set by subclass - def __init__(self, repo, binsha): + def __init__(self, repo: 'Repo', binsha: bytes): """Initialize an object by identifying it by its binary sha. All keyword arguments will be set on demand if None. @@ -40,7 +58,7 @@ def __init__(self, repo, binsha): assert len(binsha) == 20, "Require 20 byte binary sha, got %r, len = %i" % (binsha, len(binsha)) @classmethod - def new(cls, repo, id): # @ReservedAssignment + def new(cls, repo: 'Repo', id): # @ReservedAssignment """ :return: New Object instance of a type appropriate to the object type behind id. The id of the newly created object will be a binsha even though @@ -53,7 +71,7 @@ def new(cls, repo, id): # @ReservedAssignment return repo.rev_parse(str(id)) @classmethod - def new_from_sha(cls, repo, sha1): + def new_from_sha(cls, repo: 'Repo', sha1: bytes) -> Union['Commit', 'TagObject', 'Tree', 'Blob']: """ :return: new object instance of a type appropriate to represent the given binary sha1 @@ -67,52 +85,52 @@ def new_from_sha(cls, repo, sha1): inst.size = oinfo.size return inst - def _set_cache_(self, attr): + def _set_cache_(self, attr: str) -> None: """Retrieve object information""" if attr == "size": oinfo = self.repo.odb.info(self.binsha) - self.size = oinfo.size + self.size = oinfo.size # type: int # assert oinfo.type == self.type, _assertion_msg_format % (self.binsha, oinfo.type, self.type) else: super(Object, self)._set_cache_(attr) - def __eq__(self, other): + def __eq__(self, other: Any) -> bool: """:return: True if the objects have the same SHA1""" if not hasattr(other, 'binsha'): return False return self.binsha == other.binsha - def __ne__(self, other): + def __ne__(self, other: Any) -> bool: """:return: True if the objects do not have the same SHA1 """ if not hasattr(other, 'binsha'): return True return self.binsha != other.binsha - def __hash__(self): + def __hash__(self) -> int: """:return: Hash of our id allowing objects to be used in dicts and sets""" return hash(self.binsha) - def __str__(self): + def __str__(self) -> str: """:return: string of our SHA1 as understood by all git commands""" return self.hexsha - def __repr__(self): + def __repr__(self) -> str: """:return: string with pythonic representation of our object""" return '' % (self.__class__.__name__, self.hexsha) @property - def hexsha(self): + def hexsha(self) -> str: """:return: 40 byte hex version of our 20 byte binary sha""" # b2a_hex produces bytes return bin_to_hex(self.binsha).decode('ascii') @property - def data_stream(self): + def data_stream(self) -> 'OStream': """ :return: File Object compatible stream to the uncompressed raw data of the object :note: returned streams must be read in order""" return self.repo.odb.stream(self.binsha) - def stream_data(self, ostream): + def stream_data(self, ostream: 'OStream') -> 'Object': """Writes our data directly to the given output stream :param ostream: File object compatible stream object. :return: self""" @@ -130,7 +148,9 @@ class IndexObject(Object): # for compatibility with iterable lists _id_attribute_ = 'path' - def __init__(self, repo, binsha, mode=None, path=None): + def __init__(self, + repo: 'Repo', binsha: bytes, mode: Union[None, int] = None, path: Union[None, PathLike] = None + ) -> None: """Initialize a newly instanced IndexObject :param repo: is the Repo we are located in @@ -150,14 +170,14 @@ def __init__(self, repo, binsha, mode=None, path=None): if path is not None: self.path = path - def __hash__(self): + def __hash__(self) -> int: """ :return: Hash of our path as index items are uniquely identifiable by path, not by their data !""" return hash(self.path) - def _set_cache_(self, attr): + def _set_cache_(self, attr: str) -> None: if attr in IndexObject.__slots__: # they cannot be retrieved lateron ( not without searching for them ) raise AttributeError( @@ -168,16 +188,19 @@ def _set_cache_(self, attr): # END handle slot attribute @property - def name(self): + def name(self) -> str: """:return: Name portion of the path, effectively being the basename""" return osp.basename(self.path) @property - def abspath(self): + def abspath(self) -> PathLike: """ :return: Absolute path to this index object in the file system ( as opposed to the .path field which is a path relative to the git repository ). The returned path will be native to the system and contains '\' on windows. """ - return join_path_native(self.repo.working_tree_dir, self.path) + if self.repo.working_tree_dir is not None: + return join_path_native(self.repo.working_tree_dir, self.path) + else: + raise WorkTreeRepositoryUnsupported("Working_tree_dir was None or empty") diff --git a/git/objects/blob.py b/git/objects/blob.py index 897f892bf..017178f05 100644 --- a/git/objects/blob.py +++ b/git/objects/blob.py @@ -23,11 +23,11 @@ class Blob(base.IndexObject): __slots__ = () @property - def mime_type(self): + def mime_type(self) -> str: """ :return: String describing the mime type of this file (based on the filename) :note: Defaults to 'text/plain' in case the actual file type is unknown. """ guesses = None if self.path: - guesses = guess_type(self.path) + guesses = guess_type(str(self.path)) return guesses and guesses[0] or self.DEFAULT_MIME_TYPE diff --git a/git/objects/commit.py b/git/objects/commit.py index 45e6d772c..26db6e36d 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -36,6 +36,11 @@ from io import BytesIO import logging +from typing import List, Tuple, Union, TYPE_CHECKING + +if TYPE_CHECKING: + from git.repo import Repo + log = logging.getLogger('git.objects.commit') log.addHandler(logging.NullHandler()) @@ -70,7 +75,8 @@ class Commit(base.Object, Iterable, Diffable, Traversable, Serializable): def __init__(self, repo, binsha, tree=None, author=None, authored_date=None, author_tz_offset=None, committer=None, committed_date=None, committer_tz_offset=None, - message=None, parents=None, encoding=None, gpgsig=None): + message=None, parents: Union[Tuple['Commit', ...], List['Commit'], None] = None, + encoding=None, gpgsig=None): """Instantiate a new Commit. All keyword arguments taking None as default will be implicitly set on first query. @@ -133,11 +139,11 @@ def __init__(self, repo, binsha, tree=None, author=None, authored_date=None, aut self.gpgsig = gpgsig @classmethod - def _get_intermediate_items(cls, commit): - return commit.parents + def _get_intermediate_items(cls, commit: 'Commit') -> Tuple['Commit', ...]: # type: ignore ## cos overriding super + return tuple(commit.parents) @classmethod - def _calculate_sha_(cls, repo, commit): + def _calculate_sha_(cls, repo: 'Repo', commit: 'Commit') -> bytes: '''Calculate the sha of a commit. :param repo: Repo object the commit should be part of @@ -430,7 +436,7 @@ def create_from_tree(cls, repo, tree, message, parent_commits=None, head=False, #{ Serializable Implementation - def _serialize(self, stream): + def _serialize(self, stream: BytesIO) -> 'Commit': write = stream.write write(("tree %s\n" % self.tree).encode('ascii')) for p in self.parents: @@ -471,7 +477,7 @@ def _serialize(self, stream): # END handle encoding return self - def _deserialize(self, stream): + def _deserialize(self, stream: BytesIO) -> 'Commit': """:param from_rev_list: if true, the stream format is coming from the rev-list command Otherwise it is assumed to be a plain data stream from our object""" readline = stream.readline @@ -511,7 +517,7 @@ def _deserialize(self, stream): buf = enc.strip() while buf: if buf[0:10] == b"encoding ": - self.encoding = buf[buf.find(' ') + 1:].decode( + self.encoding = buf[buf.find(b' ') + 1:].decode( self.encoding, 'ignore') elif buf[0:7] == b"gpgsig ": sig = buf[buf.find(b' ') + 1:] + b"\n" diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index e3be1a728..b03fa22a5 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -3,6 +3,7 @@ import logging import os import stat +from typing import List from unittest import SkipTest import uuid @@ -134,10 +135,11 @@ def _set_cache_(self, attr): super(Submodule, self)._set_cache_(attr) # END handle attribute name - def _get_intermediate_items(self, item): + @classmethod + def _get_intermediate_items(cls, item: 'Submodule') -> List['Submodule']: # type: ignore """:return: all the submodules of our module repository""" try: - return type(self).list_items(item.module()) + return cls.list_items(item.module()) except InvalidGitRepositoryError: return [] # END handle intermediate items diff --git a/git/objects/tag.py b/git/objects/tag.py index b9bc6c248..cb6efbe9b 100644 --- a/git/objects/tag.py +++ b/git/objects/tag.py @@ -9,6 +9,15 @@ from ..util import hex_to_bin from ..compat import defenc +from typing import List, TYPE_CHECKING, Union + +if TYPE_CHECKING: + from git.repo import Repo + from git.util import Actor + from .commit import Commit + from .blob import Blob + from .tree import Tree + __all__ = ("TagObject", ) @@ -18,8 +27,14 @@ class TagObject(base.Object): type = "tag" __slots__ = ("object", "tag", "tagger", "tagged_date", "tagger_tz_offset", "message") - def __init__(self, repo, binsha, object=None, tag=None, # @ReservedAssignment - tagger=None, tagged_date=None, tagger_tz_offset=None, message=None): + def __init__(self, repo: 'Repo', binsha: bytes, + object: Union[None, base.Object] = None, + tag: Union[None, str] = None, + tagger: Union[None, 'Actor'] = None, + tagged_date: Union[int, None] = None, + tagger_tz_offset: Union[int, None] = None, + message: Union[str, None] = None + ) -> None: # @ReservedAssignment """Initialize a tag object with additional data :param repo: repository this object is located in @@ -34,7 +49,7 @@ def __init__(self, repo, binsha, object=None, tag=None, # @ReservedAssignment authored_date is in, in a format similar to time.altzone""" super(TagObject, self).__init__(repo, binsha) if object is not None: - self.object = object + self.object = object # type: Union['Commit', 'Blob', 'Tree', 'TagObject'] if tag is not None: self.tag = tag if tagger is not None: @@ -46,16 +61,17 @@ def __init__(self, repo, binsha, object=None, tag=None, # @ReservedAssignment if message is not None: self.message = message - def _set_cache_(self, attr): + def _set_cache_(self, attr: str) -> None: """Cache all our attributes at once""" if attr in TagObject.__slots__: ostream = self.repo.odb.stream(self.binsha) - lines = ostream.read().decode(defenc, 'replace').splitlines() + lines = ostream.read().decode(defenc, 'replace').splitlines() # type: List[str] _obj, hexsha = lines[0].split(" ") _type_token, type_name = lines[1].split(" ") + object_type = get_object_type_by_name(type_name.encode('ascii')) self.object = \ - get_object_type_by_name(type_name.encode('ascii'))(self.repo, hex_to_bin(hexsha)) + object_type(self.repo, hex_to_bin(hexsha)) self.tag = lines[2][4:] # tag diff --git a/git/objects/tree.py b/git/objects/tree.py index 68e98329b..29b2a6846 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -17,6 +17,17 @@ tree_to_stream ) + +# typing ------------------------------------------------- + +from typing import Iterable, Iterator, Tuple, Union, cast, TYPE_CHECKING + +if TYPE_CHECKING: + from io import BytesIO + +#-------------------------------------------------------- + + cmp = lambda a, b: (a > b) - (a < b) __all__ = ("TreeModifier", "Tree") @@ -182,8 +193,10 @@ def __init__(self, repo, binsha, mode=tree_id << 12, path=None): super(Tree, self).__init__(repo, binsha, mode, path) @classmethod - def _get_intermediate_items(cls, index_object): + def _get_intermediate_items(cls, index_object: 'Tree', # type: ignore + ) -> Tuple['Tree', ...]: if index_object.type == "tree": + index_object = cast('Tree', index_object) return tuple(index_object._iter_convert_to_object(index_object._cache)) return () @@ -196,7 +209,8 @@ def _set_cache_(self, attr): super(Tree, self)._set_cache_(attr) # END handle attribute - def _iter_convert_to_object(self, iterable): + def _iter_convert_to_object(self, iterable: Iterable[Tuple[bytes, int, str]] + ) -> Iterator[Union[Blob, 'Tree', Submodule]]: """Iterable yields tuples of (binsha, mode, name), which will be converted to the respective object representation""" for binsha, mode, name in iterable: @@ -317,7 +331,7 @@ def __contains__(self, item): def __reversed__(self): return reversed(self._iter_convert_to_object(self._cache)) - def _serialize(self, stream): + def _serialize(self, stream: 'BytesIO') -> 'Tree': """Serialize this tree into the stream. Please note that we will assume our tree data to be in a sorted state. If this is not the case, serialization will not generate a correct tree representation as these are assumed to be sorted @@ -325,7 +339,7 @@ def _serialize(self, stream): tree_to_stream(self._cache, stream.write) return self - def _deserialize(self, stream): + def _deserialize(self, stream: 'BytesIO') -> 'Tree': self._cache = tree_entries_from_data(stream.read()) return self diff --git a/git/objects/util.py b/git/objects/util.py index d15d83c35..087f0166b 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -4,19 +4,34 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php """Module for general utility functions""" + from git.util import ( IterableList, Actor ) import re -from collections import deque as Deque +from collections import deque from string import digits import time import calendar from datetime import datetime, timedelta, tzinfo +# typing ------------------------------------------------------------ +from typing import (Any, Callable, Deque, Iterator, Sequence, TYPE_CHECKING, Tuple, Type, Union, cast, overload) + +if TYPE_CHECKING: + from io import BytesIO, StringIO + from .submodule.base import Submodule + from .commit import Commit + from .blob import Blob + from .tag import TagObject + from .tree import Tree + from subprocess import Popen + +# -------------------------------------------------------------------- + __all__ = ('get_object_type_by_name', 'parse_date', 'parse_actor_and_date', 'ProcessStreamAdapter', 'Traversable', 'altz_to_utctz_str', 'utctz_to_altz', 'verify_utctz', 'Actor', 'tzoffset', 'utc') @@ -26,7 +41,7 @@ #{ Functions -def mode_str_to_int(modestr): +def mode_str_to_int(modestr: Union[bytes, str]) -> int: """ :param modestr: string like 755 or 644 or 100644 - only the last 6 chars will be used :return: @@ -36,12 +51,14 @@ def mode_str_to_int(modestr): for example.""" mode = 0 for iteration, char in enumerate(reversed(modestr[-6:])): + char = cast(Union[str, int], char) mode += int(char) << iteration * 3 # END for each char return mode -def get_object_type_by_name(object_type_name): +def get_object_type_by_name(object_type_name: bytes + ) -> Union[Type['Commit'], Type['TagObject'], Type['Tree'], Type['Blob']]: """ :return: type suitable to handle the given object type name. Use the type to create new instances. @@ -62,10 +79,10 @@ def get_object_type_by_name(object_type_name): from . import tree return tree.Tree else: - raise ValueError("Cannot handle unknown object type: %s" % object_type_name) + raise ValueError("Cannot handle unknown object type: %s" % object_type_name.decode()) -def utctz_to_altz(utctz): +def utctz_to_altz(utctz: str) -> int: """we convert utctz to the timezone in seconds, it is the format time.altzone returns. Git stores it as UTC timezone which has the opposite sign as well, which explains the -1 * ( that was made explicit here ) @@ -73,7 +90,7 @@ def utctz_to_altz(utctz): return -1 * int(float(utctz) / 100 * 3600) -def altz_to_utctz_str(altz): +def altz_to_utctz_str(altz: int) -> str: """As above, but inverses the operation, returning a string that can be used in commit objects""" utci = -1 * int((float(altz) / 3600) * 100) @@ -83,7 +100,7 @@ def altz_to_utctz_str(altz): return prefix + utcs -def verify_utctz(offset): +def verify_utctz(offset: str) -> str: """:raise ValueError: if offset is incorrect :return: offset""" fmt_exc = ValueError("Invalid timezone offset format: %s" % offset) @@ -101,27 +118,28 @@ def verify_utctz(offset): class tzoffset(tzinfo): - def __init__(self, secs_west_of_utc, name=None): + + def __init__(self, secs_west_of_utc: float, name: Union[None, str] = None) -> None: self._offset = timedelta(seconds=-secs_west_of_utc) self._name = name or 'fixed' - def __reduce__(self): + def __reduce__(self) -> Tuple[Type['tzoffset'], Tuple[float, str]]: return tzoffset, (-self._offset.total_seconds(), self._name) - def utcoffset(self, dt): + def utcoffset(self, dt) -> timedelta: return self._offset - def tzname(self, dt): + def tzname(self, dt) -> str: return self._name - def dst(self, dt): + def dst(self, dt) -> timedelta: return ZERO utc = tzoffset(0, 'UTC') -def from_timestamp(timestamp, tz_offset): +def from_timestamp(timestamp, tz_offset: float) -> datetime: """Converts a timestamp + tz_offset into an aware datetime instance.""" utc_dt = datetime.fromtimestamp(timestamp, utc) try: @@ -131,7 +149,7 @@ def from_timestamp(timestamp, tz_offset): return utc_dt -def parse_date(string_date): +def parse_date(string_date: str) -> Tuple[int, int]: """ Parse the given date as one of the following @@ -152,18 +170,18 @@ def parse_date(string_date): # git time try: if string_date.count(' ') == 1 and string_date.rfind(':') == -1: - timestamp, offset = string_date.split() + timestamp, offset_str = string_date.split() if timestamp.startswith('@'): timestamp = timestamp[1:] - timestamp = int(timestamp) - return timestamp, utctz_to_altz(verify_utctz(offset)) + timestamp_int = int(timestamp) + return timestamp_int, utctz_to_altz(verify_utctz(offset_str)) else: - offset = "+0000" # local time by default + offset_str = "+0000" # local time by default if string_date[-5] in '-+': - offset = verify_utctz(string_date[-5:]) + offset_str = verify_utctz(string_date[-5:]) string_date = string_date[:-6] # skip space as well # END split timezone info - offset = utctz_to_altz(offset) + offset = utctz_to_altz(offset_str) # now figure out the date and time portion - split time date_formats = [] @@ -218,13 +236,13 @@ def parse_date(string_date): _re_only_actor = re.compile(r'^.+? (.*)$') -def parse_actor_and_date(line): +def parse_actor_and_date(line: str) -> Tuple[Actor, int, int]: """Parse out the actor (author or committer) info from a line like:: author Tom Preston-Werner 1191999972 -0700 :return: [Actor, int_seconds_since_epoch, int_timezone_offset]""" - actor, epoch, offset = '', 0, 0 + actor, epoch, offset = '', '0', '0' m = _re_actor_epoch.search(line) if m: actor, epoch, offset = m.groups() @@ -247,11 +265,11 @@ class ProcessStreamAdapter(object): it if the instance goes out of scope.""" __slots__ = ("_proc", "_stream") - def __init__(self, process, stream_name): + def __init__(self, process: 'Popen', stream_name: str) -> None: self._proc = process - self._stream = getattr(process, stream_name) + self._stream = getattr(process, stream_name) # type: StringIO ## guess - def __getattr__(self, attr): + def __getattr__(self, attr: str) -> Any: return getattr(self._stream, attr) @@ -260,29 +278,61 @@ class Traversable(object): """Simple interface to perform depth-first or breadth-first traversals into one direction. Subclasses only need to implement one function. - Instances of the Subclass must be hashable""" + Instances of the Subclass must be hashable + + Defined subclasses = [Commit, Tree, SubModule] + """ __slots__ = () + @overload + @classmethod + def _get_intermediate_items(cls, item: 'Commit') -> Tuple['Commit', ...]: + ... + + @overload + @classmethod + def _get_intermediate_items(cls, item: 'Submodule') -> Tuple['Submodule', ...]: + ... + + @overload + @classmethod + def _get_intermediate_items(cls, item: 'Tree') -> Tuple['Tree', ...]: + ... + + @overload + @classmethod + def _get_intermediate_items(cls, item: 'Traversable') -> Tuple['Traversable', ...]: + ... + @classmethod - def _get_intermediate_items(cls, item): + def _get_intermediate_items(cls, item: 'Traversable' + ) -> Sequence['Traversable']: """ Returns: - List of items connected to the given item. + Tuple of items connected to the given item. Must be implemented in subclass + + class Commit:: (cls, Commit) -> Tuple[Commit, ...] + class Submodule:: (cls, Submodule) -> Iterablelist[Submodule] + class Tree:: (cls, Tree) -> Tuple[Tree, ...] """ raise NotImplementedError("To be implemented in subclass") - def list_traverse(self, *args, **kwargs): + def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList: """ :return: IterableList with the results of the traversal as produced by traverse()""" - out = IterableList(self._id_attribute_) + out = IterableList(self._id_attribute_) # type: ignore[attr-defined] # defined in sublcasses out.extend(self.traverse(*args, **kwargs)) return out - def traverse(self, predicate=lambda i, d: True, - prune=lambda i, d: False, depth=-1, branch_first=True, - visit_once=True, ignore_self=1, as_edge=False): + def traverse(self, + predicate: Callable[[object, int], bool] = lambda i, d: True, + prune: Callable[[object, int], bool] = lambda i, d: False, + depth: int = -1, + branch_first: bool = True, + visit_once: bool = True, ignore_self: int = 1, as_edge: bool = False + ) -> Union[Iterator['Traversable'], Iterator[Tuple['Traversable', 'Traversable']]]: """:return: iterator yielding of items found when traversing self :param predicate: f(i,d) returns False if item i at depth d should not be included in the result @@ -314,13 +364,16 @@ def traverse(self, predicate=lambda i, d: True, destination, i.e. tuple(src, dest) with the edge spanning from source to destination""" visited = set() - stack = Deque() + stack = deque() # type: Deque[Tuple[int, Traversable, Union[Traversable, None]]] stack.append((0, self, None)) # self is always depth level 0 - def addToStack(stack, item, branch_first, depth): + def addToStack(stack: Deque[Tuple[int, 'Traversable', Union['Traversable', None]]], + item: 'Traversable', + branch_first: bool, + depth) -> None: lst = self._get_intermediate_items(item) if not lst: - return + return None if branch_first: stack.extendleft((depth, i, item) for i in lst) else: @@ -359,14 +412,14 @@ class Serializable(object): """Defines methods to serialize and deserialize objects from and into a data stream""" __slots__ = () - def _serialize(self, stream): + def _serialize(self, stream: 'BytesIO') -> 'Serializable': """Serialize the data of this object into the given data stream :note: a serialized object would ``_deserialize`` into the same object :param stream: a file-like object :return: self""" raise NotImplementedError("To be implemented in subclass") - def _deserialize(self, stream): + def _deserialize(self, stream: 'BytesIO') -> 'Serializable': """Deserialize all information regarding this object from the stream :param stream: a file-like object :return: self""" diff --git a/git/repo/base.py b/git/repo/base.py index 55682411a..5abd49618 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -3,12 +3,13 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php - import logging import os import re import warnings +from gitdb.exc import BadObject + from git.cmd import ( Git, handle_process_output @@ -529,7 +530,7 @@ def iter_trees(self, *args: Any, **kwargs: Any) -> Iterator['Tree']: :note: Takes all arguments known to iter_commits method""" return (c.tree for c in self.iter_commits(*args, **kwargs)) - def tree(self, rev: Union['Commit', 'Tree', None] = None) -> 'Tree': + def tree(self, rev: Union['Commit', 'Tree', str, None] = None) -> 'Tree': """The Tree object for the given treeish revision Examples:: @@ -618,6 +619,23 @@ def is_ancestor(self, ancestor_rev: 'Commit', rev: 'Commit') -> bool: raise return True + def is_valid_object(self, sha: str, object_type: str = None) -> bool: + try: + complete_sha = self.odb.partial_to_complete_sha_hex(sha) + object_info = self.odb.info(complete_sha) + if object_type: + if object_info.type == object_type.encode(): + return True + else: + log.debug("Commit hash points to an object of type '%s'. Requested were objects of type '%s'", + object_info.type.decode(), object_type) + return False + else: + return True + except BadObject: + log.debug("Commit hash is invalid.") + return False + def _get_daemon_export(self) -> bool: if self.git_dir: filename = osp.join(self.git_dir, self.DAEMON_EXPORT_FILE) diff --git a/git/types.py b/git/types.py index 91d35b567..a410cb366 100644 --- a/git/types.py +++ b/git/types.py @@ -7,15 +7,12 @@ from typing import Union, Any if sys.version_info[:2] >= (3, 8): - from typing import Final, Literal # noqa: F401 + from typing import Final, Literal, SupportsIndex # noqa: F401 else: - from typing_extensions import Final, Literal # noqa: F401 + from typing_extensions import Final, Literal, SupportsIndex # noqa: F401 -if sys.version_info[:2] < (3, 6): - # os.PathLike (PEP-519) only got introduced with Python 3.6 - PathLike = str -elif sys.version_info[:2] < (3, 9): +if sys.version_info[:2] < (3, 9): # Python >= 3.6, < 3.9 PathLike = Union[str, os.PathLike] elif sys.version_info[:2] >= (3, 9): diff --git a/git/util.py b/git/util.py index edbd5f1e7..516c315c1 100644 --- a/git/util.py +++ b/git/util.py @@ -29,7 +29,7 @@ if TYPE_CHECKING: from git.remote import Remote from git.repo.base import Repo -from .types import PathLike, TBD, Literal +from .types import PathLike, TBD, Literal, SupportsIndex # --------------------------------------------------------------------- @@ -971,7 +971,10 @@ def __getattr__(self, attr: str) -> Any: # END for each item return list.__getattribute__(self, attr) - def __getitem__(self, index: Union[int, slice, str]) -> Any: + def __getitem__(self, index: Union[SupportsIndex, int, slice, str]) -> Any: + + assert isinstance(index, (int, str, slice)), "Index of IterableList should be an int or str" + if isinstance(index, int): return list.__getitem__(self, index) elif isinstance(index, slice): @@ -983,12 +986,13 @@ def __getitem__(self, index: Union[int, slice, str]) -> Any: raise IndexError("No item found with id %r" % (self._prefix + index)) from e # END handle getattr - def __delitem__(self, index: Union[int, str, slice]) -> None: + def __delitem__(self, index: Union[SupportsIndex, int, slice, str]) -> Any: + + assert isinstance(index, (int, str)), "Index of IterableList should be an int or str" delindex = cast(int, index) if not isinstance(index, int): delindex = -1 - assert not isinstance(index, slice) name = self._prefix + index for i, item in enumerate(self): if getattr(item, self._id_attr) == name: diff --git a/requirements.txt b/requirements.txt index d980f6682..7159416a9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ gitdb>=4.0.1,<5 -typing-extensions>=3.7.4.0;python_version<"3.8" +typing-extensions>=3.7.4.3;python_version<"3.8" diff --git a/setup.py b/setup.py index f8829c386..2845bbecd 100755 --- a/setup.py +++ b/setup.py @@ -99,7 +99,7 @@ def build_py_modules(basedir, excludes=[]): include_package_data=True, py_modules=build_py_modules("./git", excludes=["git.ext.*"]), package_dir={'git': 'git'}, - python_requires='>=3.5', + python_requires='>=3.6', install_requires=requirements, tests_require=requirements + test_requirements, zip_safe=False, @@ -123,10 +123,9 @@ def build_py_modules(basedir, excludes=[]): "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9" + "Programming Language :: Python :: 3.9" ] ) diff --git a/test-requirements.txt b/test-requirements.txt index e06d2be14..16dc0d2c1 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -5,4 +5,4 @@ tox virtualenv nose gitdb>=4.0.1,<5 -typing-extensions>=3.7.4.0;python_version<"3.8" +typing-extensions>=3.7.4.3;python_version<"3.8" diff --git a/test/test_repo.py b/test/test_repo.py index 0311653a2..8aced94d4 100644 --- a/test/test_repo.py +++ b/test/test_repo.py @@ -422,7 +422,7 @@ def test_tag_to_full_tag_path(self): self.rorepo.tag(tag) except ValueError as valueError: value_errors.append(valueError.args[0]) - raise ValueError('. '.join(value_errors)) + self.assertEqual(value_errors, []) def test_archive(self): tmpfile = tempfile.mktemp(suffix='archive-test') @@ -989,6 +989,34 @@ def test_is_ancestor(self): for i, j in itertools.permutations([c1, 'ffffff', ''], r=2): self.assertRaises(GitCommandError, repo.is_ancestor, i, j) + def test_is_valid_object(self): + repo = self.rorepo + commit_sha = 'f6aa8d1' + blob_sha = '1fbe3e4375' + tree_sha = '960b40fe36' + tag_sha = '42c2f60c43' + + # Check for valid objects + self.assertTrue(repo.is_valid_object(commit_sha)) + self.assertTrue(repo.is_valid_object(blob_sha)) + self.assertTrue(repo.is_valid_object(tree_sha)) + self.assertTrue(repo.is_valid_object(tag_sha)) + + # Check for valid objects of specific type + self.assertTrue(repo.is_valid_object(commit_sha, 'commit')) + self.assertTrue(repo.is_valid_object(blob_sha, 'blob')) + self.assertTrue(repo.is_valid_object(tree_sha, 'tree')) + self.assertTrue(repo.is_valid_object(tag_sha, 'tag')) + + # Check for invalid objects + self.assertFalse(repo.is_valid_object(b'1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a', 'blob')) + + # Check for invalid objects of specific type + self.assertFalse(repo.is_valid_object(commit_sha, 'blob')) + self.assertFalse(repo.is_valid_object(blob_sha, 'commit')) + self.assertFalse(repo.is_valid_object(tree_sha, 'commit')) + self.assertFalse(repo.is_valid_object(tag_sha, 'commit')) + @with_rw_directory def test_git_work_tree_dotgit(self, rw_dir): """Check that we find .git as a worktree file and find the worktree diff --git a/tox.ini b/tox.ini index a0cb1c9f1..e3dd84b6b 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py35,py36,py37,py38,py39,flake8 +envlist = py36,py37,py38,py39,flake8 [testenv] commands = python -m unittest --buffer {posargs} From 93954d20310a7b77322211fd7c1eb8bd34217612 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 23 Jun 2021 02:22:34 +0100 Subject: [PATCH 0493/2375] Update typing-extensions version in requirements.txt --- doc/source/tutorial.rst | 2 +- requirements.txt | 2 +- test-requirements.txt | 2 +- tox.ini | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/source/tutorial.rst b/doc/source/tutorial.rst index d548f8829..303e89cff 100644 --- a/doc/source/tutorial.rst +++ b/doc/source/tutorial.rst @@ -10,7 +10,7 @@ GitPython Tutorial GitPython provides object model access to your git repository. This tutorial is composed of multiple sections, most of which explains a real-life usecase. -All code presented here originated from `test_docs.py `_ to assure correctness. Knowing this should also allow you to more easily run the code for your own testing purposes, all you need is a developer installation of git-python. +All code presented here originated from `test_docs.py `_ to assure correctness. Knowing this should also allow you to more easily run the code for your own testing purposes, all you need is a developer installation of git-python. Meet the Repo type ****************** diff --git a/requirements.txt b/requirements.txt index d980f6682..7159416a9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ gitdb>=4.0.1,<5 -typing-extensions>=3.7.4.0;python_version<"3.8" +typing-extensions>=3.7.4.3;python_version<"3.8" diff --git a/test-requirements.txt b/test-requirements.txt index e06d2be14..16dc0d2c1 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -5,4 +5,4 @@ tox virtualenv nose gitdb>=4.0.1,<5 -typing-extensions>=3.7.4.0;python_version<"3.8" +typing-extensions>=3.7.4.3;python_version<"3.8" diff --git a/tox.ini b/tox.ini index a0cb1c9f1..e3dd84b6b 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py35,py36,py37,py38,py39,flake8 +envlist = py36,py37,py38,py39,flake8 [testenv] commands = python -m unittest --buffer {posargs} From 8bbf6520460dc4d2bfd7943cda666436f860cf71 Mon Sep 17 00:00:00 2001 From: Max Fan Date: Wed, 23 Jun 2021 14:20:11 -0400 Subject: [PATCH 0494/2375] Fix exsit typo --- git/objects/submodule/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index b03fa22a5..49d6aae14 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -390,7 +390,7 @@ def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=N mrepo = None if url is None: if not has_module: - raise ValueError("A URL was not given and existing repository did not exsit at %s" % path) + raise ValueError("A URL was not given and existing repository did not exist at %s" % path) # END check url mrepo = sm.module() urls = [r.url for r in mrepo.remotes] From 091ac2960fe30fa5477fcb5bae203eb317090b3f Mon Sep 17 00:00:00 2001 From: Max Fan Date: Wed, 23 Jun 2021 14:21:39 -0400 Subject: [PATCH 0495/2375] Add missing article to error message --- git/objects/submodule/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 49d6aae14..cac9618da 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -390,7 +390,7 @@ def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=N mrepo = None if url is None: if not has_module: - raise ValueError("A URL was not given and existing repository did not exist at %s" % path) + raise ValueError("A URL was not given and an existing repository did not exist at %s" % path) # END check url mrepo = sm.module() urls = [r.url for r in mrepo.remotes] From 703280b8c3df6f9b1a5cbe0997b717edbcaa8979 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 24 Jun 2021 08:00:18 +0800 Subject: [PATCH 0496/2375] remove duplication --- git/objects/submodule/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index cac9618da..8cf4dd1eb 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -390,7 +390,7 @@ def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=N mrepo = None if url is None: if not has_module: - raise ValueError("A URL was not given and an existing repository did not exist at %s" % path) + raise ValueError("A URL was not given and a repository did not exist at %s" % path) # END check url mrepo = sm.module() urls = [r.url for r in mrepo.remotes] From 42e4f5e26b812385df65f8f32081035e2fb2a121 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 24 Jun 2021 05:52:48 +0100 Subject: [PATCH 0497/2375] Add types to tree.Tree --- git/index/base.py | 2 +- git/index/fun.py | 2 +- git/objects/fun.py | 15 +++++++++--- git/objects/tree.py | 56 ++++++++++++++++++++++----------------------- git/repo/base.py | 3 ++- 5 files changed, 44 insertions(+), 34 deletions(-) diff --git a/git/index/base.py b/git/index/base.py index 044240602..e2b3f8fa4 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -568,7 +568,7 @@ def write_tree(self) -> Tree: # note: additional deserialization could be saved if write_tree_from_cache # would return sorted tree entries root_tree = Tree(self.repo, binsha, path='') - root_tree._cache = tree_items + root_tree._cache = tree_items # type: ignore return root_tree def _process_diff_args(self, args: List[Union[str, diff.Diffable, object]] diff --git a/git/index/fun.py b/git/index/fun.py index 3fded3473..10a440501 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -293,7 +293,7 @@ def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 # finally create the tree sio = BytesIO() tree_to_stream(tree_items, sio.write) # converts bytes of each item[0] to str - tree_items_stringified = cast(List[Tuple[str, int, str]], tree_items) # type: List[Tuple[str, int, str]] + tree_items_stringified = cast(List[Tuple[str, int, str]], tree_items) sio.seek(0) istream = odb.store(IStream(str_tree_type, len(sio.getvalue()), sio)) diff --git a/git/objects/fun.py b/git/objects/fun.py index 9b36712e1..339a53b8c 100644 --- a/git/objects/fun.py +++ b/git/objects/fun.py @@ -1,10 +1,19 @@ """Module with functions which are supposed to be as fast as possible""" from stat import S_ISDIR + from git.compat import ( safe_decode, defenc ) +# typing ---------------------------------------------- + +from typing import List, Tuple + + +# --------------------------------------------------- + + __all__ = ('tree_to_stream', 'tree_entries_from_data', 'traverse_trees_recursive', 'traverse_tree_recursive') @@ -38,7 +47,7 @@ def tree_to_stream(entries, write): # END for each item -def tree_entries_from_data(data): +def tree_entries_from_data(data: bytes) -> List[Tuple[bytes, int, str]]: """Reads the binary representation of a tree and returns tuples of Tree items :param data: data block with tree data (as bytes) :return: list(tuple(binsha, mode, tree_relative_path), ...)""" @@ -72,8 +81,8 @@ def tree_entries_from_data(data): # default encoding for strings in git is utf8 # Only use the respective unicode object if the byte stream was encoded - name = data[ns:i] - name = safe_decode(name) + name_bytes = data[ns:i] + name = safe_decode(name_bytes) # byte is NULL, get next 20 i += 1 diff --git a/git/objects/tree.py b/git/objects/tree.py index 29b2a6846..ec7d8e885 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -20,20 +20,23 @@ # typing ------------------------------------------------- -from typing import Iterable, Iterator, Tuple, Union, cast, TYPE_CHECKING +from typing import Callable, Dict, Iterable, Iterator, List, Tuple, Type, Union, cast, TYPE_CHECKING + +from git.types import PathLike if TYPE_CHECKING: + from git.repo import Repo from io import BytesIO #-------------------------------------------------------- -cmp = lambda a, b: (a > b) - (a < b) +cmp: Callable[[int, int], int] = lambda a, b: (a > b) - (a < b) __all__ = ("TreeModifier", "Tree") -def git_cmp(t1, t2): +def git_cmp(t1: 'Tree', t2: 'Tree') -> int: a, b = t1[2], t2[2] len_a, len_b = len(a), len(b) min_len = min(len_a, len_b) @@ -45,9 +48,9 @@ def git_cmp(t1, t2): return len_a - len_b -def merge_sort(a, cmp): +def merge_sort(a: List[int], cmp: Callable[[int, int], int]) -> None: if len(a) < 2: - return + return None mid = len(a) // 2 lefthalf = a[:mid] @@ -182,29 +185,29 @@ class Tree(IndexObject, diff.Diffable, util.Traversable, util.Serializable): symlink_id = 0o12 tree_id = 0o04 - _map_id_to_type = { + _map_id_to_type: Dict[int, Union[Type[Submodule], Type[Blob], Type['Tree']]] = { commit_id: Submodule, blob_id: Blob, symlink_id: Blob # tree id added once Tree is defined } - def __init__(self, repo, binsha, mode=tree_id << 12, path=None): + def __init__(self, repo: 'Repo', binsha: bytes, mode: int = tree_id << 12, path: Union[PathLike, None] = None): super(Tree, self).__init__(repo, binsha, mode, path) @classmethod def _get_intermediate_items(cls, index_object: 'Tree', # type: ignore - ) -> Tuple['Tree', ...]: + ) -> Union[Tuple['Tree', ...], Tuple[()]]: if index_object.type == "tree": index_object = cast('Tree', index_object) return tuple(index_object._iter_convert_to_object(index_object._cache)) return () - def _set_cache_(self, attr): + def _set_cache_(self, attr: str) -> None: if attr == "_cache": # Set the data when we need it ostream = self.repo.odb.stream(self.binsha) - self._cache = tree_entries_from_data(ostream.read()) + self._cache: List[Tuple[bytes, int, str]] = tree_entries_from_data(ostream.read()) else: super(Tree, self)._set_cache_(attr) # END handle attribute @@ -221,7 +224,7 @@ def _iter_convert_to_object(self, iterable: Iterable[Tuple[bytes, int, str]] raise TypeError("Unknown mode %o found in tree data for path '%s'" % (mode, path)) from e # END for each item - def join(self, file): + def join(self, file: str) -> Union[Blob, 'Tree', Submodule]: """Find the named object in this tree's contents :return: ``git.Blob`` or ``git.Tree`` or ``git.Submodule`` @@ -254,26 +257,22 @@ def join(self, file): raise KeyError(msg % file) # END handle long paths - def __div__(self, file): - """For PY2 only""" - return self.join(file) - - def __truediv__(self, file): + def __truediv__(self, file: str) -> Union['Tree', Blob, Submodule]: """For PY3 only""" return self.join(file) @property - def trees(self): + def trees(self) -> List['Tree']: """:return: list(Tree, ...) list of trees directly below this tree""" return [i for i in self if i.type == "tree"] @property - def blobs(self): + def blobs(self) -> List['Blob']: """:return: list(Blob, ...) list of blobs directly below this tree""" return [i for i in self if i.type == "blob"] @property - def cache(self): + def cache(self) -> TreeModifier: """ :return: An object allowing to modify the internal cache. This can be used to change the tree's contents. When done, make sure you call ``set_done`` @@ -289,16 +288,16 @@ def traverse(self, predicate=lambda i, d: True, return super(Tree, self).traverse(predicate, prune, depth, branch_first, visit_once, ignore_self) # List protocol - def __getslice__(self, i, j): + def __getslice__(self, i: int, j: int) -> List[Union[Blob, 'Tree', Submodule]]: return list(self._iter_convert_to_object(self._cache[i:j])) - def __iter__(self): + def __iter__(self) -> Iterator[Union[Blob, 'Tree', Submodule]]: return self._iter_convert_to_object(self._cache) - def __len__(self): + def __len__(self) -> int: return len(self._cache) - def __getitem__(self, item): + def __getitem__(self, item: Union[str, int, slice]) -> Union[Blob, 'Tree', Submodule]: if isinstance(item, int): info = self._cache[item] return self._map_id_to_type[info[1] >> 12](self.repo, info[0], info[1], join_path(self.path, info[2])) @@ -310,7 +309,7 @@ def __getitem__(self, item): raise TypeError("Invalid index type: %r" % item) - def __contains__(self, item): + def __contains__(self, item: Union[IndexObject, PathLike]) -> bool: if isinstance(item, IndexObject): for info in self._cache: if item.binsha == info[0]: @@ -321,10 +320,11 @@ def __contains__(self, item): # compatibility # treat item as repo-relative path - path = self.path - for info in self._cache: - if item == join_path(path, info[2]): - return True + else: + path = self.path + for info in self._cache: + if item == join_path(path, info[2]): + return True # END for each item return False diff --git a/git/repo/base.py b/git/repo/base.py index 5abd49618..779477310 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -7,6 +7,7 @@ import os import re import warnings +from gitdb.db.loose import LooseObjectDB from gitdb.exc import BadObject @@ -100,7 +101,7 @@ class Repo(object): # Subclasses may easily bring in their own custom types by placing a constructor or type here GitCommandWrapperType = Git - def __init__(self, path: Optional[PathLike] = None, odbt: Type[GitCmdObjectDB] = GitCmdObjectDB, + def __init__(self, path: Optional[PathLike] = None, odbt: Type[LooseObjectDB] = GitCmdObjectDB, search_parent_directories: bool = False, expand_vars: bool = True) -> None: """Create a new Repo instance From c3903d8e03af5c1e01c1a96919b926c55f45052e Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 24 Jun 2021 14:27:13 +0100 Subject: [PATCH 0498/2375] Make IterableList generic and update throughout --- git/objects/commit.py | 4 ++-- git/objects/submodule/base.py | 20 ++++++++++++++------ git/objects/util.py | 11 ++++++----- git/refs/reference.py | 4 ++-- git/remote.py | 31 ++++++++++++++++--------------- git/repo/base.py | 12 ++++++------ git/util.py | 22 ++++++++++++++++------ 7 files changed, 62 insertions(+), 42 deletions(-) diff --git a/git/objects/commit.py b/git/objects/commit.py index 26db6e36d..0b707450c 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -8,7 +8,7 @@ from git.util import ( hex_to_bin, Actor, - Iterable, + IterableObj, Stats, finalize_process ) @@ -47,7 +47,7 @@ __all__ = ('Commit', ) -class Commit(base.Object, Iterable, Diffable, Traversable, Serializable): +class Commit(base.Object, IterableObj, Diffable, Traversable, Serializable): """Wraps a git Commit object. diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 8cf4dd1eb..57396a467 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -3,7 +3,6 @@ import logging import os import stat -from typing import List from unittest import SkipTest import uuid @@ -27,7 +26,7 @@ from git.objects.base import IndexObject, Object from git.objects.util import Traversable from git.util import ( - Iterable, + IterableObj, join_path_native, to_native_path_linux, RemoteProgress, @@ -47,6 +46,15 @@ ) +# typing ---------------------------------------------------------------------- + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from git.util import IterableList + +# ----------------------------------------------------------------------------- + __all__ = ["Submodule", "UpdateProgress"] @@ -74,7 +82,7 @@ class UpdateProgress(RemoteProgress): # IndexObject comes via util module, its a 'hacky' fix thanks to pythons import # mechanism which cause plenty of trouble of the only reason for packages and # modules is refactoring - subpackages shouldn't depend on parent packages -class Submodule(IndexObject, Iterable, Traversable): +class Submodule(IndexObject, IterableObj, Traversable): """Implements access to a git submodule. They are special in that their sha represents a commit in the submodule's repository which is to be checked out @@ -136,12 +144,12 @@ def _set_cache_(self, attr): # END handle attribute name @classmethod - def _get_intermediate_items(cls, item: 'Submodule') -> List['Submodule']: # type: ignore + def _get_intermediate_items(cls, item: 'Submodule') -> IterableList['Submodule']: """:return: all the submodules of our module repository""" try: return cls.list_items(item.module()) except InvalidGitRepositoryError: - return [] + return IterableList('') # END handle intermediate items @classmethod @@ -1163,7 +1171,7 @@ def config_reader(self): :raise IOError: If the .gitmodules file/blob could not be read""" return self._config_parser_constrained(read_only=True) - def children(self): + def children(self) -> IterableList['Submodule']: """ :return: IterableList(Submodule, ...) an iterable list of submodules instances which are children of this submodule or 0 if the submodule is not checked out""" diff --git a/git/objects/util.py b/git/objects/util.py index 087f0166b..a565cf42f 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -19,11 +19,11 @@ from datetime import datetime, timedelta, tzinfo # typing ------------------------------------------------------------ -from typing import (Any, Callable, Deque, Iterator, Sequence, TYPE_CHECKING, Tuple, Type, Union, cast, overload) +from typing import (Any, Callable, Deque, Iterator, TYPE_CHECKING, Tuple, Type, Union, cast) if TYPE_CHECKING: from io import BytesIO, StringIO - from .submodule.base import Submodule + from .submodule.base import Submodule # noqa: F401 from .commit import Commit from .blob import Blob from .tag import TagObject @@ -284,6 +284,7 @@ class Traversable(object): """ __slots__ = () + """ @overload @classmethod def _get_intermediate_items(cls, item: 'Commit') -> Tuple['Commit', ...]: @@ -303,10 +304,10 @@ def _get_intermediate_items(cls, item: 'Tree') -> Tuple['Tree', ...]: @classmethod def _get_intermediate_items(cls, item: 'Traversable') -> Tuple['Traversable', ...]: ... + """ @classmethod - def _get_intermediate_items(cls, item: 'Traversable' - ) -> Sequence['Traversable']: + def _get_intermediate_items(cls, item): """ Returns: Tuple of items connected to the given item. @@ -322,7 +323,7 @@ def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList: """ :return: IterableList with the results of the traversal as produced by traverse()""" - out = IterableList(self._id_attribute_) # type: ignore[attr-defined] # defined in sublcasses + out: IterableList = IterableList(self._id_attribute_) # type: ignore[attr-defined] # defined in sublcasses out.extend(self.traverse(*args, **kwargs)) return out diff --git a/git/refs/reference.py b/git/refs/reference.py index 9014f5558..8a9b04873 100644 --- a/git/refs/reference.py +++ b/git/refs/reference.py @@ -1,6 +1,6 @@ from git.util import ( LazyMixin, - Iterable, + IterableObj, ) from .symbolic import SymbolicReference @@ -23,7 +23,7 @@ def wrapper(self, *args): #}END utilities -class Reference(SymbolicReference, LazyMixin, Iterable): +class Reference(SymbolicReference, LazyMixin, IterableObj): """Represents a named reference to any object. Subclasses may apply restrictions though, i.e. Heads can only point to commits.""" diff --git a/git/remote.py b/git/remote.py index 6ea4b2a1a..a85297c17 100644 --- a/git/remote.py +++ b/git/remote.py @@ -13,7 +13,7 @@ from git.exc import GitCommandError from git.util import ( LazyMixin, - Iterable, + IterableObj, IterableList, RemoteProgress, CallableRemoteProgress, @@ -107,7 +107,7 @@ def to_progress_instance(progress: Union[Callable[..., Any], RemoteProgress, Non return progress -class PushInfo(object): +class PushInfo(IterableObj, object): """ Carries information about the result of a push operation of a single head:: @@ -220,7 +220,7 @@ def _from_line(cls, remote: 'Remote', line: str) -> 'PushInfo': return PushInfo(flags, from_ref, to_ref_string, remote, old_commit, summary) -class FetchInfo(object): +class FetchInfo(IterableObj, object): """ Carries information about the results of a fetch operation of a single head:: @@ -421,7 +421,7 @@ def _from_line(cls, repo: 'Repo', line: str, fetch_line: str) -> 'FetchInfo': return cls(remote_local_ref, flags, note, old_commit, local_remote_ref) -class Remote(LazyMixin, Iterable): +class Remote(LazyMixin, IterableObj): """Provides easy read and write access to a git remote. @@ -580,18 +580,18 @@ def urls(self) -> Iterator[str]: raise ex @property - def refs(self) -> IterableList: + def refs(self) -> IterableList[RemoteReference]: """ :return: IterableList of RemoteReference objects. It is prefixed, allowing you to omit the remote path portion, i.e.:: remote.refs.master # yields RemoteReference('/refs/remotes/origin/master')""" - out_refs = IterableList(RemoteReference._id_attribute_, "%s/" % self.name) + out_refs: IterableList[RemoteReference] = IterableList(RemoteReference._id_attribute_, "%s/" % self.name) out_refs.extend(RemoteReference.list_items(self.repo, remote=self.name)) return out_refs @property - def stale_refs(self) -> IterableList: + def stale_refs(self) -> IterableList[Reference]: """ :return: IterableList RemoteReference objects that do not have a corresponding @@ -606,7 +606,7 @@ def stale_refs(self) -> IterableList: as well. This is a fix for the issue described here: https://github.com/gitpython-developers/GitPython/issues/260 """ - out_refs = IterableList(RemoteReference._id_attribute_, "%s/" % self.name) + out_refs: IterableList[RemoteReference] = IterableList(RemoteReference._id_attribute_, "%s/" % self.name) for line in self.repo.git.remote("prune", "--dry-run", self).splitlines()[2:]: # expecting # * [would prune] origin/new_branch @@ -681,11 +681,12 @@ def update(self, **kwargs: Any) -> 'Remote': return self def _get_fetch_info_from_stderr(self, proc: TBD, - progress: Union[Callable[..., Any], RemoteProgress, None]) -> IterableList: + progress: Union[Callable[..., Any], RemoteProgress, None] + ) -> IterableList['FetchInfo']: progress = to_progress_instance(progress) # skip first line as it is some remote info we are not interested in - output = IterableList('name') + output: IterableList['FetchInfo'] = IterableList('name') # lines which are no progress are fetch info lines # this also waits for the command to finish @@ -741,7 +742,7 @@ def _get_fetch_info_from_stderr(self, proc: TBD, return output def _get_push_info(self, proc: TBD, - progress: Union[Callable[..., Any], RemoteProgress, None]) -> IterableList: + progress: Union[Callable[..., Any], RemoteProgress, None]) -> IterableList[PushInfo]: progress = to_progress_instance(progress) # read progress information from stderr @@ -749,7 +750,7 @@ def _get_push_info(self, proc: TBD, # read the lines manually as it will use carriage returns between the messages # to override the previous one. This is why we read the bytes manually progress_handler = progress.new_message_handler() - output = IterableList('push_infos') + output: IterableList[PushInfo] = IterableList('push_infos') def stdout_handler(line: str) -> None: try: @@ -785,7 +786,7 @@ def _assert_refspec(self) -> None: def fetch(self, refspec: Union[str, List[str], None] = None, progress: Union[Callable[..., Any], None] = None, - verbose: bool = True, **kwargs: Any) -> IterableList: + verbose: bool = True, **kwargs: Any) -> IterableList[FetchInfo]: """Fetch the latest changes for this remote :param refspec: @@ -832,7 +833,7 @@ def fetch(self, refspec: Union[str, List[str], None] = None, def pull(self, refspec: Union[str, List[str], None] = None, progress: Union[Callable[..., Any], None] = None, - **kwargs: Any) -> IterableList: + **kwargs: Any) -> IterableList[FetchInfo]: """Pull changes from the given branch, being the same as a fetch followed by a merge of branch with your local branch. @@ -853,7 +854,7 @@ def pull(self, refspec: Union[str, List[str], None] = None, def push(self, refspec: Union[str, List[str], None] = None, progress: Union[Callable[..., Any], None] = None, - **kwargs: Any) -> IterableList: + **kwargs: Any) -> IterableList[PushInfo]: """Push changes from source branch in refspec to target branch in refspec. :param refspec: see 'fetch' method diff --git a/git/repo/base.py b/git/repo/base.py index 779477310..52727504b 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -309,7 +309,7 @@ def bare(self) -> bool: return self._bare @property - def heads(self) -> 'IterableList': + def heads(self) -> 'IterableList[Head]': """A list of ``Head`` objects representing the branch heads in this repo @@ -317,7 +317,7 @@ def heads(self) -> 'IterableList': return Head.list_items(self) @property - def references(self) -> 'IterableList': + def references(self) -> 'IterableList[Reference]': """A list of Reference objects representing tags, heads and remote references. :return: IterableList(Reference, ...)""" @@ -342,7 +342,7 @@ def head(self) -> 'HEAD': return HEAD(self, 'HEAD') @property - def remotes(self) -> 'IterableList': + def remotes(self) -> 'IterableList[Remote]': """A list of Remote objects allowing to access and manipulate remotes :return: ``git.IterableList(Remote, ...)``""" return Remote.list_items(self) @@ -358,13 +358,13 @@ def remote(self, name: str = 'origin') -> 'Remote': #{ Submodules @property - def submodules(self) -> 'IterableList': + def submodules(self) -> 'IterableList[Submodule]': """ :return: git.IterableList(Submodule, ...) of direct submodules available from the current head""" return Submodule.list_items(self) - def submodule(self, name: str) -> 'IterableList': + def submodule(self, name: str) -> 'Submodule': """ :return: Submodule with the given name :raise ValueError: If no such submodule exists""" try: @@ -396,7 +396,7 @@ def submodule_update(self, *args: Any, **kwargs: Any) -> Iterator: #}END submodules @property - def tags(self) -> 'IterableList': + def tags(self) -> 'IterableList[TagReference]': """A list of ``Tag`` objects that are available in this repo :return: ``git.IterableList(TagReference, ...)`` """ return TagReference.list_items(self) diff --git a/git/util.py b/git/util.py index 516c315c1..5f184b7a2 100644 --- a/git/util.py +++ b/git/util.py @@ -22,7 +22,7 @@ # typing --------------------------------------------------------- from typing import (Any, AnyStr, BinaryIO, Callable, Dict, Generator, IO, Iterator, List, - Optional, Pattern, Sequence, Tuple, Union, cast, TYPE_CHECKING, overload) + Optional, Pattern, Sequence, Tuple, TypeVar, Union, cast, TYPE_CHECKING, overload) import pathlib @@ -920,7 +920,10 @@ def _obtain_lock(self) -> None: # END endless loop -class IterableList(list): +T = TypeVar('T', bound='IterableObj') + + +class IterableList(List[T]): """ List of iterable objects allowing to query an object by id or by named index:: @@ -930,6 +933,9 @@ class IterableList(list): heads['master'] heads[0] + Iterable parent objects = [Commit, SubModule, Reference, FetchInfo, PushInfo] + Iterable via inheritance = [Head, TagReference, RemoteReference] + ] It requires an id_attribute name to be set which will be queried from its contained items to have a means for comparison. @@ -938,7 +944,7 @@ class IterableList(list): can be left out.""" __slots__ = ('_id_attr', '_prefix') - def __new__(cls, id_attr: str, prefix: str = '') -> 'IterableList': + def __new__(cls, id_attr: str, prefix: str = '') -> 'IterableList[IterableObj]': return super(IterableList, cls).__new__(cls) def __init__(self, id_attr: str, prefix: str = '') -> None: @@ -1015,7 +1021,7 @@ class Iterable(object): _id_attribute_ = "attribute that most suitably identifies your instance" @classmethod - def list_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> 'IterableList': + def list_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> IterableList['IterableObj']: """ Find all items of this type - subclasses can specify args and kwargs differently. If no args are given, subclasses are obliged to return all items if no additional @@ -1024,12 +1030,12 @@ def list_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> 'IterableList': :note: Favor the iter_items method as it will :return:list(Item,...) list of item instances""" - out_list = IterableList(cls._id_attribute_) + out_list: IterableList = IterableList(cls._id_attribute_) out_list.extend(cls.iter_items(repo, *args, **kwargs)) return out_list @classmethod - def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> Iterator[TBD]: + def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> Iterator: # return typed to be compatible with subtypes e.g. Remote """For more information about the arguments, see list_items :return: iterator yielding Items""" @@ -1038,6 +1044,10 @@ def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> Iterator[TBD]: #} END classes +class IterableObj(Iterable): + pass + + class NullHandler(logging.Handler): def emit(self, record: object) -> None: pass From 3cef949913659584dd980f3de363dd830392bb68 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 24 Jun 2021 15:32:25 +0100 Subject: [PATCH 0499/2375] Rename Iterable due to typing.Iterable. Add deprecation warning --- git/util.py | 44 +++++++++++++++++++++++++++++++++++++++----- t.py | 19 +++++++++++++++++++ 2 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 t.py diff --git a/git/util.py b/git/util.py index 5f184b7a2..f72cd355a 100644 --- a/git/util.py +++ b/git/util.py @@ -18,6 +18,7 @@ import time from unittest import SkipTest from urllib.parse import urlsplit, urlunsplit +import warnings # typing --------------------------------------------------------- @@ -1013,15 +1014,52 @@ def __delitem__(self, index: Union[SupportsIndex, int, slice, str]) -> Any: list.__delitem__(self, delindex) +class IterableClassWatcher(type): + def __init__(cls, name, bases, clsdict): + for base in bases: + if type(base) == cls: + warnings.warn("GitPython Iterable is deprecated due to naming clash. Use IterableObj instead", + DeprecationWarning) + super(IterableClassWatcher, cls).__init__(name, bases, clsdict) + + class Iterable(object): """Defines an interface for iterable items which is to assure a uniform way to retrieve and iterate items within the git repository""" __slots__ = () _id_attribute_ = "attribute that most suitably identifies your instance" + __metaclass__ = IterableClassWatcher @classmethod - def list_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> IterableList['IterableObj']: + def list_items(cls, repo, *args, **kwargs): + """ + Find all items of this type - subclasses can specify args and kwargs differently. + If no args are given, subclasses are obliged to return all items if no additional + arguments arg given. + + :note: Favor the iter_items method as it will + :return:list(Item,...) list of item instances""" + out_list = IterableList(cls._id_attribute_) + out_list.extend(cls.iter_items(repo, *args, **kwargs)) + return out_list + + @classmethod + def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any): + # return typed to be compatible with subtypes e.g. Remote + """For more information about the arguments, see list_items + :return: iterator yielding Items""" + raise NotImplementedError("To be implemented by Subclass") + + +class IterableObj(): + """Defines an interface for iterable items which is to assure a uniform + way to retrieve and iterate items within the git repository""" + __slots__ = () + _id_attribute_ = "attribute that most suitably identifies your instance" + + @classmethod + def list_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> IterableList[T]: """ Find all items of this type - subclasses can specify args and kwargs differently. If no args are given, subclasses are obliged to return all items if no additional @@ -1044,10 +1082,6 @@ def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> Iterator: #} END classes -class IterableObj(Iterable): - pass - - class NullHandler(logging.Handler): def emit(self, record: object) -> None: pass diff --git a/t.py b/t.py new file mode 100644 index 000000000..05d59c0cf --- /dev/null +++ b/t.py @@ -0,0 +1,19 @@ +class Watcher(type): + def __init__(cls, name, bases, clsdict): + [print("ooooo") for base in bases if issubclass(base, name)] + super(Watcher, cls).__init__(name, bases, clsdict) + + +class SuperClass(metaclass=Watcher): + pass + + +class SubClass0(SuperClass): + pass + + +class SubClass1(SuperClass): + print("test") + +class normo(): + print("wooo") From ae9d56e0fdd4df335a9def66aa2ac96459ed6e5c Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 24 Jun 2021 16:05:03 +0100 Subject: [PATCH 0500/2375] Make Iterable deprecation warning on subclassing --- git/util.py | 10 ++++++---- t.py | 13 +++++++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/git/util.py b/git/util.py index f72cd355a..78a60c9ae 100644 --- a/git/util.py +++ b/git/util.py @@ -1017,10 +1017,12 @@ def __delitem__(self, index: Union[SupportsIndex, int, slice, str]) -> Any: class IterableClassWatcher(type): def __init__(cls, name, bases, clsdict): for base in bases: - if type(base) == cls: - warnings.warn("GitPython Iterable is deprecated due to naming clash. Use IterableObj instead", - DeprecationWarning) - super(IterableClassWatcher, cls).__init__(name, bases, clsdict) + if type(base) == IterableClassWatcher: + warnings.warn(f"GitPython Iterable subclassed by {name}. " + "Iterable is deprecated due to naming clash, " + "Use IterableObj instead \n", + DeprecationWarning, + stacklevel=2) class Iterable(object): diff --git a/t.py b/t.py index 05d59c0cf..215c26674 100644 --- a/t.py +++ b/t.py @@ -1,7 +1,15 @@ +import warnings + + class Watcher(type): def __init__(cls, name, bases, clsdict): - [print("ooooo") for base in bases if issubclass(base, name)] - super(Watcher, cls).__init__(name, bases, clsdict) + for base in bases: + if type(base) == Watcher: + warnings.warn(f"GitPython Iterable subclassed by {name}. " + "Iterable is deprecated due to naming clash, " + "Use IterableObj instead \n", + DeprecationWarning, + stacklevel=2) class SuperClass(metaclass=Watcher): @@ -15,5 +23,6 @@ class SubClass0(SuperClass): class SubClass1(SuperClass): print("test") + class normo(): print("wooo") From 8bf00a6719804c2fc5cca280e9dae6774acc1237 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 24 Jun 2021 16:16:32 +0100 Subject: [PATCH 0501/2375] fix an import --- git/objects/submodule/base.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 57396a467..ce0f944e0 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -31,7 +31,8 @@ to_native_path_linux, RemoteProgress, rmtree, - unbare_repo + unbare_repo, + IterableList ) from git.util import HIDE_WINDOWS_KNOWN_ERRORS @@ -48,10 +49,6 @@ # typing ---------------------------------------------------------------------- -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from git.util import IterableList # ----------------------------------------------------------------------------- From 26dfeb66be61e9a2a9087bdecc98d255c0306079 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 24 Jun 2021 16:23:15 +0100 Subject: [PATCH 0502/2375] fix indent --- git/objects/util.py | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index a565cf42f..71137264a 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -284,28 +284,6 @@ class Traversable(object): """ __slots__ = () - """ - @overload - @classmethod - def _get_intermediate_items(cls, item: 'Commit') -> Tuple['Commit', ...]: - ... - - @overload - @classmethod - def _get_intermediate_items(cls, item: 'Submodule') -> Tuple['Submodule', ...]: - ... - - @overload - @classmethod - def _get_intermediate_items(cls, item: 'Tree') -> Tuple['Tree', ...]: - ... - - @overload - @classmethod - def _get_intermediate_items(cls, item: 'Traversable') -> Tuple['Traversable', ...]: - ... - """ - @classmethod def _get_intermediate_items(cls, item): """ From 4f5d2fd68e784c2b2fd914a196c66960c7f48b49 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 24 Jun 2021 16:30:32 +0100 Subject: [PATCH 0503/2375] update docstring --- git/util.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/git/util.py b/git/util.py index 78a60c9ae..79952be56 100644 --- a/git/util.py +++ b/git/util.py @@ -1036,11 +1036,13 @@ class Iterable(object): @classmethod def list_items(cls, repo, *args, **kwargs): """ + Deprecaated, use IterableObj instead. Find all items of this type - subclasses can specify args and kwargs differently. If no args are given, subclasses are obliged to return all items if no additional arguments arg given. :note: Favor the iter_items method as it will + :return:list(Item,...) list of item instances""" out_list = IterableList(cls._id_attribute_) out_list.extend(cls.iter_items(repo, *args, **kwargs)) From d9f9027779931c3cdb04d570df5f01596539791b Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 24 Jun 2021 17:09:51 +0100 Subject: [PATCH 0504/2375] update some TBDs to configparser --- git/objects/submodule/base.py | 2 +- git/util.py | 35 ++++++++++++++++++++++------------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index ce0f944e0..cbf6cd0db 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -1158,7 +1158,7 @@ def name(self): """ return self._name - def config_reader(self): + def config_reader(self) -> SectionConstraint: """ :return: ConfigReader instance which allows you to qurey the configuration values of this submodule, as provided by the .gitmodules file diff --git a/git/util.py b/git/util.py index 79952be56..245f45d1f 100644 --- a/git/util.py +++ b/git/util.py @@ -30,6 +30,8 @@ if TYPE_CHECKING: from git.remote import Remote from git.repo.base import Repo + from git.config import GitConfigParser, SectionConstraint + from .types import PathLike, TBD, Literal, SupportsIndex # --------------------------------------------------------------------- @@ -82,7 +84,7 @@ def unbare_repo(func: Callable) -> Callable: encounter a bare repository""" @wraps(func) - def wrapper(self: 'Remote', *args: Any, **kwargs: Any) -> TBD: + def wrapper(self: 'Remote', *args: Any, **kwargs: Any) -> Callable: if self.repo.bare: raise InvalidGitRepositoryError("Method '%s' cannot operate on bare repositories" % func.__name__) # END bare method @@ -108,7 +110,7 @@ def rmtree(path: PathLike) -> None: :note: we use shutil rmtree but adjust its behaviour to see whether files that couldn't be deleted are read-only. Windows will not remove them in that case""" - def onerror(func: Callable, path: PathLike, exc_info: TBD) -> None: + def onerror(func: Callable, path: PathLike, exc_info: str) -> None: # Is the error an access error ? os.chmod(path, stat.S_IWUSR) @@ -448,7 +450,7 @@ class RemoteProgress(object): re_op_relative = re.compile(r"(remote: )?([\w\s]+):\s+(\d+)% \((\d+)/(\d+)\)(.*)") def __init__(self) -> None: - self._seen_ops = [] # type: List[TBD] + self._seen_ops = [] # type: List[int] self._cur_line = None # type: Optional[str] self.error_lines = [] # type: List[str] self.other_lines = [] # type: List[str] @@ -669,7 +671,8 @@ def _from_string(cls, string: str) -> 'Actor': # END handle name/email matching @classmethod - def _main_actor(cls, env_name: str, env_email: str, config_reader: Optional[TBD] = None) -> 'Actor': + def _main_actor(cls, env_name: str, env_email: str, + config_reader: Union[None, GitConfigParser, SectionConstraint] = None) -> 'Actor': actor = Actor('', '') user_id = None # We use this to avoid multiple calls to getpass.getuser() @@ -698,7 +701,7 @@ def default_name() -> str: return actor @classmethod - def committer(cls, config_reader: Optional[TBD] = None) -> 'Actor': + def committer(cls, config_reader: Union[None, GitConfigParser, SectionConstraint] = None) -> 'Actor': """ :return: Actor instance corresponding to the configured committer. It behaves similar to the git implementation, such that the environment will override @@ -709,7 +712,7 @@ def committer(cls, config_reader: Optional[TBD] = None) -> 'Actor': return cls._main_actor(cls.env_committer_name, cls.env_committer_email, config_reader) @classmethod - def author(cls, config_reader: Optional[TBD] = None) -> 'Actor': + def author(cls, config_reader: Union[None, GitConfigParser, SectionConstraint] = None) -> 'Actor': """Same as committer(), but defines the main author. It may be specified in the environment, but defaults to the committer""" return cls._main_actor(cls.env_author_name, cls.env_author_email, config_reader) @@ -752,9 +755,14 @@ def _list_from_string(cls, repo: 'Repo', text: str) -> 'Stats': """Create a Stat object from output retrieved by git-diff. :return: git.Stat""" - hsh = {'total': {'insertions': 0, 'deletions': 0, 'lines': 0, 'files': 0}, - 'files': {} - } # type: Dict[str, Dict[str, TBD]] ## need typeddict or refactor for mypy + + # hsh: Dict[str, Dict[str, Union[int, Dict[str, int]]]] + hsh: Dict[str, Dict[str, TBD]] = {'total': {'insertions': 0, + 'deletions': 0, + 'lines': 0, + 'files': 0}, + 'files': {} + } # need typeddict? for line in text.splitlines(): (raw_insertions, raw_deletions, filename) = line.split("\t") insertions = raw_insertions != '-' and int(raw_insertions) or 0 @@ -763,9 +771,10 @@ def _list_from_string(cls, repo: 'Repo', text: str) -> 'Stats': hsh['total']['deletions'] += deletions hsh['total']['lines'] += insertions + deletions hsh['total']['files'] += 1 - hsh['files'][filename.strip()] = {'insertions': insertions, - 'deletions': deletions, - 'lines': insertions + deletions} + files_dict = {'insertions': insertions, + 'deletions': deletions, + 'lines': insertions + deletions} + hsh['files'][filename.strip()] = files_dict return Stats(hsh['total'], hsh['files']) @@ -1077,7 +1086,7 @@ def list_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> IterableList[T]: return out_list @classmethod - def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> Iterator: + def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> Iterator[T]: # return typed to be compatible with subtypes e.g. Remote """For more information about the arguments, see list_items :return: iterator yielding Items""" From affee359af09cf7971676263f59118de82e7e059 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 24 Jun 2021 17:35:22 +0100 Subject: [PATCH 0505/2375] Add typedDict --- git/types.py | 24 +++++++++++++++++++++--- git/util.py | 25 +++++++++++++------------ t.py | 28 ---------------------------- 3 files changed, 34 insertions(+), 43 deletions(-) delete mode 100644 t.py diff --git a/git/types.py b/git/types.py index a410cb366..8c431e53e 100644 --- a/git/types.py +++ b/git/types.py @@ -4,12 +4,12 @@ import os import sys -from typing import Union, Any +from typing import Dict, Union, Any if sys.version_info[:2] >= (3, 8): - from typing import Final, Literal, SupportsIndex # noqa: F401 + from typing import Final, Literal, SupportsIndex, TypedDict # noqa: F401 else: - from typing_extensions import Final, Literal, SupportsIndex # noqa: F401 + from typing_extensions import Final, Literal, SupportsIndex, TypedDict # noqa: F401 if sys.version_info[:2] < (3, 9): @@ -22,3 +22,21 @@ TBD = Any Lit_config_levels = Literal['system', 'global', 'user', 'repository'] + + +class Files_TD(TypedDict): + insertions: int + deletions: int + lines: int + + +class Total_TD(TypedDict): + insertions: int + deletions: int + lines: int + files: int + + +class HSH_TD(TypedDict): + total: Total_TD + files: Dict[str, Files_TD] diff --git a/git/util.py b/git/util.py index 245f45d1f..0783918d1 100644 --- a/git/util.py +++ b/git/util.py @@ -32,7 +32,7 @@ from git.repo.base import Repo from git.config import GitConfigParser, SectionConstraint -from .types import PathLike, TBD, Literal, SupportsIndex +from .types import PathLike, Literal, SupportsIndex, HSH_TD, Files_TD # --------------------------------------------------------------------- @@ -746,7 +746,9 @@ class Stats(object): files = number of changed files as int""" __slots__ = ("total", "files") - def __init__(self, total: Dict[str, Dict[str, int]], files: Dict[str, Dict[str, int]]): + from git.types import Total_TD, Files_TD + + def __init__(self, total: Total_TD, files: Dict[str, Files_TD]): self.total = total self.files = files @@ -756,13 +758,12 @@ def _list_from_string(cls, repo: 'Repo', text: str) -> 'Stats': :return: git.Stat""" - # hsh: Dict[str, Dict[str, Union[int, Dict[str, int]]]] - hsh: Dict[str, Dict[str, TBD]] = {'total': {'insertions': 0, - 'deletions': 0, - 'lines': 0, - 'files': 0}, - 'files': {} - } # need typeddict? + hsh: HSH_TD = {'total': {'insertions': 0, + 'deletions': 0, + 'lines': 0, + 'files': 0}, + 'files': {} + } for line in text.splitlines(): (raw_insertions, raw_deletions, filename) = line.split("\t") insertions = raw_insertions != '-' and int(raw_insertions) or 0 @@ -771,9 +772,9 @@ def _list_from_string(cls, repo: 'Repo', text: str) -> 'Stats': hsh['total']['deletions'] += deletions hsh['total']['lines'] += insertions + deletions hsh['total']['files'] += 1 - files_dict = {'insertions': insertions, - 'deletions': deletions, - 'lines': insertions + deletions} + files_dict: Files_TD = {'insertions': insertions, + 'deletions': deletions, + 'lines': insertions + deletions} hsh['files'][filename.strip()] = files_dict return Stats(hsh['total'], hsh['files']) diff --git a/t.py b/t.py deleted file mode 100644 index 215c26674..000000000 --- a/t.py +++ /dev/null @@ -1,28 +0,0 @@ -import warnings - - -class Watcher(type): - def __init__(cls, name, bases, clsdict): - for base in bases: - if type(base) == Watcher: - warnings.warn(f"GitPython Iterable subclassed by {name}. " - "Iterable is deprecated due to naming clash, " - "Use IterableObj instead \n", - DeprecationWarning, - stacklevel=2) - - -class SuperClass(metaclass=Watcher): - pass - - -class SubClass0(SuperClass): - pass - - -class SubClass1(SuperClass): - print("test") - - -class normo(): - print("wooo") From fe594eb345fbefaee3b82436183d6560991724cc Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 24 Jun 2021 23:14:13 +0100 Subject: [PATCH 0506/2375] Add T_Tre_cache TypeVar --- git/objects/tree.py | 32 ++++++++++++++++++-------------- git/types.py | 2 +- git/util.py | 6 +++--- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/git/objects/tree.py b/git/objects/tree.py index ec7d8e885..97a4b7485 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -20,7 +20,7 @@ # typing ------------------------------------------------- -from typing import Callable, Dict, Iterable, Iterator, List, Tuple, Type, Union, cast, TYPE_CHECKING +from typing import Callable, Dict, Generic, Iterable, Iterator, List, Tuple, Type, TypeVar, Union, cast, TYPE_CHECKING from git.types import PathLike @@ -31,13 +31,16 @@ #-------------------------------------------------------- -cmp: Callable[[int, int], int] = lambda a, b: (a > b) - (a < b) +cmp: Callable[[str, str], int] = lambda a, b: (a > b) - (a < b) __all__ = ("TreeModifier", "Tree") +T_Tree_cache = TypeVar('T_Tree_cache', bound=Union[Tuple[bytes, int, str]]) -def git_cmp(t1: 'Tree', t2: 'Tree') -> int: + +def git_cmp(t1: T_Tree_cache, t2: T_Tree_cache) -> int: a, b = t1[2], t2[2] + assert isinstance(a, str) and isinstance(b, str) # Need as mypy 9.0 cannot unpack TypeVar properly len_a, len_b = len(a), len(b) min_len = min(len_a, len_b) min_cmp = cmp(a[:min_len], b[:min_len]) @@ -48,7 +51,8 @@ def git_cmp(t1: 'Tree', t2: 'Tree') -> int: return len_a - len_b -def merge_sort(a: List[int], cmp: Callable[[int, int], int]) -> None: +def merge_sort(a: List[T_Tree_cache], + cmp: Callable[[T_Tree_cache, T_Tree_cache], int]) -> None: if len(a) < 2: return None @@ -83,7 +87,7 @@ def merge_sort(a: List[int], cmp: Callable[[int, int], int]) -> None: k = k + 1 -class TreeModifier(object): +class TreeModifier(Generic[T_Tree_cache], object): """A utility class providing methods to alter the underlying cache in a list-like fashion. @@ -91,10 +95,10 @@ class TreeModifier(object): the cache of a tree, will be sorted. Assuring it will be in a serializable state""" __slots__ = '_cache' - def __init__(self, cache): + def __init__(self, cache: List[T_Tree_cache]) -> None: self._cache = cache - def _index_by_name(self, name): + def _index_by_name(self, name: str) -> int: """:return: index of an item with name, or -1 if not found""" for i, t in enumerate(self._cache): if t[2] == name: @@ -104,7 +108,7 @@ def _index_by_name(self, name): return -1 #{ Interface - def set_done(self): + def set_done(self) -> 'TreeModifier': """Call this method once you are done modifying the tree information. It may be called several times, but be aware that each call will cause a sort operation @@ -114,7 +118,7 @@ def set_done(self): #} END interface #{ Mutators - def add(self, sha, mode, name, force=False): + def add(self, sha: bytes, mode: int, name: str, force: bool = False) -> 'TreeModifier': """Add the given item to the tree. If an item with the given name already exists, nothing will be done, but a ValueError will be raised if the sha and mode of the existing item do not match the one you add, unless @@ -132,7 +136,7 @@ def add(self, sha, mode, name, force=False): sha = to_bin_sha(sha) index = self._index_by_name(name) - item = (sha, mode, name) + item: T_Tree_cache = (sha, mode, name) # type: ignore ## use Typeguard from typing-extensions 3.10.0 if index == -1: self._cache.append(item) else: @@ -195,7 +199,7 @@ class Tree(IndexObject, diff.Diffable, util.Traversable, util.Serializable): def __init__(self, repo: 'Repo', binsha: bytes, mode: int = tree_id << 12, path: Union[PathLike, None] = None): super(Tree, self).__init__(repo, binsha, mode, path) - @classmethod + @ classmethod def _get_intermediate_items(cls, index_object: 'Tree', # type: ignore ) -> Union[Tuple['Tree', ...], Tuple[()]]: if index_object.type == "tree": @@ -261,17 +265,17 @@ def __truediv__(self, file: str) -> Union['Tree', Blob, Submodule]: """For PY3 only""" return self.join(file) - @property + @ property def trees(self) -> List['Tree']: """:return: list(Tree, ...) list of trees directly below this tree""" return [i for i in self if i.type == "tree"] - @property + @ property def blobs(self) -> List['Blob']: """:return: list(Blob, ...) list of blobs directly below this tree""" return [i for i in self if i.type == "blob"] - @property + @ property def cache(self) -> TreeModifier: """ :return: An object allowing to modify the internal cache. This can be used diff --git a/git/types.py b/git/types.py index 8c431e53e..c01ea27e1 100644 --- a/git/types.py +++ b/git/types.py @@ -39,4 +39,4 @@ class Total_TD(TypedDict): class HSH_TD(TypedDict): total: Total_TD - files: Dict[str, Files_TD] + files: Dict[PathLike, Files_TD] diff --git a/git/util.py b/git/util.py index 0783918d1..bcc634ec1 100644 --- a/git/util.py +++ b/git/util.py @@ -672,7 +672,7 @@ def _from_string(cls, string: str) -> 'Actor': @classmethod def _main_actor(cls, env_name: str, env_email: str, - config_reader: Union[None, GitConfigParser, SectionConstraint] = None) -> 'Actor': + config_reader: Union[None, 'GitConfigParser', 'SectionConstraint'] = None) -> 'Actor': actor = Actor('', '') user_id = None # We use this to avoid multiple calls to getpass.getuser() @@ -701,7 +701,7 @@ def default_name() -> str: return actor @classmethod - def committer(cls, config_reader: Union[None, GitConfigParser, SectionConstraint] = None) -> 'Actor': + def committer(cls, config_reader: Union[None, 'GitConfigParser', 'SectionConstraint'] = None) -> 'Actor': """ :return: Actor instance corresponding to the configured committer. It behaves similar to the git implementation, such that the environment will override @@ -748,7 +748,7 @@ class Stats(object): from git.types import Total_TD, Files_TD - def __init__(self, total: Total_TD, files: Dict[str, Files_TD]): + def __init__(self, total: Total_TD, files: Dict[PathLike, Files_TD]): self.total = total self.files = files From 59c89441fb81b0f4549e4bf7ab01f4c27da54aad Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 24 Jun 2021 23:37:41 +0100 Subject: [PATCH 0507/2375] forward ref Gitconfigparser --- git/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/util.py b/git/util.py index bcc634ec1..eccaa74ed 100644 --- a/git/util.py +++ b/git/util.py @@ -712,7 +712,7 @@ def committer(cls, config_reader: Union[None, 'GitConfigParser', 'SectionConstra return cls._main_actor(cls.env_committer_name, cls.env_committer_email, config_reader) @classmethod - def author(cls, config_reader: Union[None, GitConfigParser, SectionConstraint] = None) -> 'Actor': + def author(cls, config_reader: Union[None, 'GitConfigParser', 'SectionConstraint'] = None) -> 'Actor': """Same as committer(), but defines the main author. It may be specified in the environment, but defaults to the committer""" return cls._main_actor(cls.env_author_name, cls.env_author_email, config_reader) From b72118e231c7bc42f457e2b02e0f90e8f87a5794 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 24 Jun 2021 23:45:14 +0100 Subject: [PATCH 0508/2375] Import TypeGuard to replace casts --- git/types.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/git/types.py b/git/types.py index c01ea27e1..e3b49170d 100644 --- a/git/types.py +++ b/git/types.py @@ -11,6 +11,11 @@ else: from typing_extensions import Final, Literal, SupportsIndex, TypedDict # noqa: F401 +if sys.version_info[:2] >= (3, 10): + from typing import TypeGuard # noqa: F401 +else: + from typing_extensions import TypeGuard # noqa: F401 + if sys.version_info[:2] < (3, 9): # Python >= 3.6, < 3.9 From fb3fec340f89955a4b0adfd64636d26300d22af9 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 24 Jun 2021 23:56:29 +0100 Subject: [PATCH 0509/2375] Update typing-extensions dependancy to =4.0.1,<5 -typing-extensions>=3.7.4.3;python_version<"3.8" +typing-extensions>=3.7.4.3;python_version<"3.10" diff --git a/test-requirements.txt b/test-requirements.txt index 16dc0d2c1..ab3f86109 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -5,4 +5,4 @@ tox virtualenv nose gitdb>=4.0.1,<5 -typing-extensions>=3.7.4.3;python_version<"3.8" +typing-extensions>=3.7.4.3;python_version<"3.10" From a2d9011c05b0e27f1324f393e65954542544250d Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 25 Jun 2021 00:06:15 +0100 Subject: [PATCH 0510/2375] Add asserts and casts for T_Tree_cache --- git/objects/tree.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/git/objects/tree.py b/git/objects/tree.py index 97a4b7485..191fe27c3 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -136,7 +136,9 @@ def add(self, sha: bytes, mode: int, name: str, force: bool = False) -> 'TreeMod sha = to_bin_sha(sha) index = self._index_by_name(name) - item: T_Tree_cache = (sha, mode, name) # type: ignore ## use Typeguard from typing-extensions 3.10.0 + + assert isinstance(sha, bytes) and isinstance(mode, int) and isinstance(name, str) + item = cast(T_Tree_cache, (sha, mode, name)) # use Typeguard from typing-extensions 3.10.0 if index == -1: self._cache.append(item) else: @@ -151,14 +153,17 @@ def add(self, sha: bytes, mode: int, name: str, force: bool = False) -> 'TreeMod # END handle name exists return self - def add_unchecked(self, binsha, mode, name): + def add_unchecked(self, binsha: bytes, mode: int, name: str) -> None: """Add the given item to the tree, its correctness is assumed, which puts the caller into responsibility to assure the input is correct. For more information on the parameters, see ``add`` :param binsha: 20 byte binary sha""" - self._cache.append((binsha, mode, name)) + assert isinstance(binsha, bytes) and isinstance(mode, int) and isinstance(name, str) + tree_cache = cast(T_Tree_cache, (binsha, mode, name)) + + self._cache.append(tree_cache) - def __delitem__(self, name): + def __delitem__(self, name: str) -> None: """Deletes an item with the given name if it exists""" index = self._index_by_name(name) if index > -1: From 0eae33d324376a0a1800e51bddf7f23a343f45a1 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 25 Jun 2021 20:21:59 +0100 Subject: [PATCH 0511/2375] Add is_flatLiteral() Typeguard[] to remote.py --- git/remote.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/git/remote.py b/git/remote.py index a85297c17..2bf64150f 100644 --- a/git/remote.py +++ b/git/remote.py @@ -38,7 +38,7 @@ from typing import Any, Callable, Dict, Iterator, List, Optional, Sequence, TYPE_CHECKING, Union, cast, overload -from git.types import PathLike, Literal, TBD +from git.types import PathLike, Literal, TBD, TypeGuard if TYPE_CHECKING: from git.repo.base import Repo @@ -48,8 +48,15 @@ from git.objects.tag import TagObject flagKeyLiteral = Literal[' ', '!', '+', '-', '*', '=', 't'] + + +def is_flagKeyLiteral(inp: str) -> TypeGuard[flagKeyLiteral]: + return inp in [' ', '!', '+', '-', '=', '*', 't'] + + # ------------------------------------------------------------- + log = logging.getLogger('git.remote') log.addHandler(logging.NullHandler()) @@ -325,7 +332,7 @@ def _from_line(cls, repo: 'Repo', line: str, fetch_line: str) -> 'FetchInfo': # parse lines control_character, operation, local_remote_ref, remote_local_ref_str, note = match.groups() - control_character = cast(flagKeyLiteral, control_character) # can do this neater once 3.5 dropped + assert is_flagKeyLiteral(control_character) try: _new_hex_sha, _fetch_operation, fetch_note = fetch_line.split("\t") From 5b0465c9bcca64c3a863a95735cc5e602946facb Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 25 Jun 2021 20:27:22 +0100 Subject: [PATCH 0512/2375] fix assert --- git/remote.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/remote.py b/git/remote.py index 2bf64150f..748dcbbd3 100644 --- a/git/remote.py +++ b/git/remote.py @@ -332,7 +332,7 @@ def _from_line(cls, repo: 'Repo', line: str, fetch_line: str) -> 'FetchInfo': # parse lines control_character, operation, local_remote_ref, remote_local_ref_str, note = match.groups() - assert is_flagKeyLiteral(control_character) + assert is_flagKeyLiteral(control_character), f"{control_character}" try: _new_hex_sha, _fetch_operation, fetch_note = fetch_line.split("\t") From dc8d23d3d6e735d70fd0a60641c58f6e44e17029 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 25 Jun 2021 20:30:44 +0100 Subject: [PATCH 0513/2375] Add '?' to controlcharacter literal --- git/remote.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/remote.py b/git/remote.py index 748dcbbd3..e6daffe0c 100644 --- a/git/remote.py +++ b/git/remote.py @@ -47,11 +47,11 @@ from git.objects.tree import Tree from git.objects.tag import TagObject -flagKeyLiteral = Literal[' ', '!', '+', '-', '*', '=', 't'] +flagKeyLiteral = Literal[' ', '!', '+', '-', '*', '=', 't', '?'] def is_flagKeyLiteral(inp: str) -> TypeGuard[flagKeyLiteral]: - return inp in [' ', '!', '+', '-', '=', '*', 't'] + return inp in [' ', '!', '+', '-', '=', '*', 't', '?'] # ------------------------------------------------------------- From 7b09003fffa8196277bcfaa9984a3e6833805a6d Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 25 Jun 2021 20:52:29 +0100 Subject: [PATCH 0514/2375] replace cast()s with asserts in remote.py --- git/refs/log.py | 12 ++++++------ git/remote.py | 12 +++++++----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/git/refs/log.py b/git/refs/log.py index 363c3c5d5..f850ba24c 100644 --- a/git/refs/log.py +++ b/git/refs/log.py @@ -82,23 +82,23 @@ def new(cls, oldhexsha, newhexsha, actor, time, tz_offset, message): # skipcq: return RefLogEntry((oldhexsha, newhexsha, actor, (time, tz_offset), message)) @classmethod - def from_line(cls, line): + def from_line(cls, line: bytes) -> 'RefLogEntry': """:return: New RefLogEntry instance from the given revlog line. :param line: line bytes without trailing newline :raise ValueError: If line could not be parsed""" - line = line.decode(defenc) - fields = line.split('\t', 1) + line_str = line.decode(defenc) + fields = line_str.split('\t', 1) if len(fields) == 1: info, msg = fields[0], None elif len(fields) == 2: info, msg = fields else: raise ValueError("Line must have up to two TAB-separated fields." - " Got %s" % repr(line)) + " Got %s" % repr(line_str)) # END handle first split - oldhexsha = info[:40] # type: str - newhexsha = info[41:81] # type: str + oldhexsha = info[:40] + newhexsha = info[41:81] for hexsha in (oldhexsha, newhexsha): if not cls._re_hexsha_only.match(hexsha): raise ValueError("Invalid hexsha: %r" % (hexsha,)) diff --git a/git/remote.py b/git/remote.py index e6daffe0c..a6232db32 100644 --- a/git/remote.py +++ b/git/remote.py @@ -36,7 +36,7 @@ # typing------------------------------------------------------- -from typing import Any, Callable, Dict, Iterator, List, Optional, Sequence, TYPE_CHECKING, Union, cast, overload +from typing import Any, Callable, Dict, Iterator, List, Optional, Sequence, TYPE_CHECKING, Union, overload from git.types import PathLike, Literal, TBD, TypeGuard @@ -559,8 +559,8 @@ def delete_url(self, url: str, **kwargs: Any) -> 'Remote': def urls(self) -> Iterator[str]: """:return: Iterator yielding all configured URL targets on a remote as strings""" try: - # can replace cast with type assert? - remote_details = cast(str, self.repo.git.remote("get-url", "--all", self.name)) + remote_details = self.repo.git.remote("get-url", "--all", self.name) + assert isinstance(remote_details, str) for line in remote_details.split('\n'): yield line except GitCommandError as ex: @@ -571,14 +571,16 @@ def urls(self) -> Iterator[str]: # if 'Unknown subcommand: get-url' in str(ex): try: - remote_details = cast(str, self.repo.git.remote("show", self.name)) + remote_details = self.repo.git.remote("show", self.name) + assert isinstance(remote_details, str) for line in remote_details.split('\n'): if ' Push URL:' in line: yield line.split(': ')[-1] except GitCommandError as _ex: if any(msg in str(_ex) for msg in ['correct access rights', 'cannot run ssh']): # If ssh is not setup to access this repository, see issue 694 - remote_details = cast(str, self.repo.git.config('--get-all', 'remote.%s.url' % self.name)) + remote_details = self.repo.git.config('--get-all', 'remote.%s.url' % self.name) + assert isinstance(remote_details, str) for line in remote_details.split('\n'): yield line else: From aba4d9b4029373d2bccc961a23134454072936ce Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 25 Jun 2021 21:03:17 +0100 Subject: [PATCH 0515/2375] replace cast()s with asserts in fun.py --- git/index/fun.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/git/index/fun.py b/git/index/fun.py index 10a440501..ffd109b1f 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -53,7 +53,7 @@ from typing import (Dict, IO, List, Sequence, TYPE_CHECKING, Tuple, Type, Union, cast) -from git.types import PathLike +from git.types import PathLike, TypeGuard if TYPE_CHECKING: from .base import IndexFile @@ -185,11 +185,17 @@ def read_header(stream: IO[bytes]) -> Tuple[int, int]: def entry_key(*entry: Union[BaseIndexEntry, PathLike, int]) -> Tuple[PathLike, int]: """:return: Key suitable to be used for the index.entries dictionary :param entry: One instance of type BaseIndexEntry or the path and the stage""" + + def is_entry_tuple(entry: Tuple) -> TypeGuard[Tuple[PathLike, int]]: + return isinstance(entry, tuple) and len(entry) == 2 + if len(entry) == 1: - entry_first = cast(BaseIndexEntry, entry[0]) # type: BaseIndexEntry + entry_first = entry[0] + assert isinstance(entry_first, BaseIndexEntry) return (entry_first.path, entry_first.stage) else: - entry = cast(Tuple[PathLike, int], tuple(entry)) + # entry = tuple(entry) + assert is_entry_tuple(entry) return entry # END handle entry From 07bfe1a60ae93d8b40c9aa01a3775f334d680daa Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 25 Jun 2021 21:23:03 +0100 Subject: [PATCH 0516/2375] trigger checks to rurun --- git/objects/submodule/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/objects/submodule/util.py b/git/objects/submodule/util.py index 0b4ce3c53..045fb47d6 100644 --- a/git/objects/submodule/util.py +++ b/git/objects/submodule/util.py @@ -65,7 +65,7 @@ def set_submodule(self, submodule): the first write operation begins""" self._smref = weakref.ref(submodule) - def flush_to_index(self): + def flush_to_index(self) -> None: """Flush changes in our configuration file to the index""" assert self._smref is not None # should always have a file here From 09fb2274db09e44bf3bc14da482ffa9a98659c54 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 25 Jun 2021 21:29:55 +0100 Subject: [PATCH 0517/2375] Add type to submodule to trigger checks to rurun --- git/objects/submodule/util.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/git/objects/submodule/util.py b/git/objects/submodule/util.py index 045fb47d6..b4796b300 100644 --- a/git/objects/submodule/util.py +++ b/git/objects/submodule/util.py @@ -4,6 +4,11 @@ from io import BytesIO import weakref +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from .base import Submodule + __all__ = ('sm_section', 'sm_name', 'mkhead', 'find_first_remote_branch', 'SubmoduleConfigParser') @@ -60,7 +65,7 @@ def __init__(self, *args, **kwargs): super(SubmoduleConfigParser, self).__init__(*args, **kwargs) #{ Interface - def set_submodule(self, submodule): + def set_submodule(self, submodule: 'Submodule') -> None: """Set this instance's submodule. It must be called before the first write operation begins""" self._smref = weakref.ref(submodule) From eff48b8ba25a0ea36a7286aa16d8888315eb1205 Mon Sep 17 00:00:00 2001 From: Dominic Date: Fri, 25 Jun 2021 21:38:42 +0100 Subject: [PATCH 0518/2375] Import typevar in util.py --- git/objects/util.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/git/objects/util.py b/git/objects/util.py index 71137264a..7736a0b23 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -19,7 +19,7 @@ from datetime import datetime, timedelta, tzinfo # typing ------------------------------------------------------------ -from typing import (Any, Callable, Deque, Iterator, TYPE_CHECKING, Tuple, Type, Union, cast) +from typing import (Any, Callable, Deque, Iterator, typevar, TYPE_CHECKING, Tuple, Type, Union, cast) if TYPE_CHECKING: from io import BytesIO, StringIO @@ -29,6 +29,8 @@ from .tag import TagObject from .tree import Tree from subprocess import Popen + +T_Iterableobj = typevar('T_Iterableobj', bound=T_Iterableobj) # -------------------------------------------------------------------- From 17c750a0803ae222f1cdaf3d6282a7e1b2046adb Mon Sep 17 00:00:00 2001 From: Dominic Date: Fri, 25 Jun 2021 21:40:41 +0100 Subject: [PATCH 0519/2375] flake8 fix --- git/objects/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/objects/util.py b/git/objects/util.py index 7736a0b23..79bf73aea 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -30,7 +30,7 @@ from .tree import Tree from subprocess import Popen -T_Iterableobj = typevar('T_Iterableobj', bound=T_Iterableobj) +T_Iterableobj = typevar('T_Iterableobj') # -------------------------------------------------------------------- From ff56dbbfceef2211087aed2619b7da2e42f235e4 Mon Sep 17 00:00:00 2001 From: Dominic Date: Fri, 25 Jun 2021 21:43:10 +0100 Subject: [PATCH 0520/2375] fix typo --- git/objects/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/objects/util.py b/git/objects/util.py index 79bf73aea..4609a80b1 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -19,7 +19,7 @@ from datetime import datetime, timedelta, tzinfo # typing ------------------------------------------------------------ -from typing import (Any, Callable, Deque, Iterator, typevar, TYPE_CHECKING, Tuple, Type, Union, cast) +from typing import (Any, Callable, Deque, Iterator, TypeVar, TYPE_CHECKING, Tuple, Type, Union, cast) if TYPE_CHECKING: from io import BytesIO, StringIO From 5d7b8ba9f2e9298496232e4ae66bd904a1d71001 Mon Sep 17 00:00:00 2001 From: Dominic Date: Fri, 25 Jun 2021 21:44:54 +0100 Subject: [PATCH 0521/2375] another typo --- git/objects/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/objects/util.py b/git/objects/util.py index 4609a80b1..8b8148a9f 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -30,7 +30,7 @@ from .tree import Tree from subprocess import Popen -T_Iterableobj = typevar('T_Iterableobj') +T_Iterableobj = TypeVar('T_Iterableobj') # -------------------------------------------------------------------- From ba5717549b32f6b5cee304fdff87cb26b3be688a Mon Sep 17 00:00:00 2001 From: Igor Lakhtenkov Date: Wed, 30 Jun 2021 12:33:33 +0300 Subject: [PATCH 0522/2375] Added clone multi_options to Submodule --- git/objects/submodule/base.py | 14 ++++++-- test/test_submodule.py | 66 +++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 3 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index cbf6cd0db..f0b8babca 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -316,7 +316,8 @@ def _write_git_file_and_module_config(cls, working_tree_dir, module_abspath): #{ Edit Interface @classmethod - def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=None, env=None): + def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=None, env=None, + clone_multi_options=None): """Add a new submodule to the given repository. This will alter the index as well as the .gitmodules file, but will not create a new commit. If the submodule already exists, no matter if the configuration differs @@ -349,6 +350,8 @@ def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=N and is defined in `os.environ`, value from `os.environ` will be used. If you want to unset some variable, consider providing empty string as its value. + :param clone_multi_options: A list of Clone options. Please see ``git.repo.base.Repo.clone`` + for details. :return: The newly created submodule instance :note: works atomically, such that no change will be done if the repository update fails for instance""" @@ -415,6 +418,8 @@ def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=N kwargs['depth'] = depth else: raise ValueError("depth should be an integer") + if clone_multi_options: + kwargs['multi_options'] = clone_multi_options # _clone_repo(cls, repo, url, path, name, **kwargs): mrepo = cls._clone_repo(repo, url, path, name, env=env, **kwargs) @@ -449,7 +454,7 @@ def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=N return sm def update(self, recursive=False, init=True, to_latest_revision=False, progress=None, dry_run=False, - force=False, keep_going=False, env=None): + force=False, keep_going=False, env=None, clone_multi_options=None): """Update the repository of this submodule to point to the checkout we point at with the binsha of this instance. @@ -480,6 +485,8 @@ def update(self, recursive=False, init=True, to_latest_revision=False, progress= and is defined in `os.environ`, value from `os.environ` will be used. If you want to unset some variable, consider providing empty string as its value. + :param clone_multi_options: list of Clone options. Please see ``git.repo.base.Repo.clone`` + for details. Only take effect with `init` option. :note: does nothing in bare repositories :note: method is definitely not atomic if recurisve is True :return: self""" @@ -546,7 +553,8 @@ def update(self, recursive=False, init=True, to_latest_revision=False, progress= progress.update(BEGIN | CLONE, 0, 1, prefix + "Cloning url '%s' to '%s' in submodule %r" % (self.url, checkout_module_abspath, self.name)) if not dry_run: - mrepo = self._clone_repo(self.repo, self.url, self.path, self.name, n=True, env=env) + mrepo = self._clone_repo(self.repo, self.url, self.path, self.name, n=True, env=env, + multi_options=clone_multi_options) # END handle dry-run progress.update(END | CLONE, 0, 1, prefix + "Done cloning to %s" % checkout_module_abspath) diff --git a/test/test_submodule.py b/test/test_submodule.py index eb821b54e..85191a896 100644 --- a/test/test_submodule.py +++ b/test/test_submodule.py @@ -9,6 +9,7 @@ import git from git.cmd import Git from git.compat import is_win +from git.config import GitConfigParser, cp from git.exc import ( InvalidGitRepositoryError, RepositoryDirtyError @@ -945,3 +946,68 @@ def test_depth(self, rwdir): sm_depth = 1 sm = parent.create_submodule(sm_name, sm_name, url=self._small_repo_url(), depth=sm_depth) self.assertEqual(len(list(sm.module().iter_commits())), sm_depth) + + @with_rw_directory + def test_update_clone_multi_options_argument(self, rwdir): + #Arrange + parent = git.Repo.init(osp.join(rwdir, 'parent')) + sm_name = 'foo' + sm_url = self._small_repo_url() + sm_branch = 'refs/heads/master' + sm_hexsha = git.Repo(self._small_repo_url()).head.commit.hexsha + sm = Submodule(parent, bytes.fromhex(sm_hexsha), name=sm_name, path=sm_name, url=sm_url, + branch_path=sm_branch) + + #Act + sm.update(init=True, clone_multi_options=['--config core.eol=true']) + + #Assert + sm_config = GitConfigParser(file_or_files=osp.join(parent.git_dir, 'modules', sm_name, 'config')) + self.assertTrue(sm_config.get_value('core', 'eol')) + + @with_rw_directory + def test_update_no_clone_multi_options_argument(self, rwdir): + #Arrange + parent = git.Repo.init(osp.join(rwdir, 'parent')) + sm_name = 'foo' + sm_url = self._small_repo_url() + sm_branch = 'refs/heads/master' + sm_hexsha = git.Repo(self._small_repo_url()).head.commit.hexsha + sm = Submodule(parent, bytes.fromhex(sm_hexsha), name=sm_name, path=sm_name, url=sm_url, + branch_path=sm_branch) + + #Act + sm.update(init=True) + + #Assert + sm_config = GitConfigParser(file_or_files=osp.join(parent.git_dir, 'modules', sm_name, 'config')) + with self.assertRaises(cp.NoOptionError): + sm_config.get_value('core', 'eol') + + @with_rw_directory + def test_add_clone_multi_options_argument(self, rwdir): + #Arrange + parent = git.Repo.init(osp.join(rwdir, 'parent')) + sm_name = 'foo' + + #Act + Submodule.add(parent, sm_name, sm_name, url=self._small_repo_url(), + clone_multi_options=['--config core.eol=true']) + + #Assert + sm_config = GitConfigParser(file_or_files=osp.join(parent.git_dir, 'modules', sm_name, 'config')) + self.assertTrue(sm_config.get_value('core', 'eol')) + + @with_rw_directory + def test_add_no_clone_multi_options_argument(self, rwdir): + #Arrange + parent = git.Repo.init(osp.join(rwdir, 'parent')) + sm_name = 'foo' + + #Act + Submodule.add(parent, sm_name, sm_name, url=self._small_repo_url()) + + #Assert + sm_config = GitConfigParser(file_or_files=osp.join(parent.git_dir, 'modules', sm_name, 'config')) + with self.assertRaises(cp.NoOptionError): + sm_config.get_value('core', 'eol') From 75dbf90efb5e292bac5f54700f7f0efedf3e47d5 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 30 Jun 2021 18:39:17 +0100 Subject: [PATCH 0523/2375] move py.typed from setup.py to MANIFEST.INI --- MANIFEST.in | 1 + et --soft HEAD~62 | 82 + output.txt | 18691 ++++++++++++++++++++++++++++++++++++++++++++ setup.py | 2 +- 4 files changed, 18775 insertions(+), 1 deletion(-) create mode 100644 et --soft HEAD~62 create mode 100644 output.txt diff --git a/MANIFEST.in b/MANIFEST.in index f02721fc6..eac2a1514 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -6,6 +6,7 @@ include README.md include VERSION include requirements.txt include test-requirements.txt +include git/py.typed recursive-include doc * recursive-exclude test * diff --git a/et --soft HEAD~62 b/et --soft HEAD~62 new file mode 100644 index 000000000..533a51344 --- /dev/null +++ b/et --soft HEAD~62 @@ -0,0 +1,82 @@ +47bd0c1c9d7ef877a259c70782fef8f0d0f1a4c7 (HEAD -> main, origin/main, origin/HEAD) pppppp +4bdfa63ef2d3e24ec54dba98d636bb5bfe26b11a ppppp +b5cc7404512440f1c16c8345b19a91e9618a81db pppp +ad668a5293bd9a4ba8d7b5de21641d81e09ceb4e ppp +3f259be8841544b4afb3e03aa74f45db48deae26 pp +d0d29024c9148972ddc5a61b8e81b46a4d2dd6f7 p +9f93e93fe38ccdeb32907649ffb8bde4944020dc tyofoiotg +4336da76aff9460a778c0029c0e8e521a2e43795 tyofootg +67604c15e0fc91cf160ac8f54370ed290c2e93a1 tyooollllltg +54cd3f2b86c4474664783294f8f3b7a64090b53f tyooolqqltg +b86c4d252a44d9db85c9ee747926cb7566325b5d tyooolltg +c406cca34ba8563baa3496ecd3ee2e8021b32eb4 tyoootg +379275d4f6d0c15a6ac8ef0acae777cfead3e9ea tytgll +60e6203ab2b9282bfb5aa52540d7150c04ea6b23 tytg +f7a4d1fe7d9e5b58d6be8998942cbe723a630efc tytg +3f88dff46cb336c5011c0c88a2fd2ddf6600930f tytg +b3cff0cc07a8fc221d8a8c5d0e3fea5e6c18f1ca type oeklllljs +12788f0ef8503a15f44f393364a028cef8d3ba49 type oeklllljs +2f65d888a8f22895c9da79b51a4ac6bf718ddcc9 type oekjs +19e0503bd229d46523c78da85c9a997da19b8e95 type oekjs +6b241703b46ecda2e73bfa4a401ec4c91c4a47a3 type oeklgpllpjs +6ca3261073ba2f22c233550e75eed315416f7d4a type oeklgpllpjs +9a0640a41db895bb155560d022ac4becc0104bbc type oeklgppjs +2e552f7575426373132eb93ca3b09cdd389e3aff type oeklgppjs +d6c1054528ac81f29829a374eee04e76cd622d85 type oekgppjs +c0aed37318448f4eeaa7d2be4d0a6fd3092b290e type oekgjs +57cd84b65fde0f73592113c9664705f3a3ad6b1b type oekjs +57a8757d83eadb797a0c5bbbb73972bf320f0fcf type oejks +78291356e11f0a7e96dbe977b0a2a2487923cabc type oejs +f0cafdc02cd3561ebfe5eb2bd64aa931f6bdc746 type ojdejs +b5a6ebbc11dde3fc38f4bb795ae12f18d685ba9d type opcojjs +df16fd3d024f1cecf8389a1ae99c08ca92487c85 type opcojdejs +fe3e973258fb4491001836bd4730699a2109c05a type opcodejs +6167858688feac893fb88b8a3504690811ca6fc1 type opcodejs fllr +1671a07d895db2bc3ddd7df5f882e69e5fc461b4 type opcodejs frrrllr +2fe49943535e43cab3c9ccc91f45c249b9a7f8e1 type opcodejs frrrlr +55edcf789d12fddf2ef0d8817e95b7ef98ba0f0f type opcodejs frrrr +8b0492f6931b1cc42e505748e936dbc0e3303795 type opcodes frrrr +d8cea4f39dc57a25128bae42bd9f2a68aeaed5fa type opcodes frrr +ee571ed31cfeeb15586fb2d3f91a673e178f8f2b type opcodes frr +e6014e40dbf08028e819e7dcef24e91e1ddf2079 type opcodes fr +f4b63c1958e8743c44d247be5b6bd1b52d0e3904 type opcodes +fb37cd2b9cd808e8b15e5c36e90b62d987c1d00a fix travehhhs +00f4fd2b01a6a843cfc1ceb4a116b38b4acdabd3 fix traves +edcda782b72b503ceb2460ddcd5a0e4998dbc6e1 fix traversjjjes +debe00372bad46556f271e86a64ededb967c28d1 fix traverses +e69c51051b6fd7a702f6b757f0ea68fcb45037c7 fix traverse +d8c77302fc8ce89c35b40b3da898e81d39f6ac8d fix traverse subbbbocdfsb +521736c82e08fb3cb8000a36dca9d04532e3ba39 fix +e81abd85565bcb8b6922a629e811bf9dfdf0d0ca fix traverse subbbbocdfsdfb +253e7be871abc949f15a99315a5fd8b1f1bc0e70 fix traverse subbbbb +1fd49bb457e35fd80963572dd0cea08f3f694430 fix traverse subbbbb +ad1203946f3532ba2a76f5ab1bc76df963057ca5 fix traverse subbbbb +15117cb47d58c82843cc3a11522eeb353e760f1b fix traverse subbbb +628f4b39d5abf81a32c0f31cea5d88dca643a966 fix traverse subbbb +b253b629648202eacb98284d2996aaf7cf2a6107 fix traverse subbb +19c1ca82ecd96b00f296d5343612b22df0f7a923 fix traverse sub +2f5d2b26de1ae290880a1cce9cd2d9745fab49c1 fix traverse sub list +48f2daff1a45c2a38073310b025e5f3700473372 fix traverse comitted list +1bb39e7bf892ce8d3d4dd9dc443c30acb06c34d3 fix traverse comitted +5365916ea915dc76ecff2c607a141467a532980c fix traverse comito +26ef4581eb6af03f97edea56131661c2c1bafc2b fix traverse comit +ce54b5ab62fd4b558e98fe70eb3241e64912192b fix traverseobkl1#00 +9d9e3dd1b17799850ce745e3ce098f3e3df92d58 fix traverse comit +2a7bb484201fdb881d7a660cc22465ce844fe92c fix traverseo1#00 +3297c10984f8744b9bacae28f3efe84a49fbe376 fix traverseo0000 +46f9080b86742c1abe6aebd5d654440892b96ad8 fix traverseo +52c874e538d107618fcb21f06b154acd921aedbf fix traverseo +367ae7572d4752cced72872488103e61033e65fc fix traverse +c5c3538ca38054f0bd078386d2edc7d2a151859e fix tr +11235ecbba5594bfd12cfdd001f1dd70c20c1f98 fix t +4e39b4a31bf5e5a654c6ff9aa97784e87c90670a rmv assert basic traverses +b648e15db47d3e3b24be5013c5c50701635af0f6 rmv assert basic traverse +066326a34e7d5abe8f4ab9c40f4baa8b44e3ef89 assert basic traverse +8ffd0ae959a7260e9d5f918ae88ab61ccf1991dd assert lst traverse +b3cfbcbce72652e61ddb19c1a6db131703bd0ef6 asser traverse +1a724ece29e0888106ad659c6a77a24314cc41ca rmv errrrr +0c475fa885bb306b1ff8855590687ec52892a90e rmv errrrr +701fefc01a52f7d97ed903a0887ef7b9541b26e2 rmv errrr +4da9492b835da97dad730a404f1c12218f92e0dd rmv errr +c18937232b4a093aa87c660b20ff2d262b6ffbda rmv err +37fa6002c0b03203758cabd7a2335fd1f559f957 flake8 fxc diff --git a/output.txt b/output.txt new file mode 100644 index 000000000..25c8c95e5 --- /dev/null +++ b/output.txt @@ -0,0 +1,18691 @@ +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3d33c113b1dfa4be7e3c9924fae029c178505c3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e3068025b64bee24efc1063aba5138708737c158 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6ee9751d4e9e9526dbe810b280a4b95a43105ec9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f3e78d98e06439eea1036957796f8df9f386930f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 141b78f42c7a3c1da1e5d605af3fc56aceb921ab ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5e4334f38dce4cf02db5f11a6e5844f3a7c785c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9aaaa83c44d5d23565e982a705d483c656e6c157 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bbf04348b0c79be2103fd3aaa746685578eb12fd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1578baf817c2526d29276067d2f23d28b6fab2b1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9db24bc7a617cf93321bb60de6af2a20efd6afc1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 80d43111b6bb73008683ad2f5a7c6abbab3c74ed ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 86ec7573a87cd8136d7d497b99594f29e17406d3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 02cb16916851336fcf2778d66a6d54ee15d086d7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5a9bbef0d2d8fc5877dab55879464a13955a341 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 369e564174bfdd592d64a027bebc3f3f41ee8f11 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 36dbe7e9b55a09c68ba179bcf2c3d3e1b7898ef3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6d0f693184884ffac97908397b074e208c63742b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 040108747e2f868c61f870799a78850b792ddd0a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 300831066507bf8b729a36a074b5c8dbc739128f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bea9077e8356b103289ba481a48d27e92c63ae7a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c0f47b3076a84c5c32cccc95748f18c50e3d948 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 195ecc3da4a851734a853af6d739c21b44e0d7f0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 85a45a691ad068a4a25566cc1ed26db09d46daa4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2efb814d0c3720f018f01329e43d9afa11ddf54 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cfc70fe92d42a853d4171943bde90d86061e3f3a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8724dfa6bf8f6de9c36d10b9b52ab8a1ea30c3b2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 640d1506e7f259d675976e7fffcbc854d41d4246 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d1a9a232fbde88a347935804721ec7cd08de6f65 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a771adc5352dd3876dd2ef3d0c52c8e803fc084 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 643e6369553759407ca433ed51a5a06b47e763d4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aa0ccead680443b07fd675f8b906758907bdb415 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 982eefb2008826604d54c1a6622c12240efb0961 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c1d5c614c38db015485190d65db05b0b75d171d4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 152a60f0bd7c5b495a3ce91d0e45393879ec0477 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 14851034ab5204ddb7329eb34bb0964d3f206f2b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e15b57bf0bb40ccc6ecbebc5b008f7e96b436f19 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c8c696b3cf0c2441aefaef3592e2b815472f162a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 32e4e08cf9ccfa90f0bc6d26f0c7007aeafcffeb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 539980d51c159cb9922d0631a2994835b4243808 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a771e102ec2238a60277e2dce68283833060fd37 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22d2e4a0bfd4c2b83e718ead7f198234e3064929 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1199f90c523f170c377bf7a5ca04c2ccaab67e08 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bafb4cc0a95428cbedaaa225abdceecee7533fac ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b8e700e952d135c6903b97f022211809338232e5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3e79604c8bdfc367f10a4a522c9bf548bdb3ab9a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 83017bce083c58f9a6fb0c7b13db8eeec6859493 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1143e1c66b8b054a2fefca2a23b1f499522ddb76 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5385cbd969cc8727777d503a513ccee8372cd506 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c594195eb614a200e1abb85706ec7b8b7c91268 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9563d27fbde02b8b2a8b0d808759cb235b4e083b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3470e269bcdc9091d0c5e25e7c09ce175c7cee77 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 96928d2eb3d98c475fd0737240c06bf8e5f96ad6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 545ac2574cfb75b02e407e814e10f76bc485926d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b9a2ea80aa9970bbd625da4c986d29a36c405629 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d8bf7d416f60f52335d128cf16fbba0344702e49 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e39c8b07d1c98ddf267fbc69649ecbbe043de0fd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a08733d76a8254a20a28f4c3875a173dcf0ad129 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6cc1e7e08094494916db1aadda17e03ce695d049 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5fe80b03196b1d2421109fad5b456ba7ae4393e2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c1cedc5c417ddf3c2a955514dcca6fe74913259b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1c2dd54358dd526d1d08a8e4a977f041aff74174 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 158bc981130bfbe214190cac19da228d1f321fe1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c6d952b17e63c92a060c08eac38165c6fafa869 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2f233e2405c16e2b185aa90cc8e7ad257307b991 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bccdb483aaa7235b85a49f2c208ee1befd2706dd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e9f8f159ebad405b2c08aa75f735146bb8e216ef ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f51fe3e66d358e997f4af4e91a894a635f7cb601 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e129846a1a5344c8d7c0abe5ec52136c3a581cce ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- abd23a37d8b93721c0e58e8c133cef26ed5ba1f0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 723f100a422577235e06dc024a73285710770fca ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28d6c90782926412ba76838e7a81e60b41083290 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae334e4d145f6787fd08e346a925bbc09e870341 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b89b089972b5bac824ac3de67b8a02097e7e95d7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 98f6995bdcbd10ea0387d0c55cb6351b81a857fd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae0b6fe15e0b89de004d4db40c4ce35e5e2d4536 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9dc8fffd179b3d7ad7c46ff2e6875cc8075fabf3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 21b0448b65317b2830270ff4156a25aca7941472 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6d83f44007c5c581eae7ddc6c5de33311b7c1895 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f043d8a1d7f4076350ff0c778bfa60f7aa2f7aa ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d8bbfea4cdcb36ce0e9ee7d7cad4c41096d4d54f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fe426d404b727d0567f21871f61cc6dc881e8bf0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 873823f39275ceb8d65ebfae74206c7347e07123 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7f662857381a0384bd03d72d6132e0b23f52deef ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f9e7a3d93da741f81a5af2e84422376c54f1f337 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ab7c3223076306ca71f692ed5979199863cf45a7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 91562247e0d11d28b4bc6d85ba50b7af2bd7224b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 756b7ad43d0ad18858075f90ce5eaec2896d439c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1fd07a0a7a6300db1db8b300a3f567b31b335570 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 91645aa87e79e54a56efb8686eb4ab6c8ba67087 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d7729245060f9aecfef4544f91e2656aa8d483ec ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 54e27f7bbb412408bbf0d2735b07d57193869ea6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 47d9f1321c3a6da68a7909fcb1a66a209066d4c9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c27cd907f67f984649ff459dacf3ba105e90ebc2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f498de9bfd67bcbb42d36dfb8ff9e59ec788825b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be81304f2f8aa4a611ba9c46fbb351870aa0ce29 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1c2502ee83927437442b13b83f3a7976e4146a01 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4df4159413a4bf30a891f21cd69202e8746c8fea ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 88f3dc2eb94e9e5ff8567be837baf0b90b354f35 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 21a6cb7336b61f904198f1d48526dcbe9cba6eec ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f3d91ca75500285d19c6ae2d4bf018452ad822a6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a5e607e8aa62ca3778f1026c27a927ee5c79749b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50f763cfe38a1d69a3a04e41a36741545885f1d8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ffefb154982c6cc47c9be6b3eae6fb1170bb0791 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 630d030058c234e50d87196b624adc2049834472 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 66c5b33fb5405fe12756f07048e3bcc3a958b2c1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9d1a489931ecbdd652111669c0bd86bcd6f5abbe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ddbe4bc24e634e6496abd3bc6ce3c4377cdf2fb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3236f8b966061b23ba063f3f7e1652764fee968f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ad07f7b23e762e3eb99ce45020375d2bd743fc5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e0acb8371bb2b68c2bda04db7cb2746ba3f9da86 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ce3fe7cef8910aadc2a2b39a3dab4242a751380 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1410bcc76725b50be794b385006dedd96bebf0fb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bfcdf2bef08f17b4726b67f06c84be3bfe2c39b8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6f038611ff120f8283f0f1a56962f95b66730c72 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 06bec1bcd1795192f4a4a274096f053afc8f80ec ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e2feb62c17acd1dddb6cd125d8b90933c32f89e1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c00567d3025016550d55a7abaf94cbb82a5c44fb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 98a17a28a21fe5f06dd2da561839fdbaa1912c64 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b54b9399920375f0bab14ff8495c0ea3f5fa1c33 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 38fc944390d57399d393dc34b4d1c5c81241fb87 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2a9b2f22c6fb5bd3e30e674874dbc8aa7e5b00ae ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d565a874f29701531ce1fc0779592838040d3edf ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d74543a545a9468cabec5d20519db025952efed ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 34c0831453355e09222ccc6665782d7070f5ddab ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4d3809161fc54d6913c0c2c7f6a7b51eebe223f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 346424daaaf2bb3936b5f4c2891101763dc2bdc0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 261aedd2e13308755894405c7a76b72373dab879 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e48e52001d5abad7b28a4ecadde63c78c3946339 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f5320e8171324a002d3769824152cf5166a21a2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1287f69b42fa7d6b9d65abfef80899b22edfef55 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3c6c81b3281333a5a1152f667c187c9dce12944 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ac93b1d7e0694ceb303ee72c312921a9b1588f4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 47ac37be2e0e14e958ad24dc8cba1fa4b7f78700 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ed61f72c611deb07e0368cebdc9f06da32150cd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bb0f3d78d6980a1d43f05cb17a8da57a196a34f3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fe2fbc5913258ef8379852c6d45fcf226b09900b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4921139819c7949abaad6cc5679232a0fbb0632 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 34802014ca0c9546e73292260aab5e4017ffcd9a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 80701fc6f4bf74d3c6176d76563894ff0f3b32bb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a9a5414300a245b6e93ea4f39fbca792c3ec753f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9fbae711b76a4f2fa9345f43da6d2cdedd75d6c3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 26fc5866f6ed994f3b9d859a3255b10d04ee653d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea29541e213df928d356b3c12d4d074001395d3c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 508807e59ce9d6c3574d314d502e82238e3e606c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e395ac90bf088ad6b5de7dadb6531a6e7f3f4f3f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b259098782c2248f6160d2b36d42672d6925023a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 048ffa58468521c043de567f620003457b8b3dbe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 27c31e2fde54c0587c032ccffdaa7c4ddf5b2ae5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- df95149198744c258ed6856044ac5e79e6b81404 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a41a8b93167a59cd074eb3175490cd61c45b6f6a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d5054fdb1766cb035a1186c3cef4a14472fee98d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6569c4849197c9475d85d05205c55e9ef28950c1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aaa84341f876927b545abdc674c811d60af00561 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53e5fb3733e491925a01e9da6243e93c2e4214c1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20863cfe4a1b0c5bea18677470a969073570e41c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aa1b156ee96f5aabdca153c152ec6e3215fdf16f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a223c7b7730c53c3fa1e4c019bd3daefbb8fd74b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 619c989915b568e4737951fafcbae14cd06d6ea6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d4ce247c0380e3806e47b5b3e2b66c29c3ab2680 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be074c655ad53927541fc6443eed8b0c2550e415 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c15a6e1923a14bc760851913858a3942a4193cdb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e973e6f829de5dd1c09d0db39d232230e7eb01d8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae2b59625e9bde14b1d2d476e678326886ab1552 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a2d39529eea4d0ecfcd65a2d245284174cd2e0aa ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c7b16ade191bb753ebadb45efe6be7386f67351d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e8eae18dcc360e6ab96c2291982bd4306adc01b9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 67680a0877f01177dc827beb49c83a9174cdb736 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e7671110bc865786ffe61cf9b92bf43c03759229 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 503b62bd76ee742bd18a1803dac76266fa8901bc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ede325d15ba9cba0e7fe9ee693085fd5db966629 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 43e430d7fa5298f6db6b1649c1a77c208bacf2fc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dfb0a9c4bca590efaa86f8edc3fdb62bd536bce7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- acd82464a11f3c2d3edc1d152d028a142da31a9f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e84300df7deed9abf248f79526a5b41fd2f7f76e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 597bc56a32e1b709eefa4e573f11387d04629f0d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- becf5efbfc4aee2677e29e1c8cbd756571cb649d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6e8aa9b0aefc30ee5807c2b2cf433a38555b7e0b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 96c6ab4f7572fd5ca8638f3cb6e342d5000955e7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bfce49feb0be6c69f7fffc57ebdd22b6da241278 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b825dc74773ffa5c7a45b48d72616b222ad2023e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a0cb95c5df7a559633c48f5b0f200599c4a62091 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c767b5206f1e9c8536110dda4d515ebb9242bbeb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 85a5a8c6a931f8b3a220ed61750d1f9758d0810a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 18caa610d50b92331485013584f5373804dd0416 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d9f1495004710b77767393a29f33df76d7b0fb5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17f5d13a7a741dcbb2a30e147bdafe929cff4697 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1531d789df97dbf1ed3f5b0340bbf39918d9fe48 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1d52f98935b70cda4eede4d52cdad4e3b886f639 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 723d20f1156530b122e9785f5efc6ebf2b838fe0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b08651e5ae2bffef5e4fb44fbdd7d467715e3b73 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fc94b89dabd9df49631cbf6b18800325f3521864 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e40ad6369bc74d01af4dc41d3a9b8e25ac2aa01e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 46889d1dce4506813206a8004f6c3e514f22b679 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de4cfcc4a1fcb24b72a31c5feff8c67d2ff930fc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 987f9bbd08446de3f9d135659f2e36ad6c9d14fb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 27b4efed7a435153f18598796473b3fba06c513d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f7b7eb6245e7d7c4535975268a9be936e2c59dc8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c7887c66483ffa9a839ecf1a53c5ef718dcd1d2d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 36cdfd3209909163549850709d7f12fdf1316434 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f4a49ff2dddc66bbe25af554caba2351fbf21702 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 45eb728554953fafcee2aab0f76ca65e005326b0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c6ee00d0dadcd7b10d60a2985db4fe137ca7cfed ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d83f6e84cbeb45dce4576a9a4591446afefa50b2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 87a6ffa13ae2951a168cde5908c7a94b16562b96 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 73790919dbe038285a3612a191c377bc27ae6170 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a4b8e467e44bc1ca1ebf481ac2dfc1baaf9688dc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 763ef75d12f0ad6e4b79a7df304c7b5f1b5a11f2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b6ed8d46c72366e111b9a97a7c238ef4af3bf4dc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3efacd7aea48c93e0a42c1e83bf3c96e9e50f178 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c86bea60dde4016dd850916aa2e0db5260e1ff61 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d4b4ea9c84198a9b6003611a3af00ee677d09a6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d437078d8f95cb98f905162b2b06d04545806c59 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 491440543571b07c849c0ef9c4ebf5c27f263bc0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1dec7a822424bbe58b7b2a7787b1ea32683a9c19 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fce04b7e4e6e1377aa7f07da985bb68671d36ba4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28bda3aaa19955d1c172bd86d62478bee024bf7b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a6e4a6416162a698d87ba15693f2e7434beac644 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4fd7b945dfca73caf00883d4cf43740edb7516df ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1bfb44c62d15a45ca4d47b4cc482ebddb8d0ae4f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a182be6716d24fb49cb4517898b67ffcdfb5bca4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b18fd3fd13d0a1de0c3067292796e011f0f01a05 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5d0ad081ca0e723ba2a12c876b4cd1574485c726 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c824bcd73de8a7035f7e55ab3375ee0b6ab28c46 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5c12ff49fc91e66f30c5dc878f5d764d08479558 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56e942318f3c493c8dcd4759f806034331ebeda5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d46e3fe9cb0dea2617cd9231d29bf6919b0f1e91 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 68f8a43d1b643318732f30ee1cd75e1d315a4537 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3936084cdd336ce7db7d693950e345eeceab93a5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1ef4552404ba3bc92554a6c57793ee889523e3a8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c8cf69b6f8bd73525b5375bd73f1fc79ae322a82 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1de8af907dbced4fde64ee2c7f57527fc43ad1cc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1527b5734c0f2821fd6f38c1a1d70723a4bb88ab ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6f55c17f48d7608072199496fbcefa33f2e97bf0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e0c65d6638698f4e3a9e726efca8c0bcf466cd62 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b9d3b961bdf79964b883d3179f085d8835e528d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 02e942b7c603163c87509195d76b2117c4997119 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c80d727e374321573bb00e23876a67c77ff466e3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 725bde98d5cf680a087b6cb47a11dc469cfe956c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 965a08c3f9f2fbd62691d533425c699c943cb865 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 95bb489a50f6c254f49ba4562d423dbf2201554f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- acac4bb07af3f168e10eee392a74a06e124d1cdd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4cfc682ff87d3629b31e0196004d1954810b206c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c255c14e9eb15f4ff29a4baead3ed31a9943e04e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f219b53f339fc0133800fac96deaf75eb4f9bf6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 79d9c4cb175792e80950fdd363a43944fb16a441 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a05e49d2419d65c59c65adf5cd8c05f276550e1d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4228b2cc8e1c9bd080fe48db98a46c21305e1464 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 60e54133aa1105a1270f0a42e74813f75cd2dc46 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a8535d1a2485b4e063ab9ef0a2719a1aab8187d3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a83eee5bcee64eeb000dd413ab55aa98dcc8c7f2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e3e8ce69bec72277354eff252064a59f515d718a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b5a37564b6eec05b98c2efa5edcd1460a2df02aa ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17f245cad19bf77a5a5fecdee6a41217cc128a73 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 45c1c99a22e95d730d3096c339d97181d314d6ca ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- db828cdfef651dd25867382d9dc5ac4c4f7f1de3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7297ff651c3cc6abf648b3fe730c2b5b1f3edbd3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2840c626d2eb712055ccb5dcbad25d040f17ce1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a67e4e49c4e7b82e416067df69c72656213e886 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 342a0276dbf11366ae91ce28dcceddc332c97eaf ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 31b3673bdb9d8fb7feea8ae887be455c4a880f76 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 863a40e0d35f3ff3c3e4b5dc9ff1272e1b1783b1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e1060a2a8c90c0730c3541811df8f906dac510a7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de9a6bb0c8931e7f74ea35edb372e5ca7d0a5047 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8a308613467a1510f8dac514624abae4e10c0779 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6becbaf35fa2f807837284d33649ba5376b3fe21 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d0556a31916a709e9da3eafb92fc6b8bf69896c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c9d884511ed2c8e9ca96de04df835aaa6eb973eb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 45eb6bd22554e5dad2417d185d39fe665b7a7419 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 04357d0d46fee938a618b64daed1716606e05ca5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1e1e19d33e1caa107dc0a6cc8c1bfe24d8153f51 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bc8c91200a7fb2140aadd283c66b5ab82f9ad61e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 891b124f5cc6bfd242b217759f362878b596f6e2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3f879c71bdf0aac7af9b01304ff02e94b5af71b7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae2ff0f9d704dc776a1934f72a339da206a9fff4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 750e9677b1ce303fa913c3e0754c3884d6517626 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a6fca2410a56225992959e5e4f8019e16757bfd1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a47a9c8d8253d0ae2a233fa8599b1a1c54ec53f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f6aa8d116eb33293c0a9d6d600eb7c32832758b9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8511513540ece43ac8134f3d28380b96db881526 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8a72a7a43ae004f1ae1be392d4322c07b25deff5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 616ae503462ea93326fa459034f517a4dd0cc1d1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4ae92aa57324849dd05997825c29242d2d654099 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f54c8919f297a5e5c34517d9fed0666c9d8aa10 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1234a1077f24ca0e2f1a9b4d27731482a7ed752b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 88a7002acb50bb9b921cb20868dfea837e7e8f26 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4d9b7b09a7c66e19a608d76282eacc769e349150 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 257264743154b975bc156f425217593be14727a9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d48ed95cc7bd2ad0ac36593bb2440f24f675eb59 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7ea782803efe1974471430d70ee19419287fd3d0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6fc9e6150957ff5e011142ec5e9f8522168602ec ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 706d3a28b6fa2d7ff90bbc564a53f4007321534f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3621c06c3173bff395645bd416f0efafa20a1da6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 123cb67ea60d2ae2fb32b9b60ebfe69e43541662 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22c4671b58a6289667f7ec132bc5251672411150 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5991698ee2b3046bbc9cfc3bd2abd3a881f514dd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae2baadf3aabe526bdaa5dfdf27fac0a1c63aa04 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53b65e074e4d62ea5d0251b37c35fd055e403110 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0b820e617ab21b372394bf12129c30174f57c5d7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5b6080369e7ee47b7d746685d264358c91d656bd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5025b8de2220123cd80981bb2ddecdd2ea573f6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- da5e58a47d3da8de1f58da4e871e15cc8272d0e5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- da09f02e67cb18e2c5312b9a36d2891b80cd9dcd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 95436186ffb11f51a0099fe261a2c7e76b29c8a6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a2b9ac30337761fa0df74ce6e0347c5aabd7c072 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2af98929bd185cf1b4316391078240f337877f66 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8df6b87a793434065cd9a01fcaa812e3ea47c4dd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 90811b1bd194e4864f443ae714716327ba7596c2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a40d848794133de7b6e028f2513c939d823767cb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7e231a4f184583fbac2d3ef110dacd1f015d5e1c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a7c4b323bb2d3960430b11134ee59438e16d254e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9eb902eee03806db5868fc84afb23aa28802e841 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 81223de22691e2df7b81cd384ad23be25cfd999c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3f277ba01f9a93fb040a365eef80f46ce6a9de85 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d5cbe7d7de5a29c7e714214695df1948319408d0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c2e872f742e7d3c64c7e0fdb85a5d711aff1970 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 322db077a693a513e79577a0adf94c97fc2be347 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ba67e4ff74e97c4de5d980715729a773a48cd6bc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8e3883a0691ce1957996c5b37d7440ab925c731e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4d8fb73daa82420bdc69c37f0d58f7cb4cd505a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3eee7af0e69a39da2dc6c5f109c10975fae5a93e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9780b7a0f39f66d6e1946a7d109fc49165b81d64 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d6d544f67a1f3572781271b5f3030d97e6c6d9e2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55885e0c4fc40dd2780ff2cde9cda81a43e682c9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7aba59a2609ec768d5d495dafd23a4bce8179741 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c8e70749887370a99adeda972cc3503397b5f9a7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3a1e0d7117b9e4ea4be3ef4895e8b2b4937ff98a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0e9eef45194039af6b8c22edf06cfd7cb106727a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f6b8bf020863f499bf956943a5ee56d067407f8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c39afa1f85f3293ad2ccef684ff62bf0a36e73c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ff13922f6cfb11128b7651ddfcbbd5cad67e477f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bed3b0989730cdc3f513884325f1447eb378aaee ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a7e7a769087b1790a18d6645740b5b670f5086b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7dcb07947cd71f47b5e2e5f101d289e263506ca9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 15c4a95ada66977c8cf80767bf1c72a45eb576b2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 18fff4d4a28295500acd531a1b97bc3b89fad07e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f7ed51ba4c8416888f5744ddb84726316c461051 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 614907b7445e2ed8584c1c37df7e466e3b56170f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28fdf05b1d7827744b7b70eeb1cc66d3afd38c82 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1ddf05a78475a194ed1aa082d26b3d27ecc77475 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0441fdcbc4ea1ab8ce5455f2352436712f1b30bb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ab7ac2397d60f1a71a90bf836543f9e0dcad2d0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8005591231c8ae329f0ff320385b190d2ea81df0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be34ec23c48d6d5d8fd2ef4491981f6fb4bab8e6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5d602f267c32e1e917599d9bcdcfec4eef05d477 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e9bd04844725661c8aa2aef11091f01eeab69486 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a92ab8028c7780db728d6aad40ea1f511945fc8e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3287148a2f99fa66028434ce971b0200271437e7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56d7a9b64b6d768dd118a02c1ed2afb38265c8b9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f5d11b750ecc982541d1f936488248f0b42d75d3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9d0473c1d1e6cadd986102712fff9196fff96212 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 85b836b1efb8a491230e918f7b81da3dc2a232c4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5558400e86a96936795e68bb6aa95c4c0bb0719 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 598cd1d7f452e05bfcda98ce9e3c392cf554fe75 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b8f10e74d815223341c3dd3b647910b6e6841bd6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56d5d0c70cf3a914286fe016030c9edec25c3ae0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5127e167328c7da2593fea98a27b27bb0acece68 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 916c45de7c9663806dc2cd3769a173682e5e8670 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fbd096841ddcd532e0af15eb1f42c5cd001f9d74 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c6b08c27a031f8b8b0bb6c41747ca1bc62b72706 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2e6957abf8cd88824282a19b74497872fe676a46 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dbe78c02cbdfd0a539a1e04976e1480ac0daf580 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c437ee5deb8d00cf02f03720693e4c802e99f390 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e94df6acd3e22ce0ec7f727076fd9046d96d57b2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d38b9a916ab5bce9e5f622777edbc76bef617e93 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cccea02a4091cc3082adb18c4f4762fe9107d3b0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d3a728277877924e889e9fef42501127f48a4e77 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4654ca3a17832a7d479e5d8e3296f004c632183 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9e4a44b302d3a3e49aa014062b42de84480a8d4f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f09906d27affb8d08a96c07fc3386ef261f97af ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d45c76bd8cd28d05102311e9b4bc287819a51e0e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 03097c7ace28c5516aacbb1617265e50a9043a84 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5869c5c1a51d448a411ae0d51d888793c35db9c0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f573b6840509bf41be822ab7ed79e0a776005133 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b6f38d02c8ed1fb07eb6782b918f31efc4c42f3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e1ad78eb7494513f6c53f0226fe3cb7df4e67513 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c914637ab146c23484a730175aa10340db91be70 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 27c577dfd5c7f0fc75cd10ed6606674b56b405bd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f122a6aa3eb386914faa58ef3bf336f27b02fab0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 59587d81412ca9da1fd06427efd864174d76c1c5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5452aa820c0f5c2454642587ff6a3bd6d96eaa1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d43055d44e58e8f010a71ec974c6a26f091a0b7a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5244f7751c10865df94980817cfbe99b7933d4d6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9421cbc67e81629895ff1f7f397254bfe096ba49 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- db82455bd91ce00c22f6ee2b0dc622f117f07137 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 48fab54afab49f18c260463a79b90d594c7a5833 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d3e5d9cda8eae5b0f19ac25efada6d0b3b9e04e5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ddd5e5ef89da7f1e3b3a7d081fbc7f5c46ac11c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c544101eed30d5656746080204f53a2563b3d535 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 007bd4b8190a6e85831c145e0aed5c68594db556 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a8bdce7a665a0b38fc822b7f05a8c2e80ccd781 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c5b87bcdd70810a20308384b0e3d1665f6d2922 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dbd784b870a878ef6dbecd14310018cdaeda5c6d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 29d94c622a7f6f696d899e5bb3484c925b5d4441 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8828ced5818d793879ae509e144fdad23465d684 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ea3dbdf67af10ccc6ad22fb3294bbd790a3698f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b137f55232155b16aa308ec4ea8d6bc994268b0d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ae512e69f37e37431239c8da6ffa48c75684f87 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 237d47b9d714fcc2eaedff68c6c0870ef3e0041a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a5a75ab7533de99a4f569b05535061581cb07a41 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9044abce7e7b3d8164fe7b83e5a21f676471b796 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3eb7265c532e99e8e434e31f910b05c055ae4369 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56cc93a548f35a0becd49a7eacde86f55ffc5dc5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a0ad305883201b6b3e68494fc70089180389f6e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d9fc8b6c06b91dfddb73d18eaa8164e64cc2600a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b7071ce13476cae789377c280aa274e6242fd756 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f3989f27e91119bb29cc1ed93751c3148762695 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6c9fcd7745d2f0c933b46a694f77f85056133ca5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4bc91d7495d7eb70a70c1f025137718f41486cd2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- eb53329253f8ec1d0eff83037ce70260b6d8fcce ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fcc166d3a6e235933e823e82e1fcf6160a32a5d3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 678821a036c04dfbe331d238a7fe0223e8524901 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6a61110053bca2bbf605b66418b9670cbd555802 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f24786fca46b054789d388975614097ae71c252e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e8980057ccfcaca34b423804222a9f981350ac67 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3b7263e0bb9cc1d94e483e66c1494e0e7982fd1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6404168e6f990462c32dbe5c7ac1ec186f88c648 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 48f5476867d8316ee1af55e0e7cfacacbdf0ad68 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13e3a809554706905418a48b72e09e2eba81af2d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 10809e8854619fe9f7d5e4c5805962b8cc7a434b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 59879a4e1e2c39e41fa552d8ac0d547c62936897 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c390e223553964fc8577d6837caf19037c4cd6f6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f9b915b066f28f4ac7382b855a8af11329e3400d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ea761425b9fa1fda57e83a877f4e2fdc336a9a3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e0524096fa9f3add551abbf68ee22904b249d82f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e8987f2746637cbe518e6fe5cf574a9f151472ed ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 64a4730ea1f9d7b69a1ba09b32c2aad0377bc10a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fe311b917b3cef75189e835bbef5eebd5b76cc20 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 36a984803df08b0f6eb5f8a73254dd64bc616b67 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- eb52c96d7e849e68fda40e4fa7908434e7b0b022 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ffde74dd7b5cbc4c018f0d608049be8eccc5101 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3ea450112501e0d9f11e554aaf6ce9f36b32b732 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dfe3ba3e5c08ee88afe89cc331081bbfbf5520e0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ab5b6af0c2c13794525ad84b0a80be9c42e9fcf1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f03e6162f99e4bfdd60c08168dabef3a1bdb1825 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 11e0a94f5e7ed5f824427d615199228a757471fe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e583a9e22a7a0535f2c591579873e31c21bccae0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55eb3de3c31fd5d5ad35a8452060ee3be99a2d99 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d6192ad1aed30adc023621089fdf845aa528dde9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a023acbe9fc9a183c395be969b7fc7d472490cb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e11f12adffec6bf03ea1faae6c570beaceaffc86 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 863b386e195bb2b609b25614f732b1b502bc79a4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3b9b6fe0dd99803c80a3a3c52f003614ad3e0adf ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5b3b65287e6849628066d5b9d08ec40c260a94dc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cc93c4f3ddade455cc4f55bc93167b1d2aeddc4f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b3061698403f0055d1d63be6ab3fbb43bd954e8e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f225d4b8c3d7eb90038c246a289a18c7b655da2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 35bceb16480b21c13a949eadff2aca0e2e5483fe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea5d365a93a98907a1d7c25d433efd06a854109e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9e91a05aabb73cca7acec1cc0e07d8a562e31b45 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e7fa5ef735754e640bd6be6c0a77088009058d74 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 096897123ab5d8b500024e63ca81b658f3cb93da ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 673b21e1be26b89c9a4e8be35d521e0a43a9bfa1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a98e0af511b728030c12bf8633b077866bb74e47 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 811a6514571a94ed2e2704fb3a398218c739c9e9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec0b85e2d4907fb5fcfc5724e0e8df59e752c0d1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 96c7ac239a2c9e303233e58daee02101cc4ebf3d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e6a2942a982c2541a6b6f7c67aa7dbf57ed060ca ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f5ec638a77dd1cd38512bc9cf2ebae949e7a8812 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5eb7fd3f0dd99dc6c49da6fd7e78a392c4ef1b33 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a02e432530336f3e0db8807847b6947b4d9908d8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a3cc763d6ca57582964807fb171bc52174ef8d5e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2df73b317a4e2834037be8b67084bee0b533bfe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 031271e890327f631068571a3f79235a35a4f73e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 70670586e082a9352c3bebe4fb8c17068dd39b4c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e54cd8fed2d1788618df64b319a30c7aed791191 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b4b50e7348815402634b6b559b48191dba00a751 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 460cafb81f86361536077b3b6432237c6ae3d698 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6720e8df09a314c3e4ce20796df469838379480d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1ab169407354d4b9512447cd9c90e8a31263c275 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56488ced0fae2729b1e9c72447b005efdcd4fea7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b424f87a276e509dcaaee6beb10ca00c12bb7d29 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 294ee691d0fdac46d31550c7f1751d09cfb5a0f0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 96d003cb2baabd73f2aa0fd9486c13c61415106e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 46f63c30e30364eb04160df71056d4d34e97af21 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 87ae42528362d258a218b3818097fd2a4e1d6acf ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f631214261a7769c8e6956a51f3d04ebc8ce8efd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 468cad66ff1f80ddaeee4123c24e4d53a032c00d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1053448ad885c633af9805a750d6187d19efaa6c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 90b20e5cd9ba8b679a488efedb1eb1983e848acf ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2fbb7027ec88e2e4fe7754f22a27afe36813224b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f8ce24a835cae8c623e2936bec2618a8855c605b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 65747a216c67c3101c6ae2edaa8119d786b793cb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9004e3a1cf33110f2cbc458f1dc3259c930ad9b4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d0f24c9facb5be0c98c8859a5ce3c6b0d08504ac ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0cfe75db81bc099e4316895ff24d65ef865bced6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cf1d5bd4208514bab3e6ee523a70dff8176c8c80 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 523fb313f77717a12086319429f13723fe95f85e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f24736ad5b55a89b1057d68d6b3f3cd01018a2e8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3175b5b21194bcc8f4448abe0a03a98d3a4a1360 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7da101ba9a09a22a85c314a8909fd23468ae66f0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d810f2700f54146063ca2cb6bb1cf03c36744a2c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3b2e9a8312412b9c8d4e986510dcc30ee16c5f4c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fca367548e365f93c58c47dea45507025269f59a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3203cd7629345d32806f470a308975076b2b4686 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b81273e70c9c31ae02cb0a2d6e697d7a4e2b683a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c12fef1b1971ba7a50e7e5c497caf51e0f68479 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e86eb305a542cee5b0ff6a0e0352cb458089bf62 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 48a17c87c15b2fa7ce2e84afa09484f354d57a39 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 98a313305f0d554a179b93695d333199feb5266c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 968ffb2c2e5c6066a2b01ad2a0833c2800880d46 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cb68eef0865df6aedbc11cd81888625a70da6777 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0b813371f5a8af95152cae109d28c7c97bfaf79f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6befb28efd86556e45bb0b213bcfbfa866cac379 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 86523260c495d9a29aa5ab29d50d30a5d1981a0c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9d6310db456de9952453361c860c3ae61b8674ea ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ca0f897376e765989e92e44628228514f431458 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c946bf260d3f7ca54bffb796a82218dce0eb703f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 685760ab33b8f9d7455b18a9ecb8c4c5b3315d66 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 83a9e4a0dad595188ff3fb35bc3dfc4d931eff6d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 264ba6f54f928da31a037966198a0849325b3732 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22a88a7ec38e29827264f558f0c1691b99102e23 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e6019e16d5a74dc49eb7129ee7fd78b4de51dac2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec0657cf5de9aeb5629cc4f4f38b36f48490493e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 517ae56f517f5e7253f878dd1dc3c7c49f53df1a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fafe8a77db75083de3e7af92185ecdb7f2d542d3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a17c43d0662bab137903075f2cff34bcabc7e1d1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c72b9a3eaabbe927ba77d4f69a62f35fbe60e2e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20b07fa542d2376a287435a26c967a5ee104667f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8dd51f1d63fa5ee704c2bdf4cb607bb6a71817d2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8e0e315a371cdfc80993a1532f938d56ed7acee4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- beccf1907dae129d95cee53ebe61cc8076792d07 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7029773512eee5a0bb765b82cfdd90fd5ab34e15 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8d0aa1ef19e2c3babee458bd4504820f415148e0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ca3fdbe2232ceb2441dedbec1b685466af95e73b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 61f3db7bd07ac2f3c2ff54615c13bf9219289932 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8867348ca772cdce7434e76eed141f035b63e928 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f24f9540afc0db61d197bc4932697737bff1506 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a21a9f6f13861ddc65671b278e93cf0984adaa30 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b00ad00130389f5b00da9dbfd89c3e02319d2999 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5bd7d44ff7e51105e3e277aee109a45c42590572 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ab454f0ccf09773a4f51045329a69fd73559414 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ccd777c386704911734ae4c33a922a5682ac6c8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7dd618655c96ff32b5c30e41a5406c512bcbb65f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8ad01ee239f9111133e52af29b78daed34c52e49 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 45c0f285a6d9d9214f8167742d12af2855f527fb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a93eb7e8484e5bb40f9b8d11ac64a1621cf4c9cd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f1545bd9cd6953c5b39c488bf7fe179676060499 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a8014d2ec56fd684dc81478dee73ca7eda0ab8a7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6e5aae2fc8c3832bdae1cd5e0a269405fb059231 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1d1d2cb421f16bd277d7c4ce88398ff0f5afb29 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7cf2d5fcf0a3db793678dd6ba9fc1c24d4eeb36a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a25e1d4aa7e5898ab1224d0e5cc5ecfbe8ed8821 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 739fa140235cc9d65c632eaf1f5cacc944d87cfb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bd7fb976ab0607592875b5697dc76c117a18dc73 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ebe8f644e751c1b2115301c1a961bef14d2cce89 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9519f186ce757cdba217f222c95c20033d00f91d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 75c75fa136f6181f6ba2e52b8b85a98d3fe1718e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dec4663129f72321a14efd6de63f14a7419e3ed2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d5bfb5d6d22f8fe8c940f36e1fbe16738965d5f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3f2d76ba8e6d004ff5849ed8c7c34f6a4ac2e1e3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4c34d5c3f2a4ed7194276a026e0ec6437d339c67 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b6b9510e0724bfcb4250f703ddf99d1e4020bbc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cf5eaddde33e983bc7b496f458bdd49154f6f498 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c0b92e40ece170b59bced0cea752904823e06e7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c0990b2a6dd2e777b46c1685ddb985b3c0ef59a2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 97ab197140b16027975c7465a5e8786e6cc8fea1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0c1834134ce177cdbd30a56994fcc4bf8f5be8b2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8858a63cb33319f3e739edcbfafdae3ec0fefa33 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 82849578e61a7dfb47fc76dcbe18b1e3b6a36951 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 94029ce1420ced83c3e5dcd181a2280b26574bc9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7a320abc52307b4d4010166bd899ac75024ec9a7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13647590f96fb5a22cb60f12c5a70e00065a7f3a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1687283c13caf7ff8d1959591541dff6a171ca1e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 741dfaadf732d4a2a897250c006d5ef3d3cd9f3a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0019d7dc8c72839d238065473a62b137c3c350f5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7cc4d748a132377ffe63534e9777d7541a3253c5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c4d5caa79e6d88bb3f98bfbefa3bfa039c7e157a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f88fb96869b6ac3ed4dac7d23310a9327d3c89c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 609a46a72764dc71104aa5d7b1ca5f53d4237a75 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 394ed7006ee5dc8bddfd132b64001d5dfc0ffdd3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1e6234c27abf041e4c8cd1a799950e7cd9104f6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 192472f9673b18c91ce618e64e935f91769c50e7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b03933057df80ea9f860cc616eb7733f140f866e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 89422841e46efa99bda49acfbe33ee1ca5122845 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e84d05f4bbf7090a9802e9cd198d1c383974cb12 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d9310055f364cf3fa97f663287c596920d6e7e5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ef48ca5f54fe31536920ec4171596ff8468db5fe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 694265664422abab56e059b5d1c3b9cc05581074 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7b3ef45167e1c2f7d1b7507c13fcedd914f87da9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cbb58869063fe803d232f099888fe9c23510de7b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 33964afb47ce3af8a32e6613b0834e5f94bdfe68 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 33819a21f419453bc2b4ca45b640b9a59361ed2b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 98e6edb546116cd98abdc3b37c6744e859bbde5c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17a172920fde8c6688c8a1a39f258629b8b73757 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d061a1a506b71234f783628ba54a7bdf79bbce9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 24740f22c59c3bcafa7b2c1f2ec997e4e14f3615 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 78d2cd65b8b778f3b0cfef5268b0684314ca22ef ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bcd37b68533d0cceb7e73dd1ed1428fa09f7dc17 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 21b4db556619db2ef25f0e0d90fef7e38e6713e5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55b67e8194b8b4d9e73e27feadbf9af6593e4600 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9f73e8ba55f33394161b403bf7b8c2e0e05f47b0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de3b9639a4c2933ebb0f11ad288514cda83c54fe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- af5abca21b56fcf641ff916bd567680888c364aa ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 258403da9c2a087b10082d26466528fce3de38d4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d4fd7fca515ba9b088a7c811292f76f47d16cd7b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 08457a7a6b6ad4f518fad0d5bca094a2b5b38fbe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ceee7d7e0d98db12067744ac3cd0ab3a49602457 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3288a244428751208394d8137437878277ceb71f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 624556eae1c292a1dc283d9dca1557e28abe8ee3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b425301ad16f265157abdaf47f7af1c1ea879068 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f97653aa06cf84bcf160be3786b6fce49ef52961 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ca288d443f4fc9d790eecb6e1cdf82b6cdd8dc0d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 00ce31ad308ff4c7ef874d2fa64374f47980c85c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a4287f65878000b42d11704692f9ea3734014b4c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 01ab5b96e68657892695c99a93ef909165456689 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4d36f8ff4d1274a8815e932285ad6dbd6b2888af ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f683c6623f73252645bb2819673046c9d397c567 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bc31651674648f026464fd4110858c4ffeac3c18 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1e2f63e64875a29e8c01a7ae17f5744680167a5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fd96cceded27d1372bdc1a851448d2d8613f60f3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f068cdc5a1a13539c4a1d756ae950aab65f5348b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6917ae4ce9eaa0f5ea91592988c1ea830626ac3a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3bd05b426a0e3dec8224244c3c9c0431d1ff130 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9059525a75b91e6eb6a425f1edcc608739727168 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f1401803ccf7db5d897a5ef4b27e2176627c430e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d2ebc6193f7205fd1686678a5707262cb1c59bb0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 73959f3a2d4f224fbda03c8a8850f66f53d8cb3b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8d2239f24f6a54d98201413d4f46256df0d6a5f3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28a33ca17ac5e0816a3e24febb47ffcefa663980 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a32a6bcd784fca9cb2b17365591c29d15c2f638e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 58fb1187b7b8f1e62d3930bdba9be5aba47a52c6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1fe889ea0cb2547584075dc1eb77f52c54b9a8c4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fde6522c40a346c8b1d588a2b8d4dd362ae1f58f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1c6d7830d9b87f47a0bfe82b3b5424a32e3164ad ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 402a6c2808db4333217aa300d0312836fd7923bd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 47e3138ee978ce708a41f38a0d874376d7ae5c78 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0369384c8b79c44c5369f1b6c05046899f8886da ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f963881e53a9f0a2746a11cb9cdfa82eb1f90d8c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- feb1ea0f4aacb9ea6dc4133900e65bf34c0ee02d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 18be0972304dc7f1a2a509595de7da689bddbefa ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55dcc17c331f580b3beeb4d5decf64d3baf94f2e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 77cd6659b64cb1950a82e6a3cccdda94f15ae739 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 129f90aa8d83d9b250c87b0ba790605c4a2bb06a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 791765c0dc2d00a9ffa4bc857d09f615cfe3a759 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 57050184f3d962bf91511271af59ee20f3686c3f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 160081b9a7ca191afbec077c4bf970cfd9070d2c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 778234d544b3f58dd415aaf10679d15b01a5281f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1e2265a23ecec4e4d9ad60d788462e7f124f1bb7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 91725f0fc59aa05ef68ab96e9b29009ce84668a5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c4f49fb232acb2c02761a82acc12c4040699685d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aea0243840a46021e6f77c759c960a06151d91c9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0fdf6c3aaff49494c47aaeb0caa04b3016e10a26 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d2d9197cfe5d3b43cb8aee182b2e65c73ef9ab7b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c0ef65b43688b1a4615a1e7332f6215f9a8abb19 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ac62760c52abf28d1fd863f0c0dd48bc4a23d223 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 69dd8750be1fbf55010a738dc1ced4655e727f23 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be97c4558992a437cde235aafc7ae2bd6df84ac8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f164627a85ed7b816759871a76db258515b85678 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1044116d25f0311033e0951d2ab30579bba4b051 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b82dbf538ac0d03968a0f5b7e2318891abefafaa ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e837b901dcfac82e864f806c80f4a9cbfdb9c9f3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1d2307532d679393ae067326e4b6fa1a2ba5cc06 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 06590aee389f4466e02407f39af1674366a74705 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c9dbf201b4f0b3c2b299464618cb4ecb624d272c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 38b3cfb9b24a108e0720f7a3f8d6355f7e0bb1a9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d9240918aa03e49feabe43af619019805ac76786 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- abaefc59a7f2986ab344a65ef2a3653ce7dd339f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fe5289ed8311fecf39913ce3ae86b1011eafe5f7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- af32b6e0ad4ab244dc70a5ade0f8a27ab45942f8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28ed48c93f4cc8b6dd23c951363e5bd4e6880992 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6c1faef799095f3990e9970bc2cb10aa0221cf9c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 86ea63504f3e8a74cfb1d533be9d9602d2d17e27 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f91495e271597034226f1b9651345091083172c4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c1169f6ea406fec1e26e99821e18e66437e65eb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7a0b79ee574999ecbc76696506352e4a5a0d7159 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a243827ab3346e188e99db2f9fc1f916941c9b1a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1d8a577ffc6ad7ce1465001ddebdc157aecc1617 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6fbb69306c0e14bacb8dcb92a89af27d3d5d631f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be8955a0fbb77d673587974b763f17c214904b57 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 25dca42bac17d511b7e2ebdd9d1d679e7626db5f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e746f96bcc29238b79118123028ca170adc4ff0f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a28942bdf01f4ddb9d0b5a0489bd6f4e101dd775 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e79999c956e2260c37449139080d351db4aa3627 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1e80445ad5cb6da4c0070d7cb8af89da3b0803b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cac6e06cc9ef2903a15e594186445f3baa989a1a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6d9b1f4f9fa8c9f030e3207e7deacc5d5f8bba4e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b01ca6a3e4ae9d944d799743c8ff774e2a7a82b6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 29eb123beb1c55e5db4aa652d843adccbd09ae18 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1ee2afb00afaf77c883501eac8cd614c8229a444 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1906ee4df9ae4e734288c5203cf79894dff76cab ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f606937a7a21237c866efafcad33675e6539c103 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e14e3f143e7260de9581aee27e5a9b2645db72de ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ecf37a1b4c2f70f1fc62a6852f40178bf08b9859 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1e2b46138ba58033738a24dadccc265748fce2ca ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 257a8a9441fca9a9bc384f673ba86ef5c3f1715d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 18e3252a1f655f09093a4cffd5125342a8f94f3b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1873db442dc7511fc2c92fbaeb8d998d3e62723d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de84cbdd0f9ef97fcd3477b31b040c57192e28d9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4b4a514e51fbc7dc6ddcb27c188159d57b5d1fa9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 365fb14ced88a5571d3287ff1698582ceacd80d6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ff864138cd1e680a78522c26b583639f8f5e313 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17af1f64d5f1e62d40e11b75b1dd48e843748b49 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 26e138cb47dccc859ff219f108ce9b7d96cbcbcd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea81f14dafbfb24d70373c74b5f8dabf3f2225d9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 583e6a25b0d891a2f531a81029f2bac0c237cbf9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1019d4cf68d1acdbb4d6c1abb7e71ac9c0f581af ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 38d59fc8ccccae8882fa48671377bf40a27915a7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 07996a1a1e53ffdd2680d4bfbc2f4059687859a5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 01eac1a959c1fa5894a86bf11e6b92f96762bdd8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6d1212e8c412b0b4802bc1080d38d54907db879d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 600fcbc1a2d723f8d51e5f5ab6d9e4c389010e1c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6f8ce8901e21587cd2320562df412e05b5ab1731 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 57a4e09294230a36cc874a6272c71757c48139f2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cfb278d74ad01f3f1edf5e0ad113974a9555038d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fbe062bf6dacd3ad63dd827d898337fa542931ac ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8caeec1b15645fa53ec5ddc6e990e7030ffb7c5a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8b86f9b399a8f5af792a04025fdeefc02883f3e5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0974f8737a3c56a7c076f9d0b757c6cb106324fb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3323464f85b986cba23176271da92a478b33ab9c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c34343d0b714d2c4657972020afea034a167a682 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de5bc8f7076c5736ef1efa57345564fbc563bd19 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 282018b79cc8df078381097cb3aeb29ff56e83c6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e6bece08aea01859a232e99a1e1ad8cc1eb7d36 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c36f3648e39ace752c67c71867693ce1eee52a3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c083f3d0b853e723d0d4b00ff2f1ec5f65f05cba ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 538820055ce1bf9dd07ecda48210832f96194504 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a988e6985849e4f6a561b4a5468d525c25ce74fe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55e757928e493ce93056822d510482e4ffcaac2d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 837c32ba7ff2a3aa566a3b8e1330e3db0b4841d8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae5a69f67822d81bbbd8f4af93be68703e730b37 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1090701721888474d34f8a4af28ee1bb1c3fdaaa ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 63761f4cb6f3017c6076ecd826ed0addcfb03061 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e1c89ec97ec90037583e85d0e9e71e9c845a19b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2054561da184955c4be4a92f0b4fa5c5c1c01350 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e41c727be8dbf8f663e67624b109d9f8b135a4ab ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a25347d7f4c371345da2348ac6cceec7a143da2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2c8d26d3b25b864ad48e6de018757266b59f708 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 143b927307d46ccb8f1cc095739e9625c03c82ff ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c1a87d11df666d308d14e4ae7ee0e9d614296b6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 15941ca090a2c3c987324fc911bbc6f89e941c47 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22a0289972b365b7912340501b52ca3dd98be289 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- df0892351a394d768489b5647d47b73c24d3ef5f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f78d4a28f307a9d7943a06be9f919304c25ac2d9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d6ceabf5b90e7c0690360fc30774d36644f563c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3e2ba9c2028f21d11988558f3557905d21e93808 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 772b95631916223e472989b43f3a31f61e237f31 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b75c3103a700ac65b6cd18f66e2d0a07cfc09797 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be06e87433685b5ea9cfcc131ab89c56cf8292f2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 898d47d1711accdfded8ee470520fdb96fb12d46 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e5c0002d069382db1768349bf0c5ff40aafbf140 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 69361d96a59381fde0ac34d19df2d4aff05fb9a9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b48e4d3aa853687f420dc51969837734b70bfdec ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 654e54d200135e665e07e9f0097d913a77f169da ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e825f8b69760e269218b1bf1991018baf3c16b04 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13dd59ba5b3228820841682b59bad6c22476ff66 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 82b8902e033430000481eb355733cd7065342037 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 583cd8807259a69fc01874b798f657c1f9ab7828 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- def0f73989047c4ddf9b11da05ad2c9c8e387331 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 619c11787742ce00a0ee8f841cec075897873c79 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 501bf602abea7d21c3dbb409b435976e92033145 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- edd9e23c766cfd51b3a6f6eee5aac0b791ef2fd0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53152a824f5186452504f0b68306d10ebebee416 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 997b7611dc5ec41d0e3860e237b530f387f3524a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c3c271b0d6b5f56b86e3f177caf3e916b509b52 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3776f7a766851058f6435b9f606b16766425d7ca ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 72bcdbd0a0c8cc6aa2a7433169aa49c7fc19b55b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 619662a9138fd78df02c52cae6dc89db1d70a0e5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 09c3f39ceb545e1198ad7a3f470d4ec896ce1add ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4956c1e618bfcfeef86c6ea90c22dd04ca81b9db ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a8a448b7864e21db46184eab0f0a21d7725d074f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5d996892ac76199886ba3e2754ff9c9fac2456d6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6bfdf93201ea413affd4c8fbe406ea2b4a7c1b6b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6a252661c3bf4202a4d571f9c41d2afa48d9d75f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3e14ab55a060a5637e9a4a40e40714c1f441d952 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 867129e2950458ab75523b920a5e227e3efa8bbc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4375386fb9d8c7bc0f952818e14fb04b930cc87d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b27292936c81637f6b9a7141dafaad1126f268e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f96ee7463e2454e95bf0d77ca4fe5107d3f24d68 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b3cde0ee162b8f0cb67da981311c8f9c16050a62 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 76fd1d4119246e2958c571d1f64c5beb88a70bd4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec28ad575ce1d7bb6a616ffc404f32bbb1af67b2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 180a5029bc3a2f0c1023c2c63b552766dc524c41 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b72e2704022d889f116e49abf3e1e5d3e3192d3b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a803803f40163c20594f12a5a0a536598daec458 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ab59f78341f1dd188aaf4c30526f6295c63438b1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0bb2fc8129ed9adabec6a605bfe73605862b20d3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 61138f2ece0cb864b933698174315c34a78835d1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 15ee0ac0d56a5fb5ba13fae4288621ddd2185f17 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50e469109eed3a752d9a1b0297f16466ad92f8d2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 400d728c99ddeae73c608e244bd301248b5467fc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 65c9fe0baa579173afa5a2d463ac198d06ef4993 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 77cde0043ceb605ed2b1beeba84d05d0fbf536c1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c69b6b979e3d6bd01ec40e75b92b21f7a391f0ca ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d86e77edd500f09e3e19017c974b525643fbd539 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b3feddd1269a0b0976f4eef2093cb0dbf258f99 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dcf2c3bd2aaf76e2b6e0cc92f838688712ebda6c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a38a0053d31d0285dd1e6ebe6efc28726a9656cc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 697702e72c4b148e987b873e6094da081beeb7cf ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b1a2271a03313b561f5b786757feaded3d41b23f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bc66da0d66a9024f0bd86ada1c3cd4451acd8907 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 16a0c64dd5e69ed794ea741bc447f6a1a2bc98e5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 54844a90b97fd7854e53a9aec85bf60564362a02 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a97d21936200f1221d8ddd89202042faed1b9bcb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 35057c56ce118e4cbd0584bd4690e765317b4c38 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6a417f4cf2df39704aa4c869e88d14e9806894a7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c76a8c5499d22b9c0b4c56f03b671033eb9f9bdd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3326f34712f6a96c162033c7ccf370c8b7bc1ead ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f6102b349cbef03667d5715fcfae3161701a472d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ac4133f51817145e99b896c7063584d4dd18ad59 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8e29a91324ca7086b948a9e3a4dbcbb2254a24a7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4ed59a86909b142ede105dd9262915c0e2993ac ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e729429631c84c3bd5602edcab3e7c2ab1dcce0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 12276fedec49c855401262f0929f088ebf33d2cf ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7d00fa4f6cad398250ce868cef34357b45abaad3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c05ef0e7543c2845fd431420509476537fefe2b0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1eae9d1532e037a4eb08aaee79ff3233d2737f31 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bae67b87039b3364bdc22b8ef0b75dd18261814c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 615de50240aa34ec9439f81de8736fd3279d476d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f22ddca351c45edab9f71359765e34ae16205fa1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bac518bfa621a6d07e3e4d9f9b481863a98db293 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4f7255c2c1d9e54fc2f6390ad3e0be504e4099d3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8775b6417b95865349a59835c673a88a541f3e13 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7ba46b8fba511fdc9b8890c36a6d941d9f2798fe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2740d2cf960cec75e0527741da998bf3c28a1a45 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1391bf06a839746bd902dd7cba2c63d1e738d37 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f28a2041f707986b65dbcdb4bb363bb39e4b3f77 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- accfe361443b3cdb8ea43ca0ccb8fbb2fa202e12 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7ef66a66dc52dcdf44cebe435de80634e1beb268 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fa98250e1dd7f296b36e0e541d3777a3256d676c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d638bf6e55bc64c230999c9e42ed1b02505d0ce ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aaeb986f3a09c1353bdf50ab23cca8c53c397831 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c92df685d6c600a0a3324dff08a4d00d829a4f5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e40b5f075bdb9d6c2992a0a1cf05f7f6f4f101a3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5f92b17729e255ca01ffb4ed215d132e05ba4da ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 279d162f54b5156c442c878dee2450f8137d0fe3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1194dc4322e15a816bfa7731a9487f67ba1a02aa ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f6c8072daa942e9850b9d7a78bd2a9851c48cd2c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f73385a5f62a211c19d90d3a7c06dcd693b3652d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 202216e2cdb50d0e704682c5f732dfb7c221fbbc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1dd7d6468a54be56039b2e3a50bcf171d8e854ff ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5020eb8ef37571154dd7eff63486f39fc76fea7f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3bee808e15707d849c00e8cea8106e41dd96d771 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 331ddc27a22bde33542f8c1a00b6b56da32e5033 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c0dcc6fb3dfd39df5970d6da340a949902ae629 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f6c32a918544aa239a6c636666ce17752e02f15 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 84f9b603b44e0225391f1495034e0a66514c7368 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 84be1263abac102d8b4bc49096530c6fd45a9b80 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 59b05d06c1babcc8cd1c541716ca25452056020a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f4bc8ee9aeeec8bf7aa31c627e50761dd8bb2db ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1da744421619e134ed3ff2781b4d97fee78d9cd4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d884adc80c80300b4cc05321494713904ef1df2d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d2ff5822dbefa1c9c8177cbf9f0879c5cf4efc5c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 05d2687afcc78cd192714ee3d71fdf36a37d110f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ace1fed6321bb8dd6d38b2f58d7cf815fa16db7a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e0f2bb42b56f770c50a6ef087e9049fa6ac11fb5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6226720b0e6a5f7cb9223fc50363def487831315 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2df1f56cccab13d5c92abbc6b18be725e7b4833 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f1e9df152219e85798d78284beeda88f6baa9ec7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 819d6aceeb4d31c153de58081b21ad4f8b559c0e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b0e84a3401c84507dc017d6e4f57a9dfdb31de53 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4186a2dbbd48fd67ff88075c63bbd3e6c1d8a2df ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 58d692e2a1d7e3894dbed68efbcf7166d6ec3fb7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b67bd4c730273a9b6cce49a8444fb54e654de540 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 52bb0046c0bf0e50598c513e43b76d593f2cbbff ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fc2201e660014c5d91fec8e3c3a3fa5a66dcf33b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 179a1dcc65366a70369917d87d00b558a6d0c04d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6da04adff0b96c5163b0c2530028b72be2fd26fd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 07eaa4ce2696a88ec0db6e91f191af1e48226aca ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 637eadce54ca8bbe536bcf7c570c025e28e47129 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1a4bfd979e5d4ea0d0457e552202eb2effc36cac ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 00c5497f190172765cc7a53ff9d8852a26b91676 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f41d42ee7e264ce2fc32cea555e5f666fa1b1fe9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9117cdbb48ffc458d809715c6ab6bc6b416ef621 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b372fdd54bab2ad6639756958978660b12095c3c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2dc5d68491eb3c73ae8478bf6edef80b18564a13 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4251bd59fb8e11e40c40548cba38180a9536118c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2834177c0fdf6b1af659e460fd3348f468b8ab0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7cdfaceebe916c91acdf8de3f9506989bc70ad65 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 806450db9b2c4a829558557ac90bd7596a0654e0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c4cde8df886112ee32b0a09fcac90c28c85ded7f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a885d23bab51b0c00be2780055ff63b3f3c1a4c6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 555b0efc2c19aa8cf7c548b4097bd20a73f572ca ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5915114cdca6f09fa2355162a43596f5d20273be ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 451561c252323e74696dbe0be36601c95a75a8c3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3c0a65226f038c58fc6d6ed525f38fc00b3579b7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2e6d110fbfa1f2e6a96bc8329e936d0cf1192844 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 39229db70e71a6be275dafb3dd9468930e40ae48 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f9bbdc87a7263f479344fcf67c4b9fd6005bb6cd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 81279eeac5c525354cbe19b24a6f42219407c1f9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e99d9ab2acfaf2ebb4b150736590d6a4e33f449 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13ba1d87ab8fc45d2aed25662bf91053b0db5f9f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2454ae89983a4496a445ce347d7a41c0bb0ea7ae ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c0c2fc4ee2d8a5d0a2de50ba882657989dedc51 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c68459a17ff59043d29c90020fffe651b2164e6a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 832b56394b079c9f6e4c777934447a9e224facfe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9f51eeb2f9a1efe22e45f7a1f7b963100f2f8e6b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 43ab2afba68fd0e1b5d138ed99ffc788dc685e36 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50af864298826feaf94772982bbc7b222b4b4242 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d9671e15703918048982c9ff4e2e0fef21ede320 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 75c161cbc017a7d176dd0d7b937db26b3ce637a1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 84968314ddcbaa0e4b685c71c6ea5524b3aefc80 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 52ab307935bd2bbda52f853f9fc6b49f01897727 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b01824b1aecf8aadae4501e22feb45c20fb26bce ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5df44408218003eb49e3b8fc94329c5e8b46c7d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ce1193c851e98293a237ad3d2d87725c501e89f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e648efdcc1ca904709a646c1dbc797454a307444 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20ef1924b832a3788849793c0ee6b46dd00d4520 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 46c9a0df4403266a320059eaa66e7dce7b3d9ac4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53ed0d43ab950d4deeefd238c7685dabef943800 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3410fdc42075bd788a78f4b2a68c5e2cc0930409 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bca0cb7f507d6a21a652307737a57057692d2f79 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 07c20b4231b12fee42d15f1c44c948ce474f5851 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 708b8dda8e7b87841a5f39c60b799c514e75a9c7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6745f4542cfb74bbf3b933dba7a59ef2f54a4380 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2da2b90e6930023ec5739ae0b714bbdb30874583 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b426893ce331f71165c82b1a86252cd104ae3db ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4748e813980e1316aa364e0830a4dc082ff86eb0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a67bf61b5017e41740e997147dc88282b09c6f86 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be53c1f33107d6891c47c784aeadd6e5ddf78e8c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4c39f9da792792d4e73fc3a5effde66576ae128c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 92a97480edcc0f0de787a752bf90feed0445dd39 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ccde80b7a3037a004a7807a6b79916ce2a1e9729 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a28d3d18f9237af5101eb22e506a9ddda6d44025 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 572ace094208c28ab1a8641aedb038456d13f70b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5593dc014a41c563ba524b9303e75da46ee96bd5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2b93f2a91e0791be3ffda1f753aa6c377bcab4d3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9a4b1d4d11eee3c5362a4152216376e634bd14cf ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2b7f5cb25e0e03e06ec506d31c001c172dd71ef6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9a119924bd314934158515a1a5f5877be63f6f91 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6eeae8b24135b4de05f6d725b009c287577f053d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0c4269a21b9edf8477f2fee139d5c1b260ebc4f8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ee861ae7a7b36a811aa4b5cc8172c5cbd6a945b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ac36642ce1cde75b222e20f585ddfd240f064da2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bdf2e667f969e5c22985dd232fe3f107fe26e750 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c76852d0bff115720af3f27acdb084c59361e5f6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 15b9129ec639112e94ea96b6a395ad9b149515d1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ead94f267065bb55303f79a0a6df477810b3c68d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3cb5ba18ab1a875ef6b62c65342de476be47871b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fa44e6b579917814740393efc0b990e0fbbbdaf3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ba8d148121b1dbba444849fe9549f36a7d17db28 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bcd57e349c08bd7f076f8d6d2f39b702015358c1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7a7eedde7f5d5082f7f207ef76acccd24a6113b1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ac1cec7066eaa12a8d1a61562bfc6ee77ff5f54d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dbc18b92362f60afc05d4ddadd6e73902ae27ec7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 386d1af07bf1f32fac5e97612441488894f2ffed ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50c90666c4de8ac93accdf4040e3eb010a82a46a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ca61d4c68dad68901f8a7364dd210ef27a8b4c6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 101fb1df36f29469ee8f4e0b9e7846d856b87daa ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6acec357c7609fdd2cb0f5fdb1d2756726c7fe98 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6bca9899b5edeed7f964e3124e382c3573183c68 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5f23379c496942ea6fe898a7a823b65530c126a7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9374a916588d9fe7169937ba262c86ad710cfa74 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f4fa1cb3c3e84cad8b74edb28531d2e27508be26 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 615fc1984b0cc09c8eeab51a1d1c4e05b583b4a7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4582f805156095604fe07e71195cd9aa43d7a34 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20f202d83bdf1f332a3cb8f010bcf8bf3c2807bd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5eb0f2c241718bc7462be44e5e8e1e36e35f9b15 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2792e534dd55fe03bca302f87a3ea638a7278bf1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec3d91644561ef59ecdde59ddced38660923e916 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 79cfe05054de8a31758eb3de74532ed422c8da27 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ee31065abea645cbc2cf3e54b691d5983a228b2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 86fa577e135713e56b287169d69d976cde27ac97 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b89f39432cdb395f5fbb9553b56595d29e2b773 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ef1f89abe5b2334705ee8f1a6da231b0b6c9a50 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e70f3218e910d2b3dcb8a5ab40c65b6bd7a8e9a8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b65df78a10c3bcc40d18f3e926bb5a49821acc31 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8430529e1a9fb28d8586d24ee507a8195c370fa5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a58a60ac5f322eb4bfd38741469ff21b5a33d2d5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 00499d994fea6fb55a33c788f069782f917dbdd4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 291d2f85bb861ec23b80854b974f3b7a8ded2921 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b2ccae0d7fca3a99fc6a3f85f554d162a3fdc916 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6ffd4b0193acf86b6a6e179f8673ed38bad3191d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ff3d142387e1f38b0ed390333ea99e2e23d96e35 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b2a14e4b96a0ffc5353733b50266b477539ef899 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d1bd99c0a376dec63f0f050aeb0c40664260da16 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 78a46c432b31a0ea4c12c391c404cd128df4d709 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 461fd06e1f2d91dfbe47168b53815086212862e4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4b43ca7ff72d5f535134241e7c797ddc9c7a3573 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 39f85c4358b7346fee22169da9cad93901ea9eb9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- beb76aba0c835669629d95c905551f58cc927299 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20c34a929a8b2871edd4fd44a38688e8977a4be6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea33fe8b21d2b02f902b131aba0d14389f2f8715 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b7a5c05875a760c0bf83af6617c68061bda6cfc5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ba2aef8f59009756567a53daaf918afa851c304 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8b5121414aaf2648b0e809e926d1016249c0222c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6ba8b8b91907bd087dfe201eb0d5dae2feb54881 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5117c9c8a4d3af19a9958677e45cda9269de1541 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- af9e37c5c8714136974124621d20c0436bb0735f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3c658c16f3437ed7e78f6072b6996cb423a8f504 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1496979cf7e9692ef869d2f99da6141756e08d25 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 58e2157ad3aa9d75ef4abb90eb2d1f01fba0ba2b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0725af77afc619cdfbe3cec727187e442cceaf97 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 685d6e651197d54e9a3e36f5adbadd4d21f4c7e5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5e062f4d043234312446ea9445f07bd9dc309ce3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1083748b828dfca6a72014434850da0f2a0579ab ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4c73e9cd66c77934f8a262b0c1bab9c2f15449ba ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 59e26435a8d2008073fc315bafe9f329d0ef689a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b197b2dbb527de9856e6e808339ab0ceaf0a512d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7184340f9d826a52b9e72fce8a30b21a7c73d5be ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9dfd6bcca5499e1cd472c092bc58426e9b72cccc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a519942a295cc39af4eebb7ba74b184decae13fb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6c486b2e699082763075a169c56a4b01f99fc4b9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 11ec2e08e1796b5914cd9c4830813482753ecfa0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c53eeaca19163b2b5484304a9ecce3ef92164d70 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3c770f8e98a0079497d3eb5bc31e7260cc70cc63 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 36f838e7977e62284d2928f65cacf29771f1952f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f9cec00938d9059882bb8eabdaf2f775943e00e5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 44a601a068f4f543f73fd9c49e264c931b1e1652 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4712c619ed6a2ce54b781fe404fedc269b77e5dd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5da34fddda2ea6de19ecf04efd75e323c4bb41e4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3942cdff6254d59100db2ff6a3c4460c1d6dbefe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 25945899a0067a2dbeeae7a8362a6d68bbc5c6ba ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c3bbc43d097656b54c808290ce0c656d127ce47 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d9e7f1121d3bdbb08291c7164ad622350544a21 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b999cae064fb6ac11a61a39856e074341baeefde ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b9776e88f7abb59cebac8733c04cccf6eee1c60 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dc518251eb64c3ef90502697a7e08abe3f8310b2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 753e908dcea03cf9962cf45d3965cf93b0d30d94 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dc1fcf372878240e0a1af20641d361f14aea7252 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4fe5cfa0e063a8d51a1eb6f014e2aaa994e5e7d4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f2b19de3301e76ab3a6187a49c9c93ff78bafbd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bb0ac304431e8aed686a8a817aaccd74b1ba4f24 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0cd09bd306486028f5442c56ef2e947355a06282 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1047b41e2e925617474e2e7c9927314f71ce7365 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 146a6fe18da94e12aa46ec74582db640e3bbb3a9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9e14356d12226cb140b0e070bd079468b4ab599b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b00f3689aa19938c10576580fbfc9243d9f3866c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f62c9b9c0c9bda792c3fa531b18190e97eb53509 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 30d822a468dc909aac5c83d078a59bfc85fc27aa ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13a26d4f9c22695033040dfcd8c76fd94187035b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ddc5496506f0484e4f1331261aa8782c7e606bf2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 87afd252bd11026b6ba3db8525f949cfb62c90fc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5bb812243dd1815651281a54c8191fc8e2bc2d82 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5de63b40dbb8fef7f2f46e42732081ef6d0d8866 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 33fa178eeb7bf519f5fff118ebc8e27e76098363 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aa921fee6014ef43bb2740240e9663e614e25662 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 81d8788d40867f4e5cf3016ef219473951a7f6ed ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c23ca3cd9b9bbeaca1b79068dee1eae045be5b6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2f8e6f7ab1e6dbd95c268ba0fc827abc62009013 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ec61d4f7208a2713adeafb947f65fdae0947067 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3c9f55dd8e6697ab2f9eaf384315abd4cbefad38 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7b50af0a20bcc7280940ce07593007d17c5acabd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a7a4388eeaa4b6b94192dce67257a34c4a6cbd26 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 29c20c147b489d873fb988157a37bcf96f96ab45 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- eb8cec3cab142ef4f2773b6fc9d224461a6bf85d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fa8fe4cad336a7bdd8fb315b1ce445669138830c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bb509603e8303cd8ada7cfa1aaa626085b9bb6d6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6662422ba52753f8b10bc053aba82bac3f2e1b9c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d3a24b22d340c62fafc0e75a349c0ffe34d99d7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b1f32e231d391f8e6051957ad947d3659c196b2b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5613079f2494808f048b81815bf708debf7339d2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d7781e1056c672d5212f1aaf4b81ba6f18e8dd8b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a4fb3091a75005b047fbea72f812c53d27b15412 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2e68d907022c84392597e05afc22d9fe06bf0927 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a10aa36bc6a82bd50df6f3df7d6b7ce04a7070f1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 764cc6e344bd034360485018eb750a0e155ca1f6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3131d1a5295508f583ae22788a1065144bec3cee ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a2856af1d9289ee086b10768b53b65e0fd13a335 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 125b4875b5035dc4f6bad4351651a4236b82baeb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5e52a00c81d032b47f1bc352369be3ff8eb87b27 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d97afa24ad1ae453002357e5023f3a116f76fb17 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 138aa2b8b413a19ebf9b2bbb39860089c4436001 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1adc79ac67e5eabaa8b8509150c59bc5bd3fd4e6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 590638f9a56440a2c41cc04f52272ede04c06a43 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5d3e2f7f57620398df896d9569c5d7c5365f823d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6fcbda4e363262a339d1cacbf7d2945ec3bd83f0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- babf5765da3e328cc1060cb9b37fbdeb6fd58350 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 038f183313f796dc0313c03d652a2bcc1698e78e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c231551328faa864848bde6ff8127f59c9566e90 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8df638c22c75ddc9a43ecdde90c0c9939f5009e7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- befb617d0c645a5fa3177a1b830a8c9871da4168 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 35a09c0534e89b2d43ec4101a5fb54576b577905 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b9d6494f1075e5370a20e406c3edb102fca12854 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5047344a22ed824735d6ed1c91008767ea6638b7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a6604a00a652e754cb8b6b0b9f194f839fc38d7c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 127e511ea2e22f3bd9a0279e747e9cfa9509986d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c8c50d8be2dc5ae74e53e44a87f580bf25956af9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 972a8b84bb4a3adec6322219c11370e48824404e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 152bab7eb64e249122fefab0d5531db1e065f539 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ef592d384ad3e0ead5e516f3b2c0f31e6f1e7cab ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cf37099ea8d1d8c7fbf9b6d12d7ec0249d3acb8b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4bf8e89e6784e121ddc32990d586e2276ec84596 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2f6a6e35d003c243968cdb41b72fbbe609e56841 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dd76b9e72b21d2502a51e3605e5e6ab640e5f0bd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56823868efddd3bdbc0b624cdc79adc3a2e94a75 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22757ed7b58862cccef64fdc09f93ea1ac72b1d2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bfdc8e26d36833b3a7106c306fdbe6d38dec817e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0425bc64384fe9a6a22edb7831d6e8c1756e2c7e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aa5e366889103172a9829730de1ba26d3dcbc01b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50a9920b1bd9e6e8cf452c774c499b0b9014ccef ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7d6332820eaad3a6d3b0abc93424469a8ef7083a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 43eb1edf93c381bf3f3809a809df33dae23b50d9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e64957d8e52d7542310535bad1e77a9bbd7b4857 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a534eba97db3c2cfb2926368756fd633d25c056 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d4e56f627f94d93c49db40ae5944f880341f4203 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b377c07200392ac35a6ed668673451d3c9b1f5c7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 989671780551b7587d57e1d7cb5eb1002ade75b4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 14cef2bb3e0de02f306fa37c268d6c276326c002 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b9cb007076542e32f7b99bb18bc6ec424f3b407b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d3ce120c9acc7d9d4ce86aa1f07b027d1c45a9a1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0b3ecf2dcace76b65765ddf1901504b0b4861b08 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f3050b578081b24e5cf244fa252f385ffca2bf86 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 11b1f6edc164e2084e3ff034d3b65306c461a0be ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3d5159679d17c1270ad72941922d0f18bdd6415 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 985093bae160419782b3d3cb9151e2e58625fd52 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c04c60f12d3684ecf961509d1b8db895e6f9aac0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53d26977f1aff8289f13c02ee672349d78eeb2f0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 564db4f20bd7189a50a12d612d56ed6391081e83 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 657a57adbff49c553752254c106ce1d5b5690cf8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 26029c29765043376370a2877b7e635c17f5e76d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cbf957a36f5ed47c4387ee8069c56b16d1b4f558 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 924da9604d6474fd1be99dffdcc539eaaaa31626 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9840afda82fafcc3eaf52351c64e2cfdb8962397 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3fd37230e76a014cf5c45d55daf0be2caa6948b7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 345d6be7829c6dab359390ebc5e1a7ae0c6d48bb ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a9eeebeddaa20d10881ad505cc362a3a391e15b2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 225999e9442c746333a8baa17a6dbf7341c135ca ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9513aa01fab73f53e4fe18644c7d5b530a66c6a1 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 048acc4596dc1c6d7ed3220807b827056cb01032 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bfdf98cadedfa6042117cd7a83952ca2f465d26f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 919164df96d9f956c8be712f33a9a037b097745b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9acc7806d6bdb306a929c460437d3d03e5e48dcd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a07cdbae1d485fd715a5b6eca767f211770fea4d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 95a83a7de5d3ce84206b9267962c32df4d071c21 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e063d101face690b8cf4132fa419c5ce3857ef44 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a8f8582274cd6a368a79e569e2995cee7d6ea9f9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aed099a73025422f0550f5dd5c3e4651049494b2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7fda0ec787de5159534ebc8b81824920d9613575 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17852bde65c12c80170d4c67b3136d8e958a92a9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c63cd9873bf733c068a5f183442ec82873fef1fc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9946e0ce07c8d93a43bd7b8900ddf5d913fe3b03 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5a45790a8699a384c3d218ac4ca8a53c109fd944 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a5cf1bc1d3e38ab32a20707d66b08f1bb0beae91 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5b01b589e7a19d6be5bd6465e600f84aa8015282 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 178dff753350014f6395f41bc21f1adddf73c8e0 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b372e26366348920eae32ee81a47b469b511a21f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 66beac619ba944afeca9d15c56ccc60d5276a799 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a0d828fcb1964a578ef3979297c59a41aedba932 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3980f11a9411d0b487b73279346cfae938845e7a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 93e19791659c279f4f7e33a433771beca65bf9ea ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8a0eee3989abd3a5d6d47d0298bd056a954d379b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 579e2c07bbb39577fa32fed8cb42297c1c5516d8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2effd7a10798a1e8e53bb546a67b2ccdea882c50 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fd5f111439e7a2e730b602a155aa533c68badbf8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0aa1ce356c7c3d53d6ee035b4c7bcf425e108cdc ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f347c6da5e83b137c337f9ccb190090c27cfc953 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- abc2e538c6f2fe50f93e6c3fe927236bb41f94f4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b38020ae17ed9f83af75ce176e96267dcce6ecbd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 93ad8da5a8c6ddcbe67abae2cc4a7aad8084e736 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 52654c0216dcbe3fa2d9afb1de12c65d18f6a7a4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b63b3bc493a4a44ba1d857c78e4496e40f1d7b8 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ef9395f5ffe75f4e43d80cd1fa7b34c8a4db66fe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5083752d5d02d6c46bc2f18ba53a28d119af5b9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 24effa4861d6d1e8cffe848ae63fa2ed40be03f6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9aa93b5890acb152c5824a8f75c221cf1addfd1b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d203a0da0c709d301e973a9fe3569efd1fb2bd3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 57a561cda141a0fed3129f4f3488e3b91805e638 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4043468de4fc448b6fda670f33b7f935883793a7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- edf9fc528277a53ec37d1bd79fb4f8608cce11ae ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6e1be3032d521e3bf2f49fc87f82c8f978079ea6 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bf2083922b7bccc31917bf9cdb74e3d4892c2600 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- eba67171bf6ea653dfb6a6ae288f3c1d10829870 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 277be842bf30848e7292a931169bd4c8ff726dee ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 79ec3a5191f9dfd398d98fe7372ad841f34876ed ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b919010b0459b2540fb609c5d1aad0b8dc0fab01 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 105fea3ef3be4b47cc3602423919329162dfcecf ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b5278c514068f469f2fca7638ef1e1b27556a37a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7f34a25eaa6de187797442bc6e0514289d77fed2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a935501a2f62d103cf9d69d775399dae2e7dfead ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 12b32450c210cec1fdd8b2c19d564776e8054aa3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 26719d252dd8e3a53c08da2ed3c3a8d62fbbc30a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55f0245f3ee538ec49e84bcb28c33b135a07f0b9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d2c1bd80350f692c5c2298cb88859564ec0a061b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 48af0ac87dc3beef4d3e6c7982b158d50f7b2a6e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 039bfe373c990fc6db3808d255abaff91235e82f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dafe71a3e2d5cfb9b80805a26d5442ca5ad8332f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d5625170b248edc6a570c977fb1f8e7430ffd0b5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f043f00d5161794ef538802dcc9ba75e375c058 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1a5885a4c5983242b1356b57eafeb59a9d5c0d0f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c982c1f50bd7ae3bc4a1afc09e9ad11aecd434f ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 273400f95ae036c01d4b0fd7a7ca6ab160efd958 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 233e3ffe0ef35dbabe49340ba567499690dcc166 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7b675bf555e89e708f1b8f79bd90796dd395837b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e7252e217fe6d8f05dd50f6e125c33a1c6fff602 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cbbb6b349e8d0557e7e55e2d05819d6bdaed3769 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ebee400cfa4a532018ee904c22c7e3e6619ca4de ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e10706b6c167454a723636e0929061201a2f461b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 80b60fafa94b794fa77fab85e1df66f52598f3ac ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e509130b7dfc97eeb4a517d6c9c65a8d6204234 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7d49273897bd317323e0a3bbbc01b76e83370f0c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c4d5e7c9dab813adf9bfd8198bb9bb00c9a9503b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a061029eddee38110e416e3c4f60d553dafc9e5 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 323259cc3d977235f4e7e8980219e5e96d66086e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 80d01f0ef89e287184ba6d07be010ee3f16a74d9 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fd47d6b11833870ce23102a3373b7a50a1b45d00 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 58fa2c401856f93712ae6cc45d4dc3458ee4b4f4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dc922f3678a1b01cac2b3f1ec74b831ffec52a71 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2405cf54ac06140a0821f55b34c1d54f699e8e73 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 579d1b8174c9be915c0fa17a67fc38cc6de36ad7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8501e908bb8c531dfa75cef33fcec519027f4e5b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a7129dc00826cb344c0202f152f1be33ea9326fe ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 85c6252b54108750291021a74dc00895f79a7ccf ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1accc498c40e684f870d38b7d128739a0ebf57cf ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 27ceafbb3f74b4677d5bae6c7ea031de07c6cfad ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c60b88138b836307bdde0487c4ffb82121b1c5e ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 70094734d601e1220c95ac586fdffbda3a23e10b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 69a56c4e2addd1ec53bb40e8a18f52353d1fc28c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5962862e9ba0a1c9a14306688973946f6f7ce75c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 03bfdb16cd7cc6e1c7c8d3b59552da7de3d82d1c ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 71cd409660bc5b8c211dc7c51afae481d822d593 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 35ddb45b41b3de2d4f783608ad8d8752f6557997 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 30472cf3132b8c03e528b23d1c7533de740e28ab ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1dc09f0ece61ef2bd629e8bfe532aa24f4f8e0c2 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae54e18d7ca7bc8b8fbc667119fb60b25f0f3871 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 207bf7bf30651c3284408d87d7c499e43db6bc83 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b975d9fcf5924800f9ea5d68d7d79f743ca9af7 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d7e59d3ef86beb3b3b3e53a610af122b2220841b ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0651f0964ba5a33257ebbda1e92c7a1649a4a058 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 062aafa396866d4dfe8f3fd2f32d46fa7c01b6dd ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea6af04977c197fd07ab812d394dcb61feebaf67 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 657e98094f0f669809bc0e47f3d6bd9a8124cf32 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c35350e5bc4fe113330818ca6784ff368c5ffef ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 620dbee78ed8481d108327c4c332899df7cb8ef4 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6383196b7bb0773c0083a2a3d49a95e5479715bf ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9066712dca21ef35c534e068f2cc4fefdccf1ea3 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 933d23bf95a5bd1624fbcdf328d904e1fa173474 ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f66cfbbce58b4b552b041707a12d437cc5f400a ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7156cece3c49544abb6bf7a0c218eb36646fad6d ---- +58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 33ebe7acec14b25c5f84f35a664803fcab2f7781 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b213ab544114f7e6148ee5f2dda9b7421d2d998 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a0bb1b1d427b620d7acbada46a13c3123412e66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03db7c345b3ac7e4fc55646775438c86f9b79ee7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a98c7404d85ca0fdc96a5f4c0c740f5f13c62cb7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f8c61dbd14ec1bdbbee59e301aef2c158bf7b55 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4359204a9b05c4abba3bc61c504dca38231d45f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d7b8ba9f2e9298496232e4ae66bd904a1d71001 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff56dbbfceef2211087aed2619b7da2e42f235e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17c750a0803ae222f1cdaf3d6282a7e1b2046adb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eff48b8ba25a0ea36a7286aa16d8888315eb1205 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09fb2274db09e44bf3bc14da482ffa9a98659c54 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07bfe1a60ae93d8b40c9aa01a3775f334d680daa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aba4d9b4029373d2bccc961a23134454072936ce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b09003fffa8196277bcfaa9984a3e6833805a6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc8d23d3d6e735d70fd0a60641c58f6e44e17029 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b0465c9bcca64c3a863a95735cc5e602946facb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eae33d324376a0a1800e51bddf7f23a343f45a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d9011c05b0e27f1324f393e65954542544250d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb3fec340f89955a4b0adfd64636d26300d22af9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b72118e231c7bc42f457e2b02e0f90e8f87a5794 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59c89441fb81b0f4549e4bf7ab01f4c27da54aad ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe594eb345fbefaee3b82436183d6560991724cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- affee359af09cf7971676263f59118de82e7e059 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9f9027779931c3cdb04d570df5f01596539791b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f5d2fd68e784c2b2fd914a196c66960c7f48b49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26dfeb66be61e9a2a9087bdecc98d255c0306079 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bf00a6719804c2fc5cca280e9dae6774acc1237 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae9d56e0fdd4df335a9def66aa2ac96459ed6e5c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cef949913659584dd980f3de363dd830392bb68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3903d8e03af5c1e01c1a96919b926c55f45052e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 42e4f5e26b812385df65f8f32081035e2fb2a121 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6500844a925f0df90a0926dbdfc7b5ebb4a97bc9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00b5802f9b8cc01e0bf0af3efdd3c797d7885bb1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b6fe83f4d817a3b73b44df16cfb4f96bd4d9904 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ca97dcef3131a11dd5ef41d674bb6bd36608608 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 702bdf105205ca845a50b16d6703828d18e93003 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a61a63ed4bb866b2817acbb04e045f8460e040e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79e24f78fa35136216130a10d163c91f9a6d4970 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abf9373865c319d2f1aaf188feef900bb8ebf933 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 057514e85bc99754e08d45385bf316920963adf9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a625d08801eacd94f373074d2c771103823954d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dbc2be846d1d00e907efbf8171c35b889ab0155 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb02e1229d336decc7bae970483ff727ed7339db ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17643e0bd1b65155412ba5dba8f995a4f0080188 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eae0e37c88a71a3b8ca816b820eed71fd1590f11 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b11bcfa3df4d0b792823930bffae126fd12673f7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33346b25c3a4fb5ea37202d88d6a6c66379099c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572bbb39bf36fecb502c9fdf251b760c92080e1e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e76b5379cf55fcd31a2e8696fb97adf8c4df1a8d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b38725361f711ae638c048f93a7b6a12d165bd4e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34356322ca137ae6183dfdd8ea6634b64512591a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2448ac4ca337665eb22b9dd5ca096ef625a8f52b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96f8f17d5d63c0e0c044ac3f56e94a1aa2e45ec3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b16037a4ff17f0e25add382c3550323373c4398 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 559ddb3b60e36a1b9c4a145d7a00a295a37d46a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90fefb0a8cc5dc793d40608e2d6a2398acecef12 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f97d37881d50da8f9702681bc1928a8d44119e88 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e37ebaa5407408ee73479a12ada0c4a75e602092 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86114886ae8c2e1a9c09fdc145269089f281d212 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- baec2e293158ccffd5657abf4acdae18256c6c90 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c08f592cc0238054ec57b6024521a04cf70e692f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1fa8506d177fa49552ffa84527c35d32f193abe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18b75d9e63f513e972cbc09c06b040bcdb15aa05 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6752fad0e93d1d2747f56be30a52fea212bd15d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fd9f6ee5c8b4ae4e01a40dc398e2768d838210d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71e28b8e2ac1b8bc8990454721740b2073829110 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a094ac1808f7c5fa0653ac075074bb2232223ac1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b0028e1e75e1ee0eea63ba78cb3160d49c1f3a3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ad4079dde47ce721e7652f56a81a28063052a166 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26ccee15ae1712baf68df99d3f5f2fec5517ecbd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 300261de4831207126906a6f4848a680f757fbd4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4fe276637fe1ce3b2ebb504b69268d5b79de1ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d92fee01b05e5e217e6dad5cc621801c31debae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c6178f53233aa98a602854240a7a20b6537aa7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af7913cd75582f49bb8f143125494d7601bbcc0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f2f3e848e10d145fe28d6a8e07b0c579dd0c276 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 803aca26d3f611f7dfd7148f093f525578d609ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9b0e75c07ccbf90a9f2e67873ffbe672bb1a859 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c34c23a830bb45726c52bd5dcd84c2d5092418e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f8320b7bf75b6ec375ade605a9812b4b2147de9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3778ec37d17a6eb781fa9c6b5e2009fa7542d77 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a880c5f4e00ef7bdfa3d55a187b6bb9c4fdd59ce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1cd58ba862cce9cd9293933acd70b1a12feb5a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7988bb8ce25eb171d7fea88e3e6496504d0cb8f8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9de6450084eee405da03b7a948015738b15f59e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c19a6e1004bb8c116bfc7823477118490a2eef6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a1339a3d6751b2e7c125aa3195bdc872d45a887 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 037d62a9966743cf7130193fa08d5182df251b27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dd3cdfc9d647ecb020625351e0ff3a7346e1918d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2765dfd72cd5b0958ec574bea867f5dc1c086ab0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f653af66e4c9461579ec44db50e113facf61e2d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8cad756f357eb587f9f85f586617bff6d6c3ccf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21e21d04bb216a1d7dc42b97bf6dc64864bb5968 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dd71d3edbf3930cce953736e026ac3c90dd2e59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69b75e167408d0dfa3ff8a00c185b3a0bc965b58 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82189398e3b9e8f5d8f97074784d77d7c27086ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb7288d4f4a93d07c9989c90511f6887bcaeb25 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 696e4edd6c6d20d13e53a93759e63c675532af05 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e4211b20e8e57fe7b105b36501b8fc9e818852f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24f75e7bae3974746f29aaecf6de011af79a675d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfbd5ece215dea328c3c6c4cba31225caa66ae9a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9541d6bffe4e4275351d69fec2baf6327e1ff053 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08989071e8c47bb75f3a5f171d821b805380baef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e30a597b028290c7f703e68c4698499b3362a38f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c96476be7f10616768584a95d06cd1bddfe6d404 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c6e67013fd22840d6cd6cb1a22fcf52eecab530 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ba76d683df326f2e6d4f519675baf86d0373abf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cd47aeea822c484342e3f0632ae5cf8d332797d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 60acfa5d8d454a7c968640a307772902d211f043 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2067ba536dd78549d613dc14d8ad223c7d0aa5d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df6fa49c0662104a5f563a3495c8170e2865e31b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a9f8c55d6a58fe42fe67e112cbc98de97140f75 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 624eb284e0e6edc4aabf0afbdc1438e32d13f4c9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 135e7750f6b70702de6ce55633f2e508188a5c05 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1759a78b31760aa4b23133d96a8cde0d1e7b7ba6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb411ee92d30675a8d3d110f579692ea02949ccd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7b5e92791dd4db3535b527079f985f91d1a5100 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94bbe51e8dc21afde4148afb07536d1d689cc6ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb7fd31955aaba8becbdffb75dab2963d5f5ad8c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f9840b9220d57b737ca98343e7a756552739168 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98595da46f1b6315d3c91122cfb18bbf9bac8b3b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a1991773b79c50d4828091f58d2e5b0077ade96 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ef37754527948af1338f8e4a408bda7034d004f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30387f16920f69544fcc7db40dfae554bcd7d1cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b68361c8b81b23be477b485e2738844e0832b2f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 176838a364fa36613cd57488c352f56352be3139 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3ea6c0564a4a8c310d0573cebac0a21ac7ab0a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a175068f3366bb12dba8231f2a017ca2f24024a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3edd16ca6e217ee35353564cad3aa2920bc0c2e2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9cb7ae8d9721e1269f5bacd6dbc33ecdec4659c0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5f0d48745727684473cf583a002e2c31174de2d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe65adc904f3e3ebf74e983e91b4346d5bacc468 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0238e6cce512a0960d280e7ec932ff1aaab9d0f1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50edc9af4ab43c510237371aceadd520442f3e24 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7bde529ad7a8d663ce741c2d42d41d552701e19a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5453888091a86472e024753962a7510410171cbc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b7839e6b55953ddac7e8f13b2f9e2fa2dea528b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 411635f78229cdec26167652d44434bf8aa309ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99ba753b837faab0509728ee455507f1a682b471 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4720e6337bb14f24ec0b2b4a96359a9460dadee4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24cd6dafc0008f155271f9462ae6ba6f0c0127a4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a71ebbc1138c11fccf5cdea8d4709810360c82c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69ca329f6015301e289fcbb3c021e430c1bdfa81 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c6209f12e78218632319620da066c99d6f771d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f14903a0d4bb3737c88386a5ad8a87479ddd8448 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2fd537b5b3bb062a26c9b16a52236b2625ff44c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e236853b14795edec3f09c50ce4bb0c4efad6176 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b860d1873a25e6577a8952d625ca063f1cf66a84 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fbc2304fea19a2b6fc53f4f6448102768e3eeb2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 890fd8f03ae56e39f7dc26471337f97e9ccc4749 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07f6f2aaa5bda8ca4c82ee740de156497bec1f56 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d4dd2f1a6f31df9e361ebaf75bc0a2de7110c37 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 466ed9c7a6a9d6d1a61e2c5dbe6f850ee04e8b90 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdd4368489345a53bceb40ebd518b961f871b7b3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d472327f4873a7a4123f7bdaecd967a86e30446 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86b269e1bff281e817b6ea820989f26d1c2a4ba6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f344c8839a1ac7e4b849077906beb20d69cd11ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f404a50e95dd38012d33ee8041462b7659d79a2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2616e12df494774f13fd88538e9a58673f5dabb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 391c0023675b8372cff768ff6818be456a775185 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 97aec35365231c8f81c68bcab9e9fcf375d2b0dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 173cb579972dbab1c883e455e1c9989e056a8a92 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a684a7c41e89ec82b2b03d2050382b5e50db29ee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c382f3678f25f08fc3ef1ef8ba41648f08c957ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3c8760feb03dd039c2d833af127ebd4930972eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 49f13ef2411cee164e31883e247df5376d415d55 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a30b2430e25d615c14dafc547caff7da9dd5403 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15e457c8a245a7f9c90588e577a9cc85e1efec07 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 644f75338667592c35f78a2c2ab921e184a903a0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b6d4885db27b6f3e5a286543fd18247d7d765ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb792ea76888970d486323df07105129abbbe466 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5db2e0c666ea65fd15cf1c27d95e529d9e1d1661 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbf3d2745c3758490f31199e31b098945ea81fca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0420b01f24d404217210aeac0c730ec95eb7ee69 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d39bd5345af82e3acbdc1ecb348951b05a5ed1f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac286162b577c35ce855a3048c82808b30b217a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2810e8d3f34015dc5f820ec80eb2cb13c5f77b2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 607df88ee676bc28c80bca069964774f6f07b716 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7b401e0aa9dbb1a7543dde46064b24a5450db19 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c9da7310eb6adf67fa8d35821ba500dffd9a2a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c859019afaffc2aadbb1a1db942bc07302087c52 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f358e04cb00647e1c74625a8f669b6803abd1fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a244bd15bcd05c08d524ca9ef307e479e511b54c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863abe8b550d48c020087384d33995ad3dc57638 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84c3f60fc805e0d5e5be488c4dd0ad5af275e495 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9de612ebe54534789822eaa164354d9523f7bde ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0059f432c4b9c564b5fa675e76ee4666be5a3ac8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14a7292b26e6ee86d523be188bd0d70527c5be84 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72a2f7dd13fdede555ca66521f8bee73482dc2f4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c563b7211b249b803a2a6b0b4f48b48e792d1145 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6804e73beb0900bd1f5fd932fab3a88f44cf7a31 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73feb182f49b1223c9a2d8f3e941f305a6427c97 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e81fd5447f8800373903e024122d034d74a273f7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc553d6843c791fc4ad88d60b7d5b850a13fd0ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99b6dffe9604f86f08c2b53bef4f8ab35bb565a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a5a78b27ce1bcda6597b340d47a20efbac478d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fd8768c64d192b0b26a00d6c12188fcbc2e3224 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eca69510d250f4e69c43a230610b0ed2bd23a2e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c63abb360b4829b3d75d60fb837c0132db0510 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24d04e820ef721c8036e8424acdb1a06dc1e8b11 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab361cfecf9c0472f9682d5d18c405bd90ddf6d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99471bb594c365c7ad7ba99faa9e23ee78255eb9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45a5495966c08bb8a269783fd8fa2e1c17d97d6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61fef99bd2ece28b0f2dd282843239ac8db893ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 909ee3b9fe308f99c98ad3cc56f0c608e71fdee7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d94159db3067cc5def101681e6614502837cea5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0412f6d50e9fafbbfac43f5c2a46b68ea51f896f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e47352575d9b0a453770114853620e8342662fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4a83ff7910dc3617583da7e0965cd48a69bb669 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0a69bbec284bccbeecdf155e925c3046f024d4c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 625969d5f7532240fcd8e3968ac809d294a647be ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e671d243c09aa8162b5c0b7f12496768009a6db0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8cb3e0cac2f1886e4b10ea3b461572e51424acc7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cf0ca8b94dc815598e354d17d87ca77f499cae6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c429fc0382868c22b56e70047b01c0567c0ba31 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87abade91f84880e991eaed7ed67b1d6f6b03e17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b17a76731c06c904c505951af24ff4d059ccd975 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158131eba0d5f2b06c5a901a3a15443db9eadad1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04005d5c936a09e27ca3c074887635a2a2da914c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c40cf5e83e56e339ec6ab3e75b008721e544ede ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cb09652c007901b175b4793b351c0ee818eb249 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91f6e625da81cb43ca8bc961da0c060f23777fd1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d296eec67a550e4a44f032cfdd35f6099db91597 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ee8b09fd24962889e0e298fa658f1975f7e4e48c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b74a5bb6123b425a370da60bcc229a030e7875c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6b8e7b72ce81524cf82e64ee0c56016106501d96 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e82a7845af93955d24a661a1a9acf8dbcce50b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff4f970fa426606dc88d93a4c76a5506ba269258 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2573dd5409e3a88d1297c3f9d7a8f6860e093f65 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f4c7f3ec32a1943a0d5cdc0633fc33c94086f5f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f4e51bb4fc9d9c74cdbfb26945d053053f60e7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8da4072d71c3b0c13e478dc0e0d92336cf1fdd9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fced2eb501e3428b3e19e5074cf11650945a840 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52f9369ec96dbd7db1ca903be98aeb5da73a6087 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3fabed8d0d237b4d97b695f0dff1ba4f6508e4c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00ef69351e5e7bbbad7fd661361b3569b6408d49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eba84183ea79061eebb05eab46f6503c1cf8836f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55fd173c898da2930a331db7755a7338920d3c38 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 768b9fffa58e82d6aa1f799bd5caebede9c9231b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d22d57010e064cfb9e0b6160e7bd3bb31dbfffc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a10ceef3599b6efc0e785cfce17f9dd3275d174f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cedd3321e733ee1ef19998cf4fcdb2d2bc3ccd14 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 913b4ad21c4a5045700de9491b0f64fab7bd00ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6aa78cd3b969ede76a1a6e660962e898421d4ed8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e633cc009fe3dc8d29503b0d14532dc5e8c44cce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05cf33acc6f451026e22dbbb4db8b10c5eb7c65a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e50ee0a0370fcd45a9889e00f26c62fb8f6fa44e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5f3c586e0f06df7ee0fc81289c93d393ea21776 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7392d68121befe838d2494177531083e22b3d29 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc209ec23819313ea3273c8c3dcbc2660b45ad6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbd9ca4f16830c4991d570d3f9fa327359a2fa11 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5dd2f0c0ed534ecbc1c1a2d8e07319799a4e9c7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae7499f316770185d6e9795430fa907ca3f29679 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db4cb7c6975914cbdd706e82c4914e2cb2b415e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdfd3fc5b4d892b79dfa86845fcde0acc8fc23a4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec29b1562a3b7c2bf62e54e39dce18aebbb58959 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 438d3e6e8171189cfdc0a3507475f7a42d91bf02 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d01f0726d5764fe2e2f0abddd9bd2e0748173e06 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2ce56ffd016e2e6d1258ce5436787cae48a0812 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e27496dea8a728446e7f13c4ff1b5d8c2f3e736 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a2f8a9db703e55f3aa2b068cb7363fd3c757e71 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 820bc3482b6add7c733f36fefcc22584eb6d3474 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9432bedaa938eb0e5a48c9122dd41b08a8f0d740 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80ac0fcf1b8e8d8681f34fd7d12e10b3ab450342 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7cff58fd53bdb50fef857fdae65ee1230fd0061 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 313b3b4425012528222e086b49359dacad26d678 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85cf7e89682d061ea86514c112dfb684af664d45 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d17c2f6131b9a716f5310562181f3917ddd08f91 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ee6c19423297b4c667d34ed1bd621dafaabb0e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 553500a3447667aaa9bd3b922742575562c03b68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebf46561837f579d202d7bd4a22362f24fb858a4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a103d8c28b496ead8b4dd8215b103414f8b7f8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05b5cedec2101b8f9b83b9d6ec6a8c2b4c9236bc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34afc113b669873cbaa0a5eafee10e7ac89f11d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a61393899b50ae5040455499493104fb4bad6feb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6446608fdccf045c60473d5b75a7fa5892d69040 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d85574e0f37e82e266a7c56e4a3ded9e9c76d8a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6244c55e8cbe7b039780cf7585be85081345b480 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05753c1836fb924da148b992f750d0a4a895a81a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfa0eac1578bff14a8f7fa00bfc3c57aba24f877 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74930577ec77fefe6ae9989a5aeb8f244923c9ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2636d216d43b40a477d3a5180f308fc071abaeb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38c624f74061a459a94f6d1dac250271f5548dab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14d7034adc2698c1e7dd13570c23d217c753e932 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44496c6370d8f9b15b953a88b33816a92096ce4d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a086625da1939d2ccfc0dd27e4d5d63f47c3d2c9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 544ceecf1a8d397635592d82808d3bb1a6d57e76 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b303cb0c5995bf9c74db34a8082cdf5258c250fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fd090293792884f5a0d05f69109da1c970c3cab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95897f99551db8d81ca77adec3f44e459899c20b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4744efbb68c562adf7b42fc33381d27a463ae07a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3c3efd20c50b2a9db98a892b803eb285b2a4f83 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71b3845807458766cd715c60a5f244836f4273b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59ad90694b5393ce7f6790ade9cb58c24b8028e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43564d2e8f3b95f33e10a5c8cc2d75c0252d659a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ba39bd0f0b27152de78394d2a37f3f81016d848 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ba1ceaeadd8ff39810c5f410f92051a36dd17e6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5eb90461917afe04f31abedae894e63f81f827e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 19a4df655ae2ee91a658c249f5abcbe0e208fa72 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 248ad822e2a649d20582631029e788fb09f05070 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b269775a75d9ccc565bbc6b5d4c6e600db0cd942 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 763531418cb3a2f23748d091be6e704e797a3968 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f7e92cf00814fc6c4fb66527d33f7030f98e6bf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69d7a0c42cb63dab2f585fb47a08044379f1a549 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 64b85ee4cbaeb38a6dc1637a5a1cf04e98031b4b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf1354bb899726e17eaaf1df504c280b3e56f3d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55146609e2d0b120c5417714a183b3b0b625ea80 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 289fab8c6bc914248f03394672d650180cf39612 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f2b40d74c67c6fa718f9079654386ab333476d5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba169916b4cc6053b610eda6429446c375295d78 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c459bfcfdd7487f8aae5dd4101e7069f77be846 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 321694534e8782fa701b07c8583bf5eeb520f981 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef2316ab8fd3317316576d2a3c85b59e685a082f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e6099bce97a688c251c29f9e7e83c6402efc783 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7289c75cceaaf292c6ee01a16b24021fd777ad5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01f142158ee5f2c97ff28c27286c0700234bd8d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d0d1d6cfec28ba89ed1819bee9fe75931e765d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb08a3df46718c574e85b53799428060515ace8d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb14533db732d62778ae48a4089b2735fb9e6f92 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3a57f53d74998e835bce1a69bccbd9c1dadd6f9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f83797aefa6a04372c0d5c5d86280c32e4977071 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b16b6649cfdaac0c6734af1b432c57ab31680081 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05e9a6fc1fcb996d8a37faf64f60164252cc90c2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7081db74a06c89a0886e2049f71461d2d1206675 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07f81066d49eea9a24782e9e3511c623c7eab788 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d66f8f79629bcfa846a3d24a2a2c3b99fb2a13f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16c2d9c8f0e10393bf46680d93cdcd3ce6aa9cfd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89d11338daef3fc8f372f95847593bf07cf91ccf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ad6dc07790fe567412ccbc2a539f4501cb32ab2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 199099611dd2e62bae568897f163210a3e2d7dbb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14f3d06b47526d6f654490b4e850567e1b5d7626 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1349ee61bf58656e00cac5155389af5827934567 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7d2671c6ef156d1a2f6518de4bd43e3bb8745be ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a37405664efe3b19af625b11de62832a8cfd311c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cfd4b30cda23270b5bd2d1e287e647664a49fee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccaae094ce6be2727c90788fc5b1222fda3927c8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f583a810162c52cb76527d60c3ab6687b238938 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a5cef5c7c4a7130626fc2d7d5d562e1e985bbd0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 916a0399c0526f0501ac78e2f70b833372201550 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d759e17181c21379d7274db76d4168cdbb403ccf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fa1ce2b7dcf7f1643bb494b71b9857cbfb60090 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3face9018b70f1db82101bd5173c01e4d8d2b3bf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 23b83cd6a10403b5fe478932980bdd656280844d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf237db554f8e84eaecf0fad1120cbd75718c695 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66bb01306e8f0869436a2dee95e6dbba0c470bc4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 193df8e795de95432b1b73f01f7a3e3c93f433ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0dd99fe29775d6abd05029bc587303b6d37e3560 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb8b383d8be3f9da39c02f5e04fe3cf8260fa470 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63a444dd715efdce66f7ab865fc4027611f4c529 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b207f0e8910a478ad5aba17d19b2b00bf2cd9684 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9121f629d43607f3827c99b5ea0fece356080cf0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 882ebb153e14488b275e374ccebcdda1dea22dd7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fdb1dc77a45a26d8eac9f8b53f4d9200f54f7efe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 359a7e0652b6bf9be9200c651d134ec128d1ea97 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bf53a3913d55f933079801ff367db5e326a189a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d7eaf1253245c6b88fd969efa383b775927cdd0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d8a5144bd8c0940d9f2593a21aec8bebf7c035 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07657929bc6c0339d4d2e7e1dde1945199374b90 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5c94165d24195994c929de95782e1d412e7c2e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ff2f4f7a2f8212a68aff34401e66a5905f70f51 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca080bbd16bd5527e3145898f667750feb97c025 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e2d2651773722c05ae13ab084316eb8434a3e98 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6fdb67cec5c75b3f0a855042942dac75c612065 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bebfe31c2d9064d4a13de95ad79a4c9bdc3a33a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87b5d9c8e54e589d59d6b5391734e98618ffe26e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ece804aed9874b4fd1f6b4f4c40268e919a12b17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5cc590c875ada0c55d975cbe26141a94e306c94 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fa99bff215249378f90e1ce0254e66af155a301 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dab0c2e0da17c879e13f0b1f6fbf307acf48a4ff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2cd5970af1ea8024ecf82b11c1b3802d7c72ba6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acbd5c05c7a7987c0ac9ae925032ae553095ebee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 326409d7afd091c693f3c931654b054df6997d97 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71bd08050c122eff2a7b6970ba38564e67e33760 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e7e82b114a5c1b3eb61f171c376e1cf85563d07 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b6b90f9f1e5310a6f39b75e17a04c1133269e8f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- daa3f353091ada049c0ede23997f4801cbe9941b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80204335d827eb9ed4861e16634822bf9aa60912 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 859ad046aecc077b9118f0a1c2896e3f9237cd75 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 913d806f02cf50250d230f88b897350581f80f6b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce7e1507fa5f6faf049794d4d47b14157d1f2e50 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bd86c87c38d58b9ca18241a75c4d28440c7ef150 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e93ffe192427ee2d28a0dd90dbe493e3c54f3eae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a77a17f16ff59f717e5c281ab4189b8f67e25f53 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b176732ba16379d57f53e956456bc2c5970baf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a02facd0b4f9c2d2c039f0d7dc5af8354ce0201b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6df6d41835cd331995ad012ede3f72ef2834a6c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b50b96032094631d395523a379e7f42a58fe8168 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b628dccf4102d2a63c6fc8cd957ab1293bafbc6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3bf002e3ccc26ec99e8ada726b8739975cd5640e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 687c8f0494dde31f86f98dcb48b6f3e1338d4308 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dac619e4917b0ad43d836a534633d68a871aecca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1bb0b1751b38da43dbcd2ec58e71eb7b0138d786 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9dbaab311dbafcba0b68edb6ed89988b476f1dc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74a0507f4eb468b842d1f644f0e43196cda290a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc664f07535e3b3c1884d0b7f3cbcbadf9adce25 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b13c115994461fb6bafe5dd06490aae020568c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da8aeec539da461b2961ca72049df84bf30473e1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c73b239bd10ae2b3cff334ace7ca7ded44850cbd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41b9cea832ad5614df94c314d29d4b044aadce88 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31cc0470115b2a0bab7c9d077902953a612bbba6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33f2526ba04997569f4cf88ad263a3005220885e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c282315f0b533c3790494767d1da23aaa9d360b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77e47bc313e42f9636e37ec94f2e0b366b492836 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5cd12a6bcace3c99d94bbcf341ad7d4351eaca0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6971a930644d56f10e68e818e5818aa5a5d2e646 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f6bf7948121357a85a8069771919fb13d2cecf9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11fd713f77bb0bc817ff3c17215fd7961c025d7e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ee33ac9b234c7501d97b4c2bf2e2035c5ec1fa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14b221bf98757ba61977c1021722eb2faec1d7cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce21f63f7acba9b82cea22790c773e539a39c158 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f66e25c25cde2423917ee18c4704fff83b837d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 881e3157d668d33655da29781efed843e4a6902a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11f0634803d43e6b9f248acd45f665bc1d3d2345 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dff4bdd4be62a00d3090647b5a92b51cea730a84 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a6ca8c40433400f6bb3ece2ed30808316de5be3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b3ffcdda1114ad204c58bdf3457ac076ae9a0b0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8690f8974b07f6be2db9c5248d92476a9bad51f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 530ab00f28262f6be657b8ce7d4673131b2ff34a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 926d45b5fe1b43970fedbaf846b70df6c76727ea ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c706a217238fbe2073d2a3453c77d3dc17edcc9a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e1fe7f6a83633207c9e743708c02c6e66173e7d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e4239c4c3b106b436673e4f9cca43448f6f1af9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c49ba433b3ff5960925bd405950aae9306be378b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8fc6563219017354bdfbc1bf62ec3a43ad6febcb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1634dc48b39ecca11dc39fd8bbf9f1d8f1b7be6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89df64132ccd76568ade04b5cf4e68cb67f0c5c0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8591a094a768d73e6efb5a698f74d354c989291 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3d9b8df38dacfe563b1dd7abb9d61b664c21186 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1d2f4bc85da47b5863589a47b9246af0298f016 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92a481966870924604113c50645c032fa43ffb1d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ca25b9b090511fb61f9e3122a89b1e26d356618 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 914bbddfe5c02dc3cb23b4057f63359bc41a09ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f99fb4962c2777286a128adbb093d8f25ae9dc7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f08b7730438bde34ae55bc3793fa524047bb804 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9807dd48b73ec43b21aa018bdbf591af4a3cc5f9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce5dfe7f95ac35263e41017c8a3c3c40c4333de3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c2446f24bc6a91ca907cb51d0b4a690131222d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29aa1b83edf3254f8031cc58188d2da5a83aaf75 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8fd91020739a0d57f1df562a57bf3e50c04c05b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7be3486dc7f91069226919fea146ca1fec905657 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05e3b0e58487c8515846d80b9fffe63bdcce62e8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6e0a6cb5c70efd0899f620f83eeebcc464be05c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0857d33852b6b2f4d7bc470b4c97502c7f978180 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e79a3f8f6bc6594002a0747dd4595bc6b88a2b27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3265bd8beb017890699d093586126ff8af4a3fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f12b26b81a8e7667b2a26a7878e5bc033610ed5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 190c04569bd2a29597065222cdcc322ec4f2b374 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f76463221cf1c69046b27c07afde4f0442b75d5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c1e984b212637fe108c0ddade166bc39f0dd2ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d15bc65735852d3dce5ca6d779a90a50c5323b8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09d2ae5f1ca47e3aede940e15c28fc4c3ff1e9eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f14a596a33feaad65f30020759e9f3481a9f1d9c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03126bfd6e97ddcfb6bd8d4a893d2d04939f197e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5710466a728446d8169761d9d4c29b1cb752b00 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c22f1b05fee73dd212c470fecf29a0df9e25a18f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a14277eecf65ac216dd1b756acee8c23ecdf95d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a96030d82fa379d24b952a58eed395143950c7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2cd130bed184fe761105d60edda6936f348edc6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28cbb953ce01b4eea7f096c28f84da1fbab26694 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d91ae75401b851b71fcc6f4dcf7eb29ed2a63369 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 610d4c97485d2c0d4f65b87f2620a84e0df99341 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfae362363b28be9b86250eb7f6a32dac363c993 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dd14b60b112a867a2217087b7827687102b11fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66328d76a10ea53e4dfe9a9d609b44f30f734c9a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7f657fb20c063dfc2a653f050accc9c40d06a60 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f237620189a55d491b64cac4b5dc01b832cb3cbe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95ff8274a0a0a723349416c60e593b79d16227dc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ce49598a25b48ad0ab38cc1101c5e2a42a918e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddb828ecd0e28d346934fd1838a5f1c74363fba6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2eb6cf0855232da2b8f37785677d1f58c8e86817 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2af601d5800a39ab04e9fe6cf22ef7b917ab5d67 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ef53c53012c450adb8d5d386c207a98b0feb579 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5f034355962c5156f20b4de519aae18478b413a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb43244026643e540a2fac35b2997c6aa0e139c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6cf7a7bd864fe1fb64d7bea0c231c6254f171e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eb497ba1bbcaeb05a413a226fd78e54a29a3ff5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dca537f505e93248739478f17f836ae79e00783 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edb28b9b2c2bd699da0cdf5a4f3f0f0883ab33a2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bbaf1c5c792d14867890200db68da9fd82d5997 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fad63e83853a65ee9aa98d47a64da3b71e4c01af ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf8dc259fcc9c1397ea67cec3a6a4cb5816e3e68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 375e1e68304582224a29e4928e5c95af0d3ba2fa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 559b90229c780663488788831bd06b92d469107f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aec58a9d386d4199374139cd1fc466826ac3d2cf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bd708d41090fbe00acb41246eb22fa8b5632967 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc4e3cc8521f8315e98f38c5550d3f179933f340 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6420d2e3a914da1b4ae46c54b9eaa3c43d8fd060 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92c7c8eba97254802593d80f16956be45b753fd1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bbcf2fc648561e4fc90ee4cc5525a3257604ec1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c121f60395ce47b2c0f9e26fbc5748b4bb27802d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 32da7feb496ef31c48b5cbe4e37a4c68ed1b7dd5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39335e6242c93d5ba75e7ab8d7926f5a49c119a3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c418df44fd6ac431e10b3c9001699f516f3aa183 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ef889531eed9ac73ece70318d4eeb45d81b9bc5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dffba51b4fd88f7d26a43cf6d1fbbe3cdb9f44d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c23ae3a48bb37ae7ebd6aacc8539fee090ca34bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8c31c6a6e9ffbfdbd292b8d687809b57644de27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ce2a4b235d2ebc38c3e081c1036e39bde9be036 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96402136e81bd18ed59be14773b08ed96c30c0f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c6ae79a7b38c7800c19e28a846cb2f227e52432 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46c4ec22d70251c487a1d43c69c455fc2baab4f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0788e0be3164acd65e3bc4b5bc1b51179b967ce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 830070d7ed09d6eaa4bcaa84ab46c06c8fff33d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e8412226ffe0c046177fa6d838362bfbde60cd0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72dddc7981c90a1e844898cf9d1703f5a7a55822 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3bd3c6b94c735c725f39959730de11c1cebe67a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 416daa0d11d6146e00131cf668998656186aef6a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ede752333a851ee6ad9ec2260a0fb3e4f3c1b0b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0181a40db75bb27277bec6e0802f09a45f84ffb3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88732b694068704cb151e0c4256a8e8d1adaff38 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fdc8ecbc0c1d8a4b76ec653602c5ab06a9659c98 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b197de0ccc0faf8b4b3da77a46750f39bf7acdb3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 552a0aa094f9fd22faf136cdbc4829a367399dfe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2ad9a239b1a06ee19b8edcd273cbfb9775b0a66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddffe26850e8175eb605f975be597afc3fca8a03 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d6e1731b6324eba5abc029b26586f966db9fa4f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82ae723c8c283970f75c0f4ce097ad4c9734b233 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15b6bbac7bce15f6f7d72618f51877455f3e0ee5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c823d482d03caa8238b48714af4dec6d9e476520 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0c187229cea1eb3f395e7e71f636b97982205ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f21630bcf83c363916d858dd7b6cb1edc75e2d3b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06914415434cf002f712a81712024fd90cea2862 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f207e0e15ad243dd24eafce8b60ed2c77d6e725 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8437c014b0a9872168b01790f5423e8e9255840 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b06b13e61e8db81afdd666ac68f4a489cec87d5a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b93ba7ca6913ce7f29e118fd573f6ed95808912b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5149c807ec5f396c1114851ffbd0f88d65d4c84f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c3a6889b654892b3636212b880fa50df0358679 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4754fa194360b4648a26b93cdff60d7906eb7f7d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- caa0ea7a0893fe90ea043843d4e6ad407126d7b8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- afcd64ebbb770908bd2a751279ff070dea5bb97c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aab7dc2c7771118064334ee475dff8a6bb176b57 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e4a4545dd513204efb6afe40e4b50c3b5f77e50 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93d530234a4f5533aa99c3b897bb56d375c2ae60 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff389af9374116c47e3dc4f8a5979784bf1babff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ca7c019a359c64a040e7f836d3b508d6a718e28 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70bb7e4026f33803bb3798927dbf8999910700d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e12ef59c559e3be8fa4a65e17c9c764da535716e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3165753f9d0d69caabac74eee195887f3fea482 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c170c3e74b8ef90a2c7f47442eabce27411231 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52e28162710eb766ffcfa375ef350078af52c094 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 896830bda41ffc5998e61bedbb187addaf98e825 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b84602026c1cc7b9d83ab618efb6b48503e97af ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a596e1284c8a13784fd51b2832815fc2515b8d6a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53c15282a84e20ebe0a220ff1421ae29351a1bf3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eacf90dff73ab7578cec1ba0d82930ef3044663 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09c88bec0588522afb820ee0dc704a936484cc45 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aafde7d5a8046dc718843ca4b103fcb8a790332c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e355275c57812af0f4c795f229382afdda4bca86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74c7ed0e809d6f3d691d8251c70f9a5dab5fb18d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e5ef73d3d6d9b973a756fddd329cfa2a24884e2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f6c697c0df4704206d2fd1572640f7f2bd80c73 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 833ac6ec4c9f185fd40af7852b6878326f44a0b3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a2f7dce43617b773a6be425ea155812396d3856 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a469af892b3e929cbe9d29e414b6fcd59bec246e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be44602b633cfb49a472e192f235ba6de0055d38 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86aa8738e0df54971e34f2e929484e0476c7f38a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a46f670ba62f9ec9167eb080ee8dce8d5ca44164 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6df78b19b7786b15c664a7a1e0bcbb3e7c80f8da ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b440827a04ad23efb891eff28d90f172723c75d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06b16115bee85d7dd12a51c7476b0655068a970c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dc2f7358be152d8e87849ad6606461fb2a4dfd0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 361854d1782b8f59dc02aa37cfe285df66048ce6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6497d1e843cbaec2b86cd5a284bd95c693e55cc0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a01ec439e19df83a2ff17d198118bd5a31c488b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f48ef3177bbee78940579d86d1db9bb30fb0798d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 794187ffab92f85934bd7fd2a437e3a446273443 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e25da8ffc66fb215590a0545f6ad44a3fd06c918 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd8537b23ce85be6f9dacb7806e791b7f902a206 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5c1cb715664fd7a98160844572cc473cb6b87c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3b9c0242ba2893231e0ab1c13fa2a0c8a9cfc59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26253699f7425c4ee568170b89513fa49de2773c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d6b417ea3a4507ea78714f0cb7add75b13032d5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4592785004ad1a4869d650dc35a1e9099245dad9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0900c55a4b6f76e88da90874ba72df5a5fa2e88c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f73468bb9cb9e479a0b81e3766623c32802db579 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0de60abc5eb71eff14faa0169331327141a5e855 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6b1a9272455ef80f01a48ea22efc85b7f976503 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d37049a815b11b594776d34be50e9c0ba8df497 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80cc71edc172b395db8f14beb7add9a61c4cc2b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e50a8e6156360e0727bedff32584735b85551c5b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48c149c16a9bb06591c2eb0be4cca729b7feac3e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06c9c919707ba4116442ca53ac7cf035540981f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ba897b12024fd20681b7c2f1b40bdbbccd5df59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae6e26ed4abac8b5e4e0a893da5546cd165d48e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df65f51de6ba67138a48185ff2e63077f7fe7ce6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31ad0a0e2588819e791f4269a5d7d7e81a67f8cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5095c16894e6f4da814302349e8e32f84c8c13 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657cd7e47571710246375433795ab60520e20434 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58934b8f939d93f170858a829c0a79657b3885e0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d4d70844417bf484ca917326393ca31ff0d22bc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e866c4a9897572a550f8ec13b53f6665754050cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83ebc659ace06c0e0822183263b2c10fe376a43e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4ad7cee0f8723226446a993d4f1f3b98e42583a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 788bd7e55085cdb57bce1cabf1d68c172c53f935 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4006c4347788a078051dffd6b197bb0f19d50b86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ec4389bc3d1653af301e93fe0a6b25a31da9f3d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5e6676db845e10bdca47c3fcf8dca9dea75ec42 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ff3a3e72b1ff79e75777ccdddc86f8540ce833d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ed3cd7f798057c02799b6046987ed6a2e313126 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 49a9f84461fa907da786e91e1a8c29d38cdb70eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4896fa2ccbd84553392e2a74af450d807e197783 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c6e5adab98a2ea4253fefc4f83598947f4993ee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de894298780fd90c199ef9e3959a957a24084b14 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06571d7f6a260eda9ff7817764f608b731785d6b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 451504f1e1aa84fb3de77adb6c554b9eb4a7d0ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f128ae9a37036614c1b5d44e391ba070dd4326d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07a8f73dca7ec7c2aeb6aa47aaf421d8d22423ad ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e02afbb7343a7a4e07e3dcf8b845ea2764d927c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 105a8c0fb3fe61b77956c8ebd3216738c78a3dff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5c8ff218cb3ee5d3dd9119007ea8478626f6d2ce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27f394a58b7795303926cd2f7463fc7187e1cce4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9bebaca85a19e0ac8a776ee09981f0c826e1cafa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d22c40b942cca16ff9e70d879b669c97599406b7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4510b3c42b85305c95c1f39be2b9872be52c2e5e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5739cd466f77a60425bd2860895799f7c9359d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17020d8ac806faf6ffa178587a97625589ba21eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15ee5a505b43741cdb7c79f41ebfa3d881910a6c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da86442f6a7bf1263fb5aafdaf904ed2f7db839f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec830a25d39d4eb842ae016095ba257428772294 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0b21f454ea43a5f67bc4905c641d95f8b6d96fd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fde89f2a65c2503e5aaf44628e05079504e559a0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7548a5c43f8c39a8143cdfb9003838e586313078 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2219f13eb6e18bdd498b709e074ff9c7e8cb3511 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 543d900e68883740acf3b07026b262176191ab60 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6581acaa7081d29dbf9f35c5ce78db78cf822ab8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88716d3be8d9393fcf5695dd23efb9c252d1b09e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25844b80c56890abc79423a7a727a129b2b9db85 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f91ab7bb0dadfd165031f846ae92c9466dceb66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4ace5482efa4ca8769895dc9506d8eccfb0173d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79fdaf349fa8ad3524f67f1ef86c38ecfc317585 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5089d9d6c303b47936a741b7bdf37293ec3a1c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3f24f64a20d1e09917288f67fd21969f4444acd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e836e5cdcc7e3148c388fe8c4a1bab7eeb00cc3f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb20477629bf83e66edc721725effa022a4d6170 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff0365e053a6fa51a7f4e266c290c5e5bd309f6a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df3dd9797c8afda79dfa99d90aadee6b0d7a093 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29724818764af6b4d30e845d9280947584078aed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce87a2bec5d9920784a255f11687f58bb5002c4c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98889c3ec73bf929cdcb44b92653e429b4955652 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ece57af3b69c38f4dcd19e8ccdd07ec38f899b23 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5077dac4c7680c925f4c5e792eeb3c296a3b4c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06ea4a0b0d6fcb20a106f9367f446b13df934533 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 902679c47c3d1238833ac9c9fdbc7c0ddbedf509 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5efdad2502098a2bd3af181931dc011501a13904 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 515a6b9ccf87bd1d3f5f2edd229d442706705df5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04ff96ddd0215881f72cc532adc6ff044e77ea3e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9a7dc5fe98e1aa666445bc240055b21ed809824 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b40d4b54e09a546dd9514b63c0cb141c64d80384 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8486f2d2e5c251d0fa891235a692fa8b1a440a89 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1537aabfa3bb32199e321766793c87864f36ee9a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0be02e1471c99e5e5e4bd52db1019006d26c349 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bed46300fe5dcb376d43da56bbcd448d73bb2ea0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f4b1618fbf3b9b1ecaa9812efe8ee822c9579b8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ef273914de9b8a50dd0dd5308e66de85eb7d44a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6a6a109885856aeff374c058db0f92c95606a0b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27a041e26f1ec2e24e86ba8ea4d86f083574c659 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d66f2b53af0d8194ee952d90f4dc171aa426c545 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7a2d43495eb184b162f8284c157288abd36666a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec35edc0150b72a7187f4d4de121031ad73c2050 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 123302cee773bc2f222526e036a57ba71d8cafa9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7228ca9bf651d9f06395419752139817511aabe1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a8f96cc8a5135a0ece19e600da914dabca7d215 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db44286366a09f1f65986db2a1c8b470fb417068 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00452efe6c748d0e39444dd16d9eb2ed7cc4e64a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bebc4f56f4e9a0bd3e88fcca3d40ece090252e82 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2376bd397f084902196a929171c7f7869529bffc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bcc4d55baef64825b4163c6fb8526a2744b4a86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb577c8a1eca8958415b76cde54d454618ac431e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e73c80dd2dd1c82410fb1ee0e44eca6a73d9f052 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5320a6f68ddec847fa7743ff979df8325552ffd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25c95ace1d0b55641b75030568eefbccd245a6e3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a15afe217c7c35d9b71b00c8668ae39823d33247 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eedf3c133a9137723f98df5cd407265c24cc2704 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4937fcd0dad3be003b97926e3377b0565237c5b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05c468eaec0be6ed5a1beae9d70f51655dfba770 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc505ddd603b1570c2c1acc224698e1421ca8a6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b22a5e944b2f00dd8e9e6f0c8c690ef2d6204886 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9149c34a8b99052b4e92289c035a3c2d04fb8246 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c9497463b130cce1de1b5d0b6faada330ecdc96 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c673ff2d267b927d2f70765da4dc3543323cc7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 819c4ed8b443baee06472680f8d36022cb9c3240 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c883d129066f0aa11d806f123ef0ef1321262367 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2807d494db24d4d113da88a46992a056942bd828 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d0d6c9824bdd5f2cd5f6886991bb5eadca5120d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26b0f3848f06323fdf951da001a03922aa818ac8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d47fc1b67836f911592c8eb1253f3ab70d2d533d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d04aeaa17e628f13d1a590a32ae96bc7d35775b5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcb6e8832a94776d670095935a7da579a111c028 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08938d6cee0dc4b45744702e7d0e7f74f2713807 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 504870e633eeb5fc1bd7c33b8dde0eb62a5b2d12 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bbf1a3b801fb4e00c10f631faa87114dcd0462f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d7a40f603412be7e1046b500057b08558d9d250 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4adafc5a99947301ca0ce40511991d6d54c57a41 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76e19e4221684f24ef881415ec6ccb6bab6eb8e8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccb653d655a7bf150049df079622f67fbfd83a28 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20a338ff049e7febe97411a6dc418a02ec11eefa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 978eb5bd4751acf9d53c8b6626dc3f7832a20ccf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9debf6b0aafb6f7781ea9d1383c86939a1aacde3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dabd563ed3d9dc02e01fbf3dd301c94c33d6d273 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfaf706d70c3c113b40ce1cbc4d11d73c7500d73 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4c6851c55757fb0bc9d77da97d7db9e7ae232d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c877794b51f43b5fb2338bda478228883288bcdd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2971489fec32160836519e66ca6b97987c33d0c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ceae5e9f6bf753163f81af02640e5a479d2a55c0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f4d5ce5f9459e4c7fe4fab95df1a1e4c9be61ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e9481b4ddd70cf44ad041fba771ca5c02b84cf7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f4af7c6db25c5bbec7fdc8dfc0ea6803350d94c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcca77ad97d1dfb657e88519ce8772c5cd189743 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 121f6af3a75e4f48acf31b1af2386cdd5bf91e00 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55db0fcce5ec5a92d2bdba8702bdfee9a8bca93d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2f6fef3c887719a250c78c22cba723b2200df1b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ad3931357e5bb01941b50482b4b53934c0b715e3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41556dac4ca83477620305273a166e7d5d9f7199 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbc07b421172da4ef3153753709271a71af6966a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84869674124aa5da988188675c1336697c5bcf81 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8775f9b8e40b18352399445dba99dd1d805e8c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b10d5e75570ac6325d1c7e2b32882112330359a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b145de39700001d91662404221609b86d2c659d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b854878fb9df8d1a06c4e97bff5e164957b3a0d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3fe8f5df5794015014c53e3adbf53acdb632a8a0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b295c13140f48e6a7125b4e4baf0a0ca03e1e393 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f1110bd9b00cb8c1ea07c3aafe9cde89b3dbf9b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0de827a0e63850517aa93c576c25a37104954dba ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d82a6c5ed9108be5802a03c38f728a07da57438e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1a59764096cef4048507cb50f0303f48b87a242 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0900a51f986f3ed736d9556b3296d37933018196 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a929ab29016e91d661274fc3363468eb4a19b4b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ed8939d6167571fc2b141d34f26694a79902fde2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb5e177e5d7931e30b198b06b21809ef6a78b92 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec401e4807165485a4b7a2dad4f74e373ced35ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e58e6a0d78f5298252b2d6c4b0431427ec6d152 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51f79ffeb829315c33ce273ae69baf0fdd1fbd1e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84fcf8e90fd41f93d77dd00bf1bc2ffc647340f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 074842accb51b2a0c2c1193018d9f374ac5e948f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f8d9ca08352a28cba3b01e4340a24edc33e13e8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8590424997ab1d578c777fe44bf7e4173036f93 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6eb3af27464ffba83e3478b0a0c8b1f9ff190889 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d768f67bd49f28fd2e626f3a8c12bd28ae5ce48 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8b837923d506e265ff8bb79af61c0d86e7d5b2e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8f7e3772f68c8e6350b9ff5ac981ba3223f2d43 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 039e265819cc6e5241907f1be30d2510bfa5ca6c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0acb2229e1ebb59ab343e266fc5c1cc392a974e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2e4134963c971e3259137b84237d6c47964b018 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ab12b403207bb46199f46d5aaa72d3e82a3080d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8324c4b38cf37af416833d36696577d8d35dce7f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c58887a2d8554d171a7c76b03bfa919c72e918e1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b307f04218e87b814fb57bd9882374a9f2b52922 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c96f5885e1ec1e24b0f8442610de42bd8e168d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11b3a1dfc2eb03094c4c437162ce504722fa7ddf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1883eb9282468b3487d24f143b219b7979d86223 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f360ecd7b2de173106c08238ec60db38ec03ee9b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1d33021feb7324e0f2f91c947468bf282f036d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c8a33e2c9cae8deef1770a5fce85acb2e85b5c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c272abea2c837e4725c37f5c0467f83f3700cd5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af44258fa472a14ff25b4715f1ab934d177bf1fa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b21e2f1c0fdef32e7c6329e2bc1b4ce2a7041a2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58c78e649cbac271dee187b055335c876fcb1937 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3d33c113b1dfa4be7e3c9924fae029c178505c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ee9751d4e9e9526dbe810b280a4b95a43105ec9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5e4334f38dce4cf02db5f11a6e5844f3a7c785c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bbf04348b0c79be2103fd3aaa746685578eb12fd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9db24bc7a617cf93321bb60de6af2a20efd6afc1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86ec7573a87cd8136d7d497b99594f29e17406d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 02cb16916851336fcf2778d66a6d54ee15d086d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5a9bbef0d2d8fc5877dab55879464a13955a341 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 369e564174bfdd592d64a027bebc3f3f41ee8f11 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36dbe7e9b55a09c68ba179bcf2c3d3e1b7898ef3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d0f693184884ffac97908397b074e208c63742b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 040108747e2f868c61f870799a78850b792ddd0a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 300831066507bf8b729a36a074b5c8dbc739128f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bea9077e8356b103289ba481a48d27e92c63ae7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 195ecc3da4a851734a853af6d739c21b44e0d7f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2efb814d0c3720f018f01329e43d9afa11ddf54 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfc70fe92d42a853d4171943bde90d86061e3f3a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8724dfa6bf8f6de9c36d10b9b52ab8a1ea30c3b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 640d1506e7f259d675976e7fffcbc854d41d4246 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a771adc5352dd3876dd2ef3d0c52c8e803fc084 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 982eefb2008826604d54c1a6622c12240efb0961 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 152a60f0bd7c5b495a3ce91d0e45393879ec0477 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e15b57bf0bb40ccc6ecbebc5b008f7e96b436f19 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 539980d51c159cb9922d0631a2994835b4243808 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14851034ab5204ddb7329eb34bb0964d3f206f2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 32e4e08cf9ccfa90f0bc6d26f0c7007aeafcffeb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1199f90c523f170c377bf7a5ca04c2ccaab67e08 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83017bce083c58f9a6fb0c7b13db8eeec6859493 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c594195eb614a200e1abb85706ec7b8b7c91268 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96928d2eb3d98c475fd0737240c06bf8e5f96ad6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9a2ea80aa9970bbd625da4c986d29a36c405629 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e39c8b07d1c98ddf267fbc69649ecbbe043de0fd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fe80b03196b1d2421109fad5b456ba7ae4393e2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c6d952b17e63c92a060c08eac38165c6fafa869 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e129846a1a5344c8d7c0abe5ec52136c3a581cce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae334e4d145f6787fd08e346a925bbc09e870341 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b0448b65317b2830270ff4156a25aca7941472 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f662857381a0384bd03d72d6132e0b23f52deef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3470e269bcdc9091d0c5e25e7c09ce175c7cee77 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 545ac2574cfb75b02e407e814e10f76bc485926d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8bf7d416f60f52335d128cf16fbba0344702e49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a08733d76a8254a20a28f4c3875a173dcf0ad129 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c2dd54358dd526d1d08a8e4a977f041aff74174 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9f8f159ebad405b2c08aa75f735146bb8e216ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 723f100a422577235e06dc024a73285710770fca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98f6995bdcbd10ea0387d0c55cb6351b81a857fd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f043d8a1d7f4076350ff0c778bfa60f7aa2f7aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab7c3223076306ca71f692ed5979199863cf45a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fd07a0a7a6300db1db8b300a3f567b31b335570 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54e27f7bbb412408bbf0d2735b07d57193869ea6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c27cd907f67f984649ff459dacf3ba105e90ebc2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be81304f2f8aa4a611ba9c46fbb351870aa0ce29 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88f3dc2eb94e9e5ff8567be837baf0b90b354f35 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5e607e8aa62ca3778f1026c27a927ee5c79749b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 630d030058c234e50d87196b624adc2049834472 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d1a489931ecbdd652111669c0bd86bcd6f5abbe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3236f8b966061b23ba063f3f7e1652764fee968f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0acb8371bb2b68c2bda04db7cb2746ba3f9da86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfcdf2bef08f17b4726b67f06c84be3bfe2c39b8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2feb62c17acd1dddb6cd125d8b90933c32f89e1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38fc944390d57399d393dc34b4d1c5c81241fb87 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d74543a545a9468cabec5d20519db025952efed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 346424daaaf2bb3936b5f4c2891101763dc2bdc0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f5320e8171324a002d3769824152cf5166a21a2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ac93b1d7e0694ceb303ee72c312921a9b1588f4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f51fe3e66d358e997f4af4e91a894a635f7cb601 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28d6c90782926412ba76838e7a81e60b41083290 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae0b6fe15e0b89de004d4db40c4ce35e5e2d4536 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8bbfea4cdcb36ce0e9ee7d7cad4c41096d4d54f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91562247e0d11d28b4bc6d85ba50b7af2bd7224b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91645aa87e79e54a56efb8686eb4ab6c8ba67087 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47d9f1321c3a6da68a7909fcb1a66a209066d4c9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f498de9bfd67bcbb42d36dfb8ff9e59ec788825b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4df4159413a4bf30a891f21cd69202e8746c8fea ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d91ca75500285d19c6ae2d4bf018452ad822a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ffefb154982c6cc47c9be6b3eae6fb1170bb0791 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66c5b33fb5405fe12756f07048e3bcc3a958b2c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ddbe4bc24e634e6496abd3bc6ce3c4377cdf2fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ad07f7b23e762e3eb99ce45020375d2bd743fc5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ce3fe7cef8910aadc2a2b39a3dab4242a751380 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f038611ff120f8283f0f1a56962f95b66730c72 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98a17a28a21fe5f06dd2da561839fdbaa1912c64 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2a9b2f22c6fb5bd3e30e674874dbc8aa7e5b00ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34c0831453355e09222ccc6665782d7070f5ddab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 261aedd2e13308755894405c7a76b72373dab879 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1287f69b42fa7d6b9d65abfef80899b22edfef55 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d565a874f29701531ce1fc0779592838040d3edf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4d3809161fc54d6913c0c2c7f6a7b51eebe223f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e48e52001d5abad7b28a4ecadde63c78c3946339 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c6c81b3281333a5a1152f667c187c9dce12944 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47ac37be2e0e14e958ad24dc8cba1fa4b7f78700 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb0f3d78d6980a1d43f05cb17a8da57a196a34f3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4921139819c7949abaad6cc5679232a0fbb0632 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80701fc6f4bf74d3c6176d76563894ff0f3b32bb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9fbae711b76a4f2fa9345f43da6d2cdedd75d6c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea29541e213df928d356b3c12d4d074001395d3c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e395ac90bf088ad6b5de7dadb6531a6e7f3f4f3f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 048ffa58468521c043de567f620003457b8b3dbe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df95149198744c258ed6856044ac5e79e6b81404 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5054fdb1766cb035a1186c3cef4a14472fee98d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aaa84341f876927b545abdc674c811d60af00561 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20863cfe4a1b0c5bea18677470a969073570e41c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a223c7b7730c53c3fa1e4c019bd3daefbb8fd74b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4ce247c0380e3806e47b5b3e2b66c29c3ab2680 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c15a6e1923a14bc760851913858a3942a4193cdb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2b59625e9bde14b1d2d476e678326886ab1552 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7b16ade191bb753ebadb45efe6be7386f67351d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67680a0877f01177dc827beb49c83a9174cdb736 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 503b62bd76ee742bd18a1803dac76266fa8901bc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a9a5414300a245b6e93ea4f39fbca792c3ec753f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26fc5866f6ed994f3b9d859a3255b10d04ee653d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 508807e59ce9d6c3574d314d502e82238e3e606c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b259098782c2248f6160d2b36d42672d6925023a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27c31e2fde54c0587c032ccffdaa7c4ddf5b2ae5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a41a8b93167a59cd074eb3175490cd61c45b6f6a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6569c4849197c9475d85d05205c55e9ef28950c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53e5fb3733e491925a01e9da6243e93c2e4214c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa1b156ee96f5aabdca153c152ec6e3215fdf16f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619c989915b568e4737951fafcbae14cd06d6ea6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be074c655ad53927541fc6443eed8b0c2550e415 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e973e6f829de5dd1c09d0db39d232230e7eb01d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d39529eea4d0ecfcd65a2d245284174cd2e0aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8eae18dcc360e6ab96c2291982bd4306adc01b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7671110bc865786ffe61cf9b92bf43c03759229 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ede325d15ba9cba0e7fe9ee693085fd5db966629 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43e430d7fa5298f6db6b1649c1a77c208bacf2fc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfb0a9c4bca590efaa86f8edc3fdb62bd536bce7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acd82464a11f3c2d3edc1d152d028a142da31a9f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e84300df7deed9abf248f79526a5b41fd2f7f76e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 597bc56a32e1b709eefa4e573f11387d04629f0d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- becf5efbfc4aee2677e29e1c8cbd756571cb649d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e8aa9b0aefc30ee5807c2b2cf433a38555b7e0b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c6ab4f7572fd5ca8638f3cb6e342d5000955e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfce49feb0be6c69f7fffc57ebdd22b6da241278 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b825dc74773ffa5c7a45b48d72616b222ad2023e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0cb95c5df7a559633c48f5b0f200599c4a62091 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c767b5206f1e9c8536110dda4d515ebb9242bbeb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85a5a8c6a931f8b3a220ed61750d1f9758d0810a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18caa610d50b92331485013584f5373804dd0416 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d9f1495004710b77767393a29f33df76d7b0fb5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17f5d13a7a741dcbb2a30e147bdafe929cff4697 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1531d789df97dbf1ed3f5b0340bbf39918d9fe48 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d52f98935b70cda4eede4d52cdad4e3b886f639 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 723d20f1156530b122e9785f5efc6ebf2b838fe0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b08651e5ae2bffef5e4fb44fbdd7d467715e3b73 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc94b89dabd9df49631cbf6b18800325f3521864 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e40ad6369bc74d01af4dc41d3a9b8e25ac2aa01e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46889d1dce4506813206a8004f6c3e514f22b679 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de4cfcc4a1fcb24b72a31c5feff8c67d2ff930fc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 987f9bbd08446de3f9d135659f2e36ad6c9d14fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27b4efed7a435153f18598796473b3fba06c513d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7b7eb6245e7d7c4535975268a9be936e2c59dc8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7887c66483ffa9a839ecf1a53c5ef718dcd1d2d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36cdfd3209909163549850709d7f12fdf1316434 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4a49ff2dddc66bbe25af554caba2351fbf21702 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45eb728554953fafcee2aab0f76ca65e005326b0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d83f6e84cbeb45dce4576a9a4591446afefa50b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4b8e467e44bc1ca1ebf481ac2dfc1baaf9688dc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3efacd7aea48c93e0a42c1e83bf3c96e9e50f178 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d437078d8f95cb98f905162b2b06d04545806c59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fce04b7e4e6e1377aa7f07da985bb68671d36ba4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6e4a6416162a698d87ba15693f2e7434beac644 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1bfb44c62d15a45ca4d47b4cc482ebddb8d0ae4f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a182be6716d24fb49cb4517898b67ffcdfb5bca4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b18fd3fd13d0a1de0c3067292796e011f0f01a05 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d0ad081ca0e723ba2a12c876b4cd1574485c726 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c824bcd73de8a7035f7e55ab3375ee0b6ab28c46 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5c12ff49fc91e66f30c5dc878f5d764d08479558 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56e942318f3c493c8dcd4759f806034331ebeda5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d46e3fe9cb0dea2617cd9231d29bf6919b0f1e91 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3936084cdd336ce7db7d693950e345eeceab93a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1de8af907dbced4fde64ee2c7f57527fc43ad1cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f55c17f48d7608072199496fbcefa33f2e97bf0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b9d3b961bdf79964b883d3179f085d8835e528d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c80d727e374321573bb00e23876a67c77ff466e3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 965a08c3f9f2fbd62691d533425c699c943cb865 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acac4bb07af3f168e10eee392a74a06e124d1cdd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c255c14e9eb15f4ff29a4baead3ed31a9943e04e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79d9c4cb175792e80950fdd363a43944fb16a441 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4228b2cc8e1c9bd080fe48db98a46c21305e1464 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8535d1a2485b4e063ab9ef0a2719a1aab8187d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3e8ce69bec72277354eff252064a59f515d718a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17f245cad19bf77a5a5fecdee6a41217cc128a73 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db828cdfef651dd25867382d9dc5ac4c4f7f1de3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2840c626d2eb712055ccb5dcbad25d040f17ce1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 342a0276dbf11366ae91ce28dcceddc332c97eaf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863a40e0d35f3ff3c3e4b5dc9ff1272e1b1783b1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de9a6bb0c8931e7f74ea35edb372e5ca7d0a5047 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6becbaf35fa2f807837284d33649ba5376b3fe21 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9d884511ed2c8e9ca96de04df835aaa6eb973eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e1e19d33e1caa107dc0a6cc8c1bfe24d8153f51 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 891b124f5cc6bfd242b217759f362878b596f6e2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 750e9677b1ce303fa913c3e0754c3884d6517626 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8511513540ece43ac8134f3d28380b96db881526 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a72a7a43ae004f1ae1be392d4322c07b25deff5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 616ae503462ea93326fa459034f517a4dd0cc1d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f54c8919f297a5e5c34517d9fed0666c9d8aa10 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1234a1077f24ca0e2f1a9b4d27731482a7ed752b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d9b7b09a7c66e19a608d76282eacc769e349150 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d48ed95cc7bd2ad0ac36593bb2440f24f675eb59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fc9e6150957ff5e011142ec5e9f8522168602ec ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 123cb67ea60d2ae2fb32b9b60ebfe69e43541662 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2baadf3aabe526bdaa5dfdf27fac0a1c63aa04 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b6080369e7ee47b7d746685d264358c91d656bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da09f02e67cb18e2c5312b9a36d2891b80cd9dcd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2af98929bd185cf1b4316391078240f337877f66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a40d848794133de7b6e028f2513c939d823767cb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9eb902eee03806db5868fc84afb23aa28802e841 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 322db077a693a513e79577a0adf94c97fc2be347 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4d8fb73daa82420bdc69c37f0d58f7cb4cd505a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7aba59a2609ec768d5d495dafd23a4bce8179741 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c39afa1f85f3293ad2ccef684ff62bf0a36e73c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15c4a95ada66977c8cf80767bf1c72a45eb576b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0441fdcbc4ea1ab8ce5455f2352436712f1b30bb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3287148a2f99fa66028434ce971b0200271437e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 598cd1d7f452e05bfcda98ce9e3c392cf554fe75 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fbd096841ddcd532e0af15eb1f42c5cd001f9d74 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d38b9a916ab5bce9e5f622777edbc76bef617e93 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f09906d27affb8d08a96c07fc3386ef261f97af ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1ad78eb7494513f6c53f0226fe3cb7df4e67513 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5452aa820c0f5c2454642587ff6a3bd6d96eaa1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3e5d9cda8eae5b0f19ac25efada6d0b3b9e04e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c5b87bcdd70810a20308384b0e3d1665f6d2922 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ea3dbdf67af10ccc6ad22fb3294bbd790a3698f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9044abce7e7b3d8164fe7b83e5a21f676471b796 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f3989f27e91119bb29cc1ed93751c3148762695 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 678821a036c04dfbe331d238a7fe0223e8524901 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6404168e6f990462c32dbe5c7ac1ec186f88c648 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27c577dfd5c7f0fc75cd10ed6606674b56b405bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5244f7751c10865df94980817cfbe99b7933d4d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c544101eed30d5656746080204f53a2563b3d535 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29d94c622a7f6f696d899e5bb3484c925b5d4441 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ae512e69f37e37431239c8da6ffa48c75684f87 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a0ad305883201b6b3e68494fc70089180389f6e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bc91d7495d7eb70a70c1f025137718f41486cd2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f24786fca46b054789d388975614097ae71c252e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13e3a809554706905418a48b72e09e2eba81af2d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9b915b066f28f4ac7382b855a8af11329e3400d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 64a4730ea1f9d7b69a1ba09b32c2aad0377bc10a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ffde74dd7b5cbc4c018f0d608049be8eccc5101 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11e0a94f5e7ed5f824427d615199228a757471fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6192ad1aed30adc023621089fdf845aa528dde9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b9b6fe0dd99803c80a3a3c52f003614ad3e0adf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc93c4f3ddade455cc4f55bc93167b1d2aeddc4f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f225d4b8c3d7eb90038c246a289a18c7b655da2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e91a05aabb73cca7acec1cc0e07d8a562e31b45 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 673b21e1be26b89c9a4e8be35d521e0a43a9bfa1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 811a6514571a94ed2e2704fb3a398218c739c9e9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6a2942a982c2541a6b6f7c67aa7dbf57ed060ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a02e432530336f3e0db8807847b6947b4d9908d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56d5d0c70cf3a914286fe016030c9edec25c3ae0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b820e617ab21b372394bf12129c30174f57c5d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da5e58a47d3da8de1f58da4e871e15cc8272d0e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2b9ac30337761fa0df74ce6e0347c5aabd7c072 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90811b1bd194e4864f443ae714716327ba7596c2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7c4b323bb2d3960430b11134ee59438e16d254e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5cbe7d7de5a29c7e714214695df1948319408d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e3883a0691ce1957996c5b37d7440ab925c731e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6d544f67a1f3572781271b5f3030d97e6c6d9e2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0e9eef45194039af6b8c22edf06cfd7cb106727a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7dcb07947cd71f47b5e2e5f101d289e263506ca9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ddf05a78475a194ed1aa082d26b3d27ecc77475 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9bd04844725661c8aa2aef11091f01eeab69486 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85b836b1efb8a491230e918f7b81da3dc2a232c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5127e167328c7da2593fea98a27b27bb0acece68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c437ee5deb8d00cf02f03720693e4c802e99f390 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e4a44b302d3a3e49aa014062b42de84480a8d4f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b6f38d02c8ed1fb07eb6782b918f31efc4c42f3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59587d81412ca9da1fd06427efd864174d76c1c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48fab54afab49f18c260463a79b90d594c7a5833 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a8bdce7a665a0b38fc822b7f05a8c2e80ccd781 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8828ced5818d793879ae509e144fdad23465d684 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5a75ab7533de99a4f569b05535061581cb07a41 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7071ce13476cae789377c280aa274e6242fd756 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcc166d3a6e235933e823e82e1fcf6160a32a5d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3b7263e0bb9cc1d94e483e66c1494e0e7982fd1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59879a4e1e2c39e41fa552d8ac0d547c62936897 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0524096fa9f3add551abbf68ee22904b249d82f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36a984803df08b0f6eb5f8a73254dd64bc616b67 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfe3ba3e5c08ee88afe89cc331081bbfbf5520e0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e583a9e22a7a0535f2c591579873e31c21bccae0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e11f12adffec6bf03ea1faae6c570beaceaffc86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b3b65287e6849628066d5b9d08ec40c260a94dc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3061698403f0055d1d63be6ab3fbb43bd954e8e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35bceb16480b21c13a949eadff2aca0e2e5483fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7fa5ef735754e640bd6be6c0a77088009058d74 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a98e0af511b728030c12bf8633b077866bb74e47 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c7ac239a2c9e303233e58daee02101cc4ebf3d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb7fd3f0dd99dc6c49da6fd7e78a392c4ef1b33 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 031271e890327f631068571a3f79235a35a4f73e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4b50e7348815402634b6b559b48191dba00a751 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 460cafb81f86361536077b3b6432237c6ae3d698 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6720e8df09a314c3e4ce20796df469838379480d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ab169407354d4b9512447cd9c90e8a31263c275 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56488ced0fae2729b1e9c72447b005efdcd4fea7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 294ee691d0fdac46d31550c7f1751d09cfb5a0f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87ae42528362d258a218b3818097fd2a4e1d6acf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f631214261a7769c8e6956a51f3d04ebc8ce8efd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 468cad66ff1f80ddaeee4123c24e4d53a032c00d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1053448ad885c633af9805a750d6187d19efaa6c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90b20e5cd9ba8b679a488efedb1eb1983e848acf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fbb7027ec88e2e4fe7754f22a27afe36813224b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8ce24a835cae8c623e2936bec2618a8855c605b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65747a216c67c3101c6ae2edaa8119d786b793cb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d0f24c9facb5be0c98c8859a5ce3c6b0d08504ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf1d5bd4208514bab3e6ee523a70dff8176c8c80 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3175b5b21194bcc8f4448abe0a03a98d3a4a1360 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fca367548e365f93c58c47dea45507025269f59a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48a17c87c15b2fa7ce2e84afa09484f354d57a39 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b813371f5a8af95152cae109d28c7c97bfaf79f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d6310db456de9952453361c860c3ae61b8674ea ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 685760ab33b8f9d7455b18a9ecb8c4c5b3315d66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22a88a7ec38e29827264f558f0c1691b99102e23 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 517ae56f517f5e7253f878dd1dc3c7c49f53df1a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c72b9a3eaabbe927ba77d4f69a62f35fbe60e2e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e0e315a371cdfc80993a1532f938d56ed7acee4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8d0aa1ef19e2c3babee458bd4504820f415148e0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8867348ca772cdce7434e76eed141f035b63e928 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b00ad00130389f5b00da9dbfd89c3e02319d2999 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ab454f0ccf09773a4f51045329a69fd73559414 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7dd618655c96ff32b5c30e41a5406c512bcbb65f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45c0f285a6d9d9214f8167742d12af2855f527fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1545bd9cd6953c5b39c488bf7fe179676060499 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1d1d2cb421f16bd277d7c4ce88398ff0f5afb29 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bd7fb976ab0607592875b5697dc76c117a18dc73 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d5bfb5d6d22f8fe8c940f36e1fbe16738965d5f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b6b9510e0724bfcb4250f703ddf99d1e4020bbc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0b92e40ece170b59bced0cea752904823e06e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 97ab197140b16027975c7465a5e8786e6cc8fea1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8858a63cb33319f3e739edcbfafdae3ec0fefa33 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94029ce1420ced83c3e5dcd181a2280b26574bc9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13647590f96fb5a22cb60f12c5a70e00065a7f3a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 741dfaadf732d4a2a897250c006d5ef3d3cd9f3a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4d5caa79e6d88bb3f98bfbefa3bfa039c7e157a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 394ed7006ee5dc8bddfd132b64001d5dfc0ffdd3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 192472f9673b18c91ce618e64e935f91769c50e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89422841e46efa99bda49acfbe33ee1ca5122845 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d9310055f364cf3fa97f663287c596920d6e7e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 694265664422abab56e059b5d1c3b9cc05581074 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbb58869063fe803d232f099888fe9c23510de7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33819a21f419453bc2b4ca45b640b9a59361ed2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17a172920fde8c6688c8a1a39f258629b8b73757 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24740f22c59c3bcafa7b2c1f2ec997e4e14f3615 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bcd37b68533d0cceb7e73dd1ed1428fa09f7dc17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55b67e8194b8b4d9e73e27feadbf9af6593e4600 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de3b9639a4c2933ebb0f11ad288514cda83c54fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 258403da9c2a087b10082d26466528fce3de38d4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08457a7a6b6ad4f518fad0d5bca094a2b5b38fbe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3288a244428751208394d8137437878277ceb71f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b425301ad16f265157abdaf47f7af1c1ea879068 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca288d443f4fc9d790eecb6e1cdf82b6cdd8dc0d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4287f65878000b42d11704692f9ea3734014b4c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f683c6623f73252645bb2819673046c9d397c567 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd96cceded27d1372bdc1a851448d2d8613f60f3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6917ae4ce9eaa0f5ea91592988c1ea830626ac3a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1401803ccf7db5d897a5ef4b27e2176627c430e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8d2239f24f6a54d98201413d4f46256df0d6a5f3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58fb1187b7b8f1e62d3930bdba9be5aba47a52c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 402a6c2808db4333217aa300d0312836fd7923bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- feb1ea0f4aacb9ea6dc4133900e65bf34c0ee02d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55dcc17c331f580b3beeb4d5decf64d3baf94f2e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 129f90aa8d83d9b250c87b0ba790605c4a2bb06a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57050184f3d962bf91511271af59ee20f3686c3f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 778234d544b3f58dd415aaf10679d15b01a5281f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91725f0fc59aa05ef68ab96e9b29009ce84668a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0fdf6c3aaff49494c47aaeb0caa04b3016e10a26 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac62760c52abf28d1fd863f0c0dd48bc4a23d223 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f164627a85ed7b816759871a76db258515b85678 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b82dbf538ac0d03968a0f5b7e2318891abefafaa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e837b901dcfac82e864f806c80f4a9cbfdb9c9f3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d2307532d679393ae067326e4b6fa1a2ba5cc06 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06590aee389f4466e02407f39af1674366a74705 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9dbf201b4f0b3c2b299464618cb4ecb624d272c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38b3cfb9b24a108e0720f7a3f8d6355f7e0bb1a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9240918aa03e49feabe43af619019805ac76786 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe5289ed8311fecf39913ce3ae86b1011eafe5f7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28ed48c93f4cc8b6dd23c951363e5bd4e6880992 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c1faef799095f3990e9970bc2cb10aa0221cf9c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86ea63504f3e8a74cfb1d533be9d9602d2d17e27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f91495e271597034226f1b9651345091083172c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c1169f6ea406fec1e26e99821e18e66437e65eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a243827ab3346e188e99db2f9fc1f916941c9b1a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fbb69306c0e14bacb8dcb92a89af27d3d5d631f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25dca42bac17d511b7e2ebdd9d1d679e7626db5f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e79999c956e2260c37449139080d351db4aa3627 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d9b1f4f9fa8c9f030e3207e7deacc5d5f8bba4e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ee2afb00afaf77c883501eac8cd614c8229a444 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecf37a1b4c2f70f1fc62a6852f40178bf08b9859 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de84cbdd0f9ef97fcd3477b31b040c57192e28d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17af1f64d5f1e62d40e11b75b1dd48e843748b49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1019d4cf68d1acdbb4d6c1abb7e71ac9c0f581af ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 600fcbc1a2d723f8d51e5f5ab6d9e4c389010e1c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8caeec1b15645fa53ec5ddc6e990e7030ffb7c5a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de5bc8f7076c5736ef1efa57345564fbc563bd19 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c083f3d0b853e723d0d4b00ff2f1ec5f65f05cba ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 837c32ba7ff2a3aa566a3b8e1330e3db0b4841d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63761f4cb6f3017c6076ecd826ed0addcfb03061 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e41c727be8dbf8f663e67624b109d9f8b135a4ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 143b927307d46ccb8f1cc095739e9625c03c82ff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22a0289972b365b7912340501b52ca3dd98be289 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d6ceabf5b90e7c0690360fc30774d36644f563c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b75c3103a700ac65b6cd18f66e2d0a07cfc09797 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69361d96a59381fde0ac34d19df2d4aff05fb9a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b8902e033430000481eb355733cd7065342037 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 501bf602abea7d21c3dbb409b435976e92033145 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 997b7611dc5ec41d0e3860e237b530f387f3524a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72bcdbd0a0c8cc6aa2a7433169aa49c7fc19b55b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4956c1e618bfcfeef86c6ea90c22dd04ca81b9db ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bfdf93201ea413affd4c8fbe406ea2b4a7c1b6b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e14ab55a060a5637e9a4a40e40714c1f441d952 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4375386fb9d8c7bc0f952818e14fb04b930cc87d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f96ee7463e2454e95bf0d77ca4fe5107d3f24d68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76fd1d4119246e2958c571d1f64c5beb88a70bd4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 180a5029bc3a2f0c1023c2c63b552766dc524c41 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a803803f40163c20594f12a5a0a536598daec458 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bb2fc8129ed9adabec6a605bfe73605862b20d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15ee0ac0d56a5fb5ba13fae4288621ddd2185f17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 400d728c99ddeae73c608e244bd301248b5467fc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77cde0043ceb605ed2b1beeba84d05d0fbf536c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d86e77edd500f09e3e19017c974b525643fbd539 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b3feddd1269a0b0976f4eef2093cb0dbf258f99 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dcf2c3bd2aaf76e2b6e0cc92f838688712ebda6c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a38a0053d31d0285dd1e6ebe6efc28726a9656cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 697702e72c4b148e987b873e6094da081beeb7cf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b1a2271a03313b561f5b786757feaded3d41b23f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc66da0d66a9024f0bd86ada1c3cd4451acd8907 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16a0c64dd5e69ed794ea741bc447f6a1a2bc98e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54844a90b97fd7854e53a9aec85bf60564362a02 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a97d21936200f1221d8ddd89202042faed1b9bcb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35057c56ce118e4cbd0584bd4690e765317b4c38 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a417f4cf2df39704aa4c869e88d14e9806894a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c76a8c5499d22b9c0b4c56f03b671033eb9f9bdd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3326f34712f6a96c162033c7ccf370c8b7bc1ead ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6102b349cbef03667d5715fcfae3161701a472d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4133f51817145e99b896c7063584d4dd18ad59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e29a91324ca7086b948a9e3a4dbcbb2254a24a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4ed59a86909b142ede105dd9262915c0e2993ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e729429631c84c3bd5602edcab3e7c2ab1dcce0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12276fedec49c855401262f0929f088ebf33d2cf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d00fa4f6cad398250ce868cef34357b45abaad3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c05ef0e7543c2845fd431420509476537fefe2b0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1eae9d1532e037a4eb08aaee79ff3233d2737f31 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bae67b87039b3364bdc22b8ef0b75dd18261814c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 615de50240aa34ec9439f81de8736fd3279d476d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f22ddca351c45edab9f71359765e34ae16205fa1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bac518bfa621a6d07e3e4d9f9b481863a98db293 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f7255c2c1d9e54fc2f6390ad3e0be504e4099d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8775b6417b95865349a59835c673a88a541f3e13 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ba46b8fba511fdc9b8890c36a6d941d9f2798fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2740d2cf960cec75e0527741da998bf3c28a1a45 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1391bf06a839746bd902dd7cba2c63d1e738d37 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f28a2041f707986b65dbcdb4bb363bb39e4b3f77 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- accfe361443b3cdb8ea43ca0ccb8fbb2fa202e12 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ef66a66dc52dcdf44cebe435de80634e1beb268 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa98250e1dd7f296b36e0e541d3777a3256d676c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d638bf6e55bc64c230999c9e42ed1b02505d0ce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aaeb986f3a09c1353bdf50ab23cca8c53c397831 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c92df685d6c600a0a3324dff08a4d00d829a4f5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e40b5f075bdb9d6c2992a0a1cf05f7f6f4f101a3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5f92b17729e255ca01ffb4ed215d132e05ba4da ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 279d162f54b5156c442c878dee2450f8137d0fe3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1194dc4322e15a816bfa7731a9487f67ba1a02aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6c8072daa942e9850b9d7a78bd2a9851c48cd2c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f73385a5f62a211c19d90d3a7c06dcd693b3652d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 202216e2cdb50d0e704682c5f732dfb7c221fbbc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dd7d6468a54be56039b2e3a50bcf171d8e854ff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5020eb8ef37571154dd7eff63486f39fc76fea7f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3bee808e15707d849c00e8cea8106e41dd96d771 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 331ddc27a22bde33542f8c1a00b6b56da32e5033 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0dcc6fb3dfd39df5970d6da340a949902ae629 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f6c32a918544aa239a6c636666ce17752e02f15 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84f9b603b44e0225391f1495034e0a66514c7368 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84be1263abac102d8b4bc49096530c6fd45a9b80 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59b05d06c1babcc8cd1c541716ca25452056020a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f4bc8ee9aeeec8bf7aa31c627e50761dd8bb2db ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d884adc80c80300b4cc05321494713904ef1df2d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05d2687afcc78cd192714ee3d71fdf36a37d110f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6226720b0e6a5f7cb9223fc50363def487831315 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0e84a3401c84507dc017d6e4f57a9dfdb31de53 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6da04adff0b96c5163b0c2530028b72be2fd26fd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dc5d68491eb3c73ae8478bf6edef80b18564a13 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5915114cdca6f09fa2355162a43596f5d20273be ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13ba1d87ab8fc45d2aed25662bf91053b0db5f9f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 75c161cbc017a7d176dd0d7b937db26b3ce637a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53ed0d43ab950d4deeefd238c7685dabef943800 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be53c1f33107d6891c47c784aeadd6e5ddf78e8c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b93f2a91e0791be3ffda1f753aa6c377bcab4d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac36642ce1cde75b222e20f585ddfd240f064da2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa44e6b579917814740393efc0b990e0fbbbdaf3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 386d1af07bf1f32fac5e97612441488894f2ffed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c39f9da792792d4e73fc3a5effde66576ae128c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a4b1d4d11eee3c5362a4152216376e634bd14cf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c76852d0bff115720af3f27acdb084c59361e5f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bcd57e349c08bd7f076f8d6d2f39b702015358c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ca61d4c68dad68901f8a7364dd210ef27a8b4c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f23379c496942ea6fe898a7a823b65530c126a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4582f805156095604fe07e71195cd9aa43d7a34 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79cfe05054de8a31758eb3de74532ed422c8da27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b65df78a10c3bcc40d18f3e926bb5a49821acc31 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ffd4b0193acf86b6a6e179f8673ed38bad3191d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b43ca7ff72d5f535134241e7c797ddc9c7a3573 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ba8b8b91907bd087dfe201eb0d5dae2feb54881 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e062f4d043234312446ea9445f07bd9dc309ce3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c486b2e699082763075a169c56a4b01f99fc4b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5da34fddda2ea6de19ecf04efd75e323c4bb41e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 753e908dcea03cf9962cf45d3965cf93b0d30d94 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e14356d12226cb140b0e070bd079468b4ab599b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5bb812243dd1815651281a54c8191fc8e2bc2d82 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5117c9c8a4d3af19a9958677e45cda9269de1541 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1083748b828dfca6a72014434850da0f2a0579ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11ec2e08e1796b5914cd9c4830813482753ecfa0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3942cdff6254d59100db2ff6a3c4460c1d6dbefe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc1fcf372878240e0a1af20641d361f14aea7252 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b00f3689aa19938c10576580fbfc9243d9f3866c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5de63b40dbb8fef7f2f46e42732081ef6d0d8866 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ec61d4f7208a2713adeafb947f65fdae0947067 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb8cec3cab142ef4f2773b6fc9d224461a6bf85d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5613079f2494808f048b81815bf708debf7339d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3131d1a5295508f583ae22788a1065144bec3cee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1adc79ac67e5eabaa8b8509150c59bc5bd3fd4e6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c231551328faa864848bde6ff8127f59c9566e90 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df638c22c75ddc9a43ecdde90c0c9939f5009e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6604a00a652e754cb8b6b0b9f194f839fc38d7c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf37099ea8d1d8c7fbf9b6d12d7ec0249d3acb8b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfdc8e26d36833b3a7106c306fdbe6d38dec817e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d6332820eaad3a6d3b0abc93424469a8ef7083a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4e56f627f94d93c49db40ae5944f880341f4203 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14cef2bb3e0de02f306fa37c268d6c276326c002 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3ce120c9acc7d9d4ce86aa1f07b027d1c45a9a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3050b578081b24e5cf244fa252f385ffca2bf86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3d5159679d17c1270ad72941922d0f18bdd6415 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c04c60f12d3684ecf961509d1b8db895e6f9aac0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 564db4f20bd7189a50a12d612d56ed6391081e83 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 924da9604d6474fd1be99dffdcc539eaaaa31626 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a9eeebeddaa20d10881ad505cc362a3a391e15b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfdf98cadedfa6042117cd7a83952ca2f465d26f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95a83a7de5d3ce84206b9267962c32df4d071c21 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fda0ec787de5159534ebc8b81824920d9613575 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c63cd9873bf733c068a5f183442ec82873fef1fc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a45790a8699a384c3d218ac4ca8a53c109fd944 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b01b589e7a19d6be5bd6465e600f84aa8015282 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66beac619ba944afeca9d15c56ccc60d5276a799 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93e19791659c279f4f7e33a433771beca65bf9ea ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0d828fcb1964a578ef3979297c59a41aedba932 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a0eee3989abd3a5d6d47d0298bd056a954d379b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2effd7a10798a1e8e53bb546a67b2ccdea882c50 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f347c6da5e83b137c337f9ccb190090c27cfc953 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93ad8da5a8c6ddcbe67abae2cc4a7aad8084e736 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef9395f5ffe75f4e43d80cd1fa7b34c8a4db66fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24effa4861d6d1e8cffe848ae63fa2ed40be03f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d203a0da0c709d301e973a9fe3569efd1fb2bd3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4043468de4fc448b6fda670f33b7f935883793a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e1be3032d521e3bf2f49fc87f82c8f978079ea6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eba67171bf6ea653dfb6a6ae288f3c1d10829870 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79ec3a5191f9dfd398d98fe7372ad841f34876ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 105fea3ef3be4b47cc3602423919329162dfcecf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5278c514068f469f2fca7638ef1e1b27556a37a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f34a25eaa6de187797442bc6e0514289d77fed2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a935501a2f62d103cf9d69d775399dae2e7dfead ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26719d252dd8e3a53c08da2ed3c3a8d62fbbc30a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2c1bd80350f692c5c2298cb88859564ec0a061b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 039bfe373c990fc6db3808d255abaff91235e82f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5625170b248edc6a570c977fb1f8e7430ffd0b5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dafe71a3e2d5cfb9b80805a26d5442ca5ad8332f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f043f00d5161794ef538802dcc9ba75e375c058 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a5885a4c5983242b1356b57eafeb59a9d5c0d0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c982c1f50bd7ae3bc4a1afc09e9ad11aecd434f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 273400f95ae036c01d4b0fd7a7ca6ab160efd958 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 233e3ffe0ef35dbabe49340ba567499690dcc166 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b675bf555e89e708f1b8f79bd90796dd395837b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7252e217fe6d8f05dd50f6e125c33a1c6fff602 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbbb6b349e8d0557e7e55e2d05819d6bdaed3769 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebee400cfa4a532018ee904c22c7e3e6619ca4de ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e10706b6c167454a723636e0929061201a2f461b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80b60fafa94b794fa77fab85e1df66f52598f3ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e509130b7dfc97eeb4a517d6c9c65a8d6204234 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d49273897bd317323e0a3bbbc01b76e83370f0c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4d5e7c9dab813adf9bfd8198bb9bb00c9a9503b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a061029eddee38110e416e3c4f60d553dafc9e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 323259cc3d977235f4e7e8980219e5e96d66086e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80d01f0ef89e287184ba6d07be010ee3f16a74d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd47d6b11833870ce23102a3373b7a50a1b45d00 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58fa2c401856f93712ae6cc45d4dc3458ee4b4f4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc922f3678a1b01cac2b3f1ec74b831ffec52a71 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2405cf54ac06140a0821f55b34c1d54f699e8e73 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 579d1b8174c9be915c0fa17a67fc38cc6de36ad7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8501e908bb8c531dfa75cef33fcec519027f4e5b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7129dc00826cb344c0202f152f1be33ea9326fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85c6252b54108750291021a74dc00895f79a7ccf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1accc498c40e684f870d38b7d128739a0ebf57cf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27ceafbb3f74b4677d5bae6c7ea031de07c6cfad ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c60b88138b836307bdde0487c4ffb82121b1c5e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69a56c4e2addd1ec53bb40e8a18f52353d1fc28c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03bfdb16cd7cc6e1c7c8d3b59552da7de3d82d1c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35ddb45b41b3de2d4f783608ad8d8752f6557997 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dc09f0ece61ef2bd629e8bfe532aa24f4f8e0c2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 207bf7bf30651c3284408d87d7c499e43db6bc83 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7e59d3ef86beb3b3b3e53a610af122b2220841b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0651f0964ba5a33257ebbda1e92c7a1649a4a058 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 062aafa396866d4dfe8f3fd2f32d46fa7c01b6dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea6af04977c197fd07ab812d394dcb61feebaf67 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657e98094f0f669809bc0e47f3d6bd9a8124cf32 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c35350e5bc4fe113330818ca6784ff368c5ffef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 620dbee78ed8481d108327c4c332899df7cb8ef4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6383196b7bb0773c0083a2a3d49a95e5479715bf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9066712dca21ef35c534e068f2cc4fefdccf1ea3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 933d23bf95a5bd1624fbcdf328d904e1fa173474 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f66cfbbce58b4b552b041707a12d437cc5f400a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7156cece3c49544abb6bf7a0c218eb36646fad6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33ebe7acec14b25c5f84f35a664803fcab2f7781 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70094734d601e1220c95ac586fdffbda3a23e10b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5962862e9ba0a1c9a14306688973946f6f7ce75c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71cd409660bc5b8c211dc7c51afae481d822d593 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30472cf3132b8c03e528b23d1c7533de740e28ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae54e18d7ca7bc8b8fbc667119fb60b25f0f3871 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b975d9fcf5924800f9ea5d68d7d79f743ca9af7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48af0ac87dc3beef4d3e6c7982b158d50f7b2a6e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12b32450c210cec1fdd8b2c19d564776e8054aa3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55f0245f3ee538ec49e84bcb28c33b135a07f0b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9aa93b5890acb152c5824a8f75c221cf1addfd1b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57a561cda141a0fed3129f4f3488e3b91805e638 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edf9fc528277a53ec37d1bd79fb4f8608cce11ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bf2083922b7bccc31917bf9cdb74e3d4892c2600 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 277be842bf30848e7292a931169bd4c8ff726dee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b919010b0459b2540fb609c5d1aad0b8dc0fab01 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3980f11a9411d0b487b73279346cfae938845e7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 579e2c07bbb39577fa32fed8cb42297c1c5516d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd5f111439e7a2e730b602a155aa533c68badbf8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abc2e538c6f2fe50f93e6c3fe927236bb41f94f4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52654c0216dcbe3fa2d9afb1de12c65d18f6a7a4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5083752d5d02d6c46bc2f18ba53a28d119af5b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0aa1ce356c7c3d53d6ee035b4c7bcf425e108cdc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b38020ae17ed9f83af75ce176e96267dcce6ecbd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b63b3bc493a4a44ba1d857c78e4496e40f1d7b8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 178dff753350014f6395f41bc21f1adddf73c8e0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 127e511ea2e22f3bd9a0279e747e9cfa9509986d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bf8e89e6784e121ddc32990d586e2276ec84596 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 590638f9a56440a2c41cc04f52272ede04c06a43 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2856af1d9289ee086b10768b53b65e0fd13a335 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d3e2f7f57620398df896d9569c5d7c5365f823d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- befb617d0c645a5fa3177a1b830a8c9871da4168 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c50d8be2dc5ae74e53e44a87f580bf25956af9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f6a6e35d003c243968cdb41b72fbbe609e56841 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0425bc64384fe9a6a22edb7831d6e8c1756e2c7e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43eb1edf93c381bf3f3809a809df33dae23b50d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b377c07200392ac35a6ed668673451d3c9b1f5c7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa8fe4cad336a7bdd8fb315b1ce445669138830c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7781e1056c672d5212f1aaf4b81ba6f18e8dd8b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 125b4875b5035dc4f6bad4351651a4236b82baeb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39f85c4358b7346fee22169da9cad93901ea9eb9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50c90666c4de8ac93accdf4040e3eb010a82a46a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba8d148121b1dbba444849fe9549f36a7d17db28 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdf2e667f969e5c22985dd232fe3f107fe26e750 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3410fdc42075bd788a78f4b2a68c5e2cc0930409 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07eaa4ce2696a88ec0db6e91f191af1e48226aca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4251bd59fb8e11e40c40548cba38180a9536118c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 451561c252323e74696dbe0be36601c95a75a8c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2454ae89983a4496a445ce347d7a41c0bb0ea7ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84968314ddcbaa0e4b685c71c6ea5524b3aefc80 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bca0cb7f507d6a21a652307737a57057692d2f79 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4186a2dbbd48fd67ff88075c63bbd3e6c1d8a2df ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 637eadce54ca8bbe536bcf7c570c025e28e47129 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2834177c0fdf6b1af659e460fd3348f468b8ab0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c0a65226f038c58fc6d6ed525f38fc00b3579b7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c0c2fc4ee2d8a5d0a2de50ba882657989dedc51 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ab307935bd2bbda52f853f9fc6b49f01897727 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07c20b4231b12fee42d15f1c44c948ce474f5851 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92a97480edcc0f0de787a752bf90feed0445dd39 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b7f5cb25e0e03e06ec506d31c001c172dd71ef6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c68459a17ff59043d29c90020fffe651b2164e6a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b01824b1aecf8aadae4501e22feb45c20fb26bce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 708b8dda8e7b87841a5f39c60b799c514e75a9c7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccde80b7a3037a004a7807a6b79916ce2a1e9729 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a119924bd314934158515a1a5f5877be63f6f91 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15b9129ec639112e94ea96b6a395ad9b149515d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a7eedde7f5d5082f7f207ef76acccd24a6113b1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 101fb1df36f29469ee8f4e0b9e7846d856b87daa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9374a916588d9fe7169937ba262c86ad710cfa74 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20f202d83bdf1f332a3cb8f010bcf8bf3c2807bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ee31065abea645cbc2cf3e54b691d5983a228b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8430529e1a9fb28d8586d24ee507a8195c370fa5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a4bfd979e5d4ea0d0457e552202eb2effc36cac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cdfaceebe916c91acdf8de3f9506989bc70ad65 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e6d110fbfa1f2e6a96bc8329e936d0cf1192844 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 832b56394b079c9f6e4c777934447a9e224facfe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5df44408218003eb49e3b8fc94329c5e8b46c7d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6745f4542cfb74bbf3b933dba7a59ef2f54a4380 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a28d3d18f9237af5101eb22e506a9ddda6d44025 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6eeae8b24135b4de05f6d725b009c287577f053d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ead94f267065bb55303f79a0a6df477810b3c68d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac1cec7066eaa12a8d1a61562bfc6ee77ff5f54d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6acec357c7609fdd2cb0f5fdb1d2756726c7fe98 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4fa1cb3c3e84cad8b74edb28531d2e27508be26 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb0f2c241718bc7462be44e5e8e1e36e35f9b15 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86fa577e135713e56b287169d69d976cde27ac97 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a58a60ac5f322eb4bfd38741469ff21b5a33d2d5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff3d142387e1f38b0ed390333ea99e2e23d96e35 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- beb76aba0c835669629d95c905551f58cc927299 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af9e37c5c8714136974124621d20c0436bb0735f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c73e9cd66c77934f8a262b0c1bab9c2f15449ba ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2df1f56cccab13d5c92abbc6b18be725e7b4833 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58d692e2a1d7e3894dbed68efbcf7166d6ec3fb7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b67bd4c730273a9b6cce49a8444fb54e654de540 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00c5497f190172765cc7a53ff9d8852a26b91676 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 806450db9b2c4a829558557ac90bd7596a0654e0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39229db70e71a6be275dafb3dd9468930e40ae48 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f51eeb2f9a1efe22e45f7a1f7b963100f2f8e6b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ce1193c851e98293a237ad3d2d87725c501e89f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2da2b90e6930023ec5739ae0b714bbdb30874583 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ace1fed6321bb8dd6d38b2f58d7cf815fa16db7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1e9df152219e85798d78284beeda88f6baa9ec7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52bb0046c0bf0e50598c513e43b76d593f2cbbff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f41d42ee7e264ce2fc32cea555e5f666fa1b1fe9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4cde8df886112ee32b0a09fcac90c28c85ded7f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9bbdc87a7263f479344fcf67c4b9fd6005bb6cd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43ab2afba68fd0e1b5d138ed99ffc788dc685e36 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e648efdcc1ca904709a646c1dbc797454a307444 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b426893ce331f71165c82b1a86252cd104ae3db ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572ace094208c28ab1a8641aedb038456d13f70b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c4269a21b9edf8477f2fee139d5c1b260ebc4f8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb5ba18ab1a875ef6b62c65342de476be47871b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbc18b92362f60afc05d4ddadd6e73902ae27ec7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bca9899b5edeed7f964e3124e382c3573183c68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 615fc1984b0cc09c8eeab51a1d1c4e05b583b4a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2792e534dd55fe03bca302f87a3ea638a7278bf1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b89f39432cdb395f5fbb9553b56595d29e2b773 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00499d994fea6fb55a33c788f069782f917dbdd4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2a14e4b96a0ffc5353733b50266b477539ef899 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20c34a929a8b2871edd4fd44a38688e8977a4be6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c658c16f3437ed7e78f6072b6996cb423a8f504 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59e26435a8d2008073fc315bafe9f329d0ef689a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c53eeaca19163b2b5484304a9ecce3ef92164d70 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25945899a0067a2dbeeae7a8362a6d68bbc5c6ba ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fe5cfa0e063a8d51a1eb6f014e2aaa994e5e7d4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f62c9b9c0c9bda792c3fa531b18190e97eb53509 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33fa178eeb7bf519f5fff118ebc8e27e76098363 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c9f55dd8e6697ab2f9eaf384315abd4cbefad38 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb509603e8303cd8ada7cfa1aaa626085b9bb6d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4fb3091a75005b047fbea72f812c53d27b15412 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e52a00c81d032b47f1bc352369be3ff8eb87b27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fcbda4e363262a339d1cacbf7d2945ec3bd83f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35a09c0534e89b2d43ec4101a5fb54576b577905 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 972a8b84bb4a3adec6322219c11370e48824404e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dd76b9e72b21d2502a51e3605e5e6ab640e5f0bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa5e366889103172a9829730de1ba26d3dcbc01b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e64957d8e52d7542310535bad1e77a9bbd7b4857 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 989671780551b7587d57e1d7cb5eb1002ade75b4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9cb007076542e32f7b99bb18bc6ec424f3b407b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b3ecf2dcace76b65765ddf1901504b0b4861b08 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11b1f6edc164e2084e3ff034d3b65306c461a0be ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 985093bae160419782b3d3cb9151e2e58625fd52 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657a57adbff49c553752254c106ce1d5b5690cf8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9840afda82fafcc3eaf52351c64e2cfdb8962397 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 225999e9442c746333a8baa17a6dbf7341c135ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 919164df96d9f956c8be712f33a9a037b097745b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9acc7806d6bdb306a929c460437d3d03e5e48dcd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e063d101face690b8cf4132fa419c5ce3857ef44 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aed099a73025422f0550f5dd5c3e4651049494b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17852bde65c12c80170d4c67b3136d8e958a92a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9946e0ce07c8d93a43bd7b8900ddf5d913fe3b03 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5cf1bc1d3e38ab32a20707d66b08f1bb0beae91 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b372e26366348920eae32ee81a47b469b511a21f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26029c29765043376370a2877b7e635c17f5e76d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3fd37230e76a014cf5c45d55daf0be2caa6948b7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9513aa01fab73f53e4fe18644c7d5b530a66c6a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53d26977f1aff8289f13c02ee672349d78eeb2f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbf957a36f5ed47c4387ee8069c56b16d1b4f558 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 345d6be7829c6dab359390ebc5e1a7ae0c6d48bb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 048acc4596dc1c6d7ed3220807b827056cb01032 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a07cdbae1d485fd715a5b6eca767f211770fea4d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8f8582274cd6a368a79e569e2995cee7d6ea9f9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f2b19de3301e76ab3a6187a49c9c93ff78bafbd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30d822a468dc909aac5c83d078a59bfc85fc27aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa921fee6014ef43bb2740240e9663e614e25662 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b50af0a20bcc7280940ce07593007d17c5acabd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6662422ba52753f8b10bc053aba82bac3f2e1b9c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e68d907022c84392597e05afc22d9fe06bf0927 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d97afa24ad1ae453002357e5023f3a116f76fb17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- babf5765da3e328cc1060cb9b37fbdeb6fd58350 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9d6494f1075e5370a20e406c3edb102fca12854 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 152bab7eb64e249122fefab0d5531db1e065f539 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56823868efddd3bdbc0b624cdc79adc3a2e94a75 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50a9920b1bd9e6e8cf452c774c499b0b9014ccef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a534eba97db3c2cfb2926368756fd633d25c056 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b197b2dbb527de9856e6e808339ab0ceaf0a512d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c770f8e98a0079497d3eb5bc31e7260cc70cc63 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c3bbc43d097656b54c808290ce0c656d127ce47 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb0ac304431e8aed686a8a817aaccd74b1ba4f24 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea33fe8b21d2b02f902b131aba0d14389f2f8715 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1496979cf7e9692ef869d2f99da6141756e08d25 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7184340f9d826a52b9e72fce8a30b21a7c73d5be ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36f838e7977e62284d2928f65cacf29771f1952f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d9e7f1121d3bdbb08291c7164ad622350544a21 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1bd99c0a376dec63f0f050aeb0c40664260da16 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7a5c05875a760c0bf83af6617c68061bda6cfc5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58e2157ad3aa9d75ef4abb90eb2d1f01fba0ba2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ef1f89abe5b2334705ee8f1a6da231b0b6c9a50 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 291d2f85bb861ec23b80854b974f3b7a8ded2921 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78a46c432b31a0ea4c12c391c404cd128df4d709 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ba2aef8f59009756567a53daaf918afa851c304 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0725af77afc619cdfbe3cec727187e442cceaf97 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9dfd6bcca5499e1cd472c092bc58426e9b72cccc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9cec00938d9059882bb8eabdaf2f775943e00e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b999cae064fb6ac11a61a39856e074341baeefde ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0cd09bd306486028f5442c56ef2e947355a06282 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13a26d4f9c22695033040dfcd8c76fd94187035b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81d8788d40867f4e5cf3016ef219473951a7f6ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7a4388eeaa4b6b94192dce67257a34c4a6cbd26 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d3a24b22d340c62fafc0e75a349c0ffe34d99d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a10aa36bc6a82bd50df6f3df7d6b7ce04a7070f1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44a601a068f4f543f73fd9c49e264c931b1e1652 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b9776e88f7abb59cebac8733c04cccf6eee1c60 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1047b41e2e925617474e2e7c9927314f71ce7365 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddc5496506f0484e4f1331261aa8782c7e606bf2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c23ca3cd9b9bbeaca1b79068dee1eae045be5b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec3d91644561ef59ecdde59ddced38660923e916 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e70f3218e910d2b3dcb8a5ab40c65b6bd7a8e9a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2ccae0d7fca3a99fc6a3f85f554d162a3fdc916 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 461fd06e1f2d91dfbe47168b53815086212862e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b5121414aaf2648b0e809e926d1016249c0222c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 685d6e651197d54e9a3e36f5adbadd4d21f4c7e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a519942a295cc39af4eebb7ba74b184decae13fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4712c619ed6a2ce54b781fe404fedc269b77e5dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc518251eb64c3ef90502697a7e08abe3f8310b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 146a6fe18da94e12aa46ec74582db640e3bbb3a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87afd252bd11026b6ba3db8525f949cfb62c90fc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f8e6f7ab1e6dbd95c268ba0fc827abc62009013 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29c20c147b489d873fb988157a37bcf96f96ab45 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b1f32e231d391f8e6051957ad947d3659c196b2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 764cc6e344bd034360485018eb750a0e155ca1f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 138aa2b8b413a19ebf9b2bbb39860089c4436001 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 038f183313f796dc0313c03d652a2bcc1698e78e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5047344a22ed824735d6ed1c91008767ea6638b7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef592d384ad3e0ead5e516f3b2c0f31e6f1e7cab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22757ed7b58862cccef64fdc09f93ea1ac72b1d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc2201e660014c5d91fec8e3c3a3fa5a66dcf33b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9117cdbb48ffc458d809715c6ab6bc6b416ef621 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a885d23bab51b0c00be2780055ff63b3f3c1a4c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81279eeac5c525354cbe19b24a6f42219407c1f9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50af864298826feaf94772982bbc7b222b4b4242 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20ef1924b832a3788849793c0ee6b46dd00d4520 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4748e813980e1316aa364e0830a4dc082ff86eb0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1da744421619e134ed3ff2781b4d97fee78d9cd4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ff5822dbefa1c9c8177cbf9f0879c5cf4efc5c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0f2bb42b56f770c50a6ef087e9049fa6ac11fb5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 819d6aceeb4d31c153de58081b21ad4f8b559c0e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 179a1dcc65366a70369917d87d00b558a6d0c04d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b372fdd54bab2ad6639756958978660b12095c3c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 555b0efc2c19aa8cf7c548b4097bd20a73f572ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e99d9ab2acfaf2ebb4b150736590d6a4e33f449 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9671e15703918048982c9ff4e2e0fef21ede320 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46c9a0df4403266a320059eaa66e7dce7b3d9ac4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a67bf61b5017e41740e997147dc88282b09c6f86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5593dc014a41c563ba524b9303e75da46ee96bd5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ee861ae7a7b36a811aa4b5cc8172c5cbd6a945b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b48e4d3aa853687f420dc51969837734b70bfdec ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e746f96bcc29238b79118123028ca170adc4ff0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e80445ad5cb6da4c0070d7cb8af89da3b0803b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b01ca6a3e4ae9d944d799743c8ff774e2a7a82b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1906ee4df9ae4e734288c5203cf79894dff76cab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e2b46138ba58033738a24dadccc265748fce2ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b4a514e51fbc7dc6ddcb27c188159d57b5d1fa9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26e138cb47dccc859ff219f108ce9b7d96cbcbcd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38d59fc8ccccae8882fa48671377bf40a27915a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f8ce8901e21587cd2320562df412e05b5ab1731 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b86f9b399a8f5af792a04025fdeefc02883f3e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 282018b79cc8df078381097cb3aeb29ff56e83c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 538820055ce1bf9dd07ecda48210832f96194504 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae5a69f67822d81bbbd8f4af93be68703e730b37 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e1c89ec97ec90037583e85d0e9e71e9c845a19b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a25347d7f4c371345da2348ac6cceec7a143da2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c1a87d11df666d308d14e4ae7ee0e9d614296b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df0892351a394d768489b5647d47b73c24d3ef5f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a0b79ee574999ecbc76696506352e4a5a0d7159 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d8a577ffc6ad7ce1465001ddebdc157aecc1617 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be8955a0fbb77d673587974b763f17c214904b57 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a28942bdf01f4ddb9d0b5a0489bd6f4e101dd775 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cac6e06cc9ef2903a15e594186445f3baa989a1a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29eb123beb1c55e5db4aa652d843adccbd09ae18 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f606937a7a21237c866efafcad33675e6539c103 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 257a8a9441fca9a9bc384f673ba86ef5c3f1715d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 365fb14ced88a5571d3287ff1698582ceacd80d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea81f14dafbfb24d70373c74b5f8dabf3f2225d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07996a1a1e53ffdd2680d4bfbc2f4059687859a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57a4e09294230a36cc874a6272c71757c48139f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0974f8737a3c56a7c076f9d0b757c6cb106324fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e6bece08aea01859a232e99a1e1ad8cc1eb7d36 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a988e6985849e4f6a561b4a5468d525c25ce74fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1090701721888474d34f8a4af28ee1bb1c3fdaaa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2054561da184955c4be4a92f0b4fa5c5c1c01350 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2c8d26d3b25b864ad48e6de018757266b59f708 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15941ca090a2c3c987324fc911bbc6f89e941c47 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f78d4a28f307a9d7943a06be9f919304c25ac2d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e2ba9c2028f21d11988558f3557905d21e93808 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be06e87433685b5ea9cfcc131ab89c56cf8292f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 654e54d200135e665e07e9f0097d913a77f169da ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 583cd8807259a69fc01874b798f657c1f9ab7828 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edd9e23c766cfd51b3a6f6eee5aac0b791ef2fd0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c3c271b0d6b5f56b86e3f177caf3e916b509b52 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619662a9138fd78df02c52cae6dc89db1d70a0e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8a448b7864e21db46184eab0f0a21d7725d074f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a252661c3bf4202a4d571f9c41d2afa48d9d75f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 867129e2950458ab75523b920a5e227e3efa8bbc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b27292936c81637f6b9a7141dafaad1126f268e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3cde0ee162b8f0cb67da981311c8f9c16050a62 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec28ad575ce1d7bb6a616ffc404f32bbb1af67b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b72e2704022d889f116e49abf3e1e5d3e3192d3b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab59f78341f1dd188aaf4c30526f6295c63438b1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61138f2ece0cb864b933698174315c34a78835d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50e469109eed3a752d9a1b0297f16466ad92f8d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65c9fe0baa579173afa5a2d463ac198d06ef4993 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c69b6b979e3d6bd01ec40e75b92b21f7a391f0ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 898d47d1711accdfded8ee470520fdb96fb12d46 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e825f8b69760e269218b1bf1991018baf3c16b04 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- def0f73989047c4ddf9b11da05ad2c9c8e387331 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 772b95631916223e472989b43f3a31f61e237f31 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5c0002d069382db1768349bf0c5ff40aafbf140 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13dd59ba5b3228820841682b59bad6c22476ff66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619c11787742ce00a0ee8f841cec075897873c79 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53152a824f5186452504f0b68306d10ebebee416 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3776f7a766851058f6435b9f606b16766425d7ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09c3f39ceb545e1198ad7a3f470d4ec896ce1add ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d996892ac76199886ba3e2754ff9c9fac2456d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18e3252a1f655f09093a4cffd5125342a8f94f3b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ff864138cd1e680a78522c26b583639f8f5e313 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 583e6a25b0d891a2f531a81029f2bac0c237cbf9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01eac1a959c1fa5894a86bf11e6b92f96762bdd8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfb278d74ad01f3f1edf5e0ad113974a9555038d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3323464f85b986cba23176271da92a478b33ab9c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d1212e8c412b0b4802bc1080d38d54907db879d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fbe062bf6dacd3ad63dd827d898337fa542931ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c34343d0b714d2c4657972020afea034a167a682 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c36f3648e39ace752c67c71867693ce1eee52a3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55e757928e493ce93056822d510482e4ffcaac2d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e14e3f143e7260de9581aee27e5a9b2645db72de ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1873db442dc7511fc2c92fbaeb8d998d3e62723d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abaefc59a7f2986ab344a65ef2a3653ce7dd339f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af32b6e0ad4ab244dc70a5ade0f8a27ab45942f8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4f49fb232acb2c02761a82acc12c4040699685d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2d9197cfe5d3b43cb8aee182b2e65c73ef9ab7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69dd8750be1fbf55010a738dc1ced4655e727f23 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1044116d25f0311033e0951d2ab30579bba4b051 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e2265a23ecec4e4d9ad60d788462e7f124f1bb7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aea0243840a46021e6f77c759c960a06151d91c9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c0ef65b43688b1a4615a1e7332f6215f9a8abb19 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be97c4558992a437cde235aafc7ae2bd6df84ac8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fe889ea0cb2547584075dc1eb77f52c54b9a8c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47e3138ee978ce708a41f38a0d874376d7ae5c78 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3bd05b426a0e3dec8224244c3c9c0431d1ff130 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ebc6193f7205fd1686678a5707262cb1c59bb0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28a33ca17ac5e0816a3e24febb47ffcefa663980 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fde6522c40a346c8b1d588a2b8d4dd362ae1f58f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0369384c8b79c44c5369f1b6c05046899f8886da ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18be0972304dc7f1a2a509595de7da689bddbefa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77cd6659b64cb1950a82e6a3cccdda94f15ae739 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 791765c0dc2d00a9ffa4bc857d09f615cfe3a759 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 160081b9a7ca191afbec077c4bf970cfd9070d2c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01ab5b96e68657892695c99a93ef909165456689 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc31651674648f026464fd4110858c4ffeac3c18 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f068cdc5a1a13539c4a1d756ae950aab65f5348b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9059525a75b91e6eb6a425f1edcc608739727168 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73959f3a2d4f224fbda03c8a8850f66f53d8cb3b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a32a6bcd784fca9cb2b17365591c29d15c2f638e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c6d7830d9b87f47a0bfe82b3b5424a32e3164ad ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f963881e53a9f0a2746a11cb9cdfa82eb1f90d8c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0019d7dc8c72839d238065473a62b137c3c350f5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f88fb96869b6ac3ed4dac7d23310a9327d3c89c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cf2d5fcf0a3db793678dd6ba9fc1c24d4eeb36a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebe8f644e751c1b2115301c1a961bef14d2cce89 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f2d76ba8e6d004ff5849ed8c7c34f6a4ac2e1e3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf5eaddde33e983bc7b496f458bdd49154f6f498 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c0990b2a6dd2e777b46c1685ddb985b3c0ef59a2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c1834134ce177cdbd30a56994fcc4bf8f5be8b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82849578e61a7dfb47fc76dcbe18b1e3b6a36951 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a320abc52307b4d4010166bd899ac75024ec9a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1687283c13caf7ff8d1959591541dff6a171ca1e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cc4d748a132377ffe63534e9777d7541a3253c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 609a46a72764dc71104aa5d7b1ca5f53d4237a75 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e6234c27abf041e4c8cd1a799950e7cd9104f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b03933057df80ea9f860cc616eb7733f140f866e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e84d05f4bbf7090a9802e9cd198d1c383974cb12 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef48ca5f54fe31536920ec4171596ff8468db5fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b3ef45167e1c2f7d1b7507c13fcedd914f87da9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33964afb47ce3af8a32e6613b0834e5f94bdfe68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98e6edb546116cd98abdc3b37c6744e859bbde5c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d061a1a506b71234f783628ba54a7bdf79bbce9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78d2cd65b8b778f3b0cfef5268b0684314ca22ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b4db556619db2ef25f0e0d90fef7e38e6713e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f73e8ba55f33394161b403bf7b8c2e0e05f47b0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af5abca21b56fcf641ff916bd567680888c364aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4fd7fca515ba9b088a7c811292f76f47d16cd7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ceee7d7e0d98db12067744ac3cd0ab3a49602457 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 624556eae1c292a1dc283d9dca1557e28abe8ee3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f97653aa06cf84bcf160be3786b6fce49ef52961 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00ce31ad308ff4c7ef874d2fa64374f47980c85c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d36f8ff4d1274a8815e932285ad6dbd6b2888af ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e2f63e64875a29e8c01a7ae17f5744680167a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9519f186ce757cdba217f222c95c20033d00f91d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c34d5c3f2a4ed7194276a026e0ec6437d339c67 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8014d2ec56fd684dc81478dee73ca7eda0ab8a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a25e1d4aa7e5898ab1224d0e5cc5ecfbe8ed8821 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 75c75fa136f6181f6ba2e52b8b85a98d3fe1718e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- beccf1907dae129d95cee53ebe61cc8076792d07 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca3fdbe2232ceb2441dedbec1b685466af95e73b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f24f9540afc0db61d197bc4932697737bff1506 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20b07fa542d2376a287435a26c967a5ee104667f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6befb28efd86556e45bb0b213bcfbfa866cac379 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ca0f897376e765989e92e44628228514f431458 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83a9e4a0dad595188ff3fb35bc3dfc4d931eff6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6019e16d5a74dc49eb7129ee7fd78b4de51dac2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fafe8a77db75083de3e7af92185ecdb7f2d542d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3203cd7629345d32806f470a308975076b2b4686 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98a313305f0d554a179b93695d333199feb5266c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86523260c495d9a29aa5ab29d50d30a5d1981a0c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c946bf260d3f7ca54bffb796a82218dce0eb703f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 264ba6f54f928da31a037966198a0849325b3732 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec0657cf5de9aeb5629cc4f4f38b36f48490493e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a17c43d0662bab137903075f2cff34bcabc7e1d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dd51f1d63fa5ee704c2bdf4cb607bb6a71817d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7029773512eee5a0bb765b82cfdd90fd5ab34e15 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61f3db7bd07ac2f3c2ff54615c13bf9219289932 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a21a9f6f13861ddc65671b278e93cf0984adaa30 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5bd7d44ff7e51105e3e277aee109a45c42590572 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ccd777c386704911734ae4c33a922a5682ac6c8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ad01ee239f9111133e52af29b78daed34c52e49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a93eb7e8484e5bb40f9b8d11ac64a1621cf4c9cd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e5aae2fc8c3832bdae1cd5e0a269405fb059231 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 739fa140235cc9d65c632eaf1f5cacc944d87cfb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dec4663129f72321a14efd6de63f14a7419e3ed2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7da101ba9a09a22a85c314a8909fd23468ae66f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b81273e70c9c31ae02cb0a2d6e697d7a4e2b683a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 968ffb2c2e5c6066a2b01ad2a0833c2800880d46 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 523fb313f77717a12086319429f13723fe95f85e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d810f2700f54146063ca2cb6bb1cf03c36744a2c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c12fef1b1971ba7a50e7e5c497caf51e0f68479 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9004e3a1cf33110f2cbc458f1dc3259c930ad9b4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0cfe75db81bc099e4316895ff24d65ef865bced6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f24736ad5b55a89b1057d68d6b3f3cd01018a2e8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b2e9a8312412b9c8d4e986510dcc30ee16c5f4c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e86eb305a542cee5b0ff6a0e0352cb458089bf62 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cb68eef0865df6aedbc11cd81888625a70da6777 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96d003cb2baabd73f2aa0fd9486c13c61415106e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b424f87a276e509dcaaee6beb10ca00c12bb7d29 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46f63c30e30364eb04160df71056d4d34e97af21 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 096897123ab5d8b500024e63ca81b658f3cb93da ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea5d365a93a98907a1d7c25d433efd06a854109e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab5b6af0c2c13794525ad84b0a80be9c42e9fcf1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55eb3de3c31fd5d5ad35a8452060ee3be99a2d99 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863b386e195bb2b609b25614f732b1b502bc79a4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a92ab8028c7780db728d6aad40ea1f511945fc8e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5558400e86a96936795e68bb6aa95c4c0bb0719 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 916c45de7c9663806dc2cd3769a173682e5e8670 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e94df6acd3e22ce0ec7f727076fd9046d96d57b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55885e0c4fc40dd2780ff2cde9cda81a43e682c9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f6b8bf020863f499bf956943a5ee56d067407f8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c2e872f742e7d3c64c7e0fdb85a5d711aff1970 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbe78c02cbdfd0a539a1e04976e1480ac0daf580 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4654ca3a17832a7d479e5d8e3296f004c632183 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f573b6840509bf41be822ab7ed79e0a776005133 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70670586e082a9352c3bebe4fb8c17068dd39b4c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3cc763d6ca57582964807fb171bc52174ef8d5e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5ec638a77dd1cd38512bc9cf2ebae949e7a8812 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2df73b317a4e2834037be8b67084bee0b533bfe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e54cd8fed2d1788618df64b319a30c7aed791191 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec0b85e2d4907fb5fcfc5724e0e8df59e752c0d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a023acbe9fc9a183c395be969b7fc7d472490cb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ea450112501e0d9f11e554aaf6ce9f36b32b732 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe311b917b3cef75189e835bbef5eebd5b76cc20 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 10809e8854619fe9f7d5e4c5805962b8cc7a434b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ea761425b9fa1fda57e83a877f4e2fdc336a9a3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb53329253f8ec1d0eff83037ce70260b6d8fcce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8980057ccfcaca34b423804222a9f981350ac67 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9fc8b6c06b91dfddb73d18eaa8164e64cc2600a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 237d47b9d714fcc2eaedff68c6c0870ef3e0041a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9421cbc67e81629895ff1f7f397254bfe096ba49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c390e223553964fc8577d6837caf19037c4cd6f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8987f2746637cbe518e6fe5cf574a9f151472ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb52c96d7e849e68fda40e4fa7908434e7b0b022 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f03e6162f99e4bfdd60c08168dabef3a1bdb1825 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48f5476867d8316ee1af55e0e7cfacacbdf0ad68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a61110053bca2bbf605b66418b9670cbd555802 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c9fcd7745d2f0c933b46a694f77f85056133ca5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eb7265c532e99e8e434e31f910b05c055ae4369 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b137f55232155b16aa308ec4ea8d6bc994268b0d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56cc93a548f35a0becd49a7eacde86f55ffc5dc5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c914637ab146c23484a730175aa10340db91be70 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d43055d44e58e8f010a71ec974c6a26f091a0b7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ddd5e5ef89da7f1e3b3a7d081fbc7f5c46ac11c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbd784b870a878ef6dbecd14310018cdaeda5c6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d45c76bd8cd28d05102311e9b4bc287819a51e0e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cccea02a4091cc3082adb18c4f4762fe9107d3b0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03097c7ace28c5516aacbb1617265e50a9043a84 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ab7ac2397d60f1a71a90bf836543f9e0dcad2d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18fff4d4a28295500acd531a1b97bc3b89fad07e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff13922f6cfb11128b7651ddfcbbd5cad67e477f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7ed51ba4c8416888f5744ddb84726316c461051 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8005591231c8ae329f0ff320385b190d2ea81df0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56d7a9b64b6d768dd118a02c1ed2afb38265c8b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8f10e74d815223341c3dd3b647910b6e6841bd6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6b08c27a031f8b8b0bb6c41747ca1bc62b72706 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3a728277877924e889e9fef42501127f48a4e77 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5869c5c1a51d448a411ae0d51d888793c35db9c0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f122a6aa3eb386914faa58ef3bf336f27b02fab0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db82455bd91ce00c22f6ee2b0dc622f117f07137 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 007bd4b8190a6e85831c145e0aed5c68594db556 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e6957abf8cd88824282a19b74497872fe676a46 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8e70749887370a99adeda972cc3503397b5f9a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bed3b0989730cdc3f513884325f1447eb378aaee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 614907b7445e2ed8584c1c37df7e466e3b56170f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be34ec23c48d6d5d8fd2ef4491981f6fb4bab8e6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5d11b750ecc982541d1f936488248f0b42d75d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eee7af0e69a39da2dc6c5f109c10975fae5a93e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba67e4ff74e97c4de5d980715729a773a48cd6bc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9780b7a0f39f66d6e1946a7d109fc49165b81d64 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a1e0d7117b9e4ea4be3ef4895e8b2b4937ff98a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a7e7a769087b1790a18d6645740b5b670f5086b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28fdf05b1d7827744b7b70eeb1cc66d3afd38c82 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d602f267c32e1e917599d9bcdcfec4eef05d477 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d0473c1d1e6cadd986102712fff9196fff96212 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81223de22691e2df7b81cd384ad23be25cfd999c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e231a4f184583fbac2d3ef110dacd1f015d5e1c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f277ba01f9a93fb040a365eef80f46ce6a9de85 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df6b87a793434065cd9a01fcaa812e3ea47c4dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5025b8de2220123cd80981bb2ddecdd2ea573f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95436186ffb11f51a0099fe261a2c7e76b29c8a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 706d3a28b6fa2d7ff90bbc564a53f4007321534f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22c4671b58a6289667f7ec132bc5251672411150 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53b65e074e4d62ea5d0251b37c35fd055e403110 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ea782803efe1974471430d70ee19419287fd3d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3621c06c3173bff395645bd416f0efafa20a1da6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5991698ee2b3046bbc9cfc3bd2abd3a881f514dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 257264743154b975bc156f425217593be14727a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88a7002acb50bb9b921cb20868dfea837e7e8f26 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ae92aa57324849dd05997825c29242d2d654099 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6fca2410a56225992959e5e4f8019e16757bfd1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f879c71bdf0aac7af9b01304ff02e94b5af71b7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a47a9c8d8253d0ae2a233fa8599b1a1c54ec53f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45eb6bd22554e5dad2417d185d39fe665b7a7419 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ef4552404ba3bc92554a6c57793ee889523e3a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 68f8a43d1b643318732f30ee1cd75e1d315a4537 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8cf69b6f8bd73525b5375bd73f1fc79ae322a82 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1527b5734c0f2821fd6f38c1a1d70723a4bb88ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0c65d6638698f4e3a9e726efca8c0bcf466cd62 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 02e942b7c603163c87509195d76b2117c4997119 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 725bde98d5cf680a087b6cb47a11dc469cfe956c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95bb489a50f6c254f49ba4562d423dbf2201554f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4cfc682ff87d3629b31e0196004d1954810b206c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f219b53f339fc0133800fac96deaf75eb4f9bf6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a05e49d2419d65c59c65adf5cd8c05f276550e1d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 60e54133aa1105a1270f0a42e74813f75cd2dc46 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a83eee5bcee64eeb000dd413ab55aa98dcc8c7f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5a37564b6eec05b98c2efa5edcd1460a2df02aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45c1c99a22e95d730d3096c339d97181d314d6ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7297ff651c3cc6abf648b3fe730c2b5b1f3edbd3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a67e4e49c4e7b82e416067df69c72656213e886 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31b3673bdb9d8fb7feea8ae887be455c4a880f76 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1060a2a8c90c0730c3541811df8f906dac510a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a308613467a1510f8dac514624abae4e10c0779 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d0556a31916a709e9da3eafb92fc6b8bf69896c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04357d0d46fee938a618b64daed1716606e05ca5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc8c91200a7fb2140aadd283c66b5ab82f9ad61e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2ff0f9d704dc776a1934f72a339da206a9fff4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6aa8d116eb33293c0a9d6d600eb7c32832758b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a6ffa13ae2951a168cde5908c7a94b16562b96 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 763ef75d12f0ad6e4b79a7df304c7b5f1b5a11f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c86bea60dde4016dd850916aa2e0db5260e1ff61 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 491440543571b07c849c0ef9c4ebf5c27f263bc0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6ee00d0dadcd7b10d60a2985db4fe137ca7cfed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73790919dbe038285a3612a191c377bc27ae6170 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6ed8d46c72366e111b9a97a7c238ef4af3bf4dc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d4b4ea9c84198a9b6003611a3af00ee677d09a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dec7a822424bbe58b7b2a7787b1ea32683a9c19 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28bda3aaa19955d1c172bd86d62478bee024bf7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fd7b945dfca73caf00883d4cf43740edb7516df ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ed61f72c611deb07e0368cebdc9f06da32150cd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe2fbc5913258ef8379852c6d45fcf226b09900b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34802014ca0c9546e73292260aab5e4017ffcd9a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1410bcc76725b50be794b385006dedd96bebf0fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06bec1bcd1795192f4a4a274096f053afc8f80ec ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b54b9399920375f0bab14ff8495c0ea3f5fa1c33 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe426d404b727d0567f21871f61cc6dc881e8bf0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 756b7ad43d0ad18858075f90ce5eaec2896d439c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7729245060f9aecfef4544f91e2656aa8d483ec ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9dc8fffd179b3d7ad7c46ff2e6875cc8075fabf3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 873823f39275ceb8d65ebfae74206c7347e07123 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c00567d3025016550d55a7abaf94cbb82a5c44fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50f763cfe38a1d69a3a04e41a36741545885f1d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21a6cb7336b61f904198f1d48526dcbe9cba6eec ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c2502ee83927437442b13b83f3a7976e4146a01 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cc1e7e08094494916db1aadda17e03ce695d049 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158bc981130bfbe214190cac19da228d1f321fe1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abd23a37d8b93721c0e58e8c133cef26ed5ba1f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b89b089972b5bac824ac3de67b8a02097e7e95d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d83f44007c5c581eae7ddc6c5de33311b7c1895 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9e7a3d93da741f81a5af2e84422376c54f1f337 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f233e2405c16e2b185aa90cc8e7ad257307b991 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1cedc5c417ddf3c2a955514dcca6fe74913259b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bccdb483aaa7235b85a49f2c208ee1befd2706dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9563d27fbde02b8b2a8b0d808759cb235b4e083b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bafb4cc0a95428cbedaaa225abdceecee7533fac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1143e1c66b8b054a2fefca2a23b1f499522ddb76 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a771e102ec2238a60277e2dce68283833060fd37 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8e700e952d135c6903b97f022211809338232e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5385cbd969cc8727777d503a513ccee8372cd506 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c696b3cf0c2441aefaef3592e2b815472f162a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22d2e4a0bfd4c2b83e718ead7f198234e3064929 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e79604c8bdfc367f10a4a522c9bf548bdb3ab9a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 643e6369553759407ca433ed51a5a06b47e763d4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1d5c614c38db015485190d65db05b0b75d171d4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1a9a232fbde88a347935804721ec7cd08de6f65 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa0ccead680443b07fd675f8b906758907bdb415 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85a45a691ad068a4a25566cc1ed26db09d46daa4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0f47b3076a84c5c32cccc95748f18c50e3d948 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1578baf817c2526d29276067d2f23d28b6fab2b1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80d43111b6bb73008683ad2f5a7c6abbab3c74ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9aaaa83c44d5d23565e982a705d483c656e6c157 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3e78d98e06439eea1036957796f8df9f386930f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3068025b64bee24efc1063aba5138708737c158 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 141b78f42c7a3c1da1e5d605af3fc56aceb921ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3438795d2af6d9639d1d6e9182ad916e73dd0c37 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdc38b83f4a6d39603dc845755df49065a19d029 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65c07d64a7b1dc85c41083c60a8082b3705154c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fdb6a5eac7433098cfbb33d3e18d6dbba8fa3d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58c5b993d218c0ebc3f610c2e55a14b194862e1c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb6beb75aaa269a1e7751d389c0826646878e5fc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec15e53439d228ec64cb260e02aeae5cc05c5b2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 332521ac1d94f743b06273e6a8daf91ce93aed7d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2cc8f1e3c6627f0b4da7cb6550f7252f76529d8e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc8032d35a23bcc105f50b1df69a1da6fe291b90 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbbcaf7a355e925911fa77e204dd2c38ee633c0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d06e76bb243dda3843cfaefe7adc362aab2b7215 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4faf5cd43dcd0b3eea0a3e71077c21f4d029eb99 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cc0e6caa3117f694d367d3f3b80db1e365aac94 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e1c90eb69e2dfd5fdf8418caa695112bd285f21 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cd4caf15a2e977fc0f010c1532090d942421979c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a8700185dce5052ca1581b63432fb4d4839c226 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13141e733347cea5b409aa54475d281acd1c9a3c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05a302c962afbe5b54e207f557f0d3f77d040dc8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7b609c9f382685448193b59d09329b9a30c7580 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc9278fb4432f0244f4d780621d5c1b57a03b720 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1815563ec44868121ae7fa0f09e3f23cacbb2700 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5982ff789e731c1cbd9b05d1c6826adf0cd8080b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d97a8bb75098ad643d1a8853fe1b59cbb8e2338c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a91a659a3a7d8a099433d02697777221c5b9d16f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e328ffddec722be3fba2c9b637378e31e623d58e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25f27c86af9901f0135eac20a37573469a9c26ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bb927dc12fae61141f1cc7fe4a94e0d68cb4232 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5324565457e38c48b8a9f169b8ab94627dc6c979 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6271586d7ef494dd5baeff94abebbab97d45482b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f6713669a8a32af90a73d03a7fa24e6154327f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af74966685e1d1f18390a783f6b8d26b3b1c26d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f533a68cb5295f912da05e061a0b9bca05b3f0c8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5b8220a1a967abdf2bae2124e3e22a9eea3729f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e61e3200d5c9c185a7ab70b2836178ae8d998c17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3297fe50067da728eb6f3f47764efb223e0d6ea4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 722473e86e64405ac5eb9cb43133f8953d6c65d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28afef550371cd506db2045cbdd89d895bec5091 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bdaa463f7c73d30d75d7ea954dd3c5c0c31617b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1875885485e7c78d34fd56b8db69d8b3f0df830c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c042f56fc801235b202ae43489787a6d479cd277 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07b124c118942bc1eec3a21601ee38de40a2ba0e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b533f86cf86c96a16f96c815533bdda0585f48 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aae2a7328a4d28077a4b4182b4f36f19c953765b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5de21c7fa2bdd5cd50c4f62ba848af54589167d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83156b950bb76042198950f2339cb940f1170ee2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ae1f213e1b99638ba685f58d489c0afa90a3991 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8da7852780a62d52c3d5012b89a4b15ecf989881 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f1b69ad52670a67e8b766e89451080219871739 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6964e3efc4ac779d458733a05c9d71be2194b2ba ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1445b59bb41c4b1a94b7cb0ec6864c98de63814b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2090b5487e69688be61cfbb97c346c452ab45ba2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cdf7c5aca2201cf9dfc3cd301264da4ea352b737 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55d40df99085036ed265fbc6d24d90fbb1a24f95 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e77128e5344ce7d84302facc08d17c3151037ec3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3c89a5e020bb4747fd9470ba9a82a54c33bb5fa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 19099f9ce7e8d6cb1f5cafae318859be8c082ca2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fbc182e6d4636f67f44e5893dee3dcedfa90e04 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f77f9775277a100c7809698c75cb0855b07b884d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2c8c7f86e6a61307311ea6036dac4f89b64b500 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 895f0bc75ff96ce4d6f704a4145a4debc0d2da58 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89ade7bfff534ae799d7dd693b206931d5ed3d4f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8d6fb2898ba465bc1ade60066851134a656a76c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 187fe114585be2d367a81997509b40e62fdbc18e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 903826a50d401d8829912e4bcd8412b8cdadac02 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73ab28744df3fc292a71c3099ff1f3a20471f188 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9989f8965f34af5009361ec58f80bbf3ca75b465 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33940022821ec5e1c1766eb60ffd80013cb12771 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39164b038409cb66960524e19f60e83d68790325 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d255f4c8fd905d1cd12bd42b542953d54ac8a8c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4492c7965cd8e3c5faaf28b2a6414b04984720b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ba48ce5758fb2cd34db491845f3b9fdaefe3797 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0235f910916b49a38aaf1fcbaa6cfbef32c567a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1faf84f8eb760b003ad2be81432443bf443b82e6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79c99c0f66c8f3c8d13258376c82125a23b1b5c8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eafe201905d85be767c24106eb1ab12efd3ee22 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55969cb6034d5b416946cdb8aaf7223b1c3cbea6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85e78ca3d9decf8807508b41dbe5335ffb6050a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6891caf73735ea465c909de8dc13129cc98c47f7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a5cebaeda2c5062fb6c727f457ee3288f6046ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35658887753da7da9a32a297346fd4ee6e53d45c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08a0fad2c9dcdfe0bbc980b8cd260b4be5582381 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46201b346fec29f9cb740728a3c20266094d58b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78f3f38d18fc88fd639af8a6c1ef757d2ffe51d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5077fc7e4031e53f730676df4d8df5165b1d36cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 200d3c6cb436097eaee7c951a0c9921bfcb75c7f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f4b410c955ea08bfb7842320afa568090242679 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b366d3fabd79e921e30b44448cb357a05730c42f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 930d03fb077f531b3fbea1b4da26a96153165883 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc2ec79a88a787f586df8c40ed0fd6657dce31dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9405ac82af3a804dba1f9797bdb34815e1d7a18 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ee291c469fc7ea6065ed22f344ed3f2792aa2ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e031a0ee8a6474154c780e31da2370a66d578cdc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b827f8162f61285754202bec8494192bc229f75a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cee0cec2d4a27bbc7af10b91a1ad39d735558798 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df958981ad63edae6fceb69650c1fb9890c2b14f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8ef023a5bab377764343c954bf453869def4807 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bde1038e19108ec90f899ce4aff7f31c1e387eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572ebd6e92cca39100183db7bbeb6b724dde0211 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d79951fba0994654104128b1f83990387d44ac22 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d9390866f9ce42870d3116094cd49e0019a970a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1116ef7e1bcbbc71d0b654b63156b29bfbf9afab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4b5ecc217154405ac0f6221af99a4ab18d067f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7f403b1e82d4ada20d0e747032c7382e2a6bf63 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0eafc47c307ff0bf589ce43b623bd24fad744fd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c70daba7a3d195d22ded363c9915b5433ce054 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26bb778b34b93537cfbfd5c556d3810f2cf3f76e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25c207592034d00b14fd9df644705f542842fa04 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1481af08064e10ce485339c6c0233acfc646572 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41fd2c679310e3f7972bd0b60c453d8b622f4aea ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2253d39f3a5ffc4010c43771978e37084e642acc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4572ffd483bf69130f5680429d559e2810b7f0e9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a521681ff8614beb8e2c566cf3c475baca22169 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdf1e68f6bec679edc3feb455596e18c387879c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8b025f719b2c3203e194580bbd0785a26c08ebd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a79cf677744e2c1721fa55f934fa07034bc54b0a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13d399f4460ecb17cecc59d7158a4159010b2ac5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d84b960982b5bad0b3c78c4a680638824924004b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b114f3bbe50f50477778a0a13cf99c0cfee1392a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 842fb6852781fd74fdbc7b2762084e39c0317067 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 395955609dfd711cc4558e2b618450f3514b28c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1d2d0683afa6328b6015c6a3aa6a6912a055756 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0574b8b921dbfe1b39de68be7522b248b8404892 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e98416791566f44a407dcac07a1e1f1b0483544 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44c6d0b368bc1ec6cd0a97b01678b38788c9bd9c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f11fdf1d9d22a198511b02f3ca90146cfa5deb5c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf2335af23fb693549d6c4e72b65f97afddc5f64 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5db3d3c49ebe559cb80983d7bb855d4adf1b887 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 467416356a96148bcb01feb771f6ea20e5215727 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57550cce417340abcc25b20b83706788328f79bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 137ee6ef22c4e6480f95972ef220d1832cdc709a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 434505f1b6f882978de17009854d054992b827cf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4cede2368aa980e30340f0ed0a1906d65fe1046c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e61439b3018b0b9a8eb43e59d0d7cf32041e2fed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df2fb548040c8313f4bb98870788604bc973fa18 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25a2ebfa684f7ef37a9298c5ded2fc5af190cb42 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1124e19afc1cca38fec794fdbb9c32f199217f78 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 278423faeb843fcf324df85149eeb70c6094a3bc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c572a8d95d8fa184eb58b15b7ff96d01ef1f9ec3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a3c95b408162c78b9a4230bb4f7274a94d0add4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 618e6259ef03a4b25415bae31a7540ac5eb2e38a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa3f2fa76844e1700ba37723acf603428b20ef74 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f495e94028bfddc264727ffc464cd694ddd05ab8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29eb301700c41f0af7d57d923ad069cbdf636381 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45f8f20bdf1447fbfebd19a07412d337626ed6b0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 783ad99b92faa68c5cc2550c489ceb143a93e54f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b343718cc1290c8d5fd5b1217724b077153262a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7bbaac26906863b9a09158346218457befb2821a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa70623a651d2a0b227202cad1e526e3eeebfa00 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ec2f8a4f26cec3fbbe1fb447058acaf508b39c0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 082851e0afd3a58790fe3c2434f6d070f97c69c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51bf7cbe8216d9a1da723c59b6feece0b1a34589 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1210ec763e1935b95a3a909c61998fbd251b7575 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7842e92ebaf3fc3380cc8d704afa3841f333748c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51f4a1407ef12405e16f643f5f9d2002b4b52ab9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f284a4e7c8861381b0139b76af4d5f970edb7400 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2528d11844a856838c0519e86fe08adc3feb5df1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31fd955dfcc8176fd65f92fa859374387d3e0095 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2b92c66bed6d1eea7b8aefe3405b0898fbb2019 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94ca83c6b6f49bb1244569030ce7989d4e01495c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8e914eb0dfe6a0eb2de66b6826af5f715aeed6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e6827e98c2732863857c0887d5de4138a8ae48b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85f38a1bbc8fc4b19ebf2a52a3640b59a5dcf9fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83645971b8e134f45bded528e0e0786819203252 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6310480763cdf01d8816d0c261c0ed7b516d437a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d8269a04b2b03ebf53309399a8f0ea0a4822c11 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b586fbb94d5acc6e06980a8a96f66771280beda ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ea7e265d1549613c12cbe42a2e012527c1a97e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bf8ce9464987c7b0dbe6acbc2cc2653e98ec739a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1b8d0c92e4b5797b95948bdb95bec7756f5189f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b4f92c8eea41f20b95f9e62a39b210400f4d2a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66c41eb3b2b4130c7b68802dd2078534d1f6bf7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc77e6b2862733a211c55cf29cc7a83c36c27919 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08e0d5f107da2e354a182207d5732b0e48535b66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5962373da1444d841852970205bff77d5ca9377f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec731f448d304dfe1f9269cc94de405aeb3a0665 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2efa1b19061ad6ed9d683ba98a88b18bff3bfd9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4486bcbbf49ad0eacf2d8229fb0e7e3432f440d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b02662d4e870a34d2c6d97d4f702fcc1311e5177 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0210e394e0776d0b7097bf666bebd690ed0c0e4f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d248bb8362808121f6b6abfd316d83b65afa79 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b1cfcc629e856b1384b811b8cf30b92a1e34fe1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57d053792d1cde6f97526d28abfae4928a61e20f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bce7cc4a43e5843c9f4939db143a9d92bb45a18 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6e23ed24b35c6154b4ee0da5ae51cd5688e5e67 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba7c2a0f81f83c358ae256963da86f907ca7f13c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fac8d40f535ec8f3d1cf2187fbbe3418d82cf62 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a25365fea0ea3b92ba96cc281facd308311def1e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76ac61a2b4bb10c8434a7d6fc798b115b4b7934d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d5d143f72e4d588e3a0abb2ab82fa5a2c35e8aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b29388a8f9cf3522e5f52b47572af7d8f61862a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9db2ff10e59b2657220d1804df19fcf946539385 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3910abfc2ab12a5d5a210b71c43b7a2318311323 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bbf02e0c648177b164560003cb51e50bc72b35cd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d5df2ce3addd9e9e1863f4f33665a16b415b71 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 965ccefd8f42a877ce46cf883010fd3c941865d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0e0b97b1d595b9b54d57e5bd4774e2a7b97696df ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f858c449a993124939e9082dcea796c5a13d0a74 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66306f1582754ca4527b76f09924820dc9c85875 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdb4c7cb5b3dec9e4020aac864958dd16623de77 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1a82e45fc177cec8cffcfe3ff970560d272d0bf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12db6bbe3712042c10383082a4c40702b800a36a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dfa1685aac22a83ba1f60d1b2d52abf5a3d842f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dd7aca043c197979e6b4b5ff951e2b62c320ef4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6411bf1bf1ce403e8b38dbbdaf78ccdbe2b042dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52912b549289b9df7eeada50691139df6364e92d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b3c16c39953e7a6f55379403ca5d204dcbdb1e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d678792d3154d5de04a5225079f2e0457b45b7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67291f0ab9b8aa24f7eb6032091c29106de818ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54709d9efd4624745ed0f67029ca30ee2ca87bc9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1c40f46bd547be663b4cd97a80704279708ea8a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b6cde8de6d40715cf445cf1a5d77cd9befbf4d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ef12ae4c158fa8ddb78a70dcf8f90966758db81 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a56136f9cb48a17ae15b59ae0f3f99d9303b1cb1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90dc03da3ebe1daafd7f39d1255565b5c07757cb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79a36a54b8891839b455c2f39c5d7bc4331a4e03 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b3e769989c4928cf49e335f9e7e6f9465a6bf99 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4aa750a96baf96ac766fc874c8c3714ceb4717ee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3430bde60ae65b54c08ffa73de1f16643c7c3bfd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b56d6778ee678081e22c1897ede1314ff074122a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8cb31db6b3970d1e983f10b0e0b5eeda8348c7e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aba0494701292e916761076d6d9f8beafa44c421 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- feed81ea1a332dc415ea9010c8b5204473a51bdf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a962464c1504d716d4acee7770d8831cd3a84b48 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e482a20ab221cb6eca51f12f1bd29cda4eec484 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58998fb2dd6a1cad5faffdc36ae536ee6b04e3d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 251128d41cdf39a49468ed5d997cc1640339ccbc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a99953c07d5befc3ca46c1c2d76e01ecef2a62c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24d4926fd8479b8a298de84a2bcfdb94709ac619 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67260a382f3d4fb841fe4cb9c19cc6ca1ada26be ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55c5f73de7132472e324a02134d4ad8f53bde141 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53373c8069425af5007fb0daac54f44f9aadb288 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2b820f936132d460078b47e8de72031661f848c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dbfd290609fe43ca7d94e06cea0d60333343838 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a358f2cfdc46a99db9e595d7368ecfecba52de0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ee7e1a72aa2b9283223a8270a7aa9cb2cdb5ced ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 454fedab8ea138057cc73aa545ecb2cf0dac5b4b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d4859e26cef6c9c79324cfc10126584c94b1585 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 076446c702fd85f54b5ee94bccacc3c43c040a45 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67648785d743c4fdfaa49769ba8159fcde1f10a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8503a11eb470c82181a9bd12ccebf5b3443c3e40 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eae04bf7b0620a0ef950dd39af7f07f3c88fd15f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a91cf1217155ef457d92572530503d13b5984fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecd061b2e296a4f48fc9f545ece11c22156749e1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 280e573beb90616fe9cb0128cec47b3aff69b86a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d78e368f6877ec70b857ab9b7a3385bb5dca8d2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccff34d6834a038ef71f186001a34b15d0b73303 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f48d08760552448a196fa400725cde7198e9c9b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d851a6f3885ec24a963a206f77790977fd2e6c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc340779c5cd6efb6ac3c8d21141638970180f41 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4459ca7fd21d549a2342a902cfdeba10c76a022 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91b9bc4c5ecae9d5c2dff08842e23c32536d4377 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 62536252a438e025c16eebd842d95d9391e651d4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a67f25298c80aaeb3633342c36d6e00e91d7bd1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dcfe2423fb93587685eb5f6af5e962bff7402dc5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7231486c883003c43aa20a0b80e5c2de1152d17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 42e89cc7c7091bb1f7a29c1a4d986d70ee5854ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c352dba143e0b2d70e19268334242d088754229b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1aea3af6dcabfe4c6414578b22bfbb31a7e1840 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 086af072907946295f1a3870df30bfa5cf8bf7b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ee08fce6ec508fdc6e577e3e507b342d048fa16 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a6cb4aab975a35e9ca7f28c1814aa13203ab835 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2c1d194064e505fa266bd1878c231bb7da921ea ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cd6e82cfa3bdc3b5d75317431d58cc6efb710b1d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9db530e428f798cdf5f977e9b2dbad594296f05 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da43a47adb86c50a0f4e01c3c1ea1439cefd1ac2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 044977533b727ed68823b79965142077d63fe181 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 693b17122a6ee70b37cbac8603448aa4f139f282 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80b038f8d8c7c67c148ebd7a5f7a0cb39541b761 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f773b4cedad84da3ab3f548a6293dca7a0ec2707 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16223e5828ccc8812bd0464d41710c28379c57a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ec27096fbe036a97ead869c7522262f63165e1e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db0dfa07e34ed80bfe0ce389da946755ada13c5d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a644184b05e99a4809de378f21424ef6ced06e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34cce402e23a21ba9c3fdf5cd7f27a85e65245c2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4f7d34f8752ab78949efcaa9f0bd938df33622 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14582df679a011e8c741eb5dcd8126f883e1bc71 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 929f3e1e1b664ed8cdef90a40c96804edfd08d59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6224c72b6792e114bc1f4b48b6eca482ee6d3b35 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4106f183ad0875734ba2c697570f9fd272970804 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a26349d8df88107bd59fd69c06114d3b213d0b27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7bbe6b01c82d9bcb3333b07bae0c9755eecdbbf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 096027bc4870407945261eecfe81706e32b1bfcd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a77eab2b5668cd65a3230f653f19ee00c34789bf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6f596d7f46cb13a3d87ff501c844c461c0a3b0a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3953d71374994a00c7ef756040d2c77090f07bb4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9932e647aaaaf6edd3a407b75edd08a96132ef5c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 225529c8baaa6ee65b1b23fc1d79b99bf49ebfb1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dda3cbbd15e7a415c1cbd33f85d7d6d0e3a307a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4756f4a1298e053aaeae58b725863e8742d353a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dc46d735003df8ff928974cb07545f69f8ea411 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 284f89d768080cb86e0d986bfa1dd503cfe6b682 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 597fb586347bea58403c0d04ece26de5b6d74423 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb8289e80c8b9fe48456e769e0421b7f9972af3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 607d8aa3461e764cbe008f2878c2ac0fa79cf910 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dba01d3738912a59b468b76922642e8983d8995b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d52c5783c08f4f9e397c4dad55bbfee2b8c61c5f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0685d629f86ef27e4b68947f63cb53f2e750d3a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abb18968516c6c3c9e1d736bfe6f435392b3d3af ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18dd177fbfb63caed9322867550a95ffbc2f19d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6e1dcc992ff0a8ddcb4bca281ae34e9bc0df34b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09a96fb2ea908e20d5acb7445d542fa2f8d10bb6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 809c7911944bc32223a41ea3cecc051d698d0503 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0b10d965d6377c409ceb40eb47379d79c3fef9f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 961539ced52c82519767a4c9e5852dbeccfc974e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e7045c4a2b2438adecd2ba59615fbb61d014512 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7e09792a392eeed4d712b40978b1b91b751a6d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0374d7cf84ecd8182b74a639fcfdb9eafddcfd15 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 762d8fb447b79db7373e296e6c60c7b57d27c090 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b88532a5346a9a7e8f0e45fec14632a9bfe2c89 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3787f622e59c2fecfa47efc114c409f51a27bbe7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c4dec45d387ccebfe9bd423bc8e633210d3cdbd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3eae2cdd688d8969a4f36b96a8b41fa55c0d3ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3fc83f2333eaee5fbcbef6df9f4ed9eb320fd11 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16d3ebfa3ad32d281ebdd77de587251015d04b3b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dcb520caa069914f9ab014798ab321730f569cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f37011d7627e4a46cff26f07ea7ade48b284edee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e263b8f972f78c673f36f2bbc1f8563ce6acb10 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5262acbd33b70fb676284991207fb24fa9ac895 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9766832e11cdd8afed16dfd2d64529c2ae9c3382 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c16f584725a4cadafc6e113abef45f4ea52d03b3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af86f05d11c3613a418f7d3babfdc618e1cac805 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36811a2edc410589b5fde4d47d8d3a8a69d995ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6b661c04d82599ad6235ed1b4165b9f097fe07e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8e7a7df78fb98314ba5a0a98f4600454a6c3953 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 730177174bbc721fba8fbdcd28aa347b3ad75576 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4119a576251448793c07ebd080534948cad2f170 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f12c8c34371a7c46dad6788a48cf092042027ec ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0767cc527bf3d86c164a6e4f40f39b8f920e05d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b85fec1e333896ac0f27775469482f860e09e5bc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0a7824253ae412cf7cc27348ee98c919d382cf2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36440f79bddc2c1aa4a7a3dd8c2557dca3926639 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3211ae9dbfc6aadd2dd1d7d0f9f3af37ead19383 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d0fb22b4f5f94da44075d8c43da24b344ae3f0da ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 184cc1fc280979945dfd16b0bb7275d8b3c27e95 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b10de37fe036b3dd96384763ece9dc1478836287 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46b204d1b2eb6de6eaa31deacf4dd0a9095ca3fa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c03da67aabaab6852020edf8c28533d88c87e43f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e7314c57ef56aaf5fd27a311bfa6a01d18366a2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 651a81ded00eb993977bcdc6d65f157c751edb02 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14fc8bd3e5a8249224b774ea9052c9a701fc8e0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1297f65226e3bfdb31e224c514c362b304c904c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d906f31a283785e9864cb1eaf12a27faf4f72c42 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6643a9feb39d4d49c894c1d25e3d4d71e180208a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 690722a611a25a1afcdb0163d3cfd0a8c89d1d04 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbddc30a4d5c37feabc33d4c4b161ec8e5e0bf7e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48c1e9b430cc84366f2c29bb0006e9593659835e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63c31b60acf2286095109106a4e9b2a4289ec91f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20f4a9d49b466a18f1af1fdfb480bc4520a4cdc2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90c4db1f3ba931b812d9415324d7a8d2769fd6db ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e62078d023ba436d84458d6e9d7a56f657b613ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eec9b86a81693d2b2d18ea651b1a0b5df521266 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85ebfb2f0dedb18673a2d756274bbcecd1f034c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5df76d451ff0fde14ab71b38030b6c3e6bc79c08 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c93e971f3e0aa4dea12a0cb169539fe85681e381 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a728b0a4b107a2f8f1e68bc8c3a04099b64ee46c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5232c89de10872a6df6227c5dcea169bd1aa6550 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9562ae2e2436e052d31c40d5f9d3d0318f6c4575 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d283c83c43f5e52a1a14e55b35ffe85a780615d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ffddedf5467df993b7a42fbd15afacb901bca6d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50cbafc690e5692a16148dbde9de680be70ddbd1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7968d136276607115907267b3be89c3ff9acd03 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7180d50f785ec28963e12e647d269650ad89b31 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b650c4f28bda658d1f3471882520698ef7fb3af6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d43a751e578e859e03350f198bca77244ba53b5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a4fc6abfb3b39237f557372262ac79f45b6a9fa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 043e15fe140cfff8725d4f615f42fa1c55779402 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76ba0924be14d55d01db0506b3e6a930cc72bf0d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8470777b44bed4da87aad9474f88e7f0774252a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c885781858ade2f660818e983915a6dae5672241 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a233359ce1ec30386f97d4acdf989f1c3570842 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74a1b17a29390660abe79d83d837a666141f8625 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d06f5af4311e6a1d17213dde57a261e30dbf669 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f9d492e479eda07c5bbe838319eecac459a6042 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70aa1ab69c84ac712d91c92b36a5ed7045cc647c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9448c082b158dcab960d33982e8189f2d2da4729 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8e223263c73a7516e2b216a546079e9a144b3a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 37cef2340d3e074a226c0e81eaf000b5b90dfa55 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a2f5d05f4a8e3427d6dd2a5981f148a9f6bef84 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fed0cadffd20e48bed8e78fd51a245ad666c54f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c43652c9f5b11b611e1aca0a6d67393e9e38c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f62c8d8bbb566edd9e7a40155c7380944cf65dfb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39eb0e607f86537929a372f3ef33c9721984565a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1ace258417deae329880754987851b1b8fc0a7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 887f249a2241d45765437b295b46bca1597d91a3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3473060f4b356a6c8ed744ba17ad9aa26ef6aab7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2f9f4e7fd8af09126167fd1dfa151be4fedcd71 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab69b9a67520f18dd8efd338e6e599a77b46bb34 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6e458c9f8682ab5091e15e637c66ad6836f23b4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94b7ece1794901feddf98fcac3a672f81aa6a6e1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- efc259833ee184888fe21105d63b3c2aa3d51cfa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e21d96a76c223064a3b351fe062d5452da7670cd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e331a0b5e2acd1938bf4906aadf7276bc7f1b60 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- efe68337c513c573dde8fbf58337bed2fa2ca39a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfa37825b011af682bc12047b82d8cec0121fe4e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c30bf3ba7548a0e996907b9a097ec322760eb43a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 969185b76df038603a90518f35789f28e4cfe5b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f08d3067310e0251e6d5a33dc5bc65f1b76a2d49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 473fc3a348cd09b4ffca319daff32464d10d8ef9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 025fe17da390c410e5bae4d6db0832afbfa26442 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 595181da70978ed44983a6c0ca4cb6d982ba0e8b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f58702b0c3a0bb58d49b995a7e5479a7b24933e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158b3c75d9c621820e3f34b8567acb7898dccce4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c6c8dcc01b08748c552228e00070b0c94affa94 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11d91e245194cd9a2e44b81b2b3c62514596c578 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78d12aa7c922551dddd7168498e29eae32c9d109 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3f91bd1c0e8aef1b416ae6b1f55e7bd93a4f281 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dff2004308a7a1e5b9afc7a5b3b9cb515e12514 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96364599258e7e036298dd5737918bde346ec195 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47f35d1ba2b9b75a9078592cf4c41728ac088793 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a04c15b1f77f908b1dd3983a27ee49c41b3a3e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fbf0ef97d6f59d2eb0f37b29716ba0de95c4457 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8340e0bb6ad0d7c1cdb26cbe62828d3595c3b7a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bef6d375fd21e3047ed94b79a26183050c1cc4cb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a0d131ece696f259e7ab42a064ceb10dabb1fcc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0f79c58ad919e90261d1e332df79a4ad0bc40de ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 820d3cc9ceda3e5690d627677883b7f9d349b326 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d86d883714072b6e3bbc56a2127c06e9d6a6582 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cefc0df04440215dad825e109807aecf39d6180b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 617c09e70bfd54af1c88b4d2c892b8d287747542 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01a96b92f7d873cbd531d142813c2be7ab88d5a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 464504ce0069758fdb88b348e4a626a265fb3fe3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb2461d84f97a72641ef1e878450aeab7cd17241 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4832aa6bf82e4853f8f426fc06350540e2c8a9e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4fe6efbccc2ad5c2044bf36e34019363018630 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 385a8c6c1a72dc34f69c5273c1b4c1285cc1d3c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45d1cd59d39227ee6841042eab85116a59a26d22 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18b6aa55309adfa8aa99bdaf9e8f80337befe74e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8ec952343583324c4f5dbefa4fb846f395ea6e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a84459c6a5a1d8a81e4a51189091ef135e1776e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df39446bb7b90ab9436fa3a76f6d4182c2a47da2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 567c892322776756e8d0095e89f39b25b9b01bc2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90f0fb8f449b6d3e4f12c28d8699ee79a6763b80 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c51f93823d46f0882b49822ce6f9e668228e5b8d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76bcd7081265f1d72fcc3101bfda62c67d8a7f32 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce8cc4a6123a3ea11fc4e35416d93a8bd68cfd65 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6503ef72d90164840c06f168ab08f0426fb612bf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5402a166a4971512f9d513bf36159dead9672ae9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c242b55d7c64ee43405f8b335c762bcf92189d38 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da88d360d040cfde4c2bdb6c2f38218481b9676b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b60ab31cfa2ca146069df8dbc21ebfc917db0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5c69071fd6c730d29c31759caddb0ba8b8e92c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b03c2eb07f08dd5d6174a04e4288d41f49920f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f875ddea28b09f2b78496266c80502d5dc2b7411 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c3255387fe2ce9b156cc06714148436ad2490d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01c8d59e426ae097e486a0bffa5b21d2118a48c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecb12c27b6dc56387594df26a205161a1e75c1b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 434306e7d09300b62763b7ebd797d08e7b99ea77 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11837f61aa4b5c286c6ee9870e23a7ee342858c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 636f77bf8d58a482df0bde8c0a6a8828950a0788 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 703280b8c3df6f9b1a5cbe0997b717edbcaa8979 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 091ac2960fe30fa5477fcb5bae203eb317090b3f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bbf6520460dc4d2bfd7943cda666436f860cf71 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93954d20310a7b77322211fd7c1eb8bd34217612 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 1a70c883ed46decf09866fed883a38a919abb509 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 8c67a7e5b403848df7c13a02e99042895f86b35b ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 5a9a6f8d38374103fa5aa601b4dd4814b01f0727 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c946ee6160c206cd4cb88cda26cb6e6b6aa6ff52 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 20a85a80df2b7e0a9a55a67d93a88d3f61d2d8bd ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 82b21953b7dbf769ac0f8777a3da820b62f4f930 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 8df94a33e8ba7e2d8f378bd10df5512012745f1c ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 85db204ee24b01c8646ba39e2d2fa00637d4c920 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- dbc6dec2df75f3219d74600d8f14dfc4bfa07dff ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c87d2b394cfab9c0c1e066fb8bcbe33092d35b92 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 191912724d184b7300ab186fa7921d0687755749 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c5843a1f6abf5bb63b1cade6864a6c78cbcb0e34 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 078cbdf6adbd3ce0cca267397abcc7244491079f ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 838fd68e77b2e9da19210eb185630f0b6551986f ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- b5f32651ff5c1496438f0fb65f895a6fd78c4cf2 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- f5e202e7825dc4621c2395acb38fef23d90b8799 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- e852a8fc65767be911547db94f9052efa7faa537 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 28d14d0c423f7e360b14ff6b9914e7645fed6767 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- cdcc02f8aac7f21a2be85513c1fe8e7eb4f3e39a ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 82f92ce36cd73a6d081113f86546f99c37ea968f ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 9cbad67365396ebec327c8fe4e11765ed0dd7222 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 2b19ea4297b6e355a20188bc73acf9911db84c1e ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 0216e061edb1a0f08256c0e3d602d54984c2ad15 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- bf882d3312780aa7194e6ce3e8fcd82ee750ae32 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 86686f170fbd3b34abc770c21951ef49092064d3 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 5e470181aa8d5078f4ef1a2e54b78bf3dbf5ab64 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- b7ffcb61f437ea32196e557572db26a3282348b1 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 74a23126b9e2c2f80a37cccac5c0306f68594ffa ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- f7bc140e4625a69df3a89604088619d70b0d49a6 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- dea109086bca1fc6a159e11aabd9c6a2d15c40a9 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 5d0ba8ca4ad2c2483f048ed17e0086f5c49e7ed8 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 862010fc022548fcf88d3d407f5eed9a0897a032 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 8f83f391ee11fc4b94360ec69fbc531b89ffd1c8 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 3e37a7a43f51cbfb42fd4b1fce4c1471de47d308 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 65a27e98099099ef12d640658d3cad94ae4bd7a7 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 6e28f4c06fa6a05ff61cfa4946d9c0f1351aba69 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- e3408974e46691ff6be52f48c3f69c25c6d5ff72 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 6b82d0294f0db33117f397b37b339e09357210f2 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- b6f1b60e714725420bac996dea414ec3dcdc8c27 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 732bbd4527e61e11f92444ca2030c885836d97f2 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c9fc2640dcea80f4fd2f60e34fd9fd4769afaca7 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 327a07ed89cbb276106bbad5d258577c2bb47f66 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 775127943335431f932e0e0d12de91e307978c71 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- f66af1223bceacdd876fb5a45b27d039033670e7 ---- +ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- ca262ee4c7c36f0fac616763814f02cb659c9082 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 1a70c883ed46decf09866fed883a38a919abb509 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 8c67a7e5b403848df7c13a02e99042895f86b35b ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 5a9a6f8d38374103fa5aa601b4dd4814b01f0727 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 20a85a80df2b7e0a9a55a67d93a88d3f61d2d8bd ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 82b21953b7dbf769ac0f8777a3da820b62f4f930 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 8df94a33e8ba7e2d8f378bd10df5512012745f1c ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 85db204ee24b01c8646ba39e2d2fa00637d4c920 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- dbc6dec2df75f3219d74600d8f14dfc4bfa07dff ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- c87d2b394cfab9c0c1e066fb8bcbe33092d35b92 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 191912724d184b7300ab186fa7921d0687755749 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- c5843a1f6abf5bb63b1cade6864a6c78cbcb0e34 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 078cbdf6adbd3ce0cca267397abcc7244491079f ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 838fd68e77b2e9da19210eb185630f0b6551986f ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- b5f32651ff5c1496438f0fb65f895a6fd78c4cf2 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- f5e202e7825dc4621c2395acb38fef23d90b8799 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- e852a8fc65767be911547db94f9052efa7faa537 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 28d14d0c423f7e360b14ff6b9914e7645fed6767 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- cdcc02f8aac7f21a2be85513c1fe8e7eb4f3e39a ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 82f92ce36cd73a6d081113f86546f99c37ea968f ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 9cbad67365396ebec327c8fe4e11765ed0dd7222 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 2b19ea4297b6e355a20188bc73acf9911db84c1e ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 0216e061edb1a0f08256c0e3d602d54984c2ad15 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- bf882d3312780aa7194e6ce3e8fcd82ee750ae32 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 86686f170fbd3b34abc770c21951ef49092064d3 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 5e470181aa8d5078f4ef1a2e54b78bf3dbf5ab64 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- b7ffcb61f437ea32196e557572db26a3282348b1 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 74a23126b9e2c2f80a37cccac5c0306f68594ffa ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- f7bc140e4625a69df3a89604088619d70b0d49a6 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- dea109086bca1fc6a159e11aabd9c6a2d15c40a9 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 5d0ba8ca4ad2c2483f048ed17e0086f5c49e7ed8 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 862010fc022548fcf88d3d407f5eed9a0897a032 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 8f83f391ee11fc4b94360ec69fbc531b89ffd1c8 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 3e37a7a43f51cbfb42fd4b1fce4c1471de47d308 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 65a27e98099099ef12d640658d3cad94ae4bd7a7 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 6e28f4c06fa6a05ff61cfa4946d9c0f1351aba69 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- e3408974e46691ff6be52f48c3f69c25c6d5ff72 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 6b82d0294f0db33117f397b37b339e09357210f2 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- b6f1b60e714725420bac996dea414ec3dcdc8c27 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 732bbd4527e61e11f92444ca2030c885836d97f2 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- c9fc2640dcea80f4fd2f60e34fd9fd4769afaca7 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 327a07ed89cbb276106bbad5d258577c2bb47f66 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 775127943335431f932e0e0d12de91e307978c71 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- f66af1223bceacdd876fb5a45b27d039033670e7 ---- +1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- ca262ee4c7c36f0fac616763814f02cb659c9082 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 2826c8840a3ffb74268263bef116768a8fcc77b0 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a5ad8eb90ed759313bcc5cbec0a6206c37b6e2e6 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 1b15ac67eaefc9de706bd40678884f770212295a ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- c6f6ee37d328987bc6fb47a33fed16c7886df857 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 1b100a5e7d46bbca8fcdba5a258156e3e5cb823f ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 87c1a5b2028a68a1ee0db7a257adb6f55db0f936 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 8340f1a972bd5fbde8ffb07fb3aba8b84d06807c ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- f8c7e61f8b1d1e3b97f27105a2536619c074283a ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a714eea1336cf591b8fed481cc0ea15999bed60f ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 4af13d80d400a8338d3c2670eb98936549c26780 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 0d236f3d9f20d5e5db86daefe1e3ba1ce68e3a97 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a5ad8eb90ed759313bcc5cbec0a6206c37b6e2e6 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- bd963561fa83a9c7808325162200125b327c1d41 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- c6f6ee37d328987bc6fb47a33fed16c7886df857 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 1b100a5e7d46bbca8fcdba5a258156e3e5cb823f ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 953420f6c79297a9b4eccfe7982115e9d89c9296 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 8340f1a972bd5fbde8ffb07fb3aba8b84d06807c ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- f8c7e61f8b1d1e3b97f27105a2536619c074283a ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- da18208c7a51000db89a66825972d311ce8d8b1e ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 4af13d80d400a8338d3c2670eb98936549c26780 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 0d236f3d9f20d5e5db86daefe1e3ba1ce68e3a97 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a5ad8eb90ed759313bcc5cbec0a6206c37b6e2e6 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 310ebc9a0904531438bdde831fd6a27c6b6be58e ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- c6f6ee37d328987bc6fb47a33fed16c7886df857 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 1b100a5e7d46bbca8fcdba5a258156e3e5cb823f ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- e3e813b7d2b234fb0aa3a3b4dc8d3599618b72d4 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 8340f1a972bd5fbde8ffb07fb3aba8b84d06807c ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- f8c7e61f8b1d1e3b97f27105a2536619c074283a ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 4af13d80d400a8338d3c2670eb98936549c26780 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 0d236f3d9f20d5e5db86daefe1e3ba1ce68e3a97 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 310ebc9a0904531438bdde831fd6a27c6b6be58e ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- c6f6ee37d328987bc6fb47a33fed16c7886df857 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- e3e813b7d2b234fb0aa3a3b4dc8d3599618b72d4 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 8340f1a972bd5fbde8ffb07fb3aba8b84d06807c ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- f8c7e61f8b1d1e3b97f27105a2536619c074283a ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 4af13d80d400a8338d3c2670eb98936549c26780 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9a1baa6242c21e51d4d51c03bea35351499a6281 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 14619275dc60eef92b3e0519df7fcd17aabceee7 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 396bb230001674bed807411a8e555f517011989f ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 0fea59845b2c53a9b4eb26f4724ad547c187b601 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 2d8f3560a2b8997a54a1dcbd4345c1939f2a714e ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7044b6ca8e6ef0d91ef77bcb2bb5a37722a66177 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 091cf78cb2d0e23f3638e518357343f4695f3c59 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 770dbba7a5eded885bf959a783ce126febdfc48e ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 14619275dc60eef92b3e0519df7fcd17aabceee7 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 396bb230001674bed807411a8e555f517011989f ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 0fea59845b2c53a9b4eb26f4724ad547c187b601 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 2d8f3560a2b8997a54a1dcbd4345c1939f2a714e ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7044b6ca8e6ef0d91ef77bcb2bb5a37722a66177 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 091cf78cb2d0e23f3638e518357343f4695f3c59 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +bca5612310925faea912572abb039b1136ddd75f with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 770dbba7a5eded885bf959a783ce126febdfc48e ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 295ed528bf629c70ae92c92837999cc7556dd6a9 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- c8493379f202e3471c382be92fb1d8d458935a3b ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 64917257e12a7a4a1b72354368e45fd9c11de2f4 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7adfd67098a0ad99087ce4b4804c13d0ceff309c ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- d44f7bda0c4653810b449a36832c7de8ac40413b ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 091cf78cb2d0e23f3638e518357343f4695f3c59 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 770dbba7a5eded885bf959a783ce126febdfc48e ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 06c0c4b1bff2d0f108d776ca3cdcfe2ed5e2ba02 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- c8493379f202e3471c382be92fb1d8d458935a3b ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 35c6691a626b1b7bddb2fac9327f4466d57aa3e5 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7adfd67098a0ad99087ce4b4804c13d0ceff309c ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- d44f7bda0c4653810b449a36832c7de8ac40413b ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- e35090a1de60a5842eb1def9e006a76b6d2be41e ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 06c0c4b1bff2d0f108d776ca3cdcfe2ed5e2ba02 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- c8493379f202e3471c382be92fb1d8d458935a3b ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 35c6691a626b1b7bddb2fac9327f4466d57aa3e5 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7adfd67098a0ad99087ce4b4804c13d0ceff309c ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- d44f7bda0c4653810b449a36832c7de8ac40413b ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- e35090a1de60a5842eb1def9e006a76b6d2be41e ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 2a7f7345373d126ab2cd6d7dc2e6acd36488a87d ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 04de351f49d44be309665bb5c593cc431eb2dfba ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 593bb90a269f19a49fc0cff64079741e7c38a052 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- eb3920f5a771bb12bbc1c8868ee25fa6746d50bb ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 057530a68c6ae15065403cc399dd9c5ef90a0b1e ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 093fdf0eebff8effdf774b3919a11ca70bd88cbc ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 79c2dd8ccbcebd691eb572cf2504c0d9b2448963 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 98a3f5a1f904d7cb62b00573dc16fec8bbf299af ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6aa5e0ac7c8e94441e36a283fbc792ce331984ac ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- cef0c7bad7c700741c89ade5a6a063fbcd22ef35 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 1d6eed20bc6ac8356f1ac61508567604aae768e3 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 4aee12808ee5a2ca96f1a8c273612c54a58dbfff ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 626c4df94212ac46ffd1413b544bbf50787d8b46 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 93c7d2c2ff2c5300366e7d2c7e74a1966f4ce7c6 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 98a3f5a1f904d7cb62b00573dc16fec8bbf299af ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6aa5e0ac7c8e94441e36a283fbc792ce331984ac ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- cef0c7bad7c700741c89ade5a6a063fbcd22ef35 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 1d6eed20bc6ac8356f1ac61508567604aae768e3 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 4aee12808ee5a2ca96f1a8c273612c54a58dbfff ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 626c4df94212ac46ffd1413b544bbf50787d8b46 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 93c7d2c2ff2c5300366e7d2c7e74a1966f4ce7c6 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- d7cc410b3f2fab13428969d82571105d76be97bc ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9707400209259ef4caf6972e5ea5cd1f63668aeb ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3d7ee1cef2f194e255bdf9445973bbe8500ca1f7 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- db9eb86857adb9c704ccfa29fce521d7695b9f17 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- c9e2ab599fcd33859828a822be05628085d00b12 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 626c4df94212ac46ffd1413b544bbf50787d8b46 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 93c7d2c2ff2c5300366e7d2c7e74a1966f4ce7c6 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- e5264a0d0bde9b0e40dfd632f021f6407120d076 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- df6e1d43a734e411e5c158409e26a2575775be5d ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9707400209259ef4caf6972e5ea5cd1f63668aeb ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 69278812572c21d54293dbd56987cfabbee42a49 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- db9eb86857adb9c704ccfa29fce521d7695b9f17 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- c9e2ab599fcd33859828a822be05628085d00b12 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 28ebda015675a0dc8af3fbd1cb18af034290433e ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 93c7d2c2ff2c5300366e7d2c7e74a1966f4ce7c6 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- e5264a0d0bde9b0e40dfd632f021f6407120d076 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- c32d4b14c7c8ced823177d6dddae291a86e2a210 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9d866aef43909ac300c0176986519e70cbb684a7 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 291fd09ec351fb9fbaae78fd9ce95ef8399b76d3 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a29b7c0fa94dfd092f2cf3aaa4781d5fe4c7002a ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- c9e2ab599fcd33859828a822be05628085d00b12 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- f6e34dac0fd7fdbfdf1631b35103fd7aa968cf88 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- e5264a0d0bde9b0e40dfd632f021f6407120d076 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 4abac49168e53467b747cb847aed9eb8ba924dce ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6d4db21bab63d8f45e59fdac2379af57ed7e7d54 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- b22996efb211ef14421a272ba28cde7402afaedf ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 697cf27c651cd59c2338c65fd377c8363d729303 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- c50d9d2deebeec9318fb605f88d4506ab5d79f41 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 09215b1e12423b415577196887d90e9741d35672 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- df9ea039c996b519de6750d2dbf2a53fc1225472 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 67489b390a523f855facd28f0932130bd6210fa7 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 49d69d1d0433e4aa5d4a014754ba9a095002a69b ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 04de351f49d44be309665bb5c593cc431eb2dfba ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 496a5d54425d284d0fbf4e127351969052c621f2 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- eb3920f5a771bb12bbc1c8868ee25fa6746d50bb ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 79c2dd8ccbcebd691eb572cf2504c0d9b2448963 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 49d69d1d0433e4aa5d4a014754ba9a095002a69b ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 04de351f49d44be309665bb5c593cc431eb2dfba ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 496a5d54425d284d0fbf4e127351969052c621f2 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- eb3920f5a771bb12bbc1c8868ee25fa6746d50bb ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 79c2dd8ccbcebd691eb572cf2504c0d9b2448963 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 49d69d1d0433e4aa5d4a014754ba9a095002a69b ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 00fa9a35eb814f2cfc6daa3d23400a5d9576088e ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 496a5d54425d284d0fbf4e127351969052c621f2 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9b5567b95d30a566564067470676c39194620a99 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- aca638438cfd79210a9e0dae656b5aa3fa1b75ed ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 2317d6a9aae471ed6a2a7f43ff676b949331661d ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 00fa9a35eb814f2cfc6daa3d23400a5d9576088e ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 360114c20d88166e40e47a49d2ffc870c6b9d1b0 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9b5567b95d30a566564067470676c39194620a99 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- d45875739cc36ec752e5d1264b97af9e09e3de0e ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- aca638438cfd79210a9e0dae656b5aa3fa1b75ed ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 2317d6a9aae471ed6a2a7f43ff676b949331661d ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 00fa9a35eb814f2cfc6daa3d23400a5d9576088e ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 360114c20d88166e40e47a49d2ffc870c6b9d1b0 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9b5567b95d30a566564067470676c39194620a99 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- d45875739cc36ec752e5d1264b97af9e09e3de0e ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- aca638438cfd79210a9e0dae656b5aa3fa1b75ed ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 2317d6a9aae471ed6a2a7f43ff676b949331661d ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 975db6de6685819b11cd2c1c2dad102fd11a1cf6 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 360114c20d88166e40e47a49d2ffc870c6b9d1b0 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 45365655583f3aa4d0aa2105467182363683089c ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- d45875739cc36ec752e5d1264b97af9e09e3de0e ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 2f43e82fda2d5a1f4e50497e254eeb956e0b2ce9 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 583a5079970a403d536e2093e093fefb563578af ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- ecac13c8749531840b026477b7e544af822daff6 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 669a8f62cb75410207229f08f3fa8db519161f51 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3d33d7e33eb75370c1f696e9da8ce6e00af13c74 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- fa3337c91573b28c2f98fe6dfa987ce158921605 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 71c2c9831cfd4f535462bb640fcca662cb322d8e ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 71af941b2e981c4e014cbeab49af2bd559170707 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9319639a5d46e51192debb8eaa8f47f9b406ade0 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- f84e8c65d9ff3359659f357e56f09c5d6d7eb469 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- e92293e422e1be0039e831a104dd908ecdd5ce8a ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- fdfb79282f991edafd39266a0800ec70969c14ba ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 989dd4fe5ce7aca2f66b48e97790104333203599 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 954c889b8197d3d7e3bbf6812942967539d780f9 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 71c2c9831cfd4f535462bb640fcca662cb322d8e ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 71af941b2e981c4e014cbeab49af2bd559170707 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9319639a5d46e51192debb8eaa8f47f9b406ade0 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- f84e8c65d9ff3359659f357e56f09c5d6d7eb469 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- e92293e422e1be0039e831a104dd908ecdd5ce8a ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- fdfb79282f991edafd39266a0800ec70969c14ba ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 989dd4fe5ce7aca2f66b48e97790104333203599 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 954c889b8197d3d7e3bbf6812942967539d780f9 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- d74ea7a48497691adaa59f53f85f734b7c6f9fd7 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9bacebf9147aa0cdc22b954aeddeffe0f4b87c69 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9df1f6166bff415022d2d73ba99a0fb797b2644a ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 286271f9add31f25ccfbb425b459ce46a78905de ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- e92293e422e1be0039e831a104dd908ecdd5ce8a ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- aff595f1d6233c85c127d2c0df1594dfe63f604d ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 29ba463b52497804f8dc90e345f153d7d32a1291 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- d74ea7a48497691adaa59f53f85f734b7c6f9fd7 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9bacebf9147aa0cdc22b954aeddeffe0f4b87c69 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9df1f6166bff415022d2d73ba99a0fb797b2644a ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 286271f9add31f25ccfbb425b459ce46a78905de ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- e92293e422e1be0039e831a104dd908ecdd5ce8a ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- aff595f1d6233c85c127d2c0df1594dfe63f604d ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 29ba463b52497804f8dc90e345f153d7d32a1291 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- f9a6d45a3284701708dfd5245ac19167f51e166f ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a7cd7a1f0d9d0376018792491aac64705d498b3e ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 8ad4b2db6c1edf739374b48665411550c7dd341a ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- db89bfe8694068b0b828f5dba11082a916ea57a6 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 18e36c003246c2051d0453233de1f31e89152a31 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 55f73f66fd7c87edd73c69a585ad2d39dc017362 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 13846555356af4891a26d9e0cf2270e22c3ed5e7 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- bf9e838b7f618a89013cc6eec3516b0f526011da ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 099eb85c9cfda1d214896fec3bb5db48b9871bea ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- ad90f84b0b6ffa265da7b002fea18ad852cc5872 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 1e7c654f5d96e96aee8f733e01f9b85af6a31127 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 18e36c003246c2051d0453233de1f31e89152a31 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- aaa7cecc818a07fe53dc0fa77f35a3b7a28a14d4 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 4a5ee8ac9eec188a9580ec4b1d81b601f11a82a8 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 324d549540c79db396afbfc3f27c4fbc9daff836 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 099eb85c9cfda1d214896fec3bb5db48b9871bea ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 1aa990b63d6c78a155e5ff813129ca2b0e9b374e ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 1e7c654f5d96e96aee8f733e01f9b85af6a31127 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 18e36c003246c2051d0453233de1f31e89152a31 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- ef440cd1c7e802c347d529ca1545003f7b14d302 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 4a5ee8ac9eec188a9580ec4b1d81b601f11a82a8 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 383f1332c13f9e82edb6a52280c4c19f2836b1c2 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 71c8e8904eaa9506b1e4d163465534143b142ed9 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 2bdb647caf34078277eb93af138e93c74da5f917 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 6f4dce637c8b7e29f162bf69f91c42f8300c29d0 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 93a2b70f15af712b32f5ec0390756d2f99680c06 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- aff595f1d6233c85c127d2c0df1594dfe63f604d ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 29ba463b52497804f8dc90e345f153d7d32a1291 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 383f1332c13f9e82edb6a52280c4c19f2836b1c2 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 71c8e8904eaa9506b1e4d163465534143b142ed9 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 2bdb647caf34078277eb93af138e93c74da5f917 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 6f4dce637c8b7e29f162bf69f91c42f8300c29d0 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 93a2b70f15af712b32f5ec0390756d2f99680c06 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- aff595f1d6233c85c127d2c0df1594dfe63f604d ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 29ba463b52497804f8dc90e345f153d7d32a1291 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 2a8489019cdd3574ea87c31a5ec83ca0fa3b0023 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- f8062d01dc23bab6a0cc6dc868f3a3fb91876b25 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9b8f8c59e31b12ea5bbe84ffc4cb204d5e799dc6 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 270a77486489810256f862889d3feb2704d40ea7 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 93a2b70f15af712b32f5ec0390756d2f99680c06 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 8cfc2cadea0542969e7304e173338fe4a08957a3 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 036ae1e942671feb0509778a993e2e4b6b3e5abe ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- e7a00a07ba7b653c42ad4e9c5979898fd9525eed ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- dc2e623daf921e4973ded524e7e7183e3f2f14e4 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 6b59af9dde79485cd568c4cb254de7f5ac03bf5e ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- f6c7e5ae379943e7832673ad68d45e6fb1d50198 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 93a2b70f15af712b32f5ec0390756d2f99680c06 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 86057d8bce7cfb413992e5cd953addee9f35fe2b ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3c32387841a4bfaea75e9f38148b25577902879a ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a5dc6eacfb36d70db3112453463ded8874b871fe ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- dc2e623daf921e4973ded524e7e7183e3f2f14e4 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 06727d08d1c154f7d7c6e33fced1fba602b96ee9 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- f6c7e5ae379943e7832673ad68d45e6fb1d50198 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 86057d8bce7cfb413992e5cd953addee9f35fe2b ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 59d3af1e2f7e0dbfbd5f386b748d9d54573dafc2 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3c32387841a4bfaea75e9f38148b25577902879a ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 554bde9938f7e8ebf16ad4c1d37e00f453616a0f ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 1681b00a289967f2b2868f51cff369c3eb2bf46b ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6a7db6164e74b0de064180d8bdae2b94b562c621 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- bf6f8228b7409d51d8c4c3fc90373331ec115ec3 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 86057d8bce7cfb413992e5cd953addee9f35fe2b ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 630fa1fc2dffc07feb92cf44c3d70d6b6eb63566 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3c32387841a4bfaea75e9f38148b25577902879a ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6b62c958d3a6f36ef7b15deeec9d001a09506125 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 96d4d37f7f971bf62c040e3f45a6eeb5b31cd325 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- b4fca61a55a1a9fb51719843ab61cb4d1d0a246d ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 6ce26d0304815d1ac8f2d161788a401017e184af ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- f0e4ead660491ba0935378e87b713d8c346993ba ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 86057d8bce7cfb413992e5cd953addee9f35fe2b ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 1ed3396dc2d2e12b96b872f1c268f967b06409ca ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- c7a4c01b77a161980d1f413119121a6c20ea2c37 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- d66764b3ef06230d2e7f6d140e498410a41abf0a ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a35f90375c790260f94ea6cb1cda25b5f002e456 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- b4fca61a55a1a9fb51719843ab61cb4d1d0a246d ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- b03a21c919171b06c6291cdf68a14a908d1c7696 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- f0e4ead660491ba0935378e87b713d8c346993ba ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 0e52fab765a18d46dfc1e35228731a6c539afec7 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 86e893efc62c03ea4cbecc030a64dde708e81f49 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- c7a4c01b77a161980d1f413119121a6c20ea2c37 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- d66764b3ef06230d2e7f6d140e498410a41abf0a ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9d1a8ce05cd7de2b29fb8eebd21e3829ba0a4069 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 5f580eb86e2c749335eb257834939ea1440c549a ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- fad5c147d8a1a19e1ae5bfe0609c618f2c0a254d ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 58138bbddb2927a4738ef3db7286fab0a8f23531 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 18e36c003246c2051d0453233de1f31e89152a31 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 0e52fab765a18d46dfc1e35228731a6c539afec7 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 870dbc732c60c7180119ef3fa950fa1cfa64e27f ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- aa1151b2e9d294c53e4549d2be240d33bee830d5 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9d588990b9d6dfd93cec444517e28b2c2f37f2af ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 4b22448cea783186ecbe1a62d4a7f2bd46c8abe0 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 0e52fab765a18d46dfc1e35228731a6c539afec7 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5449c4376d0b1217cb9a93042b51aa05791acfe2 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5f580eb86e2c749335eb257834939ea1440c549a ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- efdd3d41e1f7209e7cfccaa69586fdaa212a2a04 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 58138bbddb2927a4738ef3db7286fab0a8f23531 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- d30d1250fa40d6b9b3aedc5ab3be820355a95b72 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 8f5d4dca346e8ef2843169537d57b7b3c12eb78e ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 5449c4376d0b1217cb9a93042b51aa05791acfe2 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- aa1151b2e9d294c53e4549d2be240d33bee830d5 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- efdd3d41e1f7209e7cfccaa69586fdaa212a2a04 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 4b22448cea783186ecbe1a62d4a7f2bd46c8abe0 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- d30d1250fa40d6b9b3aedc5ab3be820355a95b72 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 8f5d4dca346e8ef2843169537d57b7b3c12eb78e ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 627a9935c5a7baa31fd48ec4146f2fe5db44539c ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- aa1151b2e9d294c53e4549d2be240d33bee830d5 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 564131dc8a540b7aa9abc9b6924fed237b39f9a2 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 4b22448cea783186ecbe1a62d4a7f2bd46c8abe0 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 8f5d4dca346e8ef2843169537d57b7b3c12eb78e ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- fe3469174e4e87a1366e8cc4ca5a451b68b525af ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3c08157c10d77f1a1cd779b6d50673c739d9b6ef ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 1efd57bbcc1ca6fdb96ac5cfc779cc3ef27fe1cb ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 110ae5310fe5c791cbfed35dad02493913a3ba21 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- edaeee836a137ccbd995c74b93d56cb048e50cdc ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- e720856b4b81854f678b87d6fd20cee47d9b6b23 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 4bdc4bc748c2c5f5cce03a727cabaee20e373190 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- aa1151b2e9d294c53e4549d2be240d33bee830d5 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 0b275eb563418cdcdce2a3d483a13803c85d7a06 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 4b22448cea783186ecbe1a62d4a7f2bd46c8abe0 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 682b76521d5f74c02d711b43edabb2801e71d657 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 4bdc4bc748c2c5f5cce03a727cabaee20e373190 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3c08157c10d77f1a1cd779b6d50673c739d9b6ef ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 0b275eb563418cdcdce2a3d483a13803c85d7a06 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 110ae5310fe5c791cbfed35dad02493913a3ba21 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 682b76521d5f74c02d711b43edabb2801e71d657 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- e720856b4b81854f678b87d6fd20cee47d9b6b23 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- d238defeab2d93e835ce30358571d772a4b8e1f4 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3c08157c10d77f1a1cd779b6d50673c739d9b6ef ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- fdd41f5536c40a79a715a27c413087cf1b04abec ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 110ae5310fe5c791cbfed35dad02493913a3ba21 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 1ceb7449e54b5276c5cc6a8103997c906012c615 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- e720856b4b81854f678b87d6fd20cee47d9b6b23 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- bb7fb53ea164d6953b47dededd02aad970bcbd71 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 97db5d0b2080150a26f7849f22ff6cbedc7e76dc ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6bcb5cf470ee673fdb7a61ebf0778d2a2baf1ee1 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 0940aa6cb561f7b69342895842c62ad73ed43164 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 1ceb7449e54b5276c5cc6a8103997c906012c615 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- d649bb1b92a17e0f9ec4ff673dc503003c5d5458 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- ea3032c18ae6963b94a080eb91c50fe6592b0e5d ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 5700780944c01b4cd30f96a325c1602553aaa19e ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 97db5d0b2080150a26f7849f22ff6cbedc7e76dc ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- b31b5a335457d1fc781f67f2cc12bf068ad41b58 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 0940aa6cb561f7b69342895842c62ad73ed43164 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- d649bb1b92a17e0f9ec4ff673dc503003c5d5458 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- ea3032c18ae6963b94a080eb91c50fe6592b0e5d ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- f7f7ff067e3d19e2c6a985a6f0ec6094e7677ae2 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 97db5d0b2080150a26f7849f22ff6cbedc7e76dc ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 0ed54e915a0e618e81cb2d29c1b29ad554cb33ee ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 0940aa6cb561f7b69342895842c62ad73ed43164 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- d649bb1b92a17e0f9ec4ff673dc503003c5d5458 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- ea3032c18ae6963b94a080eb91c50fe6592b0e5d ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- f7f7ff067e3d19e2c6a985a6f0ec6094e7677ae2 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 70a3445f8dcb37eee836e7b98edc2f4bb7470c7d ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 0ed54e915a0e618e81cb2d29c1b29ad554cb33ee ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- ee55b93baa792a3ce77dc5147ae08c27a313ec9d ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- ea3032c18ae6963b94a080eb91c50fe6592b0e5d ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- fdeb8762014829f1da8c80d944ae71a04d77a917 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 466b3ff3a9d415e0085f39b919e7dd2172f3c795 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6359bb348244fe59d7d9b2b667ec229b7851c0f9 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- e541a71175bf9014e67ac61c92fa59b1b504d5db ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 68afdbd892ca1780c3d6d61040f2a0ecbfe337af ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 21b43a88fac030def3edbaaf824b5e6befdfd54f ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- fdeb8762014829f1da8c80d944ae71a04d77a917 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 466b3ff3a9d415e0085f39b919e7dd2172f3c795 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6359bb348244fe59d7d9b2b667ec229b7851c0f9 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- e541a71175bf9014e67ac61c92fa59b1b504d5db ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 68afdbd892ca1780c3d6d61040f2a0ecbfe337af ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 21b43a88fac030def3edbaaf824b5e6befdfd54f ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- fdeb8762014829f1da8c80d944ae71a04d77a917 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 466b3ff3a9d415e0085f39b919e7dd2172f3c795 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6359bb348244fe59d7d9b2b667ec229b7851c0f9 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- e541a71175bf9014e67ac61c92fa59b1b504d5db ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 68afdbd892ca1780c3d6d61040f2a0ecbfe337af ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 21b43a88fac030def3edbaaf824b5e6befdfd54f ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a4d21eec9c190d7f47ec4f71985b25f9b8bd3a49 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- fdeb8762014829f1da8c80d944ae71a04d77a917 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 466b3ff3a9d415e0085f39b919e7dd2172f3c795 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6359bb348244fe59d7d9b2b667ec229b7851c0f9 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- e541a71175bf9014e67ac61c92fa59b1b504d5db ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 68afdbd892ca1780c3d6d61040f2a0ecbfe337af ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 21b43a88fac030def3edbaaf824b5e6befdfd54f ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a4d21eec9c190d7f47ec4f71985b25f9b8bd3a49 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- ded718b90e4d35b45a277a8fddb95766574e3d8c ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3e5be8fda2b346cdd68bba3a8f2051cfe3d1b17f ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 824dca1d2aa2b706f1d5b9c4c3ffdac2b25bcc91 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- e3436bb72a40e0b1fab9a8e92f5c6fc1887c83cd ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 2f84ca8dd19f99c9fbb646a2b38be90092b22889 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a6e8f6cc4d71de6eeb71b0f57cf66408c10eb917 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 250fcc6d3621ffff170115288c9199cc21224af4 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- b7f44ff0f04fd1de099be7e1c5250b4ac3bc8a14 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- ac807dc258a2d84c0c445ba8b0d7896a0bf29843 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- cc732032037f089beb33ee2b44a398772ddc12b8 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6d32b2d37b4adbc600d7c3a43589399f6d0395cb ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 46c5d00c1acc5d703dbd9ae5337a0680728d7d9e ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6626ec65e6e2e5eb94857daabfa0ae0c3f25b1ac ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 2c7fdd58572c6f20d92075f419bb03d059e8d3e4 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a4d21eec9c190d7f47ec4f71985b25f9b8bd3a49 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- ded718b90e4d35b45a277a8fddb95766574e3d8c ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 401b81ca564f05af28093c1cc34bbc0880d1ed80 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 824dca1d2aa2b706f1d5b9c4c3ffdac2b25bcc91 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- c1b6dd1507d45d3c4fb57348c9dc2f78d155424b ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 2f84ca8dd19f99c9fbb646a2b38be90092b22889 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a6e8f6cc4d71de6eeb71b0f57cf66408c10eb917 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 250fcc6d3621ffff170115288c9199cc21224af4 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 97d2bbde1039ec6a1032939a463c2e50c8371b85 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- b7f44ff0f04fd1de099be7e1c5250b4ac3bc8a14 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- ac807dc258a2d84c0c445ba8b0d7896a0bf29843 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- cc732032037f089beb33ee2b44a398772ddc12b8 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6d32b2d37b4adbc600d7c3a43589399f6d0395cb ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 46c5d00c1acc5d703dbd9ae5337a0680728d7d9e ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6626ec65e6e2e5eb94857daabfa0ae0c3f25b1ac ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 2c7fdd58572c6f20d92075f419bb03d059e8d3e4 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3c3363479df9554a2146ca19851844b0e5b3ce3b ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- ded718b90e4d35b45a277a8fddb95766574e3d8c ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 401b81ca564f05af28093c1cc34bbc0880d1ed80 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 824dca1d2aa2b706f1d5b9c4c3ffdac2b25bcc91 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- c1b6dd1507d45d3c4fb57348c9dc2f78d155424b ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 2f84ca8dd19f99c9fbb646a2b38be90092b22889 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- a6e8f6cc4d71de6eeb71b0f57cf66408c10eb917 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 250fcc6d3621ffff170115288c9199cc21224af4 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 97d2bbde1039ec6a1032939a463c2e50c8371b85 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- b7f44ff0f04fd1de099be7e1c5250b4ac3bc8a14 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- ac807dc258a2d84c0c445ba8b0d7896a0bf29843 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- cc732032037f089beb33ee2b44a398772ddc12b8 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6d32b2d37b4adbc600d7c3a43589399f6d0395cb ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 46c5d00c1acc5d703dbd9ae5337a0680728d7d9e ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6626ec65e6e2e5eb94857daabfa0ae0c3f25b1ac ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 2c7fdd58572c6f20d92075f419bb03d059e8d3e4 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- ded718b90e4d35b45a277a8fddb95766574e3d8c ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 401b81ca564f05af28093c1cc34bbc0880d1ed80 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 824dca1d2aa2b706f1d5b9c4c3ffdac2b25bcc91 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- c1b6dd1507d45d3c4fb57348c9dc2f78d155424b ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 2f84ca8dd19f99c9fbb646a2b38be90092b22889 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- a6e8f6cc4d71de6eeb71b0f57cf66408c10eb917 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 250fcc6d3621ffff170115288c9199cc21224af4 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 97d2bbde1039ec6a1032939a463c2e50c8371b85 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- b7f44ff0f04fd1de099be7e1c5250b4ac3bc8a14 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- ac807dc258a2d84c0c445ba8b0d7896a0bf29843 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- cc732032037f089beb33ee2b44a398772ddc12b8 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6d32b2d37b4adbc600d7c3a43589399f6d0395cb ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 46c5d00c1acc5d703dbd9ae5337a0680728d7d9e ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6626ec65e6e2e5eb94857daabfa0ae0c3f25b1ac ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 2c7fdd58572c6f20d92075f419bb03d059e8d3e4 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- +44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- b54809b407ecedd08dde421a78a73687b2762237 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e4b4203719a8f9a82890927812271fdbda4698ee ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 4fa22fd9d30a4b766eaa7b4a40465bf87da79397 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- f1a5a8ee011d264d566affff33f80b0f07f025ae ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 76f6410f61cb71ad18d31e3b2df7bee44e2f69e3 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 656e783cfac1feab3e56ce960de02c9f2545e3e7 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 2f698b973ee706997ed07d69bd36063fba73500b ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 51fe298b120a1bd9b9a6d0e56db0d7fc5f52dd5d ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 4fa22fd9d30a4b766eaa7b4a40465bf87da79397 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- f1a5a8ee011d264d566affff33f80b0f07f025ae ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 0fb6828cf5d24535b1b69a542367fac2e540bb36 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 656e783cfac1feab3e56ce960de02c9f2545e3e7 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 2b7e69db9a000b2ee84ebec1aace4363e3b5512f ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- fe21faac40f1278f22b9a0fc333fc56aaa7f4c38 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 4cadeeb3b018c6fac6961e58364aded930cd27cc ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7621c67b275565d08300c5e7e43d6c60052b8b7d ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- d0464862795017bd3aebd842065dd0ac9ad6d482 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 422adcad8a2cc3c4ce043a8d6b2c081c40e3b298 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 4cadeeb3b018c6fac6961e58364aded930cd27cc ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f51c267f61b1d55db68a9de47bbbf1b08b350097 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 34656fe34b1d597be9010a282d0a1a17059d3604 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9c8b4010a0808c8de1bbdc10ef6fc2fb6b574bf6 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f51c267f61b1d55db68a9de47bbbf1b08b350097 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 34656fe34b1d597be9010a282d0a1a17059d3604 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9c8b4010a0808c8de1bbdc10ef6fc2fb6b574bf6 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 601b829cd650f7c872771c1072485a089fcf09f6 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 8beaead631d0cd4a35945327602597167fca2771 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- a5b12156418f2305575e4941efeb44a9dd56150f ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- db3b17077426492987971e570ba016c4d830123d ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 029fcbc90e100c49d4534b9a15609c2d6d930186 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- aa1522452fc5e3653c4f5016fdaeea95f53f697e ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 8beaead631d0cd4a35945327602597167fca2771 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 56efd82d4136362b9a530613c73b0693ea239c83 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- db3b17077426492987971e570ba016c4d830123d ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 601b829cd650f7c872771c1072485a089fcf09f6 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- a5b12156418f2305575e4941efeb44a9dd56150f ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 029fcbc90e100c49d4534b9a15609c2d6d930186 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- aa1522452fc5e3653c4f5016fdaeea95f53f697e ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 56efd82d4136362b9a530613c73b0693ea239c83 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 8b7c88e3caa63e70919eef247ed0233d83780c41 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 2b016cf4359d6cf036cf15dc90d04433676d728f ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 029fcbc90e100c49d4534b9a15609c2d6d930186 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 0edb1949002ba2127139b618e4a7632a1fd89b62 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 4abf9c798b3f9c31a73a3ae14976e72459f8ff5b ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- bd8da4caef5a016424c089b8baa43e43697e61b3 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- bdd8f0eb9c569dec8d621b3f098be4ad15df6f39 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- da2f93a8d261595748a0782ed1e60d0fe8864703 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 1a764ed3c130268dc1a88dae3e12b3c95160a18b ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- f6f45f74da02782a90d8621ad1c4862212f9dc63 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 53bc982e3f58e53d72243fb345898bbe2eb9b1e7 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 8a3de181c809084d40b4d306ed19ae3b902c8537 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 8f61a3c3fb9a32ffc34fe61d46798db3165a680c ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 6204fb368d8f7dd75047aa537755732217f8764d ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 1eed1f84ed1c140f360e998755d0b897507366b2 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 2f3601b33ae990737b098770dbf5c2f08cab7c6c ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 8c838182b03cb555a3518f42d268f556b5a92758 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- b4bc4a754af30be3dd0e18372eb1ff58cd3e22d1 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 88c0ba44f8ec296b222a56cba1acc9eac70c9ace ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- d3a7e36be2c372a497d46433e0ddf93c9581289a ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 8b519c1caab06d85897b107029bd7b5895406399 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 23b1b6f6ed86a2a67b28df2e6c66ea781081f26e ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 38c034db41d6582cf9e56ab5a694a960e26778e9 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 55e81e78e51f31478deb94cdbc50cdc8f579e2f6 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 8b519c1caab06d85897b107029bd7b5895406399 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +a24aac921256040e6243a6352e95228bb921a33d with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- ba03709e6dda785ff3181f314cf27b3f0fa7ad11 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e65068295023a4bc3d536ad285181aa481a43692 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 55e81e78e51f31478deb94cdbc50cdc8f579e2f6 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 72291dc951a30e6791f96041cae7e28c7c07fd76 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 2f3601b33ae990737b098770dbf5c2f08cab7c6c ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 8c838182b03cb555a3518f42d268f556b5a92758 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- bcd25136fa341b9f022a73a8492a912071c8e9fc ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 79439f01f43d09132f3bfb3a734c2ad6a6a04c2e ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- f531617d495425dda54c611263ace4771007b252 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +1b1f223392508b9f7194515708000a942bb727bc with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- c21e4cc5c022837d2de1af233e783e1c8ab6373e ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 95cd33173456304e1ab31a8cbfb1a6192b37d784 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 951c18d9aa9c0a750244d73bb849c997939d3c7c ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 4ba4515b1639bc4edc2948f61119206f8e3c8b2a ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- d6d0d1b6c823d758cba70d3acfe1b4b69b1a8cf0 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 951c18d9aa9c0a750244d73bb849c997939d3c7c ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e172acef0dd80f57bd1454640b72b8cc0f270231 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- cf12c9183c5f7aaa1917b8b02197075dabb425c8 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- fe591ddb7fd5313dca0e9a41b8da9ee9d5b61f69 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 45c5b60544fa5b50a84116ec2664924ad0fc4334 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- bfb455469ad96be91ca1fca2c607f33ef4903879 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 16967eb5debcad7cf861e1ea6ba0cddd75f2ddc1 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 85d72353395d3f77d03618f68beaed15aa16d5af ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- b8fa734a0bfd21e14b82f576350f0c07592b7ec2 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- f0a3c2dd52640c7bcbd534ab36de60d8d729c927 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 45c5b60544fa5b50a84116ec2664924ad0fc4334 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 6a12adf9f736dde91ea0cf230d0ecc6c2a915c26 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 16967eb5debcad7cf861e1ea6ba0cddd75f2ddc1 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 85d72353395d3f77d03618f68beaed15aa16d5af ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 51ff8326ef50dcc34674f9eba78486413c72e50f ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- b8fa734a0bfd21e14b82f576350f0c07592b7ec2 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 1a8ffc679e9b9b9488c11569854b8de752f3beca ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 3368d19c227a7a950c05d83be72ef171fe255eef ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- f6bc58055ec59c3208c90066a3bd23eb6fa22592 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 20791b624615f5a291e6a4de62b957f770054180 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 82644b6d11bbc4ac6065e615d9b7665733452cfd ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 754d76863d0b575b8a8b2782df19cc334c85f523 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 3368d19c227a7a950c05d83be72ef171fe255eef ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 626c9b73b6b1148f639fb9589a2091d1cca5aa8b ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 20791b624615f5a291e6a4de62b957f770054180 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 82644b6d11bbc4ac6065e615d9b7665733452cfd ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 754d76863d0b575b8a8b2782df19cc334c85f523 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 626c9b73b6b1148f639fb9589a2091d1cca5aa8b ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- babc9c65b1132a92efc993d012d2850ad8e0e1b3 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 8e517bde7e0a68edd13ce908c53f8897b7843938 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 8c996070e1434b525658b34fc3c22719d9f23cbe ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- babc9c65b1132a92efc993d012d2850ad8e0e1b3 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 8e517bde7e0a68edd13ce908c53f8897b7843938 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 8c996070e1434b525658b34fc3c22719d9f23cbe ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- c5a7d3312a1e36417ba907266f3cc33831460f15 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 70966d599c7ff569ec9df61091641ed5dd197e88 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 7fbaa5566d1e0d4e882fbce3caedbb6439ff7a62 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 45c5b60544fa5b50a84116ec2664924ad0fc4334 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 2dba841d6008476ffad7d666f3f7d7af1cf07152 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 16967eb5debcad7cf861e1ea6ba0cddd75f2ddc1 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 85d72353395d3f77d03618f68beaed15aa16d5af ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- b8fa734a0bfd21e14b82f576350f0c07592b7ec2 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 7fbaa5566d1e0d4e882fbce3caedbb6439ff7a62 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 2dba841d6008476ffad7d666f3f7d7af1cf07152 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 85d72353395d3f77d03618f68beaed15aa16d5af ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- d5463dfca9f0c211bb74e90628165981c450a523 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- c989ee89ef3fb3e54fa52ff268d4b27e0b98c0e0 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 8b302b7ff6d91f2e70e090af93c42b24cc91645b ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 62863471849f9f5abc13ccedc2bb5ad3a26ec505 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- f714fa793ab2930caa67617438b842461faa4edc ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- d11bd6618852a67120ef123158ea512e9551f8f9 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 8e8eb8483a8e701ddc37d7e93489a47294c1f9b9 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 7eb9c80af9b372bbbc1bde28486044b0ed60cf72 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 2b2464b0605bbcd4448ab7777c21dd7c7115b956 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 14dde4ff2f969828d9f394056805216e4e1c5ceb ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 62863471849f9f5abc13ccedc2bb5ad3a26ec505 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 9364380c40de1dc770b0238588acbe68797a9ee6 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- f714fa793ab2930caa67617438b842461faa4edc ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- d11bd6618852a67120ef123158ea512e9551f8f9 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 14dde4ff2f969828d9f394056805216e4e1c5ceb ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 8e8eb8483a8e701ddc37d7e93489a47294c1f9b9 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 9364380c40de1dc770b0238588acbe68797a9ee6 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 7eb9c80af9b372bbbc1bde28486044b0ed60cf72 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 2b2464b0605bbcd4448ab7777c21dd7c7115b956 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- d5c786436ef51e0959515cfc9401a2674b5b1fa7 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 8e8eb8483a8e701ddc37d7e93489a47294c1f9b9 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 2bada62a31515dc5bb8dffa1d57e260cbe6e6cd8 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 7eb9c80af9b372bbbc1bde28486044b0ed60cf72 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 80ef6a78023cd2b39f1ef93f5643347c448f0957 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 2b2464b0605bbcd4448ab7777c21dd7c7115b956 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- d5c786436ef51e0959515cfc9401a2674b5b1fa7 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- d3596706c137e5fa769c7bd4c341ced63406d642 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 2bada62a31515dc5bb8dffa1d57e260cbe6e6cd8 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- c77cb49fc61e7d74b80dd7efe1c32fe4faa581d5 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 80ef6a78023cd2b39f1ef93f5643347c448f0957 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- d0f3b72e6828b73bf40bf07dc7a9ce59dcc945a1 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +be962f19320c901bb332609778e39a3681b66936 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 8e8eb8483a8e701ddc37d7e93489a47294c1f9b9 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 7eb9c80af9b372bbbc1bde28486044b0ed60cf72 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 2b2464b0605bbcd4448ab7777c21dd7c7115b956 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 14dde4ff2f969828d9f394056805216e4e1c5ceb ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- d3596706c137e5fa769c7bd4c341ced63406d642 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 9364380c40de1dc770b0238588acbe68797a9ee6 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- c77cb49fc61e7d74b80dd7efe1c32fe4faa581d5 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- d0f3b72e6828b73bf40bf07dc7a9ce59dcc945a1 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 6a3552c278342618fa90be0685b663e72c7c0334 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- d3596706c137e5fa769c7bd4c341ced63406d642 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 2dfe330e4c2de91e01b27f77b0b659d4d11d3471 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- c77cb49fc61e7d74b80dd7efe1c32fe4faa581d5 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- d0f3b72e6828b73bf40bf07dc7a9ce59dcc945a1 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- d3596706c137e5fa769c7bd4c341ced63406d642 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- c77cb49fc61e7d74b80dd7efe1c32fe4faa581d5 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- d0f3b72e6828b73bf40bf07dc7a9ce59dcc945a1 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 88bf7cdb0ce43b7c1e895840d92e0c737c2e4478 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 8fd73e1acc11d0e9a8b3cb35f756003d9ff1b191 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 3bf7e3628e58645e70b9e1d16c54d56131f117f3 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 94ee7c24814f475a659e39777034703d01bfbe0c ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- ab650abf1b5aa8641a8e78ffdddf324813ee7b33 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e358d01becd615b498d44e21b6bc994c5632335d ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- d2882218789ba9a993e72249fb476d4399dc5373 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 7689175546ed52f32ea74fb77d6ab708d2a888d2 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e358d01becd615b498d44e21b6bc994c5632335d ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 3f7196bef85feb6764dadb6473ec9659251f408d ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- d2882218789ba9a993e72249fb476d4399dc5373 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 7689175546ed52f32ea74fb77d6ab708d2a888d2 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e358d01becd615b498d44e21b6bc994c5632335d ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 3f7196bef85feb6764dadb6473ec9659251f408d ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- d4bd4875c7d9de14671f5098b689c0a1c55eab88 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- d2882218789ba9a993e72249fb476d4399dc5373 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 7689175546ed52f32ea74fb77d6ab708d2a888d2 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e358d01becd615b498d44e21b6bc994c5632335d ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 3f7196bef85feb6764dadb6473ec9659251f408d ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- ff6baab4b76630bf39283f34631c24f471f938cb ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- b5bd3992ece3fb6654839a0582816d71640a4fea ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c8def9e035fdd8661e80fd4db4aa808b0af5cfc2 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 659344343b90a4900f60e48aefa6b50f67657197 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 759c9127e0c8515dc0fe7a518b4624f4da083a3a ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 9a50e7137441d96eb414ac1122beb788b71c7988 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- b6eee00a5ead15223afc6e2d3a34069b9e98e73d ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ff6baab4b76630bf39283f34631c24f471f938cb ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 1d389e5dd0afe975d225220257fad55a97dbf04b ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c8def9e035fdd8661e80fd4db4aa808b0af5cfc2 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 4c76b70273ad8331e7c017b311d4198b6c6dfb13 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 759c9127e0c8515dc0fe7a518b4624f4da083a3a ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- b6eee00a5ead15223afc6e2d3a34069b9e98e73d ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ff6baab4b76630bf39283f34631c24f471f938cb ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 1d389e5dd0afe975d225220257fad55a97dbf04b ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c8def9e035fdd8661e80fd4db4aa808b0af5cfc2 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 4c76b70273ad8331e7c017b311d4198b6c6dfb13 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 759c9127e0c8515dc0fe7a518b4624f4da083a3a ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- b6eee00a5ead15223afc6e2d3a34069b9e98e73d ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 4273d376b6ce83f186dfec2d924590abef9dd85d ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 1d389e5dd0afe975d225220257fad55a97dbf04b ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 17e47aad7b111edf1e27319a9864cbbbffa54cee ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 4c76b70273ad8331e7c017b311d4198b6c6dfb13 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 436df8568715e22ebfeb51a2c96c6319e4772ea5 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- b6eee00a5ead15223afc6e2d3a34069b9e98e73d ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 4273d376b6ce83f186dfec2d924590abef9dd85d ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- a8cffc105889e679f36ab10bd6d4702c35efaae9 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 17e47aad7b111edf1e27319a9864cbbbffa54cee ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- f2c19765442952d9a392bcb65920586f3111cd7d ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 436df8568715e22ebfeb51a2c96c6319e4772ea5 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 0d6c9a9b0349cc7f4af6bf7e9b98cc5bd6cadbdf ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- a8cffc105889e679f36ab10bd6d4702c35efaae9 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- da8df3a7daad07c9b29c0f7d9f859babc2d90d67 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- f2c19765442952d9a392bcb65920586f3111cd7d ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 436df8568715e22ebfeb51a2c96c6319e4772ea5 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 0d6c9a9b0349cc7f4af6bf7e9b98cc5bd6cadbdf ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 53f1a16dabc6b4fc334f461f3e274c9f74c0de1a ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- da8df3a7daad07c9b29c0f7d9f859babc2d90d67 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 7a312ea90e3dccc19b9799c91e8ae6d055b63ee2 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 436df8568715e22ebfeb51a2c96c6319e4772ea5 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 9984e4e0653a826cb8e94737254145af37e79a25 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9bb53c4116c008a3047b1a27bcd76f59158a4a8a ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 53f1a16dabc6b4fc334f461f3e274c9f74c0de1a ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9b27ee18c4feb0d1d21b67082900d1643b494025 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 7a312ea90e3dccc19b9799c91e8ae6d055b63ee2 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 00cdf40ef22626dc05ab982e38e29be54598a03b ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9984e4e0653a826cb8e94737254145af37e79a25 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 9bb53c4116c008a3047b1a27bcd76f59158a4a8a ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 32062b074b5ea92dea47bf088e5fdd2bbde72447 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 9b27ee18c4feb0d1d21b67082900d1643b494025 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 8b1ca780f4c756161734ce28f606249ffae0a27d ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 00cdf40ef22626dc05ab982e38e29be54598a03b ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 470669419034724cbc38527089b718bc5e2aa73b ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- fea60d692ee9c99e0d8f9d8f743a0e689052f930 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 32062b074b5ea92dea47bf088e5fdd2bbde72447 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 76503b3f607f1b2541bbf6d18aa2193d88195359 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 8b1ca780f4c756161734ce28f606249ffae0a27d ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 6d5fd1edc69477e7a1f290d49aab2613c64ccb79 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 470669419034724cbc38527089b718bc5e2aa73b ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- fea60d692ee9c99e0d8f9d8f743a0e689052f930 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 1bbe89276621e8dd9aab654e9ec17302fcc56df0 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 76503b3f607f1b2541bbf6d18aa2193d88195359 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 7936ad8c8d015ac6d95d7fd7c356a911647b6714 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 6d5fd1edc69477e7a1f290d49aab2613c64ccb79 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 63343d910e13228d3d0bbae716fdeb2e3f1a2550 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- c1e6b2b22e5b0db3f46aa709afb3452de778409b ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 1bbe89276621e8dd9aab654e9ec17302fcc56df0 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- fca89a04b8db9c412baca7299a96f7aa4ef3016e ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 7936ad8c8d015ac6d95d7fd7c356a911647b6714 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- de588b36565477ce137fe2b8ac6307d43cc304ad ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 63343d910e13228d3d0bbae716fdeb2e3f1a2550 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 9daffc64f32001c1489e0dd2b2feb54a2a06f1fc ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 1bbe89276621e8dd9aab654e9ec17302fcc56df0 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- c5339879d1f52610dde57f9f6a6f3632ebb5c611 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 7936ad8c8d015ac6d95d7fd7c356a911647b6714 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- de588b36565477ce137fe2b8ac6307d43cc304ad ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 63343d910e13228d3d0bbae716fdeb2e3f1a2550 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 9daffc64f32001c1489e0dd2b2feb54a2a06f1fc ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ec7ff6deb8c12d4a9dd59e9fb59c889c1b675224 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c5339879d1f52610dde57f9f6a6f3632ebb5c611 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c283f417dd9a9385e1255c83ec23fcb75339a812 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- de588b36565477ce137fe2b8ac6307d43cc304ad ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 8ea9b8ef0c887d88e15ffb11a5026e4decfecc97 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- fe24b3fb4e83bf58a9b3552b1ec99bc87bbd720e ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ec7ff6deb8c12d4a9dd59e9fb59c889c1b675224 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- b1b8f02aea594520a0649de15d44c1a392388f12 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- c283f417dd9a9385e1255c83ec23fcb75339a812 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 01548d4a5777938ec2bfa79d2c6c0df75eac38fa ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 8ea9b8ef0c887d88e15ffb11a5026e4decfecc97 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- fe24b3fb4e83bf58a9b3552b1ec99bc87bbd720e ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- b1b8f02aea594520a0649de15d44c1a392388f12 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 01548d4a5777938ec2bfa79d2c6c0df75eac38fa ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 2833afcc0f6c25a050f6d16d15f20598a08064f0 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 9bc6128ffd6703432c716654331edbbda0b494e1 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- c66d94618103a91abd96db3c1731ad9298b67726 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- a35e9cc5e55f1ea39e626a3fb379dea129d63c7e ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ad3e534715c275a21b7fe1df24f90c05f983a4cc ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 450f71fd6eca75f44fc6b6e3e03ee346ab3cd795 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- da38ea2c0d21746c173f0f14d7d02c5f465d4cc2 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- a0adc6ecb0ab27bef5449899a75a1e4682b8958a ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 450f71fd6eca75f44fc6b6e3e03ee346ab3cd795 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 715ffe6d88d1ab92fbd8b4e83b04e24e8f662baa ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 9aca18131c1e3ad91cd6b8e70497f116e392135d ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 87087ca749ad68f8cdfdd9ca51d1e941c98d5208 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 715ffe6d88d1ab92fbd8b4e83b04e24e8f662baa ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 9aca18131c1e3ad91cd6b8e70497f116e392135d ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 87087ca749ad68f8cdfdd9ca51d1e941c98d5208 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- da644127cbbfe06ab60b16a2b3398147b28568b6 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 654f655dc25b5d07606fe46b972fa779efc139ca ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- aad1f85d06b82ce337d8036e155fd7765f6f1b0c ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- da644127cbbfe06ab60b16a2b3398147b28568b6 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 654f655dc25b5d07606fe46b972fa779efc139ca ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- aad1f85d06b82ce337d8036e155fd7765f6f1b0c ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 27aab3bdf8e58641371d0997160df04a1f95c762 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 7c527671e5f414345e42188c783de0e1de101a62 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- eeea17544e0ab2cc74012112e7fc5169445819d6 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 932e8570316e1cd7d76be44414d2dc1515fcc0f3 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- aad1f85d06b82ce337d8036e155fd7765f6f1b0c ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3a56382a340d43f3581046347e401874f83538c1 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 72fa9416d9b88e6c39e4254f8a32c184a2bb36c6 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 2cec49545614f3eda402a2f495b105bf7dbee59b ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3a56382a340d43f3581046347e401874f83538c1 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 795e80b18c23255c4ad585f62eaa511edf884849 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 72fa9416d9b88e6c39e4254f8a32c184a2bb36c6 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- beeb9b2f13ddcf06568af177d53638eddbc5673f ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 2cec49545614f3eda402a2f495b105bf7dbee59b ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- ee1519e585cdd413f7e9725fe714a661faffa833 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 757bcacfbfc43ed4240abfc6b3b60e42b6f0fe0a ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 8711c1fbb68d70bd9686962a39b87f2b6e6eb54e ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3dc460a850cda8c48e1cfe81d885abdfb1d54fff ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 8832db585d7d81290862b66ac1baacd59ac6cd6d ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 25cd1cce114c7db946f235ac8fb33e849811129e ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 5c4264e97e16d051cac6190a44cd7888d1b5715a ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 571d0036257d1aa3f580b86698418675cc22882f ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 2251ecb251ae6cd741351dbf159de651ef7154eb ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 1a39c83aa482f5993be4719eb1b7f8aea6a9f042 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 4a39ff57eaf869f57a6bd16680f0b55970fbb2f1 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +5a6239609b68e8206539af817a61d72259886460 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 1a39c83aa482f5993be4719eb1b7f8aea6a9f042 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 4a39ff57eaf869f57a6bd16680f0b55970fbb2f1 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 1a39c83aa482f5993be4719eb1b7f8aea6a9f042 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 4a39ff57eaf869f57a6bd16680f0b55970fbb2f1 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 187ef7c1bfde8d77268bf4382da0613984394990 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- d05e01468b105514716d41a0dba1db8b52e0276c ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 32661d4cedd9cb43d1fe963001adc391599615f3 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- dc9fa729dd8d3b938d5ec89d00b14f57083cce0c ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- c459bb431051e3d0fe8a4496b018046570179808 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 187ef7c1bfde8d77268bf4382da0613984394990 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- d05e01468b105514716d41a0dba1db8b52e0276c ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 32661d4cedd9cb43d1fe963001adc391599615f3 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- dc9fa729dd8d3b938d5ec89d00b14f57083cce0c ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- c459bb431051e3d0fe8a4496b018046570179808 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 4e217f3f0084ebf85ecbf32995aa5830105f89cc ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 772dd12a293a9925ddb7dde00f52877279637693 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 054cdb9bc9c143ba689e61b3e59fe7fa3dc8b101 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- dc9fa729dd8d3b938d5ec89d00b14f57083cce0c ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d9c6f1df8f749aa032f102f0c2dae9481d4aab66 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 4e217f3f0084ebf85ecbf32995aa5830105f89cc ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 8c84b543971e970f694d0700e43642b12bb5a649 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 772dd12a293a9925ddb7dde00f52877279637693 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- df7981c82f3d6b6523af404886cbb2d93b2ca235 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 054cdb9bc9c143ba689e61b3e59fe7fa3dc8b101 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- dc9fa729dd8d3b938d5ec89d00b14f57083cce0c ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d5971e65b6a13cafc68d5bf8c211c14dd4863cd9 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3115e9ee914951e01f285eb5eb2dad72b06e8cf2 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- abb9ad1f40f5b33d2f35462244d499484410addb ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 1928617dbe33f61ad502cb795f263e9ce4d38f24 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- cf66b9258c4a4573664e1cc394921c81b08902a1 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f169a85ed43158001a8d0727a3d2afd7f831603f ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3e415ab36161c729f03ab8d2c720a290b7310acd ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 054cdb9bc9c143ba689e61b3e59fe7fa3dc8b101 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- d5971e65b6a13cafc68d5bf8c211c14dd4863cd9 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 29841f1ee0c2d9f289bce7924cfeeb8b1b44115d ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- b68b746f074b947f470d666b2c4091f7112053f4 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- fc259daa23602ca956f594ae49a9426226ffe6ca ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- ab62cbc9a6ac20ecdda2d400384ab43d8904fd23 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- d5971e65b6a13cafc68d5bf8c211c14dd4863cd9 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 29841f1ee0c2d9f289bce7924cfeeb8b1b44115d ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 5568880f9cea2444c9f66200278bb251f4c9f250 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- fc259daa23602ca956f594ae49a9426226ffe6ca ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- ab62cbc9a6ac20ecdda2d400384ab43d8904fd23 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- d5971e65b6a13cafc68d5bf8c211c14dd4863cd9 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 5568880f9cea2444c9f66200278bb251f4c9f250 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 1598aca49f64c14012c070d2506f572106f31748 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- cb8e91e36890d9a5034020640dd0077979651f8a ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 44cf31f4642e7ff74dc6b83724319ad571a2b277 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 1598aca49f64c14012c070d2506f572106f31748 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- cb8e91e36890d9a5034020640dd0077979651f8a ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 44cf31f4642e7ff74dc6b83724319ad571a2b277 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 1598aca49f64c14012c070d2506f572106f31748 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- cb8e91e36890d9a5034020640dd0077979651f8a ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 44cf31f4642e7ff74dc6b83724319ad571a2b277 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 421750c5311e02798dbb8baf3c3e120004bdd978 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 6fb6240fdb19cb72b138c32d0f1051e146fef65b ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 300e33465be379c83c8ab6492db751b88a512eaf ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 54a76695c5864bdc4e9f934aa0998dbdc2b54967 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 4d7063f4fb47e081fce57ca3015be2e5f9126636 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 20f60a3d9af2a1b91586657ec3530c146ec58dc9 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- af5678110f1173ff12753f127c0dd8f265f8541d ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- c951561453e3daeec1f675a594cd6307bcd603b5 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- ee90c978d296d6f44393944b6309e11b4d839ffe ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 78810a2f78cb5abb267cee04a4ee9b2e0ef65df3 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 2d316f065241fdcd43e3d058a125a7a48e47ed39 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 082e57e560335105e26c0224addd6f738a7dbfad ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 404cea120c3e485c1be5be7d5221cc9abd05392f ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 4d7063f4fb47e081fce57ca3015be2e5f9126636 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 20f60a3d9af2a1b91586657ec3530c146ec58dc9 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 2fc7781f3f015f5f11926aa968051bdd66e4679f ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- f41429a6851ba2ad748ad3ffa01b025cb7aebdfc ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 825eba5a8f304bc8e99719d454c729477952cbd1 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- c9352a1803198241d676cf5d623b054cd99a0736 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 973f242ad1c93750a303092a0eea6bb4ab82d5eb ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- fff3c0a0da317a9fc345906563356438360074f3 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 09238c667aaaa284f9d03c17c4aea771054bd8af ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 36e35e4065817c503f545519bcb4808ce7a2bbf3 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 14a0990db542a3be29bc753cbd9a46431737d561 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 3739a704b637b7e5ad329b5f71449cafb23beb27 ---- +cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e3b23b2aaa6493a78275e3c667ab931ed2c4dce9 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- c951561453e3daeec1f675a594cd6307bcd603b5 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 2989947806c923b5b7c54177318b387e72836b1e ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 78810a2f78cb5abb267cee04a4ee9b2e0ef65df3 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- b18d7ff8bfd9415e599ada95ef1aec0e9bbd2a8b ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 082e57e560335105e26c0224addd6f738a7dbfad ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 404cea120c3e485c1be5be7d5221cc9abd05392f ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 4d7063f4fb47e081fce57ca3015be2e5f9126636 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 20f60a3d9af2a1b91586657ec3530c146ec58dc9 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- f045926d19ca39952d191f72430b0e19bfde53ea ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 7091136b6fdb254e81544ad8d594a447cec7e186 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- d47c37ff49fad250a4c845a199532826870e6337 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 4c1fa7fb009aba16dc0642ca6934eddde60912a8 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- dc6f067e4d699879e21f067bfe1a909b79c004e3 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 38b2a5abf3287e16d372659260bcd8183e15c840 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 85a7c581718cff7e6a9d8ad94c9c961498730bd0 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- b095b47ed90835f8d5797c5042bc07d21b7957f1 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 15b5bbbeb61ea34f90419600648844be693f0476 ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 3812f21365c03e6914426d7283da4ab26bd8209f ---- +a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 2147e4cb4d6ae7bc9bd427c0df70e23f1cd6210e ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 1fbe3e437516992f78ba9290c55ab9c8410ec574 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- ad7a3380840fe64959603faf76db7265dc8d82f7 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 28cba11a5d6f3ee8349563fe0bedfc17a309de79 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 9822d97f95f3200f2bdc7705a93549370c94a4f7 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 4c42412f8f6f8c50fe1c918fbc4d8e82e77e58be ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 082e57e560335105e26c0224addd6f738a7dbfad ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 404cea120c3e485c1be5be7d5221cc9abd05392f ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 9d2690be518742aadcd39114b7f02c01a86cc43d ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 4bc8760a994ba6bb1a2ee04b8d949fe17128c0b9 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- a9bf30dd24364a8322a6845a0664fe1b2781b391 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- f045926d19ca39952d191f72430b0e19bfde53ea ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 7091136b6fdb254e81544ad8d594a447cec7e186 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- d47c37ff49fad250a4c845a199532826870e6337 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 4c1fa7fb009aba16dc0642ca6934eddde60912a8 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- dc6f067e4d699879e21f067bfe1a909b79c004e3 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 38b2a5abf3287e16d372659260bcd8183e15c840 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- d7a2f27140e393a47d8c34a43eeb9bc620da9ab3 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- b095b47ed90835f8d5797c5042bc07d21b7957f1 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 15b5bbbeb61ea34f90419600648844be693f0476 ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 3812f21365c03e6914426d7283da4ab26bd8209f ---- +8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 2147e4cb4d6ae7bc9bd427c0df70e23f1cd6210e ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- dffad2f029b6f1f8a8f4011cd3da3ce0cc89aa1a ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- ad7a3380840fe64959603faf76db7265dc8d82f7 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 28cba11a5d6f3ee8349563fe0bedfc17a309de79 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 9822d97f95f3200f2bdc7705a93549370c94a4f7 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 4c42412f8f6f8c50fe1c918fbc4d8e82e77e58be ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 082e57e560335105e26c0224addd6f738a7dbfad ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 404cea120c3e485c1be5be7d5221cc9abd05392f ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 9d2690be518742aadcd39114b7f02c01a86cc43d ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 4bc8760a994ba6bb1a2ee04b8d949fe17128c0b9 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- a9bf30dd24364a8322a6845a0664fe1b2781b391 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- f045926d19ca39952d191f72430b0e19bfde53ea ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 7091136b6fdb254e81544ad8d594a447cec7e186 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- d47c37ff49fad250a4c845a199532826870e6337 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 4c1fa7fb009aba16dc0642ca6934eddde60912a8 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- dc6f067e4d699879e21f067bfe1a909b79c004e3 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 38b2a5abf3287e16d372659260bcd8183e15c840 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- d7a2f27140e393a47d8c34a43eeb9bc620da9ab3 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- b095b47ed90835f8d5797c5042bc07d21b7957f1 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 15b5bbbeb61ea34f90419600648844be693f0476 ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 3812f21365c03e6914426d7283da4ab26bd8209f ---- +960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 2147e4cb4d6ae7bc9bd427c0df70e23f1cd6210e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b213ab544114f7e6148ee5f2dda9b7421d2d998 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a0bb1b1d427b620d7acbada46a13c3123412e66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03db7c345b3ac7e4fc55646775438c86f9b79ee7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a98c7404d85ca0fdc96a5f4c0c740f5f13c62cb7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f8c61dbd14ec1bdbbee59e301aef2c158bf7b55 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4359204a9b05c4abba3bc61c504dca38231d45f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d7b8ba9f2e9298496232e4ae66bd904a1d71001 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff56dbbfceef2211087aed2619b7da2e42f235e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17c750a0803ae222f1cdaf3d6282a7e1b2046adb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eff48b8ba25a0ea36a7286aa16d8888315eb1205 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09fb2274db09e44bf3bc14da482ffa9a98659c54 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07bfe1a60ae93d8b40c9aa01a3775f334d680daa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aba4d9b4029373d2bccc961a23134454072936ce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b09003fffa8196277bcfaa9984a3e6833805a6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc8d23d3d6e735d70fd0a60641c58f6e44e17029 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b0465c9bcca64c3a863a95735cc5e602946facb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eae33d324376a0a1800e51bddf7f23a343f45a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d9011c05b0e27f1324f393e65954542544250d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb3fec340f89955a4b0adfd64636d26300d22af9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b72118e231c7bc42f457e2b02e0f90e8f87a5794 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59c89441fb81b0f4549e4bf7ab01f4c27da54aad ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe594eb345fbefaee3b82436183d6560991724cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- affee359af09cf7971676263f59118de82e7e059 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9f9027779931c3cdb04d570df5f01596539791b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f5d2fd68e784c2b2fd914a196c66960c7f48b49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26dfeb66be61e9a2a9087bdecc98d255c0306079 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bf00a6719804c2fc5cca280e9dae6774acc1237 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae9d56e0fdd4df335a9def66aa2ac96459ed6e5c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cef949913659584dd980f3de363dd830392bb68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3903d8e03af5c1e01c1a96919b926c55f45052e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 42e4f5e26b812385df65f8f32081035e2fb2a121 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6500844a925f0df90a0926dbdfc7b5ebb4a97bc9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00b5802f9b8cc01e0bf0af3efdd3c797d7885bb1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 703280b8c3df6f9b1a5cbe0997b717edbcaa8979 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b6fe83f4d817a3b73b44df16cfb4f96bd4d9904 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8340e0bb6ad0d7c1cdb26cbe62828d3595c3b7a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 091ac2960fe30fa5477fcb5bae203eb317090b3f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ca97dcef3131a11dd5ef41d674bb6bd36608608 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bef6d375fd21e3047ed94b79a26183050c1cc4cb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bbf6520460dc4d2bfd7943cda666436f860cf71 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 702bdf105205ca845a50b16d6703828d18e93003 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a0d131ece696f259e7ab42a064ceb10dabb1fcc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93954d20310a7b77322211fd7c1eb8bd34217612 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a61a63ed4bb866b2817acbb04e045f8460e040e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0f79c58ad919e90261d1e332df79a4ad0bc40de ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18b6aa55309adfa8aa99bdaf9e8f80337befe74e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79e24f78fa35136216130a10d163c91f9a6d4970 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 820d3cc9ceda3e5690d627677883b7f9d349b326 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8ec952343583324c4f5dbefa4fb846f395ea6e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abf9373865c319d2f1aaf188feef900bb8ebf933 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d86d883714072b6e3bbc56a2127c06e9d6a6582 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a84459c6a5a1d8a81e4a51189091ef135e1776e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 057514e85bc99754e08d45385bf316920963adf9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cefc0df04440215dad825e109807aecf39d6180b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df39446bb7b90ab9436fa3a76f6d4182c2a47da2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 636f77bf8d58a482df0bde8c0a6a8828950a0788 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a625d08801eacd94f373074d2c771103823954d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 617c09e70bfd54af1c88b4d2c892b8d287747542 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45d1cd59d39227ee6841042eab85116a59a26d22 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 567c892322776756e8d0095e89f39b25b9b01bc2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dbc2be846d1d00e907efbf8171c35b889ab0155 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01a96b92f7d873cbd531d142813c2be7ab88d5a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 464504ce0069758fdb88b348e4a626a265fb3fe3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 690722a611a25a1afcdb0163d3cfd0a8c89d1d04 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90f0fb8f449b6d3e4f12c28d8699ee79a6763b80 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb02e1229d336decc7bae970483ff727ed7339db ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb2461d84f97a72641ef1e878450aeab7cd17241 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbddc30a4d5c37feabc33d4c4b161ec8e5e0bf7e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c51f93823d46f0882b49822ce6f9e668228e5b8d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17643e0bd1b65155412ba5dba8f995a4f0080188 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fbf0ef97d6f59d2eb0f37b29716ba0de95c4457 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4832aa6bf82e4853f8f426fc06350540e2c8a9e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48c1e9b430cc84366f2c29bb0006e9593659835e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76bcd7081265f1d72fcc3101bfda62c67d8a7f32 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eae0e37c88a71a3b8ca816b820eed71fd1590f11 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a04c15b1f77f908b1dd3983a27ee49c41b3a3e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4fe6efbccc2ad5c2044bf36e34019363018630 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63c31b60acf2286095109106a4e9b2a4289ec91f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5df76d451ff0fde14ab71b38030b6c3e6bc79c08 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce8cc4a6123a3ea11fc4e35416d93a8bd68cfd65 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b11bcfa3df4d0b792823930bffae126fd12673f7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47f35d1ba2b9b75a9078592cf4c41728ac088793 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 385a8c6c1a72dc34f69c5273c1b4c1285cc1d3c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20f4a9d49b466a18f1af1fdfb480bc4520a4cdc2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85ebfb2f0dedb18673a2d756274bbcecd1f034c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6503ef72d90164840c06f168ab08f0426fb612bf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33346b25c3a4fb5ea37202d88d6a6c66379099c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c30bf3ba7548a0e996907b9a097ec322760eb43a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90c4db1f3ba931b812d9415324d7a8d2769fd6db ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26ccee15ae1712baf68df99d3f5f2fec5517ecbd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5402a166a4971512f9d513bf36159dead9672ae9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572bbb39bf36fecb502c9fdf251b760c92080e1e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 969185b76df038603a90518f35789f28e4cfe5b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e62078d023ba436d84458d6e9d7a56f657b613ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 300261de4831207126906a6f4848a680f757fbd4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c242b55d7c64ee43405f8b335c762bcf92189d38 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e76b5379cf55fcd31a2e8696fb97adf8c4df1a8d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfa37825b011af682bc12047b82d8cec0121fe4e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f08d3067310e0251e6d5a33dc5bc65f1b76a2d49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eec9b86a81693d2b2d18ea651b1a0b5df521266 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4fe276637fe1ce3b2ebb504b69268d5b79de1ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da88d360d040cfde4c2bdb6c2f38218481b9676b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b38725361f711ae638c048f93a7b6a12d165bd4e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c43652c9f5b11b611e1aca0a6d67393e9e38c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 473fc3a348cd09b4ffca319daff32464d10d8ef9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3778ec37d17a6eb781fa9c6b5e2009fa7542d77 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 803aca26d3f611f7dfd7148f093f525578d609ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d92fee01b05e5e217e6dad5cc621801c31debae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b60ab31cfa2ca146069df8dbc21ebfc917db0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34356322ca137ae6183dfdd8ea6634b64512591a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f62c8d8bbb566edd9e7a40155c7380944cf65dfb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 025fe17da390c410e5bae4d6db0832afbfa26442 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a880c5f4e00ef7bdfa3d55a187b6bb9c4fdd59ce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6b661c04d82599ad6235ed1b4165b9f097fe07e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9b0e75c07ccbf90a9f2e67873ffbe672bb1a859 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c6178f53233aa98a602854240a7a20b6537aa7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5c69071fd6c730d29c31759caddb0ba8b8e92c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2448ac4ca337665eb22b9dd5ca096ef625a8f52b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fed0cadffd20e48bed8e78fd51a245ad666c54f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39eb0e607f86537929a372f3ef33c9721984565a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 595181da70978ed44983a6c0ca4cb6d982ba0e8b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1cd58ba862cce9cd9293933acd70b1a12feb5a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36811a2edc410589b5fde4d47d8d3a8a69d995ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c34c23a830bb45726c52bd5dcd84c2d5092418e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af7913cd75582f49bb8f143125494d7601bbcc0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b03c2eb07f08dd5d6174a04e4288d41f49920f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96f8f17d5d63c0e0c044ac3f56e94a1aa2e45ec3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 37cef2340d3e074a226c0e81eaf000b5b90dfa55 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1ace258417deae329880754987851b1b8fc0a7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f58702b0c3a0bb58d49b995a7e5479a7b24933e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7988bb8ce25eb171d7fea88e3e6496504d0cb8f8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f8320b7bf75b6ec375ade605a9812b4b2147de9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f2f3e848e10d145fe28d6a8e07b0c579dd0c276 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f875ddea28b09f2b78496266c80502d5dc2b7411 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b16037a4ff17f0e25add382c3550323373c4398 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a2f5d05f4a8e3427d6dd2a5981f148a9f6bef84 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 887f249a2241d45765437b295b46bca1597d91a3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158b3c75d9c621820e3f34b8567acb7898dccce4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9de6450084eee405da03b7a948015738b15f59e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c3255387fe2ce9b156cc06714148436ad2490d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 559ddb3b60e36a1b9c4a145d7a00a295a37d46a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3473060f4b356a6c8ed744ba17ad9aa26ef6aab7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c6c8dcc01b08748c552228e00070b0c94affa94 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c19a6e1004bb8c116bfc7823477118490a2eef6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af86f05d11c3613a418f7d3babfdc618e1cac805 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01c8d59e426ae097e486a0bffa5b21d2118a48c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90fefb0a8cc5dc793d40608e2d6a2398acecef12 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2f9f4e7fd8af09126167fd1dfa151be4fedcd71 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11d91e245194cd9a2e44b81b2b3c62514596c578 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a1339a3d6751b2e7c125aa3195bdc872d45a887 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecb12c27b6dc56387594df26a205161a1e75c1b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f97d37881d50da8f9702681bc1928a8d44119e88 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab69b9a67520f18dd8efd338e6e599a77b46bb34 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78d12aa7c922551dddd7168498e29eae32c9d109 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 037d62a9966743cf7130193fa08d5182df251b27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 434306e7d09300b62763b7ebd797d08e7b99ea77 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e37ebaa5407408ee73479a12ada0c4a75e602092 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6e458c9f8682ab5091e15e637c66ad6836f23b4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3f91bd1c0e8aef1b416ae6b1f55e7bd93a4f281 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dd3cdfc9d647ecb020625351e0ff3a7346e1918d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11837f61aa4b5c286c6ee9870e23a7ee342858c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86114886ae8c2e1a9c09fdc145269089f281d212 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94b7ece1794901feddf98fcac3a672f81aa6a6e1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dff2004308a7a1e5b9afc7a5b3b9cb515e12514 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2765dfd72cd5b0958ec574bea867f5dc1c086ab0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- baec2e293158ccffd5657abf4acdae18256c6c90 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8e7a7df78fb98314ba5a0a98f4600454a6c3953 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- efc259833ee184888fe21105d63b3c2aa3d51cfa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96364599258e7e036298dd5737918bde346ec195 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f653af66e4c9461579ec44db50e113facf61e2d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c08f592cc0238054ec57b6024521a04cf70e692f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 730177174bbc721fba8fbdcd28aa347b3ad75576 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e21d96a76c223064a3b351fe062d5452da7670cd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8cad756f357eb587f9f85f586617bff6d6c3ccf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1fa8506d177fa49552ffa84527c35d32f193abe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4119a576251448793c07ebd080534948cad2f170 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9448c082b158dcab960d33982e8189f2d2da4729 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e331a0b5e2acd1938bf4906aadf7276bc7f1b60 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21e21d04bb216a1d7dc42b97bf6dc64864bb5968 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18b75d9e63f513e972cbc09c06b040bcdb15aa05 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f12c8c34371a7c46dad6788a48cf092042027ec ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 043e15fe140cfff8725d4f615f42fa1c55779402 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8e223263c73a7516e2b216a546079e9a144b3a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- efe68337c513c573dde8fbf58337bed2fa2ca39a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dd71d3edbf3930cce953736e026ac3c90dd2e59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6752fad0e93d1d2747f56be30a52fea212bd15d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0767cc527bf3d86c164a6e4f40f39b8f920e05d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76ba0924be14d55d01db0506b3e6a930cc72bf0d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69b75e167408d0dfa3ff8a00c185b3a0bc965b58 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fd9f6ee5c8b4ae4e01a40dc398e2768d838210d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b85fec1e333896ac0f27775469482f860e09e5bc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8470777b44bed4da87aad9474f88e7f0774252a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82189398e3b9e8f5d8f97074784d77d7c27086ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71e28b8e2ac1b8bc8990454721740b2073829110 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0a7824253ae412cf7cc27348ee98c919d382cf2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c885781858ade2f660818e983915a6dae5672241 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb7288d4f4a93d07c9989c90511f6887bcaeb25 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a094ac1808f7c5fa0653ac075074bb2232223ac1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36440f79bddc2c1aa4a7a3dd8c2557dca3926639 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a233359ce1ec30386f97d4acdf989f1c3570842 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 696e4edd6c6d20d13e53a93759e63c675532af05 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b0028e1e75e1ee0eea63ba78cb3160d49c1f3a3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3211ae9dbfc6aadd2dd1d7d0f9f3af37ead19383 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74a1b17a29390660abe79d83d837a666141f8625 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e4211b20e8e57fe7b105b36501b8fc9e818852f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ad4079dde47ce721e7652f56a81a28063052a166 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d0fb22b4f5f94da44075d8c43da24b344ae3f0da ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d06f5af4311e6a1d17213dde57a261e30dbf669 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24f75e7bae3974746f29aaecf6de011af79a675d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 184cc1fc280979945dfd16b0bb7275d8b3c27e95 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f9d492e479eda07c5bbe838319eecac459a6042 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfbd5ece215dea328c3c6c4cba31225caa66ae9a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b10de37fe036b3dd96384763ece9dc1478836287 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70aa1ab69c84ac712d91c92b36a5ed7045cc647c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9541d6bffe4e4275351d69fec2baf6327e1ff053 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46b204d1b2eb6de6eaa31deacf4dd0a9095ca3fa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08989071e8c47bb75f3a5f171d821b805380baef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c03da67aabaab6852020edf8c28533d88c87e43f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e30a597b028290c7f703e68c4698499b3362a38f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e7314c57ef56aaf5fd27a311bfa6a01d18366a2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c96476be7f10616768584a95d06cd1bddfe6d404 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 651a81ded00eb993977bcdc6d65f157c751edb02 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c6e67013fd22840d6cd6cb1a22fcf52eecab530 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14fc8bd3e5a8249224b774ea9052c9a701fc8e0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ba76d683df326f2e6d4f519675baf86d0373abf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1297f65226e3bfdb31e224c514c362b304c904c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cd47aeea822c484342e3f0632ae5cf8d332797d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d906f31a283785e9864cb1eaf12a27faf4f72c42 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d283c83c43f5e52a1a14e55b35ffe85a780615d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 60acfa5d8d454a7c968640a307772902d211f043 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6643a9feb39d4d49c894c1d25e3d4d71e180208a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ffddedf5467df993b7a42fbd15afacb901bca6d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2067ba536dd78549d613dc14d8ad223c7d0aa5d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c93e971f3e0aa4dea12a0cb169539fe85681e381 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50cbafc690e5692a16148dbde9de680be70ddbd1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df6fa49c0662104a5f563a3495c8170e2865e31b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a728b0a4b107a2f8f1e68bc8c3a04099b64ee46c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7968d136276607115907267b3be89c3ff9acd03 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a9f8c55d6a58fe42fe67e112cbc98de97140f75 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5232c89de10872a6df6227c5dcea169bd1aa6550 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7180d50f785ec28963e12e647d269650ad89b31 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 624eb284e0e6edc4aabf0afbdc1438e32d13f4c9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9562ae2e2436e052d31c40d5f9d3d0318f6c4575 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b650c4f28bda658d1f3471882520698ef7fb3af6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 135e7750f6b70702de6ce55633f2e508188a5c05 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d43a751e578e859e03350f198bca77244ba53b5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1759a78b31760aa4b23133d96a8cde0d1e7b7ba6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a4fc6abfb3b39237f557372262ac79f45b6a9fa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb411ee92d30675a8d3d110f579692ea02949ccd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7b5e92791dd4db3535b527079f985f91d1a5100 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94bbe51e8dc21afde4148afb07536d1d689cc6ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb7fd31955aaba8becbdffb75dab2963d5f5ad8c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b88532a5346a9a7e8f0e45fec14632a9bfe2c89 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f9840b9220d57b737ca98343e7a756552739168 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3787f622e59c2fecfa47efc114c409f51a27bbe7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98595da46f1b6315d3c91122cfb18bbf9bac8b3b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c4dec45d387ccebfe9bd423bc8e633210d3cdbd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a1991773b79c50d4828091f58d2e5b0077ade96 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3eae2cdd688d8969a4f36b96a8b41fa55c0d3ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ef37754527948af1338f8e4a408bda7034d004f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3fc83f2333eaee5fbcbef6df9f4ed9eb320fd11 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30387f16920f69544fcc7db40dfae554bcd7d1cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16d3ebfa3ad32d281ebdd77de587251015d04b3b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b68361c8b81b23be477b485e2738844e0832b2f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dcb520caa069914f9ab014798ab321730f569cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 176838a364fa36613cd57488c352f56352be3139 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f37011d7627e4a46cff26f07ea7ade48b284edee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3ea6c0564a4a8c310d0573cebac0a21ac7ab0a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e263b8f972f78c673f36f2bbc1f8563ce6acb10 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a175068f3366bb12dba8231f2a017ca2f24024a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 762d8fb447b79db7373e296e6c60c7b57d27c090 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5262acbd33b70fb676284991207fb24fa9ac895 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3edd16ca6e217ee35353564cad3aa2920bc0c2e2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9766832e11cdd8afed16dfd2d64529c2ae9c3382 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9cb7ae8d9721e1269f5bacd6dbc33ecdec4659c0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0b10d965d6377c409ceb40eb47379d79c3fef9f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c16f584725a4cadafc6e113abef45f4ea52d03b3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5f0d48745727684473cf583a002e2c31174de2d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 961539ced52c82519767a4c9e5852dbeccfc974e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe65adc904f3e3ebf74e983e91b4346d5bacc468 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e7045c4a2b2438adecd2ba59615fbb61d014512 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0238e6cce512a0960d280e7ec932ff1aaab9d0f1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7e09792a392eeed4d712b40978b1b91b751a6d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50edc9af4ab43c510237371aceadd520442f3e24 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0374d7cf84ecd8182b74a639fcfdb9eafddcfd15 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7bde529ad7a8d663ce741c2d42d41d552701e19a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5453888091a86472e024753962a7510410171cbc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b7839e6b55953ddac7e8f13b2f9e2fa2dea528b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 411635f78229cdec26167652d44434bf8aa309ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99ba753b837faab0509728ee455507f1a682b471 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4720e6337bb14f24ec0b2b4a96359a9460dadee4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24cd6dafc0008f155271f9462ae6ba6f0c0127a4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a71ebbc1138c11fccf5cdea8d4709810360c82c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69ca329f6015301e289fcbb3c021e430c1bdfa81 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c6209f12e78218632319620da066c99d6f771d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f14903a0d4bb3737c88386a5ad8a87479ddd8448 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2fd537b5b3bb062a26c9b16a52236b2625ff44c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e236853b14795edec3f09c50ce4bb0c4efad6176 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18dd177fbfb63caed9322867550a95ffbc2f19d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b860d1873a25e6577a8952d625ca063f1cf66a84 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6e1dcc992ff0a8ddcb4bca281ae34e9bc0df34b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fbc2304fea19a2b6fc53f4f6448102768e3eeb2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09a96fb2ea908e20d5acb7445d542fa2f8d10bb6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 890fd8f03ae56e39f7dc26471337f97e9ccc4749 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 809c7911944bc32223a41ea3cecc051d698d0503 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07f6f2aaa5bda8ca4c82ee740de156497bec1f56 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d4dd2f1a6f31df9e361ebaf75bc0a2de7110c37 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 466ed9c7a6a9d6d1a61e2c5dbe6f850ee04e8b90 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdd4368489345a53bceb40ebd518b961f871b7b3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d472327f4873a7a4123f7bdaecd967a86e30446 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86b269e1bff281e817b6ea820989f26d1c2a4ba6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f344c8839a1ac7e4b849077906beb20d69cd11ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f404a50e95dd38012d33ee8041462b7659d79a2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2616e12df494774f13fd88538e9a58673f5dabb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 391c0023675b8372cff768ff6818be456a775185 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 97aec35365231c8f81c68bcab9e9fcf375d2b0dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 173cb579972dbab1c883e455e1c9989e056a8a92 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a684a7c41e89ec82b2b03d2050382b5e50db29ee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c382f3678f25f08fc3ef1ef8ba41648f08c957ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3c8760feb03dd039c2d833af127ebd4930972eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 49f13ef2411cee164e31883e247df5376d415d55 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a30b2430e25d615c14dafc547caff7da9dd5403 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15e457c8a245a7f9c90588e577a9cc85e1efec07 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 644f75338667592c35f78a2c2ab921e184a903a0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b6d4885db27b6f3e5a286543fd18247d7d765ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb792ea76888970d486323df07105129abbbe466 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5db2e0c666ea65fd15cf1c27d95e529d9e1d1661 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbf3d2745c3758490f31199e31b098945ea81fca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0420b01f24d404217210aeac0c730ec95eb7ee69 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d39bd5345af82e3acbdc1ecb348951b05a5ed1f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac286162b577c35ce855a3048c82808b30b217a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2810e8d3f34015dc5f820ec80eb2cb13c5f77b2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 607df88ee676bc28c80bca069964774f6f07b716 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7b401e0aa9dbb1a7543dde46064b24a5450db19 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c9da7310eb6adf67fa8d35821ba500dffd9a2a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c859019afaffc2aadbb1a1db942bc07302087c52 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f358e04cb00647e1c74625a8f669b6803abd1fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a244bd15bcd05c08d524ca9ef307e479e511b54c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863abe8b550d48c020087384d33995ad3dc57638 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84c3f60fc805e0d5e5be488c4dd0ad5af275e495 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9de612ebe54534789822eaa164354d9523f7bde ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0059f432c4b9c564b5fa675e76ee4666be5a3ac8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14a7292b26e6ee86d523be188bd0d70527c5be84 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72a2f7dd13fdede555ca66521f8bee73482dc2f4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c563b7211b249b803a2a6b0b4f48b48e792d1145 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6804e73beb0900bd1f5fd932fab3a88f44cf7a31 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73feb182f49b1223c9a2d8f3e941f305a6427c97 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e81fd5447f8800373903e024122d034d74a273f7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc553d6843c791fc4ad88d60b7d5b850a13fd0ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99b6dffe9604f86f08c2b53bef4f8ab35bb565a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a5a78b27ce1bcda6597b340d47a20efbac478d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fd8768c64d192b0b26a00d6c12188fcbc2e3224 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eca69510d250f4e69c43a230610b0ed2bd23a2e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c63abb360b4829b3d75d60fb837c0132db0510 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24d04e820ef721c8036e8424acdb1a06dc1e8b11 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab361cfecf9c0472f9682d5d18c405bd90ddf6d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99471bb594c365c7ad7ba99faa9e23ee78255eb9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45a5495966c08bb8a269783fd8fa2e1c17d97d6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61fef99bd2ece28b0f2dd282843239ac8db893ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 909ee3b9fe308f99c98ad3cc56f0c608e71fdee7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d94159db3067cc5def101681e6614502837cea5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0412f6d50e9fafbbfac43f5c2a46b68ea51f896f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e47352575d9b0a453770114853620e8342662fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4a83ff7910dc3617583da7e0965cd48a69bb669 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0a69bbec284bccbeecdf155e925c3046f024d4c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 625969d5f7532240fcd8e3968ac809d294a647be ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e671d243c09aa8162b5c0b7f12496768009a6db0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8cb3e0cac2f1886e4b10ea3b461572e51424acc7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cf0ca8b94dc815598e354d17d87ca77f499cae6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c429fc0382868c22b56e70047b01c0567c0ba31 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87abade91f84880e991eaed7ed67b1d6f6b03e17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b17a76731c06c904c505951af24ff4d059ccd975 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158131eba0d5f2b06c5a901a3a15443db9eadad1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04005d5c936a09e27ca3c074887635a2a2da914c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c40cf5e83e56e339ec6ab3e75b008721e544ede ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cb09652c007901b175b4793b351c0ee818eb249 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91f6e625da81cb43ca8bc961da0c060f23777fd1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d296eec67a550e4a44f032cfdd35f6099db91597 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ee8b09fd24962889e0e298fa658f1975f7e4e48c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b74a5bb6123b425a370da60bcc229a030e7875c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6b8e7b72ce81524cf82e64ee0c56016106501d96 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e82a7845af93955d24a661a1a9acf8dbcce50b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff4f970fa426606dc88d93a4c76a5506ba269258 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2573dd5409e3a88d1297c3f9d7a8f6860e093f65 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f4c7f3ec32a1943a0d5cdc0633fc33c94086f5f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f4e51bb4fc9d9c74cdbfb26945d053053f60e7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8da4072d71c3b0c13e478dc0e0d92336cf1fdd9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fced2eb501e3428b3e19e5074cf11650945a840 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52f9369ec96dbd7db1ca903be98aeb5da73a6087 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3fabed8d0d237b4d97b695f0dff1ba4f6508e4c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00ef69351e5e7bbbad7fd661361b3569b6408d49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eba84183ea79061eebb05eab46f6503c1cf8836f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55fd173c898da2930a331db7755a7338920d3c38 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 768b9fffa58e82d6aa1f799bd5caebede9c9231b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d22d57010e064cfb9e0b6160e7bd3bb31dbfffc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a10ceef3599b6efc0e785cfce17f9dd3275d174f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cedd3321e733ee1ef19998cf4fcdb2d2bc3ccd14 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 913b4ad21c4a5045700de9491b0f64fab7bd00ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6aa78cd3b969ede76a1a6e660962e898421d4ed8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e633cc009fe3dc8d29503b0d14532dc5e8c44cce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05cf33acc6f451026e22dbbb4db8b10c5eb7c65a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e50ee0a0370fcd45a9889e00f26c62fb8f6fa44e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5f3c586e0f06df7ee0fc81289c93d393ea21776 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7392d68121befe838d2494177531083e22b3d29 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc209ec23819313ea3273c8c3dcbc2660b45ad6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbd9ca4f16830c4991d570d3f9fa327359a2fa11 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5dd2f0c0ed534ecbc1c1a2d8e07319799a4e9c7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae7499f316770185d6e9795430fa907ca3f29679 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db4cb7c6975914cbdd706e82c4914e2cb2b415e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdfd3fc5b4d892b79dfa86845fcde0acc8fc23a4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec29b1562a3b7c2bf62e54e39dce18aebbb58959 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 438d3e6e8171189cfdc0a3507475f7a42d91bf02 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d01f0726d5764fe2e2f0abddd9bd2e0748173e06 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2ce56ffd016e2e6d1258ce5436787cae48a0812 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e27496dea8a728446e7f13c4ff1b5d8c2f3e736 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a2f8a9db703e55f3aa2b068cb7363fd3c757e71 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 820bc3482b6add7c733f36fefcc22584eb6d3474 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9432bedaa938eb0e5a48c9122dd41b08a8f0d740 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80ac0fcf1b8e8d8681f34fd7d12e10b3ab450342 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7cff58fd53bdb50fef857fdae65ee1230fd0061 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 313b3b4425012528222e086b49359dacad26d678 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85cf7e89682d061ea86514c112dfb684af664d45 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d17c2f6131b9a716f5310562181f3917ddd08f91 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ee6c19423297b4c667d34ed1bd621dafaabb0e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 553500a3447667aaa9bd3b922742575562c03b68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9932e647aaaaf6edd3a407b75edd08a96132ef5c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebf46561837f579d202d7bd4a22362f24fb858a4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 225529c8baaa6ee65b1b23fc1d79b99bf49ebfb1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a103d8c28b496ead8b4dd8215b103414f8b7f8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dda3cbbd15e7a415c1cbd33f85d7d6d0e3a307a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05b5cedec2101b8f9b83b9d6ec6a8c2b4c9236bc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4756f4a1298e053aaeae58b725863e8742d353a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34afc113b669873cbaa0a5eafee10e7ac89f11d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dc46d735003df8ff928974cb07545f69f8ea411 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abb18968516c6c3c9e1d736bfe6f435392b3d3af ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a61393899b50ae5040455499493104fb4bad6feb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 284f89d768080cb86e0d986bfa1dd503cfe6b682 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfa0eac1578bff14a8f7fa00bfc3c57aba24f877 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6446608fdccf045c60473d5b75a7fa5892d69040 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 597fb586347bea58403c0d04ece26de5b6d74423 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74930577ec77fefe6ae9989a5aeb8f244923c9ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d85574e0f37e82e266a7c56e4a3ded9e9c76d8a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb8289e80c8b9fe48456e769e0421b7f9972af3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2636d216d43b40a477d3a5180f308fc071abaeb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6244c55e8cbe7b039780cf7585be85081345b480 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 607d8aa3461e764cbe008f2878c2ac0fa79cf910 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38c624f74061a459a94f6d1dac250271f5548dab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05753c1836fb924da148b992f750d0a4a895a81a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dba01d3738912a59b468b76922642e8983d8995b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14d7034adc2698c1e7dd13570c23d217c753e932 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d52c5783c08f4f9e397c4dad55bbfee2b8c61c5f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44496c6370d8f9b15b953a88b33816a92096ce4d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0685d629f86ef27e4b68947f63cb53f2e750d3a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a086625da1939d2ccfc0dd27e4d5d63f47c3d2c9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ba1ceaeadd8ff39810c5f410f92051a36dd17e6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 544ceecf1a8d397635592d82808d3bb1a6d57e76 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5eb90461917afe04f31abedae894e63f81f827e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b303cb0c5995bf9c74db34a8082cdf5258c250fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 19a4df655ae2ee91a658c249f5abcbe0e208fa72 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fd090293792884f5a0d05f69109da1c970c3cab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 248ad822e2a649d20582631029e788fb09f05070 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95897f99551db8d81ca77adec3f44e459899c20b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b269775a75d9ccc565bbc6b5d4c6e600db0cd942 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4744efbb68c562adf7b42fc33381d27a463ae07a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 763531418cb3a2f23748d091be6e704e797a3968 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3c3efd20c50b2a9db98a892b803eb285b2a4f83 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f7e92cf00814fc6c4fb66527d33f7030f98e6bf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71b3845807458766cd715c60a5f244836f4273b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69d7a0c42cb63dab2f585fb47a08044379f1a549 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59ad90694b5393ce7f6790ade9cb58c24b8028e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 64b85ee4cbaeb38a6dc1637a5a1cf04e98031b4b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43564d2e8f3b95f33e10a5c8cc2d75c0252d659a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf1354bb899726e17eaaf1df504c280b3e56f3d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ba39bd0f0b27152de78394d2a37f3f81016d848 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55146609e2d0b120c5417714a183b3b0b625ea80 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 289fab8c6bc914248f03394672d650180cf39612 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f2b40d74c67c6fa718f9079654386ab333476d5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba169916b4cc6053b610eda6429446c375295d78 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c459bfcfdd7487f8aae5dd4101e7069f77be846 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 321694534e8782fa701b07c8583bf5eeb520f981 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef2316ab8fd3317316576d2a3c85b59e685a082f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e6099bce97a688c251c29f9e7e83c6402efc783 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7289c75cceaaf292c6ee01a16b24021fd777ad5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01f142158ee5f2c97ff28c27286c0700234bd8d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d0d1d6cfec28ba89ed1819bee9fe75931e765d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb08a3df46718c574e85b53799428060515ace8d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb14533db732d62778ae48a4089b2735fb9e6f92 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3a57f53d74998e835bce1a69bccbd9c1dadd6f9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f83797aefa6a04372c0d5c5d86280c32e4977071 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b16b6649cfdaac0c6734af1b432c57ab31680081 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05e9a6fc1fcb996d8a37faf64f60164252cc90c2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7081db74a06c89a0886e2049f71461d2d1206675 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07f81066d49eea9a24782e9e3511c623c7eab788 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d66f8f79629bcfa846a3d24a2a2c3b99fb2a13f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16c2d9c8f0e10393bf46680d93cdcd3ce6aa9cfd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89d11338daef3fc8f372f95847593bf07cf91ccf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ad6dc07790fe567412ccbc2a539f4501cb32ab2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 199099611dd2e62bae568897f163210a3e2d7dbb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14f3d06b47526d6f654490b4e850567e1b5d7626 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1349ee61bf58656e00cac5155389af5827934567 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7d2671c6ef156d1a2f6518de4bd43e3bb8745be ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a37405664efe3b19af625b11de62832a8cfd311c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cfd4b30cda23270b5bd2d1e287e647664a49fee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccaae094ce6be2727c90788fc5b1222fda3927c8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f583a810162c52cb76527d60c3ab6687b238938 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a5cef5c7c4a7130626fc2d7d5d562e1e985bbd0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 916a0399c0526f0501ac78e2f70b833372201550 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d759e17181c21379d7274db76d4168cdbb403ccf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fa1ce2b7dcf7f1643bb494b71b9857cbfb60090 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3face9018b70f1db82101bd5173c01e4d8d2b3bf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 23b83cd6a10403b5fe478932980bdd656280844d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf237db554f8e84eaecf0fad1120cbd75718c695 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66bb01306e8f0869436a2dee95e6dbba0c470bc4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 193df8e795de95432b1b73f01f7a3e3c93f433ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0dd99fe29775d6abd05029bc587303b6d37e3560 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb8b383d8be3f9da39c02f5e04fe3cf8260fa470 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63a444dd715efdce66f7ab865fc4027611f4c529 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b207f0e8910a478ad5aba17d19b2b00bf2cd9684 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9121f629d43607f3827c99b5ea0fece356080cf0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 882ebb153e14488b275e374ccebcdda1dea22dd7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fdb1dc77a45a26d8eac9f8b53f4d9200f54f7efe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 359a7e0652b6bf9be9200c651d134ec128d1ea97 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bf53a3913d55f933079801ff367db5e326a189a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d7eaf1253245c6b88fd969efa383b775927cdd0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d8a5144bd8c0940d9f2593a21aec8bebf7c035 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07657929bc6c0339d4d2e7e1dde1945199374b90 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5c94165d24195994c929de95782e1d412e7c2e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ff2f4f7a2f8212a68aff34401e66a5905f70f51 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca080bbd16bd5527e3145898f667750feb97c025 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e2d2651773722c05ae13ab084316eb8434a3e98 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6fdb67cec5c75b3f0a855042942dac75c612065 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bebfe31c2d9064d4a13de95ad79a4c9bdc3a33a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87b5d9c8e54e589d59d6b5391734e98618ffe26e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ece804aed9874b4fd1f6b4f4c40268e919a12b17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5cc590c875ada0c55d975cbe26141a94e306c94 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fa99bff215249378f90e1ce0254e66af155a301 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dab0c2e0da17c879e13f0b1f6fbf307acf48a4ff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2cd5970af1ea8024ecf82b11c1b3802d7c72ba6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acbd5c05c7a7987c0ac9ae925032ae553095ebee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 326409d7afd091c693f3c931654b054df6997d97 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71bd08050c122eff2a7b6970ba38564e67e33760 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e7e82b114a5c1b3eb61f171c376e1cf85563d07 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b6b90f9f1e5310a6f39b75e17a04c1133269e8f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- daa3f353091ada049c0ede23997f4801cbe9941b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80204335d827eb9ed4861e16634822bf9aa60912 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 859ad046aecc077b9118f0a1c2896e3f9237cd75 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 913d806f02cf50250d230f88b897350581f80f6b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce7e1507fa5f6faf049794d4d47b14157d1f2e50 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bd86c87c38d58b9ca18241a75c4d28440c7ef150 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e93ffe192427ee2d28a0dd90dbe493e3c54f3eae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a77a17f16ff59f717e5c281ab4189b8f67e25f53 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b176732ba16379d57f53e956456bc2c5970baf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a02facd0b4f9c2d2c039f0d7dc5af8354ce0201b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6df6d41835cd331995ad012ede3f72ef2834a6c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b50b96032094631d395523a379e7f42a58fe8168 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b628dccf4102d2a63c6fc8cd957ab1293bafbc6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3bf002e3ccc26ec99e8ada726b8739975cd5640e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 687c8f0494dde31f86f98dcb48b6f3e1338d4308 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dac619e4917b0ad43d836a534633d68a871aecca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1bb0b1751b38da43dbcd2ec58e71eb7b0138d786 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9dbaab311dbafcba0b68edb6ed89988b476f1dc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74a0507f4eb468b842d1f644f0e43196cda290a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc664f07535e3b3c1884d0b7f3cbcbadf9adce25 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b13c115994461fb6bafe5dd06490aae020568c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da8aeec539da461b2961ca72049df84bf30473e1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a77eab2b5668cd65a3230f653f19ee00c34789bf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c73b239bd10ae2b3cff334ace7ca7ded44850cbd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 096027bc4870407945261eecfe81706e32b1bfcd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6f596d7f46cb13a3d87ff501c844c461c0a3b0a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41b9cea832ad5614df94c314d29d4b044aadce88 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f66e25c25cde2423917ee18c4704fff83b837d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3953d71374994a00c7ef756040d2c77090f07bb4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31cc0470115b2a0bab7c9d077902953a612bbba6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 881e3157d668d33655da29781efed843e4a6902a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33f2526ba04997569f4cf88ad263a3005220885e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11f0634803d43e6b9f248acd45f665bc1d3d2345 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c282315f0b533c3790494767d1da23aaa9d360b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dff4bdd4be62a00d3090647b5a92b51cea730a84 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77e47bc313e42f9636e37ec94f2e0b366b492836 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a6ca8c40433400f6bb3ece2ed30808316de5be3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5cd12a6bcace3c99d94bbcf341ad7d4351eaca0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b3ffcdda1114ad204c58bdf3457ac076ae9a0b0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6971a930644d56f10e68e818e5818aa5a5d2e646 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4106f183ad0875734ba2c697570f9fd272970804 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8690f8974b07f6be2db9c5248d92476a9bad51f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f6bf7948121357a85a8069771919fb13d2cecf9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a26349d8df88107bd59fd69c06114d3b213d0b27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 530ab00f28262f6be657b8ce7d4673131b2ff34a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11fd713f77bb0bc817ff3c17215fd7961c025d7e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6224c72b6792e114bc1f4b48b6eca482ee6d3b35 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7bbe6b01c82d9bcb3333b07bae0c9755eecdbbf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 926d45b5fe1b43970fedbaf846b70df6c76727ea ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ee33ac9b234c7501d97b4c2bf2e2035c5ec1fa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c706a217238fbe2073d2a3453c77d3dc17edcc9a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14b221bf98757ba61977c1021722eb2faec1d7cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e1fe7f6a83633207c9e743708c02c6e66173e7d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce21f63f7acba9b82cea22790c773e539a39c158 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e4239c4c3b106b436673e4f9cca43448f6f1af9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c49ba433b3ff5960925bd405950aae9306be378b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8fc6563219017354bdfbc1bf62ec3a43ad6febcb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1634dc48b39ecca11dc39fd8bbf9f1d8f1b7be6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89df64132ccd76568ade04b5cf4e68cb67f0c5c0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8591a094a768d73e6efb5a698f74d354c989291 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3d9b8df38dacfe563b1dd7abb9d61b664c21186 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1d2f4bc85da47b5863589a47b9246af0298f016 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92a481966870924604113c50645c032fa43ffb1d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ca25b9b090511fb61f9e3122a89b1e26d356618 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 914bbddfe5c02dc3cb23b4057f63359bc41a09ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f99fb4962c2777286a128adbb093d8f25ae9dc7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f08b7730438bde34ae55bc3793fa524047bb804 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9807dd48b73ec43b21aa018bdbf591af4a3cc5f9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce5dfe7f95ac35263e41017c8a3c3c40c4333de3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c2446f24bc6a91ca907cb51d0b4a690131222d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29aa1b83edf3254f8031cc58188d2da5a83aaf75 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8fd91020739a0d57f1df562a57bf3e50c04c05b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7be3486dc7f91069226919fea146ca1fec905657 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05e3b0e58487c8515846d80b9fffe63bdcce62e8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6e0a6cb5c70efd0899f620f83eeebcc464be05c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0857d33852b6b2f4d7bc470b4c97502c7f978180 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e79a3f8f6bc6594002a0747dd4595bc6b88a2b27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3265bd8beb017890699d093586126ff8af4a3fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f12b26b81a8e7667b2a26a7878e5bc033610ed5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80b038f8d8c7c67c148ebd7a5f7a0cb39541b761 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 190c04569bd2a29597065222cdcc322ec4f2b374 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 693b17122a6ee70b37cbac8603448aa4f139f282 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f773b4cedad84da3ab3f548a6293dca7a0ec2707 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f76463221cf1c69046b27c07afde4f0442b75d5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9db530e428f798cdf5f977e9b2dbad594296f05 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16223e5828ccc8812bd0464d41710c28379c57a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c1e984b212637fe108c0ddade166bc39f0dd2ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da43a47adb86c50a0f4e01c3c1ea1439cefd1ac2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 044977533b727ed68823b79965142077d63fe181 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ec27096fbe036a97ead869c7522262f63165e1e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d15bc65735852d3dce5ca6d779a90a50c5323b8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db0dfa07e34ed80bfe0ce389da946755ada13c5d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09d2ae5f1ca47e3aede940e15c28fc4c3ff1e9eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a644184b05e99a4809de378f21424ef6ced06e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f14a596a33feaad65f30020759e9f3481a9f1d9c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34cce402e23a21ba9c3fdf5cd7f27a85e65245c2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03126bfd6e97ddcfb6bd8d4a893d2d04939f197e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4f7d34f8752ab78949efcaa9f0bd938df33622 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5710466a728446d8169761d9d4c29b1cb752b00 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a6cb4aab975a35e9ca7f28c1814aa13203ab835 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14582df679a011e8c741eb5dcd8126f883e1bc71 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c22f1b05fee73dd212c470fecf29a0df9e25a18f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a14277eecf65ac216dd1b756acee8c23ecdf95d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2c1d194064e505fa266bd1878c231bb7da921ea ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 929f3e1e1b664ed8cdef90a40c96804edfd08d59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a96030d82fa379d24b952a58eed395143950c7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f48d08760552448a196fa400725cde7198e9c9b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cd6e82cfa3bdc3b5d75317431d58cc6efb710b1d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2cd130bed184fe761105d60edda6936f348edc6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d78e368f6877ec70b857ab9b7a3385bb5dca8d2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d851a6f3885ec24a963a206f77790977fd2e6c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28cbb953ce01b4eea7f096c28f84da1fbab26694 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 280e573beb90616fe9cb0128cec47b3aff69b86a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccff34d6834a038ef71f186001a34b15d0b73303 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc340779c5cd6efb6ac3c8d21141638970180f41 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d91ae75401b851b71fcc6f4dcf7eb29ed2a63369 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a91cf1217155ef457d92572530503d13b5984fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfae362363b28be9b86250eb7f6a32dac363c993 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddb828ecd0e28d346934fd1838a5f1c74363fba6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4459ca7fd21d549a2342a902cfdeba10c76a022 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 610d4c97485d2c0d4f65b87f2620a84e0df99341 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eae04bf7b0620a0ef950dd39af7f07f3c88fd15f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecd061b2e296a4f48fc9f545ece11c22156749e1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dd14b60b112a867a2217087b7827687102b11fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 454fedab8ea138057cc73aa545ecb2cf0dac5b4b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2eb6cf0855232da2b8f37785677d1f58c8e86817 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e482a20ab221cb6eca51f12f1bd29cda4eec484 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91b9bc4c5ecae9d5c2dff08842e23c32536d4377 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d4859e26cef6c9c79324cfc10126584c94b1585 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7f657fb20c063dfc2a653f050accc9c40d06a60 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66328d76a10ea53e4dfe9a9d609b44f30f734c9a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ee7e1a72aa2b9283223a8270a7aa9cb2cdb5ced ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f237620189a55d491b64cac4b5dc01b832cb3cbe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2af601d5800a39ab04e9fe6cf22ef7b917ab5d67 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a56136f9cb48a17ae15b59ae0f3f99d9303b1cb1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58998fb2dd6a1cad5faffdc36ae536ee6b04e3d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 62536252a438e025c16eebd842d95d9391e651d4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 076446c702fd85f54b5ee94bccacc3c43c040a45 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a358f2cfdc46a99db9e595d7368ecfecba52de0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95ff8274a0a0a723349416c60e593b79d16227dc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dbfd290609fe43ca7d94e06cea0d60333343838 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ef53c53012c450adb8d5d386c207a98b0feb579 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ef12ae4c158fa8ddb78a70dcf8f90966758db81 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90dc03da3ebe1daafd7f39d1255565b5c07757cb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 251128d41cdf39a49468ed5d997cc1640339ccbc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a67f25298c80aaeb3633342c36d6e00e91d7bd1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67648785d743c4fdfaa49769ba8159fcde1f10a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ce49598a25b48ad0ab38cc1101c5e2a42a918e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2b820f936132d460078b47e8de72031661f848c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5f034355962c5156f20b4de519aae18478b413a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b6cde8de6d40715cf445cf1a5d77cd9befbf4d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf8dc259fcc9c1397ea67cec3a6a4cb5816e3e68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79a36a54b8891839b455c2f39c5d7bc4331a4e03 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a99953c07d5befc3ca46c1c2d76e01ecef2a62c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dcfe2423fb93587685eb5f6af5e962bff7402dc5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8503a11eb470c82181a9bd12ccebf5b3443c3e40 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55c5f73de7132472e324a02134d4ad8f53bde141 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb43244026643e540a2fac35b2997c6aa0e139c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1c40f46bd547be663b4cd97a80704279708ea8a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 375e1e68304582224a29e4928e5c95af0d3ba2fa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b3e769989c4928cf49e335f9e7e6f9465a6bf99 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24d4926fd8479b8a298de84a2bcfdb94709ac619 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67260a382f3d4fb841fe4cb9c19cc6ca1ada26be ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7231486c883003c43aa20a0b80e5c2de1152d17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53373c8069425af5007fb0daac54f44f9aadb288 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6cf7a7bd864fe1fb64d7bea0c231c6254f171e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67291f0ab9b8aa24f7eb6032091c29106de818ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 559b90229c780663488788831bd06b92d469107f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4aa750a96baf96ac766fc874c8c3714ceb4717ee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 42e89cc7c7091bb1f7a29c1a4d986d70ee5854ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eb497ba1bbcaeb05a413a226fd78e54a29a3ff5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54709d9efd4624745ed0f67029ca30ee2ca87bc9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aec58a9d386d4199374139cd1fc466826ac3d2cf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3430bde60ae65b54c08ffa73de1f16643c7c3bfd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c352dba143e0b2d70e19268334242d088754229b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dca537f505e93248739478f17f836ae79e00783 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d678792d3154d5de04a5225079f2e0457b45b7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bd708d41090fbe00acb41246eb22fa8b5632967 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b56d6778ee678081e22c1897ede1314ff074122a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1aea3af6dcabfe4c6414578b22bfbb31a7e1840 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edb28b9b2c2bd699da0cdf5a4f3f0f0883ab33a2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc4e3cc8521f8315e98f38c5550d3f179933f340 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8cb31db6b3970d1e983f10b0e0b5eeda8348c7e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 086af072907946295f1a3870df30bfa5cf8bf7b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bbaf1c5c792d14867890200db68da9fd82d5997 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6420d2e3a914da1b4ae46c54b9eaa3c43d8fd060 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aba0494701292e916761076d6d9f8beafa44c421 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ee08fce6ec508fdc6e577e3e507b342d048fa16 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fad63e83853a65ee9aa98d47a64da3b71e4c01af ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b3c16c39953e7a6f55379403ca5d204dcbdb1e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92c7c8eba97254802593d80f16956be45b753fd1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- feed81ea1a332dc415ea9010c8b5204473a51bdf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52912b549289b9df7eeada50691139df6364e92d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bbcf2fc648561e4fc90ee4cc5525a3257604ec1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a962464c1504d716d4acee7770d8831cd3a84b48 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c121f60395ce47b2c0f9e26fbc5748b4bb27802d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 32da7feb496ef31c48b5cbe4e37a4c68ed1b7dd5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39335e6242c93d5ba75e7ab8d7926f5a49c119a3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c418df44fd6ac431e10b3c9001699f516f3aa183 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ef889531eed9ac73ece70318d4eeb45d81b9bc5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dd7aca043c197979e6b4b5ff951e2b62c320ef4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dffba51b4fd88f7d26a43cf6d1fbbe3cdb9f44d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6411bf1bf1ce403e8b38dbbdaf78ccdbe2b042dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c23ae3a48bb37ae7ebd6aacc8539fee090ca34bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8c31c6a6e9ffbfdbd292b8d687809b57644de27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ce2a4b235d2ebc38c3e081c1036e39bde9be036 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96402136e81bd18ed59be14773b08ed96c30c0f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c6ae79a7b38c7800c19e28a846cb2f227e52432 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46c4ec22d70251c487a1d43c69c455fc2baab4f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0788e0be3164acd65e3bc4b5bc1b51179b967ce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 830070d7ed09d6eaa4bcaa84ab46c06c8fff33d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e8412226ffe0c046177fa6d838362bfbde60cd0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72dddc7981c90a1e844898cf9d1703f5a7a55822 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3bd3c6b94c735c725f39959730de11c1cebe67a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 416daa0d11d6146e00131cf668998656186aef6a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dfa1685aac22a83ba1f60d1b2d52abf5a3d842f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ede752333a851ee6ad9ec2260a0fb3e4f3c1b0b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b197de0ccc0faf8b4b3da77a46750f39bf7acdb3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0181a40db75bb27277bec6e0802f09a45f84ffb3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12db6bbe3712042c10383082a4c40702b800a36a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 552a0aa094f9fd22faf136cdbc4829a367399dfe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88732b694068704cb151e0c4256a8e8d1adaff38 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f858c449a993124939e9082dcea796c5a13d0a74 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2ad9a239b1a06ee19b8edcd273cbfb9775b0a66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0e0b97b1d595b9b54d57e5bd4774e2a7b97696df ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fdc8ecbc0c1d8a4b76ec653602c5ab06a9659c98 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66306f1582754ca4527b76f09924820dc9c85875 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddffe26850e8175eb605f975be597afc3fca8a03 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 965ccefd8f42a877ce46cf883010fd3c941865d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdb4c7cb5b3dec9e4020aac864958dd16623de77 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d6e1731b6324eba5abc029b26586f966db9fa4f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1a82e45fc177cec8cffcfe3ff970560d272d0bf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82ae723c8c283970f75c0f4ce097ad4c9734b233 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f207e0e15ad243dd24eafce8b60ed2c77d6e725 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15b6bbac7bce15f6f7d72618f51877455f3e0ee5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8437c014b0a9872168b01790f5423e8e9255840 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d5df2ce3addd9e9e1863f4f33665a16b415b71 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c823d482d03caa8238b48714af4dec6d9e476520 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b06b13e61e8db81afdd666ac68f4a489cec87d5a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bbf02e0c648177b164560003cb51e50bc72b35cd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5149c807ec5f396c1114851ffbd0f88d65d4c84f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0c187229cea1eb3f395e7e71f636b97982205ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b93ba7ca6913ce7f29e118fd573f6ed95808912b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c3a6889b654892b3636212b880fa50df0358679 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9db2ff10e59b2657220d1804df19fcf946539385 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f21630bcf83c363916d858dd7b6cb1edc75e2d3b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4754fa194360b4648a26b93cdff60d7906eb7f7d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3910abfc2ab12a5d5a210b71c43b7a2318311323 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06914415434cf002f712a81712024fd90cea2862 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- caa0ea7a0893fe90ea043843d4e6ad407126d7b8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fac8d40f535ec8f3d1cf2187fbbe3418d82cf62 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- afcd64ebbb770908bd2a751279ff070dea5bb97c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc77e6b2862733a211c55cf29cc7a83c36c27919 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a25365fea0ea3b92ba96cc281facd308311def1e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aab7dc2c7771118064334ee475dff8a6bb176b57 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66c41eb3b2b4130c7b68802dd2078534d1f6bf7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08e0d5f107da2e354a182207d5732b0e48535b66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76ac61a2b4bb10c8434a7d6fc798b115b4b7934d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e4a4545dd513204efb6afe40e4b50c3b5f77e50 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bf8ce9464987c7b0dbe6acbc2cc2653e98ec739a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5962373da1444d841852970205bff77d5ca9377f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d5d143f72e4d588e3a0abb2ab82fa5a2c35e8aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93d530234a4f5533aa99c3b897bb56d375c2ae60 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1b8d0c92e4b5797b95948bdb95bec7756f5189f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec731f448d304dfe1f9269cc94de405aeb3a0665 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b29388a8f9cf3522e5f52b47572af7d8f61862a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff389af9374116c47e3dc4f8a5979784bf1babff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b4f92c8eea41f20b95f9e62a39b210400f4d2a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2efa1b19061ad6ed9d683ba98a88b18bff3bfd9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ca7c019a359c64a040e7f836d3b508d6a718e28 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4486bcbbf49ad0eacf2d8229fb0e7e3432f440d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70bb7e4026f33803bb3798927dbf8999910700d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b02662d4e870a34d2c6d97d4f702fcc1311e5177 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e12ef59c559e3be8fa4a65e17c9c764da535716e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0210e394e0776d0b7097bf666bebd690ed0c0e4f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3165753f9d0d69caabac74eee195887f3fea482 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8e914eb0dfe6a0eb2de66b6826af5f715aeed6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d248bb8362808121f6b6abfd316d83b65afa79 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c170c3e74b8ef90a2c7f47442eabce27411231 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e6827e98c2732863857c0887d5de4138a8ae48b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b1cfcc629e856b1384b811b8cf30b92a1e34fe1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52e28162710eb766ffcfa375ef350078af52c094 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85f38a1bbc8fc4b19ebf2a52a3640b59a5dcf9fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57d053792d1cde6f97526d28abfae4928a61e20f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 896830bda41ffc5998e61bedbb187addaf98e825 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83645971b8e134f45bded528e0e0786819203252 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bce7cc4a43e5843c9f4939db143a9d92bb45a18 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b84602026c1cc7b9d83ab618efb6b48503e97af ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6310480763cdf01d8816d0c261c0ed7b516d437a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6e23ed24b35c6154b4ee0da5ae51cd5688e5e67 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a596e1284c8a13784fd51b2832815fc2515b8d6a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d8269a04b2b03ebf53309399a8f0ea0a4822c11 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba7c2a0f81f83c358ae256963da86f907ca7f13c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53c15282a84e20ebe0a220ff1421ae29351a1bf3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b586fbb94d5acc6e06980a8a96f66771280beda ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eacf90dff73ab7578cec1ba0d82930ef3044663 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ea7e265d1549613c12cbe42a2e012527c1a97e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09c88bec0588522afb820ee0dc704a936484cc45 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aafde7d5a8046dc718843ca4b103fcb8a790332c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e355275c57812af0f4c795f229382afdda4bca86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74c7ed0e809d6f3d691d8251c70f9a5dab5fb18d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e5ef73d3d6d9b973a756fddd329cfa2a24884e2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f6c697c0df4704206d2fd1572640f7f2bd80c73 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 833ac6ec4c9f185fd40af7852b6878326f44a0b3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94ca83c6b6f49bb1244569030ce7989d4e01495c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a2f7dce43617b773a6be425ea155812396d3856 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3b9c0242ba2893231e0ab1c13fa2a0c8a9cfc59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a469af892b3e929cbe9d29e414b6fcd59bec246e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26253699f7425c4ee568170b89513fa49de2773c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be44602b633cfb49a472e192f235ba6de0055d38 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d6b417ea3a4507ea78714f0cb7add75b13032d5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86aa8738e0df54971e34f2e929484e0476c7f38a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4592785004ad1a4869d650dc35a1e9099245dad9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a521681ff8614beb8e2c566cf3c475baca22169 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a46f670ba62f9ec9167eb080ee8dce8d5ca44164 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0900c55a4b6f76e88da90874ba72df5a5fa2e88c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2253d39f3a5ffc4010c43771978e37084e642acc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdf1e68f6bec679edc3feb455596e18c387879c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6df78b19b7786b15c664a7a1e0bcbb3e7c80f8da ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f73468bb9cb9e479a0b81e3766623c32802db579 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4572ffd483bf69130f5680429d559e2810b7f0e9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8b025f719b2c3203e194580bbd0785a26c08ebd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b440827a04ad23efb891eff28d90f172723c75d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0de60abc5eb71eff14faa0169331327141a5e855 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48c149c16a9bb06591c2eb0be4cca729b7feac3e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a79cf677744e2c1721fa55f934fa07034bc54b0a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06b16115bee85d7dd12a51c7476b0655068a970c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6b1a9272455ef80f01a48ea22efc85b7f976503 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06c9c919707ba4116442ca53ac7cf035540981f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13d399f4460ecb17cecc59d7158a4159010b2ac5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dc2f7358be152d8e87849ad6606461fb2a4dfd0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d37049a815b11b594776d34be50e9c0ba8df497 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ba897b12024fd20681b7c2f1b40bdbbccd5df59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d84b960982b5bad0b3c78c4a680638824924004b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 361854d1782b8f59dc02aa37cfe285df66048ce6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f284a4e7c8861381b0139b76af4d5f970edb7400 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80cc71edc172b395db8f14beb7add9a61c4cc2b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae6e26ed4abac8b5e4e0a893da5546cd165d48e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b114f3bbe50f50477778a0a13cf99c0cfee1392a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6497d1e843cbaec2b86cd5a284bd95c693e55cc0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2528d11844a856838c0519e86fe08adc3feb5df1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e50a8e6156360e0727bedff32584735b85551c5b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df65f51de6ba67138a48185ff2e63077f7fe7ce6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 842fb6852781fd74fdbc7b2762084e39c0317067 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a01ec439e19df83a2ff17d198118bd5a31c488b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31fd955dfcc8176fd65f92fa859374387d3e0095 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41fd2c679310e3f7972bd0b60c453d8b622f4aea ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31ad0a0e2588819e791f4269a5d7d7e81a67f8cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 395955609dfd711cc4558e2b618450f3514b28c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f48ef3177bbee78940579d86d1db9bb30fb0798d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2b92c66bed6d1eea7b8aefe3405b0898fbb2019 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5095c16894e6f4da814302349e8e32f84c8c13 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1d2d0683afa6328b6015c6a3aa6a6912a055756 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 794187ffab92f85934bd7fd2a437e3a446273443 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657cd7e47571710246375433795ab60520e20434 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25c207592034d00b14fd9df644705f542842fa04 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0574b8b921dbfe1b39de68be7522b248b8404892 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e25da8ffc66fb215590a0545f6ad44a3fd06c918 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58934b8f939d93f170858a829c0a79657b3885e0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26bb778b34b93537cfbfd5c556d3810f2cf3f76e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1481af08064e10ce485339c6c0233acfc646572 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e98416791566f44a407dcac07a1e1f1b0483544 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd8537b23ce85be6f9dacb7806e791b7f902a206 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d4d70844417bf484ca917326393ca31ff0d22bc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44c6d0b368bc1ec6cd0a97b01678b38788c9bd9c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5c1cb715664fd7a98160844572cc473cb6b87c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51f4a1407ef12405e16f643f5f9d2002b4b52ab9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e866c4a9897572a550f8ec13b53f6665754050cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f11fdf1d9d22a198511b02f3ca90146cfa5deb5c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83ebc659ace06c0e0822183263b2c10fe376a43e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c70daba7a3d195d22ded363c9915b5433ce054 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf2335af23fb693549d6c4e72b65f97afddc5f64 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4ad7cee0f8723226446a993d4f1f3b98e42583a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df958981ad63edae6fceb69650c1fb9890c2b14f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4896fa2ccbd84553392e2a74af450d807e197783 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5db3d3c49ebe559cb80983d7bb855d4adf1b887 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 788bd7e55085cdb57bce1cabf1d68c172c53f935 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b827f8162f61285754202bec8494192bc229f75a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8ef023a5bab377764343c954bf453869def4807 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c6e5adab98a2ea4253fefc4f83598947f4993ee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e031a0ee8a6474154c780e31da2370a66d578cdc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 467416356a96148bcb01feb771f6ea20e5215727 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4006c4347788a078051dffd6b197bb0f19d50b86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cee0cec2d4a27bbc7af10b91a1ad39d735558798 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bde1038e19108ec90f899ce4aff7f31c1e387eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de894298780fd90c199ef9e3959a957a24084b14 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57550cce417340abcc25b20b83706788328f79bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ec4389bc3d1653af301e93fe0a6b25a31da9f3d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5e6676db845e10bdca47c3fcf8dca9dea75ec42 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572ebd6e92cca39100183db7bbeb6b724dde0211 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06571d7f6a260eda9ff7817764f608b731785d6b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 137ee6ef22c4e6480f95972ef220d1832cdc709a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ff3a3e72b1ff79e75777ccdddc86f8540ce833d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d79951fba0994654104128b1f83990387d44ac22 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 451504f1e1aa84fb3de77adb6c554b9eb4a7d0ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 434505f1b6f882978de17009854d054992b827cf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ed3cd7f798057c02799b6046987ed6a2e313126 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d9390866f9ce42870d3116094cd49e0019a970a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f128ae9a37036614c1b5d44e391ba070dd4326d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4cede2368aa980e30340f0ed0a1906d65fe1046c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 49a9f84461fa907da786e91e1a8c29d38cdb70eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1116ef7e1bcbbc71d0b654b63156b29bfbf9afab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07a8f73dca7ec7c2aeb6aa47aaf421d8d22423ad ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9405ac82af3a804dba1f9797bdb34815e1d7a18 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e61439b3018b0b9a8eb43e59d0d7cf32041e2fed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4b5ecc217154405ac0f6221af99a4ab18d067f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e02afbb7343a7a4e07e3dcf8b845ea2764d927c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 930d03fb077f531b3fbea1b4da26a96153165883 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ee291c469fc7ea6065ed22f344ed3f2792aa2ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df2fb548040c8313f4bb98870788604bc973fa18 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7f403b1e82d4ada20d0e747032c7382e2a6bf63 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 105a8c0fb3fe61b77956c8ebd3216738c78a3dff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc2ec79a88a787f586df8c40ed0fd6657dce31dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25a2ebfa684f7ef37a9298c5ded2fc5af190cb42 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0eafc47c307ff0bf589ce43b623bd24fad744fd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5c8ff218cb3ee5d3dd9119007ea8478626f6d2ce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1124e19afc1cca38fec794fdbb9c32f199217f78 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5739cd466f77a60425bd2860895799f7c9359d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27f394a58b7795303926cd2f7463fc7187e1cce4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 278423faeb843fcf324df85149eeb70c6094a3bc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17020d8ac806faf6ffa178587a97625589ba21eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9bebaca85a19e0ac8a776ee09981f0c826e1cafa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c572a8d95d8fa184eb58b15b7ff96d01ef1f9ec3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15ee5a505b43741cdb7c79f41ebfa3d881910a6c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d22c40b942cca16ff9e70d879b669c97599406b7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f4b410c955ea08bfb7842320afa568090242679 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a3c95b408162c78b9a4230bb4f7274a94d0add4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da86442f6a7bf1263fb5aafdaf904ed2f7db839f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4510b3c42b85305c95c1f39be2b9872be52c2e5e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 200d3c6cb436097eaee7c951a0c9921bfcb75c7f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b366d3fabd79e921e30b44448cb357a05730c42f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 618e6259ef03a4b25415bae31a7540ac5eb2e38a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec830a25d39d4eb842ae016095ba257428772294 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6891caf73735ea465c909de8dc13129cc98c47f7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0b21f454ea43a5f67bc4905c641d95f8b6d96fd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 902679c47c3d1238833ac9c9fdbc7c0ddbedf509 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa3f2fa76844e1700ba37723acf603428b20ef74 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a5cebaeda2c5062fb6c727f457ee3288f6046ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fde89f2a65c2503e5aaf44628e05079504e559a0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85e78ca3d9decf8807508b41dbe5335ffb6050a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5efdad2502098a2bd3af181931dc011501a13904 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f495e94028bfddc264727ffc464cd694ddd05ab8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35658887753da7da9a32a297346fd4ee6e53d45c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7548a5c43f8c39a8143cdfb9003838e586313078 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 515a6b9ccf87bd1d3f5f2edd229d442706705df5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29eb301700c41f0af7d57d923ad069cbdf636381 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08a0fad2c9dcdfe0bbc980b8cd260b4be5582381 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2219f13eb6e18bdd498b709e074ff9c7e8cb3511 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55969cb6034d5b416946cdb8aaf7223b1c3cbea6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04ff96ddd0215881f72cc532adc6ff044e77ea3e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45f8f20bdf1447fbfebd19a07412d337626ed6b0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46201b346fec29f9cb740728a3c20266094d58b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 543d900e68883740acf3b07026b262176191ab60 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9a7dc5fe98e1aa666445bc240055b21ed809824 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 783ad99b92faa68c5cc2550c489ceb143a93e54f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78f3f38d18fc88fd639af8a6c1ef757d2ffe51d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6581acaa7081d29dbf9f35c5ce78db78cf822ab8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b40d4b54e09a546dd9514b63c0cb141c64d80384 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b343718cc1290c8d5fd5b1217724b077153262a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5077fc7e4031e53f730676df4d8df5165b1d36cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88716d3be8d9393fcf5695dd23efb9c252d1b09e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8486f2d2e5c251d0fa891235a692fa8b1a440a89 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7bbaac26906863b9a09158346218457befb2821a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e836e5cdcc7e3148c388fe8c4a1bab7eeb00cc3f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25844b80c56890abc79423a7a727a129b2b9db85 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1537aabfa3bb32199e321766793c87864f36ee9a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9989f8965f34af5009361ec58f80bbf3ca75b465 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa70623a651d2a0b227202cad1e526e3eeebfa00 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb20477629bf83e66edc721725effa022a4d6170 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f91ab7bb0dadfd165031f846ae92c9466dceb66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0be02e1471c99e5e5e4bd52db1019006d26c349 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ec2f8a4f26cec3fbbe1fb447058acaf508b39c0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff0365e053a6fa51a7f4e266c290c5e5bd309f6a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4ace5482efa4ca8769895dc9506d8eccfb0173d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bed46300fe5dcb376d43da56bbcd448d73bb2ea0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 082851e0afd3a58790fe3c2434f6d070f97c69c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df3dd9797c8afda79dfa99d90aadee6b0d7a093 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ba48ce5758fb2cd34db491845f3b9fdaefe3797 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79fdaf349fa8ad3524f67f1ef86c38ecfc317585 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f4b1618fbf3b9b1ecaa9812efe8ee822c9579b8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51bf7cbe8216d9a1da723c59b6feece0b1a34589 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29724818764af6b4d30e845d9280947584078aed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5089d9d6c303b47936a741b7bdf37293ec3a1c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79c99c0f66c8f3c8d13258376c82125a23b1b5c8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ef273914de9b8a50dd0dd5308e66de85eb7d44a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1210ec763e1935b95a3a909c61998fbd251b7575 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce87a2bec5d9920784a255f11687f58bb5002c4c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3f24f64a20d1e09917288f67fd21969f4444acd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1faf84f8eb760b003ad2be81432443bf443b82e6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eafe201905d85be767c24106eb1ab12efd3ee22 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6a6a109885856aeff374c058db0f92c95606a0b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7842e92ebaf3fc3380cc8d704afa3841f333748c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98889c3ec73bf929cdcb44b92653e429b4955652 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0235f910916b49a38aaf1fcbaa6cfbef32c567a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27a041e26f1ec2e24e86ba8ea4d86f083574c659 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ece57af3b69c38f4dcd19e8ccdd07ec38f899b23 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d66f2b53af0d8194ee952d90f4dc171aa426c545 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5077dac4c7680c925f4c5e792eeb3c296a3b4c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d255f4c8fd905d1cd12bd42b542953d54ac8a8c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7a2d43495eb184b162f8284c157288abd36666a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06ea4a0b0d6fcb20a106f9367f446b13df934533 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39164b038409cb66960524e19f60e83d68790325 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4492c7965cd8e3c5faaf28b2a6414b04984720b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec35edc0150b72a7187f4d4de121031ad73c2050 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33940022821ec5e1c1766eb60ffd80013cb12771 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 123302cee773bc2f222526e036a57ba71d8cafa9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7228ca9bf651d9f06395419752139817511aabe1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 187fe114585be2d367a81997509b40e62fdbc18e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a8f96cc8a5135a0ece19e600da914dabca7d215 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 903826a50d401d8829912e4bcd8412b8cdadac02 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db44286366a09f1f65986db2a1c8b470fb417068 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73ab28744df3fc292a71c3099ff1f3a20471f188 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00452efe6c748d0e39444dd16d9eb2ed7cc4e64a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8d6fb2898ba465bc1ade60066851134a656a76c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bebc4f56f4e9a0bd3e88fcca3d40ece090252e82 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89ade7bfff534ae799d7dd693b206931d5ed3d4f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb577c8a1eca8958415b76cde54d454618ac431e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2376bd397f084902196a929171c7f7869529bffc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e73c80dd2dd1c82410fb1ee0e44eca6a73d9f052 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 895f0bc75ff96ce4d6f704a4145a4debc0d2da58 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bcc4d55baef64825b4163c6fb8526a2744b4a86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5320a6f68ddec847fa7743ff979df8325552ffd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25c95ace1d0b55641b75030568eefbccd245a6e3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a15afe217c7c35d9b71b00c8668ae39823d33247 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eedf3c133a9137723f98df5cd407265c24cc2704 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4937fcd0dad3be003b97926e3377b0565237c5b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05c468eaec0be6ed5a1beae9d70f51655dfba770 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc505ddd603b1570c2c1acc224698e1421ca8a6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b22a5e944b2f00dd8e9e6f0c8c690ef2d6204886 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9149c34a8b99052b4e92289c035a3c2d04fb8246 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c9497463b130cce1de1b5d0b6faada330ecdc96 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c673ff2d267b927d2f70765da4dc3543323cc7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 819c4ed8b443baee06472680f8d36022cb9c3240 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c883d129066f0aa11d806f123ef0ef1321262367 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2807d494db24d4d113da88a46992a056942bd828 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d0d6c9824bdd5f2cd5f6886991bb5eadca5120d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26b0f3848f06323fdf951da001a03922aa818ac8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d47fc1b67836f911592c8eb1253f3ab70d2d533d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d04aeaa17e628f13d1a590a32ae96bc7d35775b5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcb6e8832a94776d670095935a7da579a111c028 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f77f9775277a100c7809698c75cb0855b07b884d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08938d6cee0dc4b45744702e7d0e7f74f2713807 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 19099f9ce7e8d6cb1f5cafae318859be8c082ca2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2c8c7f86e6a61307311ea6036dac4f89b64b500 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 504870e633eeb5fc1bd7c33b8dde0eb62a5b2d12 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fbc182e6d4636f67f44e5893dee3dcedfa90e04 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bbf1a3b801fb4e00c10f631faa87114dcd0462f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3c89a5e020bb4747fd9470ba9a82a54c33bb5fa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d7a40f603412be7e1046b500057b08558d9d250 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1445b59bb41c4b1a94b7cb0ec6864c98de63814b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4adafc5a99947301ca0ce40511991d6d54c57a41 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8da7852780a62d52c3d5012b89a4b15ecf989881 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2090b5487e69688be61cfbb97c346c452ab45ba2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76e19e4221684f24ef881415ec6ccb6bab6eb8e8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3297fe50067da728eb6f3f47764efb223e0d6ea4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f1b69ad52670a67e8b766e89451080219871739 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cdf7c5aca2201cf9dfc3cd301264da4ea352b737 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccb653d655a7bf150049df079622f67fbfd83a28 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 722473e86e64405ac5eb9cb43133f8953d6c65d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6964e3efc4ac779d458733a05c9d71be2194b2ba ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55d40df99085036ed265fbc6d24d90fbb1a24f95 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20a338ff049e7febe97411a6dc418a02ec11eefa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e61e3200d5c9c185a7ab70b2836178ae8d998c17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28afef550371cd506db2045cbdd89d895bec5091 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e77128e5344ce7d84302facc08d17c3151037ec3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 978eb5bd4751acf9d53c8b6626dc3f7832a20ccf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f533a68cb5295f912da05e061a0b9bca05b3f0c8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfaf706d70c3c113b40ce1cbc4d11d73c7500d73 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bdaa463f7c73d30d75d7ea954dd3c5c0c31617b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9debf6b0aafb6f7781ea9d1383c86939a1aacde3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f6713669a8a32af90a73d03a7fa24e6154327f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5b8220a1a967abdf2bae2124e3e22a9eea3729f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4c6851c55757fb0bc9d77da97d7db9e7ae232d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1875885485e7c78d34fd56b8db69d8b3f0df830c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dabd563ed3d9dc02e01fbf3dd301c94c33d6d273 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5324565457e38c48b8a9f169b8ab94627dc6c979 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af74966685e1d1f18390a783f6b8d26b3b1c26d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c877794b51f43b5fb2338bda478228883288bcdd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c042f56fc801235b202ae43489787a6d479cd277 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bb927dc12fae61141f1cc7fe4a94e0d68cb4232 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6271586d7ef494dd5baeff94abebbab97d45482b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2971489fec32160836519e66ca6b97987c33d0c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e328ffddec722be3fba2c9b637378e31e623d58e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07b124c118942bc1eec3a21601ee38de40a2ba0e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ceae5e9f6bf753163f81af02640e5a479d2a55c0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a91a659a3a7d8a099433d02697777221c5b9d16f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25f27c86af9901f0135eac20a37573469a9c26ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b533f86cf86c96a16f96c815533bdda0585f48 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f4d5ce5f9459e4c7fe4fab95df1a1e4c9be61ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d97a8bb75098ad643d1a8853fe1b59cbb8e2338c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aae2a7328a4d28077a4b4182b4f36f19c953765b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e9481b4ddd70cf44ad041fba771ca5c02b84cf7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5982ff789e731c1cbd9b05d1c6826adf0cd8080b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5de21c7fa2bdd5cd50c4f62ba848af54589167d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f4af7c6db25c5bbec7fdc8dfc0ea6803350d94c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1815563ec44868121ae7fa0f09e3f23cacbb2700 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83156b950bb76042198950f2339cb940f1170ee2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcca77ad97d1dfb657e88519ce8772c5cd189743 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ad3931357e5bb01941b50482b4b53934c0b715e3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ae1f213e1b99638ba685f58d489c0afa90a3991 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 121f6af3a75e4f48acf31b1af2386cdd5bf91e00 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc9278fb4432f0244f4d780621d5c1b57a03b720 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41556dac4ca83477620305273a166e7d5d9f7199 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55db0fcce5ec5a92d2bdba8702bdfee9a8bca93d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbc07b421172da4ef3153753709271a71af6966a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2f6fef3c887719a250c78c22cba723b2200df1b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84869674124aa5da988188675c1336697c5bcf81 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8775f9b8e40b18352399445dba99dd1d805e8c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b10d5e75570ac6325d1c7e2b32882112330359a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b145de39700001d91662404221609b86d2c659d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b854878fb9df8d1a06c4e97bff5e164957b3a0d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3fe8f5df5794015014c53e3adbf53acdb632a8a0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7b609c9f382685448193b59d09329b9a30c7580 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b295c13140f48e6a7125b4e4baf0a0ca03e1e393 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05a302c962afbe5b54e207f557f0d3f77d040dc8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f1110bd9b00cb8c1ea07c3aafe9cde89b3dbf9b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0de827a0e63850517aa93c576c25a37104954dba ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d82a6c5ed9108be5802a03c38f728a07da57438e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1a59764096cef4048507cb50f0303f48b87a242 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0900a51f986f3ed736d9556b3296d37933018196 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a8700185dce5052ca1581b63432fb4d4839c226 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a929ab29016e91d661274fc3363468eb4a19b4b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13141e733347cea5b409aa54475d281acd1c9a3c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ed8939d6167571fc2b141d34f26694a79902fde2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbbcaf7a355e925911fa77e204dd2c38ee633c0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb5e177e5d7931e30b198b06b21809ef6a78b92 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d06e76bb243dda3843cfaefe7adc362aab2b7215 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec401e4807165485a4b7a2dad4f74e373ced35ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4faf5cd43dcd0b3eea0a3e71077c21f4d029eb99 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e58e6a0d78f5298252b2d6c4b0431427ec6d152 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc8032d35a23bcc105f50b1df69a1da6fe291b90 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cc0e6caa3117f694d367d3f3b80db1e365aac94 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51f79ffeb829315c33ce273ae69baf0fdd1fbd1e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2cc8f1e3c6627f0b4da7cb6550f7252f76529d8e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e1c90eb69e2dfd5fdf8418caa695112bd285f21 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84fcf8e90fd41f93d77dd00bf1bc2ffc647340f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cd4caf15a2e977fc0f010c1532090d942421979c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 074842accb51b2a0c2c1193018d9f374ac5e948f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f8d9ca08352a28cba3b01e4340a24edc33e13e8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8590424997ab1d578c777fe44bf7e4173036f93 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6eb3af27464ffba83e3478b0a0c8b1f9ff190889 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d768f67bd49f28fd2e626f3a8c12bd28ae5ce48 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8b837923d506e265ff8bb79af61c0d86e7d5b2e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec15e53439d228ec64cb260e02aeae5cc05c5b2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8f7e3772f68c8e6350b9ff5ac981ba3223f2d43 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 332521ac1d94f743b06273e6a8daf91ce93aed7d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 039e265819cc6e5241907f1be30d2510bfa5ca6c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8324c4b38cf37af416833d36696577d8d35dce7f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0acb2229e1ebb59ab343e266fc5c1cc392a974e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c58887a2d8554d171a7c76b03bfa919c72e918e1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2e4134963c971e3259137b84237d6c47964b018 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b307f04218e87b814fb57bd9882374a9f2b52922 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ab12b403207bb46199f46d5aaa72d3e82a3080d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c96f5885e1ec1e24b0f8442610de42bd8e168d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb6beb75aaa269a1e7751d389c0826646878e5fc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11b3a1dfc2eb03094c4c437162ce504722fa7ddf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58c5b993d218c0ebc3f610c2e55a14b194862e1c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1883eb9282468b3487d24f143b219b7979d86223 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fdb6a5eac7433098cfbb33d3e18d6dbba8fa3d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f360ecd7b2de173106c08238ec60db38ec03ee9b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65c07d64a7b1dc85c41083c60a8082b3705154c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1d33021feb7324e0f2f91c947468bf282f036d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c8a33e2c9cae8deef1770a5fce85acb2e85b5c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c272abea2c837e4725c37f5c0467f83f3700cd5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af44258fa472a14ff25b4715f1ab934d177bf1fa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b21e2f1c0fdef32e7c6329e2bc1b4ce2a7041a2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdc38b83f4a6d39603dc845755df49065a19d029 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58c78e649cbac271dee187b055335c876fcb1937 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3438795d2af6d9639d1d6e9182ad916e73dd0c37 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3d33c113b1dfa4be7e3c9924fae029c178505c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3068025b64bee24efc1063aba5138708737c158 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ee9751d4e9e9526dbe810b280a4b95a43105ec9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3e78d98e06439eea1036957796f8df9f386930f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 141b78f42c7a3c1da1e5d605af3fc56aceb921ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5e4334f38dce4cf02db5f11a6e5844f3a7c785c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9aaaa83c44d5d23565e982a705d483c656e6c157 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bbf04348b0c79be2103fd3aaa746685578eb12fd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1578baf817c2526d29276067d2f23d28b6fab2b1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9db24bc7a617cf93321bb60de6af2a20efd6afc1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80d43111b6bb73008683ad2f5a7c6abbab3c74ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86ec7573a87cd8136d7d497b99594f29e17406d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 02cb16916851336fcf2778d66a6d54ee15d086d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5a9bbef0d2d8fc5877dab55879464a13955a341 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 369e564174bfdd592d64a027bebc3f3f41ee8f11 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36dbe7e9b55a09c68ba179bcf2c3d3e1b7898ef3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d0f693184884ffac97908397b074e208c63742b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 040108747e2f868c61f870799a78850b792ddd0a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 300831066507bf8b729a36a074b5c8dbc739128f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bea9077e8356b103289ba481a48d27e92c63ae7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0f47b3076a84c5c32cccc95748f18c50e3d948 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 195ecc3da4a851734a853af6d739c21b44e0d7f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85a45a691ad068a4a25566cc1ed26db09d46daa4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2efb814d0c3720f018f01329e43d9afa11ddf54 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfc70fe92d42a853d4171943bde90d86061e3f3a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8724dfa6bf8f6de9c36d10b9b52ab8a1ea30c3b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 640d1506e7f259d675976e7fffcbc854d41d4246 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1a9a232fbde88a347935804721ec7cd08de6f65 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a771adc5352dd3876dd2ef3d0c52c8e803fc084 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 643e6369553759407ca433ed51a5a06b47e763d4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa0ccead680443b07fd675f8b906758907bdb415 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 982eefb2008826604d54c1a6622c12240efb0961 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1d5c614c38db015485190d65db05b0b75d171d4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 152a60f0bd7c5b495a3ce91d0e45393879ec0477 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14851034ab5204ddb7329eb34bb0964d3f206f2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e15b57bf0bb40ccc6ecbebc5b008f7e96b436f19 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c696b3cf0c2441aefaef3592e2b815472f162a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 32e4e08cf9ccfa90f0bc6d26f0c7007aeafcffeb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 539980d51c159cb9922d0631a2994835b4243808 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a771e102ec2238a60277e2dce68283833060fd37 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22d2e4a0bfd4c2b83e718ead7f198234e3064929 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1199f90c523f170c377bf7a5ca04c2ccaab67e08 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bafb4cc0a95428cbedaaa225abdceecee7533fac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8e700e952d135c6903b97f022211809338232e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e79604c8bdfc367f10a4a522c9bf548bdb3ab9a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83017bce083c58f9a6fb0c7b13db8eeec6859493 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1143e1c66b8b054a2fefca2a23b1f499522ddb76 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5385cbd969cc8727777d503a513ccee8372cd506 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c594195eb614a200e1abb85706ec7b8b7c91268 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9563d27fbde02b8b2a8b0d808759cb235b4e083b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3470e269bcdc9091d0c5e25e7c09ce175c7cee77 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96928d2eb3d98c475fd0737240c06bf8e5f96ad6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 545ac2574cfb75b02e407e814e10f76bc485926d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9a2ea80aa9970bbd625da4c986d29a36c405629 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8bf7d416f60f52335d128cf16fbba0344702e49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e39c8b07d1c98ddf267fbc69649ecbbe043de0fd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a08733d76a8254a20a28f4c3875a173dcf0ad129 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cc1e7e08094494916db1aadda17e03ce695d049 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fe80b03196b1d2421109fad5b456ba7ae4393e2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1cedc5c417ddf3c2a955514dcca6fe74913259b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c2dd54358dd526d1d08a8e4a977f041aff74174 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158bc981130bfbe214190cac19da228d1f321fe1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c6d952b17e63c92a060c08eac38165c6fafa869 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f233e2405c16e2b185aa90cc8e7ad257307b991 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bccdb483aaa7235b85a49f2c208ee1befd2706dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9f8f159ebad405b2c08aa75f735146bb8e216ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f51fe3e66d358e997f4af4e91a894a635f7cb601 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e129846a1a5344c8d7c0abe5ec52136c3a581cce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abd23a37d8b93721c0e58e8c133cef26ed5ba1f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 723f100a422577235e06dc024a73285710770fca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28d6c90782926412ba76838e7a81e60b41083290 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae334e4d145f6787fd08e346a925bbc09e870341 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b89b089972b5bac824ac3de67b8a02097e7e95d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98f6995bdcbd10ea0387d0c55cb6351b81a857fd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae0b6fe15e0b89de004d4db40c4ce35e5e2d4536 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9dc8fffd179b3d7ad7c46ff2e6875cc8075fabf3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b0448b65317b2830270ff4156a25aca7941472 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d83f44007c5c581eae7ddc6c5de33311b7c1895 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f043d8a1d7f4076350ff0c778bfa60f7aa2f7aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8bbfea4cdcb36ce0e9ee7d7cad4c41096d4d54f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe426d404b727d0567f21871f61cc6dc881e8bf0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 873823f39275ceb8d65ebfae74206c7347e07123 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f662857381a0384bd03d72d6132e0b23f52deef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9e7a3d93da741f81a5af2e84422376c54f1f337 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab7c3223076306ca71f692ed5979199863cf45a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91562247e0d11d28b4bc6d85ba50b7af2bd7224b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 756b7ad43d0ad18858075f90ce5eaec2896d439c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fd07a0a7a6300db1db8b300a3f567b31b335570 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91645aa87e79e54a56efb8686eb4ab6c8ba67087 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7729245060f9aecfef4544f91e2656aa8d483ec ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54e27f7bbb412408bbf0d2735b07d57193869ea6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47d9f1321c3a6da68a7909fcb1a66a209066d4c9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c27cd907f67f984649ff459dacf3ba105e90ebc2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f498de9bfd67bcbb42d36dfb8ff9e59ec788825b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be81304f2f8aa4a611ba9c46fbb351870aa0ce29 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c2502ee83927437442b13b83f3a7976e4146a01 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4df4159413a4bf30a891f21cd69202e8746c8fea ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88f3dc2eb94e9e5ff8567be837baf0b90b354f35 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21a6cb7336b61f904198f1d48526dcbe9cba6eec ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d91ca75500285d19c6ae2d4bf018452ad822a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5e607e8aa62ca3778f1026c27a927ee5c79749b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50f763cfe38a1d69a3a04e41a36741545885f1d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ffefb154982c6cc47c9be6b3eae6fb1170bb0791 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 630d030058c234e50d87196b624adc2049834472 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66c5b33fb5405fe12756f07048e3bcc3a958b2c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d1a489931ecbdd652111669c0bd86bcd6f5abbe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ddbe4bc24e634e6496abd3bc6ce3c4377cdf2fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3236f8b966061b23ba063f3f7e1652764fee968f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ad07f7b23e762e3eb99ce45020375d2bd743fc5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0acb8371bb2b68c2bda04db7cb2746ba3f9da86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ce3fe7cef8910aadc2a2b39a3dab4242a751380 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1410bcc76725b50be794b385006dedd96bebf0fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfcdf2bef08f17b4726b67f06c84be3bfe2c39b8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f038611ff120f8283f0f1a56962f95b66730c72 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06bec1bcd1795192f4a4a274096f053afc8f80ec ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2feb62c17acd1dddb6cd125d8b90933c32f89e1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c00567d3025016550d55a7abaf94cbb82a5c44fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98a17a28a21fe5f06dd2da561839fdbaa1912c64 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b54b9399920375f0bab14ff8495c0ea3f5fa1c33 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38fc944390d57399d393dc34b4d1c5c81241fb87 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2a9b2f22c6fb5bd3e30e674874dbc8aa7e5b00ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d565a874f29701531ce1fc0779592838040d3edf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d74543a545a9468cabec5d20519db025952efed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34c0831453355e09222ccc6665782d7070f5ddab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4d3809161fc54d6913c0c2c7f6a7b51eebe223f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 346424daaaf2bb3936b5f4c2891101763dc2bdc0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 261aedd2e13308755894405c7a76b72373dab879 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e48e52001d5abad7b28a4ecadde63c78c3946339 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f5320e8171324a002d3769824152cf5166a21a2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1287f69b42fa7d6b9d65abfef80899b22edfef55 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c6c81b3281333a5a1152f667c187c9dce12944 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ac93b1d7e0694ceb303ee72c312921a9b1588f4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47ac37be2e0e14e958ad24dc8cba1fa4b7f78700 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ed61f72c611deb07e0368cebdc9f06da32150cd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb0f3d78d6980a1d43f05cb17a8da57a196a34f3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe2fbc5913258ef8379852c6d45fcf226b09900b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4921139819c7949abaad6cc5679232a0fbb0632 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34802014ca0c9546e73292260aab5e4017ffcd9a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80701fc6f4bf74d3c6176d76563894ff0f3b32bb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a9a5414300a245b6e93ea4f39fbca792c3ec753f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9fbae711b76a4f2fa9345f43da6d2cdedd75d6c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26fc5866f6ed994f3b9d859a3255b10d04ee653d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea29541e213df928d356b3c12d4d074001395d3c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 508807e59ce9d6c3574d314d502e82238e3e606c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e395ac90bf088ad6b5de7dadb6531a6e7f3f4f3f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b259098782c2248f6160d2b36d42672d6925023a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 048ffa58468521c043de567f620003457b8b3dbe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27c31e2fde54c0587c032ccffdaa7c4ddf5b2ae5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df95149198744c258ed6856044ac5e79e6b81404 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a41a8b93167a59cd074eb3175490cd61c45b6f6a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5054fdb1766cb035a1186c3cef4a14472fee98d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6569c4849197c9475d85d05205c55e9ef28950c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aaa84341f876927b545abdc674c811d60af00561 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53e5fb3733e491925a01e9da6243e93c2e4214c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20863cfe4a1b0c5bea18677470a969073570e41c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa1b156ee96f5aabdca153c152ec6e3215fdf16f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a223c7b7730c53c3fa1e4c019bd3daefbb8fd74b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619c989915b568e4737951fafcbae14cd06d6ea6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4ce247c0380e3806e47b5b3e2b66c29c3ab2680 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be074c655ad53927541fc6443eed8b0c2550e415 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c15a6e1923a14bc760851913858a3942a4193cdb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e973e6f829de5dd1c09d0db39d232230e7eb01d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2b59625e9bde14b1d2d476e678326886ab1552 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d39529eea4d0ecfcd65a2d245284174cd2e0aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7b16ade191bb753ebadb45efe6be7386f67351d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8eae18dcc360e6ab96c2291982bd4306adc01b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67680a0877f01177dc827beb49c83a9174cdb736 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7671110bc865786ffe61cf9b92bf43c03759229 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 503b62bd76ee742bd18a1803dac76266fa8901bc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ede325d15ba9cba0e7fe9ee693085fd5db966629 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43e430d7fa5298f6db6b1649c1a77c208bacf2fc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfb0a9c4bca590efaa86f8edc3fdb62bd536bce7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acd82464a11f3c2d3edc1d152d028a142da31a9f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e84300df7deed9abf248f79526a5b41fd2f7f76e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 597bc56a32e1b709eefa4e573f11387d04629f0d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- becf5efbfc4aee2677e29e1c8cbd756571cb649d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e8aa9b0aefc30ee5807c2b2cf433a38555b7e0b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c6ab4f7572fd5ca8638f3cb6e342d5000955e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfce49feb0be6c69f7fffc57ebdd22b6da241278 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b825dc74773ffa5c7a45b48d72616b222ad2023e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0cb95c5df7a559633c48f5b0f200599c4a62091 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c767b5206f1e9c8536110dda4d515ebb9242bbeb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85a5a8c6a931f8b3a220ed61750d1f9758d0810a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18caa610d50b92331485013584f5373804dd0416 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d9f1495004710b77767393a29f33df76d7b0fb5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17f5d13a7a741dcbb2a30e147bdafe929cff4697 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1531d789df97dbf1ed3f5b0340bbf39918d9fe48 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d52f98935b70cda4eede4d52cdad4e3b886f639 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 723d20f1156530b122e9785f5efc6ebf2b838fe0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b08651e5ae2bffef5e4fb44fbdd7d467715e3b73 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc94b89dabd9df49631cbf6b18800325f3521864 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e40ad6369bc74d01af4dc41d3a9b8e25ac2aa01e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46889d1dce4506813206a8004f6c3e514f22b679 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de4cfcc4a1fcb24b72a31c5feff8c67d2ff930fc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 987f9bbd08446de3f9d135659f2e36ad6c9d14fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27b4efed7a435153f18598796473b3fba06c513d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7b7eb6245e7d7c4535975268a9be936e2c59dc8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7887c66483ffa9a839ecf1a53c5ef718dcd1d2d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36cdfd3209909163549850709d7f12fdf1316434 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4a49ff2dddc66bbe25af554caba2351fbf21702 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45eb728554953fafcee2aab0f76ca65e005326b0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6ee00d0dadcd7b10d60a2985db4fe137ca7cfed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d83f6e84cbeb45dce4576a9a4591446afefa50b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a6ffa13ae2951a168cde5908c7a94b16562b96 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73790919dbe038285a3612a191c377bc27ae6170 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4b8e467e44bc1ca1ebf481ac2dfc1baaf9688dc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 763ef75d12f0ad6e4b79a7df304c7b5f1b5a11f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6ed8d46c72366e111b9a97a7c238ef4af3bf4dc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3efacd7aea48c93e0a42c1e83bf3c96e9e50f178 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c86bea60dde4016dd850916aa2e0db5260e1ff61 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d4b4ea9c84198a9b6003611a3af00ee677d09a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d437078d8f95cb98f905162b2b06d04545806c59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 491440543571b07c849c0ef9c4ebf5c27f263bc0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dec7a822424bbe58b7b2a7787b1ea32683a9c19 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fce04b7e4e6e1377aa7f07da985bb68671d36ba4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28bda3aaa19955d1c172bd86d62478bee024bf7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6e4a6416162a698d87ba15693f2e7434beac644 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fd7b945dfca73caf00883d4cf43740edb7516df ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1bfb44c62d15a45ca4d47b4cc482ebddb8d0ae4f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a182be6716d24fb49cb4517898b67ffcdfb5bca4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b18fd3fd13d0a1de0c3067292796e011f0f01a05 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d0ad081ca0e723ba2a12c876b4cd1574485c726 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c824bcd73de8a7035f7e55ab3375ee0b6ab28c46 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5c12ff49fc91e66f30c5dc878f5d764d08479558 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56e942318f3c493c8dcd4759f806034331ebeda5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d46e3fe9cb0dea2617cd9231d29bf6919b0f1e91 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 68f8a43d1b643318732f30ee1cd75e1d315a4537 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3936084cdd336ce7db7d693950e345eeceab93a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ef4552404ba3bc92554a6c57793ee889523e3a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8cf69b6f8bd73525b5375bd73f1fc79ae322a82 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1de8af907dbced4fde64ee2c7f57527fc43ad1cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1527b5734c0f2821fd6f38c1a1d70723a4bb88ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f55c17f48d7608072199496fbcefa33f2e97bf0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0c65d6638698f4e3a9e726efca8c0bcf466cd62 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b9d3b961bdf79964b883d3179f085d8835e528d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 02e942b7c603163c87509195d76b2117c4997119 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c80d727e374321573bb00e23876a67c77ff466e3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 725bde98d5cf680a087b6cb47a11dc469cfe956c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 965a08c3f9f2fbd62691d533425c699c943cb865 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95bb489a50f6c254f49ba4562d423dbf2201554f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acac4bb07af3f168e10eee392a74a06e124d1cdd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4cfc682ff87d3629b31e0196004d1954810b206c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c255c14e9eb15f4ff29a4baead3ed31a9943e04e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f219b53f339fc0133800fac96deaf75eb4f9bf6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79d9c4cb175792e80950fdd363a43944fb16a441 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a05e49d2419d65c59c65adf5cd8c05f276550e1d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4228b2cc8e1c9bd080fe48db98a46c21305e1464 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 60e54133aa1105a1270f0a42e74813f75cd2dc46 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8535d1a2485b4e063ab9ef0a2719a1aab8187d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a83eee5bcee64eeb000dd413ab55aa98dcc8c7f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3e8ce69bec72277354eff252064a59f515d718a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5a37564b6eec05b98c2efa5edcd1460a2df02aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17f245cad19bf77a5a5fecdee6a41217cc128a73 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45c1c99a22e95d730d3096c339d97181d314d6ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db828cdfef651dd25867382d9dc5ac4c4f7f1de3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7297ff651c3cc6abf648b3fe730c2b5b1f3edbd3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2840c626d2eb712055ccb5dcbad25d040f17ce1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a67e4e49c4e7b82e416067df69c72656213e886 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 342a0276dbf11366ae91ce28dcceddc332c97eaf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31b3673bdb9d8fb7feea8ae887be455c4a880f76 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863a40e0d35f3ff3c3e4b5dc9ff1272e1b1783b1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1060a2a8c90c0730c3541811df8f906dac510a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de9a6bb0c8931e7f74ea35edb372e5ca7d0a5047 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a308613467a1510f8dac514624abae4e10c0779 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6becbaf35fa2f807837284d33649ba5376b3fe21 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d0556a31916a709e9da3eafb92fc6b8bf69896c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9d884511ed2c8e9ca96de04df835aaa6eb973eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45eb6bd22554e5dad2417d185d39fe665b7a7419 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04357d0d46fee938a618b64daed1716606e05ca5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e1e19d33e1caa107dc0a6cc8c1bfe24d8153f51 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc8c91200a7fb2140aadd283c66b5ab82f9ad61e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 891b124f5cc6bfd242b217759f362878b596f6e2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f879c71bdf0aac7af9b01304ff02e94b5af71b7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2ff0f9d704dc776a1934f72a339da206a9fff4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 750e9677b1ce303fa913c3e0754c3884d6517626 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6fca2410a56225992959e5e4f8019e16757bfd1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a47a9c8d8253d0ae2a233fa8599b1a1c54ec53f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6aa8d116eb33293c0a9d6d600eb7c32832758b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8511513540ece43ac8134f3d28380b96db881526 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a72a7a43ae004f1ae1be392d4322c07b25deff5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 616ae503462ea93326fa459034f517a4dd0cc1d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ae92aa57324849dd05997825c29242d2d654099 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f54c8919f297a5e5c34517d9fed0666c9d8aa10 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1234a1077f24ca0e2f1a9b4d27731482a7ed752b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88a7002acb50bb9b921cb20868dfea837e7e8f26 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d9b7b09a7c66e19a608d76282eacc769e349150 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 257264743154b975bc156f425217593be14727a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d48ed95cc7bd2ad0ac36593bb2440f24f675eb59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ea782803efe1974471430d70ee19419287fd3d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fc9e6150957ff5e011142ec5e9f8522168602ec ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 706d3a28b6fa2d7ff90bbc564a53f4007321534f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3621c06c3173bff395645bd416f0efafa20a1da6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 123cb67ea60d2ae2fb32b9b60ebfe69e43541662 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22c4671b58a6289667f7ec132bc5251672411150 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5991698ee2b3046bbc9cfc3bd2abd3a881f514dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2baadf3aabe526bdaa5dfdf27fac0a1c63aa04 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53b65e074e4d62ea5d0251b37c35fd055e403110 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b820e617ab21b372394bf12129c30174f57c5d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b6080369e7ee47b7d746685d264358c91d656bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5025b8de2220123cd80981bb2ddecdd2ea573f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da5e58a47d3da8de1f58da4e871e15cc8272d0e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da09f02e67cb18e2c5312b9a36d2891b80cd9dcd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95436186ffb11f51a0099fe261a2c7e76b29c8a6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2b9ac30337761fa0df74ce6e0347c5aabd7c072 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2af98929bd185cf1b4316391078240f337877f66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df6b87a793434065cd9a01fcaa812e3ea47c4dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90811b1bd194e4864f443ae714716327ba7596c2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a40d848794133de7b6e028f2513c939d823767cb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e231a4f184583fbac2d3ef110dacd1f015d5e1c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7c4b323bb2d3960430b11134ee59438e16d254e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9eb902eee03806db5868fc84afb23aa28802e841 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81223de22691e2df7b81cd384ad23be25cfd999c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f277ba01f9a93fb040a365eef80f46ce6a9de85 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5cbe7d7de5a29c7e714214695df1948319408d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c2e872f742e7d3c64c7e0fdb85a5d711aff1970 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 322db077a693a513e79577a0adf94c97fc2be347 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba67e4ff74e97c4de5d980715729a773a48cd6bc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e3883a0691ce1957996c5b37d7440ab925c731e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4d8fb73daa82420bdc69c37f0d58f7cb4cd505a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eee7af0e69a39da2dc6c5f109c10975fae5a93e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9780b7a0f39f66d6e1946a7d109fc49165b81d64 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6d544f67a1f3572781271b5f3030d97e6c6d9e2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55885e0c4fc40dd2780ff2cde9cda81a43e682c9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7aba59a2609ec768d5d495dafd23a4bce8179741 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8e70749887370a99adeda972cc3503397b5f9a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a1e0d7117b9e4ea4be3ef4895e8b2b4937ff98a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0e9eef45194039af6b8c22edf06cfd7cb106727a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f6b8bf020863f499bf956943a5ee56d067407f8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c39afa1f85f3293ad2ccef684ff62bf0a36e73c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff13922f6cfb11128b7651ddfcbbd5cad67e477f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bed3b0989730cdc3f513884325f1447eb378aaee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a7e7a769087b1790a18d6645740b5b670f5086b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7dcb07947cd71f47b5e2e5f101d289e263506ca9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15c4a95ada66977c8cf80767bf1c72a45eb576b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18fff4d4a28295500acd531a1b97bc3b89fad07e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7ed51ba4c8416888f5744ddb84726316c461051 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 614907b7445e2ed8584c1c37df7e466e3b56170f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28fdf05b1d7827744b7b70eeb1cc66d3afd38c82 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ddf05a78475a194ed1aa082d26b3d27ecc77475 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0441fdcbc4ea1ab8ce5455f2352436712f1b30bb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ab7ac2397d60f1a71a90bf836543f9e0dcad2d0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8005591231c8ae329f0ff320385b190d2ea81df0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be34ec23c48d6d5d8fd2ef4491981f6fb4bab8e6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d602f267c32e1e917599d9bcdcfec4eef05d477 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9bd04844725661c8aa2aef11091f01eeab69486 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a92ab8028c7780db728d6aad40ea1f511945fc8e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3287148a2f99fa66028434ce971b0200271437e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56d7a9b64b6d768dd118a02c1ed2afb38265c8b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5d11b750ecc982541d1f936488248f0b42d75d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d0473c1d1e6cadd986102712fff9196fff96212 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85b836b1efb8a491230e918f7b81da3dc2a232c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5558400e86a96936795e68bb6aa95c4c0bb0719 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 598cd1d7f452e05bfcda98ce9e3c392cf554fe75 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8f10e74d815223341c3dd3b647910b6e6841bd6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56d5d0c70cf3a914286fe016030c9edec25c3ae0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5127e167328c7da2593fea98a27b27bb0acece68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 916c45de7c9663806dc2cd3769a173682e5e8670 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fbd096841ddcd532e0af15eb1f42c5cd001f9d74 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6b08c27a031f8b8b0bb6c41747ca1bc62b72706 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e6957abf8cd88824282a19b74497872fe676a46 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbe78c02cbdfd0a539a1e04976e1480ac0daf580 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c437ee5deb8d00cf02f03720693e4c802e99f390 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e94df6acd3e22ce0ec7f727076fd9046d96d57b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d38b9a916ab5bce9e5f622777edbc76bef617e93 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cccea02a4091cc3082adb18c4f4762fe9107d3b0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3a728277877924e889e9fef42501127f48a4e77 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4654ca3a17832a7d479e5d8e3296f004c632183 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e4a44b302d3a3e49aa014062b42de84480a8d4f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f09906d27affb8d08a96c07fc3386ef261f97af ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d45c76bd8cd28d05102311e9b4bc287819a51e0e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03097c7ace28c5516aacbb1617265e50a9043a84 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5869c5c1a51d448a411ae0d51d888793c35db9c0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f573b6840509bf41be822ab7ed79e0a776005133 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b6f38d02c8ed1fb07eb6782b918f31efc4c42f3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1ad78eb7494513f6c53f0226fe3cb7df4e67513 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c914637ab146c23484a730175aa10340db91be70 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27c577dfd5c7f0fc75cd10ed6606674b56b405bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f122a6aa3eb386914faa58ef3bf336f27b02fab0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59587d81412ca9da1fd06427efd864174d76c1c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5452aa820c0f5c2454642587ff6a3bd6d96eaa1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d43055d44e58e8f010a71ec974c6a26f091a0b7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5244f7751c10865df94980817cfbe99b7933d4d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9421cbc67e81629895ff1f7f397254bfe096ba49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db82455bd91ce00c22f6ee2b0dc622f117f07137 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48fab54afab49f18c260463a79b90d594c7a5833 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3e5d9cda8eae5b0f19ac25efada6d0b3b9e04e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ddd5e5ef89da7f1e3b3a7d081fbc7f5c46ac11c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c544101eed30d5656746080204f53a2563b3d535 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 007bd4b8190a6e85831c145e0aed5c68594db556 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a8bdce7a665a0b38fc822b7f05a8c2e80ccd781 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c5b87bcdd70810a20308384b0e3d1665f6d2922 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbd784b870a878ef6dbecd14310018cdaeda5c6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29d94c622a7f6f696d899e5bb3484c925b5d4441 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8828ced5818d793879ae509e144fdad23465d684 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ea3dbdf67af10ccc6ad22fb3294bbd790a3698f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b137f55232155b16aa308ec4ea8d6bc994268b0d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ae512e69f37e37431239c8da6ffa48c75684f87 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 237d47b9d714fcc2eaedff68c6c0870ef3e0041a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5a75ab7533de99a4f569b05535061581cb07a41 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9044abce7e7b3d8164fe7b83e5a21f676471b796 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eb7265c532e99e8e434e31f910b05c055ae4369 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56cc93a548f35a0becd49a7eacde86f55ffc5dc5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a0ad305883201b6b3e68494fc70089180389f6e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9fc8b6c06b91dfddb73d18eaa8164e64cc2600a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7071ce13476cae789377c280aa274e6242fd756 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f3989f27e91119bb29cc1ed93751c3148762695 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c9fcd7745d2f0c933b46a694f77f85056133ca5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bc91d7495d7eb70a70c1f025137718f41486cd2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb53329253f8ec1d0eff83037ce70260b6d8fcce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcc166d3a6e235933e823e82e1fcf6160a32a5d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 678821a036c04dfbe331d238a7fe0223e8524901 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a61110053bca2bbf605b66418b9670cbd555802 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f24786fca46b054789d388975614097ae71c252e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8980057ccfcaca34b423804222a9f981350ac67 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3b7263e0bb9cc1d94e483e66c1494e0e7982fd1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6404168e6f990462c32dbe5c7ac1ec186f88c648 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48f5476867d8316ee1af55e0e7cfacacbdf0ad68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13e3a809554706905418a48b72e09e2eba81af2d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 10809e8854619fe9f7d5e4c5805962b8cc7a434b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59879a4e1e2c39e41fa552d8ac0d547c62936897 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c390e223553964fc8577d6837caf19037c4cd6f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9b915b066f28f4ac7382b855a8af11329e3400d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ea761425b9fa1fda57e83a877f4e2fdc336a9a3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0524096fa9f3add551abbf68ee22904b249d82f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8987f2746637cbe518e6fe5cf574a9f151472ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 64a4730ea1f9d7b69a1ba09b32c2aad0377bc10a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe311b917b3cef75189e835bbef5eebd5b76cc20 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36a984803df08b0f6eb5f8a73254dd64bc616b67 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb52c96d7e849e68fda40e4fa7908434e7b0b022 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ffde74dd7b5cbc4c018f0d608049be8eccc5101 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ea450112501e0d9f11e554aaf6ce9f36b32b732 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfe3ba3e5c08ee88afe89cc331081bbfbf5520e0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab5b6af0c2c13794525ad84b0a80be9c42e9fcf1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f03e6162f99e4bfdd60c08168dabef3a1bdb1825 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11e0a94f5e7ed5f824427d615199228a757471fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e583a9e22a7a0535f2c591579873e31c21bccae0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55eb3de3c31fd5d5ad35a8452060ee3be99a2d99 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6192ad1aed30adc023621089fdf845aa528dde9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a023acbe9fc9a183c395be969b7fc7d472490cb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e11f12adffec6bf03ea1faae6c570beaceaffc86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863b386e195bb2b609b25614f732b1b502bc79a4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b9b6fe0dd99803c80a3a3c52f003614ad3e0adf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b3b65287e6849628066d5b9d08ec40c260a94dc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc93c4f3ddade455cc4f55bc93167b1d2aeddc4f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3061698403f0055d1d63be6ab3fbb43bd954e8e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f225d4b8c3d7eb90038c246a289a18c7b655da2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35bceb16480b21c13a949eadff2aca0e2e5483fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea5d365a93a98907a1d7c25d433efd06a854109e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e91a05aabb73cca7acec1cc0e07d8a562e31b45 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7fa5ef735754e640bd6be6c0a77088009058d74 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 096897123ab5d8b500024e63ca81b658f3cb93da ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 673b21e1be26b89c9a4e8be35d521e0a43a9bfa1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a98e0af511b728030c12bf8633b077866bb74e47 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 811a6514571a94ed2e2704fb3a398218c739c9e9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec0b85e2d4907fb5fcfc5724e0e8df59e752c0d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c7ac239a2c9e303233e58daee02101cc4ebf3d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6a2942a982c2541a6b6f7c67aa7dbf57ed060ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5ec638a77dd1cd38512bc9cf2ebae949e7a8812 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb7fd3f0dd99dc6c49da6fd7e78a392c4ef1b33 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a02e432530336f3e0db8807847b6947b4d9908d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3cc763d6ca57582964807fb171bc52174ef8d5e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2df73b317a4e2834037be8b67084bee0b533bfe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 031271e890327f631068571a3f79235a35a4f73e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70670586e082a9352c3bebe4fb8c17068dd39b4c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e54cd8fed2d1788618df64b319a30c7aed791191 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4b50e7348815402634b6b559b48191dba00a751 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 460cafb81f86361536077b3b6432237c6ae3d698 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6720e8df09a314c3e4ce20796df469838379480d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ab169407354d4b9512447cd9c90e8a31263c275 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56488ced0fae2729b1e9c72447b005efdcd4fea7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b424f87a276e509dcaaee6beb10ca00c12bb7d29 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 294ee691d0fdac46d31550c7f1751d09cfb5a0f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96d003cb2baabd73f2aa0fd9486c13c61415106e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46f63c30e30364eb04160df71056d4d34e97af21 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87ae42528362d258a218b3818097fd2a4e1d6acf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f631214261a7769c8e6956a51f3d04ebc8ce8efd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 468cad66ff1f80ddaeee4123c24e4d53a032c00d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1053448ad885c633af9805a750d6187d19efaa6c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90b20e5cd9ba8b679a488efedb1eb1983e848acf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fbb7027ec88e2e4fe7754f22a27afe36813224b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8ce24a835cae8c623e2936bec2618a8855c605b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65747a216c67c3101c6ae2edaa8119d786b793cb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9004e3a1cf33110f2cbc458f1dc3259c930ad9b4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d0f24c9facb5be0c98c8859a5ce3c6b0d08504ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0cfe75db81bc099e4316895ff24d65ef865bced6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf1d5bd4208514bab3e6ee523a70dff8176c8c80 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 523fb313f77717a12086319429f13723fe95f85e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f24736ad5b55a89b1057d68d6b3f3cd01018a2e8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3175b5b21194bcc8f4448abe0a03a98d3a4a1360 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7da101ba9a09a22a85c314a8909fd23468ae66f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d810f2700f54146063ca2cb6bb1cf03c36744a2c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b2e9a8312412b9c8d4e986510dcc30ee16c5f4c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fca367548e365f93c58c47dea45507025269f59a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3203cd7629345d32806f470a308975076b2b4686 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b81273e70c9c31ae02cb0a2d6e697d7a4e2b683a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c12fef1b1971ba7a50e7e5c497caf51e0f68479 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e86eb305a542cee5b0ff6a0e0352cb458089bf62 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48a17c87c15b2fa7ce2e84afa09484f354d57a39 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98a313305f0d554a179b93695d333199feb5266c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 968ffb2c2e5c6066a2b01ad2a0833c2800880d46 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cb68eef0865df6aedbc11cd81888625a70da6777 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b813371f5a8af95152cae109d28c7c97bfaf79f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6befb28efd86556e45bb0b213bcfbfa866cac379 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86523260c495d9a29aa5ab29d50d30a5d1981a0c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d6310db456de9952453361c860c3ae61b8674ea ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ca0f897376e765989e92e44628228514f431458 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c946bf260d3f7ca54bffb796a82218dce0eb703f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 685760ab33b8f9d7455b18a9ecb8c4c5b3315d66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83a9e4a0dad595188ff3fb35bc3dfc4d931eff6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 264ba6f54f928da31a037966198a0849325b3732 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22a88a7ec38e29827264f558f0c1691b99102e23 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6019e16d5a74dc49eb7129ee7fd78b4de51dac2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec0657cf5de9aeb5629cc4f4f38b36f48490493e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 517ae56f517f5e7253f878dd1dc3c7c49f53df1a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fafe8a77db75083de3e7af92185ecdb7f2d542d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a17c43d0662bab137903075f2cff34bcabc7e1d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c72b9a3eaabbe927ba77d4f69a62f35fbe60e2e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20b07fa542d2376a287435a26c967a5ee104667f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dd51f1d63fa5ee704c2bdf4cb607bb6a71817d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e0e315a371cdfc80993a1532f938d56ed7acee4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- beccf1907dae129d95cee53ebe61cc8076792d07 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7029773512eee5a0bb765b82cfdd90fd5ab34e15 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8d0aa1ef19e2c3babee458bd4504820f415148e0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca3fdbe2232ceb2441dedbec1b685466af95e73b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61f3db7bd07ac2f3c2ff54615c13bf9219289932 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8867348ca772cdce7434e76eed141f035b63e928 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f24f9540afc0db61d197bc4932697737bff1506 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a21a9f6f13861ddc65671b278e93cf0984adaa30 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b00ad00130389f5b00da9dbfd89c3e02319d2999 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5bd7d44ff7e51105e3e277aee109a45c42590572 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ab454f0ccf09773a4f51045329a69fd73559414 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ccd777c386704911734ae4c33a922a5682ac6c8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7dd618655c96ff32b5c30e41a5406c512bcbb65f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ad01ee239f9111133e52af29b78daed34c52e49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45c0f285a6d9d9214f8167742d12af2855f527fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a93eb7e8484e5bb40f9b8d11ac64a1621cf4c9cd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1545bd9cd6953c5b39c488bf7fe179676060499 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8014d2ec56fd684dc81478dee73ca7eda0ab8a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e5aae2fc8c3832bdae1cd5e0a269405fb059231 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1d1d2cb421f16bd277d7c4ce88398ff0f5afb29 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cf2d5fcf0a3db793678dd6ba9fc1c24d4eeb36a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a25e1d4aa7e5898ab1224d0e5cc5ecfbe8ed8821 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 739fa140235cc9d65c632eaf1f5cacc944d87cfb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bd7fb976ab0607592875b5697dc76c117a18dc73 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebe8f644e751c1b2115301c1a961bef14d2cce89 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9519f186ce757cdba217f222c95c20033d00f91d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 75c75fa136f6181f6ba2e52b8b85a98d3fe1718e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dec4663129f72321a14efd6de63f14a7419e3ed2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d5bfb5d6d22f8fe8c940f36e1fbe16738965d5f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f2d76ba8e6d004ff5849ed8c7c34f6a4ac2e1e3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c34d5c3f2a4ed7194276a026e0ec6437d339c67 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b6b9510e0724bfcb4250f703ddf99d1e4020bbc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf5eaddde33e983bc7b496f458bdd49154f6f498 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0b92e40ece170b59bced0cea752904823e06e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c0990b2a6dd2e777b46c1685ddb985b3c0ef59a2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 97ab197140b16027975c7465a5e8786e6cc8fea1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c1834134ce177cdbd30a56994fcc4bf8f5be8b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8858a63cb33319f3e739edcbfafdae3ec0fefa33 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82849578e61a7dfb47fc76dcbe18b1e3b6a36951 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94029ce1420ced83c3e5dcd181a2280b26574bc9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a320abc52307b4d4010166bd899ac75024ec9a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13647590f96fb5a22cb60f12c5a70e00065a7f3a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1687283c13caf7ff8d1959591541dff6a171ca1e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 741dfaadf732d4a2a897250c006d5ef3d3cd9f3a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0019d7dc8c72839d238065473a62b137c3c350f5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cc4d748a132377ffe63534e9777d7541a3253c5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4d5caa79e6d88bb3f98bfbefa3bfa039c7e157a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f88fb96869b6ac3ed4dac7d23310a9327d3c89c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 609a46a72764dc71104aa5d7b1ca5f53d4237a75 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 394ed7006ee5dc8bddfd132b64001d5dfc0ffdd3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e6234c27abf041e4c8cd1a799950e7cd9104f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 192472f9673b18c91ce618e64e935f91769c50e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b03933057df80ea9f860cc616eb7733f140f866e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89422841e46efa99bda49acfbe33ee1ca5122845 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e84d05f4bbf7090a9802e9cd198d1c383974cb12 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d9310055f364cf3fa97f663287c596920d6e7e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef48ca5f54fe31536920ec4171596ff8468db5fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 694265664422abab56e059b5d1c3b9cc05581074 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b3ef45167e1c2f7d1b7507c13fcedd914f87da9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbb58869063fe803d232f099888fe9c23510de7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33964afb47ce3af8a32e6613b0834e5f94bdfe68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33819a21f419453bc2b4ca45b640b9a59361ed2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98e6edb546116cd98abdc3b37c6744e859bbde5c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17a172920fde8c6688c8a1a39f258629b8b73757 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d061a1a506b71234f783628ba54a7bdf79bbce9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24740f22c59c3bcafa7b2c1f2ec997e4e14f3615 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78d2cd65b8b778f3b0cfef5268b0684314ca22ef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bcd37b68533d0cceb7e73dd1ed1428fa09f7dc17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b4db556619db2ef25f0e0d90fef7e38e6713e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55b67e8194b8b4d9e73e27feadbf9af6593e4600 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f73e8ba55f33394161b403bf7b8c2e0e05f47b0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de3b9639a4c2933ebb0f11ad288514cda83c54fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af5abca21b56fcf641ff916bd567680888c364aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 258403da9c2a087b10082d26466528fce3de38d4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4fd7fca515ba9b088a7c811292f76f47d16cd7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08457a7a6b6ad4f518fad0d5bca094a2b5b38fbe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ceee7d7e0d98db12067744ac3cd0ab3a49602457 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3288a244428751208394d8137437878277ceb71f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 624556eae1c292a1dc283d9dca1557e28abe8ee3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b425301ad16f265157abdaf47f7af1c1ea879068 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f97653aa06cf84bcf160be3786b6fce49ef52961 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca288d443f4fc9d790eecb6e1cdf82b6cdd8dc0d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00ce31ad308ff4c7ef874d2fa64374f47980c85c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4287f65878000b42d11704692f9ea3734014b4c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01ab5b96e68657892695c99a93ef909165456689 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d36f8ff4d1274a8815e932285ad6dbd6b2888af ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f683c6623f73252645bb2819673046c9d397c567 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc31651674648f026464fd4110858c4ffeac3c18 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e2f63e64875a29e8c01a7ae17f5744680167a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd96cceded27d1372bdc1a851448d2d8613f60f3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f068cdc5a1a13539c4a1d756ae950aab65f5348b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6917ae4ce9eaa0f5ea91592988c1ea830626ac3a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3bd05b426a0e3dec8224244c3c9c0431d1ff130 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9059525a75b91e6eb6a425f1edcc608739727168 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1401803ccf7db5d897a5ef4b27e2176627c430e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ebc6193f7205fd1686678a5707262cb1c59bb0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73959f3a2d4f224fbda03c8a8850f66f53d8cb3b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8d2239f24f6a54d98201413d4f46256df0d6a5f3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28a33ca17ac5e0816a3e24febb47ffcefa663980 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a32a6bcd784fca9cb2b17365591c29d15c2f638e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58fb1187b7b8f1e62d3930bdba9be5aba47a52c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fe889ea0cb2547584075dc1eb77f52c54b9a8c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fde6522c40a346c8b1d588a2b8d4dd362ae1f58f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c6d7830d9b87f47a0bfe82b3b5424a32e3164ad ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 402a6c2808db4333217aa300d0312836fd7923bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47e3138ee978ce708a41f38a0d874376d7ae5c78 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0369384c8b79c44c5369f1b6c05046899f8886da ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f963881e53a9f0a2746a11cb9cdfa82eb1f90d8c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- feb1ea0f4aacb9ea6dc4133900e65bf34c0ee02d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18be0972304dc7f1a2a509595de7da689bddbefa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55dcc17c331f580b3beeb4d5decf64d3baf94f2e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77cd6659b64cb1950a82e6a3cccdda94f15ae739 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 129f90aa8d83d9b250c87b0ba790605c4a2bb06a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 791765c0dc2d00a9ffa4bc857d09f615cfe3a759 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57050184f3d962bf91511271af59ee20f3686c3f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 160081b9a7ca191afbec077c4bf970cfd9070d2c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 778234d544b3f58dd415aaf10679d15b01a5281f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e2265a23ecec4e4d9ad60d788462e7f124f1bb7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91725f0fc59aa05ef68ab96e9b29009ce84668a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4f49fb232acb2c02761a82acc12c4040699685d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aea0243840a46021e6f77c759c960a06151d91c9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0fdf6c3aaff49494c47aaeb0caa04b3016e10a26 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2d9197cfe5d3b43cb8aee182b2e65c73ef9ab7b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c0ef65b43688b1a4615a1e7332f6215f9a8abb19 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac62760c52abf28d1fd863f0c0dd48bc4a23d223 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69dd8750be1fbf55010a738dc1ced4655e727f23 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be97c4558992a437cde235aafc7ae2bd6df84ac8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f164627a85ed7b816759871a76db258515b85678 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1044116d25f0311033e0951d2ab30579bba4b051 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b82dbf538ac0d03968a0f5b7e2318891abefafaa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e837b901dcfac82e864f806c80f4a9cbfdb9c9f3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d2307532d679393ae067326e4b6fa1a2ba5cc06 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06590aee389f4466e02407f39af1674366a74705 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9dbf201b4f0b3c2b299464618cb4ecb624d272c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38b3cfb9b24a108e0720f7a3f8d6355f7e0bb1a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9240918aa03e49feabe43af619019805ac76786 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abaefc59a7f2986ab344a65ef2a3653ce7dd339f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe5289ed8311fecf39913ce3ae86b1011eafe5f7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af32b6e0ad4ab244dc70a5ade0f8a27ab45942f8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28ed48c93f4cc8b6dd23c951363e5bd4e6880992 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c1faef799095f3990e9970bc2cb10aa0221cf9c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86ea63504f3e8a74cfb1d533be9d9602d2d17e27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f91495e271597034226f1b9651345091083172c4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c1169f6ea406fec1e26e99821e18e66437e65eb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a0b79ee574999ecbc76696506352e4a5a0d7159 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a243827ab3346e188e99db2f9fc1f916941c9b1a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d8a577ffc6ad7ce1465001ddebdc157aecc1617 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fbb69306c0e14bacb8dcb92a89af27d3d5d631f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be8955a0fbb77d673587974b763f17c214904b57 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25dca42bac17d511b7e2ebdd9d1d679e7626db5f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e746f96bcc29238b79118123028ca170adc4ff0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a28942bdf01f4ddb9d0b5a0489bd6f4e101dd775 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e79999c956e2260c37449139080d351db4aa3627 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e80445ad5cb6da4c0070d7cb8af89da3b0803b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cac6e06cc9ef2903a15e594186445f3baa989a1a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d9b1f4f9fa8c9f030e3207e7deacc5d5f8bba4e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b01ca6a3e4ae9d944d799743c8ff774e2a7a82b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29eb123beb1c55e5db4aa652d843adccbd09ae18 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ee2afb00afaf77c883501eac8cd614c8229a444 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1906ee4df9ae4e734288c5203cf79894dff76cab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f606937a7a21237c866efafcad33675e6539c103 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e14e3f143e7260de9581aee27e5a9b2645db72de ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecf37a1b4c2f70f1fc62a6852f40178bf08b9859 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e2b46138ba58033738a24dadccc265748fce2ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 257a8a9441fca9a9bc384f673ba86ef5c3f1715d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18e3252a1f655f09093a4cffd5125342a8f94f3b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1873db442dc7511fc2c92fbaeb8d998d3e62723d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de84cbdd0f9ef97fcd3477b31b040c57192e28d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b4a514e51fbc7dc6ddcb27c188159d57b5d1fa9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 365fb14ced88a5571d3287ff1698582ceacd80d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ff864138cd1e680a78522c26b583639f8f5e313 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17af1f64d5f1e62d40e11b75b1dd48e843748b49 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26e138cb47dccc859ff219f108ce9b7d96cbcbcd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea81f14dafbfb24d70373c74b5f8dabf3f2225d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 583e6a25b0d891a2f531a81029f2bac0c237cbf9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1019d4cf68d1acdbb4d6c1abb7e71ac9c0f581af ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38d59fc8ccccae8882fa48671377bf40a27915a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07996a1a1e53ffdd2680d4bfbc2f4059687859a5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01eac1a959c1fa5894a86bf11e6b92f96762bdd8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d1212e8c412b0b4802bc1080d38d54907db879d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 600fcbc1a2d723f8d51e5f5ab6d9e4c389010e1c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f8ce8901e21587cd2320562df412e05b5ab1731 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57a4e09294230a36cc874a6272c71757c48139f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfb278d74ad01f3f1edf5e0ad113974a9555038d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fbe062bf6dacd3ad63dd827d898337fa542931ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8caeec1b15645fa53ec5ddc6e990e7030ffb7c5a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b86f9b399a8f5af792a04025fdeefc02883f3e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0974f8737a3c56a7c076f9d0b757c6cb106324fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3323464f85b986cba23176271da92a478b33ab9c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c34343d0b714d2c4657972020afea034a167a682 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de5bc8f7076c5736ef1efa57345564fbc563bd19 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 282018b79cc8df078381097cb3aeb29ff56e83c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e6bece08aea01859a232e99a1e1ad8cc1eb7d36 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c36f3648e39ace752c67c71867693ce1eee52a3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c083f3d0b853e723d0d4b00ff2f1ec5f65f05cba ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 538820055ce1bf9dd07ecda48210832f96194504 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a988e6985849e4f6a561b4a5468d525c25ce74fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55e757928e493ce93056822d510482e4ffcaac2d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 837c32ba7ff2a3aa566a3b8e1330e3db0b4841d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae5a69f67822d81bbbd8f4af93be68703e730b37 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1090701721888474d34f8a4af28ee1bb1c3fdaaa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63761f4cb6f3017c6076ecd826ed0addcfb03061 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e1c89ec97ec90037583e85d0e9e71e9c845a19b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2054561da184955c4be4a92f0b4fa5c5c1c01350 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e41c727be8dbf8f663e67624b109d9f8b135a4ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a25347d7f4c371345da2348ac6cceec7a143da2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2c8d26d3b25b864ad48e6de018757266b59f708 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 143b927307d46ccb8f1cc095739e9625c03c82ff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c1a87d11df666d308d14e4ae7ee0e9d614296b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15941ca090a2c3c987324fc911bbc6f89e941c47 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22a0289972b365b7912340501b52ca3dd98be289 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df0892351a394d768489b5647d47b73c24d3ef5f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f78d4a28f307a9d7943a06be9f919304c25ac2d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d6ceabf5b90e7c0690360fc30774d36644f563c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e2ba9c2028f21d11988558f3557905d21e93808 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 772b95631916223e472989b43f3a31f61e237f31 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b75c3103a700ac65b6cd18f66e2d0a07cfc09797 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be06e87433685b5ea9cfcc131ab89c56cf8292f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 898d47d1711accdfded8ee470520fdb96fb12d46 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5c0002d069382db1768349bf0c5ff40aafbf140 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69361d96a59381fde0ac34d19df2d4aff05fb9a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b48e4d3aa853687f420dc51969837734b70bfdec ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 654e54d200135e665e07e9f0097d913a77f169da ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e825f8b69760e269218b1bf1991018baf3c16b04 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13dd59ba5b3228820841682b59bad6c22476ff66 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b8902e033430000481eb355733cd7065342037 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 583cd8807259a69fc01874b798f657c1f9ab7828 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- def0f73989047c4ddf9b11da05ad2c9c8e387331 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619c11787742ce00a0ee8f841cec075897873c79 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 501bf602abea7d21c3dbb409b435976e92033145 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edd9e23c766cfd51b3a6f6eee5aac0b791ef2fd0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53152a824f5186452504f0b68306d10ebebee416 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 997b7611dc5ec41d0e3860e237b530f387f3524a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c3c271b0d6b5f56b86e3f177caf3e916b509b52 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3776f7a766851058f6435b9f606b16766425d7ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72bcdbd0a0c8cc6aa2a7433169aa49c7fc19b55b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619662a9138fd78df02c52cae6dc89db1d70a0e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09c3f39ceb545e1198ad7a3f470d4ec896ce1add ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4956c1e618bfcfeef86c6ea90c22dd04ca81b9db ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8a448b7864e21db46184eab0f0a21d7725d074f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d996892ac76199886ba3e2754ff9c9fac2456d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bfdf93201ea413affd4c8fbe406ea2b4a7c1b6b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a252661c3bf4202a4d571f9c41d2afa48d9d75f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e14ab55a060a5637e9a4a40e40714c1f441d952 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 867129e2950458ab75523b920a5e227e3efa8bbc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4375386fb9d8c7bc0f952818e14fb04b930cc87d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b27292936c81637f6b9a7141dafaad1126f268e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f96ee7463e2454e95bf0d77ca4fe5107d3f24d68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3cde0ee162b8f0cb67da981311c8f9c16050a62 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76fd1d4119246e2958c571d1f64c5beb88a70bd4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec28ad575ce1d7bb6a616ffc404f32bbb1af67b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 180a5029bc3a2f0c1023c2c63b552766dc524c41 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b72e2704022d889f116e49abf3e1e5d3e3192d3b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a803803f40163c20594f12a5a0a536598daec458 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab59f78341f1dd188aaf4c30526f6295c63438b1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bb2fc8129ed9adabec6a605bfe73605862b20d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61138f2ece0cb864b933698174315c34a78835d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15ee0ac0d56a5fb5ba13fae4288621ddd2185f17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50e469109eed3a752d9a1b0297f16466ad92f8d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 400d728c99ddeae73c608e244bd301248b5467fc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65c9fe0baa579173afa5a2d463ac198d06ef4993 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77cde0043ceb605ed2b1beeba84d05d0fbf536c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c69b6b979e3d6bd01ec40e75b92b21f7a391f0ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d86e77edd500f09e3e19017c974b525643fbd539 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b3feddd1269a0b0976f4eef2093cb0dbf258f99 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dcf2c3bd2aaf76e2b6e0cc92f838688712ebda6c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a38a0053d31d0285dd1e6ebe6efc28726a9656cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 697702e72c4b148e987b873e6094da081beeb7cf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b1a2271a03313b561f5b786757feaded3d41b23f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc66da0d66a9024f0bd86ada1c3cd4451acd8907 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16a0c64dd5e69ed794ea741bc447f6a1a2bc98e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54844a90b97fd7854e53a9aec85bf60564362a02 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a97d21936200f1221d8ddd89202042faed1b9bcb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35057c56ce118e4cbd0584bd4690e765317b4c38 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a417f4cf2df39704aa4c869e88d14e9806894a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c76a8c5499d22b9c0b4c56f03b671033eb9f9bdd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3326f34712f6a96c162033c7ccf370c8b7bc1ead ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6102b349cbef03667d5715fcfae3161701a472d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4133f51817145e99b896c7063584d4dd18ad59 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e29a91324ca7086b948a9e3a4dbcbb2254a24a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4ed59a86909b142ede105dd9262915c0e2993ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e729429631c84c3bd5602edcab3e7c2ab1dcce0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12276fedec49c855401262f0929f088ebf33d2cf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d00fa4f6cad398250ce868cef34357b45abaad3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c05ef0e7543c2845fd431420509476537fefe2b0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1eae9d1532e037a4eb08aaee79ff3233d2737f31 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bae67b87039b3364bdc22b8ef0b75dd18261814c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 615de50240aa34ec9439f81de8736fd3279d476d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f22ddca351c45edab9f71359765e34ae16205fa1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bac518bfa621a6d07e3e4d9f9b481863a98db293 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f7255c2c1d9e54fc2f6390ad3e0be504e4099d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8775b6417b95865349a59835c673a88a541f3e13 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ba46b8fba511fdc9b8890c36a6d941d9f2798fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2740d2cf960cec75e0527741da998bf3c28a1a45 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1391bf06a839746bd902dd7cba2c63d1e738d37 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f28a2041f707986b65dbcdb4bb363bb39e4b3f77 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- accfe361443b3cdb8ea43ca0ccb8fbb2fa202e12 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ef66a66dc52dcdf44cebe435de80634e1beb268 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa98250e1dd7f296b36e0e541d3777a3256d676c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d638bf6e55bc64c230999c9e42ed1b02505d0ce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aaeb986f3a09c1353bdf50ab23cca8c53c397831 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c92df685d6c600a0a3324dff08a4d00d829a4f5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e40b5f075bdb9d6c2992a0a1cf05f7f6f4f101a3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5f92b17729e255ca01ffb4ed215d132e05ba4da ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 279d162f54b5156c442c878dee2450f8137d0fe3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1194dc4322e15a816bfa7731a9487f67ba1a02aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6c8072daa942e9850b9d7a78bd2a9851c48cd2c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f73385a5f62a211c19d90d3a7c06dcd693b3652d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 202216e2cdb50d0e704682c5f732dfb7c221fbbc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dd7d6468a54be56039b2e3a50bcf171d8e854ff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5020eb8ef37571154dd7eff63486f39fc76fea7f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3bee808e15707d849c00e8cea8106e41dd96d771 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 331ddc27a22bde33542f8c1a00b6b56da32e5033 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0dcc6fb3dfd39df5970d6da340a949902ae629 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f6c32a918544aa239a6c636666ce17752e02f15 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84f9b603b44e0225391f1495034e0a66514c7368 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84be1263abac102d8b4bc49096530c6fd45a9b80 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59b05d06c1babcc8cd1c541716ca25452056020a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f4bc8ee9aeeec8bf7aa31c627e50761dd8bb2db ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1da744421619e134ed3ff2781b4d97fee78d9cd4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d884adc80c80300b4cc05321494713904ef1df2d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ff5822dbefa1c9c8177cbf9f0879c5cf4efc5c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05d2687afcc78cd192714ee3d71fdf36a37d110f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ace1fed6321bb8dd6d38b2f58d7cf815fa16db7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0f2bb42b56f770c50a6ef087e9049fa6ac11fb5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6226720b0e6a5f7cb9223fc50363def487831315 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2df1f56cccab13d5c92abbc6b18be725e7b4833 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1e9df152219e85798d78284beeda88f6baa9ec7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 819d6aceeb4d31c153de58081b21ad4f8b559c0e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0e84a3401c84507dc017d6e4f57a9dfdb31de53 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4186a2dbbd48fd67ff88075c63bbd3e6c1d8a2df ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58d692e2a1d7e3894dbed68efbcf7166d6ec3fb7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b67bd4c730273a9b6cce49a8444fb54e654de540 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52bb0046c0bf0e50598c513e43b76d593f2cbbff ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc2201e660014c5d91fec8e3c3a3fa5a66dcf33b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 179a1dcc65366a70369917d87d00b558a6d0c04d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6da04adff0b96c5163b0c2530028b72be2fd26fd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07eaa4ce2696a88ec0db6e91f191af1e48226aca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 637eadce54ca8bbe536bcf7c570c025e28e47129 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a4bfd979e5d4ea0d0457e552202eb2effc36cac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00c5497f190172765cc7a53ff9d8852a26b91676 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f41d42ee7e264ce2fc32cea555e5f666fa1b1fe9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9117cdbb48ffc458d809715c6ab6bc6b416ef621 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b372fdd54bab2ad6639756958978660b12095c3c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dc5d68491eb3c73ae8478bf6edef80b18564a13 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4251bd59fb8e11e40c40548cba38180a9536118c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2834177c0fdf6b1af659e460fd3348f468b8ab0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cdfaceebe916c91acdf8de3f9506989bc70ad65 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 806450db9b2c4a829558557ac90bd7596a0654e0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4cde8df886112ee32b0a09fcac90c28c85ded7f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a885d23bab51b0c00be2780055ff63b3f3c1a4c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 555b0efc2c19aa8cf7c548b4097bd20a73f572ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5915114cdca6f09fa2355162a43596f5d20273be ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 451561c252323e74696dbe0be36601c95a75a8c3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c0a65226f038c58fc6d6ed525f38fc00b3579b7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e6d110fbfa1f2e6a96bc8329e936d0cf1192844 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39229db70e71a6be275dafb3dd9468930e40ae48 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9bbdc87a7263f479344fcf67c4b9fd6005bb6cd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81279eeac5c525354cbe19b24a6f42219407c1f9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e99d9ab2acfaf2ebb4b150736590d6a4e33f449 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13ba1d87ab8fc45d2aed25662bf91053b0db5f9f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2454ae89983a4496a445ce347d7a41c0bb0ea7ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c0c2fc4ee2d8a5d0a2de50ba882657989dedc51 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c68459a17ff59043d29c90020fffe651b2164e6a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 832b56394b079c9f6e4c777934447a9e224facfe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f51eeb2f9a1efe22e45f7a1f7b963100f2f8e6b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43ab2afba68fd0e1b5d138ed99ffc788dc685e36 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50af864298826feaf94772982bbc7b222b4b4242 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9671e15703918048982c9ff4e2e0fef21ede320 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 75c161cbc017a7d176dd0d7b937db26b3ce637a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84968314ddcbaa0e4b685c71c6ea5524b3aefc80 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ab307935bd2bbda52f853f9fc6b49f01897727 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b01824b1aecf8aadae4501e22feb45c20fb26bce ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5df44408218003eb49e3b8fc94329c5e8b46c7d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ce1193c851e98293a237ad3d2d87725c501e89f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e648efdcc1ca904709a646c1dbc797454a307444 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20ef1924b832a3788849793c0ee6b46dd00d4520 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46c9a0df4403266a320059eaa66e7dce7b3d9ac4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53ed0d43ab950d4deeefd238c7685dabef943800 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3410fdc42075bd788a78f4b2a68c5e2cc0930409 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bca0cb7f507d6a21a652307737a57057692d2f79 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07c20b4231b12fee42d15f1c44c948ce474f5851 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 708b8dda8e7b87841a5f39c60b799c514e75a9c7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6745f4542cfb74bbf3b933dba7a59ef2f54a4380 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2da2b90e6930023ec5739ae0b714bbdb30874583 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b426893ce331f71165c82b1a86252cd104ae3db ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4748e813980e1316aa364e0830a4dc082ff86eb0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a67bf61b5017e41740e997147dc88282b09c6f86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be53c1f33107d6891c47c784aeadd6e5ddf78e8c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c39f9da792792d4e73fc3a5effde66576ae128c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92a97480edcc0f0de787a752bf90feed0445dd39 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccde80b7a3037a004a7807a6b79916ce2a1e9729 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a28d3d18f9237af5101eb22e506a9ddda6d44025 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572ace094208c28ab1a8641aedb038456d13f70b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5593dc014a41c563ba524b9303e75da46ee96bd5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b93f2a91e0791be3ffda1f753aa6c377bcab4d3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a4b1d4d11eee3c5362a4152216376e634bd14cf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b7f5cb25e0e03e06ec506d31c001c172dd71ef6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a119924bd314934158515a1a5f5877be63f6f91 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6eeae8b24135b4de05f6d725b009c287577f053d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c4269a21b9edf8477f2fee139d5c1b260ebc4f8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ee861ae7a7b36a811aa4b5cc8172c5cbd6a945b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac36642ce1cde75b222e20f585ddfd240f064da2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdf2e667f969e5c22985dd232fe3f107fe26e750 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c76852d0bff115720af3f27acdb084c59361e5f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15b9129ec639112e94ea96b6a395ad9b149515d1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ead94f267065bb55303f79a0a6df477810b3c68d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb5ba18ab1a875ef6b62c65342de476be47871b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa44e6b579917814740393efc0b990e0fbbbdaf3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba8d148121b1dbba444849fe9549f36a7d17db28 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bcd57e349c08bd7f076f8d6d2f39b702015358c1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a7eedde7f5d5082f7f207ef76acccd24a6113b1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac1cec7066eaa12a8d1a61562bfc6ee77ff5f54d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbc18b92362f60afc05d4ddadd6e73902ae27ec7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 386d1af07bf1f32fac5e97612441488894f2ffed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50c90666c4de8ac93accdf4040e3eb010a82a46a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ca61d4c68dad68901f8a7364dd210ef27a8b4c6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 101fb1df36f29469ee8f4e0b9e7846d856b87daa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6acec357c7609fdd2cb0f5fdb1d2756726c7fe98 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bca9899b5edeed7f964e3124e382c3573183c68 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f23379c496942ea6fe898a7a823b65530c126a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9374a916588d9fe7169937ba262c86ad710cfa74 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4fa1cb3c3e84cad8b74edb28531d2e27508be26 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 615fc1984b0cc09c8eeab51a1d1c4e05b583b4a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4582f805156095604fe07e71195cd9aa43d7a34 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20f202d83bdf1f332a3cb8f010bcf8bf3c2807bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb0f2c241718bc7462be44e5e8e1e36e35f9b15 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2792e534dd55fe03bca302f87a3ea638a7278bf1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec3d91644561ef59ecdde59ddced38660923e916 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79cfe05054de8a31758eb3de74532ed422c8da27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ee31065abea645cbc2cf3e54b691d5983a228b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86fa577e135713e56b287169d69d976cde27ac97 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b89f39432cdb395f5fbb9553b56595d29e2b773 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ef1f89abe5b2334705ee8f1a6da231b0b6c9a50 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e70f3218e910d2b3dcb8a5ab40c65b6bd7a8e9a8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b65df78a10c3bcc40d18f3e926bb5a49821acc31 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8430529e1a9fb28d8586d24ee507a8195c370fa5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a58a60ac5f322eb4bfd38741469ff21b5a33d2d5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00499d994fea6fb55a33c788f069782f917dbdd4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 291d2f85bb861ec23b80854b974f3b7a8ded2921 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2ccae0d7fca3a99fc6a3f85f554d162a3fdc916 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ffd4b0193acf86b6a6e179f8673ed38bad3191d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff3d142387e1f38b0ed390333ea99e2e23d96e35 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2a14e4b96a0ffc5353733b50266b477539ef899 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1bd99c0a376dec63f0f050aeb0c40664260da16 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78a46c432b31a0ea4c12c391c404cd128df4d709 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 461fd06e1f2d91dfbe47168b53815086212862e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b43ca7ff72d5f535134241e7c797ddc9c7a3573 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39f85c4358b7346fee22169da9cad93901ea9eb9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- beb76aba0c835669629d95c905551f58cc927299 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20c34a929a8b2871edd4fd44a38688e8977a4be6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea33fe8b21d2b02f902b131aba0d14389f2f8715 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7a5c05875a760c0bf83af6617c68061bda6cfc5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ba2aef8f59009756567a53daaf918afa851c304 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b5121414aaf2648b0e809e926d1016249c0222c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ba8b8b91907bd087dfe201eb0d5dae2feb54881 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5117c9c8a4d3af19a9958677e45cda9269de1541 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af9e37c5c8714136974124621d20c0436bb0735f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c658c16f3437ed7e78f6072b6996cb423a8f504 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1496979cf7e9692ef869d2f99da6141756e08d25 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58e2157ad3aa9d75ef4abb90eb2d1f01fba0ba2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0725af77afc619cdfbe3cec727187e442cceaf97 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 685d6e651197d54e9a3e36f5adbadd4d21f4c7e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e062f4d043234312446ea9445f07bd9dc309ce3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1083748b828dfca6a72014434850da0f2a0579ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c73e9cd66c77934f8a262b0c1bab9c2f15449ba ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59e26435a8d2008073fc315bafe9f329d0ef689a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b197b2dbb527de9856e6e808339ab0ceaf0a512d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7184340f9d826a52b9e72fce8a30b21a7c73d5be ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9dfd6bcca5499e1cd472c092bc58426e9b72cccc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a519942a295cc39af4eebb7ba74b184decae13fb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c486b2e699082763075a169c56a4b01f99fc4b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11ec2e08e1796b5914cd9c4830813482753ecfa0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c53eeaca19163b2b5484304a9ecce3ef92164d70 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c770f8e98a0079497d3eb5bc31e7260cc70cc63 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36f838e7977e62284d2928f65cacf29771f1952f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9cec00938d9059882bb8eabdaf2f775943e00e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44a601a068f4f543f73fd9c49e264c931b1e1652 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4712c619ed6a2ce54b781fe404fedc269b77e5dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5da34fddda2ea6de19ecf04efd75e323c4bb41e4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3942cdff6254d59100db2ff6a3c4460c1d6dbefe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25945899a0067a2dbeeae7a8362a6d68bbc5c6ba ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c3bbc43d097656b54c808290ce0c656d127ce47 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d9e7f1121d3bdbb08291c7164ad622350544a21 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b999cae064fb6ac11a61a39856e074341baeefde ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b9776e88f7abb59cebac8733c04cccf6eee1c60 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc518251eb64c3ef90502697a7e08abe3f8310b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 753e908dcea03cf9962cf45d3965cf93b0d30d94 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc1fcf372878240e0a1af20641d361f14aea7252 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fe5cfa0e063a8d51a1eb6f014e2aaa994e5e7d4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f2b19de3301e76ab3a6187a49c9c93ff78bafbd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb0ac304431e8aed686a8a817aaccd74b1ba4f24 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0cd09bd306486028f5442c56ef2e947355a06282 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1047b41e2e925617474e2e7c9927314f71ce7365 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 146a6fe18da94e12aa46ec74582db640e3bbb3a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e14356d12226cb140b0e070bd079468b4ab599b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b00f3689aa19938c10576580fbfc9243d9f3866c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f62c9b9c0c9bda792c3fa531b18190e97eb53509 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30d822a468dc909aac5c83d078a59bfc85fc27aa ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13a26d4f9c22695033040dfcd8c76fd94187035b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddc5496506f0484e4f1331261aa8782c7e606bf2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87afd252bd11026b6ba3db8525f949cfb62c90fc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5bb812243dd1815651281a54c8191fc8e2bc2d82 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5de63b40dbb8fef7f2f46e42732081ef6d0d8866 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33fa178eeb7bf519f5fff118ebc8e27e76098363 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa921fee6014ef43bb2740240e9663e614e25662 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81d8788d40867f4e5cf3016ef219473951a7f6ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c23ca3cd9b9bbeaca1b79068dee1eae045be5b6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f8e6f7ab1e6dbd95c268ba0fc827abc62009013 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ec61d4f7208a2713adeafb947f65fdae0947067 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c9f55dd8e6697ab2f9eaf384315abd4cbefad38 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b50af0a20bcc7280940ce07593007d17c5acabd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7a4388eeaa4b6b94192dce67257a34c4a6cbd26 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29c20c147b489d873fb988157a37bcf96f96ab45 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb8cec3cab142ef4f2773b6fc9d224461a6bf85d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa8fe4cad336a7bdd8fb315b1ce445669138830c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb509603e8303cd8ada7cfa1aaa626085b9bb6d6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6662422ba52753f8b10bc053aba82bac3f2e1b9c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d3a24b22d340c62fafc0e75a349c0ffe34d99d7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b1f32e231d391f8e6051957ad947d3659c196b2b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5613079f2494808f048b81815bf708debf7339d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7781e1056c672d5212f1aaf4b81ba6f18e8dd8b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4fb3091a75005b047fbea72f812c53d27b15412 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e68d907022c84392597e05afc22d9fe06bf0927 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a10aa36bc6a82bd50df6f3df7d6b7ce04a7070f1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 764cc6e344bd034360485018eb750a0e155ca1f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3131d1a5295508f583ae22788a1065144bec3cee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2856af1d9289ee086b10768b53b65e0fd13a335 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 125b4875b5035dc4f6bad4351651a4236b82baeb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e52a00c81d032b47f1bc352369be3ff8eb87b27 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d97afa24ad1ae453002357e5023f3a116f76fb17 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 138aa2b8b413a19ebf9b2bbb39860089c4436001 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1adc79ac67e5eabaa8b8509150c59bc5bd3fd4e6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 590638f9a56440a2c41cc04f52272ede04c06a43 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d3e2f7f57620398df896d9569c5d7c5365f823d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fcbda4e363262a339d1cacbf7d2945ec3bd83f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- babf5765da3e328cc1060cb9b37fbdeb6fd58350 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 038f183313f796dc0313c03d652a2bcc1698e78e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c231551328faa864848bde6ff8127f59c9566e90 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df638c22c75ddc9a43ecdde90c0c9939f5009e7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- befb617d0c645a5fa3177a1b830a8c9871da4168 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35a09c0534e89b2d43ec4101a5fb54576b577905 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9d6494f1075e5370a20e406c3edb102fca12854 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5047344a22ed824735d6ed1c91008767ea6638b7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6604a00a652e754cb8b6b0b9f194f839fc38d7c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 127e511ea2e22f3bd9a0279e747e9cfa9509986d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c50d8be2dc5ae74e53e44a87f580bf25956af9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 972a8b84bb4a3adec6322219c11370e48824404e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 152bab7eb64e249122fefab0d5531db1e065f539 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef592d384ad3e0ead5e516f3b2c0f31e6f1e7cab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf37099ea8d1d8c7fbf9b6d12d7ec0249d3acb8b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bf8e89e6784e121ddc32990d586e2276ec84596 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f6a6e35d003c243968cdb41b72fbbe609e56841 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dd76b9e72b21d2502a51e3605e5e6ab640e5f0bd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56823868efddd3bdbc0b624cdc79adc3a2e94a75 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22757ed7b58862cccef64fdc09f93ea1ac72b1d2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfdc8e26d36833b3a7106c306fdbe6d38dec817e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0425bc64384fe9a6a22edb7831d6e8c1756e2c7e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa5e366889103172a9829730de1ba26d3dcbc01b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50a9920b1bd9e6e8cf452c774c499b0b9014ccef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d6332820eaad3a6d3b0abc93424469a8ef7083a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43eb1edf93c381bf3f3809a809df33dae23b50d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e64957d8e52d7542310535bad1e77a9bbd7b4857 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a534eba97db3c2cfb2926368756fd633d25c056 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4e56f627f94d93c49db40ae5944f880341f4203 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b377c07200392ac35a6ed668673451d3c9b1f5c7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 989671780551b7587d57e1d7cb5eb1002ade75b4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14cef2bb3e0de02f306fa37c268d6c276326c002 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9cb007076542e32f7b99bb18bc6ec424f3b407b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3ce120c9acc7d9d4ce86aa1f07b027d1c45a9a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b3ecf2dcace76b65765ddf1901504b0b4861b08 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3050b578081b24e5cf244fa252f385ffca2bf86 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11b1f6edc164e2084e3ff034d3b65306c461a0be ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3d5159679d17c1270ad72941922d0f18bdd6415 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 985093bae160419782b3d3cb9151e2e58625fd52 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c04c60f12d3684ecf961509d1b8db895e6f9aac0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53d26977f1aff8289f13c02ee672349d78eeb2f0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 564db4f20bd7189a50a12d612d56ed6391081e83 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657a57adbff49c553752254c106ce1d5b5690cf8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26029c29765043376370a2877b7e635c17f5e76d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbf957a36f5ed47c4387ee8069c56b16d1b4f558 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 924da9604d6474fd1be99dffdcc539eaaaa31626 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9840afda82fafcc3eaf52351c64e2cfdb8962397 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3fd37230e76a014cf5c45d55daf0be2caa6948b7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 345d6be7829c6dab359390ebc5e1a7ae0c6d48bb ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a9eeebeddaa20d10881ad505cc362a3a391e15b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 225999e9442c746333a8baa17a6dbf7341c135ca ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9513aa01fab73f53e4fe18644c7d5b530a66c6a1 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 048acc4596dc1c6d7ed3220807b827056cb01032 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfdf98cadedfa6042117cd7a83952ca2f465d26f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 919164df96d9f956c8be712f33a9a037b097745b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9acc7806d6bdb306a929c460437d3d03e5e48dcd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a07cdbae1d485fd715a5b6eca767f211770fea4d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95a83a7de5d3ce84206b9267962c32df4d071c21 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e063d101face690b8cf4132fa419c5ce3857ef44 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8f8582274cd6a368a79e569e2995cee7d6ea9f9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aed099a73025422f0550f5dd5c3e4651049494b2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fda0ec787de5159534ebc8b81824920d9613575 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17852bde65c12c80170d4c67b3136d8e958a92a9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c63cd9873bf733c068a5f183442ec82873fef1fc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9946e0ce07c8d93a43bd7b8900ddf5d913fe3b03 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a45790a8699a384c3d218ac4ca8a53c109fd944 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5cf1bc1d3e38ab32a20707d66b08f1bb0beae91 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b01b589e7a19d6be5bd6465e600f84aa8015282 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 178dff753350014f6395f41bc21f1adddf73c8e0 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b372e26366348920eae32ee81a47b469b511a21f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66beac619ba944afeca9d15c56ccc60d5276a799 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0d828fcb1964a578ef3979297c59a41aedba932 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3980f11a9411d0b487b73279346cfae938845e7a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93e19791659c279f4f7e33a433771beca65bf9ea ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a0eee3989abd3a5d6d47d0298bd056a954d379b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 579e2c07bbb39577fa32fed8cb42297c1c5516d8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2effd7a10798a1e8e53bb546a67b2ccdea882c50 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd5f111439e7a2e730b602a155aa533c68badbf8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0aa1ce356c7c3d53d6ee035b4c7bcf425e108cdc ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f347c6da5e83b137c337f9ccb190090c27cfc953 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abc2e538c6f2fe50f93e6c3fe927236bb41f94f4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b38020ae17ed9f83af75ce176e96267dcce6ecbd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93ad8da5a8c6ddcbe67abae2cc4a7aad8084e736 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52654c0216dcbe3fa2d9afb1de12c65d18f6a7a4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b63b3bc493a4a44ba1d857c78e4496e40f1d7b8 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef9395f5ffe75f4e43d80cd1fa7b34c8a4db66fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5083752d5d02d6c46bc2f18ba53a28d119af5b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24effa4861d6d1e8cffe848ae63fa2ed40be03f6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9aa93b5890acb152c5824a8f75c221cf1addfd1b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d203a0da0c709d301e973a9fe3569efd1fb2bd3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57a561cda141a0fed3129f4f3488e3b91805e638 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4043468de4fc448b6fda670f33b7f935883793a7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edf9fc528277a53ec37d1bd79fb4f8608cce11ae ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e1be3032d521e3bf2f49fc87f82c8f978079ea6 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bf2083922b7bccc31917bf9cdb74e3d4892c2600 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eba67171bf6ea653dfb6a6ae288f3c1d10829870 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 277be842bf30848e7292a931169bd4c8ff726dee ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79ec3a5191f9dfd398d98fe7372ad841f34876ed ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b919010b0459b2540fb609c5d1aad0b8dc0fab01 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 105fea3ef3be4b47cc3602423919329162dfcecf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5278c514068f469f2fca7638ef1e1b27556a37a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f34a25eaa6de187797442bc6e0514289d77fed2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a935501a2f62d103cf9d69d775399dae2e7dfead ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12b32450c210cec1fdd8b2c19d564776e8054aa3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26719d252dd8e3a53c08da2ed3c3a8d62fbbc30a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55f0245f3ee538ec49e84bcb28c33b135a07f0b9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2c1bd80350f692c5c2298cb88859564ec0a061b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48af0ac87dc3beef4d3e6c7982b158d50f7b2a6e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 039bfe373c990fc6db3808d255abaff91235e82f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dafe71a3e2d5cfb9b80805a26d5442ca5ad8332f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5625170b248edc6a570c977fb1f8e7430ffd0b5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f043f00d5161794ef538802dcc9ba75e375c058 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a5885a4c5983242b1356b57eafeb59a9d5c0d0f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c982c1f50bd7ae3bc4a1afc09e9ad11aecd434f ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 273400f95ae036c01d4b0fd7a7ca6ab160efd958 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 233e3ffe0ef35dbabe49340ba567499690dcc166 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b675bf555e89e708f1b8f79bd90796dd395837b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7252e217fe6d8f05dd50f6e125c33a1c6fff602 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbbb6b349e8d0557e7e55e2d05819d6bdaed3769 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebee400cfa4a532018ee904c22c7e3e6619ca4de ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e10706b6c167454a723636e0929061201a2f461b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80b60fafa94b794fa77fab85e1df66f52598f3ac ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e509130b7dfc97eeb4a517d6c9c65a8d6204234 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d49273897bd317323e0a3bbbc01b76e83370f0c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4d5e7c9dab813adf9bfd8198bb9bb00c9a9503b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a061029eddee38110e416e3c4f60d553dafc9e5 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 323259cc3d977235f4e7e8980219e5e96d66086e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80d01f0ef89e287184ba6d07be010ee3f16a74d9 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd47d6b11833870ce23102a3373b7a50a1b45d00 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58fa2c401856f93712ae6cc45d4dc3458ee4b4f4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc922f3678a1b01cac2b3f1ec74b831ffec52a71 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2405cf54ac06140a0821f55b34c1d54f699e8e73 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 579d1b8174c9be915c0fa17a67fc38cc6de36ad7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8501e908bb8c531dfa75cef33fcec519027f4e5b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7129dc00826cb344c0202f152f1be33ea9326fe ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85c6252b54108750291021a74dc00895f79a7ccf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1accc498c40e684f870d38b7d128739a0ebf57cf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27ceafbb3f74b4677d5bae6c7ea031de07c6cfad ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c60b88138b836307bdde0487c4ffb82121b1c5e ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70094734d601e1220c95ac586fdffbda3a23e10b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69a56c4e2addd1ec53bb40e8a18f52353d1fc28c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5962862e9ba0a1c9a14306688973946f6f7ce75c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03bfdb16cd7cc6e1c7c8d3b59552da7de3d82d1c ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71cd409660bc5b8c211dc7c51afae481d822d593 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35ddb45b41b3de2d4f783608ad8d8752f6557997 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30472cf3132b8c03e528b23d1c7533de740e28ab ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dc09f0ece61ef2bd629e8bfe532aa24f4f8e0c2 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae54e18d7ca7bc8b8fbc667119fb60b25f0f3871 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 207bf7bf30651c3284408d87d7c499e43db6bc83 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b975d9fcf5924800f9ea5d68d7d79f743ca9af7 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7e59d3ef86beb3b3b3e53a610af122b2220841b ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0651f0964ba5a33257ebbda1e92c7a1649a4a058 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 062aafa396866d4dfe8f3fd2f32d46fa7c01b6dd ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea6af04977c197fd07ab812d394dcb61feebaf67 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657e98094f0f669809bc0e47f3d6bd9a8124cf32 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c35350e5bc4fe113330818ca6784ff368c5ffef ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 620dbee78ed8481d108327c4c332899df7cb8ef4 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6383196b7bb0773c0083a2a3d49a95e5479715bf ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9066712dca21ef35c534e068f2cc4fefdccf1ea3 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 933d23bf95a5bd1624fbcdf328d904e1fa173474 ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f66cfbbce58b4b552b041707a12d437cc5f400a ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7156cece3c49544abb6bf7a0c218eb36646fad6d ---- +37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33ebe7acec14b25c5f84f35a664803fcab2f7781 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 833f5c7b95c92a3f77cf1c90492f8c5ab2adc138 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e658e67859c06ca082d46c1cad9a7f44b0279edc ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e2b6256e9edfb94f0c33bd97b9755679970d7b3e ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- d55288b879df71ca7a623b0e87d53f2e0e1d038a ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- b59962d2173c168a07fddd98b8414aae510ee5c0 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 6d2618f2fbe97015ce1cb1193d8d16100ba8b4fc ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8a801152c694671ad79a4fc2f5739f58abecb9a5 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- db7c881cd7935920e2173f8f774e2e57eb4017a6 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 251eeeec4053dde36c474c1749d00675ab7e3195 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 606796d98415c198208ffbdeb7e10cc6bd45b0aa ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 9796566ae0e69f7425c571b09b81e8c813009710 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f685e7e7250168bf3fca677f2665347b38a7c8c1 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f2d7e22f57fccde3b8d09e796720f90e10cb1960 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 5a9a6f8d38374103fa5aa601b4dd4814b01f0727 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f02721fc60967327cf625a36f5fd4f65ea2e7401 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f5d8a1089d853b2a7aab6878dff237f08d184fa8 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 4725d3aeb8fd43cb267b17134fcb383f0ee979ae ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 5762a6ffed20d8dc7fcf3b0ebace0d6194a7890d ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- bfb5cd440b1a9dae931740ba5e4cd0f02d0f5ff5 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- c9227118a5e58323a041cdd6f461fea605fa8e2d ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 3b03c197a1581576108028fe375eb4b695cb3bb9 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 95203fc7a90a1268a499120a7dbbba10600acfe9 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e852f3cd9b4affb14b43255518e7780675246194 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8f86a6af73e2c5f1417e27ebbcc8859922b34e36 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e20fe8b9b03208ef3ded0182ca45fb49617fd270 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a20310fb21168c4f7a58cbc60229b2e730538cdf ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 2845bbecdd2924831d87a9158a7c8ea8e9f90dbd ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ab3f86109142254fa4a5e29b5382c5b990bb24b5 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 0e1a9f2d23fbe366de141d5b4ed9d514bd093ef0 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e3dd84b6b16392c401da82256b50dedab1c782e5 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 80819f5d8c9419ec6c05cafa4fe6e8d2357dcf08 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 81c3f5b864d5d52bb0b272c66de66510fe5646ea ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 567609b1234a9b8806c5a05da6c866e480aa148d ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ef2d60e5f49b6fa87206c5cdeb412d05142db57e ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 98e5c06a0cc73ba3c0e8da2e87cd28768c11fc82 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 6cae852d3dec6bb56bf629ca50fbc2177d39e13c ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- b897e17e526fb9c8b57c603a1291f129ed368893 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ae9254a26aff973cab94448e6bf337c3aba78aec ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e078e4a18e5a921f899d7e2cf468a5c096f843a4 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 187618a2aa7d5191df7ff6bfc3f8f2c79922cb08 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- cc6fcfa4f7a87cb7aafbf9c04fe5d3899d49356c ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 47cccda8db8d8d12ce5a19459c3abbc34ef4ee56 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 346a2ca7be2134703a02647c37ca1e4188e92f48 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e8ff784c7324e3ec1ec77ac972007a9003aa1eaa ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 6d674893f4b24621bcb443a5cc06bf8b0603ca61 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 2d5177bd3dc00484e49c12644666a4530f1d47dc ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 7d9a7e63d06146d7fdb2508a58a824e1766fb164 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- cca398a147f0d0d15e84b7ab32f15941397925ae ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a6232db329f3a17752e98cfde6a8d8a0eed16c7d ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ea4a6158e73258af5cf12ed9820704546a7a2860 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e3b49170d592763b8f4c9e5acd82d5dab95d55b5 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f4bbdbabaaca83e055e91affc49024359b5cfe82 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 63d0f103c575e5da4efa8d0b2166b880180278b0 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 5c94e2b608895536d0cbb28aff7ae942ab478162 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 9426382ae54d9eb8a0a3e9d28011b3efae06e445 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 32d16ea71dd8394c8010f92baf8b18c4a24890ec ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 02963ce0a9eb32551a3549ccd688d8f480ab6726 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- c9c8c48aba627d80e17b2d3df82ca67ca59708db ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e9f6714d3edeb9f4eeefbba03066f7b04fe8a342 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 2fe80530d8f4c70d25f5cfe398240025e7cb9a6a ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8892b8399b26ae0aade9dd17cc8bfe41e03c69ed ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f9090fddaded97b77e3e47b58bf88b254066bd9b ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 9b20893a49cf26644926453ef043800e26f568df ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 220156bceced19f38058b357285cf5a304f70865 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f16498ab51919b0178189839345bd6809325581f ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e3d07194bc64e75ac160947a935cc55b3d57fac9 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 72c7ef62b5e7ebe7dcd2caf64674f2c517e083a2 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 02cb4e81341a9a16f79882fccacce3d70805f827 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 6117be984d247ddc406403eebb8221fd2498669d ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a6c15950afb8ef11a624a9266ae64cef417f8eff ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8ab45d22c5c66a9a2bb4ebb3c49baa011b4a321c ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- fb7d23c6c480a084d5490fe1d4d3f5ac435b3a37 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8aced94d44c3467f109b348525dc1da236be4401 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 2759698a94a514a3f95ec025390fe83f00eb53cd ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- eb821b54eede052d32016e5dd8f1875995380f4d ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 0607d8e3c96ecb9ea41c21bcc206d7b36963d950 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ddc5f628f54d4e747faece5c860317323ad8cd0a ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a3bcfa3cb2785f5e705c7c872c3bd17cfb39e6a9 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 53da761496ca2a63480e006310c4f8435ccb4a47 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- aabef802361db3013dde51d926f219ab29060bc2 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 0ec64179e5a5eb6bba932ec632820c00b5bf9309 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 69fb573a4a0280d5326f919cf23232d3b008ca14 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 956a36073bd8020f7caf12cd2559364ae10cf8d3 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 68a7f0ba48a654800f2e720a067e58322ff57c58 ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a573df33ace74281834b165f2bacf8154fd6128f ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 303e89cffb01c26c8e946f515ed5cafe2569882e ---- +ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 3dab9f6562ecb0408d9ece8dd63cc4461d280113 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1da744421619e134ed3ff2781b4d97fee78d9cd4 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d884adc80c80300b4cc05321494713904ef1df2d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d2ff5822dbefa1c9c8177cbf9f0879c5cf4efc5c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 05d2687afcc78cd192714ee3d71fdf36a37d110f ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ace1fed6321bb8dd6d38b2f58d7cf815fa16db7a ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e0f2bb42b56f770c50a6ef087e9049fa6ac11fb5 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6226720b0e6a5f7cb9223fc50363def487831315 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f2df1f56cccab13d5c92abbc6b18be725e7b4833 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f1e9df152219e85798d78284beeda88f6baa9ec7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 819d6aceeb4d31c153de58081b21ad4f8b559c0e ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b0e84a3401c84507dc017d6e4f57a9dfdb31de53 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4186a2dbbd48fd67ff88075c63bbd3e6c1d8a2df ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 58d692e2a1d7e3894dbed68efbcf7166d6ec3fb7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b67bd4c730273a9b6cce49a8444fb54e654de540 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 52bb0046c0bf0e50598c513e43b76d593f2cbbff ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fc2201e660014c5d91fec8e3c3a3fa5a66dcf33b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 179a1dcc65366a70369917d87d00b558a6d0c04d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6da04adff0b96c5163b0c2530028b72be2fd26fd ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 07eaa4ce2696a88ec0db6e91f191af1e48226aca ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 637eadce54ca8bbe536bcf7c570c025e28e47129 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1a4bfd979e5d4ea0d0457e552202eb2effc36cac ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 00c5497f190172765cc7a53ff9d8852a26b91676 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f41d42ee7e264ce2fc32cea555e5f666fa1b1fe9 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9117cdbb48ffc458d809715c6ab6bc6b416ef621 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b372fdd54bab2ad6639756958978660b12095c3c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2dc5d68491eb3c73ae8478bf6edef80b18564a13 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4251bd59fb8e11e40c40548cba38180a9536118c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f2834177c0fdf6b1af659e460fd3348f468b8ab0 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7cdfaceebe916c91acdf8de3f9506989bc70ad65 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 806450db9b2c4a829558557ac90bd7596a0654e0 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c4cde8df886112ee32b0a09fcac90c28c85ded7f ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a885d23bab51b0c00be2780055ff63b3f3c1a4c6 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 555b0efc2c19aa8cf7c548b4097bd20a73f572ca ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5915114cdca6f09fa2355162a43596f5d20273be ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 451561c252323e74696dbe0be36601c95a75a8c3 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3c0a65226f038c58fc6d6ed525f38fc00b3579b7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2e6d110fbfa1f2e6a96bc8329e936d0cf1192844 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 39229db70e71a6be275dafb3dd9468930e40ae48 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f9bbdc87a7263f479344fcf67c4b9fd6005bb6cd ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 81279eeac5c525354cbe19b24a6f42219407c1f9 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4e99d9ab2acfaf2ebb4b150736590d6a4e33f449 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 13ba1d87ab8fc45d2aed25662bf91053b0db5f9f ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2454ae89983a4496a445ce347d7a41c0bb0ea7ae ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9c0c2fc4ee2d8a5d0a2de50ba882657989dedc51 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c68459a17ff59043d29c90020fffe651b2164e6a ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 832b56394b079c9f6e4c777934447a9e224facfe ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9f51eeb2f9a1efe22e45f7a1f7b963100f2f8e6b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 43ab2afba68fd0e1b5d138ed99ffc788dc685e36 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 50af864298826feaf94772982bbc7b222b4b4242 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d9671e15703918048982c9ff4e2e0fef21ede320 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 75c161cbc017a7d176dd0d7b937db26b3ce637a1 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 84968314ddcbaa0e4b685c71c6ea5524b3aefc80 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 52ab307935bd2bbda52f853f9fc6b49f01897727 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b01824b1aecf8aadae4501e22feb45c20fb26bce ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c5df44408218003eb49e3b8fc94329c5e8b46c7d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9ce1193c851e98293a237ad3d2d87725c501e89f ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e648efdcc1ca904709a646c1dbc797454a307444 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 20ef1924b832a3788849793c0ee6b46dd00d4520 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 46c9a0df4403266a320059eaa66e7dce7b3d9ac4 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 53ed0d43ab950d4deeefd238c7685dabef943800 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3410fdc42075bd788a78f4b2a68c5e2cc0930409 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bca0cb7f507d6a21a652307737a57057692d2f79 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 07c20b4231b12fee42d15f1c44c948ce474f5851 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 708b8dda8e7b87841a5f39c60b799c514e75a9c7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6745f4542cfb74bbf3b933dba7a59ef2f54a4380 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2da2b90e6930023ec5739ae0b714bbdb30874583 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9b426893ce331f71165c82b1a86252cd104ae3db ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4748e813980e1316aa364e0830a4dc082ff86eb0 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a67bf61b5017e41740e997147dc88282b09c6f86 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- be53c1f33107d6891c47c784aeadd6e5ddf78e8c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4c39f9da792792d4e73fc3a5effde66576ae128c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 92a97480edcc0f0de787a752bf90feed0445dd39 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ccde80b7a3037a004a7807a6b79916ce2a1e9729 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a28d3d18f9237af5101eb22e506a9ddda6d44025 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 572ace094208c28ab1a8641aedb038456d13f70b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5593dc014a41c563ba524b9303e75da46ee96bd5 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2b93f2a91e0791be3ffda1f753aa6c377bcab4d3 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9a4b1d4d11eee3c5362a4152216376e634bd14cf ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2b7f5cb25e0e03e06ec506d31c001c172dd71ef6 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9a119924bd314934158515a1a5f5877be63f6f91 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6eeae8b24135b4de05f6d725b009c287577f053d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0c4269a21b9edf8477f2fee139d5c1b260ebc4f8 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9ee861ae7a7b36a811aa4b5cc8172c5cbd6a945b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ac36642ce1cde75b222e20f585ddfd240f064da2 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bdf2e667f969e5c22985dd232fe3f107fe26e750 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c76852d0bff115720af3f27acdb084c59361e5f6 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 15b9129ec639112e94ea96b6a395ad9b149515d1 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ead94f267065bb55303f79a0a6df477810b3c68d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3cb5ba18ab1a875ef6b62c65342de476be47871b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fa44e6b579917814740393efc0b990e0fbbbdaf3 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ba8d148121b1dbba444849fe9549f36a7d17db28 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bcd57e349c08bd7f076f8d6d2f39b702015358c1 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7a7eedde7f5d5082f7f207ef76acccd24a6113b1 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ac1cec7066eaa12a8d1a61562bfc6ee77ff5f54d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dbc18b92362f60afc05d4ddadd6e73902ae27ec7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 386d1af07bf1f32fac5e97612441488894f2ffed ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 50c90666c4de8ac93accdf4040e3eb010a82a46a ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0ca61d4c68dad68901f8a7364dd210ef27a8b4c6 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 101fb1df36f29469ee8f4e0b9e7846d856b87daa ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6acec357c7609fdd2cb0f5fdb1d2756726c7fe98 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6bca9899b5edeed7f964e3124e382c3573183c68 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5f23379c496942ea6fe898a7a823b65530c126a7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9374a916588d9fe7169937ba262c86ad710cfa74 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f4fa1cb3c3e84cad8b74edb28531d2e27508be26 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 615fc1984b0cc09c8eeab51a1d1c4e05b583b4a7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e4582f805156095604fe07e71195cd9aa43d7a34 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 20f202d83bdf1f332a3cb8f010bcf8bf3c2807bd ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5eb0f2c241718bc7462be44e5e8e1e36e35f9b15 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2792e534dd55fe03bca302f87a3ea638a7278bf1 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ec3d91644561ef59ecdde59ddced38660923e916 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 79cfe05054de8a31758eb3de74532ed422c8da27 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9ee31065abea645cbc2cf3e54b691d5983a228b2 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 86fa577e135713e56b287169d69d976cde27ac97 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1b89f39432cdb395f5fbb9553b56595d29e2b773 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0ef1f89abe5b2334705ee8f1a6da231b0b6c9a50 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e70f3218e910d2b3dcb8a5ab40c65b6bd7a8e9a8 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b65df78a10c3bcc40d18f3e926bb5a49821acc31 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8430529e1a9fb28d8586d24ee507a8195c370fa5 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a58a60ac5f322eb4bfd38741469ff21b5a33d2d5 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 00499d994fea6fb55a33c788f069782f917dbdd4 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 291d2f85bb861ec23b80854b974f3b7a8ded2921 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b2ccae0d7fca3a99fc6a3f85f554d162a3fdc916 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6ffd4b0193acf86b6a6e179f8673ed38bad3191d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ff3d142387e1f38b0ed390333ea99e2e23d96e35 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b2a14e4b96a0ffc5353733b50266b477539ef899 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d1bd99c0a376dec63f0f050aeb0c40664260da16 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 78a46c432b31a0ea4c12c391c404cd128df4d709 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 461fd06e1f2d91dfbe47168b53815086212862e4 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4b43ca7ff72d5f535134241e7c797ddc9c7a3573 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 39f85c4358b7346fee22169da9cad93901ea9eb9 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- beb76aba0c835669629d95c905551f58cc927299 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 20c34a929a8b2871edd4fd44a38688e8977a4be6 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ea33fe8b21d2b02f902b131aba0d14389f2f8715 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b7a5c05875a760c0bf83af6617c68061bda6cfc5 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5ba2aef8f59009756567a53daaf918afa851c304 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8b5121414aaf2648b0e809e926d1016249c0222c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6ba8b8b91907bd087dfe201eb0d5dae2feb54881 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5117c9c8a4d3af19a9958677e45cda9269de1541 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- af9e37c5c8714136974124621d20c0436bb0735f ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3c658c16f3437ed7e78f6072b6996cb423a8f504 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1496979cf7e9692ef869d2f99da6141756e08d25 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 58e2157ad3aa9d75ef4abb90eb2d1f01fba0ba2b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0725af77afc619cdfbe3cec727187e442cceaf97 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 685d6e651197d54e9a3e36f5adbadd4d21f4c7e5 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5e062f4d043234312446ea9445f07bd9dc309ce3 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1083748b828dfca6a72014434850da0f2a0579ab ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4c73e9cd66c77934f8a262b0c1bab9c2f15449ba ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 59e26435a8d2008073fc315bafe9f329d0ef689a ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b197b2dbb527de9856e6e808339ab0ceaf0a512d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7184340f9d826a52b9e72fce8a30b21a7c73d5be ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9dfd6bcca5499e1cd472c092bc58426e9b72cccc ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a519942a295cc39af4eebb7ba74b184decae13fb ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6c486b2e699082763075a169c56a4b01f99fc4b9 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 11ec2e08e1796b5914cd9c4830813482753ecfa0 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c53eeaca19163b2b5484304a9ecce3ef92164d70 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3c770f8e98a0079497d3eb5bc31e7260cc70cc63 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 36f838e7977e62284d2928f65cacf29771f1952f ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f9cec00938d9059882bb8eabdaf2f775943e00e5 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 44a601a068f4f543f73fd9c49e264c931b1e1652 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4712c619ed6a2ce54b781fe404fedc269b77e5dd ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5da34fddda2ea6de19ecf04efd75e323c4bb41e4 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3942cdff6254d59100db2ff6a3c4460c1d6dbefe ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 25945899a0067a2dbeeae7a8362a6d68bbc5c6ba ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9c3bbc43d097656b54c808290ce0c656d127ce47 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3d9e7f1121d3bdbb08291c7164ad622350544a21 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b999cae064fb6ac11a61a39856e074341baeefde ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9b9776e88f7abb59cebac8733c04cccf6eee1c60 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dc518251eb64c3ef90502697a7e08abe3f8310b2 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 753e908dcea03cf9962cf45d3965cf93b0d30d94 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dc1fcf372878240e0a1af20641d361f14aea7252 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4fe5cfa0e063a8d51a1eb6f014e2aaa994e5e7d4 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1f2b19de3301e76ab3a6187a49c9c93ff78bafbd ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bb0ac304431e8aed686a8a817aaccd74b1ba4f24 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0cd09bd306486028f5442c56ef2e947355a06282 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1047b41e2e925617474e2e7c9927314f71ce7365 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 146a6fe18da94e12aa46ec74582db640e3bbb3a9 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9e14356d12226cb140b0e070bd079468b4ab599b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b00f3689aa19938c10576580fbfc9243d9f3866c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f62c9b9c0c9bda792c3fa531b18190e97eb53509 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 30d822a468dc909aac5c83d078a59bfc85fc27aa ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 13a26d4f9c22695033040dfcd8c76fd94187035b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ddc5496506f0484e4f1331261aa8782c7e606bf2 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 87afd252bd11026b6ba3db8525f949cfb62c90fc ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5bb812243dd1815651281a54c8191fc8e2bc2d82 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5de63b40dbb8fef7f2f46e42732081ef6d0d8866 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 33fa178eeb7bf519f5fff118ebc8e27e76098363 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- aa921fee6014ef43bb2740240e9663e614e25662 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 81d8788d40867f4e5cf3016ef219473951a7f6ed ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2c23ca3cd9b9bbeaca1b79068dee1eae045be5b6 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2f8e6f7ab1e6dbd95c268ba0fc827abc62009013 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0ec61d4f7208a2713adeafb947f65fdae0947067 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3c9f55dd8e6697ab2f9eaf384315abd4cbefad38 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7b50af0a20bcc7280940ce07593007d17c5acabd ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a7a4388eeaa4b6b94192dce67257a34c4a6cbd26 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 29c20c147b489d873fb988157a37bcf96f96ab45 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- eb8cec3cab142ef4f2773b6fc9d224461a6bf85d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fa8fe4cad336a7bdd8fb315b1ce445669138830c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bb509603e8303cd8ada7cfa1aaa626085b9bb6d6 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6662422ba52753f8b10bc053aba82bac3f2e1b9c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3d3a24b22d340c62fafc0e75a349c0ffe34d99d7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b1f32e231d391f8e6051957ad947d3659c196b2b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5613079f2494808f048b81815bf708debf7339d2 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d7781e1056c672d5212f1aaf4b81ba6f18e8dd8b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a4fb3091a75005b047fbea72f812c53d27b15412 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2e68d907022c84392597e05afc22d9fe06bf0927 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a10aa36bc6a82bd50df6f3df7d6b7ce04a7070f1 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 764cc6e344bd034360485018eb750a0e155ca1f6 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3131d1a5295508f583ae22788a1065144bec3cee ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a2856af1d9289ee086b10768b53b65e0fd13a335 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 125b4875b5035dc4f6bad4351651a4236b82baeb ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5e52a00c81d032b47f1bc352369be3ff8eb87b27 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d97afa24ad1ae453002357e5023f3a116f76fb17 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 138aa2b8b413a19ebf9b2bbb39860089c4436001 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1adc79ac67e5eabaa8b8509150c59bc5bd3fd4e6 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 590638f9a56440a2c41cc04f52272ede04c06a43 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5d3e2f7f57620398df896d9569c5d7c5365f823d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6fcbda4e363262a339d1cacbf7d2945ec3bd83f0 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- babf5765da3e328cc1060cb9b37fbdeb6fd58350 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 038f183313f796dc0313c03d652a2bcc1698e78e ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c231551328faa864848bde6ff8127f59c9566e90 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8df638c22c75ddc9a43ecdde90c0c9939f5009e7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- befb617d0c645a5fa3177a1b830a8c9871da4168 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 35a09c0534e89b2d43ec4101a5fb54576b577905 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b9d6494f1075e5370a20e406c3edb102fca12854 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5047344a22ed824735d6ed1c91008767ea6638b7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a6604a00a652e754cb8b6b0b9f194f839fc38d7c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 127e511ea2e22f3bd9a0279e747e9cfa9509986d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c8c50d8be2dc5ae74e53e44a87f580bf25956af9 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 972a8b84bb4a3adec6322219c11370e48824404e ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 152bab7eb64e249122fefab0d5531db1e065f539 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ef592d384ad3e0ead5e516f3b2c0f31e6f1e7cab ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- cf37099ea8d1d8c7fbf9b6d12d7ec0249d3acb8b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4bf8e89e6784e121ddc32990d586e2276ec84596 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2f6a6e35d003c243968cdb41b72fbbe609e56841 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dd76b9e72b21d2502a51e3605e5e6ab640e5f0bd ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 56823868efddd3bdbc0b624cdc79adc3a2e94a75 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 22757ed7b58862cccef64fdc09f93ea1ac72b1d2 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bfdc8e26d36833b3a7106c306fdbe6d38dec817e ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0425bc64384fe9a6a22edb7831d6e8c1756e2c7e ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- aa5e366889103172a9829730de1ba26d3dcbc01b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 50a9920b1bd9e6e8cf452c774c499b0b9014ccef ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7d6332820eaad3a6d3b0abc93424469a8ef7083a ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 43eb1edf93c381bf3f3809a809df33dae23b50d9 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e64957d8e52d7542310535bad1e77a9bbd7b4857 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4a534eba97db3c2cfb2926368756fd633d25c056 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d4e56f627f94d93c49db40ae5944f880341f4203 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b377c07200392ac35a6ed668673451d3c9b1f5c7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 989671780551b7587d57e1d7cb5eb1002ade75b4 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 14cef2bb3e0de02f306fa37c268d6c276326c002 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b9cb007076542e32f7b99bb18bc6ec424f3b407b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d3ce120c9acc7d9d4ce86aa1f07b027d1c45a9a1 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0b3ecf2dcace76b65765ddf1901504b0b4861b08 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f3050b578081b24e5cf244fa252f385ffca2bf86 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 11b1f6edc164e2084e3ff034d3b65306c461a0be ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c3d5159679d17c1270ad72941922d0f18bdd6415 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 985093bae160419782b3d3cb9151e2e58625fd52 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c04c60f12d3684ecf961509d1b8db895e6f9aac0 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 53d26977f1aff8289f13c02ee672349d78eeb2f0 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 564db4f20bd7189a50a12d612d56ed6391081e83 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 657a57adbff49c553752254c106ce1d5b5690cf8 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 26029c29765043376370a2877b7e635c17f5e76d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- cbf957a36f5ed47c4387ee8069c56b16d1b4f558 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 924da9604d6474fd1be99dffdcc539eaaaa31626 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9840afda82fafcc3eaf52351c64e2cfdb8962397 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3fd37230e76a014cf5c45d55daf0be2caa6948b7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 345d6be7829c6dab359390ebc5e1a7ae0c6d48bb ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a9eeebeddaa20d10881ad505cc362a3a391e15b2 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 225999e9442c746333a8baa17a6dbf7341c135ca ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9513aa01fab73f53e4fe18644c7d5b530a66c6a1 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 048acc4596dc1c6d7ed3220807b827056cb01032 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bfdf98cadedfa6042117cd7a83952ca2f465d26f ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 919164df96d9f956c8be712f33a9a037b097745b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9acc7806d6bdb306a929c460437d3d03e5e48dcd ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a07cdbae1d485fd715a5b6eca767f211770fea4d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 95a83a7de5d3ce84206b9267962c32df4d071c21 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e063d101face690b8cf4132fa419c5ce3857ef44 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a8f8582274cd6a368a79e569e2995cee7d6ea9f9 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- aed099a73025422f0550f5dd5c3e4651049494b2 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7fda0ec787de5159534ebc8b81824920d9613575 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 17852bde65c12c80170d4c67b3136d8e958a92a9 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c63cd9873bf733c068a5f183442ec82873fef1fc ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9946e0ce07c8d93a43bd7b8900ddf5d913fe3b03 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5a45790a8699a384c3d218ac4ca8a53c109fd944 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a5cf1bc1d3e38ab32a20707d66b08f1bb0beae91 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5b01b589e7a19d6be5bd6465e600f84aa8015282 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 178dff753350014f6395f41bc21f1adddf73c8e0 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b372e26366348920eae32ee81a47b469b511a21f ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 66beac619ba944afeca9d15c56ccc60d5276a799 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a0d828fcb1964a578ef3979297c59a41aedba932 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3980f11a9411d0b487b73279346cfae938845e7a ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 93e19791659c279f4f7e33a433771beca65bf9ea ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8a0eee3989abd3a5d6d47d0298bd056a954d379b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 579e2c07bbb39577fa32fed8cb42297c1c5516d8 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2effd7a10798a1e8e53bb546a67b2ccdea882c50 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fd5f111439e7a2e730b602a155aa533c68badbf8 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0aa1ce356c7c3d53d6ee035b4c7bcf425e108cdc ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f347c6da5e83b137c337f9ccb190090c27cfc953 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- abc2e538c6f2fe50f93e6c3fe927236bb41f94f4 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b38020ae17ed9f83af75ce176e96267dcce6ecbd ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 93ad8da5a8c6ddcbe67abae2cc4a7aad8084e736 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 52654c0216dcbe3fa2d9afb1de12c65d18f6a7a4 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9b63b3bc493a4a44ba1d857c78e4496e40f1d7b8 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ef9395f5ffe75f4e43d80cd1fa7b34c8a4db66fe ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c5083752d5d02d6c46bc2f18ba53a28d119af5b9 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 24effa4861d6d1e8cffe848ae63fa2ed40be03f6 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9aa93b5890acb152c5824a8f75c221cf1addfd1b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3d203a0da0c709d301e973a9fe3569efd1fb2bd3 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 57a561cda141a0fed3129f4f3488e3b91805e638 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4043468de4fc448b6fda670f33b7f935883793a7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- edf9fc528277a53ec37d1bd79fb4f8608cce11ae ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6e1be3032d521e3bf2f49fc87f82c8f978079ea6 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bf2083922b7bccc31917bf9cdb74e3d4892c2600 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- eba67171bf6ea653dfb6a6ae288f3c1d10829870 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 277be842bf30848e7292a931169bd4c8ff726dee ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 79ec3a5191f9dfd398d98fe7372ad841f34876ed ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b919010b0459b2540fb609c5d1aad0b8dc0fab01 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 105fea3ef3be4b47cc3602423919329162dfcecf ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b5278c514068f469f2fca7638ef1e1b27556a37a ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7f34a25eaa6de187797442bc6e0514289d77fed2 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a935501a2f62d103cf9d69d775399dae2e7dfead ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 12b32450c210cec1fdd8b2c19d564776e8054aa3 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 26719d252dd8e3a53c08da2ed3c3a8d62fbbc30a ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 55f0245f3ee538ec49e84bcb28c33b135a07f0b9 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d2c1bd80350f692c5c2298cb88859564ec0a061b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 48af0ac87dc3beef4d3e6c7982b158d50f7b2a6e ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 039bfe373c990fc6db3808d255abaff91235e82f ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dafe71a3e2d5cfb9b80805a26d5442ca5ad8332f ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d5625170b248edc6a570c977fb1f8e7430ffd0b5 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8f043f00d5161794ef538802dcc9ba75e375c058 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1a5885a4c5983242b1356b57eafeb59a9d5c0d0f ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8c982c1f50bd7ae3bc4a1afc09e9ad11aecd434f ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 273400f95ae036c01d4b0fd7a7ca6ab160efd958 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 233e3ffe0ef35dbabe49340ba567499690dcc166 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7b675bf555e89e708f1b8f79bd90796dd395837b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e7252e217fe6d8f05dd50f6e125c33a1c6fff602 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- cbbb6b349e8d0557e7e55e2d05819d6bdaed3769 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ebee400cfa4a532018ee904c22c7e3e6619ca4de ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e10706b6c167454a723636e0929061201a2f461b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 80b60fafa94b794fa77fab85e1df66f52598f3ac ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4e509130b7dfc97eeb4a517d6c9c65a8d6204234 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7d49273897bd317323e0a3bbbc01b76e83370f0c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c4d5e7c9dab813adf9bfd8198bb9bb00c9a9503b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4a061029eddee38110e416e3c4f60d553dafc9e5 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 323259cc3d977235f4e7e8980219e5e96d66086e ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 80d01f0ef89e287184ba6d07be010ee3f16a74d9 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fd47d6b11833870ce23102a3373b7a50a1b45d00 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 58fa2c401856f93712ae6cc45d4dc3458ee4b4f4 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dc922f3678a1b01cac2b3f1ec74b831ffec52a71 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2405cf54ac06140a0821f55b34c1d54f699e8e73 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 579d1b8174c9be915c0fa17a67fc38cc6de36ad7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8501e908bb8c531dfa75cef33fcec519027f4e5b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a7129dc00826cb344c0202f152f1be33ea9326fe ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 85c6252b54108750291021a74dc00895f79a7ccf ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1accc498c40e684f870d38b7d128739a0ebf57cf ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 27ceafbb3f74b4677d5bae6c7ea031de07c6cfad ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7c60b88138b836307bdde0487c4ffb82121b1c5e ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 70094734d601e1220c95ac586fdffbda3a23e10b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 69a56c4e2addd1ec53bb40e8a18f52353d1fc28c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5962862e9ba0a1c9a14306688973946f6f7ce75c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 03bfdb16cd7cc6e1c7c8d3b59552da7de3d82d1c ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 71cd409660bc5b8c211dc7c51afae481d822d593 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 35ddb45b41b3de2d4f783608ad8d8752f6557997 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 30472cf3132b8c03e528b23d1c7533de740e28ab ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1dc09f0ece61ef2bd629e8bfe532aa24f4f8e0c2 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ae54e18d7ca7bc8b8fbc667119fb60b25f0f3871 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 207bf7bf30651c3284408d87d7c499e43db6bc83 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9b975d9fcf5924800f9ea5d68d7d79f743ca9af7 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d7e59d3ef86beb3b3b3e53a610af122b2220841b ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0651f0964ba5a33257ebbda1e92c7a1649a4a058 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 062aafa396866d4dfe8f3fd2f32d46fa7c01b6dd ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ea6af04977c197fd07ab812d394dcb61feebaf67 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 657e98094f0f669809bc0e47f3d6bd9a8124cf32 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7c35350e5bc4fe113330818ca6784ff368c5ffef ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 620dbee78ed8481d108327c4c332899df7cb8ef4 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6383196b7bb0773c0083a2a3d49a95e5479715bf ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9066712dca21ef35c534e068f2cc4fefdccf1ea3 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 933d23bf95a5bd1624fbcdf328d904e1fa173474 ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1f66cfbbce58b4b552b041707a12d437cc5f400a ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7156cece3c49544abb6bf7a0c218eb36646fad6d ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 33ebe7acec14b25c5f84f35a664803fcab2f7781 ---- +254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d with predicate ----- (, ) ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- +a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 37c5e30c879213e9ae83b21e9d11e55fc20c54b7 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 40fa69883bd176d43145dfe3a1b222a02ffbb568 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e9e1257eb4dddedb466e71a8dfe3c5209ea153be ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5a9a6f8d38374103fa5aa601b4dd4814b01f0727 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e01ae09037b856941517195513360f19b5baadfa ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 531ea8f97a99eee41a7678d94f14d0dba6587c66 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 2643676ceeeed5a8bb3882587765b5f0ee640a26 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 8d453c412493d6305cb1904d08b22e2ffac7b9c2 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 0554721362df66bc6fcb0e0c35667471f17302cc ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- dbc6dec2df75f3219d74600d8f14dfc4bfa07dff ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 0196759d8235df6485d00e15ed793c4c8ec9f264 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d05a8c98370523bc9f9d6ec6343977d718cb9d1f ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d4106b19e708dcec1568484abbd74fe66000cd68 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9cc32b71b1bc7a9063bd6beffd772a027000ca8d ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a6bdc3a0d1ed561b4897a923a22718b5320edf39 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 37dd8d32093343ea7f2795df0797f180f9025211 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 2f17c55b49f70d94f623d8bceec81fdd35f27cb4 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- b5426f216f27fce14d7ba6026be01cc53fd97de0 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5cae29983c6facc24f2bafe93736d652fc189b63 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e5fd9902fbabd3b2ea6fe1e8759e160a947bae80 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9df0c499758875f9efdfb86a7ede75bab47118a6 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d8a35e02b86bb17a388c01cc9f2f99ca1f77c564 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3642831530100f3aa8068abe0d8dcb98606f2fb2 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 2c8391d781911ce94de0f01bc38a0f0f34869dc2 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 6c57eb07c401aad335b9ac5e33a3ab3c96cd28b2 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 65e07bd33d63095131b0e7d0c798c8c140398617 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 78e5f526ada51e17d1c795db2c4bbc40b40c5ebf ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 6b759b7fe8a45ca584b37accb4b94a37634726f4 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 60a7de486651ef524ef8f39ed035a999b1af7e40 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e723b4ae992aa1ca29d00c8cb37d646f7e3d8bda ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3c91985fe47eb9b0a26dbb2940ae126794de62bb ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 1a55397f625b4bdda93cf9acecbb2560f07e197f ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 40914bacba62d254ac1008caa0051d34bc7c9f60 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 2a743455989fe0732d024c33de73cd727c4bc33a ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 1a576118fa7d86d43c74d6a653ccd76a2aad7f0a ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 8fda57e5c361758d34a7b11da8cdfb49df03e1c9 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 81931ad08b90c0fc4e15ae55a37890c80e6d85bc ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- cf70cb8c48de126cc913ef63a881963e8a25e798 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e65e2e59367839a18d97511bb91b9fca71597466 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 604a25f42d7e96d04f80d3b41171519710e4d1f0 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a113b99248c8da0b02b7a4031b8780fac330c68f ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 518c464a47852c7ead791ce5b6093ed552cf8106 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- f0f5f115b232fc948b4228f4c6bd78206763a995 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 958bcf854cbd679333a34bcbd362cda06fc49852 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 58fad3084283604d8c5be243e27a8ad6d4148655 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d2c7c742d0a15ea7e8aabf68d04ec7cc718255a1 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- cc30bf92da0ef0b1f57d2a9f083014872d33d9f5 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 04b8c41aa3ac8077813e64d4dcae5f30845f037e ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 83ef7e4b057bc3b1b06afcfea979c7275d39a80a ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 775127943335431f932e0e0d12de91e307978c71 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- fa754b9251adc4a981c52ddf186fe96e7daddf3e ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 457cc26cef42f2565aeeb4e9b9711d9e8ba8af03 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 89b9eb475dde60c91a2c4763de79dfa6c6268d9c ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9b0197070d48ac3cf405efda55bb5802953b35f2 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9ee0e891a04a536a1bbe14ddc36c07c5b5658e94 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- dbc201a977360215622ff162f9c7aec413322a57 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 49e7e7cfeab5ef837243ec96328d4319a5751988 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 4d046a2fd233a4d113f7856a45ae8912503a1b5d ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 11ab75a6827961227ea5049b791db422a9179e1a ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 717fa808ec6600748e2a7d040a109b304ba54fe0 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5a3a15a7c307060f6f31e940d53d2fdaef5a220c ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3f91d0789fac756deccc0c892e24b9fac0430ff0 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9a3c2c958a1cc12031ad59ce0dba579c9407115a ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 96363db6390c601a8b312364e6b65a68191fcffb ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 285d3b5bc5aa5ac7be842e887c0d432f848d2703 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- c93f2091b62505efd1c3cb0721b360c9aad1c8a3 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5789d7eb7247daca4cbda1d72df274b49360d4aa ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5d3cc6a3f1b938135e1a7c1b5cdc02d765da52be ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3321a8ea4d008e34c9e5dcd56cf97aeae1970302 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- da97cf5b64c782a3e5d8c0b9da315378876f6607 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 6863e97b9d28029415b08769a2305f2e69bec91c ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9cc3cb9d08e2a16e0545ab5ca2b9bd8f374bb0de ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a24c7c9129528698e15c84994d142f7d71396ee5 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 7630226b808d644b859d208fa2f0dbeab58cd9c1 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 40c6d66ea0b763d6c67e5a6102c6cc5c07bba924 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 91ac4dc3f45d37a4f669e5dbb4c788d2afaf3e03 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a08c1dc7074610984ab9035f5481276a1b074af2 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 8b137891791fe96927ad78e64b0aad7bded08bdc ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d5199748889e0379b08f1bd0d49b5deac296510d ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 35ba86802ce4b730ce3c7e80831d0208c67bd575 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 020fe6bd35e7c1409b167c3db3e4e96fdd96b9be ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 34572b37e0f53e0193e10c8c74ea3a8d13a16969 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 7d2a9f4a436ed7ab00a54bbab5204c8047feca0f ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 0571d0d9fb8c870e94faa835625f8b560c176424 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 7b1ee8384dbd54e6b5c6aef9af1326f071f7f82e ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 8f600cb3cd4749e0a098e07acb7d626ca7293004 ---- +13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 76adffec249ee11a33a6266947c14ba61f7d50a8 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- f606937a7a21237c866efafcad33675e6539c103 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- e14e3f143e7260de9581aee27e5a9b2645db72de ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 257a8a9441fca9a9bc384f673ba86ef5c3f1715d ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 18e3252a1f655f09093a4cffd5125342a8f94f3b ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 1873db442dc7511fc2c92fbaeb8d998d3e62723d ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 365fb14ced88a5571d3287ff1698582ceacd80d6 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 5ff864138cd1e680a78522c26b583639f8f5e313 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- ea81f14dafbfb24d70373c74b5f8dabf3f2225d9 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 583e6a25b0d891a2f531a81029f2bac0c237cbf9 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 07996a1a1e53ffdd2680d4bfbc2f4059687859a5 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 01eac1a959c1fa5894a86bf11e6b92f96762bdd8 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 6d1212e8c412b0b4802bc1080d38d54907db879d ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 57a4e09294230a36cc874a6272c71757c48139f2 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- cfb278d74ad01f3f1edf5e0ad113974a9555038d ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- fbe062bf6dacd3ad63dd827d898337fa542931ac ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 0974f8737a3c56a7c076f9d0b757c6cb106324fb ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 3323464f85b986cba23176271da92a478b33ab9c ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- c34343d0b714d2c4657972020afea034a167a682 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 4e6bece08aea01859a232e99a1e1ad8cc1eb7d36 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 7c36f3648e39ace752c67c71867693ce1eee52a3 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- a988e6985849e4f6a561b4a5468d525c25ce74fe ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 55e757928e493ce93056822d510482e4ffcaac2d ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 1090701721888474d34f8a4af28ee1bb1c3fdaaa ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 2054561da184955c4be4a92f0b4fa5c5c1c01350 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- f2c8d26d3b25b864ad48e6de018757266b59f708 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 15941ca090a2c3c987324fc911bbc6f89e941c47 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- f78d4a28f307a9d7943a06be9f919304c25ac2d9 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 3e2ba9c2028f21d11988558f3557905d21e93808 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 772b95631916223e472989b43f3a31f61e237f31 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- be06e87433685b5ea9cfcc131ab89c56cf8292f2 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 898d47d1711accdfded8ee470520fdb96fb12d46 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- e5c0002d069382db1768349bf0c5ff40aafbf140 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 654e54d200135e665e07e9f0097d913a77f169da ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- e825f8b69760e269218b1bf1991018baf3c16b04 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 13dd59ba5b3228820841682b59bad6c22476ff66 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 583cd8807259a69fc01874b798f657c1f9ab7828 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- def0f73989047c4ddf9b11da05ad2c9c8e387331 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 619c11787742ce00a0ee8f841cec075897873c79 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- edd9e23c766cfd51b3a6f6eee5aac0b791ef2fd0 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 53152a824f5186452504f0b68306d10ebebee416 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 8c3c271b0d6b5f56b86e3f177caf3e916b509b52 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 3776f7a766851058f6435b9f606b16766425d7ca ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 619662a9138fd78df02c52cae6dc89db1d70a0e5 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 09c3f39ceb545e1198ad7a3f470d4ec896ce1add ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- a8a448b7864e21db46184eab0f0a21d7725d074f ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 5d996892ac76199886ba3e2754ff9c9fac2456d6 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 6a252661c3bf4202a4d571f9c41d2afa48d9d75f ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 867129e2950458ab75523b920a5e227e3efa8bbc ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 1b27292936c81637f6b9a7141dafaad1126f268e ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- b3cde0ee162b8f0cb67da981311c8f9c16050a62 ---- +29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- ec28ad575ce1d7bb6a616ffc404f32bbb1af67b2 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 2845bbecdd2924831d87a9158a7c8ea8e9f90dbd ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- ae9254a26aff973cab94448e6bf337c3aba78aec ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e078e4a18e5a921f899d7e2cf468a5c096f843a4 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 187618a2aa7d5191df7ff6bfc3f8f2c79922cb08 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- cc6fcfa4f7a87cb7aafbf9c04fe5d3899d49356c ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 47cccda8db8d8d12ce5a19459c3abbc34ef4ee56 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 346a2ca7be2134703a02647c37ca1e4188e92f48 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e8ff784c7324e3ec1ec77ac972007a9003aa1eaa ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- a6232db329f3a17752e98cfde6a8d8a0eed16c7d ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e3b49170d592763b8f4c9e5acd82d5dab95d55b5 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- f4bbdbabaaca83e055e91affc49024359b5cfe82 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 32d16ea71dd8394c8010f92baf8b18c4a24890ec ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 02963ce0a9eb32551a3549ccd688d8f480ab6726 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- c9c8c48aba627d80e17b2d3df82ca67ca59708db ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e9f6714d3edeb9f4eeefbba03066f7b04fe8a342 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 2fe80530d8f4c70d25f5cfe398240025e7cb9a6a ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8892b8399b26ae0aade9dd17cc8bfe41e03c69ed ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- f9090fddaded97b77e3e47b58bf88b254066bd9b ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 9b20893a49cf26644926453ef043800e26f568df ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 220156bceced19f38058b357285cf5a304f70865 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- f16498ab51919b0178189839345bd6809325581f ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e3d07194bc64e75ac160947a935cc55b3d57fac9 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 72c7ef62b5e7ebe7dcd2caf64674f2c517e083a2 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 02cb4e81341a9a16f79882fccacce3d70805f827 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 6117be984d247ddc406403eebb8221fd2498669d ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- a6c15950afb8ef11a624a9266ae64cef417f8eff ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8ab45d22c5c66a9a2bb4ebb3c49baa011b4a321c ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- fb7d23c6c480a084d5490fe1d4d3f5ac435b3a37 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8aced94d44c3467f109b348525dc1da236be4401 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 2759698a94a514a3f95ec025390fe83f00eb53cd ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- eb821b54eede052d32016e5dd8f1875995380f4d ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 0607d8e3c96ecb9ea41c21bcc206d7b36963d950 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- ddc5f628f54d4e747faece5c860317323ad8cd0a ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- a3bcfa3cb2785f5e705c7c872c3bd17cfb39e6a9 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 0ec64179e5a5eb6bba932ec632820c00b5bf9309 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 2516f01f8f44e4e51781ce4ffc642a90318eac4f ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e2b3f8fa48c3fcc632ddb06d3ce7e60edfdb7774 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- ffd109b1fd9baf96cd84689069c08e4eb4aafbdd ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- bb1a03845dce61d36bab550c0c27ae213f0d49d0 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 471e9262fa57e94936227db864b4a9910449e7c3 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 897eb98fab4ad5da901acb2a02f1772b124f1367 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 884f96515df45350a2508fe66b61d40ae97a08fd ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 017178f05f5f3888ca4e4a8023b734f835d1e45d ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8657fb633aa019e7fa7da6c5d75a2a7a20f16d48 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 339a53b8c60292999788f807a2702267f987d844 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- cb6efbe9b6f2f1026584d7e41d9d48f715b421f9 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8d7bbde33a825f266e319d6427b10ab8dbacb068 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e1433def74488e198080455ac6200145994e0b4d ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- ded8b1f7c1bc6cfe941e8304bacfd7edfea9e65e ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- cc83859080755a9fb28d22041325affc8960c065 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- f850ba24c5a13054e0d2b1756113ff15f5147020 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8a9b0487329888d6ef011e4ce9bbea81af398d7b ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 0164e110c8627e46b593df435f5e10b48ff6d965 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 64a6591aa585a5a4022f6ef52cfb29f52d364155 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 4d84239e7ae4518001ff227cc00e0f61010b93bd ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 5619aa6924478084344bb0e5e9f085014512c29b ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 52727504bfd2a737f54c9d3829262bd243fff6e7 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e96b62e0ff7761af2396c4c9d7c97a1adb181fe5 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 5480e62826238ee672da7751ecc743ad90cfbdad ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 1551ce455aca2c2059a1adbffe7eb0a7d351af36 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 3412786d165cd33021de828311c023d563d12c67 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 86f877579dd4cf7453c44b7f436218c83a1e67ad ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 4617b052cbe046772fa1ff1bad1d8431b3f5abd6 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8bd614f28843fb581afdf119a5882e53b0775f04 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- edf32c915f627a2d75fe7b23ba35e1af30b42afc ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 82df59b0d5221a40b1ea99416a05782de0bb1a75 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 6d413ee926d49e1a00414bd20364d88db1466790 ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 0af48710062adb0db7b6c02917d69a156a8fad1f ---- +b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- b4796b300b291228dcef8ff7fc7af7d0a7eae045 ---- diff --git a/setup.py b/setup.py index 2845bbecd..2004be010 100755 --- a/setup.py +++ b/setup.py @@ -95,7 +95,7 @@ def build_py_modules(basedir, excludes=[]): license="BSD", url="https://github.com/gitpython-developers/GitPython", packages=find_packages(exclude=("test.*")), - package_data={'git': ['**/*.pyi', 'py.typed']}, + # package_data={'git': ['**/*.pyi', 'py.typed']}, include_package_data=True, py_modules=build_py_modules("./git", excludes=["git.ext.*"]), package_dir={'git': 'git'}, From 82b131cf2afebbed3723df5b5dfd5cd820716f97 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 30 Jun 2021 18:41:06 +0100 Subject: [PATCH 0524/2375] Type Traversable.traverse() better, start types of submodule --- git/config.py | 4 +- git/index/base.py | 5 +- git/objects/base.py | 9 +- git/objects/commit.py | 46 ++++++---- git/objects/output.txt | 0 git/objects/submodule/base.py | 116 ++++++++++++++----------- git/objects/submodule/util.py | 10 ++- git/objects/tree.py | 54 +++++++++--- git/objects/util.py | 157 ++++++++++++++++++++++++++++------ git/refs/head.py | 8 +- git/refs/symbolic.py | 4 +- git/remote.py | 16 ++-- git/repo/base.py | 16 ++-- git/types.py | 9 +- git/util.py | 39 +++++---- test/test_commit.py | 13 +++ test/test_tree.py | 2 +- 17 files changed, 352 insertions(+), 156 deletions(-) create mode 100644 git/objects/output.txt diff --git a/git/config.py b/git/config.py index cc6fcfa4f..7982baa36 100644 --- a/git/config.py +++ b/git/config.py @@ -29,8 +29,6 @@ import configparser as cp -from pathlib import Path - # typing------------------------------------------------------- from typing import Any, Callable, IO, List, Dict, Sequence, TYPE_CHECKING, Tuple, Union, cast, overload @@ -330,7 +328,7 @@ def _acquire_lock(self) -> None: "Write-ConfigParsers can operate on a single file only, multiple files have been passed") # END single file check - if isinstance(self._file_or_files, (str, Path)): # cannot narrow by os._pathlike until 3.5 dropped + if isinstance(self._file_or_files, (str, os.PathLike)): file_or_files = self._file_or_files else: file_or_files = cast(IO, self._file_or_files).name diff --git a/git/index/base.py b/git/index/base.py index e2b3f8fa4..debd710f1 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -3,7 +3,7 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php -from git.refs.reference import Reference + import glob from io import BytesIO import os @@ -74,6 +74,7 @@ if TYPE_CHECKING: from subprocess import Popen from git.repo import Repo + from git.refs.reference import Reference StageType = int @@ -1191,7 +1192,7 @@ def handle_stderr(proc: 'Popen[bytes]', iter_checked_out_files: Iterable[PathLik assert "Should not reach this point" @default_index - def reset(self, commit: Union[Commit, Reference, str] = 'HEAD', working_tree: bool = False, + def reset(self, commit: Union[Commit, 'Reference', str] = 'HEAD', working_tree: bool = False, paths: Union[None, Iterable[PathLike]] = None, head: bool = False, **kwargs: Any) -> 'IndexFile': """Reset the index to reflect the tree at the given commit. This will not diff --git a/git/objects/base.py b/git/objects/base.py index 884f96515..6bc1945cf 100644 --- a/git/objects/base.py +++ b/git/objects/base.py @@ -17,15 +17,12 @@ from typing import Any, TYPE_CHECKING, Optional, Union -from git.types import PathLike +from git.types import PathLike, Commit_ish if TYPE_CHECKING: from git.repo import Repo from gitdb.base import OStream - from .tree import Tree - from .blob import Blob - from .tag import TagObject - from .commit import Commit + # from .tree import Tree, Blob, Commit, TagObject # -------------------------------------------------------------------------- @@ -71,7 +68,7 @@ def new(cls, repo: 'Repo', id): # @ReservedAssignment return repo.rev_parse(str(id)) @classmethod - def new_from_sha(cls, repo: 'Repo', sha1: bytes) -> Union['Commit', 'TagObject', 'Tree', 'Blob']: + def new_from_sha(cls, repo: 'Repo', sha1: bytes) -> Commit_ish: """ :return: new object instance of a type appropriate to represent the given binary sha1 diff --git a/git/objects/commit.py b/git/objects/commit.py index 0b707450c..7d3ea4fa7 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -3,12 +3,10 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php - from gitdb import IStream from git.util import ( hex_to_bin, Actor, - IterableObj, Stats, finalize_process ) @@ -17,8 +15,8 @@ from .tree import Tree from . import base from .util import ( - Traversable, Serializable, + TraversableIterableObj, parse_date, altz_to_utctz_str, parse_actor_and_date, @@ -36,18 +34,25 @@ from io import BytesIO import logging -from typing import List, Tuple, Union, TYPE_CHECKING + +# typing ------------------------------------------------------------------ + +from typing import Any, Iterator, List, Sequence, Tuple, Union, TYPE_CHECKING + +from git.types import PathLike if TYPE_CHECKING: from git.repo import Repo +# ------------------------------------------------------------------------ + log = logging.getLogger('git.objects.commit') log.addHandler(logging.NullHandler()) __all__ = ('Commit', ) -class Commit(base.Object, IterableObj, Diffable, Traversable, Serializable): +class Commit(base.Object, TraversableIterableObj, Diffable, Serializable): """Wraps a git Commit object. @@ -73,7 +78,8 @@ class Commit(base.Object, IterableObj, Diffable, Traversable, Serializable): "message", "parents", "encoding", "gpgsig") _id_attribute_ = "hexsha" - def __init__(self, repo, binsha, tree=None, author=None, authored_date=None, author_tz_offset=None, + def __init__(self, repo, binsha, tree=None, author: Union[Actor, None] = None, + authored_date=None, author_tz_offset=None, committer=None, committed_date=None, committer_tz_offset=None, message=None, parents: Union[Tuple['Commit', ...], List['Commit'], None] = None, encoding=None, gpgsig=None): @@ -139,7 +145,7 @@ def __init__(self, repo, binsha, tree=None, author=None, authored_date=None, aut self.gpgsig = gpgsig @classmethod - def _get_intermediate_items(cls, commit: 'Commit') -> Tuple['Commit', ...]: # type: ignore ## cos overriding super + def _get_intermediate_items(cls, commit: 'Commit') -> Tuple['Commit', ...]: return tuple(commit.parents) @classmethod @@ -225,7 +231,9 @@ def name_rev(self): return self.repo.git.name_rev(self) @classmethod - def iter_items(cls, repo, rev, paths='', **kwargs): + def iter_items(cls, repo: 'Repo', rev, # type: ignore + paths: Union[PathLike, Sequence[PathLike]] = '', **kwargs: Any + ) -> Iterator['Commit']: """Find all commits matching the given criteria. :param repo: is the Repo @@ -245,15 +253,23 @@ def iter_items(cls, repo, rev, paths='', **kwargs): # use -- in any case, to prevent possibility of ambiguous arguments # see https://github.com/gitpython-developers/GitPython/issues/264 - args = ['--'] + + args_list: List[Union[PathLike, Sequence[PathLike]]] = ['--'] + if paths: - args.extend((paths, )) + paths_tup: Tuple[PathLike, ...] + if isinstance(paths, (str, os.PathLike)): + paths_tup = (paths, ) + else: + paths_tup = tuple(paths) + + args_list.extend(paths_tup) # END if paths - proc = repo.git.rev_list(rev, args, as_process=True, **kwargs) + proc = repo.git.rev_list(rev, args_list, as_process=True, **kwargs) return cls._iter_from_process_or_stream(repo, proc) - def iter_parents(self, paths='', **kwargs): + def iter_parents(self, paths: Union[PathLike, Sequence[PathLike]] = '', **kwargs) -> Iterator['Commit']: """Iterate _all_ parents of this commit. :param paths: @@ -269,7 +285,7 @@ def iter_parents(self, paths='', **kwargs): return self.iter_items(self.repo, self, paths, **kwargs) - @property + @ property def stats(self): """Create a git stat from changes between this commit and its first parent or from all changes done if this is the very first commit. @@ -286,7 +302,7 @@ def stats(self): text = self.repo.git.diff(self.parents[0].hexsha, self.hexsha, '--', numstat=True) return Stats._list_from_string(self.repo, text) - @classmethod + @ classmethod def _iter_from_process_or_stream(cls, repo, proc_or_stream): """Parse out commit information into a list of Commit objects We expect one-line per commit, and parse the actual commit information directly @@ -317,7 +333,7 @@ def _iter_from_process_or_stream(cls, repo, proc_or_stream): if hasattr(proc_or_stream, 'wait'): finalize_process(proc_or_stream) - @classmethod + @ classmethod def create_from_tree(cls, repo, tree, message, parent_commits=None, head=False, author=None, committer=None, author_date=None, commit_date=None): """Commit the given tree, creating a commit object. diff --git a/git/objects/output.txt b/git/objects/output.txt new file mode 100644 index 000000000..e69de29bb diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index cbf6cd0db..9b6ef6eb3 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -3,6 +3,7 @@ import logging import os import stat + from unittest import SkipTest import uuid @@ -24,9 +25,9 @@ BadName ) from git.objects.base import IndexObject, Object -from git.objects.util import Traversable +from git.objects.util import TraversableIterableObj + from git.util import ( - IterableObj, join_path_native, to_native_path_linux, RemoteProgress, @@ -48,6 +49,13 @@ # typing ---------------------------------------------------------------------- +from typing import Dict, TYPE_CHECKING +from typing import Any, Iterator, Union + +from git.types import Commit_ish, PathLike + +if TYPE_CHECKING: + from git.repo import Repo # ----------------------------------------------------------------------------- @@ -64,7 +72,7 @@ class UpdateProgress(RemoteProgress): """Class providing detailed progress information to the caller who should derive from it and implement the ``update(...)`` message""" CLONE, FETCH, UPDWKTREE = [1 << x for x in range(RemoteProgress._num_op_codes, RemoteProgress._num_op_codes + 3)] - _num_op_codes = RemoteProgress._num_op_codes + 3 + _num_op_codes: int = RemoteProgress._num_op_codes + 3 __slots__ = () @@ -79,7 +87,7 @@ class UpdateProgress(RemoteProgress): # IndexObject comes via util module, its a 'hacky' fix thanks to pythons import # mechanism which cause plenty of trouble of the only reason for packages and # modules is refactoring - subpackages shouldn't depend on parent packages -class Submodule(IndexObject, IterableObj, Traversable): +class Submodule(IndexObject, TraversableIterableObj): """Implements access to a git submodule. They are special in that their sha represents a commit in the submodule's repository which is to be checked out @@ -101,7 +109,14 @@ class Submodule(IndexObject, IterableObj, Traversable): __slots__ = ('_parent_commit', '_url', '_branch_path', '_name', '__weakref__') _cache_attrs = ('path', '_url', '_branch_path') - def __init__(self, repo, binsha, mode=None, path=None, name=None, parent_commit=None, url=None, branch_path=None): + def __init__(self, repo: 'Repo', binsha: bytes, + mode: Union[int, None] = None, + path: Union[PathLike, None] = None, + name: Union[str, None] = None, + parent_commit: Union[Commit_ish, None] = None, + url: str = None, + branch_path: Union[PathLike, None] = None + ) -> None: """Initialize this instance with its attributes. We only document the ones that differ from ``IndexObject`` @@ -121,15 +136,16 @@ def __init__(self, repo, binsha, mode=None, path=None, name=None, parent_commit= if name is not None: self._name = name - def _set_cache_(self, attr): + def _set_cache_(self, attr: str) -> None: if attr in ('path', '_url', '_branch_path'): reader = self.config_reader() # default submodule values try: self.path = reader.get('path') except cp.NoSectionError as e: - raise ValueError("This submodule instance does not exist anymore in '%s' file" - % osp.join(self.repo.working_tree_dir, '.gitmodules')) from e + if self.repo.working_tree_dir is not None: + raise ValueError("This submodule instance does not exist anymore in '%s' file" + % osp.join(self.repo.working_tree_dir, '.gitmodules')) from e # end self._url = reader.get('url') # git-python extension values - optional @@ -150,33 +166,35 @@ def _get_intermediate_items(cls, item: 'Submodule') -> IterableList['Submodule'] # END handle intermediate items @classmethod - def _need_gitfile_submodules(cls, git): + def _need_gitfile_submodules(cls, git: Git) -> bool: return git.version_info[:3] >= (1, 7, 5) - def __eq__(self, other): + def __eq__(self, other: Any) -> bool: """Compare with another submodule""" # we may only compare by name as this should be the ID they are hashed with # Otherwise this type wouldn't be hashable # return self.path == other.path and self.url == other.url and super(Submodule, self).__eq__(other) return self._name == other._name - def __ne__(self, other): + def __ne__(self, other: object) -> bool: """Compare with another submodule for inequality""" return not (self == other) - def __hash__(self): + def __hash__(self) -> int: """Hash this instance using its logical id, not the sha""" return hash(self._name) - def __str__(self): + def __str__(self) -> str: return self._name - def __repr__(self): + def __repr__(self) -> str: return "git.%s(name=%s, path=%s, url=%s, branch_path=%s)"\ % (type(self).__name__, self._name, self.path, self.url, self.branch_path) @classmethod - def _config_parser(cls, repo, parent_commit, read_only): + def _config_parser(cls, repo: 'Repo', + parent_commit: Union[Commit_ish, None], + read_only: bool) -> SubmoduleConfigParser: """:return: Config Parser constrained to our submodule in read or write mode :raise IOError: If the .gitmodules file cannot be found, either locally or in the repository at the given parent commit. Otherwise the exception would be delayed until the first @@ -189,8 +207,8 @@ def _config_parser(cls, repo, parent_commit, read_only): # We are most likely in an empty repository, so the HEAD doesn't point to a valid ref pass # end handle parent_commit - - if not repo.bare and parent_matches_head: + fp_module: Union[str, BytesIO] + if not repo.bare and parent_matches_head and repo.working_tree_dir: fp_module = osp.join(repo.working_tree_dir, cls.k_modules_file) else: assert parent_commit is not None, "need valid parent_commit in bare repositories" @@ -219,13 +237,13 @@ def _clear_cache(self): # END for each name to delete @classmethod - def _sio_modules(cls, parent_commit): + def _sio_modules(cls, parent_commit: Commit_ish) -> BytesIO: """:return: Configuration file as BytesIO - we only access it through the respective blob's data""" sio = BytesIO(parent_commit.tree[cls.k_modules_file].data_stream.read()) sio.name = cls.k_modules_file return sio - def _config_parser_constrained(self, read_only): + def _config_parser_constrained(self, read_only: bool) -> SectionConstraint: """:return: Config Parser constrained to our submodule in read or write mode""" try: pc = self.parent_commit @@ -248,7 +266,7 @@ def _clone_repo(cls, repo, url, path, name, **kwargs): """:return: Repo instance of newly cloned repository :param repo: our parent repository :param url: url to clone from - :param path: repository-relative path to the submodule checkout location + :param path: repository - relative path to the submodule checkout location :param name: canonical of the submodule :param kwrags: additinoal arguments given to git.clone""" module_abspath = cls._module_abspath(repo, path, name) @@ -269,7 +287,7 @@ def _clone_repo(cls, repo, url, path, name, **kwargs): @classmethod def _to_relative_path(cls, parent_repo, path): - """:return: a path guaranteed to be relative to the given parent-repository + """:return: a path guaranteed to be relative to the given parent - repository :raise ValueError: if path is not contained in the parent repository's working tree""" path = to_native_path_linux(path) if path.endswith('/'): @@ -291,11 +309,11 @@ def _to_relative_path(cls, parent_repo, path): @classmethod def _write_git_file_and_module_config(cls, working_tree_dir, module_abspath): - """Writes a .git file containing a (preferably) relative path to the actual git module repository. + """Writes a .git file containing a(preferably) relative path to the actual git module repository. It is an error if the module_abspath cannot be made into a relative path, relative to the working_tree_dir :note: will overwrite existing files ! :note: as we rewrite both the git file as well as the module configuration, we might fail on the configuration - and will not roll back changes done to the git file. This should be a non-issue, but may easily be fixed + and will not roll back changes done to the git file. This should be a non - issue, but may easily be fixed if it becomes one :param working_tree_dir: directory to write the .git file into :param module_abspath: absolute path to the bare repository @@ -316,7 +334,9 @@ def _write_git_file_and_module_config(cls, working_tree_dir, module_abspath): #{ Edit Interface @classmethod - def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=None, env=None): + def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = None, + branch=None, no_checkout: bool = False, depth=None, env=None + ) -> 'Submodule': """Add a new submodule to the given repository. This will alter the index as well as the .gitmodules file, but will not create a new commit. If the submodule already exists, no matter if the configuration differs @@ -360,8 +380,8 @@ def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=N # assure we never put backslashes into the url, as some operating systems # like it ... - if url is not None: - url = to_native_path_linux(url) + # if url is not None: + # url = to_native_path_linux(url) to_native_path_linux does nothing?? # END assure url correctness # INSTANTIATE INTERMEDIATE SM @@ -405,7 +425,7 @@ def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=N url = urls[0] else: # clone new repo - kwargs = {'n': no_checkout} + kwargs: Dict[str, Union[bool, int]] = {'n': no_checkout} if not branch_is_default: kwargs['b'] = br.name # END setup checkout-branch @@ -463,7 +483,7 @@ def update(self, recursive=False, init=True, to_latest_revision=False, progress= was specified for this submodule and the branch existed remotely :param progress: UpdateProgress instance or None if no progress should be shown :param dry_run: if True, the operation will only be simulated, but not performed. - All performed operations are read-only + All performed operations are read - only :param force: If True, we may reset heads even if the repository in question is dirty. Additinoally we will be allowed to set a tracking branch which is ahead of its remote branch back into the past or the location of the @@ -471,7 +491,7 @@ def update(self, recursive=False, init=True, to_latest_revision=False, progress= If False, local tracking branches that are in the future of their respective remote branches will simply not be moved. :param keep_going: if True, we will ignore but log all errors, and keep going recursively. - Unless dry_run is set as well, keep_going could cause subsequent/inherited errors you wouldn't see + Unless dry_run is set as well, keep_going could cause subsequent / inherited errors you wouldn't see otherwise. In conjunction with dry_run, it can be useful to anticipate all errors when updating submodules :param env: Optional dictionary containing the desired environment variables. @@ -677,9 +697,9 @@ def move(self, module_path, configuration=True, module=True): adjusting our index entry accordingly. :param module_path: the path to which to move our module in the parent repostory's working tree, - given as repository-relative or absolute path. Intermediate directories will be created + given as repository - relative or absolute path. Intermediate directories will be created accordingly. If the path already exists, it must be empty. - Trailing (back)slashes are removed automatically + Trailing(back)slashes are removed automatically :param configuration: if True, the configuration will be adjusted to let the submodule point to the given path. :param module: if True, the repository managed by this submodule @@ -688,7 +708,7 @@ def move(self, module_path, configuration=True, module=True): :return: self :raise ValueError: if the module path existed and was not empty, or was a file :note: Currently the method is not atomic, and it could leave the repository - in an inconsistent state if a sub-step fails for some reason + in an inconsistent state if a sub - step fails for some reason """ if module + configuration < 1: raise ValueError("You must specify to move at least the module or the configuration of the submodule") @@ -782,19 +802,19 @@ def move(self, module_path, configuration=True, module=True): @unbare_repo def remove(self, module=True, force=False, configuration=True, dry_run=False): """Remove this submodule from the repository. This will remove our entry - from the .gitmodules file and the entry in the .git/config file. + from the .gitmodules file and the entry in the .git / config file. :param module: If True, the module checkout we point to will be deleted as well. If the module is currently on a commit which is not part of any branch in the remote, if the currently checked out branch working tree, or untracked files, - is ahead of its tracking branch, if you have modifications in the + is ahead of its tracking branch, if you have modifications in the In case the removal of the repository fails for these reasons, the submodule status will not have been altered. - If this submodule has child-modules on its own, these will be deleted + If this submodule has child - modules on its own, these will be deleted prior to touching the own module. :param force: Enforces the deletion of the module even though it contains - modifications. This basically enforces a brute-force file system based + modifications. This basically enforces a brute - force file system based deletion. :param configuration: if True, the submodule is deleted from the configuration, otherwise it isn't. Although this should be enabled most of the times, @@ -934,7 +954,7 @@ def remove(self, module=True, force=False, configuration=True, dry_run=False): return self - def set_parent_commit(self, commit, check=True): + def set_parent_commit(self, commit: Union[Commit_ish, None], check=True): """Set this instance to use the given commit whose tree is supposed to contain the .gitmodules blob. @@ -1007,9 +1027,9 @@ def rename(self, new_name): """Rename this submodule :note: This method takes care of renaming the submodule in various places, such as - * $parent_git_dir/config - * $working_tree_dir/.gitmodules - * (git >=v1.8.0: move submodule repository to new name) + * $parent_git_dir / config + * $working_tree_dir / .gitmodules + * (git >= v1.8.0: move submodule repository to new name) As .gitmodules will be changed, you would need to make a commit afterwards. The changed .gitmodules file will already be added to the index @@ -1083,7 +1103,7 @@ def module_exists(self): def exists(self): """ :return: True if the submodule exists, False otherwise. Please note that - a submodule may exist (in the .gitmodules file) even though its module + a submodule may exist ( in the .gitmodules file) even though its module doesn't exist on disk""" # keep attributes for later, and restore them if we have no valid data # this way we do not actually alter the state of the object @@ -1123,7 +1143,7 @@ def branch(self): @property def branch_path(self): """ - :return: full (relative) path as string to the branch we would checkout + :return: full(relative) path as string to the branch we would checkout from the remote and track""" return self._branch_path @@ -1136,7 +1156,7 @@ def branch_name(self): @property def url(self): - """:return: The url to the repository which our module-repository refers to""" + """:return: The url to the repository which our module - repository refers to""" return self._url @property @@ -1152,7 +1172,7 @@ def name(self): """:return: The name of this submodule. It is used to identify it within the .gitmodules file. :note: by default, the name is the path at which to find the submodule, but - in git-python it should be a unique identifier similar to the identifiers + in git - python it should be a unique identifier similar to the identifiers used for remotes, which allows to change the path of the submodule easily """ @@ -1179,17 +1199,16 @@ def children(self) -> IterableList['Submodule']: #{ Iterable Interface @classmethod - def iter_items(cls, repo, parent_commit='HEAD'): + def iter_items(cls, repo: 'Repo', parent_commit: Union[Commit_ish, str] = 'HEAD', *Args: Any, **kwargs: Any + ) -> Iterator['Submodule']: """:return: iterator yielding Submodule instances available in the given repository""" try: pc = repo.commit(parent_commit) # parent commit instance parser = cls._config_parser(repo, pc, read_only=True) except (IOError, BadName): - return + return iter([]) # END handle empty iterator - rt = pc.tree # root tree - for sms in parser.sections(): n = sm_name(sms) p = parser.get(sms, 'path') @@ -1202,6 +1221,7 @@ def iter_items(cls, repo, parent_commit='HEAD'): # get the binsha index = repo.index try: + rt = pc.tree # root tree sm = rt[p] except KeyError: # try the index, maybe it was just added diff --git a/git/objects/submodule/util.py b/git/objects/submodule/util.py index b4796b300..5290000be 100644 --- a/git/objects/submodule/util.py +++ b/git/objects/submodule/util.py @@ -4,10 +4,12 @@ from io import BytesIO import weakref -from typing import TYPE_CHECKING + +from typing import Any, TYPE_CHECKING, Union if TYPE_CHECKING: from .base import Submodule + from weakref import ReferenceType __all__ = ('sm_section', 'sm_name', 'mkhead', 'find_first_remote_branch', 'SubmoduleConfigParser') @@ -58,8 +60,8 @@ class SubmoduleConfigParser(GitConfigParser): Please note that no mutating method will work in bare mode """ - def __init__(self, *args, **kwargs): - self._smref = None + def __init__(self, *args: Any, **kwargs: Any) -> None: + self._smref: Union['ReferenceType[Submodule]', None] = None self._index = None self._auto_write = True super(SubmoduleConfigParser, self).__init__(*args, **kwargs) @@ -89,7 +91,7 @@ def flush_to_index(self) -> None: #} END interface #{ Overridden Methods - def write(self): + def write(self) -> None: rval = super(SubmoduleConfigParser, self).write() self.flush_to_index() return rval diff --git a/git/objects/tree.py b/git/objects/tree.py index 191fe27c3..44d3b3da9 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -3,6 +3,7 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php + from git.util import join_path import git.diff as diff from git.util import to_bin_sha @@ -20,14 +21,18 @@ # typing ------------------------------------------------- -from typing import Callable, Dict, Generic, Iterable, Iterator, List, Tuple, Type, TypeVar, Union, cast, TYPE_CHECKING +from typing import (Callable, Dict, Generic, Iterable, Iterator, List, + Tuple, Type, TypeVar, Union, cast, TYPE_CHECKING) -from git.types import PathLike +from git.types import PathLike, TypeGuard if TYPE_CHECKING: from git.repo import Repo + from git.objects.util import TraversedTup from io import BytesIO +T_Tree_cache = TypeVar('T_Tree_cache', bound=Union[Tuple[bytes, int, str]]) + #-------------------------------------------------------- @@ -35,8 +40,6 @@ __all__ = ("TreeModifier", "Tree") -T_Tree_cache = TypeVar('T_Tree_cache', bound=Union[Tuple[bytes, int, str]]) - def git_cmp(t1: T_Tree_cache, t2: T_Tree_cache) -> int: a, b = t1[2], t2[2] @@ -137,8 +140,12 @@ def add(self, sha: bytes, mode: int, name: str, force: bool = False) -> 'TreeMod sha = to_bin_sha(sha) index = self._index_by_name(name) - assert isinstance(sha, bytes) and isinstance(mode, int) and isinstance(name, str) - item = cast(T_Tree_cache, (sha, mode, name)) # use Typeguard from typing-extensions 3.10.0 + def is_tree_cache(inp: Tuple[bytes, int, str]) -> TypeGuard[T_Tree_cache]: + return isinstance(inp[0], bytes) and isinstance(inp[1], int) and isinstance([inp], str) + + item = (sha, mode, name) + assert is_tree_cache(item) + if index == -1: self._cache.append(item) else: @@ -205,7 +212,7 @@ def __init__(self, repo: 'Repo', binsha: bytes, mode: int = tree_id << 12, path: super(Tree, self).__init__(repo, binsha, mode, path) @ classmethod - def _get_intermediate_items(cls, index_object: 'Tree', # type: ignore + def _get_intermediate_items(cls, index_object: 'Tree', ) -> Union[Tuple['Tree', ...], Tuple[()]]: if index_object.type == "tree": index_object = cast('Tree', index_object) @@ -289,14 +296,37 @@ def cache(self) -> TreeModifier: See the ``TreeModifier`` for more information on how to alter the cache""" return TreeModifier(self._cache) - def traverse(self, predicate=lambda i, d: True, - prune=lambda i, d: False, depth=-1, branch_first=True, - visit_once=False, ignore_self=1): - """For documentation, see util.Traversable.traverse + def traverse(self, + predicate: Callable[[Union['Tree', 'Submodule', 'Blob', + 'TraversedTup'], int], bool] = lambda i, d: True, + prune: Callable[[Union['Tree', 'Submodule', 'Blob', 'TraversedTup'], int], bool] = lambda i, d: False, + depth: int = -1, + branch_first: bool = True, + visit_once: bool = False, + ignore_self: int = 1, + as_edge: bool = False + ) -> Union[Iterator[Union['Tree', 'Blob', 'Submodule']], + Iterator[Tuple[Union['Tree', 'Submodule', None], Union['Tree', 'Blob', 'Submodule']]]]: + """For documentation, see util.Traversable._traverse() Trees are set to visit_once = False to gain more performance in the traversal""" - return super(Tree, self).traverse(predicate, prune, depth, branch_first, visit_once, ignore_self) + + # """ + # # To typecheck instead of using cast. + # import itertools + # def is_tree_traversed(inp: Tuple) -> TypeGuard[Tuple[Iterator[Union['Tree', 'Blob', 'Submodule']]]]: + # return all(isinstance(x, (Blob, Tree, Submodule)) for x in inp[1]) + + # ret = super(Tree, self).traverse(predicate, prune, depth, branch_first, visit_once, ignore_self) + # ret_tup = itertools.tee(ret, 2) + # assert is_tree_traversed(ret_tup), f"Type is {[type(x) for x in list(ret_tup[0])]}" + # return ret_tup[0]""" + return cast(Union[Iterator[Union['Tree', 'Blob', 'Submodule']], + Iterator[Tuple[Union['Tree', 'Submodule', None], Union['Tree', 'Blob', 'Submodule']]]], + super(Tree, self).traverse(predicate, prune, depth, # type: ignore + branch_first, visit_once, ignore_self)) # List protocol + def __getslice__(self, i: int, j: int) -> List[Union[Blob, 'Tree', Submodule]]: return list(self._iter_convert_to_object(self._cache[i:j])) diff --git a/git/objects/util.py b/git/objects/util.py index 8b8148a9f..24511652c 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -7,6 +7,7 @@ from git.util import ( IterableList, + IterableObj, Actor ) @@ -19,18 +20,22 @@ from datetime import datetime, timedelta, tzinfo # typing ------------------------------------------------------------ -from typing import (Any, Callable, Deque, Iterator, TypeVar, TYPE_CHECKING, Tuple, Type, Union, cast) +from typing import (Any, Callable, Deque, Iterator, NamedTuple, overload, Sequence, + TYPE_CHECKING, Tuple, Type, TypeVar, Union, cast) + +from git.types import Literal if TYPE_CHECKING: from io import BytesIO, StringIO - from .submodule.base import Submodule # noqa: F401 from .commit import Commit from .blob import Blob from .tag import TagObject from .tree import Tree from subprocess import Popen - -T_Iterableobj = TypeVar('T_Iterableobj') + + +T_TIobj = TypeVar('T_TIobj', bound='TraversableIterableObj') # for TraversableIterableObj.traverse() +TraversedTup = Tuple[Union['Traversable', None], Union['Traversable', 'Blob']] # for Traversable.traverse() # -------------------------------------------------------------------- @@ -287,7 +292,7 @@ class Traversable(object): __slots__ = () @classmethod - def _get_intermediate_items(cls, item): + def _get_intermediate_items(cls, item) -> Sequence['Traversable']: """ Returns: Tuple of items connected to the given item. @@ -299,23 +304,34 @@ class Tree:: (cls, Tree) -> Tuple[Tree, ...] """ raise NotImplementedError("To be implemented in subclass") - def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList: + def list_traverse(self, *args: Any, **kwargs: Any + ) -> Union[IterableList['TraversableIterableObj'], + IterableList[Tuple[Union[None, 'TraversableIterableObj'], 'TraversableIterableObj']]]: """ :return: IterableList with the results of the traversal as produced by - traverse()""" - out: IterableList = IterableList(self._id_attribute_) # type: ignore[attr-defined] # defined in sublcasses - out.extend(self.traverse(*args, **kwargs)) + traverse() + List objects must be IterableObj and Traversable e.g. Commit, Submodule""" + + out: Union[IterableList['TraversableIterableObj'], + IterableList[Tuple[Union[None, 'TraversableIterableObj'], 'TraversableIterableObj']]] + + # def is_TraversableIterableObj(inp: Union['Traversable', IterableObj]) -> TypeGuard['TraversableIterableObj']: + # return isinstance(self, TraversableIterableObj) + # assert is_TraversableIterableObj(self), f"{type(self)}" + + self = cast('TraversableIterableObj', self) + out = IterableList(self._id_attribute_) + out.extend(self.traverse(*args, **kwargs)) # type: ignore return out def traverse(self, - predicate: Callable[[object, int], bool] = lambda i, d: True, - prune: Callable[[object, int], bool] = lambda i, d: False, - depth: int = -1, - branch_first: bool = True, - visit_once: bool = True, ignore_self: int = 1, as_edge: bool = False - ) -> Union[Iterator['Traversable'], Iterator[Tuple['Traversable', 'Traversable']]]: + predicate: Callable[[Union['Traversable', TraversedTup], int], bool] = lambda i, d: True, + prune: Callable[[Union['Traversable', TraversedTup], int], bool] = lambda i, d: False, + depth: int = -1, branch_first: bool = True, visit_once: bool = True, + ignore_self: int = 1, as_edge: bool = False + ) -> Union[Iterator[Union['Traversable', 'Blob']], + Iterator[TraversedTup]]: """:return: iterator yielding of items found when traversing self - :param predicate: f(i,d) returns False if item i at depth d should not be included in the result :param prune: @@ -344,21 +360,37 @@ def traverse(self, if True, return a pair of items, first being the source, second the destination, i.e. tuple(src, dest) with the edge spanning from source to destination""" + + """ + Commit -> Iterator[Union[Commit, Tuple[Commit, Commit]] + Submodule -> Iterator[Submodule, Tuple[Submodule, Submodule]] + Tree -> Iterator[Union[Blob, Tree, Submodule, + Tuple[Union[Submodule, Tree], Union[Blob, Tree, Submodule]]] + + ignore_self=True is_edge=True -> Iterator[item] + ignore_self=True is_edge=False --> Iterator[item] + ignore_self=False is_edge=True -> Iterator[item] | Iterator[Tuple[src, item]] + ignore_self=False is_edge=False -> Iterator[Tuple[src, item]]""" + class TraverseNT(NamedTuple): + depth: int + item: 'Traversable' + src: Union['Traversable', None] + visited = set() - stack = deque() # type: Deque[Tuple[int, Traversable, Union[Traversable, None]]] - stack.append((0, self, None)) # self is always depth level 0 + stack = deque() # type: Deque[TraverseNT] + stack.append(TraverseNT(0, self, None)) # self is always depth level 0 - def addToStack(stack: Deque[Tuple[int, 'Traversable', Union['Traversable', None]]], - item: 'Traversable', + def addToStack(stack: Deque[TraverseNT], + src_item: 'Traversable', branch_first: bool, - depth) -> None: + depth: int) -> None: lst = self._get_intermediate_items(item) - if not lst: + if not lst: # empty list return None if branch_first: - stack.extendleft((depth, i, item) for i in lst) + stack.extendleft(TraverseNT(depth, i, src_item) for i in lst) else: - reviter = ((depth, lst[i], item) for i in range(len(lst) - 1, -1, -1)) + reviter = (TraverseNT(depth, lst[i], src_item) for i in range(len(lst) - 1, -1, -1)) stack.extend(reviter) # END addToStack local method @@ -371,7 +403,12 @@ def addToStack(stack: Deque[Tuple[int, 'Traversable', Union['Traversable', None] if visit_once: visited.add(item) - rval = (as_edge and (src, item)) or item + rval: Union['Traversable', Tuple[Union[None, 'Traversable'], 'Traversable']] + if as_edge: # if as_edge return (src, item) unless rrc is None (e.g. for first item) + rval = (src, item) + else: + rval = item + if prune(rval, d): continue @@ -405,3 +442,73 @@ def _deserialize(self, stream: 'BytesIO') -> 'Serializable': :param stream: a file-like object :return: self""" raise NotImplementedError("To be implemented in subclass") + + +class TraversableIterableObj(Traversable, IterableObj): + __slots__ = () + + TIobj_tuple = Tuple[Union[T_TIobj, None], T_TIobj] + + @overload # type: ignore + def traverse(self: T_TIobj, + predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], + prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], + depth: int, branch_first: bool, visit_once: bool, + ignore_self: Literal[True], + as_edge: Literal[False], + ) -> Iterator[T_TIobj]: + ... + + @overload + def traverse(self: T_TIobj, + predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], + prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], + depth: int, branch_first: bool, visit_once: bool, + ignore_self: Literal[False], + as_edge: Literal[True], + ) -> Iterator[Tuple[Union[T_TIobj, None], T_TIobj]]: + ... + + @overload + def traverse(self: T_TIobj, + predicate: Callable[[Union[T_TIobj, TIobj_tuple], int], bool], + prune: Callable[[Union[T_TIobj, TIobj_tuple], int], bool], + depth: int, branch_first: bool, visit_once: bool, + ignore_self: Literal[True], + as_edge: Literal[True], + ) -> Iterator[Tuple[T_TIobj, T_TIobj]]: + ... + + def traverse(self: T_TIobj, + predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], + bool] = lambda i, d: True, + prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], + bool] = lambda i, d: False, + depth: int = -1, branch_first: bool = True, visit_once: bool = True, + ignore_self: int = 1, as_edge: bool = False + ) -> Union[Iterator[T_TIobj], + Iterator[Tuple[T_TIobj, T_TIobj]], + Iterator[Tuple[Union[T_TIobj, None], T_TIobj]]]: + """For documentation, see util.Traversable._traverse()""" + + """ + # To typecheck instead of using cast. + import itertools + from git.types import TypeGuard + def is_commit_traversed(inp: Tuple) -> TypeGuard[Tuple[Iterator[Tuple['Commit', 'Commit']]]]: + for x in inp[1]: + if not isinstance(x, tuple) and len(x) != 2: + if all(isinstance(inner, Commit) for inner in x): + continue + return True + + ret = super(Commit, self).traverse(predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge) + ret_tup = itertools.tee(ret, 2) + assert is_commit_traversed(ret_tup), f"{[type(x) for x in list(ret_tup[0])]}" + return ret_tup[0] + """ + return cast(Union[Iterator[T_TIobj], + Iterator[Tuple[Union[None, T_TIobj], T_TIobj]]], + super(TraversableIterableObj, self).traverse( + predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge # type: ignore + )) diff --git a/git/refs/head.py b/git/refs/head.py index cc8385908..c698004dc 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -5,6 +5,9 @@ from .symbolic import SymbolicReference from .reference import Reference +from typing import Union +from git.types import Commit_ish + __all__ = ["HEAD", "Head"] @@ -12,7 +15,7 @@ def strip_quotes(string): if string.startswith('"') and string.endswith('"'): return string[1:-1] return string - + class HEAD(SymbolicReference): @@ -33,7 +36,7 @@ def orig_head(self): to contain the previous value of HEAD""" return SymbolicReference(self.repo, self._ORIG_HEAD_NAME) - def reset(self, commit='HEAD', index=True, working_tree=False, + def reset(self, commit: Union[Commit_ish, SymbolicReference, str] = 'HEAD', index=True, working_tree=False, paths=None, **kwargs): """Reset our HEAD to the given commit optionally synchronizing the index and working tree. The reference we refer to will be set to @@ -60,6 +63,7 @@ def reset(self, commit='HEAD', index=True, working_tree=False, Additional arguments passed to git-reset. :return: self""" + mode: Union[str, None] mode = "--soft" if index: mode = "--mixed" diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 64a6591aa..ca0691d92 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -1,7 +1,8 @@ import os from git.compat import defenc -from git.objects import Object, Commit +from git.objects import Object +from git.objects.commit import Commit from git.util import ( join_path, join_path_native, @@ -19,7 +20,6 @@ from .log import RefLog - __all__ = ["SymbolicReference"] diff --git a/git/remote.py b/git/remote.py index a6232db32..a036446ee 100644 --- a/git/remote.py +++ b/git/remote.py @@ -38,14 +38,12 @@ from typing import Any, Callable, Dict, Iterator, List, Optional, Sequence, TYPE_CHECKING, Union, overload -from git.types import PathLike, Literal, TBD, TypeGuard +from git.types import PathLike, Literal, TBD, TypeGuard, Commit_ish if TYPE_CHECKING: from git.repo.base import Repo - from git.objects.commit import Commit - from git.objects.blob import Blob - from git.objects.tree import Tree - from git.objects.tag import TagObject + # from git.objects.commit import Commit + # from git.objects import Blob, Tree, TagObject flagKeyLiteral = Literal[' ', '!', '+', '-', '*', '=', 't', '?'] @@ -154,7 +152,7 @@ def __init__(self, flags: int, local_ref: Union[SymbolicReference, None], remote self.summary = summary @property - def old_commit(self) -> Union[str, SymbolicReference, 'Commit', 'TagObject', 'Blob', 'Tree', None]: + def old_commit(self) -> Union[str, SymbolicReference, 'Commit_ish', None]: return self._old_commit_sha and self._remote.repo.commit(self._old_commit_sha) or None @property @@ -284,7 +282,7 @@ def refresh(cls) -> Literal[True]: return True def __init__(self, ref: SymbolicReference, flags: int, note: str = '', - old_commit: Union['Commit', TagReference, 'Tree', 'Blob', None] = None, + old_commit: Union[Commit_ish, None] = None, remote_ref_path: Optional[PathLike] = None) -> None: """ Initialize a new instance @@ -304,7 +302,7 @@ def name(self) -> str: return self.ref.name @property - def commit(self) -> 'Commit': + def commit(self) -> Commit_ish: """:return: Commit of our remote ref""" return self.ref.commit @@ -349,7 +347,7 @@ def _from_line(cls, repo: 'Repo', line: str, fetch_line: str) -> 'FetchInfo': # END control char exception handling # parse operation string for more info - makes no sense for symbolic refs, but we parse it anyway - old_commit = None # type: Union[Commit, TagReference, Tree, Blob, None] + old_commit = None # type: Union[Commit_ish, None] is_tag_operation = False if 'rejected' in operation: flags |= cls.REJECTED diff --git a/git/repo/base.py b/git/repo/base.py index 52727504b..fd20deed3 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -36,7 +36,7 @@ # typing ------------------------------------------------------ -from git.types import TBD, PathLike, Lit_config_levels +from git.types import TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish from typing import (Any, BinaryIO, Callable, Dict, Iterator, List, Mapping, Optional, Sequence, TextIO, Tuple, Type, Union, @@ -45,7 +45,7 @@ if TYPE_CHECKING: # only needed for types from git.util import IterableList from git.refs.symbolic import SymbolicReference - from git.objects import TagObject, Blob, Tree # NOQA: F401 + from git.objects import Tree # ----------------------------------------------------------- @@ -515,8 +515,8 @@ def config_writer(self, config_level: Lit_config_levels = "repository") -> GitCo repository = configuration file for this repository only""" return GitConfigParser(self._get_config_path(config_level), read_only=False, repo=self) - def commit(self, rev: Optional[TBD] = None - ) -> Union['SymbolicReference', Commit, 'TagObject', 'Blob', 'Tree']: + def commit(self, rev: Optional[str] = None + ) -> Commit: """The Commit object for the specified revision :param rev: revision specifier, see git-rev-parse for viable options. @@ -531,7 +531,7 @@ def iter_trees(self, *args: Any, **kwargs: Any) -> Iterator['Tree']: :note: Takes all arguments known to iter_commits method""" return (c.tree for c in self.iter_commits(*args, **kwargs)) - def tree(self, rev: Union['Commit', 'Tree', str, None] = None) -> 'Tree': + def tree(self, rev: Union[Tree_ish, str, None] = None) -> 'Tree': """The Tree object for the given treeish revision Examples:: @@ -574,7 +574,7 @@ def iter_commits(self, rev: Optional[TBD] = None, paths: Union[PathLike, Sequenc return Commit.iter_items(self, rev, paths, **kwargs) def merge_base(self, *rev: TBD, **kwargs: Any - ) -> List[Union['SymbolicReference', Commit, 'TagObject', 'Blob', 'Tree', None]]: + ) -> List[Union['SymbolicReference', Commit_ish, None]]: """Find the closest common ancestor for the given revision (e.g. Commits, Tags, References, etc) :param rev: At least two revs to find the common ancestor for. @@ -587,7 +587,7 @@ def merge_base(self, *rev: TBD, **kwargs: Any raise ValueError("Please specify at least two revs, got only %i" % len(rev)) # end handle input - res = [] # type: List[Union['SymbolicReference', Commit, 'TagObject', 'Blob', 'Tree', None]] + res = [] # type: List[Union['SymbolicReference', Commit_ish, None]] try: lines = self.git.merge_base(*rev, **kwargs).splitlines() # List[str] except GitCommandError as err: @@ -1159,7 +1159,7 @@ def __repr__(self) -> str: clazz = self.__class__ return '<%s.%s %r>' % (clazz.__module__, clazz.__name__, self.git_dir) - def currently_rebasing_on(self) -> Union['SymbolicReference', Commit, 'TagObject', 'Blob', 'Tree', None]: + def currently_rebasing_on(self) -> Union['SymbolicReference', Commit_ish, None]: """ :return: The commit which is currently being replayed while rebasing. diff --git a/git/types.py b/git/types.py index e3b49170d..ea91d038b 100644 --- a/git/types.py +++ b/git/types.py @@ -4,7 +4,7 @@ import os import sys -from typing import Dict, Union, Any +from typing import Dict, Union, Any, TYPE_CHECKING if sys.version_info[:2] >= (3, 8): from typing import Final, Literal, SupportsIndex, TypedDict # noqa: F401 @@ -24,8 +24,15 @@ # os.PathLike only becomes subscriptable from Python 3.9 onwards PathLike = Union[str, 'os.PathLike[str]'] # forward ref as pylance complains unless editing with py3.9+ +if TYPE_CHECKING: + from git.objects import Commit, Tree, TagObject, Blob + # from git.refs import SymbolicReference + TBD = Any +Tree_ish = Union['Commit', 'Tree'] +Commit_ish = Union['Commit', 'TagObject', 'Blob', 'Tree'] + Lit_config_levels = Literal['system', 'global', 'user', 'repository'] diff --git a/git/util.py b/git/util.py index eccaa74ed..c7c8d07f9 100644 --- a/git/util.py +++ b/git/util.py @@ -4,6 +4,9 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php +from .exc import InvalidGitRepositoryError +import os.path as osp +from .compat import is_win import contextlib from functools import wraps import getpass @@ -20,9 +23,11 @@ from urllib.parse import urlsplit, urlunsplit import warnings +# from git.objects.util import Traversable + # typing --------------------------------------------------------- -from typing import (Any, AnyStr, BinaryIO, Callable, Dict, Generator, IO, Iterator, List, +from typing import (Any, AnyStr, BinaryIO, Callable, Dict, Generator, IO, Iterable as typIter, Iterator, List, Optional, Pattern, Sequence, Tuple, TypeVar, Union, cast, TYPE_CHECKING, overload) import pathlib @@ -32,8 +37,11 @@ from git.repo.base import Repo from git.config import GitConfigParser, SectionConstraint -from .types import PathLike, Literal, SupportsIndex, HSH_TD, Files_TD +from .types import PathLike, Literal, SupportsIndex, HSH_TD, Total_TD, Files_TD + +T_IterableObj = TypeVar('T_IterableObj', bound=Union['IterableObj', typIter], covariant=True) +# So IterableList[Head] is subtype of IterableList[IterableObj] # --------------------------------------------------------------------- @@ -49,11 +57,6 @@ hex_to_bin, # @UnusedImport ) -from .compat import is_win -import os.path as osp - -from .exc import InvalidGitRepositoryError - # NOTE: Some of the unused imports might be used/imported by others. # Handle once test-cases are back up and running. @@ -181,6 +184,7 @@ def to_native_path_linux(path: PathLike) -> PathLike: # no need for any work on linux def to_native_path_linux(path: PathLike) -> PathLike: return path + to_native_path = to_native_path_linux @@ -433,7 +437,7 @@ class RemoteProgress(object): Handler providing an interface to parse progress information emitted by git-push and git-fetch and to dispatch callbacks allowing subclasses to react to the progress. """ - _num_op_codes = 9 + _num_op_codes: int = 9 BEGIN, END, COUNTING, COMPRESSING, WRITING, RECEIVING, RESOLVING, FINDING_SOURCES, CHECKING_OUT = \ [1 << x for x in range(_num_op_codes)] STAGE_MASK = BEGIN | END @@ -746,8 +750,6 @@ class Stats(object): files = number of changed files as int""" __slots__ = ("total", "files") - from git.types import Total_TD, Files_TD - def __init__(self, total: Total_TD, files: Dict[PathLike, Files_TD]): self.total = total self.files = files @@ -931,10 +933,7 @@ def _obtain_lock(self) -> None: # END endless loop -T = TypeVar('T', bound='IterableObj') - - -class IterableList(List[T]): +class IterableList(List[T_IterableObj]): """ List of iterable objects allowing to query an object by id or by named index:: @@ -1046,7 +1045,7 @@ class Iterable(object): @classmethod def list_items(cls, repo, *args, **kwargs): """ - Deprecaated, use IterableObj instead. + Deprecated, use IterableObj instead. Find all items of this type - subclasses can specify args and kwargs differently. If no args are given, subclasses are obliged to return all items if no additional arguments arg given. @@ -1068,12 +1067,15 @@ def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any): class IterableObj(): """Defines an interface for iterable items which is to assure a uniform - way to retrieve and iterate items within the git repository""" + way to retrieve and iterate items within the git repository + + Subclasses = [Submodule, Commit, Reference, PushInfo, FetchInfo, Remote]""" + __slots__ = () _id_attribute_ = "attribute that most suitably identifies your instance" @classmethod - def list_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> IterableList[T]: + def list_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> IterableList[T_IterableObj]: """ Find all items of this type - subclasses can specify args and kwargs differently. If no args are given, subclasses are obliged to return all items if no additional @@ -1087,7 +1089,8 @@ def list_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> IterableList[T]: return out_list @classmethod - def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> Iterator[T]: + def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any + ) -> Iterator[T_IterableObj]: # return typed to be compatible with subtypes e.g. Remote """For more information about the arguments, see list_items :return: iterator yielding Items""" diff --git a/test/test_commit.py b/test/test_commit.py index 2fe80530d..34b91ac7b 100644 --- a/test/test_commit.py +++ b/test/test_commit.py @@ -179,6 +179,19 @@ def test_traversal(self): # at some point, both iterations should stop self.assertEqual(list(bfirst)[-1], first) + + stoptraverse = self.rorepo.commit("254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d").traverse(ignore_self=0, + as_edge=True) + stoptraverse_list = list(stoptraverse) + for itemtup in stoptraverse_list: + self.assertIsInstance(itemtup, (tuple)) and self.assertEqual(len(itemtup), 2) # as_edge=True -> tuple + src, item = itemtup + self.assertIsInstance(item, Commit) + if src: + self.assertIsInstance(src, Commit) + else: + self.assertIsNone(src) # ignore_self=0 -> first is (None, Commit) + stoptraverse = self.rorepo.commit("254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d").traverse(as_edge=True) self.assertEqual(len(next(stoptraverse)), 2) diff --git a/test/test_tree.py b/test/test_tree.py index 49b34c5e7..0607d8e3c 100644 --- a/test/test_tree.py +++ b/test/test_tree.py @@ -8,7 +8,7 @@ import sys from unittest import skipIf -from git import ( +from git.objects import ( Tree, Blob ) From b7fe37ac303b68c6251b1a02360bdf4b056d4f77 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 30 Jun 2021 18:46:00 +0100 Subject: [PATCH 0525/2375] rmv github squashed commit file --- et --soft HEAD~62 | 82 ----------------------------------------------- 1 file changed, 82 deletions(-) delete mode 100644 et --soft HEAD~62 diff --git a/et --soft HEAD~62 b/et --soft HEAD~62 deleted file mode 100644 index 533a51344..000000000 --- a/et --soft HEAD~62 +++ /dev/null @@ -1,82 +0,0 @@ -47bd0c1c9d7ef877a259c70782fef8f0d0f1a4c7 (HEAD -> main, origin/main, origin/HEAD) pppppp -4bdfa63ef2d3e24ec54dba98d636bb5bfe26b11a ppppp -b5cc7404512440f1c16c8345b19a91e9618a81db pppp -ad668a5293bd9a4ba8d7b5de21641d81e09ceb4e ppp -3f259be8841544b4afb3e03aa74f45db48deae26 pp -d0d29024c9148972ddc5a61b8e81b46a4d2dd6f7 p -9f93e93fe38ccdeb32907649ffb8bde4944020dc tyofoiotg -4336da76aff9460a778c0029c0e8e521a2e43795 tyofootg -67604c15e0fc91cf160ac8f54370ed290c2e93a1 tyooollllltg -54cd3f2b86c4474664783294f8f3b7a64090b53f tyooolqqltg -b86c4d252a44d9db85c9ee747926cb7566325b5d tyooolltg -c406cca34ba8563baa3496ecd3ee2e8021b32eb4 tyoootg -379275d4f6d0c15a6ac8ef0acae777cfead3e9ea tytgll -60e6203ab2b9282bfb5aa52540d7150c04ea6b23 tytg -f7a4d1fe7d9e5b58d6be8998942cbe723a630efc tytg -3f88dff46cb336c5011c0c88a2fd2ddf6600930f tytg -b3cff0cc07a8fc221d8a8c5d0e3fea5e6c18f1ca type oeklllljs -12788f0ef8503a15f44f393364a028cef8d3ba49 type oeklllljs -2f65d888a8f22895c9da79b51a4ac6bf718ddcc9 type oekjs -19e0503bd229d46523c78da85c9a997da19b8e95 type oekjs -6b241703b46ecda2e73bfa4a401ec4c91c4a47a3 type oeklgpllpjs -6ca3261073ba2f22c233550e75eed315416f7d4a type oeklgpllpjs -9a0640a41db895bb155560d022ac4becc0104bbc type oeklgppjs -2e552f7575426373132eb93ca3b09cdd389e3aff type oeklgppjs -d6c1054528ac81f29829a374eee04e76cd622d85 type oekgppjs -c0aed37318448f4eeaa7d2be4d0a6fd3092b290e type oekgjs -57cd84b65fde0f73592113c9664705f3a3ad6b1b type oekjs -57a8757d83eadb797a0c5bbbb73972bf320f0fcf type oejks -78291356e11f0a7e96dbe977b0a2a2487923cabc type oejs -f0cafdc02cd3561ebfe5eb2bd64aa931f6bdc746 type ojdejs -b5a6ebbc11dde3fc38f4bb795ae12f18d685ba9d type opcojjs -df16fd3d024f1cecf8389a1ae99c08ca92487c85 type opcojdejs -fe3e973258fb4491001836bd4730699a2109c05a type opcodejs -6167858688feac893fb88b8a3504690811ca6fc1 type opcodejs fllr -1671a07d895db2bc3ddd7df5f882e69e5fc461b4 type opcodejs frrrllr -2fe49943535e43cab3c9ccc91f45c249b9a7f8e1 type opcodejs frrrlr -55edcf789d12fddf2ef0d8817e95b7ef98ba0f0f type opcodejs frrrr -8b0492f6931b1cc42e505748e936dbc0e3303795 type opcodes frrrr -d8cea4f39dc57a25128bae42bd9f2a68aeaed5fa type opcodes frrr -ee571ed31cfeeb15586fb2d3f91a673e178f8f2b type opcodes frr -e6014e40dbf08028e819e7dcef24e91e1ddf2079 type opcodes fr -f4b63c1958e8743c44d247be5b6bd1b52d0e3904 type opcodes -fb37cd2b9cd808e8b15e5c36e90b62d987c1d00a fix travehhhs -00f4fd2b01a6a843cfc1ceb4a116b38b4acdabd3 fix traves -edcda782b72b503ceb2460ddcd5a0e4998dbc6e1 fix traversjjjes -debe00372bad46556f271e86a64ededb967c28d1 fix traverses -e69c51051b6fd7a702f6b757f0ea68fcb45037c7 fix traverse -d8c77302fc8ce89c35b40b3da898e81d39f6ac8d fix traverse subbbbocdfsb -521736c82e08fb3cb8000a36dca9d04532e3ba39 fix -e81abd85565bcb8b6922a629e811bf9dfdf0d0ca fix traverse subbbbocdfsdfb -253e7be871abc949f15a99315a5fd8b1f1bc0e70 fix traverse subbbbb -1fd49bb457e35fd80963572dd0cea08f3f694430 fix traverse subbbbb -ad1203946f3532ba2a76f5ab1bc76df963057ca5 fix traverse subbbbb -15117cb47d58c82843cc3a11522eeb353e760f1b fix traverse subbbb -628f4b39d5abf81a32c0f31cea5d88dca643a966 fix traverse subbbb -b253b629648202eacb98284d2996aaf7cf2a6107 fix traverse subbb -19c1ca82ecd96b00f296d5343612b22df0f7a923 fix traverse sub -2f5d2b26de1ae290880a1cce9cd2d9745fab49c1 fix traverse sub list -48f2daff1a45c2a38073310b025e5f3700473372 fix traverse comitted list -1bb39e7bf892ce8d3d4dd9dc443c30acb06c34d3 fix traverse comitted -5365916ea915dc76ecff2c607a141467a532980c fix traverse comito -26ef4581eb6af03f97edea56131661c2c1bafc2b fix traverse comit -ce54b5ab62fd4b558e98fe70eb3241e64912192b fix traverseobkl1#00 -9d9e3dd1b17799850ce745e3ce098f3e3df92d58 fix traverse comit -2a7bb484201fdb881d7a660cc22465ce844fe92c fix traverseo1#00 -3297c10984f8744b9bacae28f3efe84a49fbe376 fix traverseo0000 -46f9080b86742c1abe6aebd5d654440892b96ad8 fix traverseo -52c874e538d107618fcb21f06b154acd921aedbf fix traverseo -367ae7572d4752cced72872488103e61033e65fc fix traverse -c5c3538ca38054f0bd078386d2edc7d2a151859e fix tr -11235ecbba5594bfd12cfdd001f1dd70c20c1f98 fix t -4e39b4a31bf5e5a654c6ff9aa97784e87c90670a rmv assert basic traverses -b648e15db47d3e3b24be5013c5c50701635af0f6 rmv assert basic traverse -066326a34e7d5abe8f4ab9c40f4baa8b44e3ef89 assert basic traverse -8ffd0ae959a7260e9d5f918ae88ab61ccf1991dd assert lst traverse -b3cfbcbce72652e61ddb19c1a6db131703bd0ef6 asser traverse -1a724ece29e0888106ad659c6a77a24314cc41ca rmv errrrr -0c475fa885bb306b1ff8855590687ec52892a90e rmv errrrr -701fefc01a52f7d97ed903a0887ef7b9541b26e2 rmv errrr -4da9492b835da97dad730a404f1c12218f92e0dd rmv errr -c18937232b4a093aa87c660b20ff2d262b6ffbda rmv err -37fa6002c0b03203758cabd7a2335fd1f559f957 flake8 fxc From 237966a20a61237a475135ed8a13b90f65dcb2ca Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 30 Jun 2021 22:25:30 +0100 Subject: [PATCH 0526/2375] Type Tree.traverse() better --- git/objects/base.py | 6 +++++- git/objects/output.txt | 0 git/objects/tree.py | 37 ++++++++++++++++++------------------- git/objects/util.py | 6 ++++-- git/util.py | 2 +- 5 files changed, 28 insertions(+), 23 deletions(-) delete mode 100644 git/objects/output.txt diff --git a/git/objects/base.py b/git/objects/base.py index 6bc1945cf..4e2ed4938 100644 --- a/git/objects/base.py +++ b/git/objects/base.py @@ -22,7 +22,11 @@ if TYPE_CHECKING: from git.repo import Repo from gitdb.base import OStream - # from .tree import Tree, Blob, Commit, TagObject + from .tree import Tree + from .blob import Blob + from .submodule.base import Submodule + +IndexObjUnion = Union['Tree', 'Blob', 'Submodule'] # -------------------------------------------------------------------------- diff --git a/git/objects/output.txt b/git/objects/output.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/git/objects/tree.py b/git/objects/tree.py index 44d3b3da9..f61a4a872 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -9,7 +9,7 @@ from git.util import to_bin_sha from . import util -from .base import IndexObject +from .base import IndexObject, IndexObjUnion from .blob import Blob from .submodule.base import Submodule @@ -28,10 +28,11 @@ if TYPE_CHECKING: from git.repo import Repo - from git.objects.util import TraversedTup from io import BytesIO -T_Tree_cache = TypeVar('T_Tree_cache', bound=Union[Tuple[bytes, int, str]]) +T_Tree_cache = TypeVar('T_Tree_cache', bound=Tuple[bytes, int, str]) +TraversedTreeTup = Union[Tuple[Union['Tree', None], IndexObjUnion, + Tuple['Submodule', 'Submodule']]] #-------------------------------------------------------- @@ -201,7 +202,7 @@ class Tree(IndexObject, diff.Diffable, util.Traversable, util.Serializable): symlink_id = 0o12 tree_id = 0o04 - _map_id_to_type: Dict[int, Union[Type[Submodule], Type[Blob], Type['Tree']]] = { + _map_id_to_type: Dict[int, Type[IndexObjUnion]] = { commit_id: Submodule, blob_id: Blob, symlink_id: Blob @@ -229,7 +230,7 @@ def _set_cache_(self, attr: str) -> None: # END handle attribute def _iter_convert_to_object(self, iterable: Iterable[Tuple[bytes, int, str]] - ) -> Iterator[Union[Blob, 'Tree', Submodule]]: + ) -> Iterator[IndexObjUnion]: """Iterable yields tuples of (binsha, mode, name), which will be converted to the respective object representation""" for binsha, mode, name in iterable: @@ -240,7 +241,7 @@ def _iter_convert_to_object(self, iterable: Iterable[Tuple[bytes, int, str]] raise TypeError("Unknown mode %o found in tree data for path '%s'" % (mode, path)) from e # END for each item - def join(self, file: str) -> Union[Blob, 'Tree', Submodule]: + def join(self, file: str) -> IndexObjUnion: """Find the named object in this tree's contents :return: ``git.Blob`` or ``git.Tree`` or ``git.Submodule`` @@ -273,7 +274,7 @@ def join(self, file: str) -> Union[Blob, 'Tree', Submodule]: raise KeyError(msg % file) # END handle long paths - def __truediv__(self, file: str) -> Union['Tree', Blob, Submodule]: + def __truediv__(self, file: str) -> IndexObjUnion: """For PY3 only""" return self.join(file) @@ -296,17 +297,16 @@ def cache(self) -> TreeModifier: See the ``TreeModifier`` for more information on how to alter the cache""" return TreeModifier(self._cache) - def traverse(self, - predicate: Callable[[Union['Tree', 'Submodule', 'Blob', - 'TraversedTup'], int], bool] = lambda i, d: True, - prune: Callable[[Union['Tree', 'Submodule', 'Blob', 'TraversedTup'], int], bool] = lambda i, d: False, + def traverse(self, # type: ignore # overrides super() + predicate: Callable[[Union[IndexObjUnion, TraversedTreeTup], int], bool] = lambda i, d: True, + prune: Callable[[Union[IndexObjUnion, TraversedTreeTup], int], bool] = lambda i, d: False, depth: int = -1, branch_first: bool = True, visit_once: bool = False, ignore_self: int = 1, as_edge: bool = False - ) -> Union[Iterator[Union['Tree', 'Blob', 'Submodule']], - Iterator[Tuple[Union['Tree', 'Submodule', None], Union['Tree', 'Blob', 'Submodule']]]]: + ) -> Union[Iterator[IndexObjUnion], + Iterator[TraversedTreeTup]]: """For documentation, see util.Traversable._traverse() Trees are set to visit_once = False to gain more performance in the traversal""" @@ -320,23 +320,22 @@ def traverse(self, # ret_tup = itertools.tee(ret, 2) # assert is_tree_traversed(ret_tup), f"Type is {[type(x) for x in list(ret_tup[0])]}" # return ret_tup[0]""" - return cast(Union[Iterator[Union['Tree', 'Blob', 'Submodule']], - Iterator[Tuple[Union['Tree', 'Submodule', None], Union['Tree', 'Blob', 'Submodule']]]], + return cast(Union[Iterator[IndexObjUnion], Iterator[TraversedTreeTup]], super(Tree, self).traverse(predicate, prune, depth, # type: ignore branch_first, visit_once, ignore_self)) # List protocol - def __getslice__(self, i: int, j: int) -> List[Union[Blob, 'Tree', Submodule]]: + def __getslice__(self, i: int, j: int) -> List[IndexObjUnion]: return list(self._iter_convert_to_object(self._cache[i:j])) - def __iter__(self) -> Iterator[Union[Blob, 'Tree', Submodule]]: + def __iter__(self) -> Iterator[IndexObjUnion]: return self._iter_convert_to_object(self._cache) def __len__(self) -> int: return len(self._cache) - def __getitem__(self, item: Union[str, int, slice]) -> Union[Blob, 'Tree', Submodule]: + def __getitem__(self, item: Union[str, int, slice]) -> IndexObjUnion: if isinstance(item, int): info = self._cache[item] return self._map_id_to_type[info[1] >> 12](self.repo, info[0], info[1], join_path(self.path, info[2])) @@ -348,7 +347,7 @@ def __getitem__(self, item: Union[str, int, slice]) -> Union[Blob, 'Tree', Submo raise TypeError("Invalid index type: %r" % item) - def __contains__(self, item: Union[IndexObject, PathLike]) -> bool: + def __contains__(self, item: Union[IndexObjUnion, PathLike]) -> bool: if isinstance(item, IndexObject): for info in self._cache: if item.binsha == info[0]: diff --git a/git/objects/util.py b/git/objects/util.py index 24511652c..fce62af2f 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -30,12 +30,14 @@ from .commit import Commit from .blob import Blob from .tag import TagObject - from .tree import Tree + from .tree import Tree, TraversedTreeTup from subprocess import Popen T_TIobj = TypeVar('T_TIobj', bound='TraversableIterableObj') # for TraversableIterableObj.traverse() -TraversedTup = Tuple[Union['Traversable', None], Union['Traversable', 'Blob']] # for Traversable.traverse() + +TraversedTup = Union[Tuple[Union['Traversable', None], 'Traversable'], # for commit, submodule + TraversedTreeTup] # for tree.traverse() # -------------------------------------------------------------------- diff --git a/git/util.py b/git/util.py index c7c8d07f9..057d7478e 100644 --- a/git/util.py +++ b/git/util.py @@ -1072,7 +1072,7 @@ class IterableObj(): Subclasses = [Submodule, Commit, Reference, PushInfo, FetchInfo, Remote]""" __slots__ = () - _id_attribute_ = "attribute that most suitably identifies your instance" + _id_attribute_: str @classmethod def list_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> IterableList[T_IterableObj]: From a8ddf69c1268d2af6eff9179218ab61bcda1f6e5 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 30 Jun 2021 22:47:45 +0100 Subject: [PATCH 0527/2375] Type Traversable/list_traverse() better, make IterablleObj a protocol --- git/objects/util.py | 24 ++++++++++-------------- git/remote.py | 2 ++ git/types.py | 6 +++++- git/util.py | 9 +++++---- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index fce62af2f..bc6cdf8fa 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -23,7 +23,7 @@ from typing import (Any, Callable, Deque, Iterator, NamedTuple, overload, Sequence, TYPE_CHECKING, Tuple, Type, TypeVar, Union, cast) -from git.types import Literal +from git.types import Literal, TypeGuard if TYPE_CHECKING: from io import BytesIO, StringIO @@ -306,24 +306,20 @@ class Tree:: (cls, Tree) -> Tuple[Tree, ...] """ raise NotImplementedError("To be implemented in subclass") - def list_traverse(self, *args: Any, **kwargs: Any - ) -> Union[IterableList['TraversableIterableObj'], - IterableList[Tuple[Union[None, 'TraversableIterableObj'], 'TraversableIterableObj']]]: + def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList['TraversableIterableObj']: """ :return: IterableList with the results of the traversal as produced by traverse() List objects must be IterableObj and Traversable e.g. Commit, Submodule""" - out: Union[IterableList['TraversableIterableObj'], - IterableList[Tuple[Union[None, 'TraversableIterableObj'], 'TraversableIterableObj']]] - - # def is_TraversableIterableObj(inp: Union['Traversable', IterableObj]) -> TypeGuard['TraversableIterableObj']: - # return isinstance(self, TraversableIterableObj) - # assert is_TraversableIterableObj(self), f"{type(self)}" - - self = cast('TraversableIterableObj', self) - out = IterableList(self._id_attribute_) - out.extend(self.traverse(*args, **kwargs)) # type: ignore + def is_TraversableIterableObj(inp: 'Traversable') -> TypeGuard['TraversableIterableObj']: + # return isinstance(self, TraversableIterableObj) + # Can it be anythin else? + return isinstance(self, Traversable) + + assert is_TraversableIterableObj(self), f"{type(self)}" + out: IterableList['TraversableIterableObj'] = IterableList(self._id_attribute_) + out.extend(self.traverse(*args, **kwargs)) return out def traverse(self, diff --git a/git/remote.py b/git/remote.py index a036446ee..0ef54ea7e 100644 --- a/git/remote.py +++ b/git/remote.py @@ -128,6 +128,7 @@ class PushInfo(IterableObj, object): info.summary # summary line providing human readable english text about the push """ __slots__ = ('local_ref', 'remote_ref_string', 'flags', '_old_commit_sha', '_remote', 'summary') + _id_attribute_ = 'pushinfo' NEW_TAG, NEW_HEAD, NO_MATCH, REJECTED, REMOTE_REJECTED, REMOTE_FAILURE, DELETED, \ FORCED_UPDATE, FAST_FORWARD, UP_TO_DATE, ERROR = [1 << x for x in range(11)] @@ -242,6 +243,7 @@ class FetchInfo(IterableObj, object): info.remote_ref_path # The path from which we fetched on the remote. It's the remote's version of our info.ref """ __slots__ = ('ref', 'old_commit', 'flags', 'note', 'remote_ref_path') + _id_attribute_ = 'fetchinfo' NEW_TAG, NEW_HEAD, HEAD_UPTODATE, TAG_UPDATE, REJECTED, FORCED_UPDATE, \ FAST_FORWARD, ERROR = [1 << x for x in range(8)] diff --git a/git/types.py b/git/types.py index ea91d038b..ad9bed166 100644 --- a/git/types.py +++ b/git/types.py @@ -6,6 +6,11 @@ import sys from typing import Dict, Union, Any, TYPE_CHECKING +if sys.version_info[:2] >= (3, 7): + from typing import Protocol # noqa: F401 +else: + from typing_extensions import Protocol # noqa: F401 + if sys.version_info[:2] >= (3, 8): from typing import Final, Literal, SupportsIndex, TypedDict # noqa: F401 else: @@ -18,7 +23,6 @@ if sys.version_info[:2] < (3, 9): - # Python >= 3.6, < 3.9 PathLike = Union[str, os.PathLike] elif sys.version_info[:2] >= (3, 9): # os.PathLike only becomes subscriptable from Python 3.9 onwards diff --git a/git/util.py b/git/util.py index 057d7478e..ebb119b98 100644 --- a/git/util.py +++ b/git/util.py @@ -27,7 +27,7 @@ # typing --------------------------------------------------------- -from typing import (Any, AnyStr, BinaryIO, Callable, Dict, Generator, IO, Iterable as typIter, Iterator, List, +from typing import (Any, AnyStr, BinaryIO, Callable, Dict, Generator, IO, Iterator, List, Optional, Pattern, Sequence, Tuple, TypeVar, Union, cast, TYPE_CHECKING, overload) import pathlib @@ -37,9 +37,10 @@ from git.repo.base import Repo from git.config import GitConfigParser, SectionConstraint -from .types import PathLike, Literal, SupportsIndex, HSH_TD, Total_TD, Files_TD +from .types import (Literal, Protocol, SupportsIndex, # because behind py version guards + PathLike, HSH_TD, Total_TD, Files_TD) # aliases -T_IterableObj = TypeVar('T_IterableObj', bound=Union['IterableObj', typIter], covariant=True) +T_IterableObj = TypeVar('T_IterableObj', bound='IterableObj', covariant=True) # So IterableList[Head] is subtype of IterableList[IterableObj] # --------------------------------------------------------------------- @@ -1065,7 +1066,7 @@ def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any): raise NotImplementedError("To be implemented by Subclass") -class IterableObj(): +class IterableObj(Protocol): """Defines an interface for iterable items which is to assure a uniform way to retrieve and iterate items within the git repository From 1b69965a9ed6111d70bc072c6705395075cde017 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 30 Jun 2021 22:49:52 +0100 Subject: [PATCH 0528/2375] Fix forward ref --- git/objects/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/objects/util.py b/git/objects/util.py index bc6cdf8fa..ec81f87e7 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -37,7 +37,7 @@ T_TIobj = TypeVar('T_TIobj', bound='TraversableIterableObj') # for TraversableIterableObj.traverse() TraversedTup = Union[Tuple[Union['Traversable', None], 'Traversable'], # for commit, submodule - TraversedTreeTup] # for tree.traverse() + 'TraversedTreeTup'] # for tree.traverse() # -------------------------------------------------------------------- From 52665218a64405e1cb6c90b6ef28720065409041 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 30 Jun 2021 22:52:12 +0100 Subject: [PATCH 0529/2375] Put protocol behind py version check --- git/types.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/git/types.py b/git/types.py index ad9bed166..721c6300f 100644 --- a/git/types.py +++ b/git/types.py @@ -6,15 +6,11 @@ import sys from typing import Dict, Union, Any, TYPE_CHECKING -if sys.version_info[:2] >= (3, 7): - from typing import Protocol # noqa: F401 -else: - from typing_extensions import Protocol # noqa: F401 if sys.version_info[:2] >= (3, 8): - from typing import Final, Literal, SupportsIndex, TypedDict # noqa: F401 + from typing import Final, Literal, SupportsIndex, TypedDict, Protocol # noqa: F401 else: - from typing_extensions import Final, Literal, SupportsIndex, TypedDict # noqa: F401 + from typing_extensions import Final, Literal, SupportsIndex, TypedDict, Protocol # noqa: F401 if sys.version_info[:2] >= (3, 10): from typing import TypeGuard # noqa: F401 From 8fd5414697724feff782e952a42ca5d9651418bc Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 30 Jun 2021 22:53:23 +0100 Subject: [PATCH 0530/2375] Flake 8 fix --- git/types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/types.py b/git/types.py index 721c6300f..fb63f46e7 100644 --- a/git/types.py +++ b/git/types.py @@ -8,7 +8,7 @@ if sys.version_info[:2] >= (3, 8): - from typing import Final, Literal, SupportsIndex, TypedDict, Protocol # noqa: F401 + from typing import Final, Literal, SupportsIndex, TypedDict, Protocol # noqa: F401 else: from typing_extensions import Final, Literal, SupportsIndex, TypedDict, Protocol # noqa: F401 From 02b8ef0f163ca353e27f6b4a8c2120444739fde5 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 1 Jul 2021 10:35:11 +0100 Subject: [PATCH 0531/2375] Add missed types to Commit, uncomment to_native_path_linux() --- git/cmd.py | 4 +- git/config.py | 10 +++++ git/index/base.py | 5 ++- git/objects/commit.py | 82 ++++++++++++++++++++++------------- git/objects/submodule/base.py | 6 +-- git/objects/tree.py | 2 +- git/objects/util.py | 16 +++---- git/repo/base.py | 2 +- git/util.py | 12 ++--- 9 files changed, 85 insertions(+), 54 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index e078e4a18..7df855817 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -342,11 +342,11 @@ def polish_url(cls, url: str, is_cygwin: Literal[False] = ...) -> str: @overload @classmethod - def polish_url(cls, url: PathLike, is_cygwin: Union[None, bool] = None) -> str: + def polish_url(cls, url: str, is_cygwin: Union[None, bool] = None) -> str: ... @classmethod - def polish_url(cls, url: PathLike, is_cygwin: Union[None, bool] = None) -> PathLike: + def polish_url(cls, url: str, is_cygwin: Union[None, bool] = None) -> PathLike: if is_cygwin is None: is_cygwin = cls.is_cygwin() diff --git a/git/config.py b/git/config.py index 7982baa36..5c5ceea80 100644 --- a/git/config.py +++ b/git/config.py @@ -694,6 +694,16 @@ def read_only(self) -> bool: """:return: True if this instance may change the configuration file""" return self._read_only + @overload + def get_value(self, section: str, option: str, default: str + ) -> str: + ... + + @overload + def get_value(self, section: str, option: str, default: float + ) -> float: + ... + def get_value(self, section: str, option: str, default: Union[int, float, str, bool, None] = None ) -> Union[int, float, str, bool]: # can default or return type include bool? diff --git a/git/index/base.py b/git/index/base.py index debd710f1..f4ffba7b9 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -75,6 +75,7 @@ from subprocess import Popen from git.repo import Repo from git.refs.reference import Reference + from git.util import Actor StageType = int @@ -967,8 +968,8 @@ def move(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, Submodule]] return out - def commit(self, message: str, parent_commits=None, head: bool = True, author: str = None, - committer: str = None, author_date: str = None, commit_date: str = None, + def commit(self, message: str, parent_commits=None, head: bool = True, author: Union[None, 'Actor'] = None, + committer: Union[None, 'Actor'] = None, author_date: str = None, commit_date: str = None, skip_hooks: bool = False) -> Commit: """Commit the current default index file, creating a commit object. For more information on the arguments, see tree.commit. diff --git a/git/objects/commit.py b/git/objects/commit.py index 7d3ea4fa7..0461f0e5e 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -3,6 +3,8 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php +import datetime +from subprocess import Popen from gitdb import IStream from git.util import ( hex_to_bin, @@ -37,9 +39,9 @@ # typing ------------------------------------------------------------------ -from typing import Any, Iterator, List, Sequence, Tuple, Union, TYPE_CHECKING +from typing import Any, IO, Iterator, List, Sequence, Tuple, Union, TYPE_CHECKING -from git.types import PathLike +from git.types import PathLike, TypeGuard if TYPE_CHECKING: from git.repo import Repo @@ -78,11 +80,17 @@ class Commit(base.Object, TraversableIterableObj, Diffable, Serializable): "message", "parents", "encoding", "gpgsig") _id_attribute_ = "hexsha" - def __init__(self, repo, binsha, tree=None, author: Union[Actor, None] = None, - authored_date=None, author_tz_offset=None, - committer=None, committed_date=None, committer_tz_offset=None, - message=None, parents: Union[Tuple['Commit', ...], List['Commit'], None] = None, - encoding=None, gpgsig=None): + def __init__(self, repo: 'Repo', binsha: bytes, tree: 'Tree' = None, + author: Union[Actor, None] = None, + authored_date: Union[int, None] = None, + author_tz_offset: Union[None, float] = None, + committer: Union[Actor, None] = None, + committed_date: Union[int, None] = None, + committer_tz_offset: Union[None, float] = None, + message: Union[str, None] = None, + parents: Union[Sequence['Commit'], None] = None, + encoding: Union[str, None] = None, + gpgsig: Union[str, None] = None) -> None: """Instantiate a new Commit. All keyword arguments taking None as default will be implicitly set on first query. @@ -164,7 +172,7 @@ def _calculate_sha_(cls, repo: 'Repo', commit: 'Commit') -> bytes: istream = repo.odb.store(IStream(cls.type, streamlen, stream)) return istream.binsha - def replace(self, **kwargs): + def replace(self, **kwargs: Any) -> 'Commit': '''Create new commit object from existing commit object. Any values provided as keyword arguments will replace the @@ -183,7 +191,7 @@ def replace(self, **kwargs): return new_commit - def _set_cache_(self, attr): + def _set_cache_(self, attr: str) -> None: if attr in Commit.__slots__: # read the data in a chunk, its faster - then provide a file wrapper _binsha, _typename, self.size, stream = self.repo.odb.stream(self.binsha) @@ -193,19 +201,19 @@ def _set_cache_(self, attr): # END handle attrs @property - def authored_datetime(self): + def authored_datetime(self) -> 'datetime.datetime': return from_timestamp(self.authored_date, self.author_tz_offset) @property - def committed_datetime(self): + def committed_datetime(self) -> 'datetime.datetime': return from_timestamp(self.committed_date, self.committer_tz_offset) @property - def summary(self): + def summary(self) -> str: """:return: First line of the commit message""" return self.message.split('\n', 1)[0] - def count(self, paths='', **kwargs): + def count(self, paths: Union[PathLike, Sequence[PathLike]] = '', **kwargs: Any) -> int: """Count the number of commits reachable from this commit :param paths: @@ -223,7 +231,7 @@ def count(self, paths='', **kwargs): return len(self.repo.git.rev_list(self.hexsha, **kwargs).splitlines()) @property - def name_rev(self): + def name_rev(self) -> str: """ :return: String describing the commits hex sha based on the closest Reference. @@ -231,7 +239,7 @@ def name_rev(self): return self.repo.git.name_rev(self) @classmethod - def iter_items(cls, repo: 'Repo', rev, # type: ignore + def iter_items(cls, repo: 'Repo', rev: str, # type: ignore paths: Union[PathLike, Sequence[PathLike]] = '', **kwargs: Any ) -> Iterator['Commit']: """Find all commits matching the given criteria. @@ -254,7 +262,7 @@ def iter_items(cls, repo: 'Repo', rev, # use -- in any case, to prevent possibility of ambiguous arguments # see https://github.com/gitpython-developers/GitPython/issues/264 - args_list: List[Union[PathLike, Sequence[PathLike]]] = ['--'] + args_list: List[PathLike] = ['--'] if paths: paths_tup: Tuple[PathLike, ...] @@ -286,7 +294,7 @@ def iter_parents(self, paths: Union[PathLike, Sequence[PathLike]] = '', **kwargs return self.iter_items(self.repo, self, paths, **kwargs) @ property - def stats(self): + def stats(self) -> Stats: """Create a git stat from changes between this commit and its first parent or from all changes done if this is the very first commit. @@ -303,16 +311,25 @@ def stats(self): return Stats._list_from_string(self.repo, text) @ classmethod - def _iter_from_process_or_stream(cls, repo, proc_or_stream): + def _iter_from_process_or_stream(cls, repo: 'Repo', proc_or_stream: Union[Popen, IO]) -> Iterator['Commit']: """Parse out commit information into a list of Commit objects We expect one-line per commit, and parse the actual commit information directly from our lighting fast object database :param proc: git-rev-list process instance - one sha per line :return: iterator returning Commit objects""" - stream = proc_or_stream - if not hasattr(stream, 'readline'): - stream = proc_or_stream.stdout + + def is_proc(inp) -> TypeGuard[Popen]: + return hasattr(proc_or_stream, 'wait') and not hasattr(proc_or_stream, 'readline') + + def is_stream(inp) -> TypeGuard[IO]: + return hasattr(proc_or_stream, 'readline') + + if is_proc(proc_or_stream): + if proc_or_stream.stdout is not None: + stream = proc_or_stream.stdout + elif is_stream(proc_or_stream): + stream = proc_or_stream readline = stream.readline while True: @@ -330,19 +347,21 @@ def _iter_from_process_or_stream(cls, repo, proc_or_stream): # END for each line in stream # TODO: Review this - it seems process handling got a bit out of control # due to many developers trying to fix the open file handles issue - if hasattr(proc_or_stream, 'wait'): + if is_proc(proc_or_stream): finalize_process(proc_or_stream) @ classmethod - def create_from_tree(cls, repo, tree, message, parent_commits=None, head=False, author=None, committer=None, - author_date=None, commit_date=None): + def create_from_tree(cls, repo: 'Repo', tree: Union['Tree', str], message: str, + parent_commits: Union[None, List['Commit']] = None, head: bool = False, + author: Union[None, Actor] = None, committer: Union[None, Actor] = None, + author_date: Union[None, str] = None, commit_date: Union[None, str] = None): """Commit the given tree, creating a commit object. :param repo: Repo object the commit should be part of :param tree: Tree object or hex or bin sha the tree of the new commit :param message: Commit message. It may be an empty string if no message is provided. - It will be converted to a string in any case. + It will be converted to a string , in any case. :param parent_commits: Optional Commit objects to use as parents for the new commit. If empty list, the commit will have no parents at all and become @@ -476,7 +495,7 @@ def _serialize(self, stream: BytesIO) -> 'Commit': write(("encoding %s\n" % self.encoding).encode('ascii')) try: - if self.__getattribute__('gpgsig') is not None: + if self.__getattribute__('gpgsig'): write(b"gpgsig") for sigline in self.gpgsig.rstrip("\n").split("\n"): write((" " + sigline + "\n").encode('ascii')) @@ -526,7 +545,7 @@ def _deserialize(self, stream: BytesIO) -> 'Commit': # now we can have the encoding line, or an empty line followed by the optional # message. self.encoding = self.default_encoding - self.gpgsig = None + self.gpgsig = "" # read headers enc = next_line @@ -555,7 +574,7 @@ def _deserialize(self, stream: BytesIO) -> 'Commit': # decode the authors name try: - self.author, self.authored_date, self.author_tz_offset = \ + (self.author, self.authored_date, self.author_tz_offset) = \ parse_actor_and_date(author_line.decode(self.encoding, 'replace')) except UnicodeDecodeError: log.error("Failed to decode author line '%s' using encoding %s", author_line, self.encoding, @@ -571,11 +590,12 @@ def _deserialize(self, stream: BytesIO) -> 'Commit': # a stream from our data simply gives us the plain message # The end of our message stream is marked with a newline that we strip - self.message = stream.read() + self.message_bytes = stream.read() try: - self.message = self.message.decode(self.encoding, 'replace') + self.message = self.message_bytes.decode(self.encoding, 'replace') except UnicodeDecodeError: - log.error("Failed to decode message '%s' using encoding %s", self.message, self.encoding, exc_info=True) + log.error("Failed to decode message '%s' using encoding %s", + self.message_bytes, self.encoding, exc_info=True) # END exception handling return self diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 9b6ef6eb3..a15034df6 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -380,8 +380,8 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No # assure we never put backslashes into the url, as some operating systems # like it ... - # if url is not None: - # url = to_native_path_linux(url) to_native_path_linux does nothing?? + if url is not None: + url = to_native_path_linux(url) # END assure url correctness # INSTANTIATE INTERMEDIATE SM @@ -993,7 +993,7 @@ def set_parent_commit(self, commit: Union[Commit_ish, None], check=True): # If check is False, we might see a parent-commit that doesn't even contain the submodule anymore. # in that case, mark our sha as being NULL try: - self.binsha = pctree[self.path].binsha + self.binsha = pctree[str(self.path)].binsha except KeyError: self.binsha = self.NULL_BIN_SHA # end diff --git a/git/objects/tree.py b/git/objects/tree.py index f61a4a872..2e8d8a794 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -321,7 +321,7 @@ def traverse(self, # type: ignore # overrides super() # assert is_tree_traversed(ret_tup), f"Type is {[type(x) for x in list(ret_tup[0])]}" # return ret_tup[0]""" return cast(Union[Iterator[IndexObjUnion], Iterator[TraversedTreeTup]], - super(Tree, self).traverse(predicate, prune, depth, # type: ignore + super(Tree, self).traverse(predicate, prune, depth, # type: ignore branch_first, visit_once, ignore_self)) # List protocol diff --git a/git/objects/util.py b/git/objects/util.py index ec81f87e7..0b449b7bb 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -99,7 +99,7 @@ def utctz_to_altz(utctz: str) -> int: return -1 * int(float(utctz) / 100 * 3600) -def altz_to_utctz_str(altz: int) -> str: +def altz_to_utctz_str(altz: float) -> str: """As above, but inverses the operation, returning a string that can be used in commit objects""" utci = -1 * int((float(altz) / 3600) * 100) @@ -323,8 +323,8 @@ def is_TraversableIterableObj(inp: 'Traversable') -> TypeGuard['TraversableItera return out def traverse(self, - predicate: Callable[[Union['Traversable', TraversedTup], int], bool] = lambda i, d: True, - prune: Callable[[Union['Traversable', TraversedTup], int], bool] = lambda i, d: False, + predicate: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: True, + prune: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: False, depth: int = -1, branch_first: bool = True, visit_once: bool = True, ignore_self: int = 1, as_edge: bool = False ) -> Union[Iterator[Union['Traversable', 'Blob']], @@ -371,7 +371,7 @@ def traverse(self, ignore_self=False is_edge=False -> Iterator[Tuple[src, item]]""" class TraverseNT(NamedTuple): depth: int - item: 'Traversable' + item: Union['Traversable', 'Blob'] src: Union['Traversable', None] visited = set() @@ -401,7 +401,7 @@ def addToStack(stack: Deque[TraverseNT], if visit_once: visited.add(item) - rval: Union['Traversable', Tuple[Union[None, 'Traversable'], 'Traversable']] + rval: Union[TraversedTup, 'Traversable', 'Blob'] if as_edge: # if as_edge return (src, item) unless rrc is None (e.g. for first item) rval = (src, item) else: @@ -478,15 +478,15 @@ def traverse(self: T_TIobj, ... def traverse(self: T_TIobj, - predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], + predicate: Callable[[Union[T_TIobj, TIobj_tuple], int], bool] = lambda i, d: True, - prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], + prune: Callable[[Union[T_TIobj, TIobj_tuple], int], bool] = lambda i, d: False, depth: int = -1, branch_first: bool = True, visit_once: bool = True, ignore_self: int = 1, as_edge: bool = False ) -> Union[Iterator[T_TIobj], Iterator[Tuple[T_TIobj, T_TIobj]], - Iterator[Tuple[Union[T_TIobj, None], T_TIobj]]]: + Iterator[TIobj_tuple]]: """For documentation, see util.Traversable._traverse()""" """ diff --git a/git/repo/base.py b/git/repo/base.py index fd20deed3..d77b19c13 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -1036,7 +1036,7 @@ def _clone(cls, git: 'Git', url: PathLike, path: PathLike, odb_default_type: Typ multi = None if multi_options: multi = ' '.join(multi_options).split(' ') - proc = git.clone(multi, Git.polish_url(url), clone_path, with_extended_output=True, as_process=True, + proc = git.clone(multi, Git.polish_url(str(url)), clone_path, with_extended_output=True, as_process=True, v=True, universal_newlines=True, **add_progress(kwargs, git, progress)) if progress: handle_process_output(proc, None, to_progress_instance(progress).new_message_handler(), diff --git a/git/util.py b/git/util.py index ebb119b98..abc82bd35 100644 --- a/git/util.py +++ b/git/util.py @@ -41,8 +41,8 @@ PathLike, HSH_TD, Total_TD, Files_TD) # aliases T_IterableObj = TypeVar('T_IterableObj', bound='IterableObj', covariant=True) - # So IterableList[Head] is subtype of IterableList[IterableObj] + # --------------------------------------------------------------------- @@ -175,7 +175,7 @@ def to_native_path_windows(path: PathLike) -> PathLike: path = str(path) return path.replace('/', '\\') - def to_native_path_linux(path: PathLike) -> PathLike: + def to_native_path_linux(path: PathLike) -> str: path = str(path) return path.replace('\\', '/') @@ -183,8 +183,8 @@ def to_native_path_linux(path: PathLike) -> PathLike: to_native_path = to_native_path_windows else: # no need for any work on linux - def to_native_path_linux(path: PathLike) -> PathLike: - return path + def to_native_path_linux(path: PathLike) -> str: + return str(path) to_native_path = to_native_path_linux @@ -241,7 +241,7 @@ def is_exec(fpath: str) -> bool: return progs -def _cygexpath(drive: Optional[str], path: PathLike) -> str: +def _cygexpath(drive: Optional[str], path: str) -> str: if osp.isabs(path) and not drive: ## Invoked from `cygpath()` directly with `D:Apps\123`? # It's an error, leave it alone just slashes) @@ -290,7 +290,7 @@ def _cygexpath(drive: Optional[str], path: PathLike) -> str: ) # type: Tuple[Tuple[Pattern[str], Callable, bool], ...] -def cygpath(path: PathLike) -> PathLike: +def cygpath(path: str) -> str: """Use :meth:`git.cmd.Git.polish_url()` instead, that works on any environment.""" path = str(path) # ensure is str and not AnyPath. #Fix to use Paths when 3.5 dropped. or to be just str if only for urls? From d4a9eab9ddc64a18b33ac04a4224f347ccdc78de Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 1 Jul 2021 10:49:06 +0100 Subject: [PATCH 0532/2375] Make Commit.message bytes | str --- git/objects/commit.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/git/objects/commit.py b/git/objects/commit.py index 0461f0e5e..81978ae8a 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -87,7 +87,7 @@ def __init__(self, repo: 'Repo', binsha: bytes, tree: 'Tree' = None, committer: Union[Actor, None] = None, committed_date: Union[int, None] = None, committer_tz_offset: Union[None, float] = None, - message: Union[str, None] = None, + message: Union[str, bytes, None] = None, parents: Union[Sequence['Commit'], None] = None, encoding: Union[str, None] = None, gpgsig: Union[str, None] = None) -> None: @@ -209,9 +209,12 @@ def committed_datetime(self) -> 'datetime.datetime': return from_timestamp(self.committed_date, self.committer_tz_offset) @property - def summary(self) -> str: + def summary(self) -> Union[str, bytes]: """:return: First line of the commit message""" - return self.message.split('\n', 1)[0] + if isinstance(self.message, str): + return self.message.split('\n', 1)[0] + else: + return self.message.split(b'\n', 1)[0] def count(self, paths: Union[PathLike, Sequence[PathLike]] = '', **kwargs: Any) -> int: """Count the number of commits reachable from this commit @@ -590,12 +593,12 @@ def _deserialize(self, stream: BytesIO) -> 'Commit': # a stream from our data simply gives us the plain message # The end of our message stream is marked with a newline that we strip - self.message_bytes = stream.read() + self.message = stream.read() try: - self.message = self.message_bytes.decode(self.encoding, 'replace') + self.message = self.message.decode(self.encoding, 'replace') except UnicodeDecodeError: log.error("Failed to decode message '%s' using encoding %s", - self.message_bytes, self.encoding, exc_info=True) + self.message, self.encoding, exc_info=True) # END exception handling return self From 16f0607ed29f20c09e89f2cacc0e28e982309d60 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 5 Jul 2021 12:31:00 +0100 Subject: [PATCH 0533/2375] Improve typing of config_levels, add assert_never() --- git/config.py | 31 +- git/objects/submodule/base.py | 27 +- git/objects/submodule/util.py | 9 +- git/refs/symbolic.py | 3 +- git/repo/base.py | 19 +- git/types.py | 29 +- output.txt | 18691 -------------------------------- 7 files changed, 79 insertions(+), 18730 deletions(-) delete mode 100644 output.txt diff --git a/git/config.py b/git/config.py index 5c5ceea80..4cb13bdfa 100644 --- a/git/config.py +++ b/git/config.py @@ -31,9 +31,10 @@ # typing------------------------------------------------------- -from typing import Any, Callable, IO, List, Dict, Sequence, TYPE_CHECKING, Tuple, Union, cast, overload +from typing import (Any, Callable, IO, List, Dict, Sequence, + TYPE_CHECKING, Tuple, Union, cast, overload) -from git.types import Literal, Lit_config_levels, PathLike, TBD +from git.types import Lit_config_levels, ConfigLevels_Tup, ConfigLevels_NT, PathLike, TBD, assert_never if TYPE_CHECKING: from git.repo.base import Repo @@ -48,8 +49,9 @@ # invariants # represents the configuration level of a configuration file -CONFIG_LEVELS = ("system", "user", "global", "repository" - ) # type: Tuple[Literal['system'], Literal['user'], Literal['global'], Literal['repository']] + + +CONFIG_LEVELS: ConfigLevels_Tup = ConfigLevels_NT("system", "user", "global", "repository") # Section pattern to detect conditional includes. # https://git-scm.com/docs/git-config#_conditional_includes @@ -229,8 +231,9 @@ def get_config_path(config_level: Lit_config_levels) -> str: return osp.normpath(osp.expanduser("~/.gitconfig")) elif config_level == "repository": raise ValueError("No repo to get repository configuration from. Use Repo._get_config_path") - - raise ValueError("Invalid configuration level: %r" % config_level) + else: + # Should not reach here. Will raise ValueError if does. Static typing will warn about extra and missing elifs + assert_never(config_level, ValueError("Invalid configuration level: %r" % config_level)) class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser, object)): # type: ignore ## mypy does not understand dynamic class creation # noqa: E501 @@ -300,12 +303,12 @@ def __init__(self, file_or_files: Union[None, PathLike, IO, Sequence[Union[PathL self._proxies = self._dict() if file_or_files is not None: - self._file_or_files = file_or_files # type: Union[PathLike, IO, Sequence[Union[PathLike, IO]]] + self._file_or_files: Union[PathLike, IO, Sequence[Union[PathLike, IO]]] = file_or_files else: if config_level is None: if read_only: - self._file_or_files = [get_config_path(f) # type: ignore - for f in CONFIG_LEVELS # Can type f properly when 3.5 dropped + self._file_or_files = [get_config_path(f) + for f in CONFIG_LEVELS if f != 'repository'] else: raise ValueError("No configuration level or configuration files specified") @@ -323,15 +326,13 @@ def __init__(self, file_or_files: Union[None, PathLike, IO, Sequence[Union[PathL def _acquire_lock(self) -> None: if not self._read_only: if not self._lock: - if isinstance(self._file_or_files, (tuple, list)): - raise ValueError( - "Write-ConfigParsers can operate on a single file only, multiple files have been passed") - # END single file check - if isinstance(self._file_or_files, (str, os.PathLike)): file_or_files = self._file_or_files + elif isinstance(self._file_or_files, (tuple, list, Sequence)): + raise ValueError( + "Write-ConfigParsers can operate on a single file only, multiple files have been passed") else: - file_or_files = cast(IO, self._file_or_files).name + file_or_files = self._file_or_files.name # END get filename from handle/stream # initialize lock base - we want to write diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index c95b66f2e..6824528d0 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -7,6 +7,8 @@ from unittest import SkipTest import uuid +from git import IndexFile + import git from git.cmd import Git from git.compat import ( @@ -49,7 +51,7 @@ # typing ---------------------------------------------------------------------- -from typing import Dict, TYPE_CHECKING +from typing import Callable, Dict, TYPE_CHECKING from typing import Any, Iterator, Union from git.types import Commit_ish, PathLike @@ -131,14 +133,14 @@ def __init__(self, repo: 'Repo', binsha: bytes, if url is not None: self._url = url if branch_path is not None: - assert isinstance(branch_path, str) + # assert isinstance(branch_path, str) self._branch_path = branch_path if name is not None: self._name = name def _set_cache_(self, attr: str) -> None: if attr in ('path', '_url', '_branch_path'): - reader = self.config_reader() + reader: SectionConstraint = self.config_reader() # default submodule values try: self.path = reader.get('path') @@ -807,7 +809,8 @@ def move(self, module_path, configuration=True, module=True): return self @unbare_repo - def remove(self, module=True, force=False, configuration=True, dry_run=False): + def remove(self, module: bool = True, force: bool = False, + configuration: bool = True, dry_run: bool = False) -> 'Submodule': """Remove this submodule from the repository. This will remove our entry from the .gitmodules file and the entry in the .git / config file. @@ -861,7 +864,7 @@ def remove(self, module=True, force=False, configuration=True, dry_run=False): # TODO: If we run into permission problems, we have a highly inconsistent # state. Delete the .git folders last, start with the submodules first mp = self.abspath - method = None + method: Union[None, Callable[[PathLike], None]] = None if osp.islink(mp): method = os.remove elif osp.isdir(mp): @@ -928,7 +931,7 @@ def remove(self, module=True, force=False, configuration=True, dry_run=False): rmtree(git_dir) except Exception as ex: if HIDE_WINDOWS_KNOWN_ERRORS: - raise SkipTest("FIXME: fails with: PermissionError\n %s", ex) from ex + raise SkipTest(f"FIXME: fails with: PermissionError\n {ex}") from ex else: raise # end handle separate bare repository @@ -961,7 +964,7 @@ def remove(self, module=True, force=False, configuration=True, dry_run=False): return self - def set_parent_commit(self, commit: Union[Commit_ish, None], check=True): + def set_parent_commit(self, commit: Union[Commit_ish, None], check: bool = True) -> 'Submodule': """Set this instance to use the given commit whose tree is supposed to contain the .gitmodules blob. @@ -1009,7 +1012,7 @@ def set_parent_commit(self, commit: Union[Commit_ish, None], check=True): return self @unbare_repo - def config_writer(self, index=None, write=True): + def config_writer(self, index: Union[IndexFile, None] = None, write: bool = True) -> SectionConstraint: """:return: a config writer instance allowing you to read and write the data belonging to this submodule into the .gitmodules file. @@ -1030,7 +1033,7 @@ def config_writer(self, index=None, write=True): return writer @unbare_repo - def rename(self, new_name): + def rename(self, new_name: str) -> 'Submodule': """Rename this submodule :note: This method takes care of renaming the submodule in various places, such as @@ -1081,7 +1084,7 @@ def rename(self, new_name): #{ Query Interface @unbare_repo - def module(self): + def module(self) -> 'Repo': """:return: Repo instance initialized from the repository at our submodule path :raise InvalidGitRepositoryError: if a repository was not available. This could also mean that it was not yet initialized""" @@ -1098,7 +1101,7 @@ def module(self): raise InvalidGitRepositoryError("Repository at %r was not yet checked out" % module_checkout_abspath) # END handle exceptions - def module_exists(self): + def module_exists(self) -> bool: """:return: True if our module exists and is a valid git repository. See module() method""" try: self.module() @@ -1107,7 +1110,7 @@ def module_exists(self): return False # END handle exception - def exists(self): + def exists(self) -> bool: """ :return: True if the submodule exists, False otherwise. Please note that a submodule may exist ( in the .gitmodules file) even though its module diff --git a/git/objects/submodule/util.py b/git/objects/submodule/util.py index 5290000be..1db473df9 100644 --- a/git/objects/submodule/util.py +++ b/git/objects/submodule/util.py @@ -5,11 +5,18 @@ import weakref +# typing ----------------------------------------------------------------------- + from typing import Any, TYPE_CHECKING, Union +from git.types import PathLike + if TYPE_CHECKING: from .base import Submodule from weakref import ReferenceType + from git.repo import Repo + from git.refs import Head + __all__ = ('sm_section', 'sm_name', 'mkhead', 'find_first_remote_branch', 'SubmoduleConfigParser') @@ -28,7 +35,7 @@ def sm_name(section): return section[11:-1] -def mkhead(repo, path): +def mkhead(repo: 'Repo', path: PathLike) -> 'Head': """:return: New branch/head instance""" return git.Head(repo, git.Head.to_full_path(path)) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index ca0691d92..f0bd9316f 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -1,3 +1,4 @@ +from git.types import PathLike import os from git.compat import defenc @@ -408,7 +409,7 @@ def log_entry(self, index): return RefLog.entry_at(RefLog.path(self), index) @classmethod - def to_full_path(cls, path): + def to_full_path(cls, path) -> PathLike: """ :return: string with a full repository-relative path which can be used to initialize a Reference instance, for instance by using ``Reference.from_path``""" diff --git a/git/repo/base.py b/git/repo/base.py index d77b19c13..e60b6f6cc 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -36,13 +36,15 @@ # typing ------------------------------------------------------ -from git.types import TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish +from git.types import ConfigLevels_NT, TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish from typing import (Any, BinaryIO, Callable, Dict, Iterator, List, Mapping, Optional, Sequence, TextIO, Tuple, Type, Union, NamedTuple, cast, TYPE_CHECKING) -if TYPE_CHECKING: # only needed for types +from git.types import ConfigLevels_Tup + +if TYPE_CHECKING: from git.util import IterableList from git.refs.symbolic import SymbolicReference from git.objects import Tree @@ -55,12 +57,11 @@ __all__ = ('Repo',) -BlameEntry = NamedTuple('BlameEntry', [ - ('commit', Dict[str, TBD]), - ('linenos', range), - ('orig_path', Optional[str]), - ('orig_linenos', range)] -) +class BlameEntry(NamedTuple): + commit: Dict[str, TBD] + linenos: range + orig_path: Optional[str] + orig_linenos: range class Repo(object): @@ -95,7 +96,7 @@ class Repo(object): # invariants # represents the configuration level of a configuration file - config_level = ("system", "user", "global", "repository") # type: Tuple[Lit_config_levels, ...] + config_level: ConfigLevels_Tup = ConfigLevels_NT("system", "user", "global", "repository") # Subclass configuration # Subclasses may easily bring in their own custom types by placing a constructor or type here diff --git a/git/types.py b/git/types.py index fb63f46e7..79f86f04a 100644 --- a/git/types.py +++ b/git/types.py @@ -4,7 +4,8 @@ import os import sys -from typing import Dict, Union, Any, TYPE_CHECKING +from typing import (Callable, Dict, NoReturn, Tuple, Union, Any, Iterator, # noqa: F401 + NamedTuple, TYPE_CHECKING, get_args, TypeVar) # noqa: F401 if sys.version_info[:2] >= (3, 8): @@ -35,6 +36,32 @@ Lit_config_levels = Literal['system', 'global', 'user', 'repository'] +T = TypeVar('T', bound=Literal['system', 'global', 'user', 'repository'], covariant=True) + + +class ConfigLevels_NT(NamedTuple): + """NamedTuple of allowed CONFIG_LEVELS""" + # works for pylance, but not mypy + system: Literal['system'] + user: Literal['user'] + global_: Literal['global'] + repository: Literal['repository'] + + +ConfigLevels_Tup = Tuple[Lit_config_levels, Lit_config_levels, Lit_config_levels, Lit_config_levels] +# Typing this as specific literals breaks for mypy + + +def is_config_level(inp: str) -> TypeGuard[Lit_config_levels]: + return inp in get_args(Lit_config_levels) + + +def assert_never(inp: NoReturn, exc: Union[Exception, None] = None) -> NoReturn: + if exc is None: + assert False, f"An unhandled Literal ({inp}) in an if else chain was found" + else: + raise exc + class Files_TD(TypedDict): insertions: int diff --git a/output.txt b/output.txt deleted file mode 100644 index 25c8c95e5..000000000 --- a/output.txt +++ /dev/null @@ -1,18691 +0,0 @@ -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3d33c113b1dfa4be7e3c9924fae029c178505c3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e3068025b64bee24efc1063aba5138708737c158 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6ee9751d4e9e9526dbe810b280a4b95a43105ec9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f3e78d98e06439eea1036957796f8df9f386930f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 141b78f42c7a3c1da1e5d605af3fc56aceb921ab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5e4334f38dce4cf02db5f11a6e5844f3a7c785c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9aaaa83c44d5d23565e982a705d483c656e6c157 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bbf04348b0c79be2103fd3aaa746685578eb12fd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1578baf817c2526d29276067d2f23d28b6fab2b1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9db24bc7a617cf93321bb60de6af2a20efd6afc1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 80d43111b6bb73008683ad2f5a7c6abbab3c74ed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 86ec7573a87cd8136d7d497b99594f29e17406d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 02cb16916851336fcf2778d66a6d54ee15d086d7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5a9bbef0d2d8fc5877dab55879464a13955a341 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 369e564174bfdd592d64a027bebc3f3f41ee8f11 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 36dbe7e9b55a09c68ba179bcf2c3d3e1b7898ef3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6d0f693184884ffac97908397b074e208c63742b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 040108747e2f868c61f870799a78850b792ddd0a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 300831066507bf8b729a36a074b5c8dbc739128f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bea9077e8356b103289ba481a48d27e92c63ae7a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c0f47b3076a84c5c32cccc95748f18c50e3d948 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 195ecc3da4a851734a853af6d739c21b44e0d7f0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 85a45a691ad068a4a25566cc1ed26db09d46daa4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2efb814d0c3720f018f01329e43d9afa11ddf54 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cfc70fe92d42a853d4171943bde90d86061e3f3a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8724dfa6bf8f6de9c36d10b9b52ab8a1ea30c3b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 640d1506e7f259d675976e7fffcbc854d41d4246 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d1a9a232fbde88a347935804721ec7cd08de6f65 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a771adc5352dd3876dd2ef3d0c52c8e803fc084 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 643e6369553759407ca433ed51a5a06b47e763d4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aa0ccead680443b07fd675f8b906758907bdb415 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 982eefb2008826604d54c1a6622c12240efb0961 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c1d5c614c38db015485190d65db05b0b75d171d4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 152a60f0bd7c5b495a3ce91d0e45393879ec0477 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 14851034ab5204ddb7329eb34bb0964d3f206f2b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e15b57bf0bb40ccc6ecbebc5b008f7e96b436f19 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c8c696b3cf0c2441aefaef3592e2b815472f162a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 32e4e08cf9ccfa90f0bc6d26f0c7007aeafcffeb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 539980d51c159cb9922d0631a2994835b4243808 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a771e102ec2238a60277e2dce68283833060fd37 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22d2e4a0bfd4c2b83e718ead7f198234e3064929 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1199f90c523f170c377bf7a5ca04c2ccaab67e08 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bafb4cc0a95428cbedaaa225abdceecee7533fac ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b8e700e952d135c6903b97f022211809338232e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3e79604c8bdfc367f10a4a522c9bf548bdb3ab9a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 83017bce083c58f9a6fb0c7b13db8eeec6859493 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1143e1c66b8b054a2fefca2a23b1f499522ddb76 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5385cbd969cc8727777d503a513ccee8372cd506 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c594195eb614a200e1abb85706ec7b8b7c91268 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9563d27fbde02b8b2a8b0d808759cb235b4e083b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3470e269bcdc9091d0c5e25e7c09ce175c7cee77 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 96928d2eb3d98c475fd0737240c06bf8e5f96ad6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 545ac2574cfb75b02e407e814e10f76bc485926d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b9a2ea80aa9970bbd625da4c986d29a36c405629 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d8bf7d416f60f52335d128cf16fbba0344702e49 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e39c8b07d1c98ddf267fbc69649ecbbe043de0fd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a08733d76a8254a20a28f4c3875a173dcf0ad129 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6cc1e7e08094494916db1aadda17e03ce695d049 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5fe80b03196b1d2421109fad5b456ba7ae4393e2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c1cedc5c417ddf3c2a955514dcca6fe74913259b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1c2dd54358dd526d1d08a8e4a977f041aff74174 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 158bc981130bfbe214190cac19da228d1f321fe1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c6d952b17e63c92a060c08eac38165c6fafa869 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2f233e2405c16e2b185aa90cc8e7ad257307b991 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bccdb483aaa7235b85a49f2c208ee1befd2706dd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e9f8f159ebad405b2c08aa75f735146bb8e216ef ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f51fe3e66d358e997f4af4e91a894a635f7cb601 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e129846a1a5344c8d7c0abe5ec52136c3a581cce ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- abd23a37d8b93721c0e58e8c133cef26ed5ba1f0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 723f100a422577235e06dc024a73285710770fca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28d6c90782926412ba76838e7a81e60b41083290 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae334e4d145f6787fd08e346a925bbc09e870341 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b89b089972b5bac824ac3de67b8a02097e7e95d7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 98f6995bdcbd10ea0387d0c55cb6351b81a857fd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae0b6fe15e0b89de004d4db40c4ce35e5e2d4536 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9dc8fffd179b3d7ad7c46ff2e6875cc8075fabf3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 21b0448b65317b2830270ff4156a25aca7941472 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6d83f44007c5c581eae7ddc6c5de33311b7c1895 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f043d8a1d7f4076350ff0c778bfa60f7aa2f7aa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d8bbfea4cdcb36ce0e9ee7d7cad4c41096d4d54f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fe426d404b727d0567f21871f61cc6dc881e8bf0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 873823f39275ceb8d65ebfae74206c7347e07123 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7f662857381a0384bd03d72d6132e0b23f52deef ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f9e7a3d93da741f81a5af2e84422376c54f1f337 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ab7c3223076306ca71f692ed5979199863cf45a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 91562247e0d11d28b4bc6d85ba50b7af2bd7224b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 756b7ad43d0ad18858075f90ce5eaec2896d439c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1fd07a0a7a6300db1db8b300a3f567b31b335570 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 91645aa87e79e54a56efb8686eb4ab6c8ba67087 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d7729245060f9aecfef4544f91e2656aa8d483ec ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 54e27f7bbb412408bbf0d2735b07d57193869ea6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 47d9f1321c3a6da68a7909fcb1a66a209066d4c9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c27cd907f67f984649ff459dacf3ba105e90ebc2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f498de9bfd67bcbb42d36dfb8ff9e59ec788825b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be81304f2f8aa4a611ba9c46fbb351870aa0ce29 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1c2502ee83927437442b13b83f3a7976e4146a01 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4df4159413a4bf30a891f21cd69202e8746c8fea ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 88f3dc2eb94e9e5ff8567be837baf0b90b354f35 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 21a6cb7336b61f904198f1d48526dcbe9cba6eec ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f3d91ca75500285d19c6ae2d4bf018452ad822a6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a5e607e8aa62ca3778f1026c27a927ee5c79749b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50f763cfe38a1d69a3a04e41a36741545885f1d8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ffefb154982c6cc47c9be6b3eae6fb1170bb0791 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 630d030058c234e50d87196b624adc2049834472 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 66c5b33fb5405fe12756f07048e3bcc3a958b2c1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9d1a489931ecbdd652111669c0bd86bcd6f5abbe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ddbe4bc24e634e6496abd3bc6ce3c4377cdf2fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3236f8b966061b23ba063f3f7e1652764fee968f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ad07f7b23e762e3eb99ce45020375d2bd743fc5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e0acb8371bb2b68c2bda04db7cb2746ba3f9da86 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ce3fe7cef8910aadc2a2b39a3dab4242a751380 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1410bcc76725b50be794b385006dedd96bebf0fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bfcdf2bef08f17b4726b67f06c84be3bfe2c39b8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6f038611ff120f8283f0f1a56962f95b66730c72 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 06bec1bcd1795192f4a4a274096f053afc8f80ec ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e2feb62c17acd1dddb6cd125d8b90933c32f89e1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c00567d3025016550d55a7abaf94cbb82a5c44fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 98a17a28a21fe5f06dd2da561839fdbaa1912c64 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b54b9399920375f0bab14ff8495c0ea3f5fa1c33 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 38fc944390d57399d393dc34b4d1c5c81241fb87 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2a9b2f22c6fb5bd3e30e674874dbc8aa7e5b00ae ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d565a874f29701531ce1fc0779592838040d3edf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d74543a545a9468cabec5d20519db025952efed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 34c0831453355e09222ccc6665782d7070f5ddab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4d3809161fc54d6913c0c2c7f6a7b51eebe223f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 346424daaaf2bb3936b5f4c2891101763dc2bdc0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 261aedd2e13308755894405c7a76b72373dab879 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e48e52001d5abad7b28a4ecadde63c78c3946339 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f5320e8171324a002d3769824152cf5166a21a2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1287f69b42fa7d6b9d65abfef80899b22edfef55 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3c6c81b3281333a5a1152f667c187c9dce12944 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ac93b1d7e0694ceb303ee72c312921a9b1588f4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 47ac37be2e0e14e958ad24dc8cba1fa4b7f78700 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ed61f72c611deb07e0368cebdc9f06da32150cd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bb0f3d78d6980a1d43f05cb17a8da57a196a34f3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fe2fbc5913258ef8379852c6d45fcf226b09900b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4921139819c7949abaad6cc5679232a0fbb0632 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 34802014ca0c9546e73292260aab5e4017ffcd9a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 80701fc6f4bf74d3c6176d76563894ff0f3b32bb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a9a5414300a245b6e93ea4f39fbca792c3ec753f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9fbae711b76a4f2fa9345f43da6d2cdedd75d6c3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 26fc5866f6ed994f3b9d859a3255b10d04ee653d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea29541e213df928d356b3c12d4d074001395d3c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 508807e59ce9d6c3574d314d502e82238e3e606c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e395ac90bf088ad6b5de7dadb6531a6e7f3f4f3f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b259098782c2248f6160d2b36d42672d6925023a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 048ffa58468521c043de567f620003457b8b3dbe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 27c31e2fde54c0587c032ccffdaa7c4ddf5b2ae5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- df95149198744c258ed6856044ac5e79e6b81404 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a41a8b93167a59cd074eb3175490cd61c45b6f6a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d5054fdb1766cb035a1186c3cef4a14472fee98d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6569c4849197c9475d85d05205c55e9ef28950c1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aaa84341f876927b545abdc674c811d60af00561 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53e5fb3733e491925a01e9da6243e93c2e4214c1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20863cfe4a1b0c5bea18677470a969073570e41c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aa1b156ee96f5aabdca153c152ec6e3215fdf16f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a223c7b7730c53c3fa1e4c019bd3daefbb8fd74b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 619c989915b568e4737951fafcbae14cd06d6ea6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d4ce247c0380e3806e47b5b3e2b66c29c3ab2680 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be074c655ad53927541fc6443eed8b0c2550e415 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c15a6e1923a14bc760851913858a3942a4193cdb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e973e6f829de5dd1c09d0db39d232230e7eb01d8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae2b59625e9bde14b1d2d476e678326886ab1552 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a2d39529eea4d0ecfcd65a2d245284174cd2e0aa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c7b16ade191bb753ebadb45efe6be7386f67351d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e8eae18dcc360e6ab96c2291982bd4306adc01b9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 67680a0877f01177dc827beb49c83a9174cdb736 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e7671110bc865786ffe61cf9b92bf43c03759229 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 503b62bd76ee742bd18a1803dac76266fa8901bc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ede325d15ba9cba0e7fe9ee693085fd5db966629 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 43e430d7fa5298f6db6b1649c1a77c208bacf2fc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dfb0a9c4bca590efaa86f8edc3fdb62bd536bce7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- acd82464a11f3c2d3edc1d152d028a142da31a9f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e84300df7deed9abf248f79526a5b41fd2f7f76e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 597bc56a32e1b709eefa4e573f11387d04629f0d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- becf5efbfc4aee2677e29e1c8cbd756571cb649d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6e8aa9b0aefc30ee5807c2b2cf433a38555b7e0b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 96c6ab4f7572fd5ca8638f3cb6e342d5000955e7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bfce49feb0be6c69f7fffc57ebdd22b6da241278 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b825dc74773ffa5c7a45b48d72616b222ad2023e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a0cb95c5df7a559633c48f5b0f200599c4a62091 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c767b5206f1e9c8536110dda4d515ebb9242bbeb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 85a5a8c6a931f8b3a220ed61750d1f9758d0810a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 18caa610d50b92331485013584f5373804dd0416 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d9f1495004710b77767393a29f33df76d7b0fb5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17f5d13a7a741dcbb2a30e147bdafe929cff4697 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1531d789df97dbf1ed3f5b0340bbf39918d9fe48 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1d52f98935b70cda4eede4d52cdad4e3b886f639 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 723d20f1156530b122e9785f5efc6ebf2b838fe0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b08651e5ae2bffef5e4fb44fbdd7d467715e3b73 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fc94b89dabd9df49631cbf6b18800325f3521864 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e40ad6369bc74d01af4dc41d3a9b8e25ac2aa01e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 46889d1dce4506813206a8004f6c3e514f22b679 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de4cfcc4a1fcb24b72a31c5feff8c67d2ff930fc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 987f9bbd08446de3f9d135659f2e36ad6c9d14fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 27b4efed7a435153f18598796473b3fba06c513d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f7b7eb6245e7d7c4535975268a9be936e2c59dc8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c7887c66483ffa9a839ecf1a53c5ef718dcd1d2d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 36cdfd3209909163549850709d7f12fdf1316434 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f4a49ff2dddc66bbe25af554caba2351fbf21702 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 45eb728554953fafcee2aab0f76ca65e005326b0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c6ee00d0dadcd7b10d60a2985db4fe137ca7cfed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d83f6e84cbeb45dce4576a9a4591446afefa50b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 87a6ffa13ae2951a168cde5908c7a94b16562b96 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 73790919dbe038285a3612a191c377bc27ae6170 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a4b8e467e44bc1ca1ebf481ac2dfc1baaf9688dc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 763ef75d12f0ad6e4b79a7df304c7b5f1b5a11f2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b6ed8d46c72366e111b9a97a7c238ef4af3bf4dc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3efacd7aea48c93e0a42c1e83bf3c96e9e50f178 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c86bea60dde4016dd850916aa2e0db5260e1ff61 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d4b4ea9c84198a9b6003611a3af00ee677d09a6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d437078d8f95cb98f905162b2b06d04545806c59 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 491440543571b07c849c0ef9c4ebf5c27f263bc0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1dec7a822424bbe58b7b2a7787b1ea32683a9c19 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fce04b7e4e6e1377aa7f07da985bb68671d36ba4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28bda3aaa19955d1c172bd86d62478bee024bf7b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a6e4a6416162a698d87ba15693f2e7434beac644 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4fd7b945dfca73caf00883d4cf43740edb7516df ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1bfb44c62d15a45ca4d47b4cc482ebddb8d0ae4f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a182be6716d24fb49cb4517898b67ffcdfb5bca4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b18fd3fd13d0a1de0c3067292796e011f0f01a05 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5d0ad081ca0e723ba2a12c876b4cd1574485c726 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c824bcd73de8a7035f7e55ab3375ee0b6ab28c46 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5c12ff49fc91e66f30c5dc878f5d764d08479558 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56e942318f3c493c8dcd4759f806034331ebeda5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d46e3fe9cb0dea2617cd9231d29bf6919b0f1e91 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 68f8a43d1b643318732f30ee1cd75e1d315a4537 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3936084cdd336ce7db7d693950e345eeceab93a5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1ef4552404ba3bc92554a6c57793ee889523e3a8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c8cf69b6f8bd73525b5375bd73f1fc79ae322a82 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1de8af907dbced4fde64ee2c7f57527fc43ad1cc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1527b5734c0f2821fd6f38c1a1d70723a4bb88ab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6f55c17f48d7608072199496fbcefa33f2e97bf0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e0c65d6638698f4e3a9e726efca8c0bcf466cd62 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b9d3b961bdf79964b883d3179f085d8835e528d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 02e942b7c603163c87509195d76b2117c4997119 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c80d727e374321573bb00e23876a67c77ff466e3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 725bde98d5cf680a087b6cb47a11dc469cfe956c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 965a08c3f9f2fbd62691d533425c699c943cb865 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 95bb489a50f6c254f49ba4562d423dbf2201554f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- acac4bb07af3f168e10eee392a74a06e124d1cdd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4cfc682ff87d3629b31e0196004d1954810b206c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c255c14e9eb15f4ff29a4baead3ed31a9943e04e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f219b53f339fc0133800fac96deaf75eb4f9bf6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 79d9c4cb175792e80950fdd363a43944fb16a441 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a05e49d2419d65c59c65adf5cd8c05f276550e1d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4228b2cc8e1c9bd080fe48db98a46c21305e1464 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 60e54133aa1105a1270f0a42e74813f75cd2dc46 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a8535d1a2485b4e063ab9ef0a2719a1aab8187d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a83eee5bcee64eeb000dd413ab55aa98dcc8c7f2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e3e8ce69bec72277354eff252064a59f515d718a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b5a37564b6eec05b98c2efa5edcd1460a2df02aa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17f245cad19bf77a5a5fecdee6a41217cc128a73 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 45c1c99a22e95d730d3096c339d97181d314d6ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- db828cdfef651dd25867382d9dc5ac4c4f7f1de3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7297ff651c3cc6abf648b3fe730c2b5b1f3edbd3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2840c626d2eb712055ccb5dcbad25d040f17ce1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a67e4e49c4e7b82e416067df69c72656213e886 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 342a0276dbf11366ae91ce28dcceddc332c97eaf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 31b3673bdb9d8fb7feea8ae887be455c4a880f76 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 863a40e0d35f3ff3c3e4b5dc9ff1272e1b1783b1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e1060a2a8c90c0730c3541811df8f906dac510a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de9a6bb0c8931e7f74ea35edb372e5ca7d0a5047 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8a308613467a1510f8dac514624abae4e10c0779 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6becbaf35fa2f807837284d33649ba5376b3fe21 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d0556a31916a709e9da3eafb92fc6b8bf69896c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c9d884511ed2c8e9ca96de04df835aaa6eb973eb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 45eb6bd22554e5dad2417d185d39fe665b7a7419 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 04357d0d46fee938a618b64daed1716606e05ca5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1e1e19d33e1caa107dc0a6cc8c1bfe24d8153f51 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bc8c91200a7fb2140aadd283c66b5ab82f9ad61e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 891b124f5cc6bfd242b217759f362878b596f6e2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3f879c71bdf0aac7af9b01304ff02e94b5af71b7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae2ff0f9d704dc776a1934f72a339da206a9fff4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 750e9677b1ce303fa913c3e0754c3884d6517626 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a6fca2410a56225992959e5e4f8019e16757bfd1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a47a9c8d8253d0ae2a233fa8599b1a1c54ec53f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f6aa8d116eb33293c0a9d6d600eb7c32832758b9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8511513540ece43ac8134f3d28380b96db881526 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8a72a7a43ae004f1ae1be392d4322c07b25deff5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 616ae503462ea93326fa459034f517a4dd0cc1d1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4ae92aa57324849dd05997825c29242d2d654099 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f54c8919f297a5e5c34517d9fed0666c9d8aa10 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1234a1077f24ca0e2f1a9b4d27731482a7ed752b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 88a7002acb50bb9b921cb20868dfea837e7e8f26 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4d9b7b09a7c66e19a608d76282eacc769e349150 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 257264743154b975bc156f425217593be14727a9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d48ed95cc7bd2ad0ac36593bb2440f24f675eb59 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7ea782803efe1974471430d70ee19419287fd3d0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6fc9e6150957ff5e011142ec5e9f8522168602ec ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 706d3a28b6fa2d7ff90bbc564a53f4007321534f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3621c06c3173bff395645bd416f0efafa20a1da6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 123cb67ea60d2ae2fb32b9b60ebfe69e43541662 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22c4671b58a6289667f7ec132bc5251672411150 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5991698ee2b3046bbc9cfc3bd2abd3a881f514dd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae2baadf3aabe526bdaa5dfdf27fac0a1c63aa04 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53b65e074e4d62ea5d0251b37c35fd055e403110 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0b820e617ab21b372394bf12129c30174f57c5d7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5b6080369e7ee47b7d746685d264358c91d656bd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5025b8de2220123cd80981bb2ddecdd2ea573f6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- da5e58a47d3da8de1f58da4e871e15cc8272d0e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- da09f02e67cb18e2c5312b9a36d2891b80cd9dcd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 95436186ffb11f51a0099fe261a2c7e76b29c8a6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a2b9ac30337761fa0df74ce6e0347c5aabd7c072 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2af98929bd185cf1b4316391078240f337877f66 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8df6b87a793434065cd9a01fcaa812e3ea47c4dd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 90811b1bd194e4864f443ae714716327ba7596c2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a40d848794133de7b6e028f2513c939d823767cb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7e231a4f184583fbac2d3ef110dacd1f015d5e1c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a7c4b323bb2d3960430b11134ee59438e16d254e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9eb902eee03806db5868fc84afb23aa28802e841 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 81223de22691e2df7b81cd384ad23be25cfd999c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3f277ba01f9a93fb040a365eef80f46ce6a9de85 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d5cbe7d7de5a29c7e714214695df1948319408d0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c2e872f742e7d3c64c7e0fdb85a5d711aff1970 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 322db077a693a513e79577a0adf94c97fc2be347 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ba67e4ff74e97c4de5d980715729a773a48cd6bc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8e3883a0691ce1957996c5b37d7440ab925c731e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4d8fb73daa82420bdc69c37f0d58f7cb4cd505a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3eee7af0e69a39da2dc6c5f109c10975fae5a93e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9780b7a0f39f66d6e1946a7d109fc49165b81d64 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d6d544f67a1f3572781271b5f3030d97e6c6d9e2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55885e0c4fc40dd2780ff2cde9cda81a43e682c9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7aba59a2609ec768d5d495dafd23a4bce8179741 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c8e70749887370a99adeda972cc3503397b5f9a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3a1e0d7117b9e4ea4be3ef4895e8b2b4937ff98a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0e9eef45194039af6b8c22edf06cfd7cb106727a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f6b8bf020863f499bf956943a5ee56d067407f8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c39afa1f85f3293ad2ccef684ff62bf0a36e73c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ff13922f6cfb11128b7651ddfcbbd5cad67e477f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bed3b0989730cdc3f513884325f1447eb378aaee ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a7e7a769087b1790a18d6645740b5b670f5086b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7dcb07947cd71f47b5e2e5f101d289e263506ca9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 15c4a95ada66977c8cf80767bf1c72a45eb576b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 18fff4d4a28295500acd531a1b97bc3b89fad07e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f7ed51ba4c8416888f5744ddb84726316c461051 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 614907b7445e2ed8584c1c37df7e466e3b56170f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28fdf05b1d7827744b7b70eeb1cc66d3afd38c82 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1ddf05a78475a194ed1aa082d26b3d27ecc77475 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0441fdcbc4ea1ab8ce5455f2352436712f1b30bb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ab7ac2397d60f1a71a90bf836543f9e0dcad2d0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8005591231c8ae329f0ff320385b190d2ea81df0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be34ec23c48d6d5d8fd2ef4491981f6fb4bab8e6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5d602f267c32e1e917599d9bcdcfec4eef05d477 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e9bd04844725661c8aa2aef11091f01eeab69486 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a92ab8028c7780db728d6aad40ea1f511945fc8e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3287148a2f99fa66028434ce971b0200271437e7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56d7a9b64b6d768dd118a02c1ed2afb38265c8b9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f5d11b750ecc982541d1f936488248f0b42d75d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9d0473c1d1e6cadd986102712fff9196fff96212 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 85b836b1efb8a491230e918f7b81da3dc2a232c4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5558400e86a96936795e68bb6aa95c4c0bb0719 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 598cd1d7f452e05bfcda98ce9e3c392cf554fe75 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b8f10e74d815223341c3dd3b647910b6e6841bd6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56d5d0c70cf3a914286fe016030c9edec25c3ae0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5127e167328c7da2593fea98a27b27bb0acece68 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 916c45de7c9663806dc2cd3769a173682e5e8670 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fbd096841ddcd532e0af15eb1f42c5cd001f9d74 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c6b08c27a031f8b8b0bb6c41747ca1bc62b72706 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2e6957abf8cd88824282a19b74497872fe676a46 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dbe78c02cbdfd0a539a1e04976e1480ac0daf580 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c437ee5deb8d00cf02f03720693e4c802e99f390 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e94df6acd3e22ce0ec7f727076fd9046d96d57b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d38b9a916ab5bce9e5f622777edbc76bef617e93 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cccea02a4091cc3082adb18c4f4762fe9107d3b0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d3a728277877924e889e9fef42501127f48a4e77 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4654ca3a17832a7d479e5d8e3296f004c632183 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9e4a44b302d3a3e49aa014062b42de84480a8d4f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f09906d27affb8d08a96c07fc3386ef261f97af ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d45c76bd8cd28d05102311e9b4bc287819a51e0e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 03097c7ace28c5516aacbb1617265e50a9043a84 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5869c5c1a51d448a411ae0d51d888793c35db9c0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f573b6840509bf41be822ab7ed79e0a776005133 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b6f38d02c8ed1fb07eb6782b918f31efc4c42f3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e1ad78eb7494513f6c53f0226fe3cb7df4e67513 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c914637ab146c23484a730175aa10340db91be70 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 27c577dfd5c7f0fc75cd10ed6606674b56b405bd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f122a6aa3eb386914faa58ef3bf336f27b02fab0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 59587d81412ca9da1fd06427efd864174d76c1c5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5452aa820c0f5c2454642587ff6a3bd6d96eaa1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d43055d44e58e8f010a71ec974c6a26f091a0b7a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5244f7751c10865df94980817cfbe99b7933d4d6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9421cbc67e81629895ff1f7f397254bfe096ba49 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- db82455bd91ce00c22f6ee2b0dc622f117f07137 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 48fab54afab49f18c260463a79b90d594c7a5833 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d3e5d9cda8eae5b0f19ac25efada6d0b3b9e04e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ddd5e5ef89da7f1e3b3a7d081fbc7f5c46ac11c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c544101eed30d5656746080204f53a2563b3d535 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 007bd4b8190a6e85831c145e0aed5c68594db556 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a8bdce7a665a0b38fc822b7f05a8c2e80ccd781 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c5b87bcdd70810a20308384b0e3d1665f6d2922 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dbd784b870a878ef6dbecd14310018cdaeda5c6d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 29d94c622a7f6f696d899e5bb3484c925b5d4441 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8828ced5818d793879ae509e144fdad23465d684 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ea3dbdf67af10ccc6ad22fb3294bbd790a3698f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b137f55232155b16aa308ec4ea8d6bc994268b0d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ae512e69f37e37431239c8da6ffa48c75684f87 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 237d47b9d714fcc2eaedff68c6c0870ef3e0041a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a5a75ab7533de99a4f569b05535061581cb07a41 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9044abce7e7b3d8164fe7b83e5a21f676471b796 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3eb7265c532e99e8e434e31f910b05c055ae4369 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56cc93a548f35a0becd49a7eacde86f55ffc5dc5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a0ad305883201b6b3e68494fc70089180389f6e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d9fc8b6c06b91dfddb73d18eaa8164e64cc2600a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b7071ce13476cae789377c280aa274e6242fd756 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f3989f27e91119bb29cc1ed93751c3148762695 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6c9fcd7745d2f0c933b46a694f77f85056133ca5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4bc91d7495d7eb70a70c1f025137718f41486cd2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- eb53329253f8ec1d0eff83037ce70260b6d8fcce ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fcc166d3a6e235933e823e82e1fcf6160a32a5d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 678821a036c04dfbe331d238a7fe0223e8524901 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6a61110053bca2bbf605b66418b9670cbd555802 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f24786fca46b054789d388975614097ae71c252e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e8980057ccfcaca34b423804222a9f981350ac67 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3b7263e0bb9cc1d94e483e66c1494e0e7982fd1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6404168e6f990462c32dbe5c7ac1ec186f88c648 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 48f5476867d8316ee1af55e0e7cfacacbdf0ad68 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13e3a809554706905418a48b72e09e2eba81af2d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 10809e8854619fe9f7d5e4c5805962b8cc7a434b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 59879a4e1e2c39e41fa552d8ac0d547c62936897 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c390e223553964fc8577d6837caf19037c4cd6f6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f9b915b066f28f4ac7382b855a8af11329e3400d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ea761425b9fa1fda57e83a877f4e2fdc336a9a3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e0524096fa9f3add551abbf68ee22904b249d82f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e8987f2746637cbe518e6fe5cf574a9f151472ed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 64a4730ea1f9d7b69a1ba09b32c2aad0377bc10a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fe311b917b3cef75189e835bbef5eebd5b76cc20 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 36a984803df08b0f6eb5f8a73254dd64bc616b67 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- eb52c96d7e849e68fda40e4fa7908434e7b0b022 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ffde74dd7b5cbc4c018f0d608049be8eccc5101 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3ea450112501e0d9f11e554aaf6ce9f36b32b732 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dfe3ba3e5c08ee88afe89cc331081bbfbf5520e0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ab5b6af0c2c13794525ad84b0a80be9c42e9fcf1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f03e6162f99e4bfdd60c08168dabef3a1bdb1825 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 11e0a94f5e7ed5f824427d615199228a757471fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e583a9e22a7a0535f2c591579873e31c21bccae0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55eb3de3c31fd5d5ad35a8452060ee3be99a2d99 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d6192ad1aed30adc023621089fdf845aa528dde9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a023acbe9fc9a183c395be969b7fc7d472490cb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e11f12adffec6bf03ea1faae6c570beaceaffc86 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 863b386e195bb2b609b25614f732b1b502bc79a4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3b9b6fe0dd99803c80a3a3c52f003614ad3e0adf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5b3b65287e6849628066d5b9d08ec40c260a94dc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cc93c4f3ddade455cc4f55bc93167b1d2aeddc4f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b3061698403f0055d1d63be6ab3fbb43bd954e8e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f225d4b8c3d7eb90038c246a289a18c7b655da2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 35bceb16480b21c13a949eadff2aca0e2e5483fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea5d365a93a98907a1d7c25d433efd06a854109e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9e91a05aabb73cca7acec1cc0e07d8a562e31b45 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e7fa5ef735754e640bd6be6c0a77088009058d74 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 096897123ab5d8b500024e63ca81b658f3cb93da ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 673b21e1be26b89c9a4e8be35d521e0a43a9bfa1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a98e0af511b728030c12bf8633b077866bb74e47 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 811a6514571a94ed2e2704fb3a398218c739c9e9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec0b85e2d4907fb5fcfc5724e0e8df59e752c0d1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 96c7ac239a2c9e303233e58daee02101cc4ebf3d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e6a2942a982c2541a6b6f7c67aa7dbf57ed060ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f5ec638a77dd1cd38512bc9cf2ebae949e7a8812 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5eb7fd3f0dd99dc6c49da6fd7e78a392c4ef1b33 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a02e432530336f3e0db8807847b6947b4d9908d8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a3cc763d6ca57582964807fb171bc52174ef8d5e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2df73b317a4e2834037be8b67084bee0b533bfe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 031271e890327f631068571a3f79235a35a4f73e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 70670586e082a9352c3bebe4fb8c17068dd39b4c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e54cd8fed2d1788618df64b319a30c7aed791191 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b4b50e7348815402634b6b559b48191dba00a751 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 460cafb81f86361536077b3b6432237c6ae3d698 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6720e8df09a314c3e4ce20796df469838379480d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1ab169407354d4b9512447cd9c90e8a31263c275 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56488ced0fae2729b1e9c72447b005efdcd4fea7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b424f87a276e509dcaaee6beb10ca00c12bb7d29 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 294ee691d0fdac46d31550c7f1751d09cfb5a0f0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 96d003cb2baabd73f2aa0fd9486c13c61415106e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 46f63c30e30364eb04160df71056d4d34e97af21 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 87ae42528362d258a218b3818097fd2a4e1d6acf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f631214261a7769c8e6956a51f3d04ebc8ce8efd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 468cad66ff1f80ddaeee4123c24e4d53a032c00d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1053448ad885c633af9805a750d6187d19efaa6c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 90b20e5cd9ba8b679a488efedb1eb1983e848acf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2fbb7027ec88e2e4fe7754f22a27afe36813224b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f8ce24a835cae8c623e2936bec2618a8855c605b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 65747a216c67c3101c6ae2edaa8119d786b793cb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9004e3a1cf33110f2cbc458f1dc3259c930ad9b4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d0f24c9facb5be0c98c8859a5ce3c6b0d08504ac ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0cfe75db81bc099e4316895ff24d65ef865bced6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cf1d5bd4208514bab3e6ee523a70dff8176c8c80 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 523fb313f77717a12086319429f13723fe95f85e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f24736ad5b55a89b1057d68d6b3f3cd01018a2e8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3175b5b21194bcc8f4448abe0a03a98d3a4a1360 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7da101ba9a09a22a85c314a8909fd23468ae66f0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d810f2700f54146063ca2cb6bb1cf03c36744a2c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3b2e9a8312412b9c8d4e986510dcc30ee16c5f4c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fca367548e365f93c58c47dea45507025269f59a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3203cd7629345d32806f470a308975076b2b4686 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b81273e70c9c31ae02cb0a2d6e697d7a4e2b683a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c12fef1b1971ba7a50e7e5c497caf51e0f68479 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e86eb305a542cee5b0ff6a0e0352cb458089bf62 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 48a17c87c15b2fa7ce2e84afa09484f354d57a39 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 98a313305f0d554a179b93695d333199feb5266c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 968ffb2c2e5c6066a2b01ad2a0833c2800880d46 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cb68eef0865df6aedbc11cd81888625a70da6777 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0b813371f5a8af95152cae109d28c7c97bfaf79f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6befb28efd86556e45bb0b213bcfbfa866cac379 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 86523260c495d9a29aa5ab29d50d30a5d1981a0c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9d6310db456de9952453361c860c3ae61b8674ea ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ca0f897376e765989e92e44628228514f431458 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c946bf260d3f7ca54bffb796a82218dce0eb703f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 685760ab33b8f9d7455b18a9ecb8c4c5b3315d66 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 83a9e4a0dad595188ff3fb35bc3dfc4d931eff6d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 264ba6f54f928da31a037966198a0849325b3732 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22a88a7ec38e29827264f558f0c1691b99102e23 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e6019e16d5a74dc49eb7129ee7fd78b4de51dac2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec0657cf5de9aeb5629cc4f4f38b36f48490493e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 517ae56f517f5e7253f878dd1dc3c7c49f53df1a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fafe8a77db75083de3e7af92185ecdb7f2d542d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a17c43d0662bab137903075f2cff34bcabc7e1d1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c72b9a3eaabbe927ba77d4f69a62f35fbe60e2e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20b07fa542d2376a287435a26c967a5ee104667f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8dd51f1d63fa5ee704c2bdf4cb607bb6a71817d2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8e0e315a371cdfc80993a1532f938d56ed7acee4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- beccf1907dae129d95cee53ebe61cc8076792d07 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7029773512eee5a0bb765b82cfdd90fd5ab34e15 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8d0aa1ef19e2c3babee458bd4504820f415148e0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ca3fdbe2232ceb2441dedbec1b685466af95e73b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 61f3db7bd07ac2f3c2ff54615c13bf9219289932 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8867348ca772cdce7434e76eed141f035b63e928 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f24f9540afc0db61d197bc4932697737bff1506 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a21a9f6f13861ddc65671b278e93cf0984adaa30 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b00ad00130389f5b00da9dbfd89c3e02319d2999 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5bd7d44ff7e51105e3e277aee109a45c42590572 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ab454f0ccf09773a4f51045329a69fd73559414 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ccd777c386704911734ae4c33a922a5682ac6c8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7dd618655c96ff32b5c30e41a5406c512bcbb65f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8ad01ee239f9111133e52af29b78daed34c52e49 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 45c0f285a6d9d9214f8167742d12af2855f527fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a93eb7e8484e5bb40f9b8d11ac64a1621cf4c9cd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f1545bd9cd6953c5b39c488bf7fe179676060499 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a8014d2ec56fd684dc81478dee73ca7eda0ab8a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6e5aae2fc8c3832bdae1cd5e0a269405fb059231 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1d1d2cb421f16bd277d7c4ce88398ff0f5afb29 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7cf2d5fcf0a3db793678dd6ba9fc1c24d4eeb36a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a25e1d4aa7e5898ab1224d0e5cc5ecfbe8ed8821 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 739fa140235cc9d65c632eaf1f5cacc944d87cfb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bd7fb976ab0607592875b5697dc76c117a18dc73 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ebe8f644e751c1b2115301c1a961bef14d2cce89 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9519f186ce757cdba217f222c95c20033d00f91d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 75c75fa136f6181f6ba2e52b8b85a98d3fe1718e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dec4663129f72321a14efd6de63f14a7419e3ed2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d5bfb5d6d22f8fe8c940f36e1fbe16738965d5f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3f2d76ba8e6d004ff5849ed8c7c34f6a4ac2e1e3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4c34d5c3f2a4ed7194276a026e0ec6437d339c67 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b6b9510e0724bfcb4250f703ddf99d1e4020bbc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cf5eaddde33e983bc7b496f458bdd49154f6f498 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c0b92e40ece170b59bced0cea752904823e06e7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c0990b2a6dd2e777b46c1685ddb985b3c0ef59a2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 97ab197140b16027975c7465a5e8786e6cc8fea1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0c1834134ce177cdbd30a56994fcc4bf8f5be8b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8858a63cb33319f3e739edcbfafdae3ec0fefa33 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 82849578e61a7dfb47fc76dcbe18b1e3b6a36951 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 94029ce1420ced83c3e5dcd181a2280b26574bc9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7a320abc52307b4d4010166bd899ac75024ec9a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13647590f96fb5a22cb60f12c5a70e00065a7f3a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1687283c13caf7ff8d1959591541dff6a171ca1e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 741dfaadf732d4a2a897250c006d5ef3d3cd9f3a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0019d7dc8c72839d238065473a62b137c3c350f5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7cc4d748a132377ffe63534e9777d7541a3253c5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c4d5caa79e6d88bb3f98bfbefa3bfa039c7e157a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f88fb96869b6ac3ed4dac7d23310a9327d3c89c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 609a46a72764dc71104aa5d7b1ca5f53d4237a75 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 394ed7006ee5dc8bddfd132b64001d5dfc0ffdd3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1e6234c27abf041e4c8cd1a799950e7cd9104f6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 192472f9673b18c91ce618e64e935f91769c50e7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b03933057df80ea9f860cc616eb7733f140f866e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 89422841e46efa99bda49acfbe33ee1ca5122845 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e84d05f4bbf7090a9802e9cd198d1c383974cb12 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d9310055f364cf3fa97f663287c596920d6e7e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ef48ca5f54fe31536920ec4171596ff8468db5fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 694265664422abab56e059b5d1c3b9cc05581074 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7b3ef45167e1c2f7d1b7507c13fcedd914f87da9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cbb58869063fe803d232f099888fe9c23510de7b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 33964afb47ce3af8a32e6613b0834e5f94bdfe68 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 33819a21f419453bc2b4ca45b640b9a59361ed2b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 98e6edb546116cd98abdc3b37c6744e859bbde5c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17a172920fde8c6688c8a1a39f258629b8b73757 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d061a1a506b71234f783628ba54a7bdf79bbce9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 24740f22c59c3bcafa7b2c1f2ec997e4e14f3615 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 78d2cd65b8b778f3b0cfef5268b0684314ca22ef ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bcd37b68533d0cceb7e73dd1ed1428fa09f7dc17 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 21b4db556619db2ef25f0e0d90fef7e38e6713e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55b67e8194b8b4d9e73e27feadbf9af6593e4600 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9f73e8ba55f33394161b403bf7b8c2e0e05f47b0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de3b9639a4c2933ebb0f11ad288514cda83c54fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- af5abca21b56fcf641ff916bd567680888c364aa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 258403da9c2a087b10082d26466528fce3de38d4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d4fd7fca515ba9b088a7c811292f76f47d16cd7b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 08457a7a6b6ad4f518fad0d5bca094a2b5b38fbe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ceee7d7e0d98db12067744ac3cd0ab3a49602457 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3288a244428751208394d8137437878277ceb71f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 624556eae1c292a1dc283d9dca1557e28abe8ee3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b425301ad16f265157abdaf47f7af1c1ea879068 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f97653aa06cf84bcf160be3786b6fce49ef52961 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ca288d443f4fc9d790eecb6e1cdf82b6cdd8dc0d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 00ce31ad308ff4c7ef874d2fa64374f47980c85c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a4287f65878000b42d11704692f9ea3734014b4c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 01ab5b96e68657892695c99a93ef909165456689 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4d36f8ff4d1274a8815e932285ad6dbd6b2888af ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f683c6623f73252645bb2819673046c9d397c567 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bc31651674648f026464fd4110858c4ffeac3c18 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1e2f63e64875a29e8c01a7ae17f5744680167a5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fd96cceded27d1372bdc1a851448d2d8613f60f3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f068cdc5a1a13539c4a1d756ae950aab65f5348b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6917ae4ce9eaa0f5ea91592988c1ea830626ac3a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3bd05b426a0e3dec8224244c3c9c0431d1ff130 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9059525a75b91e6eb6a425f1edcc608739727168 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f1401803ccf7db5d897a5ef4b27e2176627c430e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d2ebc6193f7205fd1686678a5707262cb1c59bb0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 73959f3a2d4f224fbda03c8a8850f66f53d8cb3b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8d2239f24f6a54d98201413d4f46256df0d6a5f3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28a33ca17ac5e0816a3e24febb47ffcefa663980 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a32a6bcd784fca9cb2b17365591c29d15c2f638e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 58fb1187b7b8f1e62d3930bdba9be5aba47a52c6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1fe889ea0cb2547584075dc1eb77f52c54b9a8c4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fde6522c40a346c8b1d588a2b8d4dd362ae1f58f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1c6d7830d9b87f47a0bfe82b3b5424a32e3164ad ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 402a6c2808db4333217aa300d0312836fd7923bd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 47e3138ee978ce708a41f38a0d874376d7ae5c78 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0369384c8b79c44c5369f1b6c05046899f8886da ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f963881e53a9f0a2746a11cb9cdfa82eb1f90d8c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- feb1ea0f4aacb9ea6dc4133900e65bf34c0ee02d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 18be0972304dc7f1a2a509595de7da689bddbefa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55dcc17c331f580b3beeb4d5decf64d3baf94f2e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 77cd6659b64cb1950a82e6a3cccdda94f15ae739 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 129f90aa8d83d9b250c87b0ba790605c4a2bb06a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 791765c0dc2d00a9ffa4bc857d09f615cfe3a759 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 57050184f3d962bf91511271af59ee20f3686c3f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 160081b9a7ca191afbec077c4bf970cfd9070d2c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 778234d544b3f58dd415aaf10679d15b01a5281f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1e2265a23ecec4e4d9ad60d788462e7f124f1bb7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 91725f0fc59aa05ef68ab96e9b29009ce84668a5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c4f49fb232acb2c02761a82acc12c4040699685d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aea0243840a46021e6f77c759c960a06151d91c9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0fdf6c3aaff49494c47aaeb0caa04b3016e10a26 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d2d9197cfe5d3b43cb8aee182b2e65c73ef9ab7b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c0ef65b43688b1a4615a1e7332f6215f9a8abb19 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ac62760c52abf28d1fd863f0c0dd48bc4a23d223 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 69dd8750be1fbf55010a738dc1ced4655e727f23 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be97c4558992a437cde235aafc7ae2bd6df84ac8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f164627a85ed7b816759871a76db258515b85678 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1044116d25f0311033e0951d2ab30579bba4b051 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b82dbf538ac0d03968a0f5b7e2318891abefafaa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e837b901dcfac82e864f806c80f4a9cbfdb9c9f3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1d2307532d679393ae067326e4b6fa1a2ba5cc06 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 06590aee389f4466e02407f39af1674366a74705 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c9dbf201b4f0b3c2b299464618cb4ecb624d272c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 38b3cfb9b24a108e0720f7a3f8d6355f7e0bb1a9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d9240918aa03e49feabe43af619019805ac76786 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- abaefc59a7f2986ab344a65ef2a3653ce7dd339f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fe5289ed8311fecf39913ce3ae86b1011eafe5f7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- af32b6e0ad4ab244dc70a5ade0f8a27ab45942f8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28ed48c93f4cc8b6dd23c951363e5bd4e6880992 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6c1faef799095f3990e9970bc2cb10aa0221cf9c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 86ea63504f3e8a74cfb1d533be9d9602d2d17e27 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f91495e271597034226f1b9651345091083172c4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c1169f6ea406fec1e26e99821e18e66437e65eb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7a0b79ee574999ecbc76696506352e4a5a0d7159 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a243827ab3346e188e99db2f9fc1f916941c9b1a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1d8a577ffc6ad7ce1465001ddebdc157aecc1617 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6fbb69306c0e14bacb8dcb92a89af27d3d5d631f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be8955a0fbb77d673587974b763f17c214904b57 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 25dca42bac17d511b7e2ebdd9d1d679e7626db5f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e746f96bcc29238b79118123028ca170adc4ff0f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a28942bdf01f4ddb9d0b5a0489bd6f4e101dd775 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e79999c956e2260c37449139080d351db4aa3627 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1e80445ad5cb6da4c0070d7cb8af89da3b0803b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cac6e06cc9ef2903a15e594186445f3baa989a1a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6d9b1f4f9fa8c9f030e3207e7deacc5d5f8bba4e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b01ca6a3e4ae9d944d799743c8ff774e2a7a82b6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 29eb123beb1c55e5db4aa652d843adccbd09ae18 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1ee2afb00afaf77c883501eac8cd614c8229a444 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1906ee4df9ae4e734288c5203cf79894dff76cab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f606937a7a21237c866efafcad33675e6539c103 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e14e3f143e7260de9581aee27e5a9b2645db72de ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ecf37a1b4c2f70f1fc62a6852f40178bf08b9859 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1e2b46138ba58033738a24dadccc265748fce2ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 257a8a9441fca9a9bc384f673ba86ef5c3f1715d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 18e3252a1f655f09093a4cffd5125342a8f94f3b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1873db442dc7511fc2c92fbaeb8d998d3e62723d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de84cbdd0f9ef97fcd3477b31b040c57192e28d9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4b4a514e51fbc7dc6ddcb27c188159d57b5d1fa9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 365fb14ced88a5571d3287ff1698582ceacd80d6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ff864138cd1e680a78522c26b583639f8f5e313 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17af1f64d5f1e62d40e11b75b1dd48e843748b49 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 26e138cb47dccc859ff219f108ce9b7d96cbcbcd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea81f14dafbfb24d70373c74b5f8dabf3f2225d9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 583e6a25b0d891a2f531a81029f2bac0c237cbf9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1019d4cf68d1acdbb4d6c1abb7e71ac9c0f581af ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 38d59fc8ccccae8882fa48671377bf40a27915a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 07996a1a1e53ffdd2680d4bfbc2f4059687859a5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 01eac1a959c1fa5894a86bf11e6b92f96762bdd8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6d1212e8c412b0b4802bc1080d38d54907db879d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 600fcbc1a2d723f8d51e5f5ab6d9e4c389010e1c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6f8ce8901e21587cd2320562df412e05b5ab1731 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 57a4e09294230a36cc874a6272c71757c48139f2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cfb278d74ad01f3f1edf5e0ad113974a9555038d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fbe062bf6dacd3ad63dd827d898337fa542931ac ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8caeec1b15645fa53ec5ddc6e990e7030ffb7c5a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8b86f9b399a8f5af792a04025fdeefc02883f3e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0974f8737a3c56a7c076f9d0b757c6cb106324fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3323464f85b986cba23176271da92a478b33ab9c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c34343d0b714d2c4657972020afea034a167a682 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de5bc8f7076c5736ef1efa57345564fbc563bd19 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 282018b79cc8df078381097cb3aeb29ff56e83c6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e6bece08aea01859a232e99a1e1ad8cc1eb7d36 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c36f3648e39ace752c67c71867693ce1eee52a3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c083f3d0b853e723d0d4b00ff2f1ec5f65f05cba ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 538820055ce1bf9dd07ecda48210832f96194504 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a988e6985849e4f6a561b4a5468d525c25ce74fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55e757928e493ce93056822d510482e4ffcaac2d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 837c32ba7ff2a3aa566a3b8e1330e3db0b4841d8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae5a69f67822d81bbbd8f4af93be68703e730b37 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1090701721888474d34f8a4af28ee1bb1c3fdaaa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 63761f4cb6f3017c6076ecd826ed0addcfb03061 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e1c89ec97ec90037583e85d0e9e71e9c845a19b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2054561da184955c4be4a92f0b4fa5c5c1c01350 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e41c727be8dbf8f663e67624b109d9f8b135a4ab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a25347d7f4c371345da2348ac6cceec7a143da2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2c8d26d3b25b864ad48e6de018757266b59f708 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 143b927307d46ccb8f1cc095739e9625c03c82ff ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c1a87d11df666d308d14e4ae7ee0e9d614296b6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 15941ca090a2c3c987324fc911bbc6f89e941c47 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22a0289972b365b7912340501b52ca3dd98be289 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- df0892351a394d768489b5647d47b73c24d3ef5f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f78d4a28f307a9d7943a06be9f919304c25ac2d9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d6ceabf5b90e7c0690360fc30774d36644f563c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3e2ba9c2028f21d11988558f3557905d21e93808 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 772b95631916223e472989b43f3a31f61e237f31 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b75c3103a700ac65b6cd18f66e2d0a07cfc09797 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be06e87433685b5ea9cfcc131ab89c56cf8292f2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 898d47d1711accdfded8ee470520fdb96fb12d46 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e5c0002d069382db1768349bf0c5ff40aafbf140 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 69361d96a59381fde0ac34d19df2d4aff05fb9a9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b48e4d3aa853687f420dc51969837734b70bfdec ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 654e54d200135e665e07e9f0097d913a77f169da ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e825f8b69760e269218b1bf1991018baf3c16b04 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13dd59ba5b3228820841682b59bad6c22476ff66 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 82b8902e033430000481eb355733cd7065342037 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 583cd8807259a69fc01874b798f657c1f9ab7828 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- def0f73989047c4ddf9b11da05ad2c9c8e387331 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 619c11787742ce00a0ee8f841cec075897873c79 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 501bf602abea7d21c3dbb409b435976e92033145 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- edd9e23c766cfd51b3a6f6eee5aac0b791ef2fd0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53152a824f5186452504f0b68306d10ebebee416 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 997b7611dc5ec41d0e3860e237b530f387f3524a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c3c271b0d6b5f56b86e3f177caf3e916b509b52 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3776f7a766851058f6435b9f606b16766425d7ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 72bcdbd0a0c8cc6aa2a7433169aa49c7fc19b55b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 619662a9138fd78df02c52cae6dc89db1d70a0e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 09c3f39ceb545e1198ad7a3f470d4ec896ce1add ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4956c1e618bfcfeef86c6ea90c22dd04ca81b9db ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a8a448b7864e21db46184eab0f0a21d7725d074f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5d996892ac76199886ba3e2754ff9c9fac2456d6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6bfdf93201ea413affd4c8fbe406ea2b4a7c1b6b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6a252661c3bf4202a4d571f9c41d2afa48d9d75f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3e14ab55a060a5637e9a4a40e40714c1f441d952 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 867129e2950458ab75523b920a5e227e3efa8bbc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4375386fb9d8c7bc0f952818e14fb04b930cc87d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b27292936c81637f6b9a7141dafaad1126f268e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f96ee7463e2454e95bf0d77ca4fe5107d3f24d68 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b3cde0ee162b8f0cb67da981311c8f9c16050a62 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 76fd1d4119246e2958c571d1f64c5beb88a70bd4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec28ad575ce1d7bb6a616ffc404f32bbb1af67b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 180a5029bc3a2f0c1023c2c63b552766dc524c41 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b72e2704022d889f116e49abf3e1e5d3e3192d3b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a803803f40163c20594f12a5a0a536598daec458 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ab59f78341f1dd188aaf4c30526f6295c63438b1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0bb2fc8129ed9adabec6a605bfe73605862b20d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 61138f2ece0cb864b933698174315c34a78835d1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 15ee0ac0d56a5fb5ba13fae4288621ddd2185f17 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50e469109eed3a752d9a1b0297f16466ad92f8d2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 400d728c99ddeae73c608e244bd301248b5467fc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 65c9fe0baa579173afa5a2d463ac198d06ef4993 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 77cde0043ceb605ed2b1beeba84d05d0fbf536c1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c69b6b979e3d6bd01ec40e75b92b21f7a391f0ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d86e77edd500f09e3e19017c974b525643fbd539 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b3feddd1269a0b0976f4eef2093cb0dbf258f99 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dcf2c3bd2aaf76e2b6e0cc92f838688712ebda6c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a38a0053d31d0285dd1e6ebe6efc28726a9656cc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 697702e72c4b148e987b873e6094da081beeb7cf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b1a2271a03313b561f5b786757feaded3d41b23f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bc66da0d66a9024f0bd86ada1c3cd4451acd8907 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 16a0c64dd5e69ed794ea741bc447f6a1a2bc98e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 54844a90b97fd7854e53a9aec85bf60564362a02 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a97d21936200f1221d8ddd89202042faed1b9bcb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 35057c56ce118e4cbd0584bd4690e765317b4c38 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6a417f4cf2df39704aa4c869e88d14e9806894a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c76a8c5499d22b9c0b4c56f03b671033eb9f9bdd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3326f34712f6a96c162033c7ccf370c8b7bc1ead ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f6102b349cbef03667d5715fcfae3161701a472d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ac4133f51817145e99b896c7063584d4dd18ad59 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8e29a91324ca7086b948a9e3a4dbcbb2254a24a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4ed59a86909b142ede105dd9262915c0e2993ac ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e729429631c84c3bd5602edcab3e7c2ab1dcce0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 12276fedec49c855401262f0929f088ebf33d2cf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7d00fa4f6cad398250ce868cef34357b45abaad3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c05ef0e7543c2845fd431420509476537fefe2b0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1eae9d1532e037a4eb08aaee79ff3233d2737f31 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bae67b87039b3364bdc22b8ef0b75dd18261814c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 615de50240aa34ec9439f81de8736fd3279d476d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f22ddca351c45edab9f71359765e34ae16205fa1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bac518bfa621a6d07e3e4d9f9b481863a98db293 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4f7255c2c1d9e54fc2f6390ad3e0be504e4099d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8775b6417b95865349a59835c673a88a541f3e13 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7ba46b8fba511fdc9b8890c36a6d941d9f2798fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2740d2cf960cec75e0527741da998bf3c28a1a45 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1391bf06a839746bd902dd7cba2c63d1e738d37 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f28a2041f707986b65dbcdb4bb363bb39e4b3f77 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- accfe361443b3cdb8ea43ca0ccb8fbb2fa202e12 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7ef66a66dc52dcdf44cebe435de80634e1beb268 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fa98250e1dd7f296b36e0e541d3777a3256d676c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d638bf6e55bc64c230999c9e42ed1b02505d0ce ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aaeb986f3a09c1353bdf50ab23cca8c53c397831 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c92df685d6c600a0a3324dff08a4d00d829a4f5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e40b5f075bdb9d6c2992a0a1cf05f7f6f4f101a3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5f92b17729e255ca01ffb4ed215d132e05ba4da ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 279d162f54b5156c442c878dee2450f8137d0fe3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1194dc4322e15a816bfa7731a9487f67ba1a02aa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f6c8072daa942e9850b9d7a78bd2a9851c48cd2c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f73385a5f62a211c19d90d3a7c06dcd693b3652d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 202216e2cdb50d0e704682c5f732dfb7c221fbbc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1dd7d6468a54be56039b2e3a50bcf171d8e854ff ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5020eb8ef37571154dd7eff63486f39fc76fea7f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3bee808e15707d849c00e8cea8106e41dd96d771 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 331ddc27a22bde33542f8c1a00b6b56da32e5033 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c0dcc6fb3dfd39df5970d6da340a949902ae629 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f6c32a918544aa239a6c636666ce17752e02f15 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 84f9b603b44e0225391f1495034e0a66514c7368 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 84be1263abac102d8b4bc49096530c6fd45a9b80 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 59b05d06c1babcc8cd1c541716ca25452056020a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f4bc8ee9aeeec8bf7aa31c627e50761dd8bb2db ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1da744421619e134ed3ff2781b4d97fee78d9cd4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d884adc80c80300b4cc05321494713904ef1df2d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d2ff5822dbefa1c9c8177cbf9f0879c5cf4efc5c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 05d2687afcc78cd192714ee3d71fdf36a37d110f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ace1fed6321bb8dd6d38b2f58d7cf815fa16db7a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e0f2bb42b56f770c50a6ef087e9049fa6ac11fb5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6226720b0e6a5f7cb9223fc50363def487831315 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2df1f56cccab13d5c92abbc6b18be725e7b4833 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f1e9df152219e85798d78284beeda88f6baa9ec7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 819d6aceeb4d31c153de58081b21ad4f8b559c0e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b0e84a3401c84507dc017d6e4f57a9dfdb31de53 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4186a2dbbd48fd67ff88075c63bbd3e6c1d8a2df ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 58d692e2a1d7e3894dbed68efbcf7166d6ec3fb7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b67bd4c730273a9b6cce49a8444fb54e654de540 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 52bb0046c0bf0e50598c513e43b76d593f2cbbff ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fc2201e660014c5d91fec8e3c3a3fa5a66dcf33b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 179a1dcc65366a70369917d87d00b558a6d0c04d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6da04adff0b96c5163b0c2530028b72be2fd26fd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 07eaa4ce2696a88ec0db6e91f191af1e48226aca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 637eadce54ca8bbe536bcf7c570c025e28e47129 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1a4bfd979e5d4ea0d0457e552202eb2effc36cac ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 00c5497f190172765cc7a53ff9d8852a26b91676 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f41d42ee7e264ce2fc32cea555e5f666fa1b1fe9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9117cdbb48ffc458d809715c6ab6bc6b416ef621 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b372fdd54bab2ad6639756958978660b12095c3c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2dc5d68491eb3c73ae8478bf6edef80b18564a13 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4251bd59fb8e11e40c40548cba38180a9536118c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2834177c0fdf6b1af659e460fd3348f468b8ab0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7cdfaceebe916c91acdf8de3f9506989bc70ad65 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 806450db9b2c4a829558557ac90bd7596a0654e0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c4cde8df886112ee32b0a09fcac90c28c85ded7f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a885d23bab51b0c00be2780055ff63b3f3c1a4c6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 555b0efc2c19aa8cf7c548b4097bd20a73f572ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5915114cdca6f09fa2355162a43596f5d20273be ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 451561c252323e74696dbe0be36601c95a75a8c3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3c0a65226f038c58fc6d6ed525f38fc00b3579b7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2e6d110fbfa1f2e6a96bc8329e936d0cf1192844 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 39229db70e71a6be275dafb3dd9468930e40ae48 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f9bbdc87a7263f479344fcf67c4b9fd6005bb6cd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 81279eeac5c525354cbe19b24a6f42219407c1f9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e99d9ab2acfaf2ebb4b150736590d6a4e33f449 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13ba1d87ab8fc45d2aed25662bf91053b0db5f9f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2454ae89983a4496a445ce347d7a41c0bb0ea7ae ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c0c2fc4ee2d8a5d0a2de50ba882657989dedc51 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c68459a17ff59043d29c90020fffe651b2164e6a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 832b56394b079c9f6e4c777934447a9e224facfe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9f51eeb2f9a1efe22e45f7a1f7b963100f2f8e6b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 43ab2afba68fd0e1b5d138ed99ffc788dc685e36 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50af864298826feaf94772982bbc7b222b4b4242 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d9671e15703918048982c9ff4e2e0fef21ede320 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 75c161cbc017a7d176dd0d7b937db26b3ce637a1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 84968314ddcbaa0e4b685c71c6ea5524b3aefc80 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 52ab307935bd2bbda52f853f9fc6b49f01897727 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b01824b1aecf8aadae4501e22feb45c20fb26bce ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5df44408218003eb49e3b8fc94329c5e8b46c7d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ce1193c851e98293a237ad3d2d87725c501e89f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e648efdcc1ca904709a646c1dbc797454a307444 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20ef1924b832a3788849793c0ee6b46dd00d4520 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 46c9a0df4403266a320059eaa66e7dce7b3d9ac4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53ed0d43ab950d4deeefd238c7685dabef943800 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3410fdc42075bd788a78f4b2a68c5e2cc0930409 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bca0cb7f507d6a21a652307737a57057692d2f79 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 07c20b4231b12fee42d15f1c44c948ce474f5851 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 708b8dda8e7b87841a5f39c60b799c514e75a9c7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6745f4542cfb74bbf3b933dba7a59ef2f54a4380 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2da2b90e6930023ec5739ae0b714bbdb30874583 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b426893ce331f71165c82b1a86252cd104ae3db ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4748e813980e1316aa364e0830a4dc082ff86eb0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a67bf61b5017e41740e997147dc88282b09c6f86 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be53c1f33107d6891c47c784aeadd6e5ddf78e8c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4c39f9da792792d4e73fc3a5effde66576ae128c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 92a97480edcc0f0de787a752bf90feed0445dd39 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ccde80b7a3037a004a7807a6b79916ce2a1e9729 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a28d3d18f9237af5101eb22e506a9ddda6d44025 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 572ace094208c28ab1a8641aedb038456d13f70b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5593dc014a41c563ba524b9303e75da46ee96bd5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2b93f2a91e0791be3ffda1f753aa6c377bcab4d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9a4b1d4d11eee3c5362a4152216376e634bd14cf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2b7f5cb25e0e03e06ec506d31c001c172dd71ef6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9a119924bd314934158515a1a5f5877be63f6f91 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6eeae8b24135b4de05f6d725b009c287577f053d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0c4269a21b9edf8477f2fee139d5c1b260ebc4f8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ee861ae7a7b36a811aa4b5cc8172c5cbd6a945b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ac36642ce1cde75b222e20f585ddfd240f064da2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bdf2e667f969e5c22985dd232fe3f107fe26e750 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c76852d0bff115720af3f27acdb084c59361e5f6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 15b9129ec639112e94ea96b6a395ad9b149515d1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ead94f267065bb55303f79a0a6df477810b3c68d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3cb5ba18ab1a875ef6b62c65342de476be47871b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fa44e6b579917814740393efc0b990e0fbbbdaf3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ba8d148121b1dbba444849fe9549f36a7d17db28 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bcd57e349c08bd7f076f8d6d2f39b702015358c1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7a7eedde7f5d5082f7f207ef76acccd24a6113b1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ac1cec7066eaa12a8d1a61562bfc6ee77ff5f54d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dbc18b92362f60afc05d4ddadd6e73902ae27ec7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 386d1af07bf1f32fac5e97612441488894f2ffed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50c90666c4de8ac93accdf4040e3eb010a82a46a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ca61d4c68dad68901f8a7364dd210ef27a8b4c6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 101fb1df36f29469ee8f4e0b9e7846d856b87daa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6acec357c7609fdd2cb0f5fdb1d2756726c7fe98 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6bca9899b5edeed7f964e3124e382c3573183c68 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5f23379c496942ea6fe898a7a823b65530c126a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9374a916588d9fe7169937ba262c86ad710cfa74 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f4fa1cb3c3e84cad8b74edb28531d2e27508be26 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 615fc1984b0cc09c8eeab51a1d1c4e05b583b4a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4582f805156095604fe07e71195cd9aa43d7a34 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20f202d83bdf1f332a3cb8f010bcf8bf3c2807bd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5eb0f2c241718bc7462be44e5e8e1e36e35f9b15 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2792e534dd55fe03bca302f87a3ea638a7278bf1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec3d91644561ef59ecdde59ddced38660923e916 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 79cfe05054de8a31758eb3de74532ed422c8da27 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ee31065abea645cbc2cf3e54b691d5983a228b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 86fa577e135713e56b287169d69d976cde27ac97 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b89f39432cdb395f5fbb9553b56595d29e2b773 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ef1f89abe5b2334705ee8f1a6da231b0b6c9a50 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e70f3218e910d2b3dcb8a5ab40c65b6bd7a8e9a8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b65df78a10c3bcc40d18f3e926bb5a49821acc31 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8430529e1a9fb28d8586d24ee507a8195c370fa5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a58a60ac5f322eb4bfd38741469ff21b5a33d2d5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 00499d994fea6fb55a33c788f069782f917dbdd4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 291d2f85bb861ec23b80854b974f3b7a8ded2921 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b2ccae0d7fca3a99fc6a3f85f554d162a3fdc916 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6ffd4b0193acf86b6a6e179f8673ed38bad3191d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ff3d142387e1f38b0ed390333ea99e2e23d96e35 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b2a14e4b96a0ffc5353733b50266b477539ef899 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d1bd99c0a376dec63f0f050aeb0c40664260da16 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 78a46c432b31a0ea4c12c391c404cd128df4d709 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 461fd06e1f2d91dfbe47168b53815086212862e4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4b43ca7ff72d5f535134241e7c797ddc9c7a3573 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 39f85c4358b7346fee22169da9cad93901ea9eb9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- beb76aba0c835669629d95c905551f58cc927299 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20c34a929a8b2871edd4fd44a38688e8977a4be6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea33fe8b21d2b02f902b131aba0d14389f2f8715 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b7a5c05875a760c0bf83af6617c68061bda6cfc5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ba2aef8f59009756567a53daaf918afa851c304 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8b5121414aaf2648b0e809e926d1016249c0222c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6ba8b8b91907bd087dfe201eb0d5dae2feb54881 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5117c9c8a4d3af19a9958677e45cda9269de1541 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- af9e37c5c8714136974124621d20c0436bb0735f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3c658c16f3437ed7e78f6072b6996cb423a8f504 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1496979cf7e9692ef869d2f99da6141756e08d25 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 58e2157ad3aa9d75ef4abb90eb2d1f01fba0ba2b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0725af77afc619cdfbe3cec727187e442cceaf97 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 685d6e651197d54e9a3e36f5adbadd4d21f4c7e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5e062f4d043234312446ea9445f07bd9dc309ce3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1083748b828dfca6a72014434850da0f2a0579ab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4c73e9cd66c77934f8a262b0c1bab9c2f15449ba ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 59e26435a8d2008073fc315bafe9f329d0ef689a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b197b2dbb527de9856e6e808339ab0ceaf0a512d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7184340f9d826a52b9e72fce8a30b21a7c73d5be ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9dfd6bcca5499e1cd472c092bc58426e9b72cccc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a519942a295cc39af4eebb7ba74b184decae13fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6c486b2e699082763075a169c56a4b01f99fc4b9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 11ec2e08e1796b5914cd9c4830813482753ecfa0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c53eeaca19163b2b5484304a9ecce3ef92164d70 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3c770f8e98a0079497d3eb5bc31e7260cc70cc63 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 36f838e7977e62284d2928f65cacf29771f1952f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f9cec00938d9059882bb8eabdaf2f775943e00e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 44a601a068f4f543f73fd9c49e264c931b1e1652 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4712c619ed6a2ce54b781fe404fedc269b77e5dd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5da34fddda2ea6de19ecf04efd75e323c4bb41e4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3942cdff6254d59100db2ff6a3c4460c1d6dbefe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 25945899a0067a2dbeeae7a8362a6d68bbc5c6ba ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c3bbc43d097656b54c808290ce0c656d127ce47 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d9e7f1121d3bdbb08291c7164ad622350544a21 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b999cae064fb6ac11a61a39856e074341baeefde ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b9776e88f7abb59cebac8733c04cccf6eee1c60 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dc518251eb64c3ef90502697a7e08abe3f8310b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 753e908dcea03cf9962cf45d3965cf93b0d30d94 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dc1fcf372878240e0a1af20641d361f14aea7252 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4fe5cfa0e063a8d51a1eb6f014e2aaa994e5e7d4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f2b19de3301e76ab3a6187a49c9c93ff78bafbd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bb0ac304431e8aed686a8a817aaccd74b1ba4f24 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0cd09bd306486028f5442c56ef2e947355a06282 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1047b41e2e925617474e2e7c9927314f71ce7365 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 146a6fe18da94e12aa46ec74582db640e3bbb3a9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9e14356d12226cb140b0e070bd079468b4ab599b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b00f3689aa19938c10576580fbfc9243d9f3866c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f62c9b9c0c9bda792c3fa531b18190e97eb53509 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 30d822a468dc909aac5c83d078a59bfc85fc27aa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13a26d4f9c22695033040dfcd8c76fd94187035b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ddc5496506f0484e4f1331261aa8782c7e606bf2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 87afd252bd11026b6ba3db8525f949cfb62c90fc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5bb812243dd1815651281a54c8191fc8e2bc2d82 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5de63b40dbb8fef7f2f46e42732081ef6d0d8866 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 33fa178eeb7bf519f5fff118ebc8e27e76098363 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aa921fee6014ef43bb2740240e9663e614e25662 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 81d8788d40867f4e5cf3016ef219473951a7f6ed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c23ca3cd9b9bbeaca1b79068dee1eae045be5b6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2f8e6f7ab1e6dbd95c268ba0fc827abc62009013 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ec61d4f7208a2713adeafb947f65fdae0947067 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3c9f55dd8e6697ab2f9eaf384315abd4cbefad38 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7b50af0a20bcc7280940ce07593007d17c5acabd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a7a4388eeaa4b6b94192dce67257a34c4a6cbd26 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 29c20c147b489d873fb988157a37bcf96f96ab45 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- eb8cec3cab142ef4f2773b6fc9d224461a6bf85d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fa8fe4cad336a7bdd8fb315b1ce445669138830c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bb509603e8303cd8ada7cfa1aaa626085b9bb6d6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6662422ba52753f8b10bc053aba82bac3f2e1b9c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d3a24b22d340c62fafc0e75a349c0ffe34d99d7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b1f32e231d391f8e6051957ad947d3659c196b2b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5613079f2494808f048b81815bf708debf7339d2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d7781e1056c672d5212f1aaf4b81ba6f18e8dd8b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a4fb3091a75005b047fbea72f812c53d27b15412 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2e68d907022c84392597e05afc22d9fe06bf0927 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a10aa36bc6a82bd50df6f3df7d6b7ce04a7070f1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 764cc6e344bd034360485018eb750a0e155ca1f6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3131d1a5295508f583ae22788a1065144bec3cee ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a2856af1d9289ee086b10768b53b65e0fd13a335 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 125b4875b5035dc4f6bad4351651a4236b82baeb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5e52a00c81d032b47f1bc352369be3ff8eb87b27 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d97afa24ad1ae453002357e5023f3a116f76fb17 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 138aa2b8b413a19ebf9b2bbb39860089c4436001 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1adc79ac67e5eabaa8b8509150c59bc5bd3fd4e6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 590638f9a56440a2c41cc04f52272ede04c06a43 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5d3e2f7f57620398df896d9569c5d7c5365f823d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6fcbda4e363262a339d1cacbf7d2945ec3bd83f0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- babf5765da3e328cc1060cb9b37fbdeb6fd58350 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 038f183313f796dc0313c03d652a2bcc1698e78e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c231551328faa864848bde6ff8127f59c9566e90 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8df638c22c75ddc9a43ecdde90c0c9939f5009e7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- befb617d0c645a5fa3177a1b830a8c9871da4168 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 35a09c0534e89b2d43ec4101a5fb54576b577905 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b9d6494f1075e5370a20e406c3edb102fca12854 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5047344a22ed824735d6ed1c91008767ea6638b7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a6604a00a652e754cb8b6b0b9f194f839fc38d7c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 127e511ea2e22f3bd9a0279e747e9cfa9509986d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c8c50d8be2dc5ae74e53e44a87f580bf25956af9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 972a8b84bb4a3adec6322219c11370e48824404e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 152bab7eb64e249122fefab0d5531db1e065f539 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ef592d384ad3e0ead5e516f3b2c0f31e6f1e7cab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cf37099ea8d1d8c7fbf9b6d12d7ec0249d3acb8b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4bf8e89e6784e121ddc32990d586e2276ec84596 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2f6a6e35d003c243968cdb41b72fbbe609e56841 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dd76b9e72b21d2502a51e3605e5e6ab640e5f0bd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56823868efddd3bdbc0b624cdc79adc3a2e94a75 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22757ed7b58862cccef64fdc09f93ea1ac72b1d2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bfdc8e26d36833b3a7106c306fdbe6d38dec817e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0425bc64384fe9a6a22edb7831d6e8c1756e2c7e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aa5e366889103172a9829730de1ba26d3dcbc01b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50a9920b1bd9e6e8cf452c774c499b0b9014ccef ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7d6332820eaad3a6d3b0abc93424469a8ef7083a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 43eb1edf93c381bf3f3809a809df33dae23b50d9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e64957d8e52d7542310535bad1e77a9bbd7b4857 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a534eba97db3c2cfb2926368756fd633d25c056 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d4e56f627f94d93c49db40ae5944f880341f4203 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b377c07200392ac35a6ed668673451d3c9b1f5c7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 989671780551b7587d57e1d7cb5eb1002ade75b4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 14cef2bb3e0de02f306fa37c268d6c276326c002 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b9cb007076542e32f7b99bb18bc6ec424f3b407b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d3ce120c9acc7d9d4ce86aa1f07b027d1c45a9a1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0b3ecf2dcace76b65765ddf1901504b0b4861b08 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f3050b578081b24e5cf244fa252f385ffca2bf86 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 11b1f6edc164e2084e3ff034d3b65306c461a0be ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3d5159679d17c1270ad72941922d0f18bdd6415 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 985093bae160419782b3d3cb9151e2e58625fd52 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c04c60f12d3684ecf961509d1b8db895e6f9aac0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53d26977f1aff8289f13c02ee672349d78eeb2f0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 564db4f20bd7189a50a12d612d56ed6391081e83 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 657a57adbff49c553752254c106ce1d5b5690cf8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 26029c29765043376370a2877b7e635c17f5e76d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cbf957a36f5ed47c4387ee8069c56b16d1b4f558 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 924da9604d6474fd1be99dffdcc539eaaaa31626 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9840afda82fafcc3eaf52351c64e2cfdb8962397 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3fd37230e76a014cf5c45d55daf0be2caa6948b7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 345d6be7829c6dab359390ebc5e1a7ae0c6d48bb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a9eeebeddaa20d10881ad505cc362a3a391e15b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 225999e9442c746333a8baa17a6dbf7341c135ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9513aa01fab73f53e4fe18644c7d5b530a66c6a1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 048acc4596dc1c6d7ed3220807b827056cb01032 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bfdf98cadedfa6042117cd7a83952ca2f465d26f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 919164df96d9f956c8be712f33a9a037b097745b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9acc7806d6bdb306a929c460437d3d03e5e48dcd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a07cdbae1d485fd715a5b6eca767f211770fea4d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 95a83a7de5d3ce84206b9267962c32df4d071c21 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e063d101face690b8cf4132fa419c5ce3857ef44 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a8f8582274cd6a368a79e569e2995cee7d6ea9f9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aed099a73025422f0550f5dd5c3e4651049494b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7fda0ec787de5159534ebc8b81824920d9613575 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17852bde65c12c80170d4c67b3136d8e958a92a9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c63cd9873bf733c068a5f183442ec82873fef1fc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9946e0ce07c8d93a43bd7b8900ddf5d913fe3b03 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5a45790a8699a384c3d218ac4ca8a53c109fd944 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a5cf1bc1d3e38ab32a20707d66b08f1bb0beae91 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5b01b589e7a19d6be5bd6465e600f84aa8015282 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 178dff753350014f6395f41bc21f1adddf73c8e0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b372e26366348920eae32ee81a47b469b511a21f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 66beac619ba944afeca9d15c56ccc60d5276a799 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a0d828fcb1964a578ef3979297c59a41aedba932 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3980f11a9411d0b487b73279346cfae938845e7a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 93e19791659c279f4f7e33a433771beca65bf9ea ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8a0eee3989abd3a5d6d47d0298bd056a954d379b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 579e2c07bbb39577fa32fed8cb42297c1c5516d8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2effd7a10798a1e8e53bb546a67b2ccdea882c50 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fd5f111439e7a2e730b602a155aa533c68badbf8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0aa1ce356c7c3d53d6ee035b4c7bcf425e108cdc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f347c6da5e83b137c337f9ccb190090c27cfc953 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- abc2e538c6f2fe50f93e6c3fe927236bb41f94f4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b38020ae17ed9f83af75ce176e96267dcce6ecbd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 93ad8da5a8c6ddcbe67abae2cc4a7aad8084e736 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 52654c0216dcbe3fa2d9afb1de12c65d18f6a7a4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b63b3bc493a4a44ba1d857c78e4496e40f1d7b8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ef9395f5ffe75f4e43d80cd1fa7b34c8a4db66fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5083752d5d02d6c46bc2f18ba53a28d119af5b9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 24effa4861d6d1e8cffe848ae63fa2ed40be03f6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9aa93b5890acb152c5824a8f75c221cf1addfd1b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d203a0da0c709d301e973a9fe3569efd1fb2bd3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 57a561cda141a0fed3129f4f3488e3b91805e638 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4043468de4fc448b6fda670f33b7f935883793a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- edf9fc528277a53ec37d1bd79fb4f8608cce11ae ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6e1be3032d521e3bf2f49fc87f82c8f978079ea6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bf2083922b7bccc31917bf9cdb74e3d4892c2600 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- eba67171bf6ea653dfb6a6ae288f3c1d10829870 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 277be842bf30848e7292a931169bd4c8ff726dee ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 79ec3a5191f9dfd398d98fe7372ad841f34876ed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b919010b0459b2540fb609c5d1aad0b8dc0fab01 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 105fea3ef3be4b47cc3602423919329162dfcecf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b5278c514068f469f2fca7638ef1e1b27556a37a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7f34a25eaa6de187797442bc6e0514289d77fed2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a935501a2f62d103cf9d69d775399dae2e7dfead ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 12b32450c210cec1fdd8b2c19d564776e8054aa3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 26719d252dd8e3a53c08da2ed3c3a8d62fbbc30a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55f0245f3ee538ec49e84bcb28c33b135a07f0b9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d2c1bd80350f692c5c2298cb88859564ec0a061b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 48af0ac87dc3beef4d3e6c7982b158d50f7b2a6e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 039bfe373c990fc6db3808d255abaff91235e82f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dafe71a3e2d5cfb9b80805a26d5442ca5ad8332f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d5625170b248edc6a570c977fb1f8e7430ffd0b5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f043f00d5161794ef538802dcc9ba75e375c058 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1a5885a4c5983242b1356b57eafeb59a9d5c0d0f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c982c1f50bd7ae3bc4a1afc09e9ad11aecd434f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 273400f95ae036c01d4b0fd7a7ca6ab160efd958 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 233e3ffe0ef35dbabe49340ba567499690dcc166 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7b675bf555e89e708f1b8f79bd90796dd395837b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e7252e217fe6d8f05dd50f6e125c33a1c6fff602 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cbbb6b349e8d0557e7e55e2d05819d6bdaed3769 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ebee400cfa4a532018ee904c22c7e3e6619ca4de ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e10706b6c167454a723636e0929061201a2f461b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 80b60fafa94b794fa77fab85e1df66f52598f3ac ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e509130b7dfc97eeb4a517d6c9c65a8d6204234 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7d49273897bd317323e0a3bbbc01b76e83370f0c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c4d5e7c9dab813adf9bfd8198bb9bb00c9a9503b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a061029eddee38110e416e3c4f60d553dafc9e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 323259cc3d977235f4e7e8980219e5e96d66086e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 80d01f0ef89e287184ba6d07be010ee3f16a74d9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fd47d6b11833870ce23102a3373b7a50a1b45d00 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 58fa2c401856f93712ae6cc45d4dc3458ee4b4f4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dc922f3678a1b01cac2b3f1ec74b831ffec52a71 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2405cf54ac06140a0821f55b34c1d54f699e8e73 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 579d1b8174c9be915c0fa17a67fc38cc6de36ad7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8501e908bb8c531dfa75cef33fcec519027f4e5b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a7129dc00826cb344c0202f152f1be33ea9326fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 85c6252b54108750291021a74dc00895f79a7ccf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1accc498c40e684f870d38b7d128739a0ebf57cf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 27ceafbb3f74b4677d5bae6c7ea031de07c6cfad ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c60b88138b836307bdde0487c4ffb82121b1c5e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 70094734d601e1220c95ac586fdffbda3a23e10b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 69a56c4e2addd1ec53bb40e8a18f52353d1fc28c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5962862e9ba0a1c9a14306688973946f6f7ce75c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 03bfdb16cd7cc6e1c7c8d3b59552da7de3d82d1c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 71cd409660bc5b8c211dc7c51afae481d822d593 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 35ddb45b41b3de2d4f783608ad8d8752f6557997 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 30472cf3132b8c03e528b23d1c7533de740e28ab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1dc09f0ece61ef2bd629e8bfe532aa24f4f8e0c2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae54e18d7ca7bc8b8fbc667119fb60b25f0f3871 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 207bf7bf30651c3284408d87d7c499e43db6bc83 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b975d9fcf5924800f9ea5d68d7d79f743ca9af7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d7e59d3ef86beb3b3b3e53a610af122b2220841b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0651f0964ba5a33257ebbda1e92c7a1649a4a058 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 062aafa396866d4dfe8f3fd2f32d46fa7c01b6dd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea6af04977c197fd07ab812d394dcb61feebaf67 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 657e98094f0f669809bc0e47f3d6bd9a8124cf32 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c35350e5bc4fe113330818ca6784ff368c5ffef ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 620dbee78ed8481d108327c4c332899df7cb8ef4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6383196b7bb0773c0083a2a3d49a95e5479715bf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9066712dca21ef35c534e068f2cc4fefdccf1ea3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 933d23bf95a5bd1624fbcdf328d904e1fa173474 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f66cfbbce58b4b552b041707a12d437cc5f400a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7156cece3c49544abb6bf7a0c218eb36646fad6d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 33ebe7acec14b25c5f84f35a664803fcab2f7781 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b213ab544114f7e6148ee5f2dda9b7421d2d998 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a0bb1b1d427b620d7acbada46a13c3123412e66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03db7c345b3ac7e4fc55646775438c86f9b79ee7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a98c7404d85ca0fdc96a5f4c0c740f5f13c62cb7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f8c61dbd14ec1bdbbee59e301aef2c158bf7b55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4359204a9b05c4abba3bc61c504dca38231d45f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d7b8ba9f2e9298496232e4ae66bd904a1d71001 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff56dbbfceef2211087aed2619b7da2e42f235e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17c750a0803ae222f1cdaf3d6282a7e1b2046adb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eff48b8ba25a0ea36a7286aa16d8888315eb1205 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09fb2274db09e44bf3bc14da482ffa9a98659c54 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07bfe1a60ae93d8b40c9aa01a3775f334d680daa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aba4d9b4029373d2bccc961a23134454072936ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b09003fffa8196277bcfaa9984a3e6833805a6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc8d23d3d6e735d70fd0a60641c58f6e44e17029 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b0465c9bcca64c3a863a95735cc5e602946facb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eae33d324376a0a1800e51bddf7f23a343f45a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d9011c05b0e27f1324f393e65954542544250d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb3fec340f89955a4b0adfd64636d26300d22af9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b72118e231c7bc42f457e2b02e0f90e8f87a5794 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59c89441fb81b0f4549e4bf7ab01f4c27da54aad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe594eb345fbefaee3b82436183d6560991724cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- affee359af09cf7971676263f59118de82e7e059 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9f9027779931c3cdb04d570df5f01596539791b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f5d2fd68e784c2b2fd914a196c66960c7f48b49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26dfeb66be61e9a2a9087bdecc98d255c0306079 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bf00a6719804c2fc5cca280e9dae6774acc1237 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae9d56e0fdd4df335a9def66aa2ac96459ed6e5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cef949913659584dd980f3de363dd830392bb68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3903d8e03af5c1e01c1a96919b926c55f45052e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 42e4f5e26b812385df65f8f32081035e2fb2a121 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6500844a925f0df90a0926dbdfc7b5ebb4a97bc9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00b5802f9b8cc01e0bf0af3efdd3c797d7885bb1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b6fe83f4d817a3b73b44df16cfb4f96bd4d9904 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ca97dcef3131a11dd5ef41d674bb6bd36608608 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 702bdf105205ca845a50b16d6703828d18e93003 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a61a63ed4bb866b2817acbb04e045f8460e040e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79e24f78fa35136216130a10d163c91f9a6d4970 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abf9373865c319d2f1aaf188feef900bb8ebf933 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 057514e85bc99754e08d45385bf316920963adf9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a625d08801eacd94f373074d2c771103823954d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dbc2be846d1d00e907efbf8171c35b889ab0155 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb02e1229d336decc7bae970483ff727ed7339db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17643e0bd1b65155412ba5dba8f995a4f0080188 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eae0e37c88a71a3b8ca816b820eed71fd1590f11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b11bcfa3df4d0b792823930bffae126fd12673f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33346b25c3a4fb5ea37202d88d6a6c66379099c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572bbb39bf36fecb502c9fdf251b760c92080e1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e76b5379cf55fcd31a2e8696fb97adf8c4df1a8d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b38725361f711ae638c048f93a7b6a12d165bd4e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34356322ca137ae6183dfdd8ea6634b64512591a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2448ac4ca337665eb22b9dd5ca096ef625a8f52b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96f8f17d5d63c0e0c044ac3f56e94a1aa2e45ec3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b16037a4ff17f0e25add382c3550323373c4398 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 559ddb3b60e36a1b9c4a145d7a00a295a37d46a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90fefb0a8cc5dc793d40608e2d6a2398acecef12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f97d37881d50da8f9702681bc1928a8d44119e88 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e37ebaa5407408ee73479a12ada0c4a75e602092 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86114886ae8c2e1a9c09fdc145269089f281d212 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- baec2e293158ccffd5657abf4acdae18256c6c90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c08f592cc0238054ec57b6024521a04cf70e692f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1fa8506d177fa49552ffa84527c35d32f193abe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18b75d9e63f513e972cbc09c06b040bcdb15aa05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6752fad0e93d1d2747f56be30a52fea212bd15d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fd9f6ee5c8b4ae4e01a40dc398e2768d838210d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71e28b8e2ac1b8bc8990454721740b2073829110 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a094ac1808f7c5fa0653ac075074bb2232223ac1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b0028e1e75e1ee0eea63ba78cb3160d49c1f3a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ad4079dde47ce721e7652f56a81a28063052a166 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26ccee15ae1712baf68df99d3f5f2fec5517ecbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 300261de4831207126906a6f4848a680f757fbd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4fe276637fe1ce3b2ebb504b69268d5b79de1ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d92fee01b05e5e217e6dad5cc621801c31debae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c6178f53233aa98a602854240a7a20b6537aa7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af7913cd75582f49bb8f143125494d7601bbcc0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f2f3e848e10d145fe28d6a8e07b0c579dd0c276 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 803aca26d3f611f7dfd7148f093f525578d609ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9b0e75c07ccbf90a9f2e67873ffbe672bb1a859 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c34c23a830bb45726c52bd5dcd84c2d5092418e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f8320b7bf75b6ec375ade605a9812b4b2147de9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3778ec37d17a6eb781fa9c6b5e2009fa7542d77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a880c5f4e00ef7bdfa3d55a187b6bb9c4fdd59ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1cd58ba862cce9cd9293933acd70b1a12feb5a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7988bb8ce25eb171d7fea88e3e6496504d0cb8f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9de6450084eee405da03b7a948015738b15f59e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c19a6e1004bb8c116bfc7823477118490a2eef6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a1339a3d6751b2e7c125aa3195bdc872d45a887 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 037d62a9966743cf7130193fa08d5182df251b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dd3cdfc9d647ecb020625351e0ff3a7346e1918d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2765dfd72cd5b0958ec574bea867f5dc1c086ab0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f653af66e4c9461579ec44db50e113facf61e2d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8cad756f357eb587f9f85f586617bff6d6c3ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21e21d04bb216a1d7dc42b97bf6dc64864bb5968 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dd71d3edbf3930cce953736e026ac3c90dd2e59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69b75e167408d0dfa3ff8a00c185b3a0bc965b58 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82189398e3b9e8f5d8f97074784d77d7c27086ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb7288d4f4a93d07c9989c90511f6887bcaeb25 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 696e4edd6c6d20d13e53a93759e63c675532af05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e4211b20e8e57fe7b105b36501b8fc9e818852f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24f75e7bae3974746f29aaecf6de011af79a675d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfbd5ece215dea328c3c6c4cba31225caa66ae9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9541d6bffe4e4275351d69fec2baf6327e1ff053 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08989071e8c47bb75f3a5f171d821b805380baef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e30a597b028290c7f703e68c4698499b3362a38f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c96476be7f10616768584a95d06cd1bddfe6d404 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c6e67013fd22840d6cd6cb1a22fcf52eecab530 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ba76d683df326f2e6d4f519675baf86d0373abf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cd47aeea822c484342e3f0632ae5cf8d332797d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 60acfa5d8d454a7c968640a307772902d211f043 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2067ba536dd78549d613dc14d8ad223c7d0aa5d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df6fa49c0662104a5f563a3495c8170e2865e31b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a9f8c55d6a58fe42fe67e112cbc98de97140f75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 624eb284e0e6edc4aabf0afbdc1438e32d13f4c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 135e7750f6b70702de6ce55633f2e508188a5c05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1759a78b31760aa4b23133d96a8cde0d1e7b7ba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb411ee92d30675a8d3d110f579692ea02949ccd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7b5e92791dd4db3535b527079f985f91d1a5100 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94bbe51e8dc21afde4148afb07536d1d689cc6ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb7fd31955aaba8becbdffb75dab2963d5f5ad8c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f9840b9220d57b737ca98343e7a756552739168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98595da46f1b6315d3c91122cfb18bbf9bac8b3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a1991773b79c50d4828091f58d2e5b0077ade96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ef37754527948af1338f8e4a408bda7034d004f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30387f16920f69544fcc7db40dfae554bcd7d1cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b68361c8b81b23be477b485e2738844e0832b2f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 176838a364fa36613cd57488c352f56352be3139 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3ea6c0564a4a8c310d0573cebac0a21ac7ab0a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a175068f3366bb12dba8231f2a017ca2f24024a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3edd16ca6e217ee35353564cad3aa2920bc0c2e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9cb7ae8d9721e1269f5bacd6dbc33ecdec4659c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5f0d48745727684473cf583a002e2c31174de2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe65adc904f3e3ebf74e983e91b4346d5bacc468 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0238e6cce512a0960d280e7ec932ff1aaab9d0f1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50edc9af4ab43c510237371aceadd520442f3e24 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7bde529ad7a8d663ce741c2d42d41d552701e19a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5453888091a86472e024753962a7510410171cbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b7839e6b55953ddac7e8f13b2f9e2fa2dea528b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 411635f78229cdec26167652d44434bf8aa309ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99ba753b837faab0509728ee455507f1a682b471 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4720e6337bb14f24ec0b2b4a96359a9460dadee4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24cd6dafc0008f155271f9462ae6ba6f0c0127a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a71ebbc1138c11fccf5cdea8d4709810360c82c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69ca329f6015301e289fcbb3c021e430c1bdfa81 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c6209f12e78218632319620da066c99d6f771d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f14903a0d4bb3737c88386a5ad8a87479ddd8448 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2fd537b5b3bb062a26c9b16a52236b2625ff44c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e236853b14795edec3f09c50ce4bb0c4efad6176 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b860d1873a25e6577a8952d625ca063f1cf66a84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fbc2304fea19a2b6fc53f4f6448102768e3eeb2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 890fd8f03ae56e39f7dc26471337f97e9ccc4749 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07f6f2aaa5bda8ca4c82ee740de156497bec1f56 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d4dd2f1a6f31df9e361ebaf75bc0a2de7110c37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 466ed9c7a6a9d6d1a61e2c5dbe6f850ee04e8b90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdd4368489345a53bceb40ebd518b961f871b7b3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d472327f4873a7a4123f7bdaecd967a86e30446 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86b269e1bff281e817b6ea820989f26d1c2a4ba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f344c8839a1ac7e4b849077906beb20d69cd11ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f404a50e95dd38012d33ee8041462b7659d79a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2616e12df494774f13fd88538e9a58673f5dabb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 391c0023675b8372cff768ff6818be456a775185 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 97aec35365231c8f81c68bcab9e9fcf375d2b0dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 173cb579972dbab1c883e455e1c9989e056a8a92 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a684a7c41e89ec82b2b03d2050382b5e50db29ee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c382f3678f25f08fc3ef1ef8ba41648f08c957ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3c8760feb03dd039c2d833af127ebd4930972eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 49f13ef2411cee164e31883e247df5376d415d55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a30b2430e25d615c14dafc547caff7da9dd5403 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15e457c8a245a7f9c90588e577a9cc85e1efec07 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 644f75338667592c35f78a2c2ab921e184a903a0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b6d4885db27b6f3e5a286543fd18247d7d765ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb792ea76888970d486323df07105129abbbe466 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5db2e0c666ea65fd15cf1c27d95e529d9e1d1661 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbf3d2745c3758490f31199e31b098945ea81fca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0420b01f24d404217210aeac0c730ec95eb7ee69 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d39bd5345af82e3acbdc1ecb348951b05a5ed1f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac286162b577c35ce855a3048c82808b30b217a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2810e8d3f34015dc5f820ec80eb2cb13c5f77b2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 607df88ee676bc28c80bca069964774f6f07b716 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7b401e0aa9dbb1a7543dde46064b24a5450db19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c9da7310eb6adf67fa8d35821ba500dffd9a2a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c859019afaffc2aadbb1a1db942bc07302087c52 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f358e04cb00647e1c74625a8f669b6803abd1fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a244bd15bcd05c08d524ca9ef307e479e511b54c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863abe8b550d48c020087384d33995ad3dc57638 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84c3f60fc805e0d5e5be488c4dd0ad5af275e495 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9de612ebe54534789822eaa164354d9523f7bde ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0059f432c4b9c564b5fa675e76ee4666be5a3ac8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14a7292b26e6ee86d523be188bd0d70527c5be84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72a2f7dd13fdede555ca66521f8bee73482dc2f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c563b7211b249b803a2a6b0b4f48b48e792d1145 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6804e73beb0900bd1f5fd932fab3a88f44cf7a31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73feb182f49b1223c9a2d8f3e941f305a6427c97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e81fd5447f8800373903e024122d034d74a273f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc553d6843c791fc4ad88d60b7d5b850a13fd0ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99b6dffe9604f86f08c2b53bef4f8ab35bb565a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a5a78b27ce1bcda6597b340d47a20efbac478d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fd8768c64d192b0b26a00d6c12188fcbc2e3224 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eca69510d250f4e69c43a230610b0ed2bd23a2e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c63abb360b4829b3d75d60fb837c0132db0510 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24d04e820ef721c8036e8424acdb1a06dc1e8b11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab361cfecf9c0472f9682d5d18c405bd90ddf6d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99471bb594c365c7ad7ba99faa9e23ee78255eb9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45a5495966c08bb8a269783fd8fa2e1c17d97d6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61fef99bd2ece28b0f2dd282843239ac8db893ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 909ee3b9fe308f99c98ad3cc56f0c608e71fdee7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d94159db3067cc5def101681e6614502837cea5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0412f6d50e9fafbbfac43f5c2a46b68ea51f896f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e47352575d9b0a453770114853620e8342662fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4a83ff7910dc3617583da7e0965cd48a69bb669 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0a69bbec284bccbeecdf155e925c3046f024d4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 625969d5f7532240fcd8e3968ac809d294a647be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e671d243c09aa8162b5c0b7f12496768009a6db0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8cb3e0cac2f1886e4b10ea3b461572e51424acc7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cf0ca8b94dc815598e354d17d87ca77f499cae6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c429fc0382868c22b56e70047b01c0567c0ba31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87abade91f84880e991eaed7ed67b1d6f6b03e17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b17a76731c06c904c505951af24ff4d059ccd975 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158131eba0d5f2b06c5a901a3a15443db9eadad1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04005d5c936a09e27ca3c074887635a2a2da914c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c40cf5e83e56e339ec6ab3e75b008721e544ede ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cb09652c007901b175b4793b351c0ee818eb249 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91f6e625da81cb43ca8bc961da0c060f23777fd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d296eec67a550e4a44f032cfdd35f6099db91597 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ee8b09fd24962889e0e298fa658f1975f7e4e48c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b74a5bb6123b425a370da60bcc229a030e7875c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6b8e7b72ce81524cf82e64ee0c56016106501d96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e82a7845af93955d24a661a1a9acf8dbcce50b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff4f970fa426606dc88d93a4c76a5506ba269258 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2573dd5409e3a88d1297c3f9d7a8f6860e093f65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f4c7f3ec32a1943a0d5cdc0633fc33c94086f5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f4e51bb4fc9d9c74cdbfb26945d053053f60e7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8da4072d71c3b0c13e478dc0e0d92336cf1fdd9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fced2eb501e3428b3e19e5074cf11650945a840 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52f9369ec96dbd7db1ca903be98aeb5da73a6087 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3fabed8d0d237b4d97b695f0dff1ba4f6508e4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00ef69351e5e7bbbad7fd661361b3569b6408d49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eba84183ea79061eebb05eab46f6503c1cf8836f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55fd173c898da2930a331db7755a7338920d3c38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 768b9fffa58e82d6aa1f799bd5caebede9c9231b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d22d57010e064cfb9e0b6160e7bd3bb31dbfffc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a10ceef3599b6efc0e785cfce17f9dd3275d174f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cedd3321e733ee1ef19998cf4fcdb2d2bc3ccd14 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 913b4ad21c4a5045700de9491b0f64fab7bd00ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6aa78cd3b969ede76a1a6e660962e898421d4ed8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e633cc009fe3dc8d29503b0d14532dc5e8c44cce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05cf33acc6f451026e22dbbb4db8b10c5eb7c65a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e50ee0a0370fcd45a9889e00f26c62fb8f6fa44e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5f3c586e0f06df7ee0fc81289c93d393ea21776 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7392d68121befe838d2494177531083e22b3d29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc209ec23819313ea3273c8c3dcbc2660b45ad6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbd9ca4f16830c4991d570d3f9fa327359a2fa11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5dd2f0c0ed534ecbc1c1a2d8e07319799a4e9c7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae7499f316770185d6e9795430fa907ca3f29679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db4cb7c6975914cbdd706e82c4914e2cb2b415e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdfd3fc5b4d892b79dfa86845fcde0acc8fc23a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec29b1562a3b7c2bf62e54e39dce18aebbb58959 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 438d3e6e8171189cfdc0a3507475f7a42d91bf02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d01f0726d5764fe2e2f0abddd9bd2e0748173e06 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2ce56ffd016e2e6d1258ce5436787cae48a0812 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e27496dea8a728446e7f13c4ff1b5d8c2f3e736 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a2f8a9db703e55f3aa2b068cb7363fd3c757e71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 820bc3482b6add7c733f36fefcc22584eb6d3474 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9432bedaa938eb0e5a48c9122dd41b08a8f0d740 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80ac0fcf1b8e8d8681f34fd7d12e10b3ab450342 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7cff58fd53bdb50fef857fdae65ee1230fd0061 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 313b3b4425012528222e086b49359dacad26d678 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85cf7e89682d061ea86514c112dfb684af664d45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d17c2f6131b9a716f5310562181f3917ddd08f91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ee6c19423297b4c667d34ed1bd621dafaabb0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 553500a3447667aaa9bd3b922742575562c03b68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebf46561837f579d202d7bd4a22362f24fb858a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a103d8c28b496ead8b4dd8215b103414f8b7f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05b5cedec2101b8f9b83b9d6ec6a8c2b4c9236bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34afc113b669873cbaa0a5eafee10e7ac89f11d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a61393899b50ae5040455499493104fb4bad6feb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6446608fdccf045c60473d5b75a7fa5892d69040 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d85574e0f37e82e266a7c56e4a3ded9e9c76d8a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6244c55e8cbe7b039780cf7585be85081345b480 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05753c1836fb924da148b992f750d0a4a895a81a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfa0eac1578bff14a8f7fa00bfc3c57aba24f877 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74930577ec77fefe6ae9989a5aeb8f244923c9ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2636d216d43b40a477d3a5180f308fc071abaeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38c624f74061a459a94f6d1dac250271f5548dab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14d7034adc2698c1e7dd13570c23d217c753e932 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44496c6370d8f9b15b953a88b33816a92096ce4d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a086625da1939d2ccfc0dd27e4d5d63f47c3d2c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 544ceecf1a8d397635592d82808d3bb1a6d57e76 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b303cb0c5995bf9c74db34a8082cdf5258c250fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fd090293792884f5a0d05f69109da1c970c3cab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95897f99551db8d81ca77adec3f44e459899c20b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4744efbb68c562adf7b42fc33381d27a463ae07a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3c3efd20c50b2a9db98a892b803eb285b2a4f83 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71b3845807458766cd715c60a5f244836f4273b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59ad90694b5393ce7f6790ade9cb58c24b8028e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43564d2e8f3b95f33e10a5c8cc2d75c0252d659a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ba39bd0f0b27152de78394d2a37f3f81016d848 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ba1ceaeadd8ff39810c5f410f92051a36dd17e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5eb90461917afe04f31abedae894e63f81f827e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 19a4df655ae2ee91a658c249f5abcbe0e208fa72 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 248ad822e2a649d20582631029e788fb09f05070 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b269775a75d9ccc565bbc6b5d4c6e600db0cd942 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 763531418cb3a2f23748d091be6e704e797a3968 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f7e92cf00814fc6c4fb66527d33f7030f98e6bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69d7a0c42cb63dab2f585fb47a08044379f1a549 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 64b85ee4cbaeb38a6dc1637a5a1cf04e98031b4b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf1354bb899726e17eaaf1df504c280b3e56f3d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55146609e2d0b120c5417714a183b3b0b625ea80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 289fab8c6bc914248f03394672d650180cf39612 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f2b40d74c67c6fa718f9079654386ab333476d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba169916b4cc6053b610eda6429446c375295d78 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c459bfcfdd7487f8aae5dd4101e7069f77be846 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 321694534e8782fa701b07c8583bf5eeb520f981 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef2316ab8fd3317316576d2a3c85b59e685a082f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e6099bce97a688c251c29f9e7e83c6402efc783 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7289c75cceaaf292c6ee01a16b24021fd777ad5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01f142158ee5f2c97ff28c27286c0700234bd8d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d0d1d6cfec28ba89ed1819bee9fe75931e765d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb08a3df46718c574e85b53799428060515ace8d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb14533db732d62778ae48a4089b2735fb9e6f92 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3a57f53d74998e835bce1a69bccbd9c1dadd6f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f83797aefa6a04372c0d5c5d86280c32e4977071 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b16b6649cfdaac0c6734af1b432c57ab31680081 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05e9a6fc1fcb996d8a37faf64f60164252cc90c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7081db74a06c89a0886e2049f71461d2d1206675 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07f81066d49eea9a24782e9e3511c623c7eab788 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d66f8f79629bcfa846a3d24a2a2c3b99fb2a13f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16c2d9c8f0e10393bf46680d93cdcd3ce6aa9cfd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89d11338daef3fc8f372f95847593bf07cf91ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ad6dc07790fe567412ccbc2a539f4501cb32ab2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 199099611dd2e62bae568897f163210a3e2d7dbb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14f3d06b47526d6f654490b4e850567e1b5d7626 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1349ee61bf58656e00cac5155389af5827934567 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7d2671c6ef156d1a2f6518de4bd43e3bb8745be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a37405664efe3b19af625b11de62832a8cfd311c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cfd4b30cda23270b5bd2d1e287e647664a49fee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccaae094ce6be2727c90788fc5b1222fda3927c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f583a810162c52cb76527d60c3ab6687b238938 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a5cef5c7c4a7130626fc2d7d5d562e1e985bbd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 916a0399c0526f0501ac78e2f70b833372201550 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d759e17181c21379d7274db76d4168cdbb403ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fa1ce2b7dcf7f1643bb494b71b9857cbfb60090 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3face9018b70f1db82101bd5173c01e4d8d2b3bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 23b83cd6a10403b5fe478932980bdd656280844d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf237db554f8e84eaecf0fad1120cbd75718c695 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66bb01306e8f0869436a2dee95e6dbba0c470bc4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 193df8e795de95432b1b73f01f7a3e3c93f433ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0dd99fe29775d6abd05029bc587303b6d37e3560 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb8b383d8be3f9da39c02f5e04fe3cf8260fa470 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63a444dd715efdce66f7ab865fc4027611f4c529 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b207f0e8910a478ad5aba17d19b2b00bf2cd9684 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9121f629d43607f3827c99b5ea0fece356080cf0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 882ebb153e14488b275e374ccebcdda1dea22dd7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fdb1dc77a45a26d8eac9f8b53f4d9200f54f7efe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 359a7e0652b6bf9be9200c651d134ec128d1ea97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bf53a3913d55f933079801ff367db5e326a189a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d7eaf1253245c6b88fd969efa383b775927cdd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d8a5144bd8c0940d9f2593a21aec8bebf7c035 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07657929bc6c0339d4d2e7e1dde1945199374b90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5c94165d24195994c929de95782e1d412e7c2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ff2f4f7a2f8212a68aff34401e66a5905f70f51 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca080bbd16bd5527e3145898f667750feb97c025 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e2d2651773722c05ae13ab084316eb8434a3e98 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6fdb67cec5c75b3f0a855042942dac75c612065 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bebfe31c2d9064d4a13de95ad79a4c9bdc3a33a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87b5d9c8e54e589d59d6b5391734e98618ffe26e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ece804aed9874b4fd1f6b4f4c40268e919a12b17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5cc590c875ada0c55d975cbe26141a94e306c94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fa99bff215249378f90e1ce0254e66af155a301 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dab0c2e0da17c879e13f0b1f6fbf307acf48a4ff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2cd5970af1ea8024ecf82b11c1b3802d7c72ba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acbd5c05c7a7987c0ac9ae925032ae553095ebee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 326409d7afd091c693f3c931654b054df6997d97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71bd08050c122eff2a7b6970ba38564e67e33760 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e7e82b114a5c1b3eb61f171c376e1cf85563d07 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b6b90f9f1e5310a6f39b75e17a04c1133269e8f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- daa3f353091ada049c0ede23997f4801cbe9941b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80204335d827eb9ed4861e16634822bf9aa60912 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 859ad046aecc077b9118f0a1c2896e3f9237cd75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 913d806f02cf50250d230f88b897350581f80f6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce7e1507fa5f6faf049794d4d47b14157d1f2e50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bd86c87c38d58b9ca18241a75c4d28440c7ef150 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e93ffe192427ee2d28a0dd90dbe493e3c54f3eae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a77a17f16ff59f717e5c281ab4189b8f67e25f53 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b176732ba16379d57f53e956456bc2c5970baf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a02facd0b4f9c2d2c039f0d7dc5af8354ce0201b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6df6d41835cd331995ad012ede3f72ef2834a6c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b50b96032094631d395523a379e7f42a58fe8168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b628dccf4102d2a63c6fc8cd957ab1293bafbc6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3bf002e3ccc26ec99e8ada726b8739975cd5640e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 687c8f0494dde31f86f98dcb48b6f3e1338d4308 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dac619e4917b0ad43d836a534633d68a871aecca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1bb0b1751b38da43dbcd2ec58e71eb7b0138d786 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9dbaab311dbafcba0b68edb6ed89988b476f1dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74a0507f4eb468b842d1f644f0e43196cda290a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc664f07535e3b3c1884d0b7f3cbcbadf9adce25 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b13c115994461fb6bafe5dd06490aae020568c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da8aeec539da461b2961ca72049df84bf30473e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c73b239bd10ae2b3cff334ace7ca7ded44850cbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41b9cea832ad5614df94c314d29d4b044aadce88 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31cc0470115b2a0bab7c9d077902953a612bbba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33f2526ba04997569f4cf88ad263a3005220885e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c282315f0b533c3790494767d1da23aaa9d360b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77e47bc313e42f9636e37ec94f2e0b366b492836 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5cd12a6bcace3c99d94bbcf341ad7d4351eaca0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6971a930644d56f10e68e818e5818aa5a5d2e646 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f6bf7948121357a85a8069771919fb13d2cecf9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11fd713f77bb0bc817ff3c17215fd7961c025d7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ee33ac9b234c7501d97b4c2bf2e2035c5ec1fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14b221bf98757ba61977c1021722eb2faec1d7cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce21f63f7acba9b82cea22790c773e539a39c158 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f66e25c25cde2423917ee18c4704fff83b837d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 881e3157d668d33655da29781efed843e4a6902a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11f0634803d43e6b9f248acd45f665bc1d3d2345 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dff4bdd4be62a00d3090647b5a92b51cea730a84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a6ca8c40433400f6bb3ece2ed30808316de5be3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b3ffcdda1114ad204c58bdf3457ac076ae9a0b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8690f8974b07f6be2db9c5248d92476a9bad51f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 530ab00f28262f6be657b8ce7d4673131b2ff34a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 926d45b5fe1b43970fedbaf846b70df6c76727ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c706a217238fbe2073d2a3453c77d3dc17edcc9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e1fe7f6a83633207c9e743708c02c6e66173e7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e4239c4c3b106b436673e4f9cca43448f6f1af9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c49ba433b3ff5960925bd405950aae9306be378b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8fc6563219017354bdfbc1bf62ec3a43ad6febcb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1634dc48b39ecca11dc39fd8bbf9f1d8f1b7be6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89df64132ccd76568ade04b5cf4e68cb67f0c5c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8591a094a768d73e6efb5a698f74d354c989291 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3d9b8df38dacfe563b1dd7abb9d61b664c21186 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1d2f4bc85da47b5863589a47b9246af0298f016 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92a481966870924604113c50645c032fa43ffb1d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ca25b9b090511fb61f9e3122a89b1e26d356618 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 914bbddfe5c02dc3cb23b4057f63359bc41a09ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f99fb4962c2777286a128adbb093d8f25ae9dc7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f08b7730438bde34ae55bc3793fa524047bb804 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9807dd48b73ec43b21aa018bdbf591af4a3cc5f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce5dfe7f95ac35263e41017c8a3c3c40c4333de3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c2446f24bc6a91ca907cb51d0b4a690131222d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29aa1b83edf3254f8031cc58188d2da5a83aaf75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8fd91020739a0d57f1df562a57bf3e50c04c05b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7be3486dc7f91069226919fea146ca1fec905657 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05e3b0e58487c8515846d80b9fffe63bdcce62e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6e0a6cb5c70efd0899f620f83eeebcc464be05c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0857d33852b6b2f4d7bc470b4c97502c7f978180 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e79a3f8f6bc6594002a0747dd4595bc6b88a2b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3265bd8beb017890699d093586126ff8af4a3fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f12b26b81a8e7667b2a26a7878e5bc033610ed5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 190c04569bd2a29597065222cdcc322ec4f2b374 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f76463221cf1c69046b27c07afde4f0442b75d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c1e984b212637fe108c0ddade166bc39f0dd2ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d15bc65735852d3dce5ca6d779a90a50c5323b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09d2ae5f1ca47e3aede940e15c28fc4c3ff1e9eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f14a596a33feaad65f30020759e9f3481a9f1d9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03126bfd6e97ddcfb6bd8d4a893d2d04939f197e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5710466a728446d8169761d9d4c29b1cb752b00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c22f1b05fee73dd212c470fecf29a0df9e25a18f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a14277eecf65ac216dd1b756acee8c23ecdf95d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a96030d82fa379d24b952a58eed395143950c7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2cd130bed184fe761105d60edda6936f348edc6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28cbb953ce01b4eea7f096c28f84da1fbab26694 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d91ae75401b851b71fcc6f4dcf7eb29ed2a63369 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 610d4c97485d2c0d4f65b87f2620a84e0df99341 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfae362363b28be9b86250eb7f6a32dac363c993 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dd14b60b112a867a2217087b7827687102b11fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66328d76a10ea53e4dfe9a9d609b44f30f734c9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7f657fb20c063dfc2a653f050accc9c40d06a60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f237620189a55d491b64cac4b5dc01b832cb3cbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95ff8274a0a0a723349416c60e593b79d16227dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ce49598a25b48ad0ab38cc1101c5e2a42a918e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddb828ecd0e28d346934fd1838a5f1c74363fba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2eb6cf0855232da2b8f37785677d1f58c8e86817 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2af601d5800a39ab04e9fe6cf22ef7b917ab5d67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ef53c53012c450adb8d5d386c207a98b0feb579 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5f034355962c5156f20b4de519aae18478b413a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb43244026643e540a2fac35b2997c6aa0e139c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6cf7a7bd864fe1fb64d7bea0c231c6254f171e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eb497ba1bbcaeb05a413a226fd78e54a29a3ff5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dca537f505e93248739478f17f836ae79e00783 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edb28b9b2c2bd699da0cdf5a4f3f0f0883ab33a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bbaf1c5c792d14867890200db68da9fd82d5997 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fad63e83853a65ee9aa98d47a64da3b71e4c01af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf8dc259fcc9c1397ea67cec3a6a4cb5816e3e68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 375e1e68304582224a29e4928e5c95af0d3ba2fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 559b90229c780663488788831bd06b92d469107f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aec58a9d386d4199374139cd1fc466826ac3d2cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bd708d41090fbe00acb41246eb22fa8b5632967 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc4e3cc8521f8315e98f38c5550d3f179933f340 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6420d2e3a914da1b4ae46c54b9eaa3c43d8fd060 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92c7c8eba97254802593d80f16956be45b753fd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bbcf2fc648561e4fc90ee4cc5525a3257604ec1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c121f60395ce47b2c0f9e26fbc5748b4bb27802d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 32da7feb496ef31c48b5cbe4e37a4c68ed1b7dd5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39335e6242c93d5ba75e7ab8d7926f5a49c119a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c418df44fd6ac431e10b3c9001699f516f3aa183 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ef889531eed9ac73ece70318d4eeb45d81b9bc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dffba51b4fd88f7d26a43cf6d1fbbe3cdb9f44d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c23ae3a48bb37ae7ebd6aacc8539fee090ca34bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8c31c6a6e9ffbfdbd292b8d687809b57644de27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ce2a4b235d2ebc38c3e081c1036e39bde9be036 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96402136e81bd18ed59be14773b08ed96c30c0f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c6ae79a7b38c7800c19e28a846cb2f227e52432 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46c4ec22d70251c487a1d43c69c455fc2baab4f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0788e0be3164acd65e3bc4b5bc1b51179b967ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 830070d7ed09d6eaa4bcaa84ab46c06c8fff33d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e8412226ffe0c046177fa6d838362bfbde60cd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72dddc7981c90a1e844898cf9d1703f5a7a55822 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3bd3c6b94c735c725f39959730de11c1cebe67a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 416daa0d11d6146e00131cf668998656186aef6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ede752333a851ee6ad9ec2260a0fb3e4f3c1b0b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0181a40db75bb27277bec6e0802f09a45f84ffb3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88732b694068704cb151e0c4256a8e8d1adaff38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fdc8ecbc0c1d8a4b76ec653602c5ab06a9659c98 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b197de0ccc0faf8b4b3da77a46750f39bf7acdb3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 552a0aa094f9fd22faf136cdbc4829a367399dfe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2ad9a239b1a06ee19b8edcd273cbfb9775b0a66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddffe26850e8175eb605f975be597afc3fca8a03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d6e1731b6324eba5abc029b26586f966db9fa4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82ae723c8c283970f75c0f4ce097ad4c9734b233 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15b6bbac7bce15f6f7d72618f51877455f3e0ee5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c823d482d03caa8238b48714af4dec6d9e476520 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0c187229cea1eb3f395e7e71f636b97982205ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f21630bcf83c363916d858dd7b6cb1edc75e2d3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06914415434cf002f712a81712024fd90cea2862 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f207e0e15ad243dd24eafce8b60ed2c77d6e725 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8437c014b0a9872168b01790f5423e8e9255840 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b06b13e61e8db81afdd666ac68f4a489cec87d5a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b93ba7ca6913ce7f29e118fd573f6ed95808912b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5149c807ec5f396c1114851ffbd0f88d65d4c84f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c3a6889b654892b3636212b880fa50df0358679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4754fa194360b4648a26b93cdff60d7906eb7f7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- caa0ea7a0893fe90ea043843d4e6ad407126d7b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- afcd64ebbb770908bd2a751279ff070dea5bb97c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aab7dc2c7771118064334ee475dff8a6bb176b57 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e4a4545dd513204efb6afe40e4b50c3b5f77e50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93d530234a4f5533aa99c3b897bb56d375c2ae60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff389af9374116c47e3dc4f8a5979784bf1babff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ca7c019a359c64a040e7f836d3b508d6a718e28 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70bb7e4026f33803bb3798927dbf8999910700d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e12ef59c559e3be8fa4a65e17c9c764da535716e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3165753f9d0d69caabac74eee195887f3fea482 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c170c3e74b8ef90a2c7f47442eabce27411231 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52e28162710eb766ffcfa375ef350078af52c094 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 896830bda41ffc5998e61bedbb187addaf98e825 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b84602026c1cc7b9d83ab618efb6b48503e97af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a596e1284c8a13784fd51b2832815fc2515b8d6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53c15282a84e20ebe0a220ff1421ae29351a1bf3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eacf90dff73ab7578cec1ba0d82930ef3044663 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09c88bec0588522afb820ee0dc704a936484cc45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aafde7d5a8046dc718843ca4b103fcb8a790332c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e355275c57812af0f4c795f229382afdda4bca86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74c7ed0e809d6f3d691d8251c70f9a5dab5fb18d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e5ef73d3d6d9b973a756fddd329cfa2a24884e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f6c697c0df4704206d2fd1572640f7f2bd80c73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 833ac6ec4c9f185fd40af7852b6878326f44a0b3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a2f7dce43617b773a6be425ea155812396d3856 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a469af892b3e929cbe9d29e414b6fcd59bec246e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be44602b633cfb49a472e192f235ba6de0055d38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86aa8738e0df54971e34f2e929484e0476c7f38a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a46f670ba62f9ec9167eb080ee8dce8d5ca44164 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6df78b19b7786b15c664a7a1e0bcbb3e7c80f8da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b440827a04ad23efb891eff28d90f172723c75d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06b16115bee85d7dd12a51c7476b0655068a970c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dc2f7358be152d8e87849ad6606461fb2a4dfd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 361854d1782b8f59dc02aa37cfe285df66048ce6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6497d1e843cbaec2b86cd5a284bd95c693e55cc0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a01ec439e19df83a2ff17d198118bd5a31c488b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f48ef3177bbee78940579d86d1db9bb30fb0798d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 794187ffab92f85934bd7fd2a437e3a446273443 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e25da8ffc66fb215590a0545f6ad44a3fd06c918 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd8537b23ce85be6f9dacb7806e791b7f902a206 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5c1cb715664fd7a98160844572cc473cb6b87c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3b9c0242ba2893231e0ab1c13fa2a0c8a9cfc59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26253699f7425c4ee568170b89513fa49de2773c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d6b417ea3a4507ea78714f0cb7add75b13032d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4592785004ad1a4869d650dc35a1e9099245dad9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0900c55a4b6f76e88da90874ba72df5a5fa2e88c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f73468bb9cb9e479a0b81e3766623c32802db579 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0de60abc5eb71eff14faa0169331327141a5e855 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6b1a9272455ef80f01a48ea22efc85b7f976503 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d37049a815b11b594776d34be50e9c0ba8df497 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80cc71edc172b395db8f14beb7add9a61c4cc2b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e50a8e6156360e0727bedff32584735b85551c5b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48c149c16a9bb06591c2eb0be4cca729b7feac3e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06c9c919707ba4116442ca53ac7cf035540981f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ba897b12024fd20681b7c2f1b40bdbbccd5df59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae6e26ed4abac8b5e4e0a893da5546cd165d48e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df65f51de6ba67138a48185ff2e63077f7fe7ce6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31ad0a0e2588819e791f4269a5d7d7e81a67f8cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5095c16894e6f4da814302349e8e32f84c8c13 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657cd7e47571710246375433795ab60520e20434 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58934b8f939d93f170858a829c0a79657b3885e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d4d70844417bf484ca917326393ca31ff0d22bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e866c4a9897572a550f8ec13b53f6665754050cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83ebc659ace06c0e0822183263b2c10fe376a43e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4ad7cee0f8723226446a993d4f1f3b98e42583a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 788bd7e55085cdb57bce1cabf1d68c172c53f935 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4006c4347788a078051dffd6b197bb0f19d50b86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ec4389bc3d1653af301e93fe0a6b25a31da9f3d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5e6676db845e10bdca47c3fcf8dca9dea75ec42 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ff3a3e72b1ff79e75777ccdddc86f8540ce833d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ed3cd7f798057c02799b6046987ed6a2e313126 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 49a9f84461fa907da786e91e1a8c29d38cdb70eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4896fa2ccbd84553392e2a74af450d807e197783 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c6e5adab98a2ea4253fefc4f83598947f4993ee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de894298780fd90c199ef9e3959a957a24084b14 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06571d7f6a260eda9ff7817764f608b731785d6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 451504f1e1aa84fb3de77adb6c554b9eb4a7d0ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f128ae9a37036614c1b5d44e391ba070dd4326d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07a8f73dca7ec7c2aeb6aa47aaf421d8d22423ad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e02afbb7343a7a4e07e3dcf8b845ea2764d927c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 105a8c0fb3fe61b77956c8ebd3216738c78a3dff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5c8ff218cb3ee5d3dd9119007ea8478626f6d2ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27f394a58b7795303926cd2f7463fc7187e1cce4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9bebaca85a19e0ac8a776ee09981f0c826e1cafa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d22c40b942cca16ff9e70d879b669c97599406b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4510b3c42b85305c95c1f39be2b9872be52c2e5e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5739cd466f77a60425bd2860895799f7c9359d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17020d8ac806faf6ffa178587a97625589ba21eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15ee5a505b43741cdb7c79f41ebfa3d881910a6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da86442f6a7bf1263fb5aafdaf904ed2f7db839f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec830a25d39d4eb842ae016095ba257428772294 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0b21f454ea43a5f67bc4905c641d95f8b6d96fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fde89f2a65c2503e5aaf44628e05079504e559a0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7548a5c43f8c39a8143cdfb9003838e586313078 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2219f13eb6e18bdd498b709e074ff9c7e8cb3511 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 543d900e68883740acf3b07026b262176191ab60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6581acaa7081d29dbf9f35c5ce78db78cf822ab8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88716d3be8d9393fcf5695dd23efb9c252d1b09e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25844b80c56890abc79423a7a727a129b2b9db85 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f91ab7bb0dadfd165031f846ae92c9466dceb66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4ace5482efa4ca8769895dc9506d8eccfb0173d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79fdaf349fa8ad3524f67f1ef86c38ecfc317585 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5089d9d6c303b47936a741b7bdf37293ec3a1c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3f24f64a20d1e09917288f67fd21969f4444acd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e836e5cdcc7e3148c388fe8c4a1bab7eeb00cc3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb20477629bf83e66edc721725effa022a4d6170 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff0365e053a6fa51a7f4e266c290c5e5bd309f6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df3dd9797c8afda79dfa99d90aadee6b0d7a093 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29724818764af6b4d30e845d9280947584078aed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce87a2bec5d9920784a255f11687f58bb5002c4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98889c3ec73bf929cdcb44b92653e429b4955652 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ece57af3b69c38f4dcd19e8ccdd07ec38f899b23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5077dac4c7680c925f4c5e792eeb3c296a3b4c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06ea4a0b0d6fcb20a106f9367f446b13df934533 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 902679c47c3d1238833ac9c9fdbc7c0ddbedf509 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5efdad2502098a2bd3af181931dc011501a13904 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 515a6b9ccf87bd1d3f5f2edd229d442706705df5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04ff96ddd0215881f72cc532adc6ff044e77ea3e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9a7dc5fe98e1aa666445bc240055b21ed809824 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b40d4b54e09a546dd9514b63c0cb141c64d80384 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8486f2d2e5c251d0fa891235a692fa8b1a440a89 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1537aabfa3bb32199e321766793c87864f36ee9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0be02e1471c99e5e5e4bd52db1019006d26c349 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bed46300fe5dcb376d43da56bbcd448d73bb2ea0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f4b1618fbf3b9b1ecaa9812efe8ee822c9579b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ef273914de9b8a50dd0dd5308e66de85eb7d44a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6a6a109885856aeff374c058db0f92c95606a0b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27a041e26f1ec2e24e86ba8ea4d86f083574c659 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d66f2b53af0d8194ee952d90f4dc171aa426c545 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7a2d43495eb184b162f8284c157288abd36666a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec35edc0150b72a7187f4d4de121031ad73c2050 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 123302cee773bc2f222526e036a57ba71d8cafa9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7228ca9bf651d9f06395419752139817511aabe1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a8f96cc8a5135a0ece19e600da914dabca7d215 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db44286366a09f1f65986db2a1c8b470fb417068 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00452efe6c748d0e39444dd16d9eb2ed7cc4e64a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bebc4f56f4e9a0bd3e88fcca3d40ece090252e82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2376bd397f084902196a929171c7f7869529bffc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bcc4d55baef64825b4163c6fb8526a2744b4a86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb577c8a1eca8958415b76cde54d454618ac431e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e73c80dd2dd1c82410fb1ee0e44eca6a73d9f052 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5320a6f68ddec847fa7743ff979df8325552ffd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25c95ace1d0b55641b75030568eefbccd245a6e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a15afe217c7c35d9b71b00c8668ae39823d33247 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eedf3c133a9137723f98df5cd407265c24cc2704 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4937fcd0dad3be003b97926e3377b0565237c5b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05c468eaec0be6ed5a1beae9d70f51655dfba770 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc505ddd603b1570c2c1acc224698e1421ca8a6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b22a5e944b2f00dd8e9e6f0c8c690ef2d6204886 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9149c34a8b99052b4e92289c035a3c2d04fb8246 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c9497463b130cce1de1b5d0b6faada330ecdc96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c673ff2d267b927d2f70765da4dc3543323cc7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 819c4ed8b443baee06472680f8d36022cb9c3240 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c883d129066f0aa11d806f123ef0ef1321262367 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2807d494db24d4d113da88a46992a056942bd828 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d0d6c9824bdd5f2cd5f6886991bb5eadca5120d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26b0f3848f06323fdf951da001a03922aa818ac8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d47fc1b67836f911592c8eb1253f3ab70d2d533d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d04aeaa17e628f13d1a590a32ae96bc7d35775b5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcb6e8832a94776d670095935a7da579a111c028 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08938d6cee0dc4b45744702e7d0e7f74f2713807 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 504870e633eeb5fc1bd7c33b8dde0eb62a5b2d12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bbf1a3b801fb4e00c10f631faa87114dcd0462f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d7a40f603412be7e1046b500057b08558d9d250 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4adafc5a99947301ca0ce40511991d6d54c57a41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76e19e4221684f24ef881415ec6ccb6bab6eb8e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccb653d655a7bf150049df079622f67fbfd83a28 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20a338ff049e7febe97411a6dc418a02ec11eefa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 978eb5bd4751acf9d53c8b6626dc3f7832a20ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9debf6b0aafb6f7781ea9d1383c86939a1aacde3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dabd563ed3d9dc02e01fbf3dd301c94c33d6d273 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfaf706d70c3c113b40ce1cbc4d11d73c7500d73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4c6851c55757fb0bc9d77da97d7db9e7ae232d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c877794b51f43b5fb2338bda478228883288bcdd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2971489fec32160836519e66ca6b97987c33d0c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ceae5e9f6bf753163f81af02640e5a479d2a55c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f4d5ce5f9459e4c7fe4fab95df1a1e4c9be61ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e9481b4ddd70cf44ad041fba771ca5c02b84cf7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f4af7c6db25c5bbec7fdc8dfc0ea6803350d94c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcca77ad97d1dfb657e88519ce8772c5cd189743 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 121f6af3a75e4f48acf31b1af2386cdd5bf91e00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55db0fcce5ec5a92d2bdba8702bdfee9a8bca93d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2f6fef3c887719a250c78c22cba723b2200df1b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ad3931357e5bb01941b50482b4b53934c0b715e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41556dac4ca83477620305273a166e7d5d9f7199 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbc07b421172da4ef3153753709271a71af6966a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84869674124aa5da988188675c1336697c5bcf81 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8775f9b8e40b18352399445dba99dd1d805e8c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b10d5e75570ac6325d1c7e2b32882112330359a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b145de39700001d91662404221609b86d2c659d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b854878fb9df8d1a06c4e97bff5e164957b3a0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3fe8f5df5794015014c53e3adbf53acdb632a8a0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b295c13140f48e6a7125b4e4baf0a0ca03e1e393 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f1110bd9b00cb8c1ea07c3aafe9cde89b3dbf9b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0de827a0e63850517aa93c576c25a37104954dba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d82a6c5ed9108be5802a03c38f728a07da57438e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1a59764096cef4048507cb50f0303f48b87a242 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0900a51f986f3ed736d9556b3296d37933018196 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a929ab29016e91d661274fc3363468eb4a19b4b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ed8939d6167571fc2b141d34f26694a79902fde2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb5e177e5d7931e30b198b06b21809ef6a78b92 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec401e4807165485a4b7a2dad4f74e373ced35ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e58e6a0d78f5298252b2d6c4b0431427ec6d152 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51f79ffeb829315c33ce273ae69baf0fdd1fbd1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84fcf8e90fd41f93d77dd00bf1bc2ffc647340f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 074842accb51b2a0c2c1193018d9f374ac5e948f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f8d9ca08352a28cba3b01e4340a24edc33e13e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8590424997ab1d578c777fe44bf7e4173036f93 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6eb3af27464ffba83e3478b0a0c8b1f9ff190889 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d768f67bd49f28fd2e626f3a8c12bd28ae5ce48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8b837923d506e265ff8bb79af61c0d86e7d5b2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8f7e3772f68c8e6350b9ff5ac981ba3223f2d43 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 039e265819cc6e5241907f1be30d2510bfa5ca6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0acb2229e1ebb59ab343e266fc5c1cc392a974e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2e4134963c971e3259137b84237d6c47964b018 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ab12b403207bb46199f46d5aaa72d3e82a3080d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8324c4b38cf37af416833d36696577d8d35dce7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c58887a2d8554d171a7c76b03bfa919c72e918e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b307f04218e87b814fb57bd9882374a9f2b52922 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c96f5885e1ec1e24b0f8442610de42bd8e168d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11b3a1dfc2eb03094c4c437162ce504722fa7ddf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1883eb9282468b3487d24f143b219b7979d86223 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f360ecd7b2de173106c08238ec60db38ec03ee9b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1d33021feb7324e0f2f91c947468bf282f036d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c8a33e2c9cae8deef1770a5fce85acb2e85b5c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c272abea2c837e4725c37f5c0467f83f3700cd5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af44258fa472a14ff25b4715f1ab934d177bf1fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b21e2f1c0fdef32e7c6329e2bc1b4ce2a7041a2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58c78e649cbac271dee187b055335c876fcb1937 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3d33c113b1dfa4be7e3c9924fae029c178505c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ee9751d4e9e9526dbe810b280a4b95a43105ec9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5e4334f38dce4cf02db5f11a6e5844f3a7c785c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bbf04348b0c79be2103fd3aaa746685578eb12fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9db24bc7a617cf93321bb60de6af2a20efd6afc1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86ec7573a87cd8136d7d497b99594f29e17406d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 02cb16916851336fcf2778d66a6d54ee15d086d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5a9bbef0d2d8fc5877dab55879464a13955a341 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 369e564174bfdd592d64a027bebc3f3f41ee8f11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36dbe7e9b55a09c68ba179bcf2c3d3e1b7898ef3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d0f693184884ffac97908397b074e208c63742b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 040108747e2f868c61f870799a78850b792ddd0a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 300831066507bf8b729a36a074b5c8dbc739128f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bea9077e8356b103289ba481a48d27e92c63ae7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 195ecc3da4a851734a853af6d739c21b44e0d7f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2efb814d0c3720f018f01329e43d9afa11ddf54 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfc70fe92d42a853d4171943bde90d86061e3f3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8724dfa6bf8f6de9c36d10b9b52ab8a1ea30c3b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 640d1506e7f259d675976e7fffcbc854d41d4246 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a771adc5352dd3876dd2ef3d0c52c8e803fc084 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 982eefb2008826604d54c1a6622c12240efb0961 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 152a60f0bd7c5b495a3ce91d0e45393879ec0477 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e15b57bf0bb40ccc6ecbebc5b008f7e96b436f19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 539980d51c159cb9922d0631a2994835b4243808 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14851034ab5204ddb7329eb34bb0964d3f206f2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 32e4e08cf9ccfa90f0bc6d26f0c7007aeafcffeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1199f90c523f170c377bf7a5ca04c2ccaab67e08 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83017bce083c58f9a6fb0c7b13db8eeec6859493 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c594195eb614a200e1abb85706ec7b8b7c91268 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96928d2eb3d98c475fd0737240c06bf8e5f96ad6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9a2ea80aa9970bbd625da4c986d29a36c405629 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e39c8b07d1c98ddf267fbc69649ecbbe043de0fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fe80b03196b1d2421109fad5b456ba7ae4393e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c6d952b17e63c92a060c08eac38165c6fafa869 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e129846a1a5344c8d7c0abe5ec52136c3a581cce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae334e4d145f6787fd08e346a925bbc09e870341 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b0448b65317b2830270ff4156a25aca7941472 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f662857381a0384bd03d72d6132e0b23f52deef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3470e269bcdc9091d0c5e25e7c09ce175c7cee77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 545ac2574cfb75b02e407e814e10f76bc485926d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8bf7d416f60f52335d128cf16fbba0344702e49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a08733d76a8254a20a28f4c3875a173dcf0ad129 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c2dd54358dd526d1d08a8e4a977f041aff74174 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9f8f159ebad405b2c08aa75f735146bb8e216ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 723f100a422577235e06dc024a73285710770fca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98f6995bdcbd10ea0387d0c55cb6351b81a857fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f043d8a1d7f4076350ff0c778bfa60f7aa2f7aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab7c3223076306ca71f692ed5979199863cf45a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fd07a0a7a6300db1db8b300a3f567b31b335570 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54e27f7bbb412408bbf0d2735b07d57193869ea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c27cd907f67f984649ff459dacf3ba105e90ebc2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be81304f2f8aa4a611ba9c46fbb351870aa0ce29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88f3dc2eb94e9e5ff8567be837baf0b90b354f35 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5e607e8aa62ca3778f1026c27a927ee5c79749b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 630d030058c234e50d87196b624adc2049834472 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d1a489931ecbdd652111669c0bd86bcd6f5abbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3236f8b966061b23ba063f3f7e1652764fee968f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0acb8371bb2b68c2bda04db7cb2746ba3f9da86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfcdf2bef08f17b4726b67f06c84be3bfe2c39b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2feb62c17acd1dddb6cd125d8b90933c32f89e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38fc944390d57399d393dc34b4d1c5c81241fb87 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d74543a545a9468cabec5d20519db025952efed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 346424daaaf2bb3936b5f4c2891101763dc2bdc0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f5320e8171324a002d3769824152cf5166a21a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ac93b1d7e0694ceb303ee72c312921a9b1588f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f51fe3e66d358e997f4af4e91a894a635f7cb601 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28d6c90782926412ba76838e7a81e60b41083290 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae0b6fe15e0b89de004d4db40c4ce35e5e2d4536 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8bbfea4cdcb36ce0e9ee7d7cad4c41096d4d54f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91562247e0d11d28b4bc6d85ba50b7af2bd7224b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91645aa87e79e54a56efb8686eb4ab6c8ba67087 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47d9f1321c3a6da68a7909fcb1a66a209066d4c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f498de9bfd67bcbb42d36dfb8ff9e59ec788825b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4df4159413a4bf30a891f21cd69202e8746c8fea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d91ca75500285d19c6ae2d4bf018452ad822a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ffefb154982c6cc47c9be6b3eae6fb1170bb0791 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66c5b33fb5405fe12756f07048e3bcc3a958b2c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ddbe4bc24e634e6496abd3bc6ce3c4377cdf2fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ad07f7b23e762e3eb99ce45020375d2bd743fc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ce3fe7cef8910aadc2a2b39a3dab4242a751380 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f038611ff120f8283f0f1a56962f95b66730c72 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98a17a28a21fe5f06dd2da561839fdbaa1912c64 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2a9b2f22c6fb5bd3e30e674874dbc8aa7e5b00ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34c0831453355e09222ccc6665782d7070f5ddab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 261aedd2e13308755894405c7a76b72373dab879 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1287f69b42fa7d6b9d65abfef80899b22edfef55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d565a874f29701531ce1fc0779592838040d3edf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4d3809161fc54d6913c0c2c7f6a7b51eebe223f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e48e52001d5abad7b28a4ecadde63c78c3946339 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c6c81b3281333a5a1152f667c187c9dce12944 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47ac37be2e0e14e958ad24dc8cba1fa4b7f78700 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb0f3d78d6980a1d43f05cb17a8da57a196a34f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4921139819c7949abaad6cc5679232a0fbb0632 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80701fc6f4bf74d3c6176d76563894ff0f3b32bb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9fbae711b76a4f2fa9345f43da6d2cdedd75d6c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea29541e213df928d356b3c12d4d074001395d3c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e395ac90bf088ad6b5de7dadb6531a6e7f3f4f3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 048ffa58468521c043de567f620003457b8b3dbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df95149198744c258ed6856044ac5e79e6b81404 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5054fdb1766cb035a1186c3cef4a14472fee98d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aaa84341f876927b545abdc674c811d60af00561 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20863cfe4a1b0c5bea18677470a969073570e41c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a223c7b7730c53c3fa1e4c019bd3daefbb8fd74b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4ce247c0380e3806e47b5b3e2b66c29c3ab2680 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c15a6e1923a14bc760851913858a3942a4193cdb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2b59625e9bde14b1d2d476e678326886ab1552 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7b16ade191bb753ebadb45efe6be7386f67351d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67680a0877f01177dc827beb49c83a9174cdb736 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 503b62bd76ee742bd18a1803dac76266fa8901bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a9a5414300a245b6e93ea4f39fbca792c3ec753f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26fc5866f6ed994f3b9d859a3255b10d04ee653d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 508807e59ce9d6c3574d314d502e82238e3e606c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b259098782c2248f6160d2b36d42672d6925023a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27c31e2fde54c0587c032ccffdaa7c4ddf5b2ae5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a41a8b93167a59cd074eb3175490cd61c45b6f6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6569c4849197c9475d85d05205c55e9ef28950c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53e5fb3733e491925a01e9da6243e93c2e4214c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa1b156ee96f5aabdca153c152ec6e3215fdf16f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619c989915b568e4737951fafcbae14cd06d6ea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be074c655ad53927541fc6443eed8b0c2550e415 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e973e6f829de5dd1c09d0db39d232230e7eb01d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d39529eea4d0ecfcd65a2d245284174cd2e0aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8eae18dcc360e6ab96c2291982bd4306adc01b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7671110bc865786ffe61cf9b92bf43c03759229 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ede325d15ba9cba0e7fe9ee693085fd5db966629 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43e430d7fa5298f6db6b1649c1a77c208bacf2fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfb0a9c4bca590efaa86f8edc3fdb62bd536bce7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acd82464a11f3c2d3edc1d152d028a142da31a9f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e84300df7deed9abf248f79526a5b41fd2f7f76e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 597bc56a32e1b709eefa4e573f11387d04629f0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- becf5efbfc4aee2677e29e1c8cbd756571cb649d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e8aa9b0aefc30ee5807c2b2cf433a38555b7e0b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c6ab4f7572fd5ca8638f3cb6e342d5000955e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfce49feb0be6c69f7fffc57ebdd22b6da241278 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b825dc74773ffa5c7a45b48d72616b222ad2023e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0cb95c5df7a559633c48f5b0f200599c4a62091 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c767b5206f1e9c8536110dda4d515ebb9242bbeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85a5a8c6a931f8b3a220ed61750d1f9758d0810a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18caa610d50b92331485013584f5373804dd0416 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d9f1495004710b77767393a29f33df76d7b0fb5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17f5d13a7a741dcbb2a30e147bdafe929cff4697 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1531d789df97dbf1ed3f5b0340bbf39918d9fe48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d52f98935b70cda4eede4d52cdad4e3b886f639 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 723d20f1156530b122e9785f5efc6ebf2b838fe0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b08651e5ae2bffef5e4fb44fbdd7d467715e3b73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc94b89dabd9df49631cbf6b18800325f3521864 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e40ad6369bc74d01af4dc41d3a9b8e25ac2aa01e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46889d1dce4506813206a8004f6c3e514f22b679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de4cfcc4a1fcb24b72a31c5feff8c67d2ff930fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 987f9bbd08446de3f9d135659f2e36ad6c9d14fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27b4efed7a435153f18598796473b3fba06c513d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7b7eb6245e7d7c4535975268a9be936e2c59dc8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7887c66483ffa9a839ecf1a53c5ef718dcd1d2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36cdfd3209909163549850709d7f12fdf1316434 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4a49ff2dddc66bbe25af554caba2351fbf21702 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45eb728554953fafcee2aab0f76ca65e005326b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d83f6e84cbeb45dce4576a9a4591446afefa50b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4b8e467e44bc1ca1ebf481ac2dfc1baaf9688dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3efacd7aea48c93e0a42c1e83bf3c96e9e50f178 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d437078d8f95cb98f905162b2b06d04545806c59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fce04b7e4e6e1377aa7f07da985bb68671d36ba4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6e4a6416162a698d87ba15693f2e7434beac644 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1bfb44c62d15a45ca4d47b4cc482ebddb8d0ae4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a182be6716d24fb49cb4517898b67ffcdfb5bca4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b18fd3fd13d0a1de0c3067292796e011f0f01a05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d0ad081ca0e723ba2a12c876b4cd1574485c726 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c824bcd73de8a7035f7e55ab3375ee0b6ab28c46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5c12ff49fc91e66f30c5dc878f5d764d08479558 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56e942318f3c493c8dcd4759f806034331ebeda5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d46e3fe9cb0dea2617cd9231d29bf6919b0f1e91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3936084cdd336ce7db7d693950e345eeceab93a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1de8af907dbced4fde64ee2c7f57527fc43ad1cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f55c17f48d7608072199496fbcefa33f2e97bf0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b9d3b961bdf79964b883d3179f085d8835e528d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c80d727e374321573bb00e23876a67c77ff466e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 965a08c3f9f2fbd62691d533425c699c943cb865 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acac4bb07af3f168e10eee392a74a06e124d1cdd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c255c14e9eb15f4ff29a4baead3ed31a9943e04e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79d9c4cb175792e80950fdd363a43944fb16a441 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4228b2cc8e1c9bd080fe48db98a46c21305e1464 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8535d1a2485b4e063ab9ef0a2719a1aab8187d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3e8ce69bec72277354eff252064a59f515d718a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17f245cad19bf77a5a5fecdee6a41217cc128a73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db828cdfef651dd25867382d9dc5ac4c4f7f1de3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2840c626d2eb712055ccb5dcbad25d040f17ce1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 342a0276dbf11366ae91ce28dcceddc332c97eaf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863a40e0d35f3ff3c3e4b5dc9ff1272e1b1783b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de9a6bb0c8931e7f74ea35edb372e5ca7d0a5047 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6becbaf35fa2f807837284d33649ba5376b3fe21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9d884511ed2c8e9ca96de04df835aaa6eb973eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e1e19d33e1caa107dc0a6cc8c1bfe24d8153f51 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 891b124f5cc6bfd242b217759f362878b596f6e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 750e9677b1ce303fa913c3e0754c3884d6517626 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8511513540ece43ac8134f3d28380b96db881526 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a72a7a43ae004f1ae1be392d4322c07b25deff5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 616ae503462ea93326fa459034f517a4dd0cc1d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f54c8919f297a5e5c34517d9fed0666c9d8aa10 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1234a1077f24ca0e2f1a9b4d27731482a7ed752b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d9b7b09a7c66e19a608d76282eacc769e349150 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d48ed95cc7bd2ad0ac36593bb2440f24f675eb59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fc9e6150957ff5e011142ec5e9f8522168602ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 123cb67ea60d2ae2fb32b9b60ebfe69e43541662 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2baadf3aabe526bdaa5dfdf27fac0a1c63aa04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b6080369e7ee47b7d746685d264358c91d656bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da09f02e67cb18e2c5312b9a36d2891b80cd9dcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2af98929bd185cf1b4316391078240f337877f66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a40d848794133de7b6e028f2513c939d823767cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9eb902eee03806db5868fc84afb23aa28802e841 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 322db077a693a513e79577a0adf94c97fc2be347 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4d8fb73daa82420bdc69c37f0d58f7cb4cd505a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7aba59a2609ec768d5d495dafd23a4bce8179741 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c39afa1f85f3293ad2ccef684ff62bf0a36e73c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15c4a95ada66977c8cf80767bf1c72a45eb576b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0441fdcbc4ea1ab8ce5455f2352436712f1b30bb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3287148a2f99fa66028434ce971b0200271437e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 598cd1d7f452e05bfcda98ce9e3c392cf554fe75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fbd096841ddcd532e0af15eb1f42c5cd001f9d74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d38b9a916ab5bce9e5f622777edbc76bef617e93 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f09906d27affb8d08a96c07fc3386ef261f97af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1ad78eb7494513f6c53f0226fe3cb7df4e67513 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5452aa820c0f5c2454642587ff6a3bd6d96eaa1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3e5d9cda8eae5b0f19ac25efada6d0b3b9e04e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c5b87bcdd70810a20308384b0e3d1665f6d2922 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ea3dbdf67af10ccc6ad22fb3294bbd790a3698f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9044abce7e7b3d8164fe7b83e5a21f676471b796 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f3989f27e91119bb29cc1ed93751c3148762695 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 678821a036c04dfbe331d238a7fe0223e8524901 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6404168e6f990462c32dbe5c7ac1ec186f88c648 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27c577dfd5c7f0fc75cd10ed6606674b56b405bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5244f7751c10865df94980817cfbe99b7933d4d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c544101eed30d5656746080204f53a2563b3d535 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29d94c622a7f6f696d899e5bb3484c925b5d4441 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ae512e69f37e37431239c8da6ffa48c75684f87 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a0ad305883201b6b3e68494fc70089180389f6e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bc91d7495d7eb70a70c1f025137718f41486cd2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f24786fca46b054789d388975614097ae71c252e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13e3a809554706905418a48b72e09e2eba81af2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9b915b066f28f4ac7382b855a8af11329e3400d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 64a4730ea1f9d7b69a1ba09b32c2aad0377bc10a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ffde74dd7b5cbc4c018f0d608049be8eccc5101 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11e0a94f5e7ed5f824427d615199228a757471fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6192ad1aed30adc023621089fdf845aa528dde9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b9b6fe0dd99803c80a3a3c52f003614ad3e0adf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc93c4f3ddade455cc4f55bc93167b1d2aeddc4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f225d4b8c3d7eb90038c246a289a18c7b655da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e91a05aabb73cca7acec1cc0e07d8a562e31b45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 673b21e1be26b89c9a4e8be35d521e0a43a9bfa1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 811a6514571a94ed2e2704fb3a398218c739c9e9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6a2942a982c2541a6b6f7c67aa7dbf57ed060ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a02e432530336f3e0db8807847b6947b4d9908d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56d5d0c70cf3a914286fe016030c9edec25c3ae0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b820e617ab21b372394bf12129c30174f57c5d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da5e58a47d3da8de1f58da4e871e15cc8272d0e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2b9ac30337761fa0df74ce6e0347c5aabd7c072 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90811b1bd194e4864f443ae714716327ba7596c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7c4b323bb2d3960430b11134ee59438e16d254e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5cbe7d7de5a29c7e714214695df1948319408d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e3883a0691ce1957996c5b37d7440ab925c731e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6d544f67a1f3572781271b5f3030d97e6c6d9e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0e9eef45194039af6b8c22edf06cfd7cb106727a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7dcb07947cd71f47b5e2e5f101d289e263506ca9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ddf05a78475a194ed1aa082d26b3d27ecc77475 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9bd04844725661c8aa2aef11091f01eeab69486 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85b836b1efb8a491230e918f7b81da3dc2a232c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5127e167328c7da2593fea98a27b27bb0acece68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c437ee5deb8d00cf02f03720693e4c802e99f390 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e4a44b302d3a3e49aa014062b42de84480a8d4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b6f38d02c8ed1fb07eb6782b918f31efc4c42f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59587d81412ca9da1fd06427efd864174d76c1c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48fab54afab49f18c260463a79b90d594c7a5833 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a8bdce7a665a0b38fc822b7f05a8c2e80ccd781 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8828ced5818d793879ae509e144fdad23465d684 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5a75ab7533de99a4f569b05535061581cb07a41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7071ce13476cae789377c280aa274e6242fd756 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcc166d3a6e235933e823e82e1fcf6160a32a5d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3b7263e0bb9cc1d94e483e66c1494e0e7982fd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59879a4e1e2c39e41fa552d8ac0d547c62936897 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0524096fa9f3add551abbf68ee22904b249d82f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36a984803df08b0f6eb5f8a73254dd64bc616b67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfe3ba3e5c08ee88afe89cc331081bbfbf5520e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e583a9e22a7a0535f2c591579873e31c21bccae0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e11f12adffec6bf03ea1faae6c570beaceaffc86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b3b65287e6849628066d5b9d08ec40c260a94dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3061698403f0055d1d63be6ab3fbb43bd954e8e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35bceb16480b21c13a949eadff2aca0e2e5483fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7fa5ef735754e640bd6be6c0a77088009058d74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a98e0af511b728030c12bf8633b077866bb74e47 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c7ac239a2c9e303233e58daee02101cc4ebf3d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb7fd3f0dd99dc6c49da6fd7e78a392c4ef1b33 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 031271e890327f631068571a3f79235a35a4f73e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4b50e7348815402634b6b559b48191dba00a751 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 460cafb81f86361536077b3b6432237c6ae3d698 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6720e8df09a314c3e4ce20796df469838379480d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ab169407354d4b9512447cd9c90e8a31263c275 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56488ced0fae2729b1e9c72447b005efdcd4fea7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 294ee691d0fdac46d31550c7f1751d09cfb5a0f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87ae42528362d258a218b3818097fd2a4e1d6acf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f631214261a7769c8e6956a51f3d04ebc8ce8efd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 468cad66ff1f80ddaeee4123c24e4d53a032c00d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1053448ad885c633af9805a750d6187d19efaa6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90b20e5cd9ba8b679a488efedb1eb1983e848acf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fbb7027ec88e2e4fe7754f22a27afe36813224b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8ce24a835cae8c623e2936bec2618a8855c605b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65747a216c67c3101c6ae2edaa8119d786b793cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d0f24c9facb5be0c98c8859a5ce3c6b0d08504ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf1d5bd4208514bab3e6ee523a70dff8176c8c80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3175b5b21194bcc8f4448abe0a03a98d3a4a1360 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fca367548e365f93c58c47dea45507025269f59a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48a17c87c15b2fa7ce2e84afa09484f354d57a39 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b813371f5a8af95152cae109d28c7c97bfaf79f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d6310db456de9952453361c860c3ae61b8674ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 685760ab33b8f9d7455b18a9ecb8c4c5b3315d66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22a88a7ec38e29827264f558f0c1691b99102e23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 517ae56f517f5e7253f878dd1dc3c7c49f53df1a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c72b9a3eaabbe927ba77d4f69a62f35fbe60e2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e0e315a371cdfc80993a1532f938d56ed7acee4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8d0aa1ef19e2c3babee458bd4504820f415148e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8867348ca772cdce7434e76eed141f035b63e928 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b00ad00130389f5b00da9dbfd89c3e02319d2999 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ab454f0ccf09773a4f51045329a69fd73559414 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7dd618655c96ff32b5c30e41a5406c512bcbb65f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45c0f285a6d9d9214f8167742d12af2855f527fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1545bd9cd6953c5b39c488bf7fe179676060499 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1d1d2cb421f16bd277d7c4ce88398ff0f5afb29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bd7fb976ab0607592875b5697dc76c117a18dc73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d5bfb5d6d22f8fe8c940f36e1fbe16738965d5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b6b9510e0724bfcb4250f703ddf99d1e4020bbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0b92e40ece170b59bced0cea752904823e06e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 97ab197140b16027975c7465a5e8786e6cc8fea1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8858a63cb33319f3e739edcbfafdae3ec0fefa33 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94029ce1420ced83c3e5dcd181a2280b26574bc9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13647590f96fb5a22cb60f12c5a70e00065a7f3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 741dfaadf732d4a2a897250c006d5ef3d3cd9f3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4d5caa79e6d88bb3f98bfbefa3bfa039c7e157a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 394ed7006ee5dc8bddfd132b64001d5dfc0ffdd3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 192472f9673b18c91ce618e64e935f91769c50e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89422841e46efa99bda49acfbe33ee1ca5122845 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d9310055f364cf3fa97f663287c596920d6e7e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 694265664422abab56e059b5d1c3b9cc05581074 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbb58869063fe803d232f099888fe9c23510de7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33819a21f419453bc2b4ca45b640b9a59361ed2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17a172920fde8c6688c8a1a39f258629b8b73757 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24740f22c59c3bcafa7b2c1f2ec997e4e14f3615 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bcd37b68533d0cceb7e73dd1ed1428fa09f7dc17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55b67e8194b8b4d9e73e27feadbf9af6593e4600 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de3b9639a4c2933ebb0f11ad288514cda83c54fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 258403da9c2a087b10082d26466528fce3de38d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08457a7a6b6ad4f518fad0d5bca094a2b5b38fbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3288a244428751208394d8137437878277ceb71f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b425301ad16f265157abdaf47f7af1c1ea879068 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca288d443f4fc9d790eecb6e1cdf82b6cdd8dc0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4287f65878000b42d11704692f9ea3734014b4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f683c6623f73252645bb2819673046c9d397c567 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd96cceded27d1372bdc1a851448d2d8613f60f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6917ae4ce9eaa0f5ea91592988c1ea830626ac3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1401803ccf7db5d897a5ef4b27e2176627c430e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8d2239f24f6a54d98201413d4f46256df0d6a5f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58fb1187b7b8f1e62d3930bdba9be5aba47a52c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 402a6c2808db4333217aa300d0312836fd7923bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- feb1ea0f4aacb9ea6dc4133900e65bf34c0ee02d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55dcc17c331f580b3beeb4d5decf64d3baf94f2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 129f90aa8d83d9b250c87b0ba790605c4a2bb06a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57050184f3d962bf91511271af59ee20f3686c3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 778234d544b3f58dd415aaf10679d15b01a5281f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91725f0fc59aa05ef68ab96e9b29009ce84668a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0fdf6c3aaff49494c47aaeb0caa04b3016e10a26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac62760c52abf28d1fd863f0c0dd48bc4a23d223 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f164627a85ed7b816759871a76db258515b85678 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b82dbf538ac0d03968a0f5b7e2318891abefafaa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e837b901dcfac82e864f806c80f4a9cbfdb9c9f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d2307532d679393ae067326e4b6fa1a2ba5cc06 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06590aee389f4466e02407f39af1674366a74705 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9dbf201b4f0b3c2b299464618cb4ecb624d272c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38b3cfb9b24a108e0720f7a3f8d6355f7e0bb1a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9240918aa03e49feabe43af619019805ac76786 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe5289ed8311fecf39913ce3ae86b1011eafe5f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28ed48c93f4cc8b6dd23c951363e5bd4e6880992 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c1faef799095f3990e9970bc2cb10aa0221cf9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86ea63504f3e8a74cfb1d533be9d9602d2d17e27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f91495e271597034226f1b9651345091083172c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c1169f6ea406fec1e26e99821e18e66437e65eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a243827ab3346e188e99db2f9fc1f916941c9b1a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fbb69306c0e14bacb8dcb92a89af27d3d5d631f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25dca42bac17d511b7e2ebdd9d1d679e7626db5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e79999c956e2260c37449139080d351db4aa3627 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d9b1f4f9fa8c9f030e3207e7deacc5d5f8bba4e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ee2afb00afaf77c883501eac8cd614c8229a444 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecf37a1b4c2f70f1fc62a6852f40178bf08b9859 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de84cbdd0f9ef97fcd3477b31b040c57192e28d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17af1f64d5f1e62d40e11b75b1dd48e843748b49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1019d4cf68d1acdbb4d6c1abb7e71ac9c0f581af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 600fcbc1a2d723f8d51e5f5ab6d9e4c389010e1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8caeec1b15645fa53ec5ddc6e990e7030ffb7c5a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de5bc8f7076c5736ef1efa57345564fbc563bd19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c083f3d0b853e723d0d4b00ff2f1ec5f65f05cba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 837c32ba7ff2a3aa566a3b8e1330e3db0b4841d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63761f4cb6f3017c6076ecd826ed0addcfb03061 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e41c727be8dbf8f663e67624b109d9f8b135a4ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 143b927307d46ccb8f1cc095739e9625c03c82ff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22a0289972b365b7912340501b52ca3dd98be289 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d6ceabf5b90e7c0690360fc30774d36644f563c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b75c3103a700ac65b6cd18f66e2d0a07cfc09797 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69361d96a59381fde0ac34d19df2d4aff05fb9a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b8902e033430000481eb355733cd7065342037 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 501bf602abea7d21c3dbb409b435976e92033145 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 997b7611dc5ec41d0e3860e237b530f387f3524a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72bcdbd0a0c8cc6aa2a7433169aa49c7fc19b55b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4956c1e618bfcfeef86c6ea90c22dd04ca81b9db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bfdf93201ea413affd4c8fbe406ea2b4a7c1b6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e14ab55a060a5637e9a4a40e40714c1f441d952 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4375386fb9d8c7bc0f952818e14fb04b930cc87d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f96ee7463e2454e95bf0d77ca4fe5107d3f24d68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76fd1d4119246e2958c571d1f64c5beb88a70bd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 180a5029bc3a2f0c1023c2c63b552766dc524c41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a803803f40163c20594f12a5a0a536598daec458 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bb2fc8129ed9adabec6a605bfe73605862b20d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15ee0ac0d56a5fb5ba13fae4288621ddd2185f17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 400d728c99ddeae73c608e244bd301248b5467fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77cde0043ceb605ed2b1beeba84d05d0fbf536c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d86e77edd500f09e3e19017c974b525643fbd539 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b3feddd1269a0b0976f4eef2093cb0dbf258f99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dcf2c3bd2aaf76e2b6e0cc92f838688712ebda6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a38a0053d31d0285dd1e6ebe6efc28726a9656cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 697702e72c4b148e987b873e6094da081beeb7cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b1a2271a03313b561f5b786757feaded3d41b23f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc66da0d66a9024f0bd86ada1c3cd4451acd8907 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16a0c64dd5e69ed794ea741bc447f6a1a2bc98e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54844a90b97fd7854e53a9aec85bf60564362a02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a97d21936200f1221d8ddd89202042faed1b9bcb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35057c56ce118e4cbd0584bd4690e765317b4c38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a417f4cf2df39704aa4c869e88d14e9806894a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c76a8c5499d22b9c0b4c56f03b671033eb9f9bdd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3326f34712f6a96c162033c7ccf370c8b7bc1ead ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6102b349cbef03667d5715fcfae3161701a472d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4133f51817145e99b896c7063584d4dd18ad59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e29a91324ca7086b948a9e3a4dbcbb2254a24a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4ed59a86909b142ede105dd9262915c0e2993ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e729429631c84c3bd5602edcab3e7c2ab1dcce0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12276fedec49c855401262f0929f088ebf33d2cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d00fa4f6cad398250ce868cef34357b45abaad3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c05ef0e7543c2845fd431420509476537fefe2b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1eae9d1532e037a4eb08aaee79ff3233d2737f31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bae67b87039b3364bdc22b8ef0b75dd18261814c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 615de50240aa34ec9439f81de8736fd3279d476d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f22ddca351c45edab9f71359765e34ae16205fa1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bac518bfa621a6d07e3e4d9f9b481863a98db293 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f7255c2c1d9e54fc2f6390ad3e0be504e4099d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8775b6417b95865349a59835c673a88a541f3e13 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ba46b8fba511fdc9b8890c36a6d941d9f2798fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2740d2cf960cec75e0527741da998bf3c28a1a45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1391bf06a839746bd902dd7cba2c63d1e738d37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f28a2041f707986b65dbcdb4bb363bb39e4b3f77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- accfe361443b3cdb8ea43ca0ccb8fbb2fa202e12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ef66a66dc52dcdf44cebe435de80634e1beb268 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa98250e1dd7f296b36e0e541d3777a3256d676c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d638bf6e55bc64c230999c9e42ed1b02505d0ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aaeb986f3a09c1353bdf50ab23cca8c53c397831 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c92df685d6c600a0a3324dff08a4d00d829a4f5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e40b5f075bdb9d6c2992a0a1cf05f7f6f4f101a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5f92b17729e255ca01ffb4ed215d132e05ba4da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 279d162f54b5156c442c878dee2450f8137d0fe3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1194dc4322e15a816bfa7731a9487f67ba1a02aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6c8072daa942e9850b9d7a78bd2a9851c48cd2c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f73385a5f62a211c19d90d3a7c06dcd693b3652d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 202216e2cdb50d0e704682c5f732dfb7c221fbbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dd7d6468a54be56039b2e3a50bcf171d8e854ff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5020eb8ef37571154dd7eff63486f39fc76fea7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3bee808e15707d849c00e8cea8106e41dd96d771 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 331ddc27a22bde33542f8c1a00b6b56da32e5033 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0dcc6fb3dfd39df5970d6da340a949902ae629 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f6c32a918544aa239a6c636666ce17752e02f15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84f9b603b44e0225391f1495034e0a66514c7368 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84be1263abac102d8b4bc49096530c6fd45a9b80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59b05d06c1babcc8cd1c541716ca25452056020a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f4bc8ee9aeeec8bf7aa31c627e50761dd8bb2db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d884adc80c80300b4cc05321494713904ef1df2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05d2687afcc78cd192714ee3d71fdf36a37d110f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6226720b0e6a5f7cb9223fc50363def487831315 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0e84a3401c84507dc017d6e4f57a9dfdb31de53 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6da04adff0b96c5163b0c2530028b72be2fd26fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dc5d68491eb3c73ae8478bf6edef80b18564a13 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5915114cdca6f09fa2355162a43596f5d20273be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13ba1d87ab8fc45d2aed25662bf91053b0db5f9f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 75c161cbc017a7d176dd0d7b937db26b3ce637a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53ed0d43ab950d4deeefd238c7685dabef943800 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be53c1f33107d6891c47c784aeadd6e5ddf78e8c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b93f2a91e0791be3ffda1f753aa6c377bcab4d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac36642ce1cde75b222e20f585ddfd240f064da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa44e6b579917814740393efc0b990e0fbbbdaf3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 386d1af07bf1f32fac5e97612441488894f2ffed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c39f9da792792d4e73fc3a5effde66576ae128c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a4b1d4d11eee3c5362a4152216376e634bd14cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c76852d0bff115720af3f27acdb084c59361e5f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bcd57e349c08bd7f076f8d6d2f39b702015358c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ca61d4c68dad68901f8a7364dd210ef27a8b4c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f23379c496942ea6fe898a7a823b65530c126a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4582f805156095604fe07e71195cd9aa43d7a34 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79cfe05054de8a31758eb3de74532ed422c8da27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b65df78a10c3bcc40d18f3e926bb5a49821acc31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ffd4b0193acf86b6a6e179f8673ed38bad3191d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b43ca7ff72d5f535134241e7c797ddc9c7a3573 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ba8b8b91907bd087dfe201eb0d5dae2feb54881 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e062f4d043234312446ea9445f07bd9dc309ce3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c486b2e699082763075a169c56a4b01f99fc4b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5da34fddda2ea6de19ecf04efd75e323c4bb41e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 753e908dcea03cf9962cf45d3965cf93b0d30d94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e14356d12226cb140b0e070bd079468b4ab599b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5bb812243dd1815651281a54c8191fc8e2bc2d82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5117c9c8a4d3af19a9958677e45cda9269de1541 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1083748b828dfca6a72014434850da0f2a0579ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11ec2e08e1796b5914cd9c4830813482753ecfa0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3942cdff6254d59100db2ff6a3c4460c1d6dbefe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc1fcf372878240e0a1af20641d361f14aea7252 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b00f3689aa19938c10576580fbfc9243d9f3866c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5de63b40dbb8fef7f2f46e42732081ef6d0d8866 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ec61d4f7208a2713adeafb947f65fdae0947067 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb8cec3cab142ef4f2773b6fc9d224461a6bf85d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5613079f2494808f048b81815bf708debf7339d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3131d1a5295508f583ae22788a1065144bec3cee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1adc79ac67e5eabaa8b8509150c59bc5bd3fd4e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c231551328faa864848bde6ff8127f59c9566e90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df638c22c75ddc9a43ecdde90c0c9939f5009e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6604a00a652e754cb8b6b0b9f194f839fc38d7c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf37099ea8d1d8c7fbf9b6d12d7ec0249d3acb8b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfdc8e26d36833b3a7106c306fdbe6d38dec817e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d6332820eaad3a6d3b0abc93424469a8ef7083a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4e56f627f94d93c49db40ae5944f880341f4203 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14cef2bb3e0de02f306fa37c268d6c276326c002 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3ce120c9acc7d9d4ce86aa1f07b027d1c45a9a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3050b578081b24e5cf244fa252f385ffca2bf86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3d5159679d17c1270ad72941922d0f18bdd6415 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c04c60f12d3684ecf961509d1b8db895e6f9aac0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 564db4f20bd7189a50a12d612d56ed6391081e83 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 924da9604d6474fd1be99dffdcc539eaaaa31626 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a9eeebeddaa20d10881ad505cc362a3a391e15b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfdf98cadedfa6042117cd7a83952ca2f465d26f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95a83a7de5d3ce84206b9267962c32df4d071c21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fda0ec787de5159534ebc8b81824920d9613575 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c63cd9873bf733c068a5f183442ec82873fef1fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a45790a8699a384c3d218ac4ca8a53c109fd944 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b01b589e7a19d6be5bd6465e600f84aa8015282 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66beac619ba944afeca9d15c56ccc60d5276a799 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93e19791659c279f4f7e33a433771beca65bf9ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0d828fcb1964a578ef3979297c59a41aedba932 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a0eee3989abd3a5d6d47d0298bd056a954d379b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2effd7a10798a1e8e53bb546a67b2ccdea882c50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f347c6da5e83b137c337f9ccb190090c27cfc953 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93ad8da5a8c6ddcbe67abae2cc4a7aad8084e736 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef9395f5ffe75f4e43d80cd1fa7b34c8a4db66fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24effa4861d6d1e8cffe848ae63fa2ed40be03f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d203a0da0c709d301e973a9fe3569efd1fb2bd3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4043468de4fc448b6fda670f33b7f935883793a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e1be3032d521e3bf2f49fc87f82c8f978079ea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eba67171bf6ea653dfb6a6ae288f3c1d10829870 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79ec3a5191f9dfd398d98fe7372ad841f34876ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 105fea3ef3be4b47cc3602423919329162dfcecf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5278c514068f469f2fca7638ef1e1b27556a37a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f34a25eaa6de187797442bc6e0514289d77fed2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a935501a2f62d103cf9d69d775399dae2e7dfead ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26719d252dd8e3a53c08da2ed3c3a8d62fbbc30a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2c1bd80350f692c5c2298cb88859564ec0a061b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 039bfe373c990fc6db3808d255abaff91235e82f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5625170b248edc6a570c977fb1f8e7430ffd0b5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dafe71a3e2d5cfb9b80805a26d5442ca5ad8332f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f043f00d5161794ef538802dcc9ba75e375c058 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a5885a4c5983242b1356b57eafeb59a9d5c0d0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c982c1f50bd7ae3bc4a1afc09e9ad11aecd434f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 273400f95ae036c01d4b0fd7a7ca6ab160efd958 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 233e3ffe0ef35dbabe49340ba567499690dcc166 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b675bf555e89e708f1b8f79bd90796dd395837b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7252e217fe6d8f05dd50f6e125c33a1c6fff602 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbbb6b349e8d0557e7e55e2d05819d6bdaed3769 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebee400cfa4a532018ee904c22c7e3e6619ca4de ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e10706b6c167454a723636e0929061201a2f461b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80b60fafa94b794fa77fab85e1df66f52598f3ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e509130b7dfc97eeb4a517d6c9c65a8d6204234 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d49273897bd317323e0a3bbbc01b76e83370f0c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4d5e7c9dab813adf9bfd8198bb9bb00c9a9503b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a061029eddee38110e416e3c4f60d553dafc9e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 323259cc3d977235f4e7e8980219e5e96d66086e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80d01f0ef89e287184ba6d07be010ee3f16a74d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd47d6b11833870ce23102a3373b7a50a1b45d00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58fa2c401856f93712ae6cc45d4dc3458ee4b4f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc922f3678a1b01cac2b3f1ec74b831ffec52a71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2405cf54ac06140a0821f55b34c1d54f699e8e73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 579d1b8174c9be915c0fa17a67fc38cc6de36ad7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8501e908bb8c531dfa75cef33fcec519027f4e5b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7129dc00826cb344c0202f152f1be33ea9326fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85c6252b54108750291021a74dc00895f79a7ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1accc498c40e684f870d38b7d128739a0ebf57cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27ceafbb3f74b4677d5bae6c7ea031de07c6cfad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c60b88138b836307bdde0487c4ffb82121b1c5e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69a56c4e2addd1ec53bb40e8a18f52353d1fc28c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03bfdb16cd7cc6e1c7c8d3b59552da7de3d82d1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35ddb45b41b3de2d4f783608ad8d8752f6557997 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dc09f0ece61ef2bd629e8bfe532aa24f4f8e0c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 207bf7bf30651c3284408d87d7c499e43db6bc83 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7e59d3ef86beb3b3b3e53a610af122b2220841b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0651f0964ba5a33257ebbda1e92c7a1649a4a058 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 062aafa396866d4dfe8f3fd2f32d46fa7c01b6dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea6af04977c197fd07ab812d394dcb61feebaf67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657e98094f0f669809bc0e47f3d6bd9a8124cf32 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c35350e5bc4fe113330818ca6784ff368c5ffef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 620dbee78ed8481d108327c4c332899df7cb8ef4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6383196b7bb0773c0083a2a3d49a95e5479715bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9066712dca21ef35c534e068f2cc4fefdccf1ea3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 933d23bf95a5bd1624fbcdf328d904e1fa173474 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f66cfbbce58b4b552b041707a12d437cc5f400a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7156cece3c49544abb6bf7a0c218eb36646fad6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33ebe7acec14b25c5f84f35a664803fcab2f7781 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70094734d601e1220c95ac586fdffbda3a23e10b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5962862e9ba0a1c9a14306688973946f6f7ce75c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71cd409660bc5b8c211dc7c51afae481d822d593 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30472cf3132b8c03e528b23d1c7533de740e28ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae54e18d7ca7bc8b8fbc667119fb60b25f0f3871 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b975d9fcf5924800f9ea5d68d7d79f743ca9af7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48af0ac87dc3beef4d3e6c7982b158d50f7b2a6e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12b32450c210cec1fdd8b2c19d564776e8054aa3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55f0245f3ee538ec49e84bcb28c33b135a07f0b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9aa93b5890acb152c5824a8f75c221cf1addfd1b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57a561cda141a0fed3129f4f3488e3b91805e638 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edf9fc528277a53ec37d1bd79fb4f8608cce11ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bf2083922b7bccc31917bf9cdb74e3d4892c2600 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 277be842bf30848e7292a931169bd4c8ff726dee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b919010b0459b2540fb609c5d1aad0b8dc0fab01 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3980f11a9411d0b487b73279346cfae938845e7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 579e2c07bbb39577fa32fed8cb42297c1c5516d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd5f111439e7a2e730b602a155aa533c68badbf8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abc2e538c6f2fe50f93e6c3fe927236bb41f94f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52654c0216dcbe3fa2d9afb1de12c65d18f6a7a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5083752d5d02d6c46bc2f18ba53a28d119af5b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0aa1ce356c7c3d53d6ee035b4c7bcf425e108cdc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b38020ae17ed9f83af75ce176e96267dcce6ecbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b63b3bc493a4a44ba1d857c78e4496e40f1d7b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 178dff753350014f6395f41bc21f1adddf73c8e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 127e511ea2e22f3bd9a0279e747e9cfa9509986d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bf8e89e6784e121ddc32990d586e2276ec84596 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 590638f9a56440a2c41cc04f52272ede04c06a43 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2856af1d9289ee086b10768b53b65e0fd13a335 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d3e2f7f57620398df896d9569c5d7c5365f823d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- befb617d0c645a5fa3177a1b830a8c9871da4168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c50d8be2dc5ae74e53e44a87f580bf25956af9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f6a6e35d003c243968cdb41b72fbbe609e56841 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0425bc64384fe9a6a22edb7831d6e8c1756e2c7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43eb1edf93c381bf3f3809a809df33dae23b50d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b377c07200392ac35a6ed668673451d3c9b1f5c7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa8fe4cad336a7bdd8fb315b1ce445669138830c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7781e1056c672d5212f1aaf4b81ba6f18e8dd8b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 125b4875b5035dc4f6bad4351651a4236b82baeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39f85c4358b7346fee22169da9cad93901ea9eb9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50c90666c4de8ac93accdf4040e3eb010a82a46a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba8d148121b1dbba444849fe9549f36a7d17db28 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdf2e667f969e5c22985dd232fe3f107fe26e750 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3410fdc42075bd788a78f4b2a68c5e2cc0930409 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07eaa4ce2696a88ec0db6e91f191af1e48226aca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4251bd59fb8e11e40c40548cba38180a9536118c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 451561c252323e74696dbe0be36601c95a75a8c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2454ae89983a4496a445ce347d7a41c0bb0ea7ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84968314ddcbaa0e4b685c71c6ea5524b3aefc80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bca0cb7f507d6a21a652307737a57057692d2f79 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4186a2dbbd48fd67ff88075c63bbd3e6c1d8a2df ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 637eadce54ca8bbe536bcf7c570c025e28e47129 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2834177c0fdf6b1af659e460fd3348f468b8ab0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c0a65226f038c58fc6d6ed525f38fc00b3579b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c0c2fc4ee2d8a5d0a2de50ba882657989dedc51 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ab307935bd2bbda52f853f9fc6b49f01897727 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07c20b4231b12fee42d15f1c44c948ce474f5851 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92a97480edcc0f0de787a752bf90feed0445dd39 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b7f5cb25e0e03e06ec506d31c001c172dd71ef6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c68459a17ff59043d29c90020fffe651b2164e6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b01824b1aecf8aadae4501e22feb45c20fb26bce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 708b8dda8e7b87841a5f39c60b799c514e75a9c7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccde80b7a3037a004a7807a6b79916ce2a1e9729 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a119924bd314934158515a1a5f5877be63f6f91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15b9129ec639112e94ea96b6a395ad9b149515d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a7eedde7f5d5082f7f207ef76acccd24a6113b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 101fb1df36f29469ee8f4e0b9e7846d856b87daa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9374a916588d9fe7169937ba262c86ad710cfa74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20f202d83bdf1f332a3cb8f010bcf8bf3c2807bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ee31065abea645cbc2cf3e54b691d5983a228b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8430529e1a9fb28d8586d24ee507a8195c370fa5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a4bfd979e5d4ea0d0457e552202eb2effc36cac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cdfaceebe916c91acdf8de3f9506989bc70ad65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e6d110fbfa1f2e6a96bc8329e936d0cf1192844 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 832b56394b079c9f6e4c777934447a9e224facfe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5df44408218003eb49e3b8fc94329c5e8b46c7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6745f4542cfb74bbf3b933dba7a59ef2f54a4380 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a28d3d18f9237af5101eb22e506a9ddda6d44025 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6eeae8b24135b4de05f6d725b009c287577f053d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ead94f267065bb55303f79a0a6df477810b3c68d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac1cec7066eaa12a8d1a61562bfc6ee77ff5f54d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6acec357c7609fdd2cb0f5fdb1d2756726c7fe98 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4fa1cb3c3e84cad8b74edb28531d2e27508be26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb0f2c241718bc7462be44e5e8e1e36e35f9b15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86fa577e135713e56b287169d69d976cde27ac97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a58a60ac5f322eb4bfd38741469ff21b5a33d2d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff3d142387e1f38b0ed390333ea99e2e23d96e35 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- beb76aba0c835669629d95c905551f58cc927299 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af9e37c5c8714136974124621d20c0436bb0735f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c73e9cd66c77934f8a262b0c1bab9c2f15449ba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2df1f56cccab13d5c92abbc6b18be725e7b4833 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58d692e2a1d7e3894dbed68efbcf7166d6ec3fb7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b67bd4c730273a9b6cce49a8444fb54e654de540 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00c5497f190172765cc7a53ff9d8852a26b91676 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 806450db9b2c4a829558557ac90bd7596a0654e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39229db70e71a6be275dafb3dd9468930e40ae48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f51eeb2f9a1efe22e45f7a1f7b963100f2f8e6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ce1193c851e98293a237ad3d2d87725c501e89f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2da2b90e6930023ec5739ae0b714bbdb30874583 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ace1fed6321bb8dd6d38b2f58d7cf815fa16db7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1e9df152219e85798d78284beeda88f6baa9ec7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52bb0046c0bf0e50598c513e43b76d593f2cbbff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f41d42ee7e264ce2fc32cea555e5f666fa1b1fe9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4cde8df886112ee32b0a09fcac90c28c85ded7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9bbdc87a7263f479344fcf67c4b9fd6005bb6cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43ab2afba68fd0e1b5d138ed99ffc788dc685e36 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e648efdcc1ca904709a646c1dbc797454a307444 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b426893ce331f71165c82b1a86252cd104ae3db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572ace094208c28ab1a8641aedb038456d13f70b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c4269a21b9edf8477f2fee139d5c1b260ebc4f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb5ba18ab1a875ef6b62c65342de476be47871b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbc18b92362f60afc05d4ddadd6e73902ae27ec7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bca9899b5edeed7f964e3124e382c3573183c68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 615fc1984b0cc09c8eeab51a1d1c4e05b583b4a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2792e534dd55fe03bca302f87a3ea638a7278bf1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b89f39432cdb395f5fbb9553b56595d29e2b773 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00499d994fea6fb55a33c788f069782f917dbdd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2a14e4b96a0ffc5353733b50266b477539ef899 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20c34a929a8b2871edd4fd44a38688e8977a4be6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c658c16f3437ed7e78f6072b6996cb423a8f504 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59e26435a8d2008073fc315bafe9f329d0ef689a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c53eeaca19163b2b5484304a9ecce3ef92164d70 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25945899a0067a2dbeeae7a8362a6d68bbc5c6ba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fe5cfa0e063a8d51a1eb6f014e2aaa994e5e7d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f62c9b9c0c9bda792c3fa531b18190e97eb53509 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33fa178eeb7bf519f5fff118ebc8e27e76098363 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c9f55dd8e6697ab2f9eaf384315abd4cbefad38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb509603e8303cd8ada7cfa1aaa626085b9bb6d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4fb3091a75005b047fbea72f812c53d27b15412 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e52a00c81d032b47f1bc352369be3ff8eb87b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fcbda4e363262a339d1cacbf7d2945ec3bd83f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35a09c0534e89b2d43ec4101a5fb54576b577905 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 972a8b84bb4a3adec6322219c11370e48824404e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dd76b9e72b21d2502a51e3605e5e6ab640e5f0bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa5e366889103172a9829730de1ba26d3dcbc01b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e64957d8e52d7542310535bad1e77a9bbd7b4857 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 989671780551b7587d57e1d7cb5eb1002ade75b4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9cb007076542e32f7b99bb18bc6ec424f3b407b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b3ecf2dcace76b65765ddf1901504b0b4861b08 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11b1f6edc164e2084e3ff034d3b65306c461a0be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 985093bae160419782b3d3cb9151e2e58625fd52 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657a57adbff49c553752254c106ce1d5b5690cf8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9840afda82fafcc3eaf52351c64e2cfdb8962397 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 225999e9442c746333a8baa17a6dbf7341c135ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 919164df96d9f956c8be712f33a9a037b097745b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9acc7806d6bdb306a929c460437d3d03e5e48dcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e063d101face690b8cf4132fa419c5ce3857ef44 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aed099a73025422f0550f5dd5c3e4651049494b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17852bde65c12c80170d4c67b3136d8e958a92a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9946e0ce07c8d93a43bd7b8900ddf5d913fe3b03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5cf1bc1d3e38ab32a20707d66b08f1bb0beae91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b372e26366348920eae32ee81a47b469b511a21f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26029c29765043376370a2877b7e635c17f5e76d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3fd37230e76a014cf5c45d55daf0be2caa6948b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9513aa01fab73f53e4fe18644c7d5b530a66c6a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53d26977f1aff8289f13c02ee672349d78eeb2f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbf957a36f5ed47c4387ee8069c56b16d1b4f558 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 345d6be7829c6dab359390ebc5e1a7ae0c6d48bb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 048acc4596dc1c6d7ed3220807b827056cb01032 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a07cdbae1d485fd715a5b6eca767f211770fea4d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8f8582274cd6a368a79e569e2995cee7d6ea9f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f2b19de3301e76ab3a6187a49c9c93ff78bafbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30d822a468dc909aac5c83d078a59bfc85fc27aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa921fee6014ef43bb2740240e9663e614e25662 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b50af0a20bcc7280940ce07593007d17c5acabd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6662422ba52753f8b10bc053aba82bac3f2e1b9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e68d907022c84392597e05afc22d9fe06bf0927 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d97afa24ad1ae453002357e5023f3a116f76fb17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- babf5765da3e328cc1060cb9b37fbdeb6fd58350 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9d6494f1075e5370a20e406c3edb102fca12854 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 152bab7eb64e249122fefab0d5531db1e065f539 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56823868efddd3bdbc0b624cdc79adc3a2e94a75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50a9920b1bd9e6e8cf452c774c499b0b9014ccef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a534eba97db3c2cfb2926368756fd633d25c056 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b197b2dbb527de9856e6e808339ab0ceaf0a512d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c770f8e98a0079497d3eb5bc31e7260cc70cc63 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c3bbc43d097656b54c808290ce0c656d127ce47 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb0ac304431e8aed686a8a817aaccd74b1ba4f24 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea33fe8b21d2b02f902b131aba0d14389f2f8715 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1496979cf7e9692ef869d2f99da6141756e08d25 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7184340f9d826a52b9e72fce8a30b21a7c73d5be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36f838e7977e62284d2928f65cacf29771f1952f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d9e7f1121d3bdbb08291c7164ad622350544a21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1bd99c0a376dec63f0f050aeb0c40664260da16 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7a5c05875a760c0bf83af6617c68061bda6cfc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58e2157ad3aa9d75ef4abb90eb2d1f01fba0ba2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ef1f89abe5b2334705ee8f1a6da231b0b6c9a50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 291d2f85bb861ec23b80854b974f3b7a8ded2921 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78a46c432b31a0ea4c12c391c404cd128df4d709 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ba2aef8f59009756567a53daaf918afa851c304 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0725af77afc619cdfbe3cec727187e442cceaf97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9dfd6bcca5499e1cd472c092bc58426e9b72cccc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9cec00938d9059882bb8eabdaf2f775943e00e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b999cae064fb6ac11a61a39856e074341baeefde ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0cd09bd306486028f5442c56ef2e947355a06282 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13a26d4f9c22695033040dfcd8c76fd94187035b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81d8788d40867f4e5cf3016ef219473951a7f6ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7a4388eeaa4b6b94192dce67257a34c4a6cbd26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d3a24b22d340c62fafc0e75a349c0ffe34d99d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a10aa36bc6a82bd50df6f3df7d6b7ce04a7070f1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44a601a068f4f543f73fd9c49e264c931b1e1652 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b9776e88f7abb59cebac8733c04cccf6eee1c60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1047b41e2e925617474e2e7c9927314f71ce7365 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddc5496506f0484e4f1331261aa8782c7e606bf2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c23ca3cd9b9bbeaca1b79068dee1eae045be5b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec3d91644561ef59ecdde59ddced38660923e916 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e70f3218e910d2b3dcb8a5ab40c65b6bd7a8e9a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2ccae0d7fca3a99fc6a3f85f554d162a3fdc916 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 461fd06e1f2d91dfbe47168b53815086212862e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b5121414aaf2648b0e809e926d1016249c0222c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 685d6e651197d54e9a3e36f5adbadd4d21f4c7e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a519942a295cc39af4eebb7ba74b184decae13fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4712c619ed6a2ce54b781fe404fedc269b77e5dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc518251eb64c3ef90502697a7e08abe3f8310b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 146a6fe18da94e12aa46ec74582db640e3bbb3a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87afd252bd11026b6ba3db8525f949cfb62c90fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f8e6f7ab1e6dbd95c268ba0fc827abc62009013 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29c20c147b489d873fb988157a37bcf96f96ab45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b1f32e231d391f8e6051957ad947d3659c196b2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 764cc6e344bd034360485018eb750a0e155ca1f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 138aa2b8b413a19ebf9b2bbb39860089c4436001 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 038f183313f796dc0313c03d652a2bcc1698e78e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5047344a22ed824735d6ed1c91008767ea6638b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef592d384ad3e0ead5e516f3b2c0f31e6f1e7cab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22757ed7b58862cccef64fdc09f93ea1ac72b1d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc2201e660014c5d91fec8e3c3a3fa5a66dcf33b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9117cdbb48ffc458d809715c6ab6bc6b416ef621 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a885d23bab51b0c00be2780055ff63b3f3c1a4c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81279eeac5c525354cbe19b24a6f42219407c1f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50af864298826feaf94772982bbc7b222b4b4242 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20ef1924b832a3788849793c0ee6b46dd00d4520 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4748e813980e1316aa364e0830a4dc082ff86eb0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1da744421619e134ed3ff2781b4d97fee78d9cd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ff5822dbefa1c9c8177cbf9f0879c5cf4efc5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0f2bb42b56f770c50a6ef087e9049fa6ac11fb5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 819d6aceeb4d31c153de58081b21ad4f8b559c0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 179a1dcc65366a70369917d87d00b558a6d0c04d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b372fdd54bab2ad6639756958978660b12095c3c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 555b0efc2c19aa8cf7c548b4097bd20a73f572ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e99d9ab2acfaf2ebb4b150736590d6a4e33f449 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9671e15703918048982c9ff4e2e0fef21ede320 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46c9a0df4403266a320059eaa66e7dce7b3d9ac4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a67bf61b5017e41740e997147dc88282b09c6f86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5593dc014a41c563ba524b9303e75da46ee96bd5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ee861ae7a7b36a811aa4b5cc8172c5cbd6a945b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b48e4d3aa853687f420dc51969837734b70bfdec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e746f96bcc29238b79118123028ca170adc4ff0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e80445ad5cb6da4c0070d7cb8af89da3b0803b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b01ca6a3e4ae9d944d799743c8ff774e2a7a82b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1906ee4df9ae4e734288c5203cf79894dff76cab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e2b46138ba58033738a24dadccc265748fce2ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b4a514e51fbc7dc6ddcb27c188159d57b5d1fa9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26e138cb47dccc859ff219f108ce9b7d96cbcbcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38d59fc8ccccae8882fa48671377bf40a27915a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f8ce8901e21587cd2320562df412e05b5ab1731 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b86f9b399a8f5af792a04025fdeefc02883f3e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 282018b79cc8df078381097cb3aeb29ff56e83c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 538820055ce1bf9dd07ecda48210832f96194504 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae5a69f67822d81bbbd8f4af93be68703e730b37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e1c89ec97ec90037583e85d0e9e71e9c845a19b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a25347d7f4c371345da2348ac6cceec7a143da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c1a87d11df666d308d14e4ae7ee0e9d614296b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df0892351a394d768489b5647d47b73c24d3ef5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a0b79ee574999ecbc76696506352e4a5a0d7159 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d8a577ffc6ad7ce1465001ddebdc157aecc1617 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be8955a0fbb77d673587974b763f17c214904b57 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a28942bdf01f4ddb9d0b5a0489bd6f4e101dd775 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cac6e06cc9ef2903a15e594186445f3baa989a1a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29eb123beb1c55e5db4aa652d843adccbd09ae18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f606937a7a21237c866efafcad33675e6539c103 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 257a8a9441fca9a9bc384f673ba86ef5c3f1715d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 365fb14ced88a5571d3287ff1698582ceacd80d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea81f14dafbfb24d70373c74b5f8dabf3f2225d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07996a1a1e53ffdd2680d4bfbc2f4059687859a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57a4e09294230a36cc874a6272c71757c48139f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0974f8737a3c56a7c076f9d0b757c6cb106324fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e6bece08aea01859a232e99a1e1ad8cc1eb7d36 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a988e6985849e4f6a561b4a5468d525c25ce74fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1090701721888474d34f8a4af28ee1bb1c3fdaaa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2054561da184955c4be4a92f0b4fa5c5c1c01350 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2c8d26d3b25b864ad48e6de018757266b59f708 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15941ca090a2c3c987324fc911bbc6f89e941c47 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f78d4a28f307a9d7943a06be9f919304c25ac2d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e2ba9c2028f21d11988558f3557905d21e93808 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be06e87433685b5ea9cfcc131ab89c56cf8292f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 654e54d200135e665e07e9f0097d913a77f169da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 583cd8807259a69fc01874b798f657c1f9ab7828 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edd9e23c766cfd51b3a6f6eee5aac0b791ef2fd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c3c271b0d6b5f56b86e3f177caf3e916b509b52 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619662a9138fd78df02c52cae6dc89db1d70a0e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8a448b7864e21db46184eab0f0a21d7725d074f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a252661c3bf4202a4d571f9c41d2afa48d9d75f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 867129e2950458ab75523b920a5e227e3efa8bbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b27292936c81637f6b9a7141dafaad1126f268e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3cde0ee162b8f0cb67da981311c8f9c16050a62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec28ad575ce1d7bb6a616ffc404f32bbb1af67b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b72e2704022d889f116e49abf3e1e5d3e3192d3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab59f78341f1dd188aaf4c30526f6295c63438b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61138f2ece0cb864b933698174315c34a78835d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50e469109eed3a752d9a1b0297f16466ad92f8d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65c9fe0baa579173afa5a2d463ac198d06ef4993 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c69b6b979e3d6bd01ec40e75b92b21f7a391f0ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 898d47d1711accdfded8ee470520fdb96fb12d46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e825f8b69760e269218b1bf1991018baf3c16b04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- def0f73989047c4ddf9b11da05ad2c9c8e387331 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 772b95631916223e472989b43f3a31f61e237f31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5c0002d069382db1768349bf0c5ff40aafbf140 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13dd59ba5b3228820841682b59bad6c22476ff66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619c11787742ce00a0ee8f841cec075897873c79 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53152a824f5186452504f0b68306d10ebebee416 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3776f7a766851058f6435b9f606b16766425d7ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09c3f39ceb545e1198ad7a3f470d4ec896ce1add ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d996892ac76199886ba3e2754ff9c9fac2456d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18e3252a1f655f09093a4cffd5125342a8f94f3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ff864138cd1e680a78522c26b583639f8f5e313 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 583e6a25b0d891a2f531a81029f2bac0c237cbf9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01eac1a959c1fa5894a86bf11e6b92f96762bdd8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfb278d74ad01f3f1edf5e0ad113974a9555038d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3323464f85b986cba23176271da92a478b33ab9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d1212e8c412b0b4802bc1080d38d54907db879d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fbe062bf6dacd3ad63dd827d898337fa542931ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c34343d0b714d2c4657972020afea034a167a682 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c36f3648e39ace752c67c71867693ce1eee52a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55e757928e493ce93056822d510482e4ffcaac2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e14e3f143e7260de9581aee27e5a9b2645db72de ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1873db442dc7511fc2c92fbaeb8d998d3e62723d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abaefc59a7f2986ab344a65ef2a3653ce7dd339f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af32b6e0ad4ab244dc70a5ade0f8a27ab45942f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4f49fb232acb2c02761a82acc12c4040699685d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2d9197cfe5d3b43cb8aee182b2e65c73ef9ab7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69dd8750be1fbf55010a738dc1ced4655e727f23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1044116d25f0311033e0951d2ab30579bba4b051 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e2265a23ecec4e4d9ad60d788462e7f124f1bb7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aea0243840a46021e6f77c759c960a06151d91c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c0ef65b43688b1a4615a1e7332f6215f9a8abb19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be97c4558992a437cde235aafc7ae2bd6df84ac8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fe889ea0cb2547584075dc1eb77f52c54b9a8c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47e3138ee978ce708a41f38a0d874376d7ae5c78 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3bd05b426a0e3dec8224244c3c9c0431d1ff130 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ebc6193f7205fd1686678a5707262cb1c59bb0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28a33ca17ac5e0816a3e24febb47ffcefa663980 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fde6522c40a346c8b1d588a2b8d4dd362ae1f58f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0369384c8b79c44c5369f1b6c05046899f8886da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18be0972304dc7f1a2a509595de7da689bddbefa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77cd6659b64cb1950a82e6a3cccdda94f15ae739 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 791765c0dc2d00a9ffa4bc857d09f615cfe3a759 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 160081b9a7ca191afbec077c4bf970cfd9070d2c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01ab5b96e68657892695c99a93ef909165456689 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc31651674648f026464fd4110858c4ffeac3c18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f068cdc5a1a13539c4a1d756ae950aab65f5348b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9059525a75b91e6eb6a425f1edcc608739727168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73959f3a2d4f224fbda03c8a8850f66f53d8cb3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a32a6bcd784fca9cb2b17365591c29d15c2f638e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c6d7830d9b87f47a0bfe82b3b5424a32e3164ad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f963881e53a9f0a2746a11cb9cdfa82eb1f90d8c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0019d7dc8c72839d238065473a62b137c3c350f5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f88fb96869b6ac3ed4dac7d23310a9327d3c89c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cf2d5fcf0a3db793678dd6ba9fc1c24d4eeb36a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebe8f644e751c1b2115301c1a961bef14d2cce89 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f2d76ba8e6d004ff5849ed8c7c34f6a4ac2e1e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf5eaddde33e983bc7b496f458bdd49154f6f498 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c0990b2a6dd2e777b46c1685ddb985b3c0ef59a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c1834134ce177cdbd30a56994fcc4bf8f5be8b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82849578e61a7dfb47fc76dcbe18b1e3b6a36951 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a320abc52307b4d4010166bd899ac75024ec9a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1687283c13caf7ff8d1959591541dff6a171ca1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cc4d748a132377ffe63534e9777d7541a3253c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 609a46a72764dc71104aa5d7b1ca5f53d4237a75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e6234c27abf041e4c8cd1a799950e7cd9104f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b03933057df80ea9f860cc616eb7733f140f866e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e84d05f4bbf7090a9802e9cd198d1c383974cb12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef48ca5f54fe31536920ec4171596ff8468db5fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b3ef45167e1c2f7d1b7507c13fcedd914f87da9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33964afb47ce3af8a32e6613b0834e5f94bdfe68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98e6edb546116cd98abdc3b37c6744e859bbde5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d061a1a506b71234f783628ba54a7bdf79bbce9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78d2cd65b8b778f3b0cfef5268b0684314ca22ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b4db556619db2ef25f0e0d90fef7e38e6713e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f73e8ba55f33394161b403bf7b8c2e0e05f47b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af5abca21b56fcf641ff916bd567680888c364aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4fd7fca515ba9b088a7c811292f76f47d16cd7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ceee7d7e0d98db12067744ac3cd0ab3a49602457 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 624556eae1c292a1dc283d9dca1557e28abe8ee3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f97653aa06cf84bcf160be3786b6fce49ef52961 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00ce31ad308ff4c7ef874d2fa64374f47980c85c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d36f8ff4d1274a8815e932285ad6dbd6b2888af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e2f63e64875a29e8c01a7ae17f5744680167a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9519f186ce757cdba217f222c95c20033d00f91d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c34d5c3f2a4ed7194276a026e0ec6437d339c67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8014d2ec56fd684dc81478dee73ca7eda0ab8a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a25e1d4aa7e5898ab1224d0e5cc5ecfbe8ed8821 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 75c75fa136f6181f6ba2e52b8b85a98d3fe1718e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- beccf1907dae129d95cee53ebe61cc8076792d07 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca3fdbe2232ceb2441dedbec1b685466af95e73b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f24f9540afc0db61d197bc4932697737bff1506 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20b07fa542d2376a287435a26c967a5ee104667f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6befb28efd86556e45bb0b213bcfbfa866cac379 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ca0f897376e765989e92e44628228514f431458 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83a9e4a0dad595188ff3fb35bc3dfc4d931eff6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6019e16d5a74dc49eb7129ee7fd78b4de51dac2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fafe8a77db75083de3e7af92185ecdb7f2d542d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3203cd7629345d32806f470a308975076b2b4686 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98a313305f0d554a179b93695d333199feb5266c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86523260c495d9a29aa5ab29d50d30a5d1981a0c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c946bf260d3f7ca54bffb796a82218dce0eb703f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 264ba6f54f928da31a037966198a0849325b3732 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec0657cf5de9aeb5629cc4f4f38b36f48490493e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a17c43d0662bab137903075f2cff34bcabc7e1d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dd51f1d63fa5ee704c2bdf4cb607bb6a71817d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7029773512eee5a0bb765b82cfdd90fd5ab34e15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61f3db7bd07ac2f3c2ff54615c13bf9219289932 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a21a9f6f13861ddc65671b278e93cf0984adaa30 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5bd7d44ff7e51105e3e277aee109a45c42590572 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ccd777c386704911734ae4c33a922a5682ac6c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ad01ee239f9111133e52af29b78daed34c52e49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a93eb7e8484e5bb40f9b8d11ac64a1621cf4c9cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e5aae2fc8c3832bdae1cd5e0a269405fb059231 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 739fa140235cc9d65c632eaf1f5cacc944d87cfb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dec4663129f72321a14efd6de63f14a7419e3ed2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7da101ba9a09a22a85c314a8909fd23468ae66f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b81273e70c9c31ae02cb0a2d6e697d7a4e2b683a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 968ffb2c2e5c6066a2b01ad2a0833c2800880d46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 523fb313f77717a12086319429f13723fe95f85e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d810f2700f54146063ca2cb6bb1cf03c36744a2c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c12fef1b1971ba7a50e7e5c497caf51e0f68479 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9004e3a1cf33110f2cbc458f1dc3259c930ad9b4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0cfe75db81bc099e4316895ff24d65ef865bced6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f24736ad5b55a89b1057d68d6b3f3cd01018a2e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b2e9a8312412b9c8d4e986510dcc30ee16c5f4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e86eb305a542cee5b0ff6a0e0352cb458089bf62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cb68eef0865df6aedbc11cd81888625a70da6777 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96d003cb2baabd73f2aa0fd9486c13c61415106e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b424f87a276e509dcaaee6beb10ca00c12bb7d29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46f63c30e30364eb04160df71056d4d34e97af21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 096897123ab5d8b500024e63ca81b658f3cb93da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea5d365a93a98907a1d7c25d433efd06a854109e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab5b6af0c2c13794525ad84b0a80be9c42e9fcf1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55eb3de3c31fd5d5ad35a8452060ee3be99a2d99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863b386e195bb2b609b25614f732b1b502bc79a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a92ab8028c7780db728d6aad40ea1f511945fc8e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5558400e86a96936795e68bb6aa95c4c0bb0719 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 916c45de7c9663806dc2cd3769a173682e5e8670 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e94df6acd3e22ce0ec7f727076fd9046d96d57b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55885e0c4fc40dd2780ff2cde9cda81a43e682c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f6b8bf020863f499bf956943a5ee56d067407f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c2e872f742e7d3c64c7e0fdb85a5d711aff1970 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbe78c02cbdfd0a539a1e04976e1480ac0daf580 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4654ca3a17832a7d479e5d8e3296f004c632183 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f573b6840509bf41be822ab7ed79e0a776005133 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70670586e082a9352c3bebe4fb8c17068dd39b4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3cc763d6ca57582964807fb171bc52174ef8d5e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5ec638a77dd1cd38512bc9cf2ebae949e7a8812 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2df73b317a4e2834037be8b67084bee0b533bfe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e54cd8fed2d1788618df64b319a30c7aed791191 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec0b85e2d4907fb5fcfc5724e0e8df59e752c0d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a023acbe9fc9a183c395be969b7fc7d472490cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ea450112501e0d9f11e554aaf6ce9f36b32b732 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe311b917b3cef75189e835bbef5eebd5b76cc20 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 10809e8854619fe9f7d5e4c5805962b8cc7a434b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ea761425b9fa1fda57e83a877f4e2fdc336a9a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb53329253f8ec1d0eff83037ce70260b6d8fcce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8980057ccfcaca34b423804222a9f981350ac67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9fc8b6c06b91dfddb73d18eaa8164e64cc2600a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 237d47b9d714fcc2eaedff68c6c0870ef3e0041a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9421cbc67e81629895ff1f7f397254bfe096ba49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c390e223553964fc8577d6837caf19037c4cd6f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8987f2746637cbe518e6fe5cf574a9f151472ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb52c96d7e849e68fda40e4fa7908434e7b0b022 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f03e6162f99e4bfdd60c08168dabef3a1bdb1825 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48f5476867d8316ee1af55e0e7cfacacbdf0ad68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a61110053bca2bbf605b66418b9670cbd555802 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c9fcd7745d2f0c933b46a694f77f85056133ca5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eb7265c532e99e8e434e31f910b05c055ae4369 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b137f55232155b16aa308ec4ea8d6bc994268b0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56cc93a548f35a0becd49a7eacde86f55ffc5dc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c914637ab146c23484a730175aa10340db91be70 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d43055d44e58e8f010a71ec974c6a26f091a0b7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ddd5e5ef89da7f1e3b3a7d081fbc7f5c46ac11c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbd784b870a878ef6dbecd14310018cdaeda5c6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d45c76bd8cd28d05102311e9b4bc287819a51e0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cccea02a4091cc3082adb18c4f4762fe9107d3b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03097c7ace28c5516aacbb1617265e50a9043a84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ab7ac2397d60f1a71a90bf836543f9e0dcad2d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18fff4d4a28295500acd531a1b97bc3b89fad07e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff13922f6cfb11128b7651ddfcbbd5cad67e477f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7ed51ba4c8416888f5744ddb84726316c461051 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8005591231c8ae329f0ff320385b190d2ea81df0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56d7a9b64b6d768dd118a02c1ed2afb38265c8b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8f10e74d815223341c3dd3b647910b6e6841bd6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6b08c27a031f8b8b0bb6c41747ca1bc62b72706 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3a728277877924e889e9fef42501127f48a4e77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5869c5c1a51d448a411ae0d51d888793c35db9c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f122a6aa3eb386914faa58ef3bf336f27b02fab0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db82455bd91ce00c22f6ee2b0dc622f117f07137 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 007bd4b8190a6e85831c145e0aed5c68594db556 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e6957abf8cd88824282a19b74497872fe676a46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8e70749887370a99adeda972cc3503397b5f9a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bed3b0989730cdc3f513884325f1447eb378aaee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 614907b7445e2ed8584c1c37df7e466e3b56170f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be34ec23c48d6d5d8fd2ef4491981f6fb4bab8e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5d11b750ecc982541d1f936488248f0b42d75d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eee7af0e69a39da2dc6c5f109c10975fae5a93e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba67e4ff74e97c4de5d980715729a773a48cd6bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9780b7a0f39f66d6e1946a7d109fc49165b81d64 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a1e0d7117b9e4ea4be3ef4895e8b2b4937ff98a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a7e7a769087b1790a18d6645740b5b670f5086b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28fdf05b1d7827744b7b70eeb1cc66d3afd38c82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d602f267c32e1e917599d9bcdcfec4eef05d477 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d0473c1d1e6cadd986102712fff9196fff96212 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81223de22691e2df7b81cd384ad23be25cfd999c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e231a4f184583fbac2d3ef110dacd1f015d5e1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f277ba01f9a93fb040a365eef80f46ce6a9de85 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df6b87a793434065cd9a01fcaa812e3ea47c4dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5025b8de2220123cd80981bb2ddecdd2ea573f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95436186ffb11f51a0099fe261a2c7e76b29c8a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 706d3a28b6fa2d7ff90bbc564a53f4007321534f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22c4671b58a6289667f7ec132bc5251672411150 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53b65e074e4d62ea5d0251b37c35fd055e403110 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ea782803efe1974471430d70ee19419287fd3d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3621c06c3173bff395645bd416f0efafa20a1da6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5991698ee2b3046bbc9cfc3bd2abd3a881f514dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 257264743154b975bc156f425217593be14727a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88a7002acb50bb9b921cb20868dfea837e7e8f26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ae92aa57324849dd05997825c29242d2d654099 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6fca2410a56225992959e5e4f8019e16757bfd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f879c71bdf0aac7af9b01304ff02e94b5af71b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a47a9c8d8253d0ae2a233fa8599b1a1c54ec53f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45eb6bd22554e5dad2417d185d39fe665b7a7419 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ef4552404ba3bc92554a6c57793ee889523e3a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 68f8a43d1b643318732f30ee1cd75e1d315a4537 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8cf69b6f8bd73525b5375bd73f1fc79ae322a82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1527b5734c0f2821fd6f38c1a1d70723a4bb88ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0c65d6638698f4e3a9e726efca8c0bcf466cd62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 02e942b7c603163c87509195d76b2117c4997119 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 725bde98d5cf680a087b6cb47a11dc469cfe956c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95bb489a50f6c254f49ba4562d423dbf2201554f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4cfc682ff87d3629b31e0196004d1954810b206c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f219b53f339fc0133800fac96deaf75eb4f9bf6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a05e49d2419d65c59c65adf5cd8c05f276550e1d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 60e54133aa1105a1270f0a42e74813f75cd2dc46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a83eee5bcee64eeb000dd413ab55aa98dcc8c7f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5a37564b6eec05b98c2efa5edcd1460a2df02aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45c1c99a22e95d730d3096c339d97181d314d6ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7297ff651c3cc6abf648b3fe730c2b5b1f3edbd3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a67e4e49c4e7b82e416067df69c72656213e886 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31b3673bdb9d8fb7feea8ae887be455c4a880f76 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1060a2a8c90c0730c3541811df8f906dac510a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a308613467a1510f8dac514624abae4e10c0779 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d0556a31916a709e9da3eafb92fc6b8bf69896c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04357d0d46fee938a618b64daed1716606e05ca5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc8c91200a7fb2140aadd283c66b5ab82f9ad61e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2ff0f9d704dc776a1934f72a339da206a9fff4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6aa8d116eb33293c0a9d6d600eb7c32832758b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a6ffa13ae2951a168cde5908c7a94b16562b96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 763ef75d12f0ad6e4b79a7df304c7b5f1b5a11f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c86bea60dde4016dd850916aa2e0db5260e1ff61 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 491440543571b07c849c0ef9c4ebf5c27f263bc0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6ee00d0dadcd7b10d60a2985db4fe137ca7cfed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73790919dbe038285a3612a191c377bc27ae6170 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6ed8d46c72366e111b9a97a7c238ef4af3bf4dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d4b4ea9c84198a9b6003611a3af00ee677d09a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dec7a822424bbe58b7b2a7787b1ea32683a9c19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28bda3aaa19955d1c172bd86d62478bee024bf7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fd7b945dfca73caf00883d4cf43740edb7516df ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ed61f72c611deb07e0368cebdc9f06da32150cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe2fbc5913258ef8379852c6d45fcf226b09900b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34802014ca0c9546e73292260aab5e4017ffcd9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1410bcc76725b50be794b385006dedd96bebf0fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06bec1bcd1795192f4a4a274096f053afc8f80ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b54b9399920375f0bab14ff8495c0ea3f5fa1c33 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe426d404b727d0567f21871f61cc6dc881e8bf0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 756b7ad43d0ad18858075f90ce5eaec2896d439c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7729245060f9aecfef4544f91e2656aa8d483ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9dc8fffd179b3d7ad7c46ff2e6875cc8075fabf3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 873823f39275ceb8d65ebfae74206c7347e07123 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c00567d3025016550d55a7abaf94cbb82a5c44fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50f763cfe38a1d69a3a04e41a36741545885f1d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21a6cb7336b61f904198f1d48526dcbe9cba6eec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c2502ee83927437442b13b83f3a7976e4146a01 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cc1e7e08094494916db1aadda17e03ce695d049 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158bc981130bfbe214190cac19da228d1f321fe1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abd23a37d8b93721c0e58e8c133cef26ed5ba1f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b89b089972b5bac824ac3de67b8a02097e7e95d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d83f44007c5c581eae7ddc6c5de33311b7c1895 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9e7a3d93da741f81a5af2e84422376c54f1f337 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f233e2405c16e2b185aa90cc8e7ad257307b991 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1cedc5c417ddf3c2a955514dcca6fe74913259b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bccdb483aaa7235b85a49f2c208ee1befd2706dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9563d27fbde02b8b2a8b0d808759cb235b4e083b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bafb4cc0a95428cbedaaa225abdceecee7533fac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1143e1c66b8b054a2fefca2a23b1f499522ddb76 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a771e102ec2238a60277e2dce68283833060fd37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8e700e952d135c6903b97f022211809338232e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5385cbd969cc8727777d503a513ccee8372cd506 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c696b3cf0c2441aefaef3592e2b815472f162a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22d2e4a0bfd4c2b83e718ead7f198234e3064929 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e79604c8bdfc367f10a4a522c9bf548bdb3ab9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 643e6369553759407ca433ed51a5a06b47e763d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1d5c614c38db015485190d65db05b0b75d171d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1a9a232fbde88a347935804721ec7cd08de6f65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa0ccead680443b07fd675f8b906758907bdb415 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85a45a691ad068a4a25566cc1ed26db09d46daa4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0f47b3076a84c5c32cccc95748f18c50e3d948 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1578baf817c2526d29276067d2f23d28b6fab2b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80d43111b6bb73008683ad2f5a7c6abbab3c74ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9aaaa83c44d5d23565e982a705d483c656e6c157 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3e78d98e06439eea1036957796f8df9f386930f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3068025b64bee24efc1063aba5138708737c158 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 141b78f42c7a3c1da1e5d605af3fc56aceb921ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3438795d2af6d9639d1d6e9182ad916e73dd0c37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdc38b83f4a6d39603dc845755df49065a19d029 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65c07d64a7b1dc85c41083c60a8082b3705154c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fdb6a5eac7433098cfbb33d3e18d6dbba8fa3d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58c5b993d218c0ebc3f610c2e55a14b194862e1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb6beb75aaa269a1e7751d389c0826646878e5fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec15e53439d228ec64cb260e02aeae5cc05c5b2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 332521ac1d94f743b06273e6a8daf91ce93aed7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2cc8f1e3c6627f0b4da7cb6550f7252f76529d8e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc8032d35a23bcc105f50b1df69a1da6fe291b90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbbcaf7a355e925911fa77e204dd2c38ee633c0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d06e76bb243dda3843cfaefe7adc362aab2b7215 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4faf5cd43dcd0b3eea0a3e71077c21f4d029eb99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cc0e6caa3117f694d367d3f3b80db1e365aac94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e1c90eb69e2dfd5fdf8418caa695112bd285f21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cd4caf15a2e977fc0f010c1532090d942421979c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a8700185dce5052ca1581b63432fb4d4839c226 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13141e733347cea5b409aa54475d281acd1c9a3c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05a302c962afbe5b54e207f557f0d3f77d040dc8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7b609c9f382685448193b59d09329b9a30c7580 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc9278fb4432f0244f4d780621d5c1b57a03b720 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1815563ec44868121ae7fa0f09e3f23cacbb2700 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5982ff789e731c1cbd9b05d1c6826adf0cd8080b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d97a8bb75098ad643d1a8853fe1b59cbb8e2338c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a91a659a3a7d8a099433d02697777221c5b9d16f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e328ffddec722be3fba2c9b637378e31e623d58e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25f27c86af9901f0135eac20a37573469a9c26ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bb927dc12fae61141f1cc7fe4a94e0d68cb4232 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5324565457e38c48b8a9f169b8ab94627dc6c979 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6271586d7ef494dd5baeff94abebbab97d45482b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f6713669a8a32af90a73d03a7fa24e6154327f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af74966685e1d1f18390a783f6b8d26b3b1c26d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f533a68cb5295f912da05e061a0b9bca05b3f0c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5b8220a1a967abdf2bae2124e3e22a9eea3729f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e61e3200d5c9c185a7ab70b2836178ae8d998c17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3297fe50067da728eb6f3f47764efb223e0d6ea4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 722473e86e64405ac5eb9cb43133f8953d6c65d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28afef550371cd506db2045cbdd89d895bec5091 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bdaa463f7c73d30d75d7ea954dd3c5c0c31617b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1875885485e7c78d34fd56b8db69d8b3f0df830c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c042f56fc801235b202ae43489787a6d479cd277 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07b124c118942bc1eec3a21601ee38de40a2ba0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b533f86cf86c96a16f96c815533bdda0585f48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aae2a7328a4d28077a4b4182b4f36f19c953765b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5de21c7fa2bdd5cd50c4f62ba848af54589167d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83156b950bb76042198950f2339cb940f1170ee2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ae1f213e1b99638ba685f58d489c0afa90a3991 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8da7852780a62d52c3d5012b89a4b15ecf989881 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f1b69ad52670a67e8b766e89451080219871739 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6964e3efc4ac779d458733a05c9d71be2194b2ba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1445b59bb41c4b1a94b7cb0ec6864c98de63814b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2090b5487e69688be61cfbb97c346c452ab45ba2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cdf7c5aca2201cf9dfc3cd301264da4ea352b737 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55d40df99085036ed265fbc6d24d90fbb1a24f95 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e77128e5344ce7d84302facc08d17c3151037ec3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3c89a5e020bb4747fd9470ba9a82a54c33bb5fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 19099f9ce7e8d6cb1f5cafae318859be8c082ca2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fbc182e6d4636f67f44e5893dee3dcedfa90e04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f77f9775277a100c7809698c75cb0855b07b884d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2c8c7f86e6a61307311ea6036dac4f89b64b500 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 895f0bc75ff96ce4d6f704a4145a4debc0d2da58 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89ade7bfff534ae799d7dd693b206931d5ed3d4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8d6fb2898ba465bc1ade60066851134a656a76c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 187fe114585be2d367a81997509b40e62fdbc18e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 903826a50d401d8829912e4bcd8412b8cdadac02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73ab28744df3fc292a71c3099ff1f3a20471f188 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9989f8965f34af5009361ec58f80bbf3ca75b465 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33940022821ec5e1c1766eb60ffd80013cb12771 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39164b038409cb66960524e19f60e83d68790325 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d255f4c8fd905d1cd12bd42b542953d54ac8a8c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4492c7965cd8e3c5faaf28b2a6414b04984720b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ba48ce5758fb2cd34db491845f3b9fdaefe3797 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0235f910916b49a38aaf1fcbaa6cfbef32c567a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1faf84f8eb760b003ad2be81432443bf443b82e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79c99c0f66c8f3c8d13258376c82125a23b1b5c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eafe201905d85be767c24106eb1ab12efd3ee22 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55969cb6034d5b416946cdb8aaf7223b1c3cbea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85e78ca3d9decf8807508b41dbe5335ffb6050a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6891caf73735ea465c909de8dc13129cc98c47f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a5cebaeda2c5062fb6c727f457ee3288f6046ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35658887753da7da9a32a297346fd4ee6e53d45c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08a0fad2c9dcdfe0bbc980b8cd260b4be5582381 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46201b346fec29f9cb740728a3c20266094d58b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78f3f38d18fc88fd639af8a6c1ef757d2ffe51d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5077fc7e4031e53f730676df4d8df5165b1d36cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 200d3c6cb436097eaee7c951a0c9921bfcb75c7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f4b410c955ea08bfb7842320afa568090242679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b366d3fabd79e921e30b44448cb357a05730c42f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 930d03fb077f531b3fbea1b4da26a96153165883 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc2ec79a88a787f586df8c40ed0fd6657dce31dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9405ac82af3a804dba1f9797bdb34815e1d7a18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ee291c469fc7ea6065ed22f344ed3f2792aa2ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e031a0ee8a6474154c780e31da2370a66d578cdc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b827f8162f61285754202bec8494192bc229f75a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cee0cec2d4a27bbc7af10b91a1ad39d735558798 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df958981ad63edae6fceb69650c1fb9890c2b14f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8ef023a5bab377764343c954bf453869def4807 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bde1038e19108ec90f899ce4aff7f31c1e387eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572ebd6e92cca39100183db7bbeb6b724dde0211 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d79951fba0994654104128b1f83990387d44ac22 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d9390866f9ce42870d3116094cd49e0019a970a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1116ef7e1bcbbc71d0b654b63156b29bfbf9afab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4b5ecc217154405ac0f6221af99a4ab18d067f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7f403b1e82d4ada20d0e747032c7382e2a6bf63 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0eafc47c307ff0bf589ce43b623bd24fad744fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c70daba7a3d195d22ded363c9915b5433ce054 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26bb778b34b93537cfbfd5c556d3810f2cf3f76e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25c207592034d00b14fd9df644705f542842fa04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1481af08064e10ce485339c6c0233acfc646572 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41fd2c679310e3f7972bd0b60c453d8b622f4aea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2253d39f3a5ffc4010c43771978e37084e642acc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4572ffd483bf69130f5680429d559e2810b7f0e9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a521681ff8614beb8e2c566cf3c475baca22169 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdf1e68f6bec679edc3feb455596e18c387879c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8b025f719b2c3203e194580bbd0785a26c08ebd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a79cf677744e2c1721fa55f934fa07034bc54b0a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13d399f4460ecb17cecc59d7158a4159010b2ac5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d84b960982b5bad0b3c78c4a680638824924004b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b114f3bbe50f50477778a0a13cf99c0cfee1392a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 842fb6852781fd74fdbc7b2762084e39c0317067 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 395955609dfd711cc4558e2b618450f3514b28c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1d2d0683afa6328b6015c6a3aa6a6912a055756 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0574b8b921dbfe1b39de68be7522b248b8404892 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e98416791566f44a407dcac07a1e1f1b0483544 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44c6d0b368bc1ec6cd0a97b01678b38788c9bd9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f11fdf1d9d22a198511b02f3ca90146cfa5deb5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf2335af23fb693549d6c4e72b65f97afddc5f64 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5db3d3c49ebe559cb80983d7bb855d4adf1b887 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 467416356a96148bcb01feb771f6ea20e5215727 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57550cce417340abcc25b20b83706788328f79bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 137ee6ef22c4e6480f95972ef220d1832cdc709a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 434505f1b6f882978de17009854d054992b827cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4cede2368aa980e30340f0ed0a1906d65fe1046c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e61439b3018b0b9a8eb43e59d0d7cf32041e2fed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df2fb548040c8313f4bb98870788604bc973fa18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25a2ebfa684f7ef37a9298c5ded2fc5af190cb42 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1124e19afc1cca38fec794fdbb9c32f199217f78 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 278423faeb843fcf324df85149eeb70c6094a3bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c572a8d95d8fa184eb58b15b7ff96d01ef1f9ec3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a3c95b408162c78b9a4230bb4f7274a94d0add4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 618e6259ef03a4b25415bae31a7540ac5eb2e38a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa3f2fa76844e1700ba37723acf603428b20ef74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f495e94028bfddc264727ffc464cd694ddd05ab8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29eb301700c41f0af7d57d923ad069cbdf636381 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45f8f20bdf1447fbfebd19a07412d337626ed6b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 783ad99b92faa68c5cc2550c489ceb143a93e54f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b343718cc1290c8d5fd5b1217724b077153262a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7bbaac26906863b9a09158346218457befb2821a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa70623a651d2a0b227202cad1e526e3eeebfa00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ec2f8a4f26cec3fbbe1fb447058acaf508b39c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 082851e0afd3a58790fe3c2434f6d070f97c69c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51bf7cbe8216d9a1da723c59b6feece0b1a34589 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1210ec763e1935b95a3a909c61998fbd251b7575 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7842e92ebaf3fc3380cc8d704afa3841f333748c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51f4a1407ef12405e16f643f5f9d2002b4b52ab9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f284a4e7c8861381b0139b76af4d5f970edb7400 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2528d11844a856838c0519e86fe08adc3feb5df1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31fd955dfcc8176fd65f92fa859374387d3e0095 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2b92c66bed6d1eea7b8aefe3405b0898fbb2019 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94ca83c6b6f49bb1244569030ce7989d4e01495c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8e914eb0dfe6a0eb2de66b6826af5f715aeed6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e6827e98c2732863857c0887d5de4138a8ae48b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85f38a1bbc8fc4b19ebf2a52a3640b59a5dcf9fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83645971b8e134f45bded528e0e0786819203252 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6310480763cdf01d8816d0c261c0ed7b516d437a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d8269a04b2b03ebf53309399a8f0ea0a4822c11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b586fbb94d5acc6e06980a8a96f66771280beda ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ea7e265d1549613c12cbe42a2e012527c1a97e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bf8ce9464987c7b0dbe6acbc2cc2653e98ec739a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1b8d0c92e4b5797b95948bdb95bec7756f5189f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b4f92c8eea41f20b95f9e62a39b210400f4d2a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66c41eb3b2b4130c7b68802dd2078534d1f6bf7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc77e6b2862733a211c55cf29cc7a83c36c27919 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08e0d5f107da2e354a182207d5732b0e48535b66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5962373da1444d841852970205bff77d5ca9377f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec731f448d304dfe1f9269cc94de405aeb3a0665 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2efa1b19061ad6ed9d683ba98a88b18bff3bfd9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4486bcbbf49ad0eacf2d8229fb0e7e3432f440d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b02662d4e870a34d2c6d97d4f702fcc1311e5177 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0210e394e0776d0b7097bf666bebd690ed0c0e4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d248bb8362808121f6b6abfd316d83b65afa79 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b1cfcc629e856b1384b811b8cf30b92a1e34fe1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57d053792d1cde6f97526d28abfae4928a61e20f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bce7cc4a43e5843c9f4939db143a9d92bb45a18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6e23ed24b35c6154b4ee0da5ae51cd5688e5e67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba7c2a0f81f83c358ae256963da86f907ca7f13c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fac8d40f535ec8f3d1cf2187fbbe3418d82cf62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a25365fea0ea3b92ba96cc281facd308311def1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76ac61a2b4bb10c8434a7d6fc798b115b4b7934d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d5d143f72e4d588e3a0abb2ab82fa5a2c35e8aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b29388a8f9cf3522e5f52b47572af7d8f61862a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9db2ff10e59b2657220d1804df19fcf946539385 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3910abfc2ab12a5d5a210b71c43b7a2318311323 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bbf02e0c648177b164560003cb51e50bc72b35cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d5df2ce3addd9e9e1863f4f33665a16b415b71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 965ccefd8f42a877ce46cf883010fd3c941865d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0e0b97b1d595b9b54d57e5bd4774e2a7b97696df ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f858c449a993124939e9082dcea796c5a13d0a74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66306f1582754ca4527b76f09924820dc9c85875 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdb4c7cb5b3dec9e4020aac864958dd16623de77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1a82e45fc177cec8cffcfe3ff970560d272d0bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12db6bbe3712042c10383082a4c40702b800a36a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dfa1685aac22a83ba1f60d1b2d52abf5a3d842f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dd7aca043c197979e6b4b5ff951e2b62c320ef4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6411bf1bf1ce403e8b38dbbdaf78ccdbe2b042dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52912b549289b9df7eeada50691139df6364e92d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b3c16c39953e7a6f55379403ca5d204dcbdb1e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d678792d3154d5de04a5225079f2e0457b45b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67291f0ab9b8aa24f7eb6032091c29106de818ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54709d9efd4624745ed0f67029ca30ee2ca87bc9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1c40f46bd547be663b4cd97a80704279708ea8a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b6cde8de6d40715cf445cf1a5d77cd9befbf4d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ef12ae4c158fa8ddb78a70dcf8f90966758db81 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a56136f9cb48a17ae15b59ae0f3f99d9303b1cb1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90dc03da3ebe1daafd7f39d1255565b5c07757cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79a36a54b8891839b455c2f39c5d7bc4331a4e03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b3e769989c4928cf49e335f9e7e6f9465a6bf99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4aa750a96baf96ac766fc874c8c3714ceb4717ee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3430bde60ae65b54c08ffa73de1f16643c7c3bfd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b56d6778ee678081e22c1897ede1314ff074122a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8cb31db6b3970d1e983f10b0e0b5eeda8348c7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aba0494701292e916761076d6d9f8beafa44c421 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- feed81ea1a332dc415ea9010c8b5204473a51bdf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a962464c1504d716d4acee7770d8831cd3a84b48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e482a20ab221cb6eca51f12f1bd29cda4eec484 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58998fb2dd6a1cad5faffdc36ae536ee6b04e3d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 251128d41cdf39a49468ed5d997cc1640339ccbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a99953c07d5befc3ca46c1c2d76e01ecef2a62c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24d4926fd8479b8a298de84a2bcfdb94709ac619 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67260a382f3d4fb841fe4cb9c19cc6ca1ada26be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55c5f73de7132472e324a02134d4ad8f53bde141 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53373c8069425af5007fb0daac54f44f9aadb288 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2b820f936132d460078b47e8de72031661f848c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dbfd290609fe43ca7d94e06cea0d60333343838 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a358f2cfdc46a99db9e595d7368ecfecba52de0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ee7e1a72aa2b9283223a8270a7aa9cb2cdb5ced ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 454fedab8ea138057cc73aa545ecb2cf0dac5b4b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d4859e26cef6c9c79324cfc10126584c94b1585 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 076446c702fd85f54b5ee94bccacc3c43c040a45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67648785d743c4fdfaa49769ba8159fcde1f10a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8503a11eb470c82181a9bd12ccebf5b3443c3e40 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eae04bf7b0620a0ef950dd39af7f07f3c88fd15f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a91cf1217155ef457d92572530503d13b5984fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecd061b2e296a4f48fc9f545ece11c22156749e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 280e573beb90616fe9cb0128cec47b3aff69b86a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d78e368f6877ec70b857ab9b7a3385bb5dca8d2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccff34d6834a038ef71f186001a34b15d0b73303 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f48d08760552448a196fa400725cde7198e9c9b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d851a6f3885ec24a963a206f77790977fd2e6c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc340779c5cd6efb6ac3c8d21141638970180f41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4459ca7fd21d549a2342a902cfdeba10c76a022 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91b9bc4c5ecae9d5c2dff08842e23c32536d4377 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 62536252a438e025c16eebd842d95d9391e651d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a67f25298c80aaeb3633342c36d6e00e91d7bd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dcfe2423fb93587685eb5f6af5e962bff7402dc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7231486c883003c43aa20a0b80e5c2de1152d17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 42e89cc7c7091bb1f7a29c1a4d986d70ee5854ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c352dba143e0b2d70e19268334242d088754229b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1aea3af6dcabfe4c6414578b22bfbb31a7e1840 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 086af072907946295f1a3870df30bfa5cf8bf7b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ee08fce6ec508fdc6e577e3e507b342d048fa16 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a6cb4aab975a35e9ca7f28c1814aa13203ab835 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2c1d194064e505fa266bd1878c231bb7da921ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cd6e82cfa3bdc3b5d75317431d58cc6efb710b1d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9db530e428f798cdf5f977e9b2dbad594296f05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da43a47adb86c50a0f4e01c3c1ea1439cefd1ac2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 044977533b727ed68823b79965142077d63fe181 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 693b17122a6ee70b37cbac8603448aa4f139f282 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80b038f8d8c7c67c148ebd7a5f7a0cb39541b761 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f773b4cedad84da3ab3f548a6293dca7a0ec2707 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16223e5828ccc8812bd0464d41710c28379c57a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ec27096fbe036a97ead869c7522262f63165e1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db0dfa07e34ed80bfe0ce389da946755ada13c5d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a644184b05e99a4809de378f21424ef6ced06e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34cce402e23a21ba9c3fdf5cd7f27a85e65245c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4f7d34f8752ab78949efcaa9f0bd938df33622 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14582df679a011e8c741eb5dcd8126f883e1bc71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 929f3e1e1b664ed8cdef90a40c96804edfd08d59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6224c72b6792e114bc1f4b48b6eca482ee6d3b35 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4106f183ad0875734ba2c697570f9fd272970804 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a26349d8df88107bd59fd69c06114d3b213d0b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7bbe6b01c82d9bcb3333b07bae0c9755eecdbbf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 096027bc4870407945261eecfe81706e32b1bfcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a77eab2b5668cd65a3230f653f19ee00c34789bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6f596d7f46cb13a3d87ff501c844c461c0a3b0a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3953d71374994a00c7ef756040d2c77090f07bb4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9932e647aaaaf6edd3a407b75edd08a96132ef5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 225529c8baaa6ee65b1b23fc1d79b99bf49ebfb1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dda3cbbd15e7a415c1cbd33f85d7d6d0e3a307a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4756f4a1298e053aaeae58b725863e8742d353a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dc46d735003df8ff928974cb07545f69f8ea411 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 284f89d768080cb86e0d986bfa1dd503cfe6b682 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 597fb586347bea58403c0d04ece26de5b6d74423 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb8289e80c8b9fe48456e769e0421b7f9972af3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 607d8aa3461e764cbe008f2878c2ac0fa79cf910 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dba01d3738912a59b468b76922642e8983d8995b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d52c5783c08f4f9e397c4dad55bbfee2b8c61c5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0685d629f86ef27e4b68947f63cb53f2e750d3a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abb18968516c6c3c9e1d736bfe6f435392b3d3af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18dd177fbfb63caed9322867550a95ffbc2f19d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6e1dcc992ff0a8ddcb4bca281ae34e9bc0df34b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09a96fb2ea908e20d5acb7445d542fa2f8d10bb6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 809c7911944bc32223a41ea3cecc051d698d0503 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0b10d965d6377c409ceb40eb47379d79c3fef9f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 961539ced52c82519767a4c9e5852dbeccfc974e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e7045c4a2b2438adecd2ba59615fbb61d014512 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7e09792a392eeed4d712b40978b1b91b751a6d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0374d7cf84ecd8182b74a639fcfdb9eafddcfd15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 762d8fb447b79db7373e296e6c60c7b57d27c090 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b88532a5346a9a7e8f0e45fec14632a9bfe2c89 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3787f622e59c2fecfa47efc114c409f51a27bbe7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c4dec45d387ccebfe9bd423bc8e633210d3cdbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3eae2cdd688d8969a4f36b96a8b41fa55c0d3ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3fc83f2333eaee5fbcbef6df9f4ed9eb320fd11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16d3ebfa3ad32d281ebdd77de587251015d04b3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dcb520caa069914f9ab014798ab321730f569cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f37011d7627e4a46cff26f07ea7ade48b284edee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e263b8f972f78c673f36f2bbc1f8563ce6acb10 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5262acbd33b70fb676284991207fb24fa9ac895 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9766832e11cdd8afed16dfd2d64529c2ae9c3382 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c16f584725a4cadafc6e113abef45f4ea52d03b3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af86f05d11c3613a418f7d3babfdc618e1cac805 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36811a2edc410589b5fde4d47d8d3a8a69d995ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6b661c04d82599ad6235ed1b4165b9f097fe07e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8e7a7df78fb98314ba5a0a98f4600454a6c3953 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 730177174bbc721fba8fbdcd28aa347b3ad75576 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4119a576251448793c07ebd080534948cad2f170 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f12c8c34371a7c46dad6788a48cf092042027ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0767cc527bf3d86c164a6e4f40f39b8f920e05d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b85fec1e333896ac0f27775469482f860e09e5bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0a7824253ae412cf7cc27348ee98c919d382cf2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36440f79bddc2c1aa4a7a3dd8c2557dca3926639 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3211ae9dbfc6aadd2dd1d7d0f9f3af37ead19383 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d0fb22b4f5f94da44075d8c43da24b344ae3f0da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 184cc1fc280979945dfd16b0bb7275d8b3c27e95 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b10de37fe036b3dd96384763ece9dc1478836287 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46b204d1b2eb6de6eaa31deacf4dd0a9095ca3fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c03da67aabaab6852020edf8c28533d88c87e43f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e7314c57ef56aaf5fd27a311bfa6a01d18366a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 651a81ded00eb993977bcdc6d65f157c751edb02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14fc8bd3e5a8249224b774ea9052c9a701fc8e0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1297f65226e3bfdb31e224c514c362b304c904c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d906f31a283785e9864cb1eaf12a27faf4f72c42 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6643a9feb39d4d49c894c1d25e3d4d71e180208a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 690722a611a25a1afcdb0163d3cfd0a8c89d1d04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbddc30a4d5c37feabc33d4c4b161ec8e5e0bf7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48c1e9b430cc84366f2c29bb0006e9593659835e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63c31b60acf2286095109106a4e9b2a4289ec91f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20f4a9d49b466a18f1af1fdfb480bc4520a4cdc2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90c4db1f3ba931b812d9415324d7a8d2769fd6db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e62078d023ba436d84458d6e9d7a56f657b613ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eec9b86a81693d2b2d18ea651b1a0b5df521266 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85ebfb2f0dedb18673a2d756274bbcecd1f034c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5df76d451ff0fde14ab71b38030b6c3e6bc79c08 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c93e971f3e0aa4dea12a0cb169539fe85681e381 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a728b0a4b107a2f8f1e68bc8c3a04099b64ee46c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5232c89de10872a6df6227c5dcea169bd1aa6550 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9562ae2e2436e052d31c40d5f9d3d0318f6c4575 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d283c83c43f5e52a1a14e55b35ffe85a780615d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ffddedf5467df993b7a42fbd15afacb901bca6d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50cbafc690e5692a16148dbde9de680be70ddbd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7968d136276607115907267b3be89c3ff9acd03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7180d50f785ec28963e12e647d269650ad89b31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b650c4f28bda658d1f3471882520698ef7fb3af6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d43a751e578e859e03350f198bca77244ba53b5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a4fc6abfb3b39237f557372262ac79f45b6a9fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 043e15fe140cfff8725d4f615f42fa1c55779402 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76ba0924be14d55d01db0506b3e6a930cc72bf0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8470777b44bed4da87aad9474f88e7f0774252a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c885781858ade2f660818e983915a6dae5672241 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a233359ce1ec30386f97d4acdf989f1c3570842 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74a1b17a29390660abe79d83d837a666141f8625 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d06f5af4311e6a1d17213dde57a261e30dbf669 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f9d492e479eda07c5bbe838319eecac459a6042 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70aa1ab69c84ac712d91c92b36a5ed7045cc647c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9448c082b158dcab960d33982e8189f2d2da4729 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8e223263c73a7516e2b216a546079e9a144b3a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 37cef2340d3e074a226c0e81eaf000b5b90dfa55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a2f5d05f4a8e3427d6dd2a5981f148a9f6bef84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fed0cadffd20e48bed8e78fd51a245ad666c54f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c43652c9f5b11b611e1aca0a6d67393e9e38c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f62c8d8bbb566edd9e7a40155c7380944cf65dfb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39eb0e607f86537929a372f3ef33c9721984565a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1ace258417deae329880754987851b1b8fc0a7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 887f249a2241d45765437b295b46bca1597d91a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3473060f4b356a6c8ed744ba17ad9aa26ef6aab7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2f9f4e7fd8af09126167fd1dfa151be4fedcd71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab69b9a67520f18dd8efd338e6e599a77b46bb34 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6e458c9f8682ab5091e15e637c66ad6836f23b4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94b7ece1794901feddf98fcac3a672f81aa6a6e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- efc259833ee184888fe21105d63b3c2aa3d51cfa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e21d96a76c223064a3b351fe062d5452da7670cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e331a0b5e2acd1938bf4906aadf7276bc7f1b60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- efe68337c513c573dde8fbf58337bed2fa2ca39a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfa37825b011af682bc12047b82d8cec0121fe4e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c30bf3ba7548a0e996907b9a097ec322760eb43a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 969185b76df038603a90518f35789f28e4cfe5b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f08d3067310e0251e6d5a33dc5bc65f1b76a2d49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 473fc3a348cd09b4ffca319daff32464d10d8ef9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 025fe17da390c410e5bae4d6db0832afbfa26442 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 595181da70978ed44983a6c0ca4cb6d982ba0e8b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f58702b0c3a0bb58d49b995a7e5479a7b24933e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158b3c75d9c621820e3f34b8567acb7898dccce4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c6c8dcc01b08748c552228e00070b0c94affa94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11d91e245194cd9a2e44b81b2b3c62514596c578 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78d12aa7c922551dddd7168498e29eae32c9d109 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3f91bd1c0e8aef1b416ae6b1f55e7bd93a4f281 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dff2004308a7a1e5b9afc7a5b3b9cb515e12514 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96364599258e7e036298dd5737918bde346ec195 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47f35d1ba2b9b75a9078592cf4c41728ac088793 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a04c15b1f77f908b1dd3983a27ee49c41b3a3e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fbf0ef97d6f59d2eb0f37b29716ba0de95c4457 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8340e0bb6ad0d7c1cdb26cbe62828d3595c3b7a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bef6d375fd21e3047ed94b79a26183050c1cc4cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a0d131ece696f259e7ab42a064ceb10dabb1fcc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0f79c58ad919e90261d1e332df79a4ad0bc40de ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 820d3cc9ceda3e5690d627677883b7f9d349b326 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d86d883714072b6e3bbc56a2127c06e9d6a6582 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cefc0df04440215dad825e109807aecf39d6180b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 617c09e70bfd54af1c88b4d2c892b8d287747542 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01a96b92f7d873cbd531d142813c2be7ab88d5a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 464504ce0069758fdb88b348e4a626a265fb3fe3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb2461d84f97a72641ef1e878450aeab7cd17241 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4832aa6bf82e4853f8f426fc06350540e2c8a9e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4fe6efbccc2ad5c2044bf36e34019363018630 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 385a8c6c1a72dc34f69c5273c1b4c1285cc1d3c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45d1cd59d39227ee6841042eab85116a59a26d22 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18b6aa55309adfa8aa99bdaf9e8f80337befe74e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8ec952343583324c4f5dbefa4fb846f395ea6e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a84459c6a5a1d8a81e4a51189091ef135e1776e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df39446bb7b90ab9436fa3a76f6d4182c2a47da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 567c892322776756e8d0095e89f39b25b9b01bc2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90f0fb8f449b6d3e4f12c28d8699ee79a6763b80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c51f93823d46f0882b49822ce6f9e668228e5b8d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76bcd7081265f1d72fcc3101bfda62c67d8a7f32 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce8cc4a6123a3ea11fc4e35416d93a8bd68cfd65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6503ef72d90164840c06f168ab08f0426fb612bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5402a166a4971512f9d513bf36159dead9672ae9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c242b55d7c64ee43405f8b335c762bcf92189d38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da88d360d040cfde4c2bdb6c2f38218481b9676b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b60ab31cfa2ca146069df8dbc21ebfc917db0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5c69071fd6c730d29c31759caddb0ba8b8e92c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b03c2eb07f08dd5d6174a04e4288d41f49920f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f875ddea28b09f2b78496266c80502d5dc2b7411 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c3255387fe2ce9b156cc06714148436ad2490d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01c8d59e426ae097e486a0bffa5b21d2118a48c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecb12c27b6dc56387594df26a205161a1e75c1b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 434306e7d09300b62763b7ebd797d08e7b99ea77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11837f61aa4b5c286c6ee9870e23a7ee342858c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 636f77bf8d58a482df0bde8c0a6a8828950a0788 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 703280b8c3df6f9b1a5cbe0997b717edbcaa8979 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 091ac2960fe30fa5477fcb5bae203eb317090b3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bbf6520460dc4d2bfd7943cda666436f860cf71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93954d20310a7b77322211fd7c1eb8bd34217612 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 1a70c883ed46decf09866fed883a38a919abb509 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 8c67a7e5b403848df7c13a02e99042895f86b35b ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 5a9a6f8d38374103fa5aa601b4dd4814b01f0727 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c946ee6160c206cd4cb88cda26cb6e6b6aa6ff52 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 20a85a80df2b7e0a9a55a67d93a88d3f61d2d8bd ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 82b21953b7dbf769ac0f8777a3da820b62f4f930 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 8df94a33e8ba7e2d8f378bd10df5512012745f1c ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 85db204ee24b01c8646ba39e2d2fa00637d4c920 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- dbc6dec2df75f3219d74600d8f14dfc4bfa07dff ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c87d2b394cfab9c0c1e066fb8bcbe33092d35b92 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 191912724d184b7300ab186fa7921d0687755749 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c5843a1f6abf5bb63b1cade6864a6c78cbcb0e34 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 078cbdf6adbd3ce0cca267397abcc7244491079f ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 838fd68e77b2e9da19210eb185630f0b6551986f ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- b5f32651ff5c1496438f0fb65f895a6fd78c4cf2 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- f5e202e7825dc4621c2395acb38fef23d90b8799 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- e852a8fc65767be911547db94f9052efa7faa537 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 28d14d0c423f7e360b14ff6b9914e7645fed6767 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- cdcc02f8aac7f21a2be85513c1fe8e7eb4f3e39a ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 82f92ce36cd73a6d081113f86546f99c37ea968f ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 9cbad67365396ebec327c8fe4e11765ed0dd7222 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 2b19ea4297b6e355a20188bc73acf9911db84c1e ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 0216e061edb1a0f08256c0e3d602d54984c2ad15 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- bf882d3312780aa7194e6ce3e8fcd82ee750ae32 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 86686f170fbd3b34abc770c21951ef49092064d3 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 5e470181aa8d5078f4ef1a2e54b78bf3dbf5ab64 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- b7ffcb61f437ea32196e557572db26a3282348b1 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 74a23126b9e2c2f80a37cccac5c0306f68594ffa ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- f7bc140e4625a69df3a89604088619d70b0d49a6 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- dea109086bca1fc6a159e11aabd9c6a2d15c40a9 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 5d0ba8ca4ad2c2483f048ed17e0086f5c49e7ed8 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 862010fc022548fcf88d3d407f5eed9a0897a032 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 8f83f391ee11fc4b94360ec69fbc531b89ffd1c8 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 3e37a7a43f51cbfb42fd4b1fce4c1471de47d308 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 65a27e98099099ef12d640658d3cad94ae4bd7a7 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 6e28f4c06fa6a05ff61cfa4946d9c0f1351aba69 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- e3408974e46691ff6be52f48c3f69c25c6d5ff72 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 6b82d0294f0db33117f397b37b339e09357210f2 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- b6f1b60e714725420bac996dea414ec3dcdc8c27 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 732bbd4527e61e11f92444ca2030c885836d97f2 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c9fc2640dcea80f4fd2f60e34fd9fd4769afaca7 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 327a07ed89cbb276106bbad5d258577c2bb47f66 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 775127943335431f932e0e0d12de91e307978c71 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- f66af1223bceacdd876fb5a45b27d039033670e7 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- ca262ee4c7c36f0fac616763814f02cb659c9082 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 1a70c883ed46decf09866fed883a38a919abb509 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 8c67a7e5b403848df7c13a02e99042895f86b35b ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 5a9a6f8d38374103fa5aa601b4dd4814b01f0727 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 20a85a80df2b7e0a9a55a67d93a88d3f61d2d8bd ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 82b21953b7dbf769ac0f8777a3da820b62f4f930 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 8df94a33e8ba7e2d8f378bd10df5512012745f1c ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 85db204ee24b01c8646ba39e2d2fa00637d4c920 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- dbc6dec2df75f3219d74600d8f14dfc4bfa07dff ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- c87d2b394cfab9c0c1e066fb8bcbe33092d35b92 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 191912724d184b7300ab186fa7921d0687755749 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- c5843a1f6abf5bb63b1cade6864a6c78cbcb0e34 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 078cbdf6adbd3ce0cca267397abcc7244491079f ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 838fd68e77b2e9da19210eb185630f0b6551986f ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- b5f32651ff5c1496438f0fb65f895a6fd78c4cf2 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- f5e202e7825dc4621c2395acb38fef23d90b8799 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- e852a8fc65767be911547db94f9052efa7faa537 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 28d14d0c423f7e360b14ff6b9914e7645fed6767 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- cdcc02f8aac7f21a2be85513c1fe8e7eb4f3e39a ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 82f92ce36cd73a6d081113f86546f99c37ea968f ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 9cbad67365396ebec327c8fe4e11765ed0dd7222 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 2b19ea4297b6e355a20188bc73acf9911db84c1e ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 0216e061edb1a0f08256c0e3d602d54984c2ad15 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- bf882d3312780aa7194e6ce3e8fcd82ee750ae32 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 86686f170fbd3b34abc770c21951ef49092064d3 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 5e470181aa8d5078f4ef1a2e54b78bf3dbf5ab64 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- b7ffcb61f437ea32196e557572db26a3282348b1 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 74a23126b9e2c2f80a37cccac5c0306f68594ffa ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- f7bc140e4625a69df3a89604088619d70b0d49a6 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- dea109086bca1fc6a159e11aabd9c6a2d15c40a9 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 5d0ba8ca4ad2c2483f048ed17e0086f5c49e7ed8 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 862010fc022548fcf88d3d407f5eed9a0897a032 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 8f83f391ee11fc4b94360ec69fbc531b89ffd1c8 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 3e37a7a43f51cbfb42fd4b1fce4c1471de47d308 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 65a27e98099099ef12d640658d3cad94ae4bd7a7 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 6e28f4c06fa6a05ff61cfa4946d9c0f1351aba69 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- e3408974e46691ff6be52f48c3f69c25c6d5ff72 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 6b82d0294f0db33117f397b37b339e09357210f2 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- b6f1b60e714725420bac996dea414ec3dcdc8c27 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 732bbd4527e61e11f92444ca2030c885836d97f2 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- c9fc2640dcea80f4fd2f60e34fd9fd4769afaca7 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 327a07ed89cbb276106bbad5d258577c2bb47f66 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 775127943335431f932e0e0d12de91e307978c71 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- f66af1223bceacdd876fb5a45b27d039033670e7 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- ca262ee4c7c36f0fac616763814f02cb659c9082 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 2826c8840a3ffb74268263bef116768a8fcc77b0 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a5ad8eb90ed759313bcc5cbec0a6206c37b6e2e6 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 1b15ac67eaefc9de706bd40678884f770212295a ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- c6f6ee37d328987bc6fb47a33fed16c7886df857 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 1b100a5e7d46bbca8fcdba5a258156e3e5cb823f ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 87c1a5b2028a68a1ee0db7a257adb6f55db0f936 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 8340f1a972bd5fbde8ffb07fb3aba8b84d06807c ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- f8c7e61f8b1d1e3b97f27105a2536619c074283a ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a714eea1336cf591b8fed481cc0ea15999bed60f ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 4af13d80d400a8338d3c2670eb98936549c26780 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 0d236f3d9f20d5e5db86daefe1e3ba1ce68e3a97 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a5ad8eb90ed759313bcc5cbec0a6206c37b6e2e6 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- bd963561fa83a9c7808325162200125b327c1d41 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- c6f6ee37d328987bc6fb47a33fed16c7886df857 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 1b100a5e7d46bbca8fcdba5a258156e3e5cb823f ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 953420f6c79297a9b4eccfe7982115e9d89c9296 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 8340f1a972bd5fbde8ffb07fb3aba8b84d06807c ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- f8c7e61f8b1d1e3b97f27105a2536619c074283a ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- da18208c7a51000db89a66825972d311ce8d8b1e ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 4af13d80d400a8338d3c2670eb98936549c26780 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 0d236f3d9f20d5e5db86daefe1e3ba1ce68e3a97 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a5ad8eb90ed759313bcc5cbec0a6206c37b6e2e6 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 310ebc9a0904531438bdde831fd6a27c6b6be58e ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- c6f6ee37d328987bc6fb47a33fed16c7886df857 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 1b100a5e7d46bbca8fcdba5a258156e3e5cb823f ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- e3e813b7d2b234fb0aa3a3b4dc8d3599618b72d4 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 8340f1a972bd5fbde8ffb07fb3aba8b84d06807c ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- f8c7e61f8b1d1e3b97f27105a2536619c074283a ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 4af13d80d400a8338d3c2670eb98936549c26780 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 0d236f3d9f20d5e5db86daefe1e3ba1ce68e3a97 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 310ebc9a0904531438bdde831fd6a27c6b6be58e ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- c6f6ee37d328987bc6fb47a33fed16c7886df857 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- e3e813b7d2b234fb0aa3a3b4dc8d3599618b72d4 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 8340f1a972bd5fbde8ffb07fb3aba8b84d06807c ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- f8c7e61f8b1d1e3b97f27105a2536619c074283a ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 4af13d80d400a8338d3c2670eb98936549c26780 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9a1baa6242c21e51d4d51c03bea35351499a6281 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 14619275dc60eef92b3e0519df7fcd17aabceee7 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 396bb230001674bed807411a8e555f517011989f ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 0fea59845b2c53a9b4eb26f4724ad547c187b601 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 2d8f3560a2b8997a54a1dcbd4345c1939f2a714e ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7044b6ca8e6ef0d91ef77bcb2bb5a37722a66177 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 091cf78cb2d0e23f3638e518357343f4695f3c59 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 770dbba7a5eded885bf959a783ce126febdfc48e ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 14619275dc60eef92b3e0519df7fcd17aabceee7 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 396bb230001674bed807411a8e555f517011989f ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 0fea59845b2c53a9b4eb26f4724ad547c187b601 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 2d8f3560a2b8997a54a1dcbd4345c1939f2a714e ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7044b6ca8e6ef0d91ef77bcb2bb5a37722a66177 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 091cf78cb2d0e23f3638e518357343f4695f3c59 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 770dbba7a5eded885bf959a783ce126febdfc48e ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 295ed528bf629c70ae92c92837999cc7556dd6a9 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- c8493379f202e3471c382be92fb1d8d458935a3b ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 64917257e12a7a4a1b72354368e45fd9c11de2f4 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7adfd67098a0ad99087ce4b4804c13d0ceff309c ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- d44f7bda0c4653810b449a36832c7de8ac40413b ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 091cf78cb2d0e23f3638e518357343f4695f3c59 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 770dbba7a5eded885bf959a783ce126febdfc48e ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 06c0c4b1bff2d0f108d776ca3cdcfe2ed5e2ba02 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- c8493379f202e3471c382be92fb1d8d458935a3b ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 35c6691a626b1b7bddb2fac9327f4466d57aa3e5 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7adfd67098a0ad99087ce4b4804c13d0ceff309c ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- d44f7bda0c4653810b449a36832c7de8ac40413b ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- e35090a1de60a5842eb1def9e006a76b6d2be41e ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 06c0c4b1bff2d0f108d776ca3cdcfe2ed5e2ba02 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- c8493379f202e3471c382be92fb1d8d458935a3b ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 35c6691a626b1b7bddb2fac9327f4466d57aa3e5 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7adfd67098a0ad99087ce4b4804c13d0ceff309c ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- d44f7bda0c4653810b449a36832c7de8ac40413b ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- e35090a1de60a5842eb1def9e006a76b6d2be41e ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 2a7f7345373d126ab2cd6d7dc2e6acd36488a87d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 04de351f49d44be309665bb5c593cc431eb2dfba ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 593bb90a269f19a49fc0cff64079741e7c38a052 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- eb3920f5a771bb12bbc1c8868ee25fa6746d50bb ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 057530a68c6ae15065403cc399dd9c5ef90a0b1e ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 093fdf0eebff8effdf774b3919a11ca70bd88cbc ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 79c2dd8ccbcebd691eb572cf2504c0d9b2448963 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 98a3f5a1f904d7cb62b00573dc16fec8bbf299af ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6aa5e0ac7c8e94441e36a283fbc792ce331984ac ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- cef0c7bad7c700741c89ade5a6a063fbcd22ef35 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 1d6eed20bc6ac8356f1ac61508567604aae768e3 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 4aee12808ee5a2ca96f1a8c273612c54a58dbfff ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 626c4df94212ac46ffd1413b544bbf50787d8b46 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 93c7d2c2ff2c5300366e7d2c7e74a1966f4ce7c6 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 98a3f5a1f904d7cb62b00573dc16fec8bbf299af ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6aa5e0ac7c8e94441e36a283fbc792ce331984ac ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- cef0c7bad7c700741c89ade5a6a063fbcd22ef35 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 1d6eed20bc6ac8356f1ac61508567604aae768e3 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 4aee12808ee5a2ca96f1a8c273612c54a58dbfff ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 626c4df94212ac46ffd1413b544bbf50787d8b46 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 93c7d2c2ff2c5300366e7d2c7e74a1966f4ce7c6 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- d7cc410b3f2fab13428969d82571105d76be97bc ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9707400209259ef4caf6972e5ea5cd1f63668aeb ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3d7ee1cef2f194e255bdf9445973bbe8500ca1f7 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- db9eb86857adb9c704ccfa29fce521d7695b9f17 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- c9e2ab599fcd33859828a822be05628085d00b12 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 626c4df94212ac46ffd1413b544bbf50787d8b46 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 93c7d2c2ff2c5300366e7d2c7e74a1966f4ce7c6 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- e5264a0d0bde9b0e40dfd632f021f6407120d076 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- df6e1d43a734e411e5c158409e26a2575775be5d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9707400209259ef4caf6972e5ea5cd1f63668aeb ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 69278812572c21d54293dbd56987cfabbee42a49 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- db9eb86857adb9c704ccfa29fce521d7695b9f17 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- c9e2ab599fcd33859828a822be05628085d00b12 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 28ebda015675a0dc8af3fbd1cb18af034290433e ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 93c7d2c2ff2c5300366e7d2c7e74a1966f4ce7c6 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- e5264a0d0bde9b0e40dfd632f021f6407120d076 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- c32d4b14c7c8ced823177d6dddae291a86e2a210 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9d866aef43909ac300c0176986519e70cbb684a7 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 291fd09ec351fb9fbaae78fd9ce95ef8399b76d3 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a29b7c0fa94dfd092f2cf3aaa4781d5fe4c7002a ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- c9e2ab599fcd33859828a822be05628085d00b12 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- f6e34dac0fd7fdbfdf1631b35103fd7aa968cf88 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- e5264a0d0bde9b0e40dfd632f021f6407120d076 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 4abac49168e53467b747cb847aed9eb8ba924dce ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6d4db21bab63d8f45e59fdac2379af57ed7e7d54 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- b22996efb211ef14421a272ba28cde7402afaedf ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 697cf27c651cd59c2338c65fd377c8363d729303 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- c50d9d2deebeec9318fb605f88d4506ab5d79f41 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 09215b1e12423b415577196887d90e9741d35672 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- df9ea039c996b519de6750d2dbf2a53fc1225472 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 67489b390a523f855facd28f0932130bd6210fa7 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 49d69d1d0433e4aa5d4a014754ba9a095002a69b ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 04de351f49d44be309665bb5c593cc431eb2dfba ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 496a5d54425d284d0fbf4e127351969052c621f2 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- eb3920f5a771bb12bbc1c8868ee25fa6746d50bb ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 79c2dd8ccbcebd691eb572cf2504c0d9b2448963 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 49d69d1d0433e4aa5d4a014754ba9a095002a69b ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 04de351f49d44be309665bb5c593cc431eb2dfba ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 496a5d54425d284d0fbf4e127351969052c621f2 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- eb3920f5a771bb12bbc1c8868ee25fa6746d50bb ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 79c2dd8ccbcebd691eb572cf2504c0d9b2448963 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 49d69d1d0433e4aa5d4a014754ba9a095002a69b ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 00fa9a35eb814f2cfc6daa3d23400a5d9576088e ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 496a5d54425d284d0fbf4e127351969052c621f2 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9b5567b95d30a566564067470676c39194620a99 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- aca638438cfd79210a9e0dae656b5aa3fa1b75ed ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 2317d6a9aae471ed6a2a7f43ff676b949331661d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 00fa9a35eb814f2cfc6daa3d23400a5d9576088e ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 360114c20d88166e40e47a49d2ffc870c6b9d1b0 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9b5567b95d30a566564067470676c39194620a99 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- d45875739cc36ec752e5d1264b97af9e09e3de0e ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- aca638438cfd79210a9e0dae656b5aa3fa1b75ed ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 2317d6a9aae471ed6a2a7f43ff676b949331661d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 00fa9a35eb814f2cfc6daa3d23400a5d9576088e ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 360114c20d88166e40e47a49d2ffc870c6b9d1b0 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9b5567b95d30a566564067470676c39194620a99 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- d45875739cc36ec752e5d1264b97af9e09e3de0e ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- aca638438cfd79210a9e0dae656b5aa3fa1b75ed ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 2317d6a9aae471ed6a2a7f43ff676b949331661d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 975db6de6685819b11cd2c1c2dad102fd11a1cf6 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 360114c20d88166e40e47a49d2ffc870c6b9d1b0 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 45365655583f3aa4d0aa2105467182363683089c ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- d45875739cc36ec752e5d1264b97af9e09e3de0e ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 2f43e82fda2d5a1f4e50497e254eeb956e0b2ce9 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 583a5079970a403d536e2093e093fefb563578af ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- ecac13c8749531840b026477b7e544af822daff6 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 669a8f62cb75410207229f08f3fa8db519161f51 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3d33d7e33eb75370c1f696e9da8ce6e00af13c74 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- fa3337c91573b28c2f98fe6dfa987ce158921605 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 71c2c9831cfd4f535462bb640fcca662cb322d8e ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 71af941b2e981c4e014cbeab49af2bd559170707 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9319639a5d46e51192debb8eaa8f47f9b406ade0 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- f84e8c65d9ff3359659f357e56f09c5d6d7eb469 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- e92293e422e1be0039e831a104dd908ecdd5ce8a ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- fdfb79282f991edafd39266a0800ec70969c14ba ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 989dd4fe5ce7aca2f66b48e97790104333203599 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 954c889b8197d3d7e3bbf6812942967539d780f9 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 71c2c9831cfd4f535462bb640fcca662cb322d8e ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 71af941b2e981c4e014cbeab49af2bd559170707 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9319639a5d46e51192debb8eaa8f47f9b406ade0 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- f84e8c65d9ff3359659f357e56f09c5d6d7eb469 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- e92293e422e1be0039e831a104dd908ecdd5ce8a ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- fdfb79282f991edafd39266a0800ec70969c14ba ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 989dd4fe5ce7aca2f66b48e97790104333203599 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 954c889b8197d3d7e3bbf6812942967539d780f9 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- d74ea7a48497691adaa59f53f85f734b7c6f9fd7 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9bacebf9147aa0cdc22b954aeddeffe0f4b87c69 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9df1f6166bff415022d2d73ba99a0fb797b2644a ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 286271f9add31f25ccfbb425b459ce46a78905de ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- e92293e422e1be0039e831a104dd908ecdd5ce8a ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- aff595f1d6233c85c127d2c0df1594dfe63f604d ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 29ba463b52497804f8dc90e345f153d7d32a1291 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- d74ea7a48497691adaa59f53f85f734b7c6f9fd7 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9bacebf9147aa0cdc22b954aeddeffe0f4b87c69 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9df1f6166bff415022d2d73ba99a0fb797b2644a ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 286271f9add31f25ccfbb425b459ce46a78905de ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- e92293e422e1be0039e831a104dd908ecdd5ce8a ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- aff595f1d6233c85c127d2c0df1594dfe63f604d ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 29ba463b52497804f8dc90e345f153d7d32a1291 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- f9a6d45a3284701708dfd5245ac19167f51e166f ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a7cd7a1f0d9d0376018792491aac64705d498b3e ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 8ad4b2db6c1edf739374b48665411550c7dd341a ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- db89bfe8694068b0b828f5dba11082a916ea57a6 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 18e36c003246c2051d0453233de1f31e89152a31 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 55f73f66fd7c87edd73c69a585ad2d39dc017362 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 13846555356af4891a26d9e0cf2270e22c3ed5e7 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- bf9e838b7f618a89013cc6eec3516b0f526011da ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 099eb85c9cfda1d214896fec3bb5db48b9871bea ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- ad90f84b0b6ffa265da7b002fea18ad852cc5872 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 1e7c654f5d96e96aee8f733e01f9b85af6a31127 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 18e36c003246c2051d0453233de1f31e89152a31 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- aaa7cecc818a07fe53dc0fa77f35a3b7a28a14d4 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 4a5ee8ac9eec188a9580ec4b1d81b601f11a82a8 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 324d549540c79db396afbfc3f27c4fbc9daff836 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 099eb85c9cfda1d214896fec3bb5db48b9871bea ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 1aa990b63d6c78a155e5ff813129ca2b0e9b374e ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 1e7c654f5d96e96aee8f733e01f9b85af6a31127 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 18e36c003246c2051d0453233de1f31e89152a31 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- ef440cd1c7e802c347d529ca1545003f7b14d302 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 4a5ee8ac9eec188a9580ec4b1d81b601f11a82a8 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 383f1332c13f9e82edb6a52280c4c19f2836b1c2 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 71c8e8904eaa9506b1e4d163465534143b142ed9 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 2bdb647caf34078277eb93af138e93c74da5f917 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 6f4dce637c8b7e29f162bf69f91c42f8300c29d0 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 93a2b70f15af712b32f5ec0390756d2f99680c06 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- aff595f1d6233c85c127d2c0df1594dfe63f604d ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 29ba463b52497804f8dc90e345f153d7d32a1291 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 383f1332c13f9e82edb6a52280c4c19f2836b1c2 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 71c8e8904eaa9506b1e4d163465534143b142ed9 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 2bdb647caf34078277eb93af138e93c74da5f917 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 6f4dce637c8b7e29f162bf69f91c42f8300c29d0 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 93a2b70f15af712b32f5ec0390756d2f99680c06 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- aff595f1d6233c85c127d2c0df1594dfe63f604d ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 29ba463b52497804f8dc90e345f153d7d32a1291 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 2a8489019cdd3574ea87c31a5ec83ca0fa3b0023 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- f8062d01dc23bab6a0cc6dc868f3a3fb91876b25 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9b8f8c59e31b12ea5bbe84ffc4cb204d5e799dc6 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 270a77486489810256f862889d3feb2704d40ea7 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 93a2b70f15af712b32f5ec0390756d2f99680c06 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 8cfc2cadea0542969e7304e173338fe4a08957a3 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 036ae1e942671feb0509778a993e2e4b6b3e5abe ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- e7a00a07ba7b653c42ad4e9c5979898fd9525eed ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- dc2e623daf921e4973ded524e7e7183e3f2f14e4 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 6b59af9dde79485cd568c4cb254de7f5ac03bf5e ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- f6c7e5ae379943e7832673ad68d45e6fb1d50198 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 93a2b70f15af712b32f5ec0390756d2f99680c06 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 86057d8bce7cfb413992e5cd953addee9f35fe2b ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3c32387841a4bfaea75e9f38148b25577902879a ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a5dc6eacfb36d70db3112453463ded8874b871fe ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- dc2e623daf921e4973ded524e7e7183e3f2f14e4 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 06727d08d1c154f7d7c6e33fced1fba602b96ee9 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- f6c7e5ae379943e7832673ad68d45e6fb1d50198 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 86057d8bce7cfb413992e5cd953addee9f35fe2b ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 59d3af1e2f7e0dbfbd5f386b748d9d54573dafc2 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3c32387841a4bfaea75e9f38148b25577902879a ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 554bde9938f7e8ebf16ad4c1d37e00f453616a0f ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 1681b00a289967f2b2868f51cff369c3eb2bf46b ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6a7db6164e74b0de064180d8bdae2b94b562c621 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- bf6f8228b7409d51d8c4c3fc90373331ec115ec3 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 86057d8bce7cfb413992e5cd953addee9f35fe2b ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 630fa1fc2dffc07feb92cf44c3d70d6b6eb63566 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3c32387841a4bfaea75e9f38148b25577902879a ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6b62c958d3a6f36ef7b15deeec9d001a09506125 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 96d4d37f7f971bf62c040e3f45a6eeb5b31cd325 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- b4fca61a55a1a9fb51719843ab61cb4d1d0a246d ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 6ce26d0304815d1ac8f2d161788a401017e184af ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- f0e4ead660491ba0935378e87b713d8c346993ba ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 86057d8bce7cfb413992e5cd953addee9f35fe2b ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 1ed3396dc2d2e12b96b872f1c268f967b06409ca ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- c7a4c01b77a161980d1f413119121a6c20ea2c37 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- d66764b3ef06230d2e7f6d140e498410a41abf0a ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a35f90375c790260f94ea6cb1cda25b5f002e456 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- b4fca61a55a1a9fb51719843ab61cb4d1d0a246d ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- b03a21c919171b06c6291cdf68a14a908d1c7696 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- f0e4ead660491ba0935378e87b713d8c346993ba ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 0e52fab765a18d46dfc1e35228731a6c539afec7 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 86e893efc62c03ea4cbecc030a64dde708e81f49 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- c7a4c01b77a161980d1f413119121a6c20ea2c37 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- d66764b3ef06230d2e7f6d140e498410a41abf0a ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9d1a8ce05cd7de2b29fb8eebd21e3829ba0a4069 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 5f580eb86e2c749335eb257834939ea1440c549a ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- fad5c147d8a1a19e1ae5bfe0609c618f2c0a254d ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 58138bbddb2927a4738ef3db7286fab0a8f23531 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 18e36c003246c2051d0453233de1f31e89152a31 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 0e52fab765a18d46dfc1e35228731a6c539afec7 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 870dbc732c60c7180119ef3fa950fa1cfa64e27f ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- aa1151b2e9d294c53e4549d2be240d33bee830d5 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9d588990b9d6dfd93cec444517e28b2c2f37f2af ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 4b22448cea783186ecbe1a62d4a7f2bd46c8abe0 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 0e52fab765a18d46dfc1e35228731a6c539afec7 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5449c4376d0b1217cb9a93042b51aa05791acfe2 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5f580eb86e2c749335eb257834939ea1440c549a ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- efdd3d41e1f7209e7cfccaa69586fdaa212a2a04 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 58138bbddb2927a4738ef3db7286fab0a8f23531 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- d30d1250fa40d6b9b3aedc5ab3be820355a95b72 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 8f5d4dca346e8ef2843169537d57b7b3c12eb78e ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 5449c4376d0b1217cb9a93042b51aa05791acfe2 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- aa1151b2e9d294c53e4549d2be240d33bee830d5 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- efdd3d41e1f7209e7cfccaa69586fdaa212a2a04 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 4b22448cea783186ecbe1a62d4a7f2bd46c8abe0 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- d30d1250fa40d6b9b3aedc5ab3be820355a95b72 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 8f5d4dca346e8ef2843169537d57b7b3c12eb78e ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 627a9935c5a7baa31fd48ec4146f2fe5db44539c ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- aa1151b2e9d294c53e4549d2be240d33bee830d5 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 564131dc8a540b7aa9abc9b6924fed237b39f9a2 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 4b22448cea783186ecbe1a62d4a7f2bd46c8abe0 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 8f5d4dca346e8ef2843169537d57b7b3c12eb78e ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- fe3469174e4e87a1366e8cc4ca5a451b68b525af ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3c08157c10d77f1a1cd779b6d50673c739d9b6ef ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 1efd57bbcc1ca6fdb96ac5cfc779cc3ef27fe1cb ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 110ae5310fe5c791cbfed35dad02493913a3ba21 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- edaeee836a137ccbd995c74b93d56cb048e50cdc ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- e720856b4b81854f678b87d6fd20cee47d9b6b23 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 4bdc4bc748c2c5f5cce03a727cabaee20e373190 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- aa1151b2e9d294c53e4549d2be240d33bee830d5 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 0b275eb563418cdcdce2a3d483a13803c85d7a06 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 4b22448cea783186ecbe1a62d4a7f2bd46c8abe0 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 682b76521d5f74c02d711b43edabb2801e71d657 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 4bdc4bc748c2c5f5cce03a727cabaee20e373190 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3c08157c10d77f1a1cd779b6d50673c739d9b6ef ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 0b275eb563418cdcdce2a3d483a13803c85d7a06 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 110ae5310fe5c791cbfed35dad02493913a3ba21 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 682b76521d5f74c02d711b43edabb2801e71d657 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- e720856b4b81854f678b87d6fd20cee47d9b6b23 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- d238defeab2d93e835ce30358571d772a4b8e1f4 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3c08157c10d77f1a1cd779b6d50673c739d9b6ef ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- fdd41f5536c40a79a715a27c413087cf1b04abec ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 110ae5310fe5c791cbfed35dad02493913a3ba21 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 1ceb7449e54b5276c5cc6a8103997c906012c615 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- e720856b4b81854f678b87d6fd20cee47d9b6b23 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- bb7fb53ea164d6953b47dededd02aad970bcbd71 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 97db5d0b2080150a26f7849f22ff6cbedc7e76dc ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6bcb5cf470ee673fdb7a61ebf0778d2a2baf1ee1 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 0940aa6cb561f7b69342895842c62ad73ed43164 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 1ceb7449e54b5276c5cc6a8103997c906012c615 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- d649bb1b92a17e0f9ec4ff673dc503003c5d5458 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- ea3032c18ae6963b94a080eb91c50fe6592b0e5d ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 5700780944c01b4cd30f96a325c1602553aaa19e ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 97db5d0b2080150a26f7849f22ff6cbedc7e76dc ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- b31b5a335457d1fc781f67f2cc12bf068ad41b58 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 0940aa6cb561f7b69342895842c62ad73ed43164 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- d649bb1b92a17e0f9ec4ff673dc503003c5d5458 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- ea3032c18ae6963b94a080eb91c50fe6592b0e5d ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- f7f7ff067e3d19e2c6a985a6f0ec6094e7677ae2 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 97db5d0b2080150a26f7849f22ff6cbedc7e76dc ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 0ed54e915a0e618e81cb2d29c1b29ad554cb33ee ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 0940aa6cb561f7b69342895842c62ad73ed43164 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- d649bb1b92a17e0f9ec4ff673dc503003c5d5458 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- ea3032c18ae6963b94a080eb91c50fe6592b0e5d ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- f7f7ff067e3d19e2c6a985a6f0ec6094e7677ae2 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 70a3445f8dcb37eee836e7b98edc2f4bb7470c7d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 0ed54e915a0e618e81cb2d29c1b29ad554cb33ee ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- ee55b93baa792a3ce77dc5147ae08c27a313ec9d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- ea3032c18ae6963b94a080eb91c50fe6592b0e5d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- fdeb8762014829f1da8c80d944ae71a04d77a917 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 466b3ff3a9d415e0085f39b919e7dd2172f3c795 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6359bb348244fe59d7d9b2b667ec229b7851c0f9 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- e541a71175bf9014e67ac61c92fa59b1b504d5db ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 68afdbd892ca1780c3d6d61040f2a0ecbfe337af ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 21b43a88fac030def3edbaaf824b5e6befdfd54f ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- fdeb8762014829f1da8c80d944ae71a04d77a917 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 466b3ff3a9d415e0085f39b919e7dd2172f3c795 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6359bb348244fe59d7d9b2b667ec229b7851c0f9 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- e541a71175bf9014e67ac61c92fa59b1b504d5db ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 68afdbd892ca1780c3d6d61040f2a0ecbfe337af ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 21b43a88fac030def3edbaaf824b5e6befdfd54f ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- fdeb8762014829f1da8c80d944ae71a04d77a917 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 466b3ff3a9d415e0085f39b919e7dd2172f3c795 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6359bb348244fe59d7d9b2b667ec229b7851c0f9 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- e541a71175bf9014e67ac61c92fa59b1b504d5db ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 68afdbd892ca1780c3d6d61040f2a0ecbfe337af ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 21b43a88fac030def3edbaaf824b5e6befdfd54f ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a4d21eec9c190d7f47ec4f71985b25f9b8bd3a49 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- fdeb8762014829f1da8c80d944ae71a04d77a917 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 466b3ff3a9d415e0085f39b919e7dd2172f3c795 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6359bb348244fe59d7d9b2b667ec229b7851c0f9 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- e541a71175bf9014e67ac61c92fa59b1b504d5db ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 68afdbd892ca1780c3d6d61040f2a0ecbfe337af ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 21b43a88fac030def3edbaaf824b5e6befdfd54f ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a4d21eec9c190d7f47ec4f71985b25f9b8bd3a49 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- ded718b90e4d35b45a277a8fddb95766574e3d8c ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3e5be8fda2b346cdd68bba3a8f2051cfe3d1b17f ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 824dca1d2aa2b706f1d5b9c4c3ffdac2b25bcc91 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- e3436bb72a40e0b1fab9a8e92f5c6fc1887c83cd ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 2f84ca8dd19f99c9fbb646a2b38be90092b22889 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a6e8f6cc4d71de6eeb71b0f57cf66408c10eb917 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 250fcc6d3621ffff170115288c9199cc21224af4 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- b7f44ff0f04fd1de099be7e1c5250b4ac3bc8a14 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- ac807dc258a2d84c0c445ba8b0d7896a0bf29843 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- cc732032037f089beb33ee2b44a398772ddc12b8 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6d32b2d37b4adbc600d7c3a43589399f6d0395cb ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 46c5d00c1acc5d703dbd9ae5337a0680728d7d9e ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6626ec65e6e2e5eb94857daabfa0ae0c3f25b1ac ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 2c7fdd58572c6f20d92075f419bb03d059e8d3e4 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a4d21eec9c190d7f47ec4f71985b25f9b8bd3a49 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- ded718b90e4d35b45a277a8fddb95766574e3d8c ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 401b81ca564f05af28093c1cc34bbc0880d1ed80 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 824dca1d2aa2b706f1d5b9c4c3ffdac2b25bcc91 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- c1b6dd1507d45d3c4fb57348c9dc2f78d155424b ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 2f84ca8dd19f99c9fbb646a2b38be90092b22889 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a6e8f6cc4d71de6eeb71b0f57cf66408c10eb917 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 250fcc6d3621ffff170115288c9199cc21224af4 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 97d2bbde1039ec6a1032939a463c2e50c8371b85 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- b7f44ff0f04fd1de099be7e1c5250b4ac3bc8a14 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- ac807dc258a2d84c0c445ba8b0d7896a0bf29843 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- cc732032037f089beb33ee2b44a398772ddc12b8 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6d32b2d37b4adbc600d7c3a43589399f6d0395cb ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 46c5d00c1acc5d703dbd9ae5337a0680728d7d9e ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6626ec65e6e2e5eb94857daabfa0ae0c3f25b1ac ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 2c7fdd58572c6f20d92075f419bb03d059e8d3e4 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3c3363479df9554a2146ca19851844b0e5b3ce3b ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- ded718b90e4d35b45a277a8fddb95766574e3d8c ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 401b81ca564f05af28093c1cc34bbc0880d1ed80 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 824dca1d2aa2b706f1d5b9c4c3ffdac2b25bcc91 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- c1b6dd1507d45d3c4fb57348c9dc2f78d155424b ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 2f84ca8dd19f99c9fbb646a2b38be90092b22889 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- a6e8f6cc4d71de6eeb71b0f57cf66408c10eb917 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 250fcc6d3621ffff170115288c9199cc21224af4 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 97d2bbde1039ec6a1032939a463c2e50c8371b85 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- b7f44ff0f04fd1de099be7e1c5250b4ac3bc8a14 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- ac807dc258a2d84c0c445ba8b0d7896a0bf29843 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- cc732032037f089beb33ee2b44a398772ddc12b8 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6d32b2d37b4adbc600d7c3a43589399f6d0395cb ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 46c5d00c1acc5d703dbd9ae5337a0680728d7d9e ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6626ec65e6e2e5eb94857daabfa0ae0c3f25b1ac ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 2c7fdd58572c6f20d92075f419bb03d059e8d3e4 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- ded718b90e4d35b45a277a8fddb95766574e3d8c ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 401b81ca564f05af28093c1cc34bbc0880d1ed80 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 824dca1d2aa2b706f1d5b9c4c3ffdac2b25bcc91 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- c1b6dd1507d45d3c4fb57348c9dc2f78d155424b ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 2f84ca8dd19f99c9fbb646a2b38be90092b22889 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- a6e8f6cc4d71de6eeb71b0f57cf66408c10eb917 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 250fcc6d3621ffff170115288c9199cc21224af4 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 97d2bbde1039ec6a1032939a463c2e50c8371b85 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- b7f44ff0f04fd1de099be7e1c5250b4ac3bc8a14 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- ac807dc258a2d84c0c445ba8b0d7896a0bf29843 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- cc732032037f089beb33ee2b44a398772ddc12b8 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6d32b2d37b4adbc600d7c3a43589399f6d0395cb ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 46c5d00c1acc5d703dbd9ae5337a0680728d7d9e ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6626ec65e6e2e5eb94857daabfa0ae0c3f25b1ac ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 2c7fdd58572c6f20d92075f419bb03d059e8d3e4 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- b54809b407ecedd08dde421a78a73687b2762237 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e4b4203719a8f9a82890927812271fdbda4698ee ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 4fa22fd9d30a4b766eaa7b4a40465bf87da79397 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- f1a5a8ee011d264d566affff33f80b0f07f025ae ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 76f6410f61cb71ad18d31e3b2df7bee44e2f69e3 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 656e783cfac1feab3e56ce960de02c9f2545e3e7 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 2f698b973ee706997ed07d69bd36063fba73500b ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 51fe298b120a1bd9b9a6d0e56db0d7fc5f52dd5d ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 4fa22fd9d30a4b766eaa7b4a40465bf87da79397 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- f1a5a8ee011d264d566affff33f80b0f07f025ae ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 0fb6828cf5d24535b1b69a542367fac2e540bb36 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 656e783cfac1feab3e56ce960de02c9f2545e3e7 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 2b7e69db9a000b2ee84ebec1aace4363e3b5512f ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- fe21faac40f1278f22b9a0fc333fc56aaa7f4c38 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 4cadeeb3b018c6fac6961e58364aded930cd27cc ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7621c67b275565d08300c5e7e43d6c60052b8b7d ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- d0464862795017bd3aebd842065dd0ac9ad6d482 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 422adcad8a2cc3c4ce043a8d6b2c081c40e3b298 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 4cadeeb3b018c6fac6961e58364aded930cd27cc ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f51c267f61b1d55db68a9de47bbbf1b08b350097 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 34656fe34b1d597be9010a282d0a1a17059d3604 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9c8b4010a0808c8de1bbdc10ef6fc2fb6b574bf6 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f51c267f61b1d55db68a9de47bbbf1b08b350097 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 34656fe34b1d597be9010a282d0a1a17059d3604 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9c8b4010a0808c8de1bbdc10ef6fc2fb6b574bf6 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 601b829cd650f7c872771c1072485a089fcf09f6 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 8beaead631d0cd4a35945327602597167fca2771 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- a5b12156418f2305575e4941efeb44a9dd56150f ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- db3b17077426492987971e570ba016c4d830123d ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 029fcbc90e100c49d4534b9a15609c2d6d930186 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- aa1522452fc5e3653c4f5016fdaeea95f53f697e ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 8beaead631d0cd4a35945327602597167fca2771 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 56efd82d4136362b9a530613c73b0693ea239c83 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- db3b17077426492987971e570ba016c4d830123d ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 601b829cd650f7c872771c1072485a089fcf09f6 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- a5b12156418f2305575e4941efeb44a9dd56150f ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 029fcbc90e100c49d4534b9a15609c2d6d930186 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- aa1522452fc5e3653c4f5016fdaeea95f53f697e ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 56efd82d4136362b9a530613c73b0693ea239c83 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 8b7c88e3caa63e70919eef247ed0233d83780c41 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 2b016cf4359d6cf036cf15dc90d04433676d728f ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 029fcbc90e100c49d4534b9a15609c2d6d930186 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 0edb1949002ba2127139b618e4a7632a1fd89b62 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 4abf9c798b3f9c31a73a3ae14976e72459f8ff5b ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- bd8da4caef5a016424c089b8baa43e43697e61b3 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- bdd8f0eb9c569dec8d621b3f098be4ad15df6f39 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- da2f93a8d261595748a0782ed1e60d0fe8864703 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 1a764ed3c130268dc1a88dae3e12b3c95160a18b ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- f6f45f74da02782a90d8621ad1c4862212f9dc63 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 53bc982e3f58e53d72243fb345898bbe2eb9b1e7 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 8a3de181c809084d40b4d306ed19ae3b902c8537 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 8f61a3c3fb9a32ffc34fe61d46798db3165a680c ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 6204fb368d8f7dd75047aa537755732217f8764d ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 1eed1f84ed1c140f360e998755d0b897507366b2 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 2f3601b33ae990737b098770dbf5c2f08cab7c6c ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 8c838182b03cb555a3518f42d268f556b5a92758 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- b4bc4a754af30be3dd0e18372eb1ff58cd3e22d1 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 88c0ba44f8ec296b222a56cba1acc9eac70c9ace ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- d3a7e36be2c372a497d46433e0ddf93c9581289a ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 8b519c1caab06d85897b107029bd7b5895406399 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 23b1b6f6ed86a2a67b28df2e6c66ea781081f26e ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 38c034db41d6582cf9e56ab5a694a960e26778e9 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 55e81e78e51f31478deb94cdbc50cdc8f579e2f6 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 8b519c1caab06d85897b107029bd7b5895406399 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- ba03709e6dda785ff3181f314cf27b3f0fa7ad11 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e65068295023a4bc3d536ad285181aa481a43692 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 55e81e78e51f31478deb94cdbc50cdc8f579e2f6 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 72291dc951a30e6791f96041cae7e28c7c07fd76 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 2f3601b33ae990737b098770dbf5c2f08cab7c6c ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 8c838182b03cb555a3518f42d268f556b5a92758 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- bcd25136fa341b9f022a73a8492a912071c8e9fc ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 79439f01f43d09132f3bfb3a734c2ad6a6a04c2e ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- f531617d495425dda54c611263ace4771007b252 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- c21e4cc5c022837d2de1af233e783e1c8ab6373e ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 95cd33173456304e1ab31a8cbfb1a6192b37d784 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 951c18d9aa9c0a750244d73bb849c997939d3c7c ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 4ba4515b1639bc4edc2948f61119206f8e3c8b2a ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- d6d0d1b6c823d758cba70d3acfe1b4b69b1a8cf0 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 951c18d9aa9c0a750244d73bb849c997939d3c7c ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e172acef0dd80f57bd1454640b72b8cc0f270231 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- cf12c9183c5f7aaa1917b8b02197075dabb425c8 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- fe591ddb7fd5313dca0e9a41b8da9ee9d5b61f69 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 45c5b60544fa5b50a84116ec2664924ad0fc4334 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- bfb455469ad96be91ca1fca2c607f33ef4903879 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 16967eb5debcad7cf861e1ea6ba0cddd75f2ddc1 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 85d72353395d3f77d03618f68beaed15aa16d5af ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- b8fa734a0bfd21e14b82f576350f0c07592b7ec2 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- f0a3c2dd52640c7bcbd534ab36de60d8d729c927 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 45c5b60544fa5b50a84116ec2664924ad0fc4334 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 6a12adf9f736dde91ea0cf230d0ecc6c2a915c26 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 16967eb5debcad7cf861e1ea6ba0cddd75f2ddc1 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 85d72353395d3f77d03618f68beaed15aa16d5af ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 51ff8326ef50dcc34674f9eba78486413c72e50f ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- b8fa734a0bfd21e14b82f576350f0c07592b7ec2 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 1a8ffc679e9b9b9488c11569854b8de752f3beca ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 3368d19c227a7a950c05d83be72ef171fe255eef ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- f6bc58055ec59c3208c90066a3bd23eb6fa22592 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 20791b624615f5a291e6a4de62b957f770054180 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 82644b6d11bbc4ac6065e615d9b7665733452cfd ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 754d76863d0b575b8a8b2782df19cc334c85f523 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 3368d19c227a7a950c05d83be72ef171fe255eef ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 626c9b73b6b1148f639fb9589a2091d1cca5aa8b ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 20791b624615f5a291e6a4de62b957f770054180 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 82644b6d11bbc4ac6065e615d9b7665733452cfd ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 754d76863d0b575b8a8b2782df19cc334c85f523 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 626c9b73b6b1148f639fb9589a2091d1cca5aa8b ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- babc9c65b1132a92efc993d012d2850ad8e0e1b3 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 8e517bde7e0a68edd13ce908c53f8897b7843938 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 8c996070e1434b525658b34fc3c22719d9f23cbe ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- babc9c65b1132a92efc993d012d2850ad8e0e1b3 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 8e517bde7e0a68edd13ce908c53f8897b7843938 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 8c996070e1434b525658b34fc3c22719d9f23cbe ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- c5a7d3312a1e36417ba907266f3cc33831460f15 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 70966d599c7ff569ec9df61091641ed5dd197e88 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 7fbaa5566d1e0d4e882fbce3caedbb6439ff7a62 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 45c5b60544fa5b50a84116ec2664924ad0fc4334 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 2dba841d6008476ffad7d666f3f7d7af1cf07152 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 16967eb5debcad7cf861e1ea6ba0cddd75f2ddc1 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 85d72353395d3f77d03618f68beaed15aa16d5af ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- b8fa734a0bfd21e14b82f576350f0c07592b7ec2 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 7fbaa5566d1e0d4e882fbce3caedbb6439ff7a62 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 2dba841d6008476ffad7d666f3f7d7af1cf07152 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 85d72353395d3f77d03618f68beaed15aa16d5af ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- d5463dfca9f0c211bb74e90628165981c450a523 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- c989ee89ef3fb3e54fa52ff268d4b27e0b98c0e0 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 8b302b7ff6d91f2e70e090af93c42b24cc91645b ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 62863471849f9f5abc13ccedc2bb5ad3a26ec505 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- f714fa793ab2930caa67617438b842461faa4edc ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- d11bd6618852a67120ef123158ea512e9551f8f9 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 8e8eb8483a8e701ddc37d7e93489a47294c1f9b9 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 7eb9c80af9b372bbbc1bde28486044b0ed60cf72 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 2b2464b0605bbcd4448ab7777c21dd7c7115b956 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 14dde4ff2f969828d9f394056805216e4e1c5ceb ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 62863471849f9f5abc13ccedc2bb5ad3a26ec505 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 9364380c40de1dc770b0238588acbe68797a9ee6 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- f714fa793ab2930caa67617438b842461faa4edc ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- d11bd6618852a67120ef123158ea512e9551f8f9 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 14dde4ff2f969828d9f394056805216e4e1c5ceb ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 8e8eb8483a8e701ddc37d7e93489a47294c1f9b9 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 9364380c40de1dc770b0238588acbe68797a9ee6 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 7eb9c80af9b372bbbc1bde28486044b0ed60cf72 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 2b2464b0605bbcd4448ab7777c21dd7c7115b956 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- d5c786436ef51e0959515cfc9401a2674b5b1fa7 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 8e8eb8483a8e701ddc37d7e93489a47294c1f9b9 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 2bada62a31515dc5bb8dffa1d57e260cbe6e6cd8 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 7eb9c80af9b372bbbc1bde28486044b0ed60cf72 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 80ef6a78023cd2b39f1ef93f5643347c448f0957 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 2b2464b0605bbcd4448ab7777c21dd7c7115b956 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- d5c786436ef51e0959515cfc9401a2674b5b1fa7 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- d3596706c137e5fa769c7bd4c341ced63406d642 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 2bada62a31515dc5bb8dffa1d57e260cbe6e6cd8 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- c77cb49fc61e7d74b80dd7efe1c32fe4faa581d5 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 80ef6a78023cd2b39f1ef93f5643347c448f0957 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- d0f3b72e6828b73bf40bf07dc7a9ce59dcc945a1 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 8e8eb8483a8e701ddc37d7e93489a47294c1f9b9 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 7eb9c80af9b372bbbc1bde28486044b0ed60cf72 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 2b2464b0605bbcd4448ab7777c21dd7c7115b956 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 14dde4ff2f969828d9f394056805216e4e1c5ceb ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- d3596706c137e5fa769c7bd4c341ced63406d642 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 9364380c40de1dc770b0238588acbe68797a9ee6 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- c77cb49fc61e7d74b80dd7efe1c32fe4faa581d5 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- d0f3b72e6828b73bf40bf07dc7a9ce59dcc945a1 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 6a3552c278342618fa90be0685b663e72c7c0334 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- d3596706c137e5fa769c7bd4c341ced63406d642 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 2dfe330e4c2de91e01b27f77b0b659d4d11d3471 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- c77cb49fc61e7d74b80dd7efe1c32fe4faa581d5 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- d0f3b72e6828b73bf40bf07dc7a9ce59dcc945a1 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- d3596706c137e5fa769c7bd4c341ced63406d642 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- c77cb49fc61e7d74b80dd7efe1c32fe4faa581d5 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- d0f3b72e6828b73bf40bf07dc7a9ce59dcc945a1 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 88bf7cdb0ce43b7c1e895840d92e0c737c2e4478 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 8fd73e1acc11d0e9a8b3cb35f756003d9ff1b191 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 3bf7e3628e58645e70b9e1d16c54d56131f117f3 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 94ee7c24814f475a659e39777034703d01bfbe0c ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- ab650abf1b5aa8641a8e78ffdddf324813ee7b33 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e358d01becd615b498d44e21b6bc994c5632335d ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- d2882218789ba9a993e72249fb476d4399dc5373 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 7689175546ed52f32ea74fb77d6ab708d2a888d2 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e358d01becd615b498d44e21b6bc994c5632335d ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 3f7196bef85feb6764dadb6473ec9659251f408d ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- d2882218789ba9a993e72249fb476d4399dc5373 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 7689175546ed52f32ea74fb77d6ab708d2a888d2 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e358d01becd615b498d44e21b6bc994c5632335d ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 3f7196bef85feb6764dadb6473ec9659251f408d ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- d4bd4875c7d9de14671f5098b689c0a1c55eab88 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- d2882218789ba9a993e72249fb476d4399dc5373 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 7689175546ed52f32ea74fb77d6ab708d2a888d2 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e358d01becd615b498d44e21b6bc994c5632335d ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 3f7196bef85feb6764dadb6473ec9659251f408d ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- ff6baab4b76630bf39283f34631c24f471f938cb ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- b5bd3992ece3fb6654839a0582816d71640a4fea ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c8def9e035fdd8661e80fd4db4aa808b0af5cfc2 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 659344343b90a4900f60e48aefa6b50f67657197 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 759c9127e0c8515dc0fe7a518b4624f4da083a3a ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 9a50e7137441d96eb414ac1122beb788b71c7988 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- b6eee00a5ead15223afc6e2d3a34069b9e98e73d ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ff6baab4b76630bf39283f34631c24f471f938cb ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 1d389e5dd0afe975d225220257fad55a97dbf04b ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c8def9e035fdd8661e80fd4db4aa808b0af5cfc2 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 4c76b70273ad8331e7c017b311d4198b6c6dfb13 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 759c9127e0c8515dc0fe7a518b4624f4da083a3a ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- b6eee00a5ead15223afc6e2d3a34069b9e98e73d ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ff6baab4b76630bf39283f34631c24f471f938cb ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 1d389e5dd0afe975d225220257fad55a97dbf04b ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c8def9e035fdd8661e80fd4db4aa808b0af5cfc2 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 4c76b70273ad8331e7c017b311d4198b6c6dfb13 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 759c9127e0c8515dc0fe7a518b4624f4da083a3a ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- b6eee00a5ead15223afc6e2d3a34069b9e98e73d ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 4273d376b6ce83f186dfec2d924590abef9dd85d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 1d389e5dd0afe975d225220257fad55a97dbf04b ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 17e47aad7b111edf1e27319a9864cbbbffa54cee ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 4c76b70273ad8331e7c017b311d4198b6c6dfb13 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 436df8568715e22ebfeb51a2c96c6319e4772ea5 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- b6eee00a5ead15223afc6e2d3a34069b9e98e73d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 4273d376b6ce83f186dfec2d924590abef9dd85d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- a8cffc105889e679f36ab10bd6d4702c35efaae9 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 17e47aad7b111edf1e27319a9864cbbbffa54cee ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- f2c19765442952d9a392bcb65920586f3111cd7d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 436df8568715e22ebfeb51a2c96c6319e4772ea5 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 0d6c9a9b0349cc7f4af6bf7e9b98cc5bd6cadbdf ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- a8cffc105889e679f36ab10bd6d4702c35efaae9 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- da8df3a7daad07c9b29c0f7d9f859babc2d90d67 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- f2c19765442952d9a392bcb65920586f3111cd7d ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 436df8568715e22ebfeb51a2c96c6319e4772ea5 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 0d6c9a9b0349cc7f4af6bf7e9b98cc5bd6cadbdf ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 53f1a16dabc6b4fc334f461f3e274c9f74c0de1a ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- da8df3a7daad07c9b29c0f7d9f859babc2d90d67 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 7a312ea90e3dccc19b9799c91e8ae6d055b63ee2 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 436df8568715e22ebfeb51a2c96c6319e4772ea5 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 9984e4e0653a826cb8e94737254145af37e79a25 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9bb53c4116c008a3047b1a27bcd76f59158a4a8a ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 53f1a16dabc6b4fc334f461f3e274c9f74c0de1a ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9b27ee18c4feb0d1d21b67082900d1643b494025 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 7a312ea90e3dccc19b9799c91e8ae6d055b63ee2 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 00cdf40ef22626dc05ab982e38e29be54598a03b ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9984e4e0653a826cb8e94737254145af37e79a25 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 9bb53c4116c008a3047b1a27bcd76f59158a4a8a ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 32062b074b5ea92dea47bf088e5fdd2bbde72447 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 9b27ee18c4feb0d1d21b67082900d1643b494025 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 8b1ca780f4c756161734ce28f606249ffae0a27d ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 00cdf40ef22626dc05ab982e38e29be54598a03b ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 470669419034724cbc38527089b718bc5e2aa73b ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- fea60d692ee9c99e0d8f9d8f743a0e689052f930 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 32062b074b5ea92dea47bf088e5fdd2bbde72447 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 76503b3f607f1b2541bbf6d18aa2193d88195359 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 8b1ca780f4c756161734ce28f606249ffae0a27d ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 6d5fd1edc69477e7a1f290d49aab2613c64ccb79 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 470669419034724cbc38527089b718bc5e2aa73b ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- fea60d692ee9c99e0d8f9d8f743a0e689052f930 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 1bbe89276621e8dd9aab654e9ec17302fcc56df0 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 76503b3f607f1b2541bbf6d18aa2193d88195359 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 7936ad8c8d015ac6d95d7fd7c356a911647b6714 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 6d5fd1edc69477e7a1f290d49aab2613c64ccb79 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 63343d910e13228d3d0bbae716fdeb2e3f1a2550 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- c1e6b2b22e5b0db3f46aa709afb3452de778409b ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 1bbe89276621e8dd9aab654e9ec17302fcc56df0 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- fca89a04b8db9c412baca7299a96f7aa4ef3016e ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 7936ad8c8d015ac6d95d7fd7c356a911647b6714 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- de588b36565477ce137fe2b8ac6307d43cc304ad ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 63343d910e13228d3d0bbae716fdeb2e3f1a2550 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 9daffc64f32001c1489e0dd2b2feb54a2a06f1fc ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 1bbe89276621e8dd9aab654e9ec17302fcc56df0 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- c5339879d1f52610dde57f9f6a6f3632ebb5c611 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 7936ad8c8d015ac6d95d7fd7c356a911647b6714 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- de588b36565477ce137fe2b8ac6307d43cc304ad ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 63343d910e13228d3d0bbae716fdeb2e3f1a2550 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 9daffc64f32001c1489e0dd2b2feb54a2a06f1fc ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ec7ff6deb8c12d4a9dd59e9fb59c889c1b675224 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c5339879d1f52610dde57f9f6a6f3632ebb5c611 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c283f417dd9a9385e1255c83ec23fcb75339a812 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- de588b36565477ce137fe2b8ac6307d43cc304ad ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 8ea9b8ef0c887d88e15ffb11a5026e4decfecc97 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- fe24b3fb4e83bf58a9b3552b1ec99bc87bbd720e ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ec7ff6deb8c12d4a9dd59e9fb59c889c1b675224 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- b1b8f02aea594520a0649de15d44c1a392388f12 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- c283f417dd9a9385e1255c83ec23fcb75339a812 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 01548d4a5777938ec2bfa79d2c6c0df75eac38fa ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 8ea9b8ef0c887d88e15ffb11a5026e4decfecc97 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- fe24b3fb4e83bf58a9b3552b1ec99bc87bbd720e ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- b1b8f02aea594520a0649de15d44c1a392388f12 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 01548d4a5777938ec2bfa79d2c6c0df75eac38fa ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 2833afcc0f6c25a050f6d16d15f20598a08064f0 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 9bc6128ffd6703432c716654331edbbda0b494e1 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- c66d94618103a91abd96db3c1731ad9298b67726 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- a35e9cc5e55f1ea39e626a3fb379dea129d63c7e ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ad3e534715c275a21b7fe1df24f90c05f983a4cc ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 450f71fd6eca75f44fc6b6e3e03ee346ab3cd795 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- da38ea2c0d21746c173f0f14d7d02c5f465d4cc2 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- a0adc6ecb0ab27bef5449899a75a1e4682b8958a ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 450f71fd6eca75f44fc6b6e3e03ee346ab3cd795 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 715ffe6d88d1ab92fbd8b4e83b04e24e8f662baa ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 9aca18131c1e3ad91cd6b8e70497f116e392135d ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 87087ca749ad68f8cdfdd9ca51d1e941c98d5208 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 715ffe6d88d1ab92fbd8b4e83b04e24e8f662baa ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 9aca18131c1e3ad91cd6b8e70497f116e392135d ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 87087ca749ad68f8cdfdd9ca51d1e941c98d5208 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- da644127cbbfe06ab60b16a2b3398147b28568b6 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 654f655dc25b5d07606fe46b972fa779efc139ca ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- aad1f85d06b82ce337d8036e155fd7765f6f1b0c ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- da644127cbbfe06ab60b16a2b3398147b28568b6 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 654f655dc25b5d07606fe46b972fa779efc139ca ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- aad1f85d06b82ce337d8036e155fd7765f6f1b0c ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 27aab3bdf8e58641371d0997160df04a1f95c762 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 7c527671e5f414345e42188c783de0e1de101a62 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- eeea17544e0ab2cc74012112e7fc5169445819d6 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 932e8570316e1cd7d76be44414d2dc1515fcc0f3 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- aad1f85d06b82ce337d8036e155fd7765f6f1b0c ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3a56382a340d43f3581046347e401874f83538c1 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 72fa9416d9b88e6c39e4254f8a32c184a2bb36c6 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 2cec49545614f3eda402a2f495b105bf7dbee59b ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3a56382a340d43f3581046347e401874f83538c1 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 795e80b18c23255c4ad585f62eaa511edf884849 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 72fa9416d9b88e6c39e4254f8a32c184a2bb36c6 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- beeb9b2f13ddcf06568af177d53638eddbc5673f ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 2cec49545614f3eda402a2f495b105bf7dbee59b ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- ee1519e585cdd413f7e9725fe714a661faffa833 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 757bcacfbfc43ed4240abfc6b3b60e42b6f0fe0a ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 8711c1fbb68d70bd9686962a39b87f2b6e6eb54e ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3dc460a850cda8c48e1cfe81d885abdfb1d54fff ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 8832db585d7d81290862b66ac1baacd59ac6cd6d ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 25cd1cce114c7db946f235ac8fb33e849811129e ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 5c4264e97e16d051cac6190a44cd7888d1b5715a ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 571d0036257d1aa3f580b86698418675cc22882f ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 2251ecb251ae6cd741351dbf159de651ef7154eb ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 1a39c83aa482f5993be4719eb1b7f8aea6a9f042 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 4a39ff57eaf869f57a6bd16680f0b55970fbb2f1 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 1a39c83aa482f5993be4719eb1b7f8aea6a9f042 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 4a39ff57eaf869f57a6bd16680f0b55970fbb2f1 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 1a39c83aa482f5993be4719eb1b7f8aea6a9f042 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 4a39ff57eaf869f57a6bd16680f0b55970fbb2f1 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 187ef7c1bfde8d77268bf4382da0613984394990 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- d05e01468b105514716d41a0dba1db8b52e0276c ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 32661d4cedd9cb43d1fe963001adc391599615f3 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- dc9fa729dd8d3b938d5ec89d00b14f57083cce0c ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- c459bb431051e3d0fe8a4496b018046570179808 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 187ef7c1bfde8d77268bf4382da0613984394990 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- d05e01468b105514716d41a0dba1db8b52e0276c ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 32661d4cedd9cb43d1fe963001adc391599615f3 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- dc9fa729dd8d3b938d5ec89d00b14f57083cce0c ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- c459bb431051e3d0fe8a4496b018046570179808 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 4e217f3f0084ebf85ecbf32995aa5830105f89cc ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 772dd12a293a9925ddb7dde00f52877279637693 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 054cdb9bc9c143ba689e61b3e59fe7fa3dc8b101 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- dc9fa729dd8d3b938d5ec89d00b14f57083cce0c ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d9c6f1df8f749aa032f102f0c2dae9481d4aab66 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 4e217f3f0084ebf85ecbf32995aa5830105f89cc ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 8c84b543971e970f694d0700e43642b12bb5a649 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 772dd12a293a9925ddb7dde00f52877279637693 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- df7981c82f3d6b6523af404886cbb2d93b2ca235 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 054cdb9bc9c143ba689e61b3e59fe7fa3dc8b101 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- dc9fa729dd8d3b938d5ec89d00b14f57083cce0c ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d5971e65b6a13cafc68d5bf8c211c14dd4863cd9 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3115e9ee914951e01f285eb5eb2dad72b06e8cf2 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- abb9ad1f40f5b33d2f35462244d499484410addb ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 1928617dbe33f61ad502cb795f263e9ce4d38f24 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- cf66b9258c4a4573664e1cc394921c81b08902a1 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f169a85ed43158001a8d0727a3d2afd7f831603f ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3e415ab36161c729f03ab8d2c720a290b7310acd ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 054cdb9bc9c143ba689e61b3e59fe7fa3dc8b101 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- d5971e65b6a13cafc68d5bf8c211c14dd4863cd9 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 29841f1ee0c2d9f289bce7924cfeeb8b1b44115d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- b68b746f074b947f470d666b2c4091f7112053f4 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- fc259daa23602ca956f594ae49a9426226ffe6ca ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- ab62cbc9a6ac20ecdda2d400384ab43d8904fd23 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- d5971e65b6a13cafc68d5bf8c211c14dd4863cd9 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 29841f1ee0c2d9f289bce7924cfeeb8b1b44115d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 5568880f9cea2444c9f66200278bb251f4c9f250 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- fc259daa23602ca956f594ae49a9426226ffe6ca ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- ab62cbc9a6ac20ecdda2d400384ab43d8904fd23 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- d5971e65b6a13cafc68d5bf8c211c14dd4863cd9 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 5568880f9cea2444c9f66200278bb251f4c9f250 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 1598aca49f64c14012c070d2506f572106f31748 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- cb8e91e36890d9a5034020640dd0077979651f8a ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 44cf31f4642e7ff74dc6b83724319ad571a2b277 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 1598aca49f64c14012c070d2506f572106f31748 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- cb8e91e36890d9a5034020640dd0077979651f8a ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 44cf31f4642e7ff74dc6b83724319ad571a2b277 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 1598aca49f64c14012c070d2506f572106f31748 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- cb8e91e36890d9a5034020640dd0077979651f8a ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 44cf31f4642e7ff74dc6b83724319ad571a2b277 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 421750c5311e02798dbb8baf3c3e120004bdd978 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 6fb6240fdb19cb72b138c32d0f1051e146fef65b ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 300e33465be379c83c8ab6492db751b88a512eaf ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 54a76695c5864bdc4e9f934aa0998dbdc2b54967 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 4d7063f4fb47e081fce57ca3015be2e5f9126636 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 20f60a3d9af2a1b91586657ec3530c146ec58dc9 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- af5678110f1173ff12753f127c0dd8f265f8541d ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- c951561453e3daeec1f675a594cd6307bcd603b5 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- ee90c978d296d6f44393944b6309e11b4d839ffe ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 78810a2f78cb5abb267cee04a4ee9b2e0ef65df3 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 2d316f065241fdcd43e3d058a125a7a48e47ed39 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 082e57e560335105e26c0224addd6f738a7dbfad ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 404cea120c3e485c1be5be7d5221cc9abd05392f ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 4d7063f4fb47e081fce57ca3015be2e5f9126636 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 20f60a3d9af2a1b91586657ec3530c146ec58dc9 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 2fc7781f3f015f5f11926aa968051bdd66e4679f ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- f41429a6851ba2ad748ad3ffa01b025cb7aebdfc ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 825eba5a8f304bc8e99719d454c729477952cbd1 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- c9352a1803198241d676cf5d623b054cd99a0736 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 973f242ad1c93750a303092a0eea6bb4ab82d5eb ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- fff3c0a0da317a9fc345906563356438360074f3 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 09238c667aaaa284f9d03c17c4aea771054bd8af ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 36e35e4065817c503f545519bcb4808ce7a2bbf3 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 14a0990db542a3be29bc753cbd9a46431737d561 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 3739a704b637b7e5ad329b5f71449cafb23beb27 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e3b23b2aaa6493a78275e3c667ab931ed2c4dce9 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- c951561453e3daeec1f675a594cd6307bcd603b5 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 2989947806c923b5b7c54177318b387e72836b1e ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 78810a2f78cb5abb267cee04a4ee9b2e0ef65df3 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- b18d7ff8bfd9415e599ada95ef1aec0e9bbd2a8b ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 082e57e560335105e26c0224addd6f738a7dbfad ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 404cea120c3e485c1be5be7d5221cc9abd05392f ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 4d7063f4fb47e081fce57ca3015be2e5f9126636 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 20f60a3d9af2a1b91586657ec3530c146ec58dc9 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- f045926d19ca39952d191f72430b0e19bfde53ea ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 7091136b6fdb254e81544ad8d594a447cec7e186 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- d47c37ff49fad250a4c845a199532826870e6337 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 4c1fa7fb009aba16dc0642ca6934eddde60912a8 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- dc6f067e4d699879e21f067bfe1a909b79c004e3 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 38b2a5abf3287e16d372659260bcd8183e15c840 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 85a7c581718cff7e6a9d8ad94c9c961498730bd0 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- b095b47ed90835f8d5797c5042bc07d21b7957f1 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 15b5bbbeb61ea34f90419600648844be693f0476 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 3812f21365c03e6914426d7283da4ab26bd8209f ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 2147e4cb4d6ae7bc9bd427c0df70e23f1cd6210e ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 1fbe3e437516992f78ba9290c55ab9c8410ec574 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- ad7a3380840fe64959603faf76db7265dc8d82f7 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 28cba11a5d6f3ee8349563fe0bedfc17a309de79 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 9822d97f95f3200f2bdc7705a93549370c94a4f7 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 4c42412f8f6f8c50fe1c918fbc4d8e82e77e58be ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 082e57e560335105e26c0224addd6f738a7dbfad ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 404cea120c3e485c1be5be7d5221cc9abd05392f ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 9d2690be518742aadcd39114b7f02c01a86cc43d ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 4bc8760a994ba6bb1a2ee04b8d949fe17128c0b9 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- a9bf30dd24364a8322a6845a0664fe1b2781b391 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- f045926d19ca39952d191f72430b0e19bfde53ea ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 7091136b6fdb254e81544ad8d594a447cec7e186 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- d47c37ff49fad250a4c845a199532826870e6337 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 4c1fa7fb009aba16dc0642ca6934eddde60912a8 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- dc6f067e4d699879e21f067bfe1a909b79c004e3 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 38b2a5abf3287e16d372659260bcd8183e15c840 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- d7a2f27140e393a47d8c34a43eeb9bc620da9ab3 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- b095b47ed90835f8d5797c5042bc07d21b7957f1 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 15b5bbbeb61ea34f90419600648844be693f0476 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 3812f21365c03e6914426d7283da4ab26bd8209f ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 2147e4cb4d6ae7bc9bd427c0df70e23f1cd6210e ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- dffad2f029b6f1f8a8f4011cd3da3ce0cc89aa1a ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- ad7a3380840fe64959603faf76db7265dc8d82f7 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 28cba11a5d6f3ee8349563fe0bedfc17a309de79 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 9822d97f95f3200f2bdc7705a93549370c94a4f7 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 4c42412f8f6f8c50fe1c918fbc4d8e82e77e58be ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 082e57e560335105e26c0224addd6f738a7dbfad ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 404cea120c3e485c1be5be7d5221cc9abd05392f ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 9d2690be518742aadcd39114b7f02c01a86cc43d ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 4bc8760a994ba6bb1a2ee04b8d949fe17128c0b9 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- a9bf30dd24364a8322a6845a0664fe1b2781b391 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- f045926d19ca39952d191f72430b0e19bfde53ea ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 7091136b6fdb254e81544ad8d594a447cec7e186 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- d47c37ff49fad250a4c845a199532826870e6337 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 4c1fa7fb009aba16dc0642ca6934eddde60912a8 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- dc6f067e4d699879e21f067bfe1a909b79c004e3 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 38b2a5abf3287e16d372659260bcd8183e15c840 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- d7a2f27140e393a47d8c34a43eeb9bc620da9ab3 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- b095b47ed90835f8d5797c5042bc07d21b7957f1 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 15b5bbbeb61ea34f90419600648844be693f0476 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 3812f21365c03e6914426d7283da4ab26bd8209f ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 2147e4cb4d6ae7bc9bd427c0df70e23f1cd6210e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b213ab544114f7e6148ee5f2dda9b7421d2d998 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a0bb1b1d427b620d7acbada46a13c3123412e66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03db7c345b3ac7e4fc55646775438c86f9b79ee7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a98c7404d85ca0fdc96a5f4c0c740f5f13c62cb7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f8c61dbd14ec1bdbbee59e301aef2c158bf7b55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4359204a9b05c4abba3bc61c504dca38231d45f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d7b8ba9f2e9298496232e4ae66bd904a1d71001 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff56dbbfceef2211087aed2619b7da2e42f235e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17c750a0803ae222f1cdaf3d6282a7e1b2046adb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eff48b8ba25a0ea36a7286aa16d8888315eb1205 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09fb2274db09e44bf3bc14da482ffa9a98659c54 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07bfe1a60ae93d8b40c9aa01a3775f334d680daa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aba4d9b4029373d2bccc961a23134454072936ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b09003fffa8196277bcfaa9984a3e6833805a6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc8d23d3d6e735d70fd0a60641c58f6e44e17029 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b0465c9bcca64c3a863a95735cc5e602946facb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eae33d324376a0a1800e51bddf7f23a343f45a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d9011c05b0e27f1324f393e65954542544250d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb3fec340f89955a4b0adfd64636d26300d22af9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b72118e231c7bc42f457e2b02e0f90e8f87a5794 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59c89441fb81b0f4549e4bf7ab01f4c27da54aad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe594eb345fbefaee3b82436183d6560991724cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- affee359af09cf7971676263f59118de82e7e059 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9f9027779931c3cdb04d570df5f01596539791b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f5d2fd68e784c2b2fd914a196c66960c7f48b49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26dfeb66be61e9a2a9087bdecc98d255c0306079 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bf00a6719804c2fc5cca280e9dae6774acc1237 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae9d56e0fdd4df335a9def66aa2ac96459ed6e5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cef949913659584dd980f3de363dd830392bb68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3903d8e03af5c1e01c1a96919b926c55f45052e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 42e4f5e26b812385df65f8f32081035e2fb2a121 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6500844a925f0df90a0926dbdfc7b5ebb4a97bc9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00b5802f9b8cc01e0bf0af3efdd3c797d7885bb1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 703280b8c3df6f9b1a5cbe0997b717edbcaa8979 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b6fe83f4d817a3b73b44df16cfb4f96bd4d9904 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8340e0bb6ad0d7c1cdb26cbe62828d3595c3b7a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 091ac2960fe30fa5477fcb5bae203eb317090b3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ca97dcef3131a11dd5ef41d674bb6bd36608608 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bef6d375fd21e3047ed94b79a26183050c1cc4cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bbf6520460dc4d2bfd7943cda666436f860cf71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 702bdf105205ca845a50b16d6703828d18e93003 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a0d131ece696f259e7ab42a064ceb10dabb1fcc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93954d20310a7b77322211fd7c1eb8bd34217612 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a61a63ed4bb866b2817acbb04e045f8460e040e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0f79c58ad919e90261d1e332df79a4ad0bc40de ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18b6aa55309adfa8aa99bdaf9e8f80337befe74e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79e24f78fa35136216130a10d163c91f9a6d4970 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 820d3cc9ceda3e5690d627677883b7f9d349b326 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8ec952343583324c4f5dbefa4fb846f395ea6e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abf9373865c319d2f1aaf188feef900bb8ebf933 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d86d883714072b6e3bbc56a2127c06e9d6a6582 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a84459c6a5a1d8a81e4a51189091ef135e1776e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 057514e85bc99754e08d45385bf316920963adf9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cefc0df04440215dad825e109807aecf39d6180b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df39446bb7b90ab9436fa3a76f6d4182c2a47da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 636f77bf8d58a482df0bde8c0a6a8828950a0788 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a625d08801eacd94f373074d2c771103823954d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 617c09e70bfd54af1c88b4d2c892b8d287747542 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45d1cd59d39227ee6841042eab85116a59a26d22 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 567c892322776756e8d0095e89f39b25b9b01bc2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dbc2be846d1d00e907efbf8171c35b889ab0155 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01a96b92f7d873cbd531d142813c2be7ab88d5a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 464504ce0069758fdb88b348e4a626a265fb3fe3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 690722a611a25a1afcdb0163d3cfd0a8c89d1d04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90f0fb8f449b6d3e4f12c28d8699ee79a6763b80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb02e1229d336decc7bae970483ff727ed7339db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb2461d84f97a72641ef1e878450aeab7cd17241 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbddc30a4d5c37feabc33d4c4b161ec8e5e0bf7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c51f93823d46f0882b49822ce6f9e668228e5b8d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17643e0bd1b65155412ba5dba8f995a4f0080188 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fbf0ef97d6f59d2eb0f37b29716ba0de95c4457 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4832aa6bf82e4853f8f426fc06350540e2c8a9e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48c1e9b430cc84366f2c29bb0006e9593659835e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76bcd7081265f1d72fcc3101bfda62c67d8a7f32 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eae0e37c88a71a3b8ca816b820eed71fd1590f11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a04c15b1f77f908b1dd3983a27ee49c41b3a3e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4fe6efbccc2ad5c2044bf36e34019363018630 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63c31b60acf2286095109106a4e9b2a4289ec91f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5df76d451ff0fde14ab71b38030b6c3e6bc79c08 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce8cc4a6123a3ea11fc4e35416d93a8bd68cfd65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b11bcfa3df4d0b792823930bffae126fd12673f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47f35d1ba2b9b75a9078592cf4c41728ac088793 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 385a8c6c1a72dc34f69c5273c1b4c1285cc1d3c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20f4a9d49b466a18f1af1fdfb480bc4520a4cdc2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85ebfb2f0dedb18673a2d756274bbcecd1f034c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6503ef72d90164840c06f168ab08f0426fb612bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33346b25c3a4fb5ea37202d88d6a6c66379099c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c30bf3ba7548a0e996907b9a097ec322760eb43a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90c4db1f3ba931b812d9415324d7a8d2769fd6db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26ccee15ae1712baf68df99d3f5f2fec5517ecbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5402a166a4971512f9d513bf36159dead9672ae9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572bbb39bf36fecb502c9fdf251b760c92080e1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 969185b76df038603a90518f35789f28e4cfe5b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e62078d023ba436d84458d6e9d7a56f657b613ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 300261de4831207126906a6f4848a680f757fbd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c242b55d7c64ee43405f8b335c762bcf92189d38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e76b5379cf55fcd31a2e8696fb97adf8c4df1a8d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfa37825b011af682bc12047b82d8cec0121fe4e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f08d3067310e0251e6d5a33dc5bc65f1b76a2d49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eec9b86a81693d2b2d18ea651b1a0b5df521266 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4fe276637fe1ce3b2ebb504b69268d5b79de1ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da88d360d040cfde4c2bdb6c2f38218481b9676b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b38725361f711ae638c048f93a7b6a12d165bd4e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c43652c9f5b11b611e1aca0a6d67393e9e38c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 473fc3a348cd09b4ffca319daff32464d10d8ef9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3778ec37d17a6eb781fa9c6b5e2009fa7542d77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 803aca26d3f611f7dfd7148f093f525578d609ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d92fee01b05e5e217e6dad5cc621801c31debae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b60ab31cfa2ca146069df8dbc21ebfc917db0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34356322ca137ae6183dfdd8ea6634b64512591a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f62c8d8bbb566edd9e7a40155c7380944cf65dfb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 025fe17da390c410e5bae4d6db0832afbfa26442 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a880c5f4e00ef7bdfa3d55a187b6bb9c4fdd59ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6b661c04d82599ad6235ed1b4165b9f097fe07e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9b0e75c07ccbf90a9f2e67873ffbe672bb1a859 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c6178f53233aa98a602854240a7a20b6537aa7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5c69071fd6c730d29c31759caddb0ba8b8e92c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2448ac4ca337665eb22b9dd5ca096ef625a8f52b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fed0cadffd20e48bed8e78fd51a245ad666c54f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39eb0e607f86537929a372f3ef33c9721984565a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 595181da70978ed44983a6c0ca4cb6d982ba0e8b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1cd58ba862cce9cd9293933acd70b1a12feb5a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36811a2edc410589b5fde4d47d8d3a8a69d995ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c34c23a830bb45726c52bd5dcd84c2d5092418e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af7913cd75582f49bb8f143125494d7601bbcc0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b03c2eb07f08dd5d6174a04e4288d41f49920f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96f8f17d5d63c0e0c044ac3f56e94a1aa2e45ec3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 37cef2340d3e074a226c0e81eaf000b5b90dfa55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1ace258417deae329880754987851b1b8fc0a7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f58702b0c3a0bb58d49b995a7e5479a7b24933e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7988bb8ce25eb171d7fea88e3e6496504d0cb8f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f8320b7bf75b6ec375ade605a9812b4b2147de9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f2f3e848e10d145fe28d6a8e07b0c579dd0c276 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f875ddea28b09f2b78496266c80502d5dc2b7411 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b16037a4ff17f0e25add382c3550323373c4398 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a2f5d05f4a8e3427d6dd2a5981f148a9f6bef84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 887f249a2241d45765437b295b46bca1597d91a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158b3c75d9c621820e3f34b8567acb7898dccce4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9de6450084eee405da03b7a948015738b15f59e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c3255387fe2ce9b156cc06714148436ad2490d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 559ddb3b60e36a1b9c4a145d7a00a295a37d46a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3473060f4b356a6c8ed744ba17ad9aa26ef6aab7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c6c8dcc01b08748c552228e00070b0c94affa94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c19a6e1004bb8c116bfc7823477118490a2eef6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af86f05d11c3613a418f7d3babfdc618e1cac805 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01c8d59e426ae097e486a0bffa5b21d2118a48c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90fefb0a8cc5dc793d40608e2d6a2398acecef12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2f9f4e7fd8af09126167fd1dfa151be4fedcd71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11d91e245194cd9a2e44b81b2b3c62514596c578 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a1339a3d6751b2e7c125aa3195bdc872d45a887 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecb12c27b6dc56387594df26a205161a1e75c1b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f97d37881d50da8f9702681bc1928a8d44119e88 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab69b9a67520f18dd8efd338e6e599a77b46bb34 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78d12aa7c922551dddd7168498e29eae32c9d109 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 037d62a9966743cf7130193fa08d5182df251b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 434306e7d09300b62763b7ebd797d08e7b99ea77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e37ebaa5407408ee73479a12ada0c4a75e602092 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6e458c9f8682ab5091e15e637c66ad6836f23b4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3f91bd1c0e8aef1b416ae6b1f55e7bd93a4f281 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dd3cdfc9d647ecb020625351e0ff3a7346e1918d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11837f61aa4b5c286c6ee9870e23a7ee342858c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86114886ae8c2e1a9c09fdc145269089f281d212 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94b7ece1794901feddf98fcac3a672f81aa6a6e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dff2004308a7a1e5b9afc7a5b3b9cb515e12514 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2765dfd72cd5b0958ec574bea867f5dc1c086ab0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- baec2e293158ccffd5657abf4acdae18256c6c90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8e7a7df78fb98314ba5a0a98f4600454a6c3953 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- efc259833ee184888fe21105d63b3c2aa3d51cfa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96364599258e7e036298dd5737918bde346ec195 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f653af66e4c9461579ec44db50e113facf61e2d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c08f592cc0238054ec57b6024521a04cf70e692f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 730177174bbc721fba8fbdcd28aa347b3ad75576 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e21d96a76c223064a3b351fe062d5452da7670cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8cad756f357eb587f9f85f586617bff6d6c3ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1fa8506d177fa49552ffa84527c35d32f193abe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4119a576251448793c07ebd080534948cad2f170 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9448c082b158dcab960d33982e8189f2d2da4729 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e331a0b5e2acd1938bf4906aadf7276bc7f1b60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21e21d04bb216a1d7dc42b97bf6dc64864bb5968 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18b75d9e63f513e972cbc09c06b040bcdb15aa05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f12c8c34371a7c46dad6788a48cf092042027ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 043e15fe140cfff8725d4f615f42fa1c55779402 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8e223263c73a7516e2b216a546079e9a144b3a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- efe68337c513c573dde8fbf58337bed2fa2ca39a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dd71d3edbf3930cce953736e026ac3c90dd2e59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6752fad0e93d1d2747f56be30a52fea212bd15d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0767cc527bf3d86c164a6e4f40f39b8f920e05d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76ba0924be14d55d01db0506b3e6a930cc72bf0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69b75e167408d0dfa3ff8a00c185b3a0bc965b58 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fd9f6ee5c8b4ae4e01a40dc398e2768d838210d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b85fec1e333896ac0f27775469482f860e09e5bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8470777b44bed4da87aad9474f88e7f0774252a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82189398e3b9e8f5d8f97074784d77d7c27086ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71e28b8e2ac1b8bc8990454721740b2073829110 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0a7824253ae412cf7cc27348ee98c919d382cf2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c885781858ade2f660818e983915a6dae5672241 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb7288d4f4a93d07c9989c90511f6887bcaeb25 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a094ac1808f7c5fa0653ac075074bb2232223ac1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36440f79bddc2c1aa4a7a3dd8c2557dca3926639 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a233359ce1ec30386f97d4acdf989f1c3570842 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 696e4edd6c6d20d13e53a93759e63c675532af05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b0028e1e75e1ee0eea63ba78cb3160d49c1f3a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3211ae9dbfc6aadd2dd1d7d0f9f3af37ead19383 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74a1b17a29390660abe79d83d837a666141f8625 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e4211b20e8e57fe7b105b36501b8fc9e818852f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ad4079dde47ce721e7652f56a81a28063052a166 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d0fb22b4f5f94da44075d8c43da24b344ae3f0da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d06f5af4311e6a1d17213dde57a261e30dbf669 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24f75e7bae3974746f29aaecf6de011af79a675d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 184cc1fc280979945dfd16b0bb7275d8b3c27e95 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f9d492e479eda07c5bbe838319eecac459a6042 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfbd5ece215dea328c3c6c4cba31225caa66ae9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b10de37fe036b3dd96384763ece9dc1478836287 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70aa1ab69c84ac712d91c92b36a5ed7045cc647c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9541d6bffe4e4275351d69fec2baf6327e1ff053 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46b204d1b2eb6de6eaa31deacf4dd0a9095ca3fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08989071e8c47bb75f3a5f171d821b805380baef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c03da67aabaab6852020edf8c28533d88c87e43f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e30a597b028290c7f703e68c4698499b3362a38f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e7314c57ef56aaf5fd27a311bfa6a01d18366a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c96476be7f10616768584a95d06cd1bddfe6d404 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 651a81ded00eb993977bcdc6d65f157c751edb02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c6e67013fd22840d6cd6cb1a22fcf52eecab530 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14fc8bd3e5a8249224b774ea9052c9a701fc8e0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ba76d683df326f2e6d4f519675baf86d0373abf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1297f65226e3bfdb31e224c514c362b304c904c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cd47aeea822c484342e3f0632ae5cf8d332797d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d906f31a283785e9864cb1eaf12a27faf4f72c42 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d283c83c43f5e52a1a14e55b35ffe85a780615d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 60acfa5d8d454a7c968640a307772902d211f043 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6643a9feb39d4d49c894c1d25e3d4d71e180208a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ffddedf5467df993b7a42fbd15afacb901bca6d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2067ba536dd78549d613dc14d8ad223c7d0aa5d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c93e971f3e0aa4dea12a0cb169539fe85681e381 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50cbafc690e5692a16148dbde9de680be70ddbd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df6fa49c0662104a5f563a3495c8170e2865e31b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a728b0a4b107a2f8f1e68bc8c3a04099b64ee46c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7968d136276607115907267b3be89c3ff9acd03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a9f8c55d6a58fe42fe67e112cbc98de97140f75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5232c89de10872a6df6227c5dcea169bd1aa6550 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7180d50f785ec28963e12e647d269650ad89b31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 624eb284e0e6edc4aabf0afbdc1438e32d13f4c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9562ae2e2436e052d31c40d5f9d3d0318f6c4575 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b650c4f28bda658d1f3471882520698ef7fb3af6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 135e7750f6b70702de6ce55633f2e508188a5c05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d43a751e578e859e03350f198bca77244ba53b5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1759a78b31760aa4b23133d96a8cde0d1e7b7ba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a4fc6abfb3b39237f557372262ac79f45b6a9fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb411ee92d30675a8d3d110f579692ea02949ccd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7b5e92791dd4db3535b527079f985f91d1a5100 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94bbe51e8dc21afde4148afb07536d1d689cc6ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb7fd31955aaba8becbdffb75dab2963d5f5ad8c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b88532a5346a9a7e8f0e45fec14632a9bfe2c89 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f9840b9220d57b737ca98343e7a756552739168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3787f622e59c2fecfa47efc114c409f51a27bbe7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98595da46f1b6315d3c91122cfb18bbf9bac8b3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c4dec45d387ccebfe9bd423bc8e633210d3cdbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a1991773b79c50d4828091f58d2e5b0077ade96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3eae2cdd688d8969a4f36b96a8b41fa55c0d3ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ef37754527948af1338f8e4a408bda7034d004f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3fc83f2333eaee5fbcbef6df9f4ed9eb320fd11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30387f16920f69544fcc7db40dfae554bcd7d1cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16d3ebfa3ad32d281ebdd77de587251015d04b3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b68361c8b81b23be477b485e2738844e0832b2f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dcb520caa069914f9ab014798ab321730f569cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 176838a364fa36613cd57488c352f56352be3139 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f37011d7627e4a46cff26f07ea7ade48b284edee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3ea6c0564a4a8c310d0573cebac0a21ac7ab0a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e263b8f972f78c673f36f2bbc1f8563ce6acb10 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a175068f3366bb12dba8231f2a017ca2f24024a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 762d8fb447b79db7373e296e6c60c7b57d27c090 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5262acbd33b70fb676284991207fb24fa9ac895 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3edd16ca6e217ee35353564cad3aa2920bc0c2e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9766832e11cdd8afed16dfd2d64529c2ae9c3382 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9cb7ae8d9721e1269f5bacd6dbc33ecdec4659c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0b10d965d6377c409ceb40eb47379d79c3fef9f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c16f584725a4cadafc6e113abef45f4ea52d03b3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5f0d48745727684473cf583a002e2c31174de2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 961539ced52c82519767a4c9e5852dbeccfc974e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe65adc904f3e3ebf74e983e91b4346d5bacc468 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e7045c4a2b2438adecd2ba59615fbb61d014512 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0238e6cce512a0960d280e7ec932ff1aaab9d0f1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7e09792a392eeed4d712b40978b1b91b751a6d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50edc9af4ab43c510237371aceadd520442f3e24 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0374d7cf84ecd8182b74a639fcfdb9eafddcfd15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7bde529ad7a8d663ce741c2d42d41d552701e19a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5453888091a86472e024753962a7510410171cbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b7839e6b55953ddac7e8f13b2f9e2fa2dea528b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 411635f78229cdec26167652d44434bf8aa309ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99ba753b837faab0509728ee455507f1a682b471 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4720e6337bb14f24ec0b2b4a96359a9460dadee4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24cd6dafc0008f155271f9462ae6ba6f0c0127a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a71ebbc1138c11fccf5cdea8d4709810360c82c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69ca329f6015301e289fcbb3c021e430c1bdfa81 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c6209f12e78218632319620da066c99d6f771d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f14903a0d4bb3737c88386a5ad8a87479ddd8448 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2fd537b5b3bb062a26c9b16a52236b2625ff44c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e236853b14795edec3f09c50ce4bb0c4efad6176 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18dd177fbfb63caed9322867550a95ffbc2f19d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b860d1873a25e6577a8952d625ca063f1cf66a84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6e1dcc992ff0a8ddcb4bca281ae34e9bc0df34b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fbc2304fea19a2b6fc53f4f6448102768e3eeb2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09a96fb2ea908e20d5acb7445d542fa2f8d10bb6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 890fd8f03ae56e39f7dc26471337f97e9ccc4749 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 809c7911944bc32223a41ea3cecc051d698d0503 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07f6f2aaa5bda8ca4c82ee740de156497bec1f56 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d4dd2f1a6f31df9e361ebaf75bc0a2de7110c37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 466ed9c7a6a9d6d1a61e2c5dbe6f850ee04e8b90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdd4368489345a53bceb40ebd518b961f871b7b3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d472327f4873a7a4123f7bdaecd967a86e30446 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86b269e1bff281e817b6ea820989f26d1c2a4ba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f344c8839a1ac7e4b849077906beb20d69cd11ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f404a50e95dd38012d33ee8041462b7659d79a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2616e12df494774f13fd88538e9a58673f5dabb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 391c0023675b8372cff768ff6818be456a775185 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 97aec35365231c8f81c68bcab9e9fcf375d2b0dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 173cb579972dbab1c883e455e1c9989e056a8a92 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a684a7c41e89ec82b2b03d2050382b5e50db29ee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c382f3678f25f08fc3ef1ef8ba41648f08c957ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3c8760feb03dd039c2d833af127ebd4930972eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 49f13ef2411cee164e31883e247df5376d415d55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a30b2430e25d615c14dafc547caff7da9dd5403 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15e457c8a245a7f9c90588e577a9cc85e1efec07 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 644f75338667592c35f78a2c2ab921e184a903a0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b6d4885db27b6f3e5a286543fd18247d7d765ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb792ea76888970d486323df07105129abbbe466 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5db2e0c666ea65fd15cf1c27d95e529d9e1d1661 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbf3d2745c3758490f31199e31b098945ea81fca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0420b01f24d404217210aeac0c730ec95eb7ee69 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d39bd5345af82e3acbdc1ecb348951b05a5ed1f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac286162b577c35ce855a3048c82808b30b217a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2810e8d3f34015dc5f820ec80eb2cb13c5f77b2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 607df88ee676bc28c80bca069964774f6f07b716 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7b401e0aa9dbb1a7543dde46064b24a5450db19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c9da7310eb6adf67fa8d35821ba500dffd9a2a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c859019afaffc2aadbb1a1db942bc07302087c52 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f358e04cb00647e1c74625a8f669b6803abd1fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a244bd15bcd05c08d524ca9ef307e479e511b54c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863abe8b550d48c020087384d33995ad3dc57638 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84c3f60fc805e0d5e5be488c4dd0ad5af275e495 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9de612ebe54534789822eaa164354d9523f7bde ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0059f432c4b9c564b5fa675e76ee4666be5a3ac8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14a7292b26e6ee86d523be188bd0d70527c5be84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72a2f7dd13fdede555ca66521f8bee73482dc2f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c563b7211b249b803a2a6b0b4f48b48e792d1145 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6804e73beb0900bd1f5fd932fab3a88f44cf7a31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73feb182f49b1223c9a2d8f3e941f305a6427c97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e81fd5447f8800373903e024122d034d74a273f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc553d6843c791fc4ad88d60b7d5b850a13fd0ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99b6dffe9604f86f08c2b53bef4f8ab35bb565a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a5a78b27ce1bcda6597b340d47a20efbac478d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fd8768c64d192b0b26a00d6c12188fcbc2e3224 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eca69510d250f4e69c43a230610b0ed2bd23a2e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c63abb360b4829b3d75d60fb837c0132db0510 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24d04e820ef721c8036e8424acdb1a06dc1e8b11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab361cfecf9c0472f9682d5d18c405bd90ddf6d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99471bb594c365c7ad7ba99faa9e23ee78255eb9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45a5495966c08bb8a269783fd8fa2e1c17d97d6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61fef99bd2ece28b0f2dd282843239ac8db893ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 909ee3b9fe308f99c98ad3cc56f0c608e71fdee7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d94159db3067cc5def101681e6614502837cea5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0412f6d50e9fafbbfac43f5c2a46b68ea51f896f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e47352575d9b0a453770114853620e8342662fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4a83ff7910dc3617583da7e0965cd48a69bb669 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0a69bbec284bccbeecdf155e925c3046f024d4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 625969d5f7532240fcd8e3968ac809d294a647be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e671d243c09aa8162b5c0b7f12496768009a6db0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8cb3e0cac2f1886e4b10ea3b461572e51424acc7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cf0ca8b94dc815598e354d17d87ca77f499cae6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c429fc0382868c22b56e70047b01c0567c0ba31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87abade91f84880e991eaed7ed67b1d6f6b03e17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b17a76731c06c904c505951af24ff4d059ccd975 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158131eba0d5f2b06c5a901a3a15443db9eadad1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04005d5c936a09e27ca3c074887635a2a2da914c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c40cf5e83e56e339ec6ab3e75b008721e544ede ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cb09652c007901b175b4793b351c0ee818eb249 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91f6e625da81cb43ca8bc961da0c060f23777fd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d296eec67a550e4a44f032cfdd35f6099db91597 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ee8b09fd24962889e0e298fa658f1975f7e4e48c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b74a5bb6123b425a370da60bcc229a030e7875c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6b8e7b72ce81524cf82e64ee0c56016106501d96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e82a7845af93955d24a661a1a9acf8dbcce50b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff4f970fa426606dc88d93a4c76a5506ba269258 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2573dd5409e3a88d1297c3f9d7a8f6860e093f65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f4c7f3ec32a1943a0d5cdc0633fc33c94086f5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f4e51bb4fc9d9c74cdbfb26945d053053f60e7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8da4072d71c3b0c13e478dc0e0d92336cf1fdd9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fced2eb501e3428b3e19e5074cf11650945a840 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52f9369ec96dbd7db1ca903be98aeb5da73a6087 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3fabed8d0d237b4d97b695f0dff1ba4f6508e4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00ef69351e5e7bbbad7fd661361b3569b6408d49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eba84183ea79061eebb05eab46f6503c1cf8836f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55fd173c898da2930a331db7755a7338920d3c38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 768b9fffa58e82d6aa1f799bd5caebede9c9231b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d22d57010e064cfb9e0b6160e7bd3bb31dbfffc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a10ceef3599b6efc0e785cfce17f9dd3275d174f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cedd3321e733ee1ef19998cf4fcdb2d2bc3ccd14 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 913b4ad21c4a5045700de9491b0f64fab7bd00ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6aa78cd3b969ede76a1a6e660962e898421d4ed8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e633cc009fe3dc8d29503b0d14532dc5e8c44cce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05cf33acc6f451026e22dbbb4db8b10c5eb7c65a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e50ee0a0370fcd45a9889e00f26c62fb8f6fa44e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5f3c586e0f06df7ee0fc81289c93d393ea21776 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7392d68121befe838d2494177531083e22b3d29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc209ec23819313ea3273c8c3dcbc2660b45ad6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbd9ca4f16830c4991d570d3f9fa327359a2fa11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5dd2f0c0ed534ecbc1c1a2d8e07319799a4e9c7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae7499f316770185d6e9795430fa907ca3f29679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db4cb7c6975914cbdd706e82c4914e2cb2b415e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdfd3fc5b4d892b79dfa86845fcde0acc8fc23a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec29b1562a3b7c2bf62e54e39dce18aebbb58959 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 438d3e6e8171189cfdc0a3507475f7a42d91bf02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d01f0726d5764fe2e2f0abddd9bd2e0748173e06 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2ce56ffd016e2e6d1258ce5436787cae48a0812 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e27496dea8a728446e7f13c4ff1b5d8c2f3e736 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a2f8a9db703e55f3aa2b068cb7363fd3c757e71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 820bc3482b6add7c733f36fefcc22584eb6d3474 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9432bedaa938eb0e5a48c9122dd41b08a8f0d740 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80ac0fcf1b8e8d8681f34fd7d12e10b3ab450342 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7cff58fd53bdb50fef857fdae65ee1230fd0061 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 313b3b4425012528222e086b49359dacad26d678 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85cf7e89682d061ea86514c112dfb684af664d45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d17c2f6131b9a716f5310562181f3917ddd08f91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ee6c19423297b4c667d34ed1bd621dafaabb0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 553500a3447667aaa9bd3b922742575562c03b68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9932e647aaaaf6edd3a407b75edd08a96132ef5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebf46561837f579d202d7bd4a22362f24fb858a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 225529c8baaa6ee65b1b23fc1d79b99bf49ebfb1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a103d8c28b496ead8b4dd8215b103414f8b7f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dda3cbbd15e7a415c1cbd33f85d7d6d0e3a307a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05b5cedec2101b8f9b83b9d6ec6a8c2b4c9236bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4756f4a1298e053aaeae58b725863e8742d353a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34afc113b669873cbaa0a5eafee10e7ac89f11d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dc46d735003df8ff928974cb07545f69f8ea411 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abb18968516c6c3c9e1d736bfe6f435392b3d3af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a61393899b50ae5040455499493104fb4bad6feb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 284f89d768080cb86e0d986bfa1dd503cfe6b682 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfa0eac1578bff14a8f7fa00bfc3c57aba24f877 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6446608fdccf045c60473d5b75a7fa5892d69040 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 597fb586347bea58403c0d04ece26de5b6d74423 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74930577ec77fefe6ae9989a5aeb8f244923c9ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d85574e0f37e82e266a7c56e4a3ded9e9c76d8a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb8289e80c8b9fe48456e769e0421b7f9972af3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2636d216d43b40a477d3a5180f308fc071abaeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6244c55e8cbe7b039780cf7585be85081345b480 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 607d8aa3461e764cbe008f2878c2ac0fa79cf910 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38c624f74061a459a94f6d1dac250271f5548dab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05753c1836fb924da148b992f750d0a4a895a81a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dba01d3738912a59b468b76922642e8983d8995b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14d7034adc2698c1e7dd13570c23d217c753e932 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d52c5783c08f4f9e397c4dad55bbfee2b8c61c5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44496c6370d8f9b15b953a88b33816a92096ce4d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0685d629f86ef27e4b68947f63cb53f2e750d3a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a086625da1939d2ccfc0dd27e4d5d63f47c3d2c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ba1ceaeadd8ff39810c5f410f92051a36dd17e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 544ceecf1a8d397635592d82808d3bb1a6d57e76 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5eb90461917afe04f31abedae894e63f81f827e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b303cb0c5995bf9c74db34a8082cdf5258c250fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 19a4df655ae2ee91a658c249f5abcbe0e208fa72 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fd090293792884f5a0d05f69109da1c970c3cab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 248ad822e2a649d20582631029e788fb09f05070 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95897f99551db8d81ca77adec3f44e459899c20b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b269775a75d9ccc565bbc6b5d4c6e600db0cd942 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4744efbb68c562adf7b42fc33381d27a463ae07a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 763531418cb3a2f23748d091be6e704e797a3968 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3c3efd20c50b2a9db98a892b803eb285b2a4f83 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f7e92cf00814fc6c4fb66527d33f7030f98e6bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71b3845807458766cd715c60a5f244836f4273b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69d7a0c42cb63dab2f585fb47a08044379f1a549 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59ad90694b5393ce7f6790ade9cb58c24b8028e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 64b85ee4cbaeb38a6dc1637a5a1cf04e98031b4b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43564d2e8f3b95f33e10a5c8cc2d75c0252d659a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf1354bb899726e17eaaf1df504c280b3e56f3d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ba39bd0f0b27152de78394d2a37f3f81016d848 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55146609e2d0b120c5417714a183b3b0b625ea80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 289fab8c6bc914248f03394672d650180cf39612 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f2b40d74c67c6fa718f9079654386ab333476d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba169916b4cc6053b610eda6429446c375295d78 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c459bfcfdd7487f8aae5dd4101e7069f77be846 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 321694534e8782fa701b07c8583bf5eeb520f981 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef2316ab8fd3317316576d2a3c85b59e685a082f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e6099bce97a688c251c29f9e7e83c6402efc783 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7289c75cceaaf292c6ee01a16b24021fd777ad5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01f142158ee5f2c97ff28c27286c0700234bd8d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d0d1d6cfec28ba89ed1819bee9fe75931e765d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb08a3df46718c574e85b53799428060515ace8d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb14533db732d62778ae48a4089b2735fb9e6f92 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3a57f53d74998e835bce1a69bccbd9c1dadd6f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f83797aefa6a04372c0d5c5d86280c32e4977071 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b16b6649cfdaac0c6734af1b432c57ab31680081 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05e9a6fc1fcb996d8a37faf64f60164252cc90c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7081db74a06c89a0886e2049f71461d2d1206675 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07f81066d49eea9a24782e9e3511c623c7eab788 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d66f8f79629bcfa846a3d24a2a2c3b99fb2a13f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16c2d9c8f0e10393bf46680d93cdcd3ce6aa9cfd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89d11338daef3fc8f372f95847593bf07cf91ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ad6dc07790fe567412ccbc2a539f4501cb32ab2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 199099611dd2e62bae568897f163210a3e2d7dbb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14f3d06b47526d6f654490b4e850567e1b5d7626 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1349ee61bf58656e00cac5155389af5827934567 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7d2671c6ef156d1a2f6518de4bd43e3bb8745be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a37405664efe3b19af625b11de62832a8cfd311c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cfd4b30cda23270b5bd2d1e287e647664a49fee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccaae094ce6be2727c90788fc5b1222fda3927c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f583a810162c52cb76527d60c3ab6687b238938 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a5cef5c7c4a7130626fc2d7d5d562e1e985bbd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 916a0399c0526f0501ac78e2f70b833372201550 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d759e17181c21379d7274db76d4168cdbb403ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fa1ce2b7dcf7f1643bb494b71b9857cbfb60090 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3face9018b70f1db82101bd5173c01e4d8d2b3bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 23b83cd6a10403b5fe478932980bdd656280844d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf237db554f8e84eaecf0fad1120cbd75718c695 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66bb01306e8f0869436a2dee95e6dbba0c470bc4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 193df8e795de95432b1b73f01f7a3e3c93f433ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0dd99fe29775d6abd05029bc587303b6d37e3560 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb8b383d8be3f9da39c02f5e04fe3cf8260fa470 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63a444dd715efdce66f7ab865fc4027611f4c529 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b207f0e8910a478ad5aba17d19b2b00bf2cd9684 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9121f629d43607f3827c99b5ea0fece356080cf0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 882ebb153e14488b275e374ccebcdda1dea22dd7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fdb1dc77a45a26d8eac9f8b53f4d9200f54f7efe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 359a7e0652b6bf9be9200c651d134ec128d1ea97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bf53a3913d55f933079801ff367db5e326a189a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d7eaf1253245c6b88fd969efa383b775927cdd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d8a5144bd8c0940d9f2593a21aec8bebf7c035 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07657929bc6c0339d4d2e7e1dde1945199374b90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5c94165d24195994c929de95782e1d412e7c2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ff2f4f7a2f8212a68aff34401e66a5905f70f51 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca080bbd16bd5527e3145898f667750feb97c025 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e2d2651773722c05ae13ab084316eb8434a3e98 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6fdb67cec5c75b3f0a855042942dac75c612065 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bebfe31c2d9064d4a13de95ad79a4c9bdc3a33a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87b5d9c8e54e589d59d6b5391734e98618ffe26e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ece804aed9874b4fd1f6b4f4c40268e919a12b17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5cc590c875ada0c55d975cbe26141a94e306c94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fa99bff215249378f90e1ce0254e66af155a301 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dab0c2e0da17c879e13f0b1f6fbf307acf48a4ff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2cd5970af1ea8024ecf82b11c1b3802d7c72ba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acbd5c05c7a7987c0ac9ae925032ae553095ebee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 326409d7afd091c693f3c931654b054df6997d97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71bd08050c122eff2a7b6970ba38564e67e33760 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e7e82b114a5c1b3eb61f171c376e1cf85563d07 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b6b90f9f1e5310a6f39b75e17a04c1133269e8f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- daa3f353091ada049c0ede23997f4801cbe9941b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80204335d827eb9ed4861e16634822bf9aa60912 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 859ad046aecc077b9118f0a1c2896e3f9237cd75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 913d806f02cf50250d230f88b897350581f80f6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce7e1507fa5f6faf049794d4d47b14157d1f2e50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bd86c87c38d58b9ca18241a75c4d28440c7ef150 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e93ffe192427ee2d28a0dd90dbe493e3c54f3eae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a77a17f16ff59f717e5c281ab4189b8f67e25f53 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b176732ba16379d57f53e956456bc2c5970baf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a02facd0b4f9c2d2c039f0d7dc5af8354ce0201b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6df6d41835cd331995ad012ede3f72ef2834a6c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b50b96032094631d395523a379e7f42a58fe8168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b628dccf4102d2a63c6fc8cd957ab1293bafbc6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3bf002e3ccc26ec99e8ada726b8739975cd5640e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 687c8f0494dde31f86f98dcb48b6f3e1338d4308 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dac619e4917b0ad43d836a534633d68a871aecca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1bb0b1751b38da43dbcd2ec58e71eb7b0138d786 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9dbaab311dbafcba0b68edb6ed89988b476f1dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74a0507f4eb468b842d1f644f0e43196cda290a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc664f07535e3b3c1884d0b7f3cbcbadf9adce25 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b13c115994461fb6bafe5dd06490aae020568c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da8aeec539da461b2961ca72049df84bf30473e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a77eab2b5668cd65a3230f653f19ee00c34789bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c73b239bd10ae2b3cff334ace7ca7ded44850cbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 096027bc4870407945261eecfe81706e32b1bfcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6f596d7f46cb13a3d87ff501c844c461c0a3b0a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41b9cea832ad5614df94c314d29d4b044aadce88 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f66e25c25cde2423917ee18c4704fff83b837d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3953d71374994a00c7ef756040d2c77090f07bb4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31cc0470115b2a0bab7c9d077902953a612bbba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 881e3157d668d33655da29781efed843e4a6902a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33f2526ba04997569f4cf88ad263a3005220885e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11f0634803d43e6b9f248acd45f665bc1d3d2345 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c282315f0b533c3790494767d1da23aaa9d360b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dff4bdd4be62a00d3090647b5a92b51cea730a84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77e47bc313e42f9636e37ec94f2e0b366b492836 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a6ca8c40433400f6bb3ece2ed30808316de5be3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5cd12a6bcace3c99d94bbcf341ad7d4351eaca0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b3ffcdda1114ad204c58bdf3457ac076ae9a0b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6971a930644d56f10e68e818e5818aa5a5d2e646 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4106f183ad0875734ba2c697570f9fd272970804 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8690f8974b07f6be2db9c5248d92476a9bad51f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f6bf7948121357a85a8069771919fb13d2cecf9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a26349d8df88107bd59fd69c06114d3b213d0b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 530ab00f28262f6be657b8ce7d4673131b2ff34a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11fd713f77bb0bc817ff3c17215fd7961c025d7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6224c72b6792e114bc1f4b48b6eca482ee6d3b35 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7bbe6b01c82d9bcb3333b07bae0c9755eecdbbf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 926d45b5fe1b43970fedbaf846b70df6c76727ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ee33ac9b234c7501d97b4c2bf2e2035c5ec1fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c706a217238fbe2073d2a3453c77d3dc17edcc9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14b221bf98757ba61977c1021722eb2faec1d7cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e1fe7f6a83633207c9e743708c02c6e66173e7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce21f63f7acba9b82cea22790c773e539a39c158 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e4239c4c3b106b436673e4f9cca43448f6f1af9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c49ba433b3ff5960925bd405950aae9306be378b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8fc6563219017354bdfbc1bf62ec3a43ad6febcb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1634dc48b39ecca11dc39fd8bbf9f1d8f1b7be6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89df64132ccd76568ade04b5cf4e68cb67f0c5c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8591a094a768d73e6efb5a698f74d354c989291 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3d9b8df38dacfe563b1dd7abb9d61b664c21186 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1d2f4bc85da47b5863589a47b9246af0298f016 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92a481966870924604113c50645c032fa43ffb1d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ca25b9b090511fb61f9e3122a89b1e26d356618 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 914bbddfe5c02dc3cb23b4057f63359bc41a09ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f99fb4962c2777286a128adbb093d8f25ae9dc7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f08b7730438bde34ae55bc3793fa524047bb804 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9807dd48b73ec43b21aa018bdbf591af4a3cc5f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce5dfe7f95ac35263e41017c8a3c3c40c4333de3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c2446f24bc6a91ca907cb51d0b4a690131222d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29aa1b83edf3254f8031cc58188d2da5a83aaf75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8fd91020739a0d57f1df562a57bf3e50c04c05b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7be3486dc7f91069226919fea146ca1fec905657 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05e3b0e58487c8515846d80b9fffe63bdcce62e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6e0a6cb5c70efd0899f620f83eeebcc464be05c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0857d33852b6b2f4d7bc470b4c97502c7f978180 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e79a3f8f6bc6594002a0747dd4595bc6b88a2b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3265bd8beb017890699d093586126ff8af4a3fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f12b26b81a8e7667b2a26a7878e5bc033610ed5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80b038f8d8c7c67c148ebd7a5f7a0cb39541b761 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 190c04569bd2a29597065222cdcc322ec4f2b374 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 693b17122a6ee70b37cbac8603448aa4f139f282 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f773b4cedad84da3ab3f548a6293dca7a0ec2707 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f76463221cf1c69046b27c07afde4f0442b75d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9db530e428f798cdf5f977e9b2dbad594296f05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16223e5828ccc8812bd0464d41710c28379c57a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c1e984b212637fe108c0ddade166bc39f0dd2ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da43a47adb86c50a0f4e01c3c1ea1439cefd1ac2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 044977533b727ed68823b79965142077d63fe181 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ec27096fbe036a97ead869c7522262f63165e1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d15bc65735852d3dce5ca6d779a90a50c5323b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db0dfa07e34ed80bfe0ce389da946755ada13c5d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09d2ae5f1ca47e3aede940e15c28fc4c3ff1e9eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a644184b05e99a4809de378f21424ef6ced06e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f14a596a33feaad65f30020759e9f3481a9f1d9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34cce402e23a21ba9c3fdf5cd7f27a85e65245c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03126bfd6e97ddcfb6bd8d4a893d2d04939f197e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4f7d34f8752ab78949efcaa9f0bd938df33622 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5710466a728446d8169761d9d4c29b1cb752b00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a6cb4aab975a35e9ca7f28c1814aa13203ab835 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14582df679a011e8c741eb5dcd8126f883e1bc71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c22f1b05fee73dd212c470fecf29a0df9e25a18f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a14277eecf65ac216dd1b756acee8c23ecdf95d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2c1d194064e505fa266bd1878c231bb7da921ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 929f3e1e1b664ed8cdef90a40c96804edfd08d59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a96030d82fa379d24b952a58eed395143950c7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f48d08760552448a196fa400725cde7198e9c9b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cd6e82cfa3bdc3b5d75317431d58cc6efb710b1d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2cd130bed184fe761105d60edda6936f348edc6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d78e368f6877ec70b857ab9b7a3385bb5dca8d2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d851a6f3885ec24a963a206f77790977fd2e6c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28cbb953ce01b4eea7f096c28f84da1fbab26694 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 280e573beb90616fe9cb0128cec47b3aff69b86a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccff34d6834a038ef71f186001a34b15d0b73303 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc340779c5cd6efb6ac3c8d21141638970180f41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d91ae75401b851b71fcc6f4dcf7eb29ed2a63369 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a91cf1217155ef457d92572530503d13b5984fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfae362363b28be9b86250eb7f6a32dac363c993 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddb828ecd0e28d346934fd1838a5f1c74363fba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4459ca7fd21d549a2342a902cfdeba10c76a022 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 610d4c97485d2c0d4f65b87f2620a84e0df99341 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eae04bf7b0620a0ef950dd39af7f07f3c88fd15f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecd061b2e296a4f48fc9f545ece11c22156749e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dd14b60b112a867a2217087b7827687102b11fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 454fedab8ea138057cc73aa545ecb2cf0dac5b4b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2eb6cf0855232da2b8f37785677d1f58c8e86817 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e482a20ab221cb6eca51f12f1bd29cda4eec484 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91b9bc4c5ecae9d5c2dff08842e23c32536d4377 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d4859e26cef6c9c79324cfc10126584c94b1585 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7f657fb20c063dfc2a653f050accc9c40d06a60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66328d76a10ea53e4dfe9a9d609b44f30f734c9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ee7e1a72aa2b9283223a8270a7aa9cb2cdb5ced ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f237620189a55d491b64cac4b5dc01b832cb3cbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2af601d5800a39ab04e9fe6cf22ef7b917ab5d67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a56136f9cb48a17ae15b59ae0f3f99d9303b1cb1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58998fb2dd6a1cad5faffdc36ae536ee6b04e3d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 62536252a438e025c16eebd842d95d9391e651d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 076446c702fd85f54b5ee94bccacc3c43c040a45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a358f2cfdc46a99db9e595d7368ecfecba52de0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95ff8274a0a0a723349416c60e593b79d16227dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dbfd290609fe43ca7d94e06cea0d60333343838 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ef53c53012c450adb8d5d386c207a98b0feb579 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ef12ae4c158fa8ddb78a70dcf8f90966758db81 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90dc03da3ebe1daafd7f39d1255565b5c07757cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 251128d41cdf39a49468ed5d997cc1640339ccbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a67f25298c80aaeb3633342c36d6e00e91d7bd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67648785d743c4fdfaa49769ba8159fcde1f10a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ce49598a25b48ad0ab38cc1101c5e2a42a918e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2b820f936132d460078b47e8de72031661f848c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5f034355962c5156f20b4de519aae18478b413a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b6cde8de6d40715cf445cf1a5d77cd9befbf4d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf8dc259fcc9c1397ea67cec3a6a4cb5816e3e68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79a36a54b8891839b455c2f39c5d7bc4331a4e03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a99953c07d5befc3ca46c1c2d76e01ecef2a62c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dcfe2423fb93587685eb5f6af5e962bff7402dc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8503a11eb470c82181a9bd12ccebf5b3443c3e40 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55c5f73de7132472e324a02134d4ad8f53bde141 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb43244026643e540a2fac35b2997c6aa0e139c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1c40f46bd547be663b4cd97a80704279708ea8a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 375e1e68304582224a29e4928e5c95af0d3ba2fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b3e769989c4928cf49e335f9e7e6f9465a6bf99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24d4926fd8479b8a298de84a2bcfdb94709ac619 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67260a382f3d4fb841fe4cb9c19cc6ca1ada26be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7231486c883003c43aa20a0b80e5c2de1152d17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53373c8069425af5007fb0daac54f44f9aadb288 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6cf7a7bd864fe1fb64d7bea0c231c6254f171e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67291f0ab9b8aa24f7eb6032091c29106de818ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 559b90229c780663488788831bd06b92d469107f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4aa750a96baf96ac766fc874c8c3714ceb4717ee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 42e89cc7c7091bb1f7a29c1a4d986d70ee5854ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eb497ba1bbcaeb05a413a226fd78e54a29a3ff5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54709d9efd4624745ed0f67029ca30ee2ca87bc9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aec58a9d386d4199374139cd1fc466826ac3d2cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3430bde60ae65b54c08ffa73de1f16643c7c3bfd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c352dba143e0b2d70e19268334242d088754229b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dca537f505e93248739478f17f836ae79e00783 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d678792d3154d5de04a5225079f2e0457b45b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bd708d41090fbe00acb41246eb22fa8b5632967 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b56d6778ee678081e22c1897ede1314ff074122a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1aea3af6dcabfe4c6414578b22bfbb31a7e1840 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edb28b9b2c2bd699da0cdf5a4f3f0f0883ab33a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc4e3cc8521f8315e98f38c5550d3f179933f340 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8cb31db6b3970d1e983f10b0e0b5eeda8348c7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 086af072907946295f1a3870df30bfa5cf8bf7b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bbaf1c5c792d14867890200db68da9fd82d5997 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6420d2e3a914da1b4ae46c54b9eaa3c43d8fd060 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aba0494701292e916761076d6d9f8beafa44c421 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ee08fce6ec508fdc6e577e3e507b342d048fa16 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fad63e83853a65ee9aa98d47a64da3b71e4c01af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b3c16c39953e7a6f55379403ca5d204dcbdb1e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92c7c8eba97254802593d80f16956be45b753fd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- feed81ea1a332dc415ea9010c8b5204473a51bdf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52912b549289b9df7eeada50691139df6364e92d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bbcf2fc648561e4fc90ee4cc5525a3257604ec1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a962464c1504d716d4acee7770d8831cd3a84b48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c121f60395ce47b2c0f9e26fbc5748b4bb27802d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 32da7feb496ef31c48b5cbe4e37a4c68ed1b7dd5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39335e6242c93d5ba75e7ab8d7926f5a49c119a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c418df44fd6ac431e10b3c9001699f516f3aa183 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ef889531eed9ac73ece70318d4eeb45d81b9bc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dd7aca043c197979e6b4b5ff951e2b62c320ef4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dffba51b4fd88f7d26a43cf6d1fbbe3cdb9f44d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6411bf1bf1ce403e8b38dbbdaf78ccdbe2b042dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c23ae3a48bb37ae7ebd6aacc8539fee090ca34bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8c31c6a6e9ffbfdbd292b8d687809b57644de27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ce2a4b235d2ebc38c3e081c1036e39bde9be036 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96402136e81bd18ed59be14773b08ed96c30c0f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c6ae79a7b38c7800c19e28a846cb2f227e52432 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46c4ec22d70251c487a1d43c69c455fc2baab4f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0788e0be3164acd65e3bc4b5bc1b51179b967ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 830070d7ed09d6eaa4bcaa84ab46c06c8fff33d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e8412226ffe0c046177fa6d838362bfbde60cd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72dddc7981c90a1e844898cf9d1703f5a7a55822 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3bd3c6b94c735c725f39959730de11c1cebe67a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 416daa0d11d6146e00131cf668998656186aef6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dfa1685aac22a83ba1f60d1b2d52abf5a3d842f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ede752333a851ee6ad9ec2260a0fb3e4f3c1b0b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b197de0ccc0faf8b4b3da77a46750f39bf7acdb3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0181a40db75bb27277bec6e0802f09a45f84ffb3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12db6bbe3712042c10383082a4c40702b800a36a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 552a0aa094f9fd22faf136cdbc4829a367399dfe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88732b694068704cb151e0c4256a8e8d1adaff38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f858c449a993124939e9082dcea796c5a13d0a74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2ad9a239b1a06ee19b8edcd273cbfb9775b0a66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0e0b97b1d595b9b54d57e5bd4774e2a7b97696df ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fdc8ecbc0c1d8a4b76ec653602c5ab06a9659c98 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66306f1582754ca4527b76f09924820dc9c85875 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddffe26850e8175eb605f975be597afc3fca8a03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 965ccefd8f42a877ce46cf883010fd3c941865d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdb4c7cb5b3dec9e4020aac864958dd16623de77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d6e1731b6324eba5abc029b26586f966db9fa4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1a82e45fc177cec8cffcfe3ff970560d272d0bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82ae723c8c283970f75c0f4ce097ad4c9734b233 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f207e0e15ad243dd24eafce8b60ed2c77d6e725 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15b6bbac7bce15f6f7d72618f51877455f3e0ee5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8437c014b0a9872168b01790f5423e8e9255840 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d5df2ce3addd9e9e1863f4f33665a16b415b71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c823d482d03caa8238b48714af4dec6d9e476520 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b06b13e61e8db81afdd666ac68f4a489cec87d5a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bbf02e0c648177b164560003cb51e50bc72b35cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5149c807ec5f396c1114851ffbd0f88d65d4c84f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0c187229cea1eb3f395e7e71f636b97982205ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b93ba7ca6913ce7f29e118fd573f6ed95808912b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c3a6889b654892b3636212b880fa50df0358679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9db2ff10e59b2657220d1804df19fcf946539385 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f21630bcf83c363916d858dd7b6cb1edc75e2d3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4754fa194360b4648a26b93cdff60d7906eb7f7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3910abfc2ab12a5d5a210b71c43b7a2318311323 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06914415434cf002f712a81712024fd90cea2862 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- caa0ea7a0893fe90ea043843d4e6ad407126d7b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fac8d40f535ec8f3d1cf2187fbbe3418d82cf62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- afcd64ebbb770908bd2a751279ff070dea5bb97c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc77e6b2862733a211c55cf29cc7a83c36c27919 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a25365fea0ea3b92ba96cc281facd308311def1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aab7dc2c7771118064334ee475dff8a6bb176b57 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66c41eb3b2b4130c7b68802dd2078534d1f6bf7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08e0d5f107da2e354a182207d5732b0e48535b66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76ac61a2b4bb10c8434a7d6fc798b115b4b7934d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e4a4545dd513204efb6afe40e4b50c3b5f77e50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bf8ce9464987c7b0dbe6acbc2cc2653e98ec739a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5962373da1444d841852970205bff77d5ca9377f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d5d143f72e4d588e3a0abb2ab82fa5a2c35e8aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93d530234a4f5533aa99c3b897bb56d375c2ae60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1b8d0c92e4b5797b95948bdb95bec7756f5189f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec731f448d304dfe1f9269cc94de405aeb3a0665 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b29388a8f9cf3522e5f52b47572af7d8f61862a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff389af9374116c47e3dc4f8a5979784bf1babff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b4f92c8eea41f20b95f9e62a39b210400f4d2a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2efa1b19061ad6ed9d683ba98a88b18bff3bfd9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ca7c019a359c64a040e7f836d3b508d6a718e28 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4486bcbbf49ad0eacf2d8229fb0e7e3432f440d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70bb7e4026f33803bb3798927dbf8999910700d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b02662d4e870a34d2c6d97d4f702fcc1311e5177 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e12ef59c559e3be8fa4a65e17c9c764da535716e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0210e394e0776d0b7097bf666bebd690ed0c0e4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3165753f9d0d69caabac74eee195887f3fea482 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8e914eb0dfe6a0eb2de66b6826af5f715aeed6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d248bb8362808121f6b6abfd316d83b65afa79 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c170c3e74b8ef90a2c7f47442eabce27411231 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e6827e98c2732863857c0887d5de4138a8ae48b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b1cfcc629e856b1384b811b8cf30b92a1e34fe1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52e28162710eb766ffcfa375ef350078af52c094 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85f38a1bbc8fc4b19ebf2a52a3640b59a5dcf9fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57d053792d1cde6f97526d28abfae4928a61e20f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 896830bda41ffc5998e61bedbb187addaf98e825 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83645971b8e134f45bded528e0e0786819203252 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bce7cc4a43e5843c9f4939db143a9d92bb45a18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b84602026c1cc7b9d83ab618efb6b48503e97af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6310480763cdf01d8816d0c261c0ed7b516d437a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6e23ed24b35c6154b4ee0da5ae51cd5688e5e67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a596e1284c8a13784fd51b2832815fc2515b8d6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d8269a04b2b03ebf53309399a8f0ea0a4822c11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba7c2a0f81f83c358ae256963da86f907ca7f13c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53c15282a84e20ebe0a220ff1421ae29351a1bf3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b586fbb94d5acc6e06980a8a96f66771280beda ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eacf90dff73ab7578cec1ba0d82930ef3044663 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ea7e265d1549613c12cbe42a2e012527c1a97e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09c88bec0588522afb820ee0dc704a936484cc45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aafde7d5a8046dc718843ca4b103fcb8a790332c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e355275c57812af0f4c795f229382afdda4bca86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74c7ed0e809d6f3d691d8251c70f9a5dab5fb18d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e5ef73d3d6d9b973a756fddd329cfa2a24884e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f6c697c0df4704206d2fd1572640f7f2bd80c73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 833ac6ec4c9f185fd40af7852b6878326f44a0b3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94ca83c6b6f49bb1244569030ce7989d4e01495c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a2f7dce43617b773a6be425ea155812396d3856 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3b9c0242ba2893231e0ab1c13fa2a0c8a9cfc59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a469af892b3e929cbe9d29e414b6fcd59bec246e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26253699f7425c4ee568170b89513fa49de2773c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be44602b633cfb49a472e192f235ba6de0055d38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d6b417ea3a4507ea78714f0cb7add75b13032d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86aa8738e0df54971e34f2e929484e0476c7f38a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4592785004ad1a4869d650dc35a1e9099245dad9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a521681ff8614beb8e2c566cf3c475baca22169 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a46f670ba62f9ec9167eb080ee8dce8d5ca44164 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0900c55a4b6f76e88da90874ba72df5a5fa2e88c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2253d39f3a5ffc4010c43771978e37084e642acc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdf1e68f6bec679edc3feb455596e18c387879c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6df78b19b7786b15c664a7a1e0bcbb3e7c80f8da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f73468bb9cb9e479a0b81e3766623c32802db579 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4572ffd483bf69130f5680429d559e2810b7f0e9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8b025f719b2c3203e194580bbd0785a26c08ebd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b440827a04ad23efb891eff28d90f172723c75d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0de60abc5eb71eff14faa0169331327141a5e855 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48c149c16a9bb06591c2eb0be4cca729b7feac3e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a79cf677744e2c1721fa55f934fa07034bc54b0a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06b16115bee85d7dd12a51c7476b0655068a970c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6b1a9272455ef80f01a48ea22efc85b7f976503 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06c9c919707ba4116442ca53ac7cf035540981f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13d399f4460ecb17cecc59d7158a4159010b2ac5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dc2f7358be152d8e87849ad6606461fb2a4dfd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d37049a815b11b594776d34be50e9c0ba8df497 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ba897b12024fd20681b7c2f1b40bdbbccd5df59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d84b960982b5bad0b3c78c4a680638824924004b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 361854d1782b8f59dc02aa37cfe285df66048ce6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f284a4e7c8861381b0139b76af4d5f970edb7400 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80cc71edc172b395db8f14beb7add9a61c4cc2b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae6e26ed4abac8b5e4e0a893da5546cd165d48e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b114f3bbe50f50477778a0a13cf99c0cfee1392a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6497d1e843cbaec2b86cd5a284bd95c693e55cc0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2528d11844a856838c0519e86fe08adc3feb5df1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e50a8e6156360e0727bedff32584735b85551c5b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df65f51de6ba67138a48185ff2e63077f7fe7ce6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 842fb6852781fd74fdbc7b2762084e39c0317067 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a01ec439e19df83a2ff17d198118bd5a31c488b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31fd955dfcc8176fd65f92fa859374387d3e0095 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41fd2c679310e3f7972bd0b60c453d8b622f4aea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31ad0a0e2588819e791f4269a5d7d7e81a67f8cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 395955609dfd711cc4558e2b618450f3514b28c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f48ef3177bbee78940579d86d1db9bb30fb0798d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2b92c66bed6d1eea7b8aefe3405b0898fbb2019 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5095c16894e6f4da814302349e8e32f84c8c13 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1d2d0683afa6328b6015c6a3aa6a6912a055756 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 794187ffab92f85934bd7fd2a437e3a446273443 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657cd7e47571710246375433795ab60520e20434 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25c207592034d00b14fd9df644705f542842fa04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0574b8b921dbfe1b39de68be7522b248b8404892 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e25da8ffc66fb215590a0545f6ad44a3fd06c918 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58934b8f939d93f170858a829c0a79657b3885e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26bb778b34b93537cfbfd5c556d3810f2cf3f76e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1481af08064e10ce485339c6c0233acfc646572 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e98416791566f44a407dcac07a1e1f1b0483544 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd8537b23ce85be6f9dacb7806e791b7f902a206 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d4d70844417bf484ca917326393ca31ff0d22bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44c6d0b368bc1ec6cd0a97b01678b38788c9bd9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5c1cb715664fd7a98160844572cc473cb6b87c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51f4a1407ef12405e16f643f5f9d2002b4b52ab9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e866c4a9897572a550f8ec13b53f6665754050cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f11fdf1d9d22a198511b02f3ca90146cfa5deb5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83ebc659ace06c0e0822183263b2c10fe376a43e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c70daba7a3d195d22ded363c9915b5433ce054 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf2335af23fb693549d6c4e72b65f97afddc5f64 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4ad7cee0f8723226446a993d4f1f3b98e42583a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df958981ad63edae6fceb69650c1fb9890c2b14f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4896fa2ccbd84553392e2a74af450d807e197783 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5db3d3c49ebe559cb80983d7bb855d4adf1b887 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 788bd7e55085cdb57bce1cabf1d68c172c53f935 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b827f8162f61285754202bec8494192bc229f75a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8ef023a5bab377764343c954bf453869def4807 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c6e5adab98a2ea4253fefc4f83598947f4993ee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e031a0ee8a6474154c780e31da2370a66d578cdc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 467416356a96148bcb01feb771f6ea20e5215727 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4006c4347788a078051dffd6b197bb0f19d50b86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cee0cec2d4a27bbc7af10b91a1ad39d735558798 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bde1038e19108ec90f899ce4aff7f31c1e387eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de894298780fd90c199ef9e3959a957a24084b14 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57550cce417340abcc25b20b83706788328f79bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ec4389bc3d1653af301e93fe0a6b25a31da9f3d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5e6676db845e10bdca47c3fcf8dca9dea75ec42 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572ebd6e92cca39100183db7bbeb6b724dde0211 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06571d7f6a260eda9ff7817764f608b731785d6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 137ee6ef22c4e6480f95972ef220d1832cdc709a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ff3a3e72b1ff79e75777ccdddc86f8540ce833d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d79951fba0994654104128b1f83990387d44ac22 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 451504f1e1aa84fb3de77adb6c554b9eb4a7d0ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 434505f1b6f882978de17009854d054992b827cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ed3cd7f798057c02799b6046987ed6a2e313126 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d9390866f9ce42870d3116094cd49e0019a970a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f128ae9a37036614c1b5d44e391ba070dd4326d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4cede2368aa980e30340f0ed0a1906d65fe1046c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 49a9f84461fa907da786e91e1a8c29d38cdb70eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1116ef7e1bcbbc71d0b654b63156b29bfbf9afab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07a8f73dca7ec7c2aeb6aa47aaf421d8d22423ad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9405ac82af3a804dba1f9797bdb34815e1d7a18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e61439b3018b0b9a8eb43e59d0d7cf32041e2fed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4b5ecc217154405ac0f6221af99a4ab18d067f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e02afbb7343a7a4e07e3dcf8b845ea2764d927c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 930d03fb077f531b3fbea1b4da26a96153165883 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ee291c469fc7ea6065ed22f344ed3f2792aa2ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df2fb548040c8313f4bb98870788604bc973fa18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7f403b1e82d4ada20d0e747032c7382e2a6bf63 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 105a8c0fb3fe61b77956c8ebd3216738c78a3dff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc2ec79a88a787f586df8c40ed0fd6657dce31dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25a2ebfa684f7ef37a9298c5ded2fc5af190cb42 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0eafc47c307ff0bf589ce43b623bd24fad744fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5c8ff218cb3ee5d3dd9119007ea8478626f6d2ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1124e19afc1cca38fec794fdbb9c32f199217f78 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5739cd466f77a60425bd2860895799f7c9359d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27f394a58b7795303926cd2f7463fc7187e1cce4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 278423faeb843fcf324df85149eeb70c6094a3bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17020d8ac806faf6ffa178587a97625589ba21eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9bebaca85a19e0ac8a776ee09981f0c826e1cafa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c572a8d95d8fa184eb58b15b7ff96d01ef1f9ec3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15ee5a505b43741cdb7c79f41ebfa3d881910a6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d22c40b942cca16ff9e70d879b669c97599406b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f4b410c955ea08bfb7842320afa568090242679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a3c95b408162c78b9a4230bb4f7274a94d0add4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da86442f6a7bf1263fb5aafdaf904ed2f7db839f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4510b3c42b85305c95c1f39be2b9872be52c2e5e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 200d3c6cb436097eaee7c951a0c9921bfcb75c7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b366d3fabd79e921e30b44448cb357a05730c42f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 618e6259ef03a4b25415bae31a7540ac5eb2e38a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec830a25d39d4eb842ae016095ba257428772294 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6891caf73735ea465c909de8dc13129cc98c47f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0b21f454ea43a5f67bc4905c641d95f8b6d96fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 902679c47c3d1238833ac9c9fdbc7c0ddbedf509 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa3f2fa76844e1700ba37723acf603428b20ef74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a5cebaeda2c5062fb6c727f457ee3288f6046ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fde89f2a65c2503e5aaf44628e05079504e559a0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85e78ca3d9decf8807508b41dbe5335ffb6050a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5efdad2502098a2bd3af181931dc011501a13904 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f495e94028bfddc264727ffc464cd694ddd05ab8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35658887753da7da9a32a297346fd4ee6e53d45c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7548a5c43f8c39a8143cdfb9003838e586313078 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 515a6b9ccf87bd1d3f5f2edd229d442706705df5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29eb301700c41f0af7d57d923ad069cbdf636381 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08a0fad2c9dcdfe0bbc980b8cd260b4be5582381 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2219f13eb6e18bdd498b709e074ff9c7e8cb3511 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55969cb6034d5b416946cdb8aaf7223b1c3cbea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04ff96ddd0215881f72cc532adc6ff044e77ea3e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45f8f20bdf1447fbfebd19a07412d337626ed6b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46201b346fec29f9cb740728a3c20266094d58b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 543d900e68883740acf3b07026b262176191ab60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9a7dc5fe98e1aa666445bc240055b21ed809824 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 783ad99b92faa68c5cc2550c489ceb143a93e54f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78f3f38d18fc88fd639af8a6c1ef757d2ffe51d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6581acaa7081d29dbf9f35c5ce78db78cf822ab8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b40d4b54e09a546dd9514b63c0cb141c64d80384 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b343718cc1290c8d5fd5b1217724b077153262a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5077fc7e4031e53f730676df4d8df5165b1d36cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88716d3be8d9393fcf5695dd23efb9c252d1b09e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8486f2d2e5c251d0fa891235a692fa8b1a440a89 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7bbaac26906863b9a09158346218457befb2821a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e836e5cdcc7e3148c388fe8c4a1bab7eeb00cc3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25844b80c56890abc79423a7a727a129b2b9db85 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1537aabfa3bb32199e321766793c87864f36ee9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9989f8965f34af5009361ec58f80bbf3ca75b465 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa70623a651d2a0b227202cad1e526e3eeebfa00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb20477629bf83e66edc721725effa022a4d6170 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f91ab7bb0dadfd165031f846ae92c9466dceb66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0be02e1471c99e5e5e4bd52db1019006d26c349 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ec2f8a4f26cec3fbbe1fb447058acaf508b39c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff0365e053a6fa51a7f4e266c290c5e5bd309f6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4ace5482efa4ca8769895dc9506d8eccfb0173d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bed46300fe5dcb376d43da56bbcd448d73bb2ea0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 082851e0afd3a58790fe3c2434f6d070f97c69c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df3dd9797c8afda79dfa99d90aadee6b0d7a093 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ba48ce5758fb2cd34db491845f3b9fdaefe3797 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79fdaf349fa8ad3524f67f1ef86c38ecfc317585 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f4b1618fbf3b9b1ecaa9812efe8ee822c9579b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51bf7cbe8216d9a1da723c59b6feece0b1a34589 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29724818764af6b4d30e845d9280947584078aed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5089d9d6c303b47936a741b7bdf37293ec3a1c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79c99c0f66c8f3c8d13258376c82125a23b1b5c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ef273914de9b8a50dd0dd5308e66de85eb7d44a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1210ec763e1935b95a3a909c61998fbd251b7575 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce87a2bec5d9920784a255f11687f58bb5002c4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3f24f64a20d1e09917288f67fd21969f4444acd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1faf84f8eb760b003ad2be81432443bf443b82e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eafe201905d85be767c24106eb1ab12efd3ee22 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6a6a109885856aeff374c058db0f92c95606a0b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7842e92ebaf3fc3380cc8d704afa3841f333748c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98889c3ec73bf929cdcb44b92653e429b4955652 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0235f910916b49a38aaf1fcbaa6cfbef32c567a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27a041e26f1ec2e24e86ba8ea4d86f083574c659 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ece57af3b69c38f4dcd19e8ccdd07ec38f899b23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d66f2b53af0d8194ee952d90f4dc171aa426c545 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5077dac4c7680c925f4c5e792eeb3c296a3b4c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d255f4c8fd905d1cd12bd42b542953d54ac8a8c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7a2d43495eb184b162f8284c157288abd36666a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06ea4a0b0d6fcb20a106f9367f446b13df934533 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39164b038409cb66960524e19f60e83d68790325 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4492c7965cd8e3c5faaf28b2a6414b04984720b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec35edc0150b72a7187f4d4de121031ad73c2050 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33940022821ec5e1c1766eb60ffd80013cb12771 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 123302cee773bc2f222526e036a57ba71d8cafa9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7228ca9bf651d9f06395419752139817511aabe1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 187fe114585be2d367a81997509b40e62fdbc18e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a8f96cc8a5135a0ece19e600da914dabca7d215 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 903826a50d401d8829912e4bcd8412b8cdadac02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db44286366a09f1f65986db2a1c8b470fb417068 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73ab28744df3fc292a71c3099ff1f3a20471f188 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00452efe6c748d0e39444dd16d9eb2ed7cc4e64a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8d6fb2898ba465bc1ade60066851134a656a76c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bebc4f56f4e9a0bd3e88fcca3d40ece090252e82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89ade7bfff534ae799d7dd693b206931d5ed3d4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb577c8a1eca8958415b76cde54d454618ac431e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2376bd397f084902196a929171c7f7869529bffc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e73c80dd2dd1c82410fb1ee0e44eca6a73d9f052 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 895f0bc75ff96ce4d6f704a4145a4debc0d2da58 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bcc4d55baef64825b4163c6fb8526a2744b4a86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5320a6f68ddec847fa7743ff979df8325552ffd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25c95ace1d0b55641b75030568eefbccd245a6e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a15afe217c7c35d9b71b00c8668ae39823d33247 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eedf3c133a9137723f98df5cd407265c24cc2704 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4937fcd0dad3be003b97926e3377b0565237c5b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05c468eaec0be6ed5a1beae9d70f51655dfba770 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc505ddd603b1570c2c1acc224698e1421ca8a6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b22a5e944b2f00dd8e9e6f0c8c690ef2d6204886 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9149c34a8b99052b4e92289c035a3c2d04fb8246 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c9497463b130cce1de1b5d0b6faada330ecdc96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c673ff2d267b927d2f70765da4dc3543323cc7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 819c4ed8b443baee06472680f8d36022cb9c3240 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c883d129066f0aa11d806f123ef0ef1321262367 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2807d494db24d4d113da88a46992a056942bd828 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d0d6c9824bdd5f2cd5f6886991bb5eadca5120d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26b0f3848f06323fdf951da001a03922aa818ac8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d47fc1b67836f911592c8eb1253f3ab70d2d533d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d04aeaa17e628f13d1a590a32ae96bc7d35775b5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcb6e8832a94776d670095935a7da579a111c028 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f77f9775277a100c7809698c75cb0855b07b884d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08938d6cee0dc4b45744702e7d0e7f74f2713807 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 19099f9ce7e8d6cb1f5cafae318859be8c082ca2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2c8c7f86e6a61307311ea6036dac4f89b64b500 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 504870e633eeb5fc1bd7c33b8dde0eb62a5b2d12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fbc182e6d4636f67f44e5893dee3dcedfa90e04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bbf1a3b801fb4e00c10f631faa87114dcd0462f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3c89a5e020bb4747fd9470ba9a82a54c33bb5fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d7a40f603412be7e1046b500057b08558d9d250 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1445b59bb41c4b1a94b7cb0ec6864c98de63814b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4adafc5a99947301ca0ce40511991d6d54c57a41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8da7852780a62d52c3d5012b89a4b15ecf989881 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2090b5487e69688be61cfbb97c346c452ab45ba2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76e19e4221684f24ef881415ec6ccb6bab6eb8e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3297fe50067da728eb6f3f47764efb223e0d6ea4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f1b69ad52670a67e8b766e89451080219871739 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cdf7c5aca2201cf9dfc3cd301264da4ea352b737 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccb653d655a7bf150049df079622f67fbfd83a28 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 722473e86e64405ac5eb9cb43133f8953d6c65d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6964e3efc4ac779d458733a05c9d71be2194b2ba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55d40df99085036ed265fbc6d24d90fbb1a24f95 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20a338ff049e7febe97411a6dc418a02ec11eefa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e61e3200d5c9c185a7ab70b2836178ae8d998c17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28afef550371cd506db2045cbdd89d895bec5091 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e77128e5344ce7d84302facc08d17c3151037ec3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 978eb5bd4751acf9d53c8b6626dc3f7832a20ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f533a68cb5295f912da05e061a0b9bca05b3f0c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfaf706d70c3c113b40ce1cbc4d11d73c7500d73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bdaa463f7c73d30d75d7ea954dd3c5c0c31617b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9debf6b0aafb6f7781ea9d1383c86939a1aacde3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f6713669a8a32af90a73d03a7fa24e6154327f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5b8220a1a967abdf2bae2124e3e22a9eea3729f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4c6851c55757fb0bc9d77da97d7db9e7ae232d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1875885485e7c78d34fd56b8db69d8b3f0df830c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dabd563ed3d9dc02e01fbf3dd301c94c33d6d273 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5324565457e38c48b8a9f169b8ab94627dc6c979 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af74966685e1d1f18390a783f6b8d26b3b1c26d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c877794b51f43b5fb2338bda478228883288bcdd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c042f56fc801235b202ae43489787a6d479cd277 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bb927dc12fae61141f1cc7fe4a94e0d68cb4232 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6271586d7ef494dd5baeff94abebbab97d45482b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2971489fec32160836519e66ca6b97987c33d0c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e328ffddec722be3fba2c9b637378e31e623d58e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07b124c118942bc1eec3a21601ee38de40a2ba0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ceae5e9f6bf753163f81af02640e5a479d2a55c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a91a659a3a7d8a099433d02697777221c5b9d16f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25f27c86af9901f0135eac20a37573469a9c26ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b533f86cf86c96a16f96c815533bdda0585f48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f4d5ce5f9459e4c7fe4fab95df1a1e4c9be61ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d97a8bb75098ad643d1a8853fe1b59cbb8e2338c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aae2a7328a4d28077a4b4182b4f36f19c953765b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e9481b4ddd70cf44ad041fba771ca5c02b84cf7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5982ff789e731c1cbd9b05d1c6826adf0cd8080b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5de21c7fa2bdd5cd50c4f62ba848af54589167d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f4af7c6db25c5bbec7fdc8dfc0ea6803350d94c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1815563ec44868121ae7fa0f09e3f23cacbb2700 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83156b950bb76042198950f2339cb940f1170ee2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcca77ad97d1dfb657e88519ce8772c5cd189743 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ad3931357e5bb01941b50482b4b53934c0b715e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ae1f213e1b99638ba685f58d489c0afa90a3991 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 121f6af3a75e4f48acf31b1af2386cdd5bf91e00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc9278fb4432f0244f4d780621d5c1b57a03b720 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41556dac4ca83477620305273a166e7d5d9f7199 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55db0fcce5ec5a92d2bdba8702bdfee9a8bca93d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbc07b421172da4ef3153753709271a71af6966a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2f6fef3c887719a250c78c22cba723b2200df1b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84869674124aa5da988188675c1336697c5bcf81 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8775f9b8e40b18352399445dba99dd1d805e8c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b10d5e75570ac6325d1c7e2b32882112330359a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b145de39700001d91662404221609b86d2c659d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b854878fb9df8d1a06c4e97bff5e164957b3a0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3fe8f5df5794015014c53e3adbf53acdb632a8a0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7b609c9f382685448193b59d09329b9a30c7580 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b295c13140f48e6a7125b4e4baf0a0ca03e1e393 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05a302c962afbe5b54e207f557f0d3f77d040dc8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f1110bd9b00cb8c1ea07c3aafe9cde89b3dbf9b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0de827a0e63850517aa93c576c25a37104954dba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d82a6c5ed9108be5802a03c38f728a07da57438e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1a59764096cef4048507cb50f0303f48b87a242 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0900a51f986f3ed736d9556b3296d37933018196 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a8700185dce5052ca1581b63432fb4d4839c226 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a929ab29016e91d661274fc3363468eb4a19b4b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13141e733347cea5b409aa54475d281acd1c9a3c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ed8939d6167571fc2b141d34f26694a79902fde2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbbcaf7a355e925911fa77e204dd2c38ee633c0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb5e177e5d7931e30b198b06b21809ef6a78b92 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d06e76bb243dda3843cfaefe7adc362aab2b7215 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec401e4807165485a4b7a2dad4f74e373ced35ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4faf5cd43dcd0b3eea0a3e71077c21f4d029eb99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e58e6a0d78f5298252b2d6c4b0431427ec6d152 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc8032d35a23bcc105f50b1df69a1da6fe291b90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cc0e6caa3117f694d367d3f3b80db1e365aac94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51f79ffeb829315c33ce273ae69baf0fdd1fbd1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2cc8f1e3c6627f0b4da7cb6550f7252f76529d8e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e1c90eb69e2dfd5fdf8418caa695112bd285f21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84fcf8e90fd41f93d77dd00bf1bc2ffc647340f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cd4caf15a2e977fc0f010c1532090d942421979c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 074842accb51b2a0c2c1193018d9f374ac5e948f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f8d9ca08352a28cba3b01e4340a24edc33e13e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8590424997ab1d578c777fe44bf7e4173036f93 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6eb3af27464ffba83e3478b0a0c8b1f9ff190889 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d768f67bd49f28fd2e626f3a8c12bd28ae5ce48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8b837923d506e265ff8bb79af61c0d86e7d5b2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec15e53439d228ec64cb260e02aeae5cc05c5b2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8f7e3772f68c8e6350b9ff5ac981ba3223f2d43 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 332521ac1d94f743b06273e6a8daf91ce93aed7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 039e265819cc6e5241907f1be30d2510bfa5ca6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8324c4b38cf37af416833d36696577d8d35dce7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0acb2229e1ebb59ab343e266fc5c1cc392a974e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c58887a2d8554d171a7c76b03bfa919c72e918e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2e4134963c971e3259137b84237d6c47964b018 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b307f04218e87b814fb57bd9882374a9f2b52922 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ab12b403207bb46199f46d5aaa72d3e82a3080d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c96f5885e1ec1e24b0f8442610de42bd8e168d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb6beb75aaa269a1e7751d389c0826646878e5fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11b3a1dfc2eb03094c4c437162ce504722fa7ddf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58c5b993d218c0ebc3f610c2e55a14b194862e1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1883eb9282468b3487d24f143b219b7979d86223 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fdb6a5eac7433098cfbb33d3e18d6dbba8fa3d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f360ecd7b2de173106c08238ec60db38ec03ee9b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65c07d64a7b1dc85c41083c60a8082b3705154c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1d33021feb7324e0f2f91c947468bf282f036d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c8a33e2c9cae8deef1770a5fce85acb2e85b5c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c272abea2c837e4725c37f5c0467f83f3700cd5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af44258fa472a14ff25b4715f1ab934d177bf1fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b21e2f1c0fdef32e7c6329e2bc1b4ce2a7041a2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdc38b83f4a6d39603dc845755df49065a19d029 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58c78e649cbac271dee187b055335c876fcb1937 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3438795d2af6d9639d1d6e9182ad916e73dd0c37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3d33c113b1dfa4be7e3c9924fae029c178505c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3068025b64bee24efc1063aba5138708737c158 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ee9751d4e9e9526dbe810b280a4b95a43105ec9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3e78d98e06439eea1036957796f8df9f386930f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 141b78f42c7a3c1da1e5d605af3fc56aceb921ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5e4334f38dce4cf02db5f11a6e5844f3a7c785c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9aaaa83c44d5d23565e982a705d483c656e6c157 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bbf04348b0c79be2103fd3aaa746685578eb12fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1578baf817c2526d29276067d2f23d28b6fab2b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9db24bc7a617cf93321bb60de6af2a20efd6afc1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80d43111b6bb73008683ad2f5a7c6abbab3c74ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86ec7573a87cd8136d7d497b99594f29e17406d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 02cb16916851336fcf2778d66a6d54ee15d086d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5a9bbef0d2d8fc5877dab55879464a13955a341 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 369e564174bfdd592d64a027bebc3f3f41ee8f11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36dbe7e9b55a09c68ba179bcf2c3d3e1b7898ef3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d0f693184884ffac97908397b074e208c63742b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 040108747e2f868c61f870799a78850b792ddd0a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 300831066507bf8b729a36a074b5c8dbc739128f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bea9077e8356b103289ba481a48d27e92c63ae7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0f47b3076a84c5c32cccc95748f18c50e3d948 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 195ecc3da4a851734a853af6d739c21b44e0d7f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85a45a691ad068a4a25566cc1ed26db09d46daa4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2efb814d0c3720f018f01329e43d9afa11ddf54 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfc70fe92d42a853d4171943bde90d86061e3f3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8724dfa6bf8f6de9c36d10b9b52ab8a1ea30c3b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 640d1506e7f259d675976e7fffcbc854d41d4246 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1a9a232fbde88a347935804721ec7cd08de6f65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a771adc5352dd3876dd2ef3d0c52c8e803fc084 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 643e6369553759407ca433ed51a5a06b47e763d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa0ccead680443b07fd675f8b906758907bdb415 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 982eefb2008826604d54c1a6622c12240efb0961 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1d5c614c38db015485190d65db05b0b75d171d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 152a60f0bd7c5b495a3ce91d0e45393879ec0477 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14851034ab5204ddb7329eb34bb0964d3f206f2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e15b57bf0bb40ccc6ecbebc5b008f7e96b436f19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c696b3cf0c2441aefaef3592e2b815472f162a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 32e4e08cf9ccfa90f0bc6d26f0c7007aeafcffeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 539980d51c159cb9922d0631a2994835b4243808 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a771e102ec2238a60277e2dce68283833060fd37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22d2e4a0bfd4c2b83e718ead7f198234e3064929 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1199f90c523f170c377bf7a5ca04c2ccaab67e08 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bafb4cc0a95428cbedaaa225abdceecee7533fac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8e700e952d135c6903b97f022211809338232e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e79604c8bdfc367f10a4a522c9bf548bdb3ab9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83017bce083c58f9a6fb0c7b13db8eeec6859493 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1143e1c66b8b054a2fefca2a23b1f499522ddb76 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5385cbd969cc8727777d503a513ccee8372cd506 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c594195eb614a200e1abb85706ec7b8b7c91268 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9563d27fbde02b8b2a8b0d808759cb235b4e083b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3470e269bcdc9091d0c5e25e7c09ce175c7cee77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96928d2eb3d98c475fd0737240c06bf8e5f96ad6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 545ac2574cfb75b02e407e814e10f76bc485926d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9a2ea80aa9970bbd625da4c986d29a36c405629 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8bf7d416f60f52335d128cf16fbba0344702e49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e39c8b07d1c98ddf267fbc69649ecbbe043de0fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a08733d76a8254a20a28f4c3875a173dcf0ad129 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cc1e7e08094494916db1aadda17e03ce695d049 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fe80b03196b1d2421109fad5b456ba7ae4393e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1cedc5c417ddf3c2a955514dcca6fe74913259b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c2dd54358dd526d1d08a8e4a977f041aff74174 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158bc981130bfbe214190cac19da228d1f321fe1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c6d952b17e63c92a060c08eac38165c6fafa869 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f233e2405c16e2b185aa90cc8e7ad257307b991 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bccdb483aaa7235b85a49f2c208ee1befd2706dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9f8f159ebad405b2c08aa75f735146bb8e216ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f51fe3e66d358e997f4af4e91a894a635f7cb601 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e129846a1a5344c8d7c0abe5ec52136c3a581cce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abd23a37d8b93721c0e58e8c133cef26ed5ba1f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 723f100a422577235e06dc024a73285710770fca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28d6c90782926412ba76838e7a81e60b41083290 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae334e4d145f6787fd08e346a925bbc09e870341 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b89b089972b5bac824ac3de67b8a02097e7e95d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98f6995bdcbd10ea0387d0c55cb6351b81a857fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae0b6fe15e0b89de004d4db40c4ce35e5e2d4536 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9dc8fffd179b3d7ad7c46ff2e6875cc8075fabf3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b0448b65317b2830270ff4156a25aca7941472 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d83f44007c5c581eae7ddc6c5de33311b7c1895 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f043d8a1d7f4076350ff0c778bfa60f7aa2f7aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8bbfea4cdcb36ce0e9ee7d7cad4c41096d4d54f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe426d404b727d0567f21871f61cc6dc881e8bf0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 873823f39275ceb8d65ebfae74206c7347e07123 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f662857381a0384bd03d72d6132e0b23f52deef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9e7a3d93da741f81a5af2e84422376c54f1f337 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab7c3223076306ca71f692ed5979199863cf45a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91562247e0d11d28b4bc6d85ba50b7af2bd7224b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 756b7ad43d0ad18858075f90ce5eaec2896d439c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fd07a0a7a6300db1db8b300a3f567b31b335570 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91645aa87e79e54a56efb8686eb4ab6c8ba67087 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7729245060f9aecfef4544f91e2656aa8d483ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54e27f7bbb412408bbf0d2735b07d57193869ea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47d9f1321c3a6da68a7909fcb1a66a209066d4c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c27cd907f67f984649ff459dacf3ba105e90ebc2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f498de9bfd67bcbb42d36dfb8ff9e59ec788825b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be81304f2f8aa4a611ba9c46fbb351870aa0ce29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c2502ee83927437442b13b83f3a7976e4146a01 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4df4159413a4bf30a891f21cd69202e8746c8fea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88f3dc2eb94e9e5ff8567be837baf0b90b354f35 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21a6cb7336b61f904198f1d48526dcbe9cba6eec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d91ca75500285d19c6ae2d4bf018452ad822a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5e607e8aa62ca3778f1026c27a927ee5c79749b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50f763cfe38a1d69a3a04e41a36741545885f1d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ffefb154982c6cc47c9be6b3eae6fb1170bb0791 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 630d030058c234e50d87196b624adc2049834472 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66c5b33fb5405fe12756f07048e3bcc3a958b2c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d1a489931ecbdd652111669c0bd86bcd6f5abbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ddbe4bc24e634e6496abd3bc6ce3c4377cdf2fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3236f8b966061b23ba063f3f7e1652764fee968f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ad07f7b23e762e3eb99ce45020375d2bd743fc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0acb8371bb2b68c2bda04db7cb2746ba3f9da86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ce3fe7cef8910aadc2a2b39a3dab4242a751380 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1410bcc76725b50be794b385006dedd96bebf0fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfcdf2bef08f17b4726b67f06c84be3bfe2c39b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f038611ff120f8283f0f1a56962f95b66730c72 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06bec1bcd1795192f4a4a274096f053afc8f80ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2feb62c17acd1dddb6cd125d8b90933c32f89e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c00567d3025016550d55a7abaf94cbb82a5c44fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98a17a28a21fe5f06dd2da561839fdbaa1912c64 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b54b9399920375f0bab14ff8495c0ea3f5fa1c33 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38fc944390d57399d393dc34b4d1c5c81241fb87 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2a9b2f22c6fb5bd3e30e674874dbc8aa7e5b00ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d565a874f29701531ce1fc0779592838040d3edf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d74543a545a9468cabec5d20519db025952efed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34c0831453355e09222ccc6665782d7070f5ddab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4d3809161fc54d6913c0c2c7f6a7b51eebe223f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 346424daaaf2bb3936b5f4c2891101763dc2bdc0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 261aedd2e13308755894405c7a76b72373dab879 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e48e52001d5abad7b28a4ecadde63c78c3946339 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f5320e8171324a002d3769824152cf5166a21a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1287f69b42fa7d6b9d65abfef80899b22edfef55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c6c81b3281333a5a1152f667c187c9dce12944 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ac93b1d7e0694ceb303ee72c312921a9b1588f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47ac37be2e0e14e958ad24dc8cba1fa4b7f78700 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ed61f72c611deb07e0368cebdc9f06da32150cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb0f3d78d6980a1d43f05cb17a8da57a196a34f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe2fbc5913258ef8379852c6d45fcf226b09900b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4921139819c7949abaad6cc5679232a0fbb0632 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34802014ca0c9546e73292260aab5e4017ffcd9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80701fc6f4bf74d3c6176d76563894ff0f3b32bb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a9a5414300a245b6e93ea4f39fbca792c3ec753f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9fbae711b76a4f2fa9345f43da6d2cdedd75d6c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26fc5866f6ed994f3b9d859a3255b10d04ee653d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea29541e213df928d356b3c12d4d074001395d3c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 508807e59ce9d6c3574d314d502e82238e3e606c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e395ac90bf088ad6b5de7dadb6531a6e7f3f4f3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b259098782c2248f6160d2b36d42672d6925023a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 048ffa58468521c043de567f620003457b8b3dbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27c31e2fde54c0587c032ccffdaa7c4ddf5b2ae5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df95149198744c258ed6856044ac5e79e6b81404 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a41a8b93167a59cd074eb3175490cd61c45b6f6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5054fdb1766cb035a1186c3cef4a14472fee98d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6569c4849197c9475d85d05205c55e9ef28950c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aaa84341f876927b545abdc674c811d60af00561 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53e5fb3733e491925a01e9da6243e93c2e4214c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20863cfe4a1b0c5bea18677470a969073570e41c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa1b156ee96f5aabdca153c152ec6e3215fdf16f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a223c7b7730c53c3fa1e4c019bd3daefbb8fd74b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619c989915b568e4737951fafcbae14cd06d6ea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4ce247c0380e3806e47b5b3e2b66c29c3ab2680 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be074c655ad53927541fc6443eed8b0c2550e415 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c15a6e1923a14bc760851913858a3942a4193cdb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e973e6f829de5dd1c09d0db39d232230e7eb01d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2b59625e9bde14b1d2d476e678326886ab1552 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d39529eea4d0ecfcd65a2d245284174cd2e0aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7b16ade191bb753ebadb45efe6be7386f67351d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8eae18dcc360e6ab96c2291982bd4306adc01b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67680a0877f01177dc827beb49c83a9174cdb736 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7671110bc865786ffe61cf9b92bf43c03759229 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 503b62bd76ee742bd18a1803dac76266fa8901bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ede325d15ba9cba0e7fe9ee693085fd5db966629 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43e430d7fa5298f6db6b1649c1a77c208bacf2fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfb0a9c4bca590efaa86f8edc3fdb62bd536bce7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acd82464a11f3c2d3edc1d152d028a142da31a9f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e84300df7deed9abf248f79526a5b41fd2f7f76e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 597bc56a32e1b709eefa4e573f11387d04629f0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- becf5efbfc4aee2677e29e1c8cbd756571cb649d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e8aa9b0aefc30ee5807c2b2cf433a38555b7e0b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c6ab4f7572fd5ca8638f3cb6e342d5000955e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfce49feb0be6c69f7fffc57ebdd22b6da241278 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b825dc74773ffa5c7a45b48d72616b222ad2023e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0cb95c5df7a559633c48f5b0f200599c4a62091 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c767b5206f1e9c8536110dda4d515ebb9242bbeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85a5a8c6a931f8b3a220ed61750d1f9758d0810a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18caa610d50b92331485013584f5373804dd0416 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d9f1495004710b77767393a29f33df76d7b0fb5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17f5d13a7a741dcbb2a30e147bdafe929cff4697 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1531d789df97dbf1ed3f5b0340bbf39918d9fe48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d52f98935b70cda4eede4d52cdad4e3b886f639 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 723d20f1156530b122e9785f5efc6ebf2b838fe0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b08651e5ae2bffef5e4fb44fbdd7d467715e3b73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc94b89dabd9df49631cbf6b18800325f3521864 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e40ad6369bc74d01af4dc41d3a9b8e25ac2aa01e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46889d1dce4506813206a8004f6c3e514f22b679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de4cfcc4a1fcb24b72a31c5feff8c67d2ff930fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 987f9bbd08446de3f9d135659f2e36ad6c9d14fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27b4efed7a435153f18598796473b3fba06c513d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7b7eb6245e7d7c4535975268a9be936e2c59dc8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7887c66483ffa9a839ecf1a53c5ef718dcd1d2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36cdfd3209909163549850709d7f12fdf1316434 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4a49ff2dddc66bbe25af554caba2351fbf21702 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45eb728554953fafcee2aab0f76ca65e005326b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6ee00d0dadcd7b10d60a2985db4fe137ca7cfed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d83f6e84cbeb45dce4576a9a4591446afefa50b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a6ffa13ae2951a168cde5908c7a94b16562b96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73790919dbe038285a3612a191c377bc27ae6170 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4b8e467e44bc1ca1ebf481ac2dfc1baaf9688dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 763ef75d12f0ad6e4b79a7df304c7b5f1b5a11f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6ed8d46c72366e111b9a97a7c238ef4af3bf4dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3efacd7aea48c93e0a42c1e83bf3c96e9e50f178 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c86bea60dde4016dd850916aa2e0db5260e1ff61 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d4b4ea9c84198a9b6003611a3af00ee677d09a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d437078d8f95cb98f905162b2b06d04545806c59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 491440543571b07c849c0ef9c4ebf5c27f263bc0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dec7a822424bbe58b7b2a7787b1ea32683a9c19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fce04b7e4e6e1377aa7f07da985bb68671d36ba4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28bda3aaa19955d1c172bd86d62478bee024bf7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6e4a6416162a698d87ba15693f2e7434beac644 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fd7b945dfca73caf00883d4cf43740edb7516df ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1bfb44c62d15a45ca4d47b4cc482ebddb8d0ae4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a182be6716d24fb49cb4517898b67ffcdfb5bca4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b18fd3fd13d0a1de0c3067292796e011f0f01a05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d0ad081ca0e723ba2a12c876b4cd1574485c726 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c824bcd73de8a7035f7e55ab3375ee0b6ab28c46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5c12ff49fc91e66f30c5dc878f5d764d08479558 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56e942318f3c493c8dcd4759f806034331ebeda5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d46e3fe9cb0dea2617cd9231d29bf6919b0f1e91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 68f8a43d1b643318732f30ee1cd75e1d315a4537 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3936084cdd336ce7db7d693950e345eeceab93a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ef4552404ba3bc92554a6c57793ee889523e3a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8cf69b6f8bd73525b5375bd73f1fc79ae322a82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1de8af907dbced4fde64ee2c7f57527fc43ad1cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1527b5734c0f2821fd6f38c1a1d70723a4bb88ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f55c17f48d7608072199496fbcefa33f2e97bf0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0c65d6638698f4e3a9e726efca8c0bcf466cd62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b9d3b961bdf79964b883d3179f085d8835e528d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 02e942b7c603163c87509195d76b2117c4997119 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c80d727e374321573bb00e23876a67c77ff466e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 725bde98d5cf680a087b6cb47a11dc469cfe956c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 965a08c3f9f2fbd62691d533425c699c943cb865 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95bb489a50f6c254f49ba4562d423dbf2201554f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acac4bb07af3f168e10eee392a74a06e124d1cdd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4cfc682ff87d3629b31e0196004d1954810b206c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c255c14e9eb15f4ff29a4baead3ed31a9943e04e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f219b53f339fc0133800fac96deaf75eb4f9bf6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79d9c4cb175792e80950fdd363a43944fb16a441 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a05e49d2419d65c59c65adf5cd8c05f276550e1d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4228b2cc8e1c9bd080fe48db98a46c21305e1464 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 60e54133aa1105a1270f0a42e74813f75cd2dc46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8535d1a2485b4e063ab9ef0a2719a1aab8187d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a83eee5bcee64eeb000dd413ab55aa98dcc8c7f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3e8ce69bec72277354eff252064a59f515d718a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5a37564b6eec05b98c2efa5edcd1460a2df02aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17f245cad19bf77a5a5fecdee6a41217cc128a73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45c1c99a22e95d730d3096c339d97181d314d6ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db828cdfef651dd25867382d9dc5ac4c4f7f1de3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7297ff651c3cc6abf648b3fe730c2b5b1f3edbd3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2840c626d2eb712055ccb5dcbad25d040f17ce1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a67e4e49c4e7b82e416067df69c72656213e886 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 342a0276dbf11366ae91ce28dcceddc332c97eaf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31b3673bdb9d8fb7feea8ae887be455c4a880f76 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863a40e0d35f3ff3c3e4b5dc9ff1272e1b1783b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1060a2a8c90c0730c3541811df8f906dac510a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de9a6bb0c8931e7f74ea35edb372e5ca7d0a5047 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a308613467a1510f8dac514624abae4e10c0779 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6becbaf35fa2f807837284d33649ba5376b3fe21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d0556a31916a709e9da3eafb92fc6b8bf69896c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9d884511ed2c8e9ca96de04df835aaa6eb973eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45eb6bd22554e5dad2417d185d39fe665b7a7419 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04357d0d46fee938a618b64daed1716606e05ca5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e1e19d33e1caa107dc0a6cc8c1bfe24d8153f51 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc8c91200a7fb2140aadd283c66b5ab82f9ad61e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 891b124f5cc6bfd242b217759f362878b596f6e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f879c71bdf0aac7af9b01304ff02e94b5af71b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2ff0f9d704dc776a1934f72a339da206a9fff4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 750e9677b1ce303fa913c3e0754c3884d6517626 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6fca2410a56225992959e5e4f8019e16757bfd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a47a9c8d8253d0ae2a233fa8599b1a1c54ec53f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6aa8d116eb33293c0a9d6d600eb7c32832758b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8511513540ece43ac8134f3d28380b96db881526 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a72a7a43ae004f1ae1be392d4322c07b25deff5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 616ae503462ea93326fa459034f517a4dd0cc1d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ae92aa57324849dd05997825c29242d2d654099 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f54c8919f297a5e5c34517d9fed0666c9d8aa10 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1234a1077f24ca0e2f1a9b4d27731482a7ed752b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88a7002acb50bb9b921cb20868dfea837e7e8f26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d9b7b09a7c66e19a608d76282eacc769e349150 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 257264743154b975bc156f425217593be14727a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d48ed95cc7bd2ad0ac36593bb2440f24f675eb59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ea782803efe1974471430d70ee19419287fd3d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fc9e6150957ff5e011142ec5e9f8522168602ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 706d3a28b6fa2d7ff90bbc564a53f4007321534f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3621c06c3173bff395645bd416f0efafa20a1da6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 123cb67ea60d2ae2fb32b9b60ebfe69e43541662 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22c4671b58a6289667f7ec132bc5251672411150 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5991698ee2b3046bbc9cfc3bd2abd3a881f514dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2baadf3aabe526bdaa5dfdf27fac0a1c63aa04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53b65e074e4d62ea5d0251b37c35fd055e403110 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b820e617ab21b372394bf12129c30174f57c5d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b6080369e7ee47b7d746685d264358c91d656bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5025b8de2220123cd80981bb2ddecdd2ea573f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da5e58a47d3da8de1f58da4e871e15cc8272d0e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da09f02e67cb18e2c5312b9a36d2891b80cd9dcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95436186ffb11f51a0099fe261a2c7e76b29c8a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2b9ac30337761fa0df74ce6e0347c5aabd7c072 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2af98929bd185cf1b4316391078240f337877f66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df6b87a793434065cd9a01fcaa812e3ea47c4dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90811b1bd194e4864f443ae714716327ba7596c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a40d848794133de7b6e028f2513c939d823767cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e231a4f184583fbac2d3ef110dacd1f015d5e1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7c4b323bb2d3960430b11134ee59438e16d254e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9eb902eee03806db5868fc84afb23aa28802e841 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81223de22691e2df7b81cd384ad23be25cfd999c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f277ba01f9a93fb040a365eef80f46ce6a9de85 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5cbe7d7de5a29c7e714214695df1948319408d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c2e872f742e7d3c64c7e0fdb85a5d711aff1970 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 322db077a693a513e79577a0adf94c97fc2be347 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba67e4ff74e97c4de5d980715729a773a48cd6bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e3883a0691ce1957996c5b37d7440ab925c731e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4d8fb73daa82420bdc69c37f0d58f7cb4cd505a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eee7af0e69a39da2dc6c5f109c10975fae5a93e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9780b7a0f39f66d6e1946a7d109fc49165b81d64 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6d544f67a1f3572781271b5f3030d97e6c6d9e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55885e0c4fc40dd2780ff2cde9cda81a43e682c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7aba59a2609ec768d5d495dafd23a4bce8179741 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8e70749887370a99adeda972cc3503397b5f9a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a1e0d7117b9e4ea4be3ef4895e8b2b4937ff98a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0e9eef45194039af6b8c22edf06cfd7cb106727a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f6b8bf020863f499bf956943a5ee56d067407f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c39afa1f85f3293ad2ccef684ff62bf0a36e73c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff13922f6cfb11128b7651ddfcbbd5cad67e477f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bed3b0989730cdc3f513884325f1447eb378aaee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a7e7a769087b1790a18d6645740b5b670f5086b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7dcb07947cd71f47b5e2e5f101d289e263506ca9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15c4a95ada66977c8cf80767bf1c72a45eb576b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18fff4d4a28295500acd531a1b97bc3b89fad07e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7ed51ba4c8416888f5744ddb84726316c461051 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 614907b7445e2ed8584c1c37df7e466e3b56170f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28fdf05b1d7827744b7b70eeb1cc66d3afd38c82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ddf05a78475a194ed1aa082d26b3d27ecc77475 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0441fdcbc4ea1ab8ce5455f2352436712f1b30bb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ab7ac2397d60f1a71a90bf836543f9e0dcad2d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8005591231c8ae329f0ff320385b190d2ea81df0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be34ec23c48d6d5d8fd2ef4491981f6fb4bab8e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d602f267c32e1e917599d9bcdcfec4eef05d477 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9bd04844725661c8aa2aef11091f01eeab69486 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a92ab8028c7780db728d6aad40ea1f511945fc8e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3287148a2f99fa66028434ce971b0200271437e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56d7a9b64b6d768dd118a02c1ed2afb38265c8b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5d11b750ecc982541d1f936488248f0b42d75d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d0473c1d1e6cadd986102712fff9196fff96212 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85b836b1efb8a491230e918f7b81da3dc2a232c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5558400e86a96936795e68bb6aa95c4c0bb0719 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 598cd1d7f452e05bfcda98ce9e3c392cf554fe75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8f10e74d815223341c3dd3b647910b6e6841bd6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56d5d0c70cf3a914286fe016030c9edec25c3ae0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5127e167328c7da2593fea98a27b27bb0acece68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 916c45de7c9663806dc2cd3769a173682e5e8670 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fbd096841ddcd532e0af15eb1f42c5cd001f9d74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6b08c27a031f8b8b0bb6c41747ca1bc62b72706 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e6957abf8cd88824282a19b74497872fe676a46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbe78c02cbdfd0a539a1e04976e1480ac0daf580 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c437ee5deb8d00cf02f03720693e4c802e99f390 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e94df6acd3e22ce0ec7f727076fd9046d96d57b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d38b9a916ab5bce9e5f622777edbc76bef617e93 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cccea02a4091cc3082adb18c4f4762fe9107d3b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3a728277877924e889e9fef42501127f48a4e77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4654ca3a17832a7d479e5d8e3296f004c632183 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e4a44b302d3a3e49aa014062b42de84480a8d4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f09906d27affb8d08a96c07fc3386ef261f97af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d45c76bd8cd28d05102311e9b4bc287819a51e0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03097c7ace28c5516aacbb1617265e50a9043a84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5869c5c1a51d448a411ae0d51d888793c35db9c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f573b6840509bf41be822ab7ed79e0a776005133 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b6f38d02c8ed1fb07eb6782b918f31efc4c42f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1ad78eb7494513f6c53f0226fe3cb7df4e67513 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c914637ab146c23484a730175aa10340db91be70 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27c577dfd5c7f0fc75cd10ed6606674b56b405bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f122a6aa3eb386914faa58ef3bf336f27b02fab0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59587d81412ca9da1fd06427efd864174d76c1c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5452aa820c0f5c2454642587ff6a3bd6d96eaa1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d43055d44e58e8f010a71ec974c6a26f091a0b7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5244f7751c10865df94980817cfbe99b7933d4d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9421cbc67e81629895ff1f7f397254bfe096ba49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db82455bd91ce00c22f6ee2b0dc622f117f07137 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48fab54afab49f18c260463a79b90d594c7a5833 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3e5d9cda8eae5b0f19ac25efada6d0b3b9e04e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ddd5e5ef89da7f1e3b3a7d081fbc7f5c46ac11c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c544101eed30d5656746080204f53a2563b3d535 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 007bd4b8190a6e85831c145e0aed5c68594db556 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a8bdce7a665a0b38fc822b7f05a8c2e80ccd781 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c5b87bcdd70810a20308384b0e3d1665f6d2922 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbd784b870a878ef6dbecd14310018cdaeda5c6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29d94c622a7f6f696d899e5bb3484c925b5d4441 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8828ced5818d793879ae509e144fdad23465d684 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ea3dbdf67af10ccc6ad22fb3294bbd790a3698f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b137f55232155b16aa308ec4ea8d6bc994268b0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ae512e69f37e37431239c8da6ffa48c75684f87 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 237d47b9d714fcc2eaedff68c6c0870ef3e0041a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5a75ab7533de99a4f569b05535061581cb07a41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9044abce7e7b3d8164fe7b83e5a21f676471b796 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eb7265c532e99e8e434e31f910b05c055ae4369 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56cc93a548f35a0becd49a7eacde86f55ffc5dc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a0ad305883201b6b3e68494fc70089180389f6e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9fc8b6c06b91dfddb73d18eaa8164e64cc2600a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7071ce13476cae789377c280aa274e6242fd756 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f3989f27e91119bb29cc1ed93751c3148762695 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c9fcd7745d2f0c933b46a694f77f85056133ca5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bc91d7495d7eb70a70c1f025137718f41486cd2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb53329253f8ec1d0eff83037ce70260b6d8fcce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcc166d3a6e235933e823e82e1fcf6160a32a5d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 678821a036c04dfbe331d238a7fe0223e8524901 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a61110053bca2bbf605b66418b9670cbd555802 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f24786fca46b054789d388975614097ae71c252e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8980057ccfcaca34b423804222a9f981350ac67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3b7263e0bb9cc1d94e483e66c1494e0e7982fd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6404168e6f990462c32dbe5c7ac1ec186f88c648 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48f5476867d8316ee1af55e0e7cfacacbdf0ad68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13e3a809554706905418a48b72e09e2eba81af2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 10809e8854619fe9f7d5e4c5805962b8cc7a434b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59879a4e1e2c39e41fa552d8ac0d547c62936897 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c390e223553964fc8577d6837caf19037c4cd6f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9b915b066f28f4ac7382b855a8af11329e3400d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ea761425b9fa1fda57e83a877f4e2fdc336a9a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0524096fa9f3add551abbf68ee22904b249d82f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8987f2746637cbe518e6fe5cf574a9f151472ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 64a4730ea1f9d7b69a1ba09b32c2aad0377bc10a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe311b917b3cef75189e835bbef5eebd5b76cc20 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36a984803df08b0f6eb5f8a73254dd64bc616b67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb52c96d7e849e68fda40e4fa7908434e7b0b022 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ffde74dd7b5cbc4c018f0d608049be8eccc5101 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ea450112501e0d9f11e554aaf6ce9f36b32b732 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfe3ba3e5c08ee88afe89cc331081bbfbf5520e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab5b6af0c2c13794525ad84b0a80be9c42e9fcf1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f03e6162f99e4bfdd60c08168dabef3a1bdb1825 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11e0a94f5e7ed5f824427d615199228a757471fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e583a9e22a7a0535f2c591579873e31c21bccae0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55eb3de3c31fd5d5ad35a8452060ee3be99a2d99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6192ad1aed30adc023621089fdf845aa528dde9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a023acbe9fc9a183c395be969b7fc7d472490cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e11f12adffec6bf03ea1faae6c570beaceaffc86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863b386e195bb2b609b25614f732b1b502bc79a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b9b6fe0dd99803c80a3a3c52f003614ad3e0adf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b3b65287e6849628066d5b9d08ec40c260a94dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc93c4f3ddade455cc4f55bc93167b1d2aeddc4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3061698403f0055d1d63be6ab3fbb43bd954e8e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f225d4b8c3d7eb90038c246a289a18c7b655da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35bceb16480b21c13a949eadff2aca0e2e5483fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea5d365a93a98907a1d7c25d433efd06a854109e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e91a05aabb73cca7acec1cc0e07d8a562e31b45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7fa5ef735754e640bd6be6c0a77088009058d74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 096897123ab5d8b500024e63ca81b658f3cb93da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 673b21e1be26b89c9a4e8be35d521e0a43a9bfa1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a98e0af511b728030c12bf8633b077866bb74e47 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 811a6514571a94ed2e2704fb3a398218c739c9e9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec0b85e2d4907fb5fcfc5724e0e8df59e752c0d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c7ac239a2c9e303233e58daee02101cc4ebf3d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6a2942a982c2541a6b6f7c67aa7dbf57ed060ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5ec638a77dd1cd38512bc9cf2ebae949e7a8812 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb7fd3f0dd99dc6c49da6fd7e78a392c4ef1b33 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a02e432530336f3e0db8807847b6947b4d9908d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3cc763d6ca57582964807fb171bc52174ef8d5e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2df73b317a4e2834037be8b67084bee0b533bfe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 031271e890327f631068571a3f79235a35a4f73e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70670586e082a9352c3bebe4fb8c17068dd39b4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e54cd8fed2d1788618df64b319a30c7aed791191 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4b50e7348815402634b6b559b48191dba00a751 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 460cafb81f86361536077b3b6432237c6ae3d698 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6720e8df09a314c3e4ce20796df469838379480d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ab169407354d4b9512447cd9c90e8a31263c275 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56488ced0fae2729b1e9c72447b005efdcd4fea7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b424f87a276e509dcaaee6beb10ca00c12bb7d29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 294ee691d0fdac46d31550c7f1751d09cfb5a0f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96d003cb2baabd73f2aa0fd9486c13c61415106e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46f63c30e30364eb04160df71056d4d34e97af21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87ae42528362d258a218b3818097fd2a4e1d6acf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f631214261a7769c8e6956a51f3d04ebc8ce8efd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 468cad66ff1f80ddaeee4123c24e4d53a032c00d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1053448ad885c633af9805a750d6187d19efaa6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90b20e5cd9ba8b679a488efedb1eb1983e848acf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fbb7027ec88e2e4fe7754f22a27afe36813224b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8ce24a835cae8c623e2936bec2618a8855c605b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65747a216c67c3101c6ae2edaa8119d786b793cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9004e3a1cf33110f2cbc458f1dc3259c930ad9b4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d0f24c9facb5be0c98c8859a5ce3c6b0d08504ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0cfe75db81bc099e4316895ff24d65ef865bced6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf1d5bd4208514bab3e6ee523a70dff8176c8c80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 523fb313f77717a12086319429f13723fe95f85e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f24736ad5b55a89b1057d68d6b3f3cd01018a2e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3175b5b21194bcc8f4448abe0a03a98d3a4a1360 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7da101ba9a09a22a85c314a8909fd23468ae66f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d810f2700f54146063ca2cb6bb1cf03c36744a2c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b2e9a8312412b9c8d4e986510dcc30ee16c5f4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fca367548e365f93c58c47dea45507025269f59a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3203cd7629345d32806f470a308975076b2b4686 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b81273e70c9c31ae02cb0a2d6e697d7a4e2b683a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c12fef1b1971ba7a50e7e5c497caf51e0f68479 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e86eb305a542cee5b0ff6a0e0352cb458089bf62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48a17c87c15b2fa7ce2e84afa09484f354d57a39 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98a313305f0d554a179b93695d333199feb5266c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 968ffb2c2e5c6066a2b01ad2a0833c2800880d46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cb68eef0865df6aedbc11cd81888625a70da6777 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b813371f5a8af95152cae109d28c7c97bfaf79f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6befb28efd86556e45bb0b213bcfbfa866cac379 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86523260c495d9a29aa5ab29d50d30a5d1981a0c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d6310db456de9952453361c860c3ae61b8674ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ca0f897376e765989e92e44628228514f431458 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c946bf260d3f7ca54bffb796a82218dce0eb703f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 685760ab33b8f9d7455b18a9ecb8c4c5b3315d66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83a9e4a0dad595188ff3fb35bc3dfc4d931eff6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 264ba6f54f928da31a037966198a0849325b3732 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22a88a7ec38e29827264f558f0c1691b99102e23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6019e16d5a74dc49eb7129ee7fd78b4de51dac2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec0657cf5de9aeb5629cc4f4f38b36f48490493e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 517ae56f517f5e7253f878dd1dc3c7c49f53df1a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fafe8a77db75083de3e7af92185ecdb7f2d542d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a17c43d0662bab137903075f2cff34bcabc7e1d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c72b9a3eaabbe927ba77d4f69a62f35fbe60e2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20b07fa542d2376a287435a26c967a5ee104667f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dd51f1d63fa5ee704c2bdf4cb607bb6a71817d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e0e315a371cdfc80993a1532f938d56ed7acee4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- beccf1907dae129d95cee53ebe61cc8076792d07 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7029773512eee5a0bb765b82cfdd90fd5ab34e15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8d0aa1ef19e2c3babee458bd4504820f415148e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca3fdbe2232ceb2441dedbec1b685466af95e73b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61f3db7bd07ac2f3c2ff54615c13bf9219289932 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8867348ca772cdce7434e76eed141f035b63e928 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f24f9540afc0db61d197bc4932697737bff1506 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a21a9f6f13861ddc65671b278e93cf0984adaa30 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b00ad00130389f5b00da9dbfd89c3e02319d2999 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5bd7d44ff7e51105e3e277aee109a45c42590572 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ab454f0ccf09773a4f51045329a69fd73559414 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ccd777c386704911734ae4c33a922a5682ac6c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7dd618655c96ff32b5c30e41a5406c512bcbb65f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ad01ee239f9111133e52af29b78daed34c52e49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45c0f285a6d9d9214f8167742d12af2855f527fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a93eb7e8484e5bb40f9b8d11ac64a1621cf4c9cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1545bd9cd6953c5b39c488bf7fe179676060499 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8014d2ec56fd684dc81478dee73ca7eda0ab8a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e5aae2fc8c3832bdae1cd5e0a269405fb059231 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1d1d2cb421f16bd277d7c4ce88398ff0f5afb29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cf2d5fcf0a3db793678dd6ba9fc1c24d4eeb36a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a25e1d4aa7e5898ab1224d0e5cc5ecfbe8ed8821 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 739fa140235cc9d65c632eaf1f5cacc944d87cfb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bd7fb976ab0607592875b5697dc76c117a18dc73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebe8f644e751c1b2115301c1a961bef14d2cce89 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9519f186ce757cdba217f222c95c20033d00f91d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 75c75fa136f6181f6ba2e52b8b85a98d3fe1718e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dec4663129f72321a14efd6de63f14a7419e3ed2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d5bfb5d6d22f8fe8c940f36e1fbe16738965d5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f2d76ba8e6d004ff5849ed8c7c34f6a4ac2e1e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c34d5c3f2a4ed7194276a026e0ec6437d339c67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b6b9510e0724bfcb4250f703ddf99d1e4020bbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf5eaddde33e983bc7b496f458bdd49154f6f498 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0b92e40ece170b59bced0cea752904823e06e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c0990b2a6dd2e777b46c1685ddb985b3c0ef59a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 97ab197140b16027975c7465a5e8786e6cc8fea1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c1834134ce177cdbd30a56994fcc4bf8f5be8b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8858a63cb33319f3e739edcbfafdae3ec0fefa33 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82849578e61a7dfb47fc76dcbe18b1e3b6a36951 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94029ce1420ced83c3e5dcd181a2280b26574bc9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a320abc52307b4d4010166bd899ac75024ec9a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13647590f96fb5a22cb60f12c5a70e00065a7f3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1687283c13caf7ff8d1959591541dff6a171ca1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 741dfaadf732d4a2a897250c006d5ef3d3cd9f3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0019d7dc8c72839d238065473a62b137c3c350f5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cc4d748a132377ffe63534e9777d7541a3253c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4d5caa79e6d88bb3f98bfbefa3bfa039c7e157a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f88fb96869b6ac3ed4dac7d23310a9327d3c89c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 609a46a72764dc71104aa5d7b1ca5f53d4237a75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 394ed7006ee5dc8bddfd132b64001d5dfc0ffdd3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e6234c27abf041e4c8cd1a799950e7cd9104f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 192472f9673b18c91ce618e64e935f91769c50e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b03933057df80ea9f860cc616eb7733f140f866e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89422841e46efa99bda49acfbe33ee1ca5122845 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e84d05f4bbf7090a9802e9cd198d1c383974cb12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d9310055f364cf3fa97f663287c596920d6e7e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef48ca5f54fe31536920ec4171596ff8468db5fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 694265664422abab56e059b5d1c3b9cc05581074 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b3ef45167e1c2f7d1b7507c13fcedd914f87da9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbb58869063fe803d232f099888fe9c23510de7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33964afb47ce3af8a32e6613b0834e5f94bdfe68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33819a21f419453bc2b4ca45b640b9a59361ed2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98e6edb546116cd98abdc3b37c6744e859bbde5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17a172920fde8c6688c8a1a39f258629b8b73757 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d061a1a506b71234f783628ba54a7bdf79bbce9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24740f22c59c3bcafa7b2c1f2ec997e4e14f3615 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78d2cd65b8b778f3b0cfef5268b0684314ca22ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bcd37b68533d0cceb7e73dd1ed1428fa09f7dc17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b4db556619db2ef25f0e0d90fef7e38e6713e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55b67e8194b8b4d9e73e27feadbf9af6593e4600 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f73e8ba55f33394161b403bf7b8c2e0e05f47b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de3b9639a4c2933ebb0f11ad288514cda83c54fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af5abca21b56fcf641ff916bd567680888c364aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 258403da9c2a087b10082d26466528fce3de38d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4fd7fca515ba9b088a7c811292f76f47d16cd7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08457a7a6b6ad4f518fad0d5bca094a2b5b38fbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ceee7d7e0d98db12067744ac3cd0ab3a49602457 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3288a244428751208394d8137437878277ceb71f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 624556eae1c292a1dc283d9dca1557e28abe8ee3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b425301ad16f265157abdaf47f7af1c1ea879068 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f97653aa06cf84bcf160be3786b6fce49ef52961 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca288d443f4fc9d790eecb6e1cdf82b6cdd8dc0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00ce31ad308ff4c7ef874d2fa64374f47980c85c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4287f65878000b42d11704692f9ea3734014b4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01ab5b96e68657892695c99a93ef909165456689 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d36f8ff4d1274a8815e932285ad6dbd6b2888af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f683c6623f73252645bb2819673046c9d397c567 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc31651674648f026464fd4110858c4ffeac3c18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e2f63e64875a29e8c01a7ae17f5744680167a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd96cceded27d1372bdc1a851448d2d8613f60f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f068cdc5a1a13539c4a1d756ae950aab65f5348b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6917ae4ce9eaa0f5ea91592988c1ea830626ac3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3bd05b426a0e3dec8224244c3c9c0431d1ff130 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9059525a75b91e6eb6a425f1edcc608739727168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1401803ccf7db5d897a5ef4b27e2176627c430e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ebc6193f7205fd1686678a5707262cb1c59bb0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73959f3a2d4f224fbda03c8a8850f66f53d8cb3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8d2239f24f6a54d98201413d4f46256df0d6a5f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28a33ca17ac5e0816a3e24febb47ffcefa663980 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a32a6bcd784fca9cb2b17365591c29d15c2f638e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58fb1187b7b8f1e62d3930bdba9be5aba47a52c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fe889ea0cb2547584075dc1eb77f52c54b9a8c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fde6522c40a346c8b1d588a2b8d4dd362ae1f58f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c6d7830d9b87f47a0bfe82b3b5424a32e3164ad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 402a6c2808db4333217aa300d0312836fd7923bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47e3138ee978ce708a41f38a0d874376d7ae5c78 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0369384c8b79c44c5369f1b6c05046899f8886da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f963881e53a9f0a2746a11cb9cdfa82eb1f90d8c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- feb1ea0f4aacb9ea6dc4133900e65bf34c0ee02d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18be0972304dc7f1a2a509595de7da689bddbefa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55dcc17c331f580b3beeb4d5decf64d3baf94f2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77cd6659b64cb1950a82e6a3cccdda94f15ae739 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 129f90aa8d83d9b250c87b0ba790605c4a2bb06a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 791765c0dc2d00a9ffa4bc857d09f615cfe3a759 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57050184f3d962bf91511271af59ee20f3686c3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 160081b9a7ca191afbec077c4bf970cfd9070d2c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 778234d544b3f58dd415aaf10679d15b01a5281f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e2265a23ecec4e4d9ad60d788462e7f124f1bb7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91725f0fc59aa05ef68ab96e9b29009ce84668a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4f49fb232acb2c02761a82acc12c4040699685d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aea0243840a46021e6f77c759c960a06151d91c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0fdf6c3aaff49494c47aaeb0caa04b3016e10a26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2d9197cfe5d3b43cb8aee182b2e65c73ef9ab7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c0ef65b43688b1a4615a1e7332f6215f9a8abb19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac62760c52abf28d1fd863f0c0dd48bc4a23d223 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69dd8750be1fbf55010a738dc1ced4655e727f23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be97c4558992a437cde235aafc7ae2bd6df84ac8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f164627a85ed7b816759871a76db258515b85678 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1044116d25f0311033e0951d2ab30579bba4b051 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b82dbf538ac0d03968a0f5b7e2318891abefafaa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e837b901dcfac82e864f806c80f4a9cbfdb9c9f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d2307532d679393ae067326e4b6fa1a2ba5cc06 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06590aee389f4466e02407f39af1674366a74705 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9dbf201b4f0b3c2b299464618cb4ecb624d272c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38b3cfb9b24a108e0720f7a3f8d6355f7e0bb1a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9240918aa03e49feabe43af619019805ac76786 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abaefc59a7f2986ab344a65ef2a3653ce7dd339f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe5289ed8311fecf39913ce3ae86b1011eafe5f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af32b6e0ad4ab244dc70a5ade0f8a27ab45942f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28ed48c93f4cc8b6dd23c951363e5bd4e6880992 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c1faef799095f3990e9970bc2cb10aa0221cf9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86ea63504f3e8a74cfb1d533be9d9602d2d17e27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f91495e271597034226f1b9651345091083172c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c1169f6ea406fec1e26e99821e18e66437e65eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a0b79ee574999ecbc76696506352e4a5a0d7159 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a243827ab3346e188e99db2f9fc1f916941c9b1a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d8a577ffc6ad7ce1465001ddebdc157aecc1617 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fbb69306c0e14bacb8dcb92a89af27d3d5d631f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be8955a0fbb77d673587974b763f17c214904b57 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25dca42bac17d511b7e2ebdd9d1d679e7626db5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e746f96bcc29238b79118123028ca170adc4ff0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a28942bdf01f4ddb9d0b5a0489bd6f4e101dd775 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e79999c956e2260c37449139080d351db4aa3627 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e80445ad5cb6da4c0070d7cb8af89da3b0803b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cac6e06cc9ef2903a15e594186445f3baa989a1a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d9b1f4f9fa8c9f030e3207e7deacc5d5f8bba4e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b01ca6a3e4ae9d944d799743c8ff774e2a7a82b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29eb123beb1c55e5db4aa652d843adccbd09ae18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ee2afb00afaf77c883501eac8cd614c8229a444 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1906ee4df9ae4e734288c5203cf79894dff76cab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f606937a7a21237c866efafcad33675e6539c103 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e14e3f143e7260de9581aee27e5a9b2645db72de ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecf37a1b4c2f70f1fc62a6852f40178bf08b9859 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e2b46138ba58033738a24dadccc265748fce2ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 257a8a9441fca9a9bc384f673ba86ef5c3f1715d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18e3252a1f655f09093a4cffd5125342a8f94f3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1873db442dc7511fc2c92fbaeb8d998d3e62723d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de84cbdd0f9ef97fcd3477b31b040c57192e28d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b4a514e51fbc7dc6ddcb27c188159d57b5d1fa9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 365fb14ced88a5571d3287ff1698582ceacd80d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ff864138cd1e680a78522c26b583639f8f5e313 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17af1f64d5f1e62d40e11b75b1dd48e843748b49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26e138cb47dccc859ff219f108ce9b7d96cbcbcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea81f14dafbfb24d70373c74b5f8dabf3f2225d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 583e6a25b0d891a2f531a81029f2bac0c237cbf9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1019d4cf68d1acdbb4d6c1abb7e71ac9c0f581af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38d59fc8ccccae8882fa48671377bf40a27915a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07996a1a1e53ffdd2680d4bfbc2f4059687859a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01eac1a959c1fa5894a86bf11e6b92f96762bdd8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d1212e8c412b0b4802bc1080d38d54907db879d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 600fcbc1a2d723f8d51e5f5ab6d9e4c389010e1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f8ce8901e21587cd2320562df412e05b5ab1731 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57a4e09294230a36cc874a6272c71757c48139f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfb278d74ad01f3f1edf5e0ad113974a9555038d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fbe062bf6dacd3ad63dd827d898337fa542931ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8caeec1b15645fa53ec5ddc6e990e7030ffb7c5a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b86f9b399a8f5af792a04025fdeefc02883f3e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0974f8737a3c56a7c076f9d0b757c6cb106324fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3323464f85b986cba23176271da92a478b33ab9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c34343d0b714d2c4657972020afea034a167a682 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de5bc8f7076c5736ef1efa57345564fbc563bd19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 282018b79cc8df078381097cb3aeb29ff56e83c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e6bece08aea01859a232e99a1e1ad8cc1eb7d36 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c36f3648e39ace752c67c71867693ce1eee52a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c083f3d0b853e723d0d4b00ff2f1ec5f65f05cba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 538820055ce1bf9dd07ecda48210832f96194504 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a988e6985849e4f6a561b4a5468d525c25ce74fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55e757928e493ce93056822d510482e4ffcaac2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 837c32ba7ff2a3aa566a3b8e1330e3db0b4841d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae5a69f67822d81bbbd8f4af93be68703e730b37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1090701721888474d34f8a4af28ee1bb1c3fdaaa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63761f4cb6f3017c6076ecd826ed0addcfb03061 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e1c89ec97ec90037583e85d0e9e71e9c845a19b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2054561da184955c4be4a92f0b4fa5c5c1c01350 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e41c727be8dbf8f663e67624b109d9f8b135a4ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a25347d7f4c371345da2348ac6cceec7a143da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2c8d26d3b25b864ad48e6de018757266b59f708 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 143b927307d46ccb8f1cc095739e9625c03c82ff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c1a87d11df666d308d14e4ae7ee0e9d614296b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15941ca090a2c3c987324fc911bbc6f89e941c47 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22a0289972b365b7912340501b52ca3dd98be289 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df0892351a394d768489b5647d47b73c24d3ef5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f78d4a28f307a9d7943a06be9f919304c25ac2d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d6ceabf5b90e7c0690360fc30774d36644f563c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e2ba9c2028f21d11988558f3557905d21e93808 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 772b95631916223e472989b43f3a31f61e237f31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b75c3103a700ac65b6cd18f66e2d0a07cfc09797 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be06e87433685b5ea9cfcc131ab89c56cf8292f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 898d47d1711accdfded8ee470520fdb96fb12d46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5c0002d069382db1768349bf0c5ff40aafbf140 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69361d96a59381fde0ac34d19df2d4aff05fb9a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b48e4d3aa853687f420dc51969837734b70bfdec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 654e54d200135e665e07e9f0097d913a77f169da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e825f8b69760e269218b1bf1991018baf3c16b04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13dd59ba5b3228820841682b59bad6c22476ff66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b8902e033430000481eb355733cd7065342037 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 583cd8807259a69fc01874b798f657c1f9ab7828 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- def0f73989047c4ddf9b11da05ad2c9c8e387331 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619c11787742ce00a0ee8f841cec075897873c79 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 501bf602abea7d21c3dbb409b435976e92033145 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edd9e23c766cfd51b3a6f6eee5aac0b791ef2fd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53152a824f5186452504f0b68306d10ebebee416 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 997b7611dc5ec41d0e3860e237b530f387f3524a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c3c271b0d6b5f56b86e3f177caf3e916b509b52 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3776f7a766851058f6435b9f606b16766425d7ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72bcdbd0a0c8cc6aa2a7433169aa49c7fc19b55b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619662a9138fd78df02c52cae6dc89db1d70a0e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09c3f39ceb545e1198ad7a3f470d4ec896ce1add ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4956c1e618bfcfeef86c6ea90c22dd04ca81b9db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8a448b7864e21db46184eab0f0a21d7725d074f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d996892ac76199886ba3e2754ff9c9fac2456d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bfdf93201ea413affd4c8fbe406ea2b4a7c1b6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a252661c3bf4202a4d571f9c41d2afa48d9d75f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e14ab55a060a5637e9a4a40e40714c1f441d952 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 867129e2950458ab75523b920a5e227e3efa8bbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4375386fb9d8c7bc0f952818e14fb04b930cc87d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b27292936c81637f6b9a7141dafaad1126f268e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f96ee7463e2454e95bf0d77ca4fe5107d3f24d68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3cde0ee162b8f0cb67da981311c8f9c16050a62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76fd1d4119246e2958c571d1f64c5beb88a70bd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec28ad575ce1d7bb6a616ffc404f32bbb1af67b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 180a5029bc3a2f0c1023c2c63b552766dc524c41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b72e2704022d889f116e49abf3e1e5d3e3192d3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a803803f40163c20594f12a5a0a536598daec458 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab59f78341f1dd188aaf4c30526f6295c63438b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bb2fc8129ed9adabec6a605bfe73605862b20d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61138f2ece0cb864b933698174315c34a78835d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15ee0ac0d56a5fb5ba13fae4288621ddd2185f17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50e469109eed3a752d9a1b0297f16466ad92f8d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 400d728c99ddeae73c608e244bd301248b5467fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65c9fe0baa579173afa5a2d463ac198d06ef4993 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77cde0043ceb605ed2b1beeba84d05d0fbf536c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c69b6b979e3d6bd01ec40e75b92b21f7a391f0ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d86e77edd500f09e3e19017c974b525643fbd539 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b3feddd1269a0b0976f4eef2093cb0dbf258f99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dcf2c3bd2aaf76e2b6e0cc92f838688712ebda6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a38a0053d31d0285dd1e6ebe6efc28726a9656cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 697702e72c4b148e987b873e6094da081beeb7cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b1a2271a03313b561f5b786757feaded3d41b23f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc66da0d66a9024f0bd86ada1c3cd4451acd8907 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16a0c64dd5e69ed794ea741bc447f6a1a2bc98e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54844a90b97fd7854e53a9aec85bf60564362a02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a97d21936200f1221d8ddd89202042faed1b9bcb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35057c56ce118e4cbd0584bd4690e765317b4c38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a417f4cf2df39704aa4c869e88d14e9806894a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c76a8c5499d22b9c0b4c56f03b671033eb9f9bdd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3326f34712f6a96c162033c7ccf370c8b7bc1ead ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6102b349cbef03667d5715fcfae3161701a472d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4133f51817145e99b896c7063584d4dd18ad59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e29a91324ca7086b948a9e3a4dbcbb2254a24a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4ed59a86909b142ede105dd9262915c0e2993ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e729429631c84c3bd5602edcab3e7c2ab1dcce0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12276fedec49c855401262f0929f088ebf33d2cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d00fa4f6cad398250ce868cef34357b45abaad3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c05ef0e7543c2845fd431420509476537fefe2b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1eae9d1532e037a4eb08aaee79ff3233d2737f31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bae67b87039b3364bdc22b8ef0b75dd18261814c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 615de50240aa34ec9439f81de8736fd3279d476d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f22ddca351c45edab9f71359765e34ae16205fa1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bac518bfa621a6d07e3e4d9f9b481863a98db293 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f7255c2c1d9e54fc2f6390ad3e0be504e4099d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8775b6417b95865349a59835c673a88a541f3e13 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ba46b8fba511fdc9b8890c36a6d941d9f2798fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2740d2cf960cec75e0527741da998bf3c28a1a45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1391bf06a839746bd902dd7cba2c63d1e738d37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f28a2041f707986b65dbcdb4bb363bb39e4b3f77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- accfe361443b3cdb8ea43ca0ccb8fbb2fa202e12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ef66a66dc52dcdf44cebe435de80634e1beb268 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa98250e1dd7f296b36e0e541d3777a3256d676c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d638bf6e55bc64c230999c9e42ed1b02505d0ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aaeb986f3a09c1353bdf50ab23cca8c53c397831 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c92df685d6c600a0a3324dff08a4d00d829a4f5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e40b5f075bdb9d6c2992a0a1cf05f7f6f4f101a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5f92b17729e255ca01ffb4ed215d132e05ba4da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 279d162f54b5156c442c878dee2450f8137d0fe3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1194dc4322e15a816bfa7731a9487f67ba1a02aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6c8072daa942e9850b9d7a78bd2a9851c48cd2c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f73385a5f62a211c19d90d3a7c06dcd693b3652d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 202216e2cdb50d0e704682c5f732dfb7c221fbbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dd7d6468a54be56039b2e3a50bcf171d8e854ff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5020eb8ef37571154dd7eff63486f39fc76fea7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3bee808e15707d849c00e8cea8106e41dd96d771 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 331ddc27a22bde33542f8c1a00b6b56da32e5033 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0dcc6fb3dfd39df5970d6da340a949902ae629 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f6c32a918544aa239a6c636666ce17752e02f15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84f9b603b44e0225391f1495034e0a66514c7368 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84be1263abac102d8b4bc49096530c6fd45a9b80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59b05d06c1babcc8cd1c541716ca25452056020a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f4bc8ee9aeeec8bf7aa31c627e50761dd8bb2db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1da744421619e134ed3ff2781b4d97fee78d9cd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d884adc80c80300b4cc05321494713904ef1df2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ff5822dbefa1c9c8177cbf9f0879c5cf4efc5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05d2687afcc78cd192714ee3d71fdf36a37d110f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ace1fed6321bb8dd6d38b2f58d7cf815fa16db7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0f2bb42b56f770c50a6ef087e9049fa6ac11fb5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6226720b0e6a5f7cb9223fc50363def487831315 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2df1f56cccab13d5c92abbc6b18be725e7b4833 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1e9df152219e85798d78284beeda88f6baa9ec7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 819d6aceeb4d31c153de58081b21ad4f8b559c0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0e84a3401c84507dc017d6e4f57a9dfdb31de53 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4186a2dbbd48fd67ff88075c63bbd3e6c1d8a2df ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58d692e2a1d7e3894dbed68efbcf7166d6ec3fb7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b67bd4c730273a9b6cce49a8444fb54e654de540 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52bb0046c0bf0e50598c513e43b76d593f2cbbff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc2201e660014c5d91fec8e3c3a3fa5a66dcf33b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 179a1dcc65366a70369917d87d00b558a6d0c04d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6da04adff0b96c5163b0c2530028b72be2fd26fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07eaa4ce2696a88ec0db6e91f191af1e48226aca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 637eadce54ca8bbe536bcf7c570c025e28e47129 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a4bfd979e5d4ea0d0457e552202eb2effc36cac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00c5497f190172765cc7a53ff9d8852a26b91676 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f41d42ee7e264ce2fc32cea555e5f666fa1b1fe9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9117cdbb48ffc458d809715c6ab6bc6b416ef621 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b372fdd54bab2ad6639756958978660b12095c3c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dc5d68491eb3c73ae8478bf6edef80b18564a13 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4251bd59fb8e11e40c40548cba38180a9536118c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2834177c0fdf6b1af659e460fd3348f468b8ab0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cdfaceebe916c91acdf8de3f9506989bc70ad65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 806450db9b2c4a829558557ac90bd7596a0654e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4cde8df886112ee32b0a09fcac90c28c85ded7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a885d23bab51b0c00be2780055ff63b3f3c1a4c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 555b0efc2c19aa8cf7c548b4097bd20a73f572ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5915114cdca6f09fa2355162a43596f5d20273be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 451561c252323e74696dbe0be36601c95a75a8c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c0a65226f038c58fc6d6ed525f38fc00b3579b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e6d110fbfa1f2e6a96bc8329e936d0cf1192844 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39229db70e71a6be275dafb3dd9468930e40ae48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9bbdc87a7263f479344fcf67c4b9fd6005bb6cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81279eeac5c525354cbe19b24a6f42219407c1f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e99d9ab2acfaf2ebb4b150736590d6a4e33f449 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13ba1d87ab8fc45d2aed25662bf91053b0db5f9f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2454ae89983a4496a445ce347d7a41c0bb0ea7ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c0c2fc4ee2d8a5d0a2de50ba882657989dedc51 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c68459a17ff59043d29c90020fffe651b2164e6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 832b56394b079c9f6e4c777934447a9e224facfe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f51eeb2f9a1efe22e45f7a1f7b963100f2f8e6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43ab2afba68fd0e1b5d138ed99ffc788dc685e36 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50af864298826feaf94772982bbc7b222b4b4242 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9671e15703918048982c9ff4e2e0fef21ede320 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 75c161cbc017a7d176dd0d7b937db26b3ce637a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84968314ddcbaa0e4b685c71c6ea5524b3aefc80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ab307935bd2bbda52f853f9fc6b49f01897727 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b01824b1aecf8aadae4501e22feb45c20fb26bce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5df44408218003eb49e3b8fc94329c5e8b46c7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ce1193c851e98293a237ad3d2d87725c501e89f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e648efdcc1ca904709a646c1dbc797454a307444 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20ef1924b832a3788849793c0ee6b46dd00d4520 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46c9a0df4403266a320059eaa66e7dce7b3d9ac4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53ed0d43ab950d4deeefd238c7685dabef943800 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3410fdc42075bd788a78f4b2a68c5e2cc0930409 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bca0cb7f507d6a21a652307737a57057692d2f79 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07c20b4231b12fee42d15f1c44c948ce474f5851 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 708b8dda8e7b87841a5f39c60b799c514e75a9c7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6745f4542cfb74bbf3b933dba7a59ef2f54a4380 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2da2b90e6930023ec5739ae0b714bbdb30874583 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b426893ce331f71165c82b1a86252cd104ae3db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4748e813980e1316aa364e0830a4dc082ff86eb0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a67bf61b5017e41740e997147dc88282b09c6f86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be53c1f33107d6891c47c784aeadd6e5ddf78e8c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c39f9da792792d4e73fc3a5effde66576ae128c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92a97480edcc0f0de787a752bf90feed0445dd39 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccde80b7a3037a004a7807a6b79916ce2a1e9729 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a28d3d18f9237af5101eb22e506a9ddda6d44025 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572ace094208c28ab1a8641aedb038456d13f70b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5593dc014a41c563ba524b9303e75da46ee96bd5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b93f2a91e0791be3ffda1f753aa6c377bcab4d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a4b1d4d11eee3c5362a4152216376e634bd14cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b7f5cb25e0e03e06ec506d31c001c172dd71ef6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a119924bd314934158515a1a5f5877be63f6f91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6eeae8b24135b4de05f6d725b009c287577f053d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c4269a21b9edf8477f2fee139d5c1b260ebc4f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ee861ae7a7b36a811aa4b5cc8172c5cbd6a945b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac36642ce1cde75b222e20f585ddfd240f064da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdf2e667f969e5c22985dd232fe3f107fe26e750 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c76852d0bff115720af3f27acdb084c59361e5f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15b9129ec639112e94ea96b6a395ad9b149515d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ead94f267065bb55303f79a0a6df477810b3c68d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb5ba18ab1a875ef6b62c65342de476be47871b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa44e6b579917814740393efc0b990e0fbbbdaf3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba8d148121b1dbba444849fe9549f36a7d17db28 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bcd57e349c08bd7f076f8d6d2f39b702015358c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a7eedde7f5d5082f7f207ef76acccd24a6113b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac1cec7066eaa12a8d1a61562bfc6ee77ff5f54d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbc18b92362f60afc05d4ddadd6e73902ae27ec7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 386d1af07bf1f32fac5e97612441488894f2ffed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50c90666c4de8ac93accdf4040e3eb010a82a46a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ca61d4c68dad68901f8a7364dd210ef27a8b4c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 101fb1df36f29469ee8f4e0b9e7846d856b87daa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6acec357c7609fdd2cb0f5fdb1d2756726c7fe98 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bca9899b5edeed7f964e3124e382c3573183c68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f23379c496942ea6fe898a7a823b65530c126a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9374a916588d9fe7169937ba262c86ad710cfa74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4fa1cb3c3e84cad8b74edb28531d2e27508be26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 615fc1984b0cc09c8eeab51a1d1c4e05b583b4a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4582f805156095604fe07e71195cd9aa43d7a34 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20f202d83bdf1f332a3cb8f010bcf8bf3c2807bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb0f2c241718bc7462be44e5e8e1e36e35f9b15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2792e534dd55fe03bca302f87a3ea638a7278bf1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec3d91644561ef59ecdde59ddced38660923e916 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79cfe05054de8a31758eb3de74532ed422c8da27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ee31065abea645cbc2cf3e54b691d5983a228b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86fa577e135713e56b287169d69d976cde27ac97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b89f39432cdb395f5fbb9553b56595d29e2b773 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ef1f89abe5b2334705ee8f1a6da231b0b6c9a50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e70f3218e910d2b3dcb8a5ab40c65b6bd7a8e9a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b65df78a10c3bcc40d18f3e926bb5a49821acc31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8430529e1a9fb28d8586d24ee507a8195c370fa5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a58a60ac5f322eb4bfd38741469ff21b5a33d2d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00499d994fea6fb55a33c788f069782f917dbdd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 291d2f85bb861ec23b80854b974f3b7a8ded2921 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2ccae0d7fca3a99fc6a3f85f554d162a3fdc916 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ffd4b0193acf86b6a6e179f8673ed38bad3191d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff3d142387e1f38b0ed390333ea99e2e23d96e35 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2a14e4b96a0ffc5353733b50266b477539ef899 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1bd99c0a376dec63f0f050aeb0c40664260da16 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78a46c432b31a0ea4c12c391c404cd128df4d709 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 461fd06e1f2d91dfbe47168b53815086212862e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b43ca7ff72d5f535134241e7c797ddc9c7a3573 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39f85c4358b7346fee22169da9cad93901ea9eb9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- beb76aba0c835669629d95c905551f58cc927299 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20c34a929a8b2871edd4fd44a38688e8977a4be6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea33fe8b21d2b02f902b131aba0d14389f2f8715 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7a5c05875a760c0bf83af6617c68061bda6cfc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ba2aef8f59009756567a53daaf918afa851c304 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b5121414aaf2648b0e809e926d1016249c0222c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ba8b8b91907bd087dfe201eb0d5dae2feb54881 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5117c9c8a4d3af19a9958677e45cda9269de1541 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af9e37c5c8714136974124621d20c0436bb0735f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c658c16f3437ed7e78f6072b6996cb423a8f504 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1496979cf7e9692ef869d2f99da6141756e08d25 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58e2157ad3aa9d75ef4abb90eb2d1f01fba0ba2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0725af77afc619cdfbe3cec727187e442cceaf97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 685d6e651197d54e9a3e36f5adbadd4d21f4c7e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e062f4d043234312446ea9445f07bd9dc309ce3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1083748b828dfca6a72014434850da0f2a0579ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c73e9cd66c77934f8a262b0c1bab9c2f15449ba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59e26435a8d2008073fc315bafe9f329d0ef689a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b197b2dbb527de9856e6e808339ab0ceaf0a512d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7184340f9d826a52b9e72fce8a30b21a7c73d5be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9dfd6bcca5499e1cd472c092bc58426e9b72cccc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a519942a295cc39af4eebb7ba74b184decae13fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c486b2e699082763075a169c56a4b01f99fc4b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11ec2e08e1796b5914cd9c4830813482753ecfa0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c53eeaca19163b2b5484304a9ecce3ef92164d70 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c770f8e98a0079497d3eb5bc31e7260cc70cc63 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36f838e7977e62284d2928f65cacf29771f1952f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9cec00938d9059882bb8eabdaf2f775943e00e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44a601a068f4f543f73fd9c49e264c931b1e1652 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4712c619ed6a2ce54b781fe404fedc269b77e5dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5da34fddda2ea6de19ecf04efd75e323c4bb41e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3942cdff6254d59100db2ff6a3c4460c1d6dbefe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25945899a0067a2dbeeae7a8362a6d68bbc5c6ba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c3bbc43d097656b54c808290ce0c656d127ce47 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d9e7f1121d3bdbb08291c7164ad622350544a21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b999cae064fb6ac11a61a39856e074341baeefde ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b9776e88f7abb59cebac8733c04cccf6eee1c60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc518251eb64c3ef90502697a7e08abe3f8310b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 753e908dcea03cf9962cf45d3965cf93b0d30d94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc1fcf372878240e0a1af20641d361f14aea7252 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fe5cfa0e063a8d51a1eb6f014e2aaa994e5e7d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f2b19de3301e76ab3a6187a49c9c93ff78bafbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb0ac304431e8aed686a8a817aaccd74b1ba4f24 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0cd09bd306486028f5442c56ef2e947355a06282 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1047b41e2e925617474e2e7c9927314f71ce7365 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 146a6fe18da94e12aa46ec74582db640e3bbb3a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e14356d12226cb140b0e070bd079468b4ab599b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b00f3689aa19938c10576580fbfc9243d9f3866c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f62c9b9c0c9bda792c3fa531b18190e97eb53509 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30d822a468dc909aac5c83d078a59bfc85fc27aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13a26d4f9c22695033040dfcd8c76fd94187035b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddc5496506f0484e4f1331261aa8782c7e606bf2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87afd252bd11026b6ba3db8525f949cfb62c90fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5bb812243dd1815651281a54c8191fc8e2bc2d82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5de63b40dbb8fef7f2f46e42732081ef6d0d8866 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33fa178eeb7bf519f5fff118ebc8e27e76098363 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa921fee6014ef43bb2740240e9663e614e25662 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81d8788d40867f4e5cf3016ef219473951a7f6ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c23ca3cd9b9bbeaca1b79068dee1eae045be5b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f8e6f7ab1e6dbd95c268ba0fc827abc62009013 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ec61d4f7208a2713adeafb947f65fdae0947067 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c9f55dd8e6697ab2f9eaf384315abd4cbefad38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b50af0a20bcc7280940ce07593007d17c5acabd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7a4388eeaa4b6b94192dce67257a34c4a6cbd26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29c20c147b489d873fb988157a37bcf96f96ab45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb8cec3cab142ef4f2773b6fc9d224461a6bf85d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa8fe4cad336a7bdd8fb315b1ce445669138830c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb509603e8303cd8ada7cfa1aaa626085b9bb6d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6662422ba52753f8b10bc053aba82bac3f2e1b9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d3a24b22d340c62fafc0e75a349c0ffe34d99d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b1f32e231d391f8e6051957ad947d3659c196b2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5613079f2494808f048b81815bf708debf7339d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7781e1056c672d5212f1aaf4b81ba6f18e8dd8b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4fb3091a75005b047fbea72f812c53d27b15412 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e68d907022c84392597e05afc22d9fe06bf0927 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a10aa36bc6a82bd50df6f3df7d6b7ce04a7070f1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 764cc6e344bd034360485018eb750a0e155ca1f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3131d1a5295508f583ae22788a1065144bec3cee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2856af1d9289ee086b10768b53b65e0fd13a335 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 125b4875b5035dc4f6bad4351651a4236b82baeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e52a00c81d032b47f1bc352369be3ff8eb87b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d97afa24ad1ae453002357e5023f3a116f76fb17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 138aa2b8b413a19ebf9b2bbb39860089c4436001 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1adc79ac67e5eabaa8b8509150c59bc5bd3fd4e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 590638f9a56440a2c41cc04f52272ede04c06a43 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d3e2f7f57620398df896d9569c5d7c5365f823d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fcbda4e363262a339d1cacbf7d2945ec3bd83f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- babf5765da3e328cc1060cb9b37fbdeb6fd58350 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 038f183313f796dc0313c03d652a2bcc1698e78e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c231551328faa864848bde6ff8127f59c9566e90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df638c22c75ddc9a43ecdde90c0c9939f5009e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- befb617d0c645a5fa3177a1b830a8c9871da4168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35a09c0534e89b2d43ec4101a5fb54576b577905 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9d6494f1075e5370a20e406c3edb102fca12854 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5047344a22ed824735d6ed1c91008767ea6638b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6604a00a652e754cb8b6b0b9f194f839fc38d7c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 127e511ea2e22f3bd9a0279e747e9cfa9509986d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c50d8be2dc5ae74e53e44a87f580bf25956af9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 972a8b84bb4a3adec6322219c11370e48824404e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 152bab7eb64e249122fefab0d5531db1e065f539 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef592d384ad3e0ead5e516f3b2c0f31e6f1e7cab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf37099ea8d1d8c7fbf9b6d12d7ec0249d3acb8b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bf8e89e6784e121ddc32990d586e2276ec84596 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f6a6e35d003c243968cdb41b72fbbe609e56841 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dd76b9e72b21d2502a51e3605e5e6ab640e5f0bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56823868efddd3bdbc0b624cdc79adc3a2e94a75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22757ed7b58862cccef64fdc09f93ea1ac72b1d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfdc8e26d36833b3a7106c306fdbe6d38dec817e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0425bc64384fe9a6a22edb7831d6e8c1756e2c7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa5e366889103172a9829730de1ba26d3dcbc01b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50a9920b1bd9e6e8cf452c774c499b0b9014ccef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d6332820eaad3a6d3b0abc93424469a8ef7083a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43eb1edf93c381bf3f3809a809df33dae23b50d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e64957d8e52d7542310535bad1e77a9bbd7b4857 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a534eba97db3c2cfb2926368756fd633d25c056 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4e56f627f94d93c49db40ae5944f880341f4203 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b377c07200392ac35a6ed668673451d3c9b1f5c7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 989671780551b7587d57e1d7cb5eb1002ade75b4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14cef2bb3e0de02f306fa37c268d6c276326c002 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9cb007076542e32f7b99bb18bc6ec424f3b407b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3ce120c9acc7d9d4ce86aa1f07b027d1c45a9a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b3ecf2dcace76b65765ddf1901504b0b4861b08 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3050b578081b24e5cf244fa252f385ffca2bf86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11b1f6edc164e2084e3ff034d3b65306c461a0be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3d5159679d17c1270ad72941922d0f18bdd6415 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 985093bae160419782b3d3cb9151e2e58625fd52 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c04c60f12d3684ecf961509d1b8db895e6f9aac0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53d26977f1aff8289f13c02ee672349d78eeb2f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 564db4f20bd7189a50a12d612d56ed6391081e83 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657a57adbff49c553752254c106ce1d5b5690cf8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26029c29765043376370a2877b7e635c17f5e76d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbf957a36f5ed47c4387ee8069c56b16d1b4f558 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 924da9604d6474fd1be99dffdcc539eaaaa31626 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9840afda82fafcc3eaf52351c64e2cfdb8962397 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3fd37230e76a014cf5c45d55daf0be2caa6948b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 345d6be7829c6dab359390ebc5e1a7ae0c6d48bb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a9eeebeddaa20d10881ad505cc362a3a391e15b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 225999e9442c746333a8baa17a6dbf7341c135ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9513aa01fab73f53e4fe18644c7d5b530a66c6a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 048acc4596dc1c6d7ed3220807b827056cb01032 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfdf98cadedfa6042117cd7a83952ca2f465d26f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 919164df96d9f956c8be712f33a9a037b097745b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9acc7806d6bdb306a929c460437d3d03e5e48dcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a07cdbae1d485fd715a5b6eca767f211770fea4d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95a83a7de5d3ce84206b9267962c32df4d071c21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e063d101face690b8cf4132fa419c5ce3857ef44 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8f8582274cd6a368a79e569e2995cee7d6ea9f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aed099a73025422f0550f5dd5c3e4651049494b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fda0ec787de5159534ebc8b81824920d9613575 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17852bde65c12c80170d4c67b3136d8e958a92a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c63cd9873bf733c068a5f183442ec82873fef1fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9946e0ce07c8d93a43bd7b8900ddf5d913fe3b03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a45790a8699a384c3d218ac4ca8a53c109fd944 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5cf1bc1d3e38ab32a20707d66b08f1bb0beae91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b01b589e7a19d6be5bd6465e600f84aa8015282 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 178dff753350014f6395f41bc21f1adddf73c8e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b372e26366348920eae32ee81a47b469b511a21f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66beac619ba944afeca9d15c56ccc60d5276a799 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0d828fcb1964a578ef3979297c59a41aedba932 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3980f11a9411d0b487b73279346cfae938845e7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93e19791659c279f4f7e33a433771beca65bf9ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a0eee3989abd3a5d6d47d0298bd056a954d379b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 579e2c07bbb39577fa32fed8cb42297c1c5516d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2effd7a10798a1e8e53bb546a67b2ccdea882c50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd5f111439e7a2e730b602a155aa533c68badbf8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0aa1ce356c7c3d53d6ee035b4c7bcf425e108cdc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f347c6da5e83b137c337f9ccb190090c27cfc953 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abc2e538c6f2fe50f93e6c3fe927236bb41f94f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b38020ae17ed9f83af75ce176e96267dcce6ecbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93ad8da5a8c6ddcbe67abae2cc4a7aad8084e736 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52654c0216dcbe3fa2d9afb1de12c65d18f6a7a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b63b3bc493a4a44ba1d857c78e4496e40f1d7b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef9395f5ffe75f4e43d80cd1fa7b34c8a4db66fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5083752d5d02d6c46bc2f18ba53a28d119af5b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24effa4861d6d1e8cffe848ae63fa2ed40be03f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9aa93b5890acb152c5824a8f75c221cf1addfd1b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d203a0da0c709d301e973a9fe3569efd1fb2bd3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57a561cda141a0fed3129f4f3488e3b91805e638 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4043468de4fc448b6fda670f33b7f935883793a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edf9fc528277a53ec37d1bd79fb4f8608cce11ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e1be3032d521e3bf2f49fc87f82c8f978079ea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bf2083922b7bccc31917bf9cdb74e3d4892c2600 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eba67171bf6ea653dfb6a6ae288f3c1d10829870 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 277be842bf30848e7292a931169bd4c8ff726dee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79ec3a5191f9dfd398d98fe7372ad841f34876ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b919010b0459b2540fb609c5d1aad0b8dc0fab01 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 105fea3ef3be4b47cc3602423919329162dfcecf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5278c514068f469f2fca7638ef1e1b27556a37a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f34a25eaa6de187797442bc6e0514289d77fed2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a935501a2f62d103cf9d69d775399dae2e7dfead ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12b32450c210cec1fdd8b2c19d564776e8054aa3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26719d252dd8e3a53c08da2ed3c3a8d62fbbc30a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55f0245f3ee538ec49e84bcb28c33b135a07f0b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2c1bd80350f692c5c2298cb88859564ec0a061b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48af0ac87dc3beef4d3e6c7982b158d50f7b2a6e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 039bfe373c990fc6db3808d255abaff91235e82f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dafe71a3e2d5cfb9b80805a26d5442ca5ad8332f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5625170b248edc6a570c977fb1f8e7430ffd0b5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f043f00d5161794ef538802dcc9ba75e375c058 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a5885a4c5983242b1356b57eafeb59a9d5c0d0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c982c1f50bd7ae3bc4a1afc09e9ad11aecd434f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 273400f95ae036c01d4b0fd7a7ca6ab160efd958 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 233e3ffe0ef35dbabe49340ba567499690dcc166 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b675bf555e89e708f1b8f79bd90796dd395837b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7252e217fe6d8f05dd50f6e125c33a1c6fff602 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbbb6b349e8d0557e7e55e2d05819d6bdaed3769 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebee400cfa4a532018ee904c22c7e3e6619ca4de ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e10706b6c167454a723636e0929061201a2f461b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80b60fafa94b794fa77fab85e1df66f52598f3ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e509130b7dfc97eeb4a517d6c9c65a8d6204234 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d49273897bd317323e0a3bbbc01b76e83370f0c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4d5e7c9dab813adf9bfd8198bb9bb00c9a9503b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a061029eddee38110e416e3c4f60d553dafc9e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 323259cc3d977235f4e7e8980219e5e96d66086e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80d01f0ef89e287184ba6d07be010ee3f16a74d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd47d6b11833870ce23102a3373b7a50a1b45d00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58fa2c401856f93712ae6cc45d4dc3458ee4b4f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc922f3678a1b01cac2b3f1ec74b831ffec52a71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2405cf54ac06140a0821f55b34c1d54f699e8e73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 579d1b8174c9be915c0fa17a67fc38cc6de36ad7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8501e908bb8c531dfa75cef33fcec519027f4e5b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7129dc00826cb344c0202f152f1be33ea9326fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85c6252b54108750291021a74dc00895f79a7ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1accc498c40e684f870d38b7d128739a0ebf57cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27ceafbb3f74b4677d5bae6c7ea031de07c6cfad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c60b88138b836307bdde0487c4ffb82121b1c5e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70094734d601e1220c95ac586fdffbda3a23e10b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69a56c4e2addd1ec53bb40e8a18f52353d1fc28c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5962862e9ba0a1c9a14306688973946f6f7ce75c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03bfdb16cd7cc6e1c7c8d3b59552da7de3d82d1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71cd409660bc5b8c211dc7c51afae481d822d593 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35ddb45b41b3de2d4f783608ad8d8752f6557997 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30472cf3132b8c03e528b23d1c7533de740e28ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dc09f0ece61ef2bd629e8bfe532aa24f4f8e0c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae54e18d7ca7bc8b8fbc667119fb60b25f0f3871 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 207bf7bf30651c3284408d87d7c499e43db6bc83 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b975d9fcf5924800f9ea5d68d7d79f743ca9af7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7e59d3ef86beb3b3b3e53a610af122b2220841b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0651f0964ba5a33257ebbda1e92c7a1649a4a058 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 062aafa396866d4dfe8f3fd2f32d46fa7c01b6dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea6af04977c197fd07ab812d394dcb61feebaf67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657e98094f0f669809bc0e47f3d6bd9a8124cf32 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c35350e5bc4fe113330818ca6784ff368c5ffef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 620dbee78ed8481d108327c4c332899df7cb8ef4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6383196b7bb0773c0083a2a3d49a95e5479715bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9066712dca21ef35c534e068f2cc4fefdccf1ea3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 933d23bf95a5bd1624fbcdf328d904e1fa173474 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f66cfbbce58b4b552b041707a12d437cc5f400a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7156cece3c49544abb6bf7a0c218eb36646fad6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33ebe7acec14b25c5f84f35a664803fcab2f7781 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 833f5c7b95c92a3f77cf1c90492f8c5ab2adc138 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e658e67859c06ca082d46c1cad9a7f44b0279edc ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e2b6256e9edfb94f0c33bd97b9755679970d7b3e ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- d55288b879df71ca7a623b0e87d53f2e0e1d038a ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- b59962d2173c168a07fddd98b8414aae510ee5c0 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 6d2618f2fbe97015ce1cb1193d8d16100ba8b4fc ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8a801152c694671ad79a4fc2f5739f58abecb9a5 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- db7c881cd7935920e2173f8f774e2e57eb4017a6 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 251eeeec4053dde36c474c1749d00675ab7e3195 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 606796d98415c198208ffbdeb7e10cc6bd45b0aa ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 9796566ae0e69f7425c571b09b81e8c813009710 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f685e7e7250168bf3fca677f2665347b38a7c8c1 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f2d7e22f57fccde3b8d09e796720f90e10cb1960 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 5a9a6f8d38374103fa5aa601b4dd4814b01f0727 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f02721fc60967327cf625a36f5fd4f65ea2e7401 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f5d8a1089d853b2a7aab6878dff237f08d184fa8 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 4725d3aeb8fd43cb267b17134fcb383f0ee979ae ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 5762a6ffed20d8dc7fcf3b0ebace0d6194a7890d ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- bfb5cd440b1a9dae931740ba5e4cd0f02d0f5ff5 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- c9227118a5e58323a041cdd6f461fea605fa8e2d ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 3b03c197a1581576108028fe375eb4b695cb3bb9 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 95203fc7a90a1268a499120a7dbbba10600acfe9 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e852f3cd9b4affb14b43255518e7780675246194 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8f86a6af73e2c5f1417e27ebbcc8859922b34e36 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e20fe8b9b03208ef3ded0182ca45fb49617fd270 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a20310fb21168c4f7a58cbc60229b2e730538cdf ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 2845bbecdd2924831d87a9158a7c8ea8e9f90dbd ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ab3f86109142254fa4a5e29b5382c5b990bb24b5 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 0e1a9f2d23fbe366de141d5b4ed9d514bd093ef0 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e3dd84b6b16392c401da82256b50dedab1c782e5 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 80819f5d8c9419ec6c05cafa4fe6e8d2357dcf08 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 81c3f5b864d5d52bb0b272c66de66510fe5646ea ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 567609b1234a9b8806c5a05da6c866e480aa148d ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ef2d60e5f49b6fa87206c5cdeb412d05142db57e ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 98e5c06a0cc73ba3c0e8da2e87cd28768c11fc82 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 6cae852d3dec6bb56bf629ca50fbc2177d39e13c ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- b897e17e526fb9c8b57c603a1291f129ed368893 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ae9254a26aff973cab94448e6bf337c3aba78aec ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e078e4a18e5a921f899d7e2cf468a5c096f843a4 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 187618a2aa7d5191df7ff6bfc3f8f2c79922cb08 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- cc6fcfa4f7a87cb7aafbf9c04fe5d3899d49356c ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 47cccda8db8d8d12ce5a19459c3abbc34ef4ee56 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 346a2ca7be2134703a02647c37ca1e4188e92f48 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e8ff784c7324e3ec1ec77ac972007a9003aa1eaa ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 6d674893f4b24621bcb443a5cc06bf8b0603ca61 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 2d5177bd3dc00484e49c12644666a4530f1d47dc ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 7d9a7e63d06146d7fdb2508a58a824e1766fb164 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- cca398a147f0d0d15e84b7ab32f15941397925ae ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a6232db329f3a17752e98cfde6a8d8a0eed16c7d ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ea4a6158e73258af5cf12ed9820704546a7a2860 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e3b49170d592763b8f4c9e5acd82d5dab95d55b5 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f4bbdbabaaca83e055e91affc49024359b5cfe82 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 63d0f103c575e5da4efa8d0b2166b880180278b0 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 5c94e2b608895536d0cbb28aff7ae942ab478162 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 9426382ae54d9eb8a0a3e9d28011b3efae06e445 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 32d16ea71dd8394c8010f92baf8b18c4a24890ec ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 02963ce0a9eb32551a3549ccd688d8f480ab6726 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- c9c8c48aba627d80e17b2d3df82ca67ca59708db ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e9f6714d3edeb9f4eeefbba03066f7b04fe8a342 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 2fe80530d8f4c70d25f5cfe398240025e7cb9a6a ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8892b8399b26ae0aade9dd17cc8bfe41e03c69ed ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f9090fddaded97b77e3e47b58bf88b254066bd9b ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 9b20893a49cf26644926453ef043800e26f568df ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 220156bceced19f38058b357285cf5a304f70865 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f16498ab51919b0178189839345bd6809325581f ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e3d07194bc64e75ac160947a935cc55b3d57fac9 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 72c7ef62b5e7ebe7dcd2caf64674f2c517e083a2 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 02cb4e81341a9a16f79882fccacce3d70805f827 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 6117be984d247ddc406403eebb8221fd2498669d ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a6c15950afb8ef11a624a9266ae64cef417f8eff ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8ab45d22c5c66a9a2bb4ebb3c49baa011b4a321c ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- fb7d23c6c480a084d5490fe1d4d3f5ac435b3a37 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8aced94d44c3467f109b348525dc1da236be4401 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 2759698a94a514a3f95ec025390fe83f00eb53cd ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- eb821b54eede052d32016e5dd8f1875995380f4d ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 0607d8e3c96ecb9ea41c21bcc206d7b36963d950 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ddc5f628f54d4e747faece5c860317323ad8cd0a ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a3bcfa3cb2785f5e705c7c872c3bd17cfb39e6a9 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 53da761496ca2a63480e006310c4f8435ccb4a47 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- aabef802361db3013dde51d926f219ab29060bc2 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 0ec64179e5a5eb6bba932ec632820c00b5bf9309 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 69fb573a4a0280d5326f919cf23232d3b008ca14 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 956a36073bd8020f7caf12cd2559364ae10cf8d3 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 68a7f0ba48a654800f2e720a067e58322ff57c58 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a573df33ace74281834b165f2bacf8154fd6128f ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 303e89cffb01c26c8e946f515ed5cafe2569882e ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 3dab9f6562ecb0408d9ece8dd63cc4461d280113 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1da744421619e134ed3ff2781b4d97fee78d9cd4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d884adc80c80300b4cc05321494713904ef1df2d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d2ff5822dbefa1c9c8177cbf9f0879c5cf4efc5c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 05d2687afcc78cd192714ee3d71fdf36a37d110f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ace1fed6321bb8dd6d38b2f58d7cf815fa16db7a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e0f2bb42b56f770c50a6ef087e9049fa6ac11fb5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6226720b0e6a5f7cb9223fc50363def487831315 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f2df1f56cccab13d5c92abbc6b18be725e7b4833 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f1e9df152219e85798d78284beeda88f6baa9ec7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 819d6aceeb4d31c153de58081b21ad4f8b559c0e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b0e84a3401c84507dc017d6e4f57a9dfdb31de53 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4186a2dbbd48fd67ff88075c63bbd3e6c1d8a2df ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 58d692e2a1d7e3894dbed68efbcf7166d6ec3fb7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b67bd4c730273a9b6cce49a8444fb54e654de540 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 52bb0046c0bf0e50598c513e43b76d593f2cbbff ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fc2201e660014c5d91fec8e3c3a3fa5a66dcf33b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 179a1dcc65366a70369917d87d00b558a6d0c04d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6da04adff0b96c5163b0c2530028b72be2fd26fd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 07eaa4ce2696a88ec0db6e91f191af1e48226aca ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 637eadce54ca8bbe536bcf7c570c025e28e47129 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1a4bfd979e5d4ea0d0457e552202eb2effc36cac ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 00c5497f190172765cc7a53ff9d8852a26b91676 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f41d42ee7e264ce2fc32cea555e5f666fa1b1fe9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9117cdbb48ffc458d809715c6ab6bc6b416ef621 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b372fdd54bab2ad6639756958978660b12095c3c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2dc5d68491eb3c73ae8478bf6edef80b18564a13 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4251bd59fb8e11e40c40548cba38180a9536118c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f2834177c0fdf6b1af659e460fd3348f468b8ab0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7cdfaceebe916c91acdf8de3f9506989bc70ad65 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 806450db9b2c4a829558557ac90bd7596a0654e0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c4cde8df886112ee32b0a09fcac90c28c85ded7f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a885d23bab51b0c00be2780055ff63b3f3c1a4c6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 555b0efc2c19aa8cf7c548b4097bd20a73f572ca ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5915114cdca6f09fa2355162a43596f5d20273be ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 451561c252323e74696dbe0be36601c95a75a8c3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3c0a65226f038c58fc6d6ed525f38fc00b3579b7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2e6d110fbfa1f2e6a96bc8329e936d0cf1192844 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 39229db70e71a6be275dafb3dd9468930e40ae48 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f9bbdc87a7263f479344fcf67c4b9fd6005bb6cd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 81279eeac5c525354cbe19b24a6f42219407c1f9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4e99d9ab2acfaf2ebb4b150736590d6a4e33f449 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 13ba1d87ab8fc45d2aed25662bf91053b0db5f9f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2454ae89983a4496a445ce347d7a41c0bb0ea7ae ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9c0c2fc4ee2d8a5d0a2de50ba882657989dedc51 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c68459a17ff59043d29c90020fffe651b2164e6a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 832b56394b079c9f6e4c777934447a9e224facfe ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9f51eeb2f9a1efe22e45f7a1f7b963100f2f8e6b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 43ab2afba68fd0e1b5d138ed99ffc788dc685e36 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 50af864298826feaf94772982bbc7b222b4b4242 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d9671e15703918048982c9ff4e2e0fef21ede320 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 75c161cbc017a7d176dd0d7b937db26b3ce637a1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 84968314ddcbaa0e4b685c71c6ea5524b3aefc80 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 52ab307935bd2bbda52f853f9fc6b49f01897727 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b01824b1aecf8aadae4501e22feb45c20fb26bce ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c5df44408218003eb49e3b8fc94329c5e8b46c7d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9ce1193c851e98293a237ad3d2d87725c501e89f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e648efdcc1ca904709a646c1dbc797454a307444 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 20ef1924b832a3788849793c0ee6b46dd00d4520 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 46c9a0df4403266a320059eaa66e7dce7b3d9ac4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 53ed0d43ab950d4deeefd238c7685dabef943800 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3410fdc42075bd788a78f4b2a68c5e2cc0930409 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bca0cb7f507d6a21a652307737a57057692d2f79 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 07c20b4231b12fee42d15f1c44c948ce474f5851 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 708b8dda8e7b87841a5f39c60b799c514e75a9c7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6745f4542cfb74bbf3b933dba7a59ef2f54a4380 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2da2b90e6930023ec5739ae0b714bbdb30874583 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9b426893ce331f71165c82b1a86252cd104ae3db ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4748e813980e1316aa364e0830a4dc082ff86eb0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a67bf61b5017e41740e997147dc88282b09c6f86 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- be53c1f33107d6891c47c784aeadd6e5ddf78e8c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4c39f9da792792d4e73fc3a5effde66576ae128c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 92a97480edcc0f0de787a752bf90feed0445dd39 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ccde80b7a3037a004a7807a6b79916ce2a1e9729 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a28d3d18f9237af5101eb22e506a9ddda6d44025 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 572ace094208c28ab1a8641aedb038456d13f70b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5593dc014a41c563ba524b9303e75da46ee96bd5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2b93f2a91e0791be3ffda1f753aa6c377bcab4d3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9a4b1d4d11eee3c5362a4152216376e634bd14cf ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2b7f5cb25e0e03e06ec506d31c001c172dd71ef6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9a119924bd314934158515a1a5f5877be63f6f91 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6eeae8b24135b4de05f6d725b009c287577f053d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0c4269a21b9edf8477f2fee139d5c1b260ebc4f8 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9ee861ae7a7b36a811aa4b5cc8172c5cbd6a945b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ac36642ce1cde75b222e20f585ddfd240f064da2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bdf2e667f969e5c22985dd232fe3f107fe26e750 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c76852d0bff115720af3f27acdb084c59361e5f6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 15b9129ec639112e94ea96b6a395ad9b149515d1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ead94f267065bb55303f79a0a6df477810b3c68d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3cb5ba18ab1a875ef6b62c65342de476be47871b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fa44e6b579917814740393efc0b990e0fbbbdaf3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ba8d148121b1dbba444849fe9549f36a7d17db28 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bcd57e349c08bd7f076f8d6d2f39b702015358c1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7a7eedde7f5d5082f7f207ef76acccd24a6113b1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ac1cec7066eaa12a8d1a61562bfc6ee77ff5f54d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dbc18b92362f60afc05d4ddadd6e73902ae27ec7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 386d1af07bf1f32fac5e97612441488894f2ffed ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 50c90666c4de8ac93accdf4040e3eb010a82a46a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0ca61d4c68dad68901f8a7364dd210ef27a8b4c6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 101fb1df36f29469ee8f4e0b9e7846d856b87daa ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6acec357c7609fdd2cb0f5fdb1d2756726c7fe98 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6bca9899b5edeed7f964e3124e382c3573183c68 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5f23379c496942ea6fe898a7a823b65530c126a7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9374a916588d9fe7169937ba262c86ad710cfa74 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f4fa1cb3c3e84cad8b74edb28531d2e27508be26 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 615fc1984b0cc09c8eeab51a1d1c4e05b583b4a7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e4582f805156095604fe07e71195cd9aa43d7a34 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 20f202d83bdf1f332a3cb8f010bcf8bf3c2807bd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5eb0f2c241718bc7462be44e5e8e1e36e35f9b15 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2792e534dd55fe03bca302f87a3ea638a7278bf1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ec3d91644561ef59ecdde59ddced38660923e916 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 79cfe05054de8a31758eb3de74532ed422c8da27 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9ee31065abea645cbc2cf3e54b691d5983a228b2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 86fa577e135713e56b287169d69d976cde27ac97 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1b89f39432cdb395f5fbb9553b56595d29e2b773 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0ef1f89abe5b2334705ee8f1a6da231b0b6c9a50 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e70f3218e910d2b3dcb8a5ab40c65b6bd7a8e9a8 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b65df78a10c3bcc40d18f3e926bb5a49821acc31 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8430529e1a9fb28d8586d24ee507a8195c370fa5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a58a60ac5f322eb4bfd38741469ff21b5a33d2d5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 00499d994fea6fb55a33c788f069782f917dbdd4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 291d2f85bb861ec23b80854b974f3b7a8ded2921 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b2ccae0d7fca3a99fc6a3f85f554d162a3fdc916 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6ffd4b0193acf86b6a6e179f8673ed38bad3191d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ff3d142387e1f38b0ed390333ea99e2e23d96e35 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b2a14e4b96a0ffc5353733b50266b477539ef899 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d1bd99c0a376dec63f0f050aeb0c40664260da16 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 78a46c432b31a0ea4c12c391c404cd128df4d709 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 461fd06e1f2d91dfbe47168b53815086212862e4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4b43ca7ff72d5f535134241e7c797ddc9c7a3573 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 39f85c4358b7346fee22169da9cad93901ea9eb9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- beb76aba0c835669629d95c905551f58cc927299 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 20c34a929a8b2871edd4fd44a38688e8977a4be6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ea33fe8b21d2b02f902b131aba0d14389f2f8715 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b7a5c05875a760c0bf83af6617c68061bda6cfc5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5ba2aef8f59009756567a53daaf918afa851c304 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8b5121414aaf2648b0e809e926d1016249c0222c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6ba8b8b91907bd087dfe201eb0d5dae2feb54881 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5117c9c8a4d3af19a9958677e45cda9269de1541 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- af9e37c5c8714136974124621d20c0436bb0735f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3c658c16f3437ed7e78f6072b6996cb423a8f504 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1496979cf7e9692ef869d2f99da6141756e08d25 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 58e2157ad3aa9d75ef4abb90eb2d1f01fba0ba2b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0725af77afc619cdfbe3cec727187e442cceaf97 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 685d6e651197d54e9a3e36f5adbadd4d21f4c7e5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5e062f4d043234312446ea9445f07bd9dc309ce3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1083748b828dfca6a72014434850da0f2a0579ab ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4c73e9cd66c77934f8a262b0c1bab9c2f15449ba ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 59e26435a8d2008073fc315bafe9f329d0ef689a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b197b2dbb527de9856e6e808339ab0ceaf0a512d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7184340f9d826a52b9e72fce8a30b21a7c73d5be ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9dfd6bcca5499e1cd472c092bc58426e9b72cccc ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a519942a295cc39af4eebb7ba74b184decae13fb ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6c486b2e699082763075a169c56a4b01f99fc4b9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 11ec2e08e1796b5914cd9c4830813482753ecfa0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c53eeaca19163b2b5484304a9ecce3ef92164d70 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3c770f8e98a0079497d3eb5bc31e7260cc70cc63 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 36f838e7977e62284d2928f65cacf29771f1952f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f9cec00938d9059882bb8eabdaf2f775943e00e5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 44a601a068f4f543f73fd9c49e264c931b1e1652 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4712c619ed6a2ce54b781fe404fedc269b77e5dd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5da34fddda2ea6de19ecf04efd75e323c4bb41e4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3942cdff6254d59100db2ff6a3c4460c1d6dbefe ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 25945899a0067a2dbeeae7a8362a6d68bbc5c6ba ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9c3bbc43d097656b54c808290ce0c656d127ce47 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3d9e7f1121d3bdbb08291c7164ad622350544a21 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b999cae064fb6ac11a61a39856e074341baeefde ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9b9776e88f7abb59cebac8733c04cccf6eee1c60 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dc518251eb64c3ef90502697a7e08abe3f8310b2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 753e908dcea03cf9962cf45d3965cf93b0d30d94 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dc1fcf372878240e0a1af20641d361f14aea7252 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4fe5cfa0e063a8d51a1eb6f014e2aaa994e5e7d4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1f2b19de3301e76ab3a6187a49c9c93ff78bafbd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bb0ac304431e8aed686a8a817aaccd74b1ba4f24 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0cd09bd306486028f5442c56ef2e947355a06282 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1047b41e2e925617474e2e7c9927314f71ce7365 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 146a6fe18da94e12aa46ec74582db640e3bbb3a9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9e14356d12226cb140b0e070bd079468b4ab599b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b00f3689aa19938c10576580fbfc9243d9f3866c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f62c9b9c0c9bda792c3fa531b18190e97eb53509 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 30d822a468dc909aac5c83d078a59bfc85fc27aa ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 13a26d4f9c22695033040dfcd8c76fd94187035b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ddc5496506f0484e4f1331261aa8782c7e606bf2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 87afd252bd11026b6ba3db8525f949cfb62c90fc ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5bb812243dd1815651281a54c8191fc8e2bc2d82 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5de63b40dbb8fef7f2f46e42732081ef6d0d8866 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 33fa178eeb7bf519f5fff118ebc8e27e76098363 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- aa921fee6014ef43bb2740240e9663e614e25662 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 81d8788d40867f4e5cf3016ef219473951a7f6ed ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2c23ca3cd9b9bbeaca1b79068dee1eae045be5b6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2f8e6f7ab1e6dbd95c268ba0fc827abc62009013 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0ec61d4f7208a2713adeafb947f65fdae0947067 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3c9f55dd8e6697ab2f9eaf384315abd4cbefad38 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7b50af0a20bcc7280940ce07593007d17c5acabd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a7a4388eeaa4b6b94192dce67257a34c4a6cbd26 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 29c20c147b489d873fb988157a37bcf96f96ab45 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- eb8cec3cab142ef4f2773b6fc9d224461a6bf85d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fa8fe4cad336a7bdd8fb315b1ce445669138830c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bb509603e8303cd8ada7cfa1aaa626085b9bb6d6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6662422ba52753f8b10bc053aba82bac3f2e1b9c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3d3a24b22d340c62fafc0e75a349c0ffe34d99d7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b1f32e231d391f8e6051957ad947d3659c196b2b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5613079f2494808f048b81815bf708debf7339d2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d7781e1056c672d5212f1aaf4b81ba6f18e8dd8b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a4fb3091a75005b047fbea72f812c53d27b15412 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2e68d907022c84392597e05afc22d9fe06bf0927 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a10aa36bc6a82bd50df6f3df7d6b7ce04a7070f1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 764cc6e344bd034360485018eb750a0e155ca1f6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3131d1a5295508f583ae22788a1065144bec3cee ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a2856af1d9289ee086b10768b53b65e0fd13a335 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 125b4875b5035dc4f6bad4351651a4236b82baeb ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5e52a00c81d032b47f1bc352369be3ff8eb87b27 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d97afa24ad1ae453002357e5023f3a116f76fb17 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 138aa2b8b413a19ebf9b2bbb39860089c4436001 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1adc79ac67e5eabaa8b8509150c59bc5bd3fd4e6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 590638f9a56440a2c41cc04f52272ede04c06a43 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5d3e2f7f57620398df896d9569c5d7c5365f823d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6fcbda4e363262a339d1cacbf7d2945ec3bd83f0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- babf5765da3e328cc1060cb9b37fbdeb6fd58350 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 038f183313f796dc0313c03d652a2bcc1698e78e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c231551328faa864848bde6ff8127f59c9566e90 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8df638c22c75ddc9a43ecdde90c0c9939f5009e7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- befb617d0c645a5fa3177a1b830a8c9871da4168 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 35a09c0534e89b2d43ec4101a5fb54576b577905 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b9d6494f1075e5370a20e406c3edb102fca12854 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5047344a22ed824735d6ed1c91008767ea6638b7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a6604a00a652e754cb8b6b0b9f194f839fc38d7c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 127e511ea2e22f3bd9a0279e747e9cfa9509986d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c8c50d8be2dc5ae74e53e44a87f580bf25956af9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 972a8b84bb4a3adec6322219c11370e48824404e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 152bab7eb64e249122fefab0d5531db1e065f539 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ef592d384ad3e0ead5e516f3b2c0f31e6f1e7cab ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- cf37099ea8d1d8c7fbf9b6d12d7ec0249d3acb8b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4bf8e89e6784e121ddc32990d586e2276ec84596 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2f6a6e35d003c243968cdb41b72fbbe609e56841 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dd76b9e72b21d2502a51e3605e5e6ab640e5f0bd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 56823868efddd3bdbc0b624cdc79adc3a2e94a75 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 22757ed7b58862cccef64fdc09f93ea1ac72b1d2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bfdc8e26d36833b3a7106c306fdbe6d38dec817e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0425bc64384fe9a6a22edb7831d6e8c1756e2c7e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- aa5e366889103172a9829730de1ba26d3dcbc01b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 50a9920b1bd9e6e8cf452c774c499b0b9014ccef ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7d6332820eaad3a6d3b0abc93424469a8ef7083a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 43eb1edf93c381bf3f3809a809df33dae23b50d9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e64957d8e52d7542310535bad1e77a9bbd7b4857 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4a534eba97db3c2cfb2926368756fd633d25c056 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d4e56f627f94d93c49db40ae5944f880341f4203 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b377c07200392ac35a6ed668673451d3c9b1f5c7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 989671780551b7587d57e1d7cb5eb1002ade75b4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 14cef2bb3e0de02f306fa37c268d6c276326c002 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b9cb007076542e32f7b99bb18bc6ec424f3b407b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d3ce120c9acc7d9d4ce86aa1f07b027d1c45a9a1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0b3ecf2dcace76b65765ddf1901504b0b4861b08 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f3050b578081b24e5cf244fa252f385ffca2bf86 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 11b1f6edc164e2084e3ff034d3b65306c461a0be ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c3d5159679d17c1270ad72941922d0f18bdd6415 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 985093bae160419782b3d3cb9151e2e58625fd52 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c04c60f12d3684ecf961509d1b8db895e6f9aac0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 53d26977f1aff8289f13c02ee672349d78eeb2f0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 564db4f20bd7189a50a12d612d56ed6391081e83 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 657a57adbff49c553752254c106ce1d5b5690cf8 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 26029c29765043376370a2877b7e635c17f5e76d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- cbf957a36f5ed47c4387ee8069c56b16d1b4f558 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 924da9604d6474fd1be99dffdcc539eaaaa31626 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9840afda82fafcc3eaf52351c64e2cfdb8962397 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3fd37230e76a014cf5c45d55daf0be2caa6948b7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 345d6be7829c6dab359390ebc5e1a7ae0c6d48bb ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a9eeebeddaa20d10881ad505cc362a3a391e15b2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 225999e9442c746333a8baa17a6dbf7341c135ca ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9513aa01fab73f53e4fe18644c7d5b530a66c6a1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 048acc4596dc1c6d7ed3220807b827056cb01032 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bfdf98cadedfa6042117cd7a83952ca2f465d26f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 919164df96d9f956c8be712f33a9a037b097745b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9acc7806d6bdb306a929c460437d3d03e5e48dcd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a07cdbae1d485fd715a5b6eca767f211770fea4d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 95a83a7de5d3ce84206b9267962c32df4d071c21 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e063d101face690b8cf4132fa419c5ce3857ef44 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a8f8582274cd6a368a79e569e2995cee7d6ea9f9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- aed099a73025422f0550f5dd5c3e4651049494b2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7fda0ec787de5159534ebc8b81824920d9613575 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 17852bde65c12c80170d4c67b3136d8e958a92a9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c63cd9873bf733c068a5f183442ec82873fef1fc ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9946e0ce07c8d93a43bd7b8900ddf5d913fe3b03 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5a45790a8699a384c3d218ac4ca8a53c109fd944 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a5cf1bc1d3e38ab32a20707d66b08f1bb0beae91 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5b01b589e7a19d6be5bd6465e600f84aa8015282 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 178dff753350014f6395f41bc21f1adddf73c8e0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b372e26366348920eae32ee81a47b469b511a21f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 66beac619ba944afeca9d15c56ccc60d5276a799 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a0d828fcb1964a578ef3979297c59a41aedba932 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3980f11a9411d0b487b73279346cfae938845e7a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 93e19791659c279f4f7e33a433771beca65bf9ea ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8a0eee3989abd3a5d6d47d0298bd056a954d379b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 579e2c07bbb39577fa32fed8cb42297c1c5516d8 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2effd7a10798a1e8e53bb546a67b2ccdea882c50 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fd5f111439e7a2e730b602a155aa533c68badbf8 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0aa1ce356c7c3d53d6ee035b4c7bcf425e108cdc ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f347c6da5e83b137c337f9ccb190090c27cfc953 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- abc2e538c6f2fe50f93e6c3fe927236bb41f94f4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b38020ae17ed9f83af75ce176e96267dcce6ecbd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 93ad8da5a8c6ddcbe67abae2cc4a7aad8084e736 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 52654c0216dcbe3fa2d9afb1de12c65d18f6a7a4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9b63b3bc493a4a44ba1d857c78e4496e40f1d7b8 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ef9395f5ffe75f4e43d80cd1fa7b34c8a4db66fe ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c5083752d5d02d6c46bc2f18ba53a28d119af5b9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 24effa4861d6d1e8cffe848ae63fa2ed40be03f6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9aa93b5890acb152c5824a8f75c221cf1addfd1b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3d203a0da0c709d301e973a9fe3569efd1fb2bd3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 57a561cda141a0fed3129f4f3488e3b91805e638 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4043468de4fc448b6fda670f33b7f935883793a7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- edf9fc528277a53ec37d1bd79fb4f8608cce11ae ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6e1be3032d521e3bf2f49fc87f82c8f978079ea6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bf2083922b7bccc31917bf9cdb74e3d4892c2600 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- eba67171bf6ea653dfb6a6ae288f3c1d10829870 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 277be842bf30848e7292a931169bd4c8ff726dee ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 79ec3a5191f9dfd398d98fe7372ad841f34876ed ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b919010b0459b2540fb609c5d1aad0b8dc0fab01 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 105fea3ef3be4b47cc3602423919329162dfcecf ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b5278c514068f469f2fca7638ef1e1b27556a37a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7f34a25eaa6de187797442bc6e0514289d77fed2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a935501a2f62d103cf9d69d775399dae2e7dfead ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 12b32450c210cec1fdd8b2c19d564776e8054aa3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 26719d252dd8e3a53c08da2ed3c3a8d62fbbc30a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 55f0245f3ee538ec49e84bcb28c33b135a07f0b9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d2c1bd80350f692c5c2298cb88859564ec0a061b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 48af0ac87dc3beef4d3e6c7982b158d50f7b2a6e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 039bfe373c990fc6db3808d255abaff91235e82f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dafe71a3e2d5cfb9b80805a26d5442ca5ad8332f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d5625170b248edc6a570c977fb1f8e7430ffd0b5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8f043f00d5161794ef538802dcc9ba75e375c058 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1a5885a4c5983242b1356b57eafeb59a9d5c0d0f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8c982c1f50bd7ae3bc4a1afc09e9ad11aecd434f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 273400f95ae036c01d4b0fd7a7ca6ab160efd958 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 233e3ffe0ef35dbabe49340ba567499690dcc166 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7b675bf555e89e708f1b8f79bd90796dd395837b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e7252e217fe6d8f05dd50f6e125c33a1c6fff602 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- cbbb6b349e8d0557e7e55e2d05819d6bdaed3769 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ebee400cfa4a532018ee904c22c7e3e6619ca4de ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e10706b6c167454a723636e0929061201a2f461b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 80b60fafa94b794fa77fab85e1df66f52598f3ac ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4e509130b7dfc97eeb4a517d6c9c65a8d6204234 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7d49273897bd317323e0a3bbbc01b76e83370f0c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c4d5e7c9dab813adf9bfd8198bb9bb00c9a9503b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4a061029eddee38110e416e3c4f60d553dafc9e5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 323259cc3d977235f4e7e8980219e5e96d66086e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 80d01f0ef89e287184ba6d07be010ee3f16a74d9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fd47d6b11833870ce23102a3373b7a50a1b45d00 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 58fa2c401856f93712ae6cc45d4dc3458ee4b4f4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dc922f3678a1b01cac2b3f1ec74b831ffec52a71 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2405cf54ac06140a0821f55b34c1d54f699e8e73 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 579d1b8174c9be915c0fa17a67fc38cc6de36ad7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8501e908bb8c531dfa75cef33fcec519027f4e5b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a7129dc00826cb344c0202f152f1be33ea9326fe ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 85c6252b54108750291021a74dc00895f79a7ccf ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1accc498c40e684f870d38b7d128739a0ebf57cf ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 27ceafbb3f74b4677d5bae6c7ea031de07c6cfad ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7c60b88138b836307bdde0487c4ffb82121b1c5e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 70094734d601e1220c95ac586fdffbda3a23e10b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 69a56c4e2addd1ec53bb40e8a18f52353d1fc28c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5962862e9ba0a1c9a14306688973946f6f7ce75c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 03bfdb16cd7cc6e1c7c8d3b59552da7de3d82d1c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 71cd409660bc5b8c211dc7c51afae481d822d593 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 35ddb45b41b3de2d4f783608ad8d8752f6557997 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 30472cf3132b8c03e528b23d1c7533de740e28ab ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1dc09f0ece61ef2bd629e8bfe532aa24f4f8e0c2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ae54e18d7ca7bc8b8fbc667119fb60b25f0f3871 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 207bf7bf30651c3284408d87d7c499e43db6bc83 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9b975d9fcf5924800f9ea5d68d7d79f743ca9af7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d7e59d3ef86beb3b3b3e53a610af122b2220841b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0651f0964ba5a33257ebbda1e92c7a1649a4a058 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 062aafa396866d4dfe8f3fd2f32d46fa7c01b6dd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ea6af04977c197fd07ab812d394dcb61feebaf67 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 657e98094f0f669809bc0e47f3d6bd9a8124cf32 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7c35350e5bc4fe113330818ca6784ff368c5ffef ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 620dbee78ed8481d108327c4c332899df7cb8ef4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6383196b7bb0773c0083a2a3d49a95e5479715bf ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9066712dca21ef35c534e068f2cc4fefdccf1ea3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 933d23bf95a5bd1624fbcdf328d904e1fa173474 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1f66cfbbce58b4b552b041707a12d437cc5f400a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7156cece3c49544abb6bf7a0c218eb36646fad6d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 33ebe7acec14b25c5f84f35a664803fcab2f7781 ---- -254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d with predicate ----- (, ) ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 37c5e30c879213e9ae83b21e9d11e55fc20c54b7 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 40fa69883bd176d43145dfe3a1b222a02ffbb568 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e9e1257eb4dddedb466e71a8dfe3c5209ea153be ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5a9a6f8d38374103fa5aa601b4dd4814b01f0727 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e01ae09037b856941517195513360f19b5baadfa ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 531ea8f97a99eee41a7678d94f14d0dba6587c66 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 2643676ceeeed5a8bb3882587765b5f0ee640a26 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 8d453c412493d6305cb1904d08b22e2ffac7b9c2 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 0554721362df66bc6fcb0e0c35667471f17302cc ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- dbc6dec2df75f3219d74600d8f14dfc4bfa07dff ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 0196759d8235df6485d00e15ed793c4c8ec9f264 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d05a8c98370523bc9f9d6ec6343977d718cb9d1f ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d4106b19e708dcec1568484abbd74fe66000cd68 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9cc32b71b1bc7a9063bd6beffd772a027000ca8d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a6bdc3a0d1ed561b4897a923a22718b5320edf39 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 37dd8d32093343ea7f2795df0797f180f9025211 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 2f17c55b49f70d94f623d8bceec81fdd35f27cb4 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- b5426f216f27fce14d7ba6026be01cc53fd97de0 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5cae29983c6facc24f2bafe93736d652fc189b63 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e5fd9902fbabd3b2ea6fe1e8759e160a947bae80 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9df0c499758875f9efdfb86a7ede75bab47118a6 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d8a35e02b86bb17a388c01cc9f2f99ca1f77c564 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3642831530100f3aa8068abe0d8dcb98606f2fb2 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 2c8391d781911ce94de0f01bc38a0f0f34869dc2 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 6c57eb07c401aad335b9ac5e33a3ab3c96cd28b2 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 65e07bd33d63095131b0e7d0c798c8c140398617 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 78e5f526ada51e17d1c795db2c4bbc40b40c5ebf ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 6b759b7fe8a45ca584b37accb4b94a37634726f4 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 60a7de486651ef524ef8f39ed035a999b1af7e40 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e723b4ae992aa1ca29d00c8cb37d646f7e3d8bda ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3c91985fe47eb9b0a26dbb2940ae126794de62bb ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 1a55397f625b4bdda93cf9acecbb2560f07e197f ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 40914bacba62d254ac1008caa0051d34bc7c9f60 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 2a743455989fe0732d024c33de73cd727c4bc33a ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 1a576118fa7d86d43c74d6a653ccd76a2aad7f0a ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 8fda57e5c361758d34a7b11da8cdfb49df03e1c9 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 81931ad08b90c0fc4e15ae55a37890c80e6d85bc ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- cf70cb8c48de126cc913ef63a881963e8a25e798 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e65e2e59367839a18d97511bb91b9fca71597466 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 604a25f42d7e96d04f80d3b41171519710e4d1f0 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a113b99248c8da0b02b7a4031b8780fac330c68f ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 518c464a47852c7ead791ce5b6093ed552cf8106 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- f0f5f115b232fc948b4228f4c6bd78206763a995 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 958bcf854cbd679333a34bcbd362cda06fc49852 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 58fad3084283604d8c5be243e27a8ad6d4148655 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d2c7c742d0a15ea7e8aabf68d04ec7cc718255a1 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- cc30bf92da0ef0b1f57d2a9f083014872d33d9f5 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 04b8c41aa3ac8077813e64d4dcae5f30845f037e ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 83ef7e4b057bc3b1b06afcfea979c7275d39a80a ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 775127943335431f932e0e0d12de91e307978c71 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- fa754b9251adc4a981c52ddf186fe96e7daddf3e ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 457cc26cef42f2565aeeb4e9b9711d9e8ba8af03 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 89b9eb475dde60c91a2c4763de79dfa6c6268d9c ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9b0197070d48ac3cf405efda55bb5802953b35f2 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9ee0e891a04a536a1bbe14ddc36c07c5b5658e94 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- dbc201a977360215622ff162f9c7aec413322a57 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 49e7e7cfeab5ef837243ec96328d4319a5751988 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 4d046a2fd233a4d113f7856a45ae8912503a1b5d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 11ab75a6827961227ea5049b791db422a9179e1a ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 717fa808ec6600748e2a7d040a109b304ba54fe0 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5a3a15a7c307060f6f31e940d53d2fdaef5a220c ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3f91d0789fac756deccc0c892e24b9fac0430ff0 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9a3c2c958a1cc12031ad59ce0dba579c9407115a ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 96363db6390c601a8b312364e6b65a68191fcffb ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 285d3b5bc5aa5ac7be842e887c0d432f848d2703 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- c93f2091b62505efd1c3cb0721b360c9aad1c8a3 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5789d7eb7247daca4cbda1d72df274b49360d4aa ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5d3cc6a3f1b938135e1a7c1b5cdc02d765da52be ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3321a8ea4d008e34c9e5dcd56cf97aeae1970302 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- da97cf5b64c782a3e5d8c0b9da315378876f6607 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 6863e97b9d28029415b08769a2305f2e69bec91c ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9cc3cb9d08e2a16e0545ab5ca2b9bd8f374bb0de ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a24c7c9129528698e15c84994d142f7d71396ee5 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 7630226b808d644b859d208fa2f0dbeab58cd9c1 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 40c6d66ea0b763d6c67e5a6102c6cc5c07bba924 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 91ac4dc3f45d37a4f669e5dbb4c788d2afaf3e03 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a08c1dc7074610984ab9035f5481276a1b074af2 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 8b137891791fe96927ad78e64b0aad7bded08bdc ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d5199748889e0379b08f1bd0d49b5deac296510d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 35ba86802ce4b730ce3c7e80831d0208c67bd575 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 020fe6bd35e7c1409b167c3db3e4e96fdd96b9be ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 34572b37e0f53e0193e10c8c74ea3a8d13a16969 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 7d2a9f4a436ed7ab00a54bbab5204c8047feca0f ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 0571d0d9fb8c870e94faa835625f8b560c176424 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 7b1ee8384dbd54e6b5c6aef9af1326f071f7f82e ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 8f600cb3cd4749e0a098e07acb7d626ca7293004 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 76adffec249ee11a33a6266947c14ba61f7d50a8 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- f606937a7a21237c866efafcad33675e6539c103 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- e14e3f143e7260de9581aee27e5a9b2645db72de ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 257a8a9441fca9a9bc384f673ba86ef5c3f1715d ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 18e3252a1f655f09093a4cffd5125342a8f94f3b ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 1873db442dc7511fc2c92fbaeb8d998d3e62723d ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 365fb14ced88a5571d3287ff1698582ceacd80d6 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 5ff864138cd1e680a78522c26b583639f8f5e313 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- ea81f14dafbfb24d70373c74b5f8dabf3f2225d9 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 583e6a25b0d891a2f531a81029f2bac0c237cbf9 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 07996a1a1e53ffdd2680d4bfbc2f4059687859a5 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 01eac1a959c1fa5894a86bf11e6b92f96762bdd8 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 6d1212e8c412b0b4802bc1080d38d54907db879d ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 57a4e09294230a36cc874a6272c71757c48139f2 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- cfb278d74ad01f3f1edf5e0ad113974a9555038d ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- fbe062bf6dacd3ad63dd827d898337fa542931ac ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 0974f8737a3c56a7c076f9d0b757c6cb106324fb ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 3323464f85b986cba23176271da92a478b33ab9c ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- c34343d0b714d2c4657972020afea034a167a682 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 4e6bece08aea01859a232e99a1e1ad8cc1eb7d36 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 7c36f3648e39ace752c67c71867693ce1eee52a3 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- a988e6985849e4f6a561b4a5468d525c25ce74fe ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 55e757928e493ce93056822d510482e4ffcaac2d ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 1090701721888474d34f8a4af28ee1bb1c3fdaaa ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 2054561da184955c4be4a92f0b4fa5c5c1c01350 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- f2c8d26d3b25b864ad48e6de018757266b59f708 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 15941ca090a2c3c987324fc911bbc6f89e941c47 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- f78d4a28f307a9d7943a06be9f919304c25ac2d9 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 3e2ba9c2028f21d11988558f3557905d21e93808 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 772b95631916223e472989b43f3a31f61e237f31 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- be06e87433685b5ea9cfcc131ab89c56cf8292f2 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 898d47d1711accdfded8ee470520fdb96fb12d46 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- e5c0002d069382db1768349bf0c5ff40aafbf140 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 654e54d200135e665e07e9f0097d913a77f169da ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- e825f8b69760e269218b1bf1991018baf3c16b04 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 13dd59ba5b3228820841682b59bad6c22476ff66 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 583cd8807259a69fc01874b798f657c1f9ab7828 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- def0f73989047c4ddf9b11da05ad2c9c8e387331 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 619c11787742ce00a0ee8f841cec075897873c79 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- edd9e23c766cfd51b3a6f6eee5aac0b791ef2fd0 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 53152a824f5186452504f0b68306d10ebebee416 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 8c3c271b0d6b5f56b86e3f177caf3e916b509b52 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 3776f7a766851058f6435b9f606b16766425d7ca ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 619662a9138fd78df02c52cae6dc89db1d70a0e5 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 09c3f39ceb545e1198ad7a3f470d4ec896ce1add ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- a8a448b7864e21db46184eab0f0a21d7725d074f ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 5d996892ac76199886ba3e2754ff9c9fac2456d6 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 6a252661c3bf4202a4d571f9c41d2afa48d9d75f ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 867129e2950458ab75523b920a5e227e3efa8bbc ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 1b27292936c81637f6b9a7141dafaad1126f268e ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- b3cde0ee162b8f0cb67da981311c8f9c16050a62 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- ec28ad575ce1d7bb6a616ffc404f32bbb1af67b2 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 2845bbecdd2924831d87a9158a7c8ea8e9f90dbd ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- ae9254a26aff973cab94448e6bf337c3aba78aec ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e078e4a18e5a921f899d7e2cf468a5c096f843a4 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 187618a2aa7d5191df7ff6bfc3f8f2c79922cb08 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- cc6fcfa4f7a87cb7aafbf9c04fe5d3899d49356c ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 47cccda8db8d8d12ce5a19459c3abbc34ef4ee56 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 346a2ca7be2134703a02647c37ca1e4188e92f48 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e8ff784c7324e3ec1ec77ac972007a9003aa1eaa ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- a6232db329f3a17752e98cfde6a8d8a0eed16c7d ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e3b49170d592763b8f4c9e5acd82d5dab95d55b5 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- f4bbdbabaaca83e055e91affc49024359b5cfe82 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 32d16ea71dd8394c8010f92baf8b18c4a24890ec ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 02963ce0a9eb32551a3549ccd688d8f480ab6726 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- c9c8c48aba627d80e17b2d3df82ca67ca59708db ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e9f6714d3edeb9f4eeefbba03066f7b04fe8a342 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 2fe80530d8f4c70d25f5cfe398240025e7cb9a6a ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8892b8399b26ae0aade9dd17cc8bfe41e03c69ed ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- f9090fddaded97b77e3e47b58bf88b254066bd9b ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 9b20893a49cf26644926453ef043800e26f568df ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 220156bceced19f38058b357285cf5a304f70865 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- f16498ab51919b0178189839345bd6809325581f ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e3d07194bc64e75ac160947a935cc55b3d57fac9 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 72c7ef62b5e7ebe7dcd2caf64674f2c517e083a2 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 02cb4e81341a9a16f79882fccacce3d70805f827 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 6117be984d247ddc406403eebb8221fd2498669d ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- a6c15950afb8ef11a624a9266ae64cef417f8eff ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8ab45d22c5c66a9a2bb4ebb3c49baa011b4a321c ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- fb7d23c6c480a084d5490fe1d4d3f5ac435b3a37 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8aced94d44c3467f109b348525dc1da236be4401 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 2759698a94a514a3f95ec025390fe83f00eb53cd ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- eb821b54eede052d32016e5dd8f1875995380f4d ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 0607d8e3c96ecb9ea41c21bcc206d7b36963d950 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- ddc5f628f54d4e747faece5c860317323ad8cd0a ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- a3bcfa3cb2785f5e705c7c872c3bd17cfb39e6a9 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 0ec64179e5a5eb6bba932ec632820c00b5bf9309 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 2516f01f8f44e4e51781ce4ffc642a90318eac4f ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e2b3f8fa48c3fcc632ddb06d3ce7e60edfdb7774 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- ffd109b1fd9baf96cd84689069c08e4eb4aafbdd ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- bb1a03845dce61d36bab550c0c27ae213f0d49d0 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 471e9262fa57e94936227db864b4a9910449e7c3 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 897eb98fab4ad5da901acb2a02f1772b124f1367 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 884f96515df45350a2508fe66b61d40ae97a08fd ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 017178f05f5f3888ca4e4a8023b734f835d1e45d ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8657fb633aa019e7fa7da6c5d75a2a7a20f16d48 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 339a53b8c60292999788f807a2702267f987d844 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- cb6efbe9b6f2f1026584d7e41d9d48f715b421f9 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8d7bbde33a825f266e319d6427b10ab8dbacb068 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e1433def74488e198080455ac6200145994e0b4d ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- ded8b1f7c1bc6cfe941e8304bacfd7edfea9e65e ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- cc83859080755a9fb28d22041325affc8960c065 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- f850ba24c5a13054e0d2b1756113ff15f5147020 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8a9b0487329888d6ef011e4ce9bbea81af398d7b ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 0164e110c8627e46b593df435f5e10b48ff6d965 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 64a6591aa585a5a4022f6ef52cfb29f52d364155 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 4d84239e7ae4518001ff227cc00e0f61010b93bd ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 5619aa6924478084344bb0e5e9f085014512c29b ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 52727504bfd2a737f54c9d3829262bd243fff6e7 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e96b62e0ff7761af2396c4c9d7c97a1adb181fe5 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 5480e62826238ee672da7751ecc743ad90cfbdad ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 1551ce455aca2c2059a1adbffe7eb0a7d351af36 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 3412786d165cd33021de828311c023d563d12c67 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 86f877579dd4cf7453c44b7f436218c83a1e67ad ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 4617b052cbe046772fa1ff1bad1d8431b3f5abd6 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8bd614f28843fb581afdf119a5882e53b0775f04 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- edf32c915f627a2d75fe7b23ba35e1af30b42afc ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 82df59b0d5221a40b1ea99416a05782de0bb1a75 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 6d413ee926d49e1a00414bd20364d88db1466790 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 0af48710062adb0db7b6c02917d69a156a8fad1f ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- b4796b300b291228dcef8ff7fc7af7d0a7eae045 ---- From 9400246e9255cc8aef83fe950cf200724790d431 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 5 Jul 2021 13:55:48 +0100 Subject: [PATCH 0534/2375] Fix IndexFile forwardref --- git/objects/submodule/base.py | 5 ++--- git/types.py | 2 -- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 6824528d0..25f88b37d 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -7,8 +7,6 @@ from unittest import SkipTest import uuid -from git import IndexFile - import git from git.cmd import Git from git.compat import ( @@ -58,6 +56,7 @@ if TYPE_CHECKING: from git.repo import Repo + from git.index import IndexFile # ----------------------------------------------------------------------------- @@ -1012,7 +1011,7 @@ def set_parent_commit(self, commit: Union[Commit_ish, None], check: bool = True) return self @unbare_repo - def config_writer(self, index: Union[IndexFile, None] = None, write: bool = True) -> SectionConstraint: + def config_writer(self, index: Union['IndexFile', None] = None, write: bool = True) -> SectionConstraint: """:return: a config writer instance allowing you to read and write the data belonging to this submodule into the .gitmodules file. diff --git a/git/types.py b/git/types.py index 79f86f04a..0f288e10b 100644 --- a/git/types.py +++ b/git/types.py @@ -36,8 +36,6 @@ Lit_config_levels = Literal['system', 'global', 'user', 'repository'] -T = TypeVar('T', bound=Literal['system', 'global', 'user', 'repository'], covariant=True) - class ConfigLevels_NT(NamedTuple): """NamedTuple of allowed CONFIG_LEVELS""" From e4caa80cc6b6ee2b9c031a7d743d61b4830f2a7e Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 5 Jul 2021 14:03:23 +0100 Subject: [PATCH 0535/2375] put typing_extensions.get_types() behind python version guard --- git/types.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/git/types.py b/git/types.py index 0f288e10b..6604a243f 100644 --- a/git/types.py +++ b/git/types.py @@ -5,13 +5,13 @@ import os import sys from typing import (Callable, Dict, NoReturn, Tuple, Union, Any, Iterator, # noqa: F401 - NamedTuple, TYPE_CHECKING, get_args, TypeVar) # noqa: F401 + NamedTuple, TYPE_CHECKING, TypeVar) # noqa: F401 if sys.version_info[:2] >= (3, 8): - from typing import Final, Literal, SupportsIndex, TypedDict, Protocol # noqa: F401 + from typing import Final, Literal, SupportsIndex, TypedDict, Protocol, get_args # noqa: F401 else: - from typing_extensions import Final, Literal, SupportsIndex, TypedDict, Protocol # noqa: F401 + from typing_extensions import Final, Literal, SupportsIndex, TypedDict, Protocol, get_args # noqa: F401 if sys.version_info[:2] >= (3, 10): from typing import TypeGuard # noqa: F401 From 0939e38fd8fdb0567762b8a68190f7f762cf9756 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 5 Jul 2021 14:11:30 +0100 Subject: [PATCH 0536/2375] fix is_config_level for < 3.8 --- git/types.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/git/types.py b/git/types.py index 6604a243f..692861917 100644 --- a/git/types.py +++ b/git/types.py @@ -11,7 +11,7 @@ if sys.version_info[:2] >= (3, 8): from typing import Final, Literal, SupportsIndex, TypedDict, Protocol, get_args # noqa: F401 else: - from typing_extensions import Final, Literal, SupportsIndex, TypedDict, Protocol, get_args # noqa: F401 + from typing_extensions import Final, Literal, SupportsIndex, TypedDict, Protocol # noqa: F401 if sys.version_info[:2] >= (3, 10): from typing import TypeGuard # noqa: F401 @@ -51,7 +51,10 @@ class ConfigLevels_NT(NamedTuple): def is_config_level(inp: str) -> TypeGuard[Lit_config_levels]: - return inp in get_args(Lit_config_levels) + try: + return inp in get_args(Lit_config_levels) + except NameError: # get_args added in py 3.8 + return True def assert_never(inp: NoReturn, exc: Union[Exception, None] = None) -> NoReturn: From 0fc93b5da3459023de391f14532542f2bae61439 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 5 Jul 2021 14:15:35 +0100 Subject: [PATCH 0537/2375] Rmv is_config_level() and get_args(), not worth the trouble --- git/types.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/git/types.py b/git/types.py index 692861917..9de4449b5 100644 --- a/git/types.py +++ b/git/types.py @@ -9,7 +9,7 @@ if sys.version_info[:2] >= (3, 8): - from typing import Final, Literal, SupportsIndex, TypedDict, Protocol, get_args # noqa: F401 + from typing import Final, Literal, SupportsIndex, TypedDict, Protocol # noqa: F401 else: from typing_extensions import Final, Literal, SupportsIndex, TypedDict, Protocol # noqa: F401 @@ -46,15 +46,8 @@ class ConfigLevels_NT(NamedTuple): repository: Literal['repository'] -ConfigLevels_Tup = Tuple[Lit_config_levels, Lit_config_levels, Lit_config_levels, Lit_config_levels] # Typing this as specific literals breaks for mypy - - -def is_config_level(inp: str) -> TypeGuard[Lit_config_levels]: - try: - return inp in get_args(Lit_config_levels) - except NameError: # get_args added in py 3.8 - return True +ConfigLevels_Tup = Tuple[Lit_config_levels, Lit_config_levels, Lit_config_levels, Lit_config_levels] def assert_never(inp: NoReturn, exc: Union[Exception, None] = None) -> NoReturn: From 53f1195b7e279a0a3d783dff3b4ec68b47261d96 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 5 Jul 2021 14:20:42 +0100 Subject: [PATCH 0538/2375] Add Literal_config_levels.__args__ --- git/types.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/git/types.py b/git/types.py index 9de4449b5..f20221b9f 100644 --- a/git/types.py +++ b/git/types.py @@ -46,8 +46,12 @@ class ConfigLevels_NT(NamedTuple): repository: Literal['repository'] -# Typing this as specific literals breaks for mypy ConfigLevels_Tup = Tuple[Lit_config_levels, Lit_config_levels, Lit_config_levels, Lit_config_levels] +# Typing this as specific literals breaks for mypy + + +def is_config_level(inp: str) -> TypeGuard[Lit_config_levels]: + return inp in Lit_config_levels.__args__ # type: ignore # mypy lies about __args__ def assert_never(inp: NoReturn, exc: Union[Exception, None] = None) -> NoReturn: From 41e9781b640983cd3f38223e5b349eb299a0e4f6 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 5 Jul 2021 14:32:57 +0100 Subject: [PATCH 0539/2375] Improve BlameEntry.commit typing --- git/config.py | 4 ++-- git/repo/base.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/git/config.py b/git/config.py index 4cb13bdfa..6931dd125 100644 --- a/git/config.py +++ b/git/config.py @@ -34,7 +34,7 @@ from typing import (Any, Callable, IO, List, Dict, Sequence, TYPE_CHECKING, Tuple, Union, cast, overload) -from git.types import Lit_config_levels, ConfigLevels_Tup, ConfigLevels_NT, PathLike, TBD, assert_never +from git.types import Lit_config_levels, ConfigLevels_Tup, PathLike, TBD, assert_never if TYPE_CHECKING: from git.repo.base import Repo @@ -51,7 +51,7 @@ # represents the configuration level of a configuration file -CONFIG_LEVELS: ConfigLevels_Tup = ConfigLevels_NT("system", "user", "global", "repository") +CONFIG_LEVELS: ConfigLevels_Tup = ("system", "user", "global", "repository") # Section pattern to detect conditional includes. # https://git-scm.com/docs/git-config#_conditional_includes diff --git a/git/repo/base.py b/git/repo/base.py index e60b6f6cc..e1b1fc765 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -36,7 +36,7 @@ # typing ------------------------------------------------------ -from git.types import ConfigLevels_NT, TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish +from git.types import TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish from typing import (Any, BinaryIO, Callable, Dict, Iterator, List, Mapping, Optional, Sequence, TextIO, Tuple, Type, Union, @@ -58,7 +58,7 @@ class BlameEntry(NamedTuple): - commit: Dict[str, TBD] + commit: Dict[str, 'Commit'] linenos: range orig_path: Optional[str] orig_linenos: range @@ -96,7 +96,7 @@ class Repo(object): # invariants # represents the configuration level of a configuration file - config_level: ConfigLevels_Tup = ConfigLevels_NT("system", "user", "global", "repository") + config_level: ConfigLevels_Tup = ("system", "user", "global", "repository") # Subclass configuration # Subclasses may easily bring in their own custom types by placing a constructor or type here @@ -802,7 +802,7 @@ def blame_incremental(self, rev: TBD, file: TBD, **kwargs: Any) -> Optional[Iter should get a continuous range spanning all line numbers in the file. """ data = self.git.blame(rev, '--', file, p=True, incremental=True, stdout_as_string=False, **kwargs) - commits = {} # type: Dict[str, TBD] + commits: Dict[str, Commit] = {} stream = (line for line in data.split(b'\n') if line) while True: From 23b5d6b434551e1df1c954ab5d2c0166f080fba8 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 5 Jul 2021 15:42:46 +0100 Subject: [PATCH 0540/2375] Add types to submodule.util.py --- git/config.py | 9 +++++---- git/objects/submodule/util.py | 14 ++++++++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/git/config.py b/git/config.py index 6931dd125..bfdfd9166 100644 --- a/git/config.py +++ b/git/config.py @@ -38,6 +38,7 @@ if TYPE_CHECKING: from git.repo.base import Repo + from io import BytesIO # ------------------------------------------------------------- @@ -274,7 +275,7 @@ class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser, obje # list of RawConfigParser methods able to change the instance _mutating_methods_ = ("add_section", "remove_section", "remove_option", "set") - def __init__(self, file_or_files: Union[None, PathLike, IO, Sequence[Union[PathLike, IO]]] = None, + def __init__(self, file_or_files: Union[None, PathLike, BytesIO, Sequence[Union[PathLike, BytesIO]]] = None, read_only: bool = True, merge_includes: bool = True, config_level: Union[Lit_config_levels, None] = None, repo: Union['Repo', None] = None) -> None: @@ -303,7 +304,7 @@ def __init__(self, file_or_files: Union[None, PathLike, IO, Sequence[Union[PathL self._proxies = self._dict() if file_or_files is not None: - self._file_or_files: Union[PathLike, IO, Sequence[Union[PathLike, IO]]] = file_or_files + self._file_or_files: Union[PathLike, 'BytesIO', Sequence[Union[PathLike, 'BytesIO']]] = file_or_files else: if config_level is None: if read_only: @@ -650,7 +651,7 @@ def write(self) -> None: a file lock""" self._assure_writable("write") if not self._dirty: - return + return None if isinstance(self._file_or_files, (list, tuple)): raise AssertionError("Cannot write back if there is not exactly a single file to write to, have %i files" @@ -675,7 +676,7 @@ def write(self) -> None: with open(fp, "wb") as fp_open: self._write(fp_open) else: - fp = cast(IO, fp) + fp = cast(BytesIO, fp) fp.seek(0) # make sure we do not overwrite into an existing file if hasattr(fp, 'truncate'): diff --git a/git/objects/submodule/util.py b/git/objects/submodule/util.py index 1db473df9..cde18d083 100644 --- a/git/objects/submodule/util.py +++ b/git/objects/submodule/util.py @@ -7,7 +7,7 @@ # typing ----------------------------------------------------------------------- -from typing import Any, TYPE_CHECKING, Union +from typing import Any, Sequence, TYPE_CHECKING, Union from git.types import PathLike @@ -16,6 +16,8 @@ from weakref import ReferenceType from git.repo import Repo from git.refs import Head + from git import Remote + from git.refs import RemoteReference __all__ = ('sm_section', 'sm_name', 'mkhead', 'find_first_remote_branch', @@ -24,12 +26,12 @@ #{ Utilities -def sm_section(name): +def sm_section(name: str) -> str: """:return: section title used in .gitmodules configuration file""" - return 'submodule "%s"' % name + return f'submodule {name}' -def sm_name(section): +def sm_name(section: str) -> str: """:return: name of the submodule as parsed from the section name""" section = section.strip() return section[11:-1] @@ -40,7 +42,7 @@ def mkhead(repo: 'Repo', path: PathLike) -> 'Head': return git.Head(repo, git.Head.to_full_path(path)) -def find_first_remote_branch(remotes, branch_name): +def find_first_remote_branch(remotes: Sequence['Remote'], branch_name: str) -> 'RemoteReference': """Find the remote branch matching the name of the given branch or raise InvalidGitRepositoryError""" for remote in remotes: try: @@ -99,7 +101,7 @@ def flush_to_index(self) -> None: #{ Overridden Methods def write(self) -> None: - rval = super(SubmoduleConfigParser, self).write() + rval: None = super(SubmoduleConfigParser, self).write() self.flush_to_index() return rval # END overridden methods From c2317a768f4d6b72b9c20d4fbe455af8a0d77c36 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 5 Jul 2021 18:47:44 +0100 Subject: [PATCH 0541/2375] Make bytesIO forwardref --- git/config.py | 6 +++--- git/objects/submodule/base.py | 2 +- git/objects/submodule/root.py | 15 ++++++++++++--- git/refs/head.py | 11 ++++++++--- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/git/config.py b/git/config.py index bfdfd9166..0ce3e8313 100644 --- a/git/config.py +++ b/git/config.py @@ -275,7 +275,7 @@ class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser, obje # list of RawConfigParser methods able to change the instance _mutating_methods_ = ("add_section", "remove_section", "remove_option", "set") - def __init__(self, file_or_files: Union[None, PathLike, BytesIO, Sequence[Union[PathLike, BytesIO]]] = None, + def __init__(self, file_or_files: Union[None, PathLike, 'BytesIO', Sequence[Union[PathLike, 'BytesIO']]] = None, read_only: bool = True, merge_includes: bool = True, config_level: Union[Lit_config_levels, None] = None, repo: Union['Repo', None] = None) -> None: @@ -667,7 +667,7 @@ def write(self) -> None: fp = self._file_or_files # we have a physical file on disk, so get a lock - is_file_lock = isinstance(fp, (str, IOBase)) # can't use Pathlike until 3.5 dropped + is_file_lock = isinstance(fp, (str, os.PathLike, IOBase)) # can't use Pathlike until 3.5 dropped if is_file_lock and self._lock is not None: # else raise Error? self._lock._obtain_lock() @@ -676,7 +676,7 @@ def write(self) -> None: with open(fp, "wb") as fp_open: self._write(fp_open) else: - fp = cast(BytesIO, fp) + fp = cast('BytesIO', fp) fp.seek(0) # make sure we do not overwrite into an existing file if hasattr(fp, 'truncate'): diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 25f88b37d..7cd4356e6 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -392,7 +392,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No if sm.exists(): # reretrieve submodule from tree try: - sm = repo.head.commit.tree[path] + sm = repo.head.commit.tree[str(path)] sm._name = name return sm except KeyError: diff --git a/git/objects/submodule/root.py b/git/objects/submodule/root.py index 0af487100..c6746ad88 100644 --- a/git/objects/submodule/root.py +++ b/git/objects/submodule/root.py @@ -10,6 +10,15 @@ import logging +# typing ------------------------------------------------------------------- + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from git.repo import Repo + +# ---------------------------------------------------------------------------- + __all__ = ["RootModule", "RootUpdateProgress"] log = logging.getLogger('git.objects.submodule.root') @@ -42,7 +51,7 @@ class RootModule(Submodule): k_root_name = '__ROOT__' - def __init__(self, repo): + def __init__(self, repo: 'Repo'): # repo, binsha, mode=None, path=None, name = None, parent_commit=None, url=None, ref=None) super(RootModule, self).__init__( repo, @@ -55,7 +64,7 @@ def __init__(self, repo): branch_path=git.Head.to_full_path(self.k_head_default) ) - def _clear_cache(self): + def _clear_cache(self) -> None: """May not do anything""" pass @@ -343,7 +352,7 @@ def update(self, previous_commit=None, recursive=True, force_remove=False, init= return self - def module(self): + def module(self) -> 'Repo': """:return: the actual repository containing the submodules""" return self.repo #} END interface diff --git a/git/refs/head.py b/git/refs/head.py index c698004dc..97c8e6a1f 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -5,9 +5,13 @@ from .symbolic import SymbolicReference from .reference import Reference -from typing import Union +from typing import Union, TYPE_CHECKING + from git.types import Commit_ish +if TYPE_CHECKING: + from git.repo import Repo + __all__ = ["HEAD", "Head"] @@ -25,12 +29,13 @@ class HEAD(SymbolicReference): _ORIG_HEAD_NAME = 'ORIG_HEAD' __slots__ = () - def __init__(self, repo, path=_HEAD_NAME): + def __init__(self, repo: 'Repo', path=_HEAD_NAME): if path != self._HEAD_NAME: raise ValueError("HEAD instance must point to %r, got %r" % (self._HEAD_NAME, path)) super(HEAD, self).__init__(repo, path) + self.commit: 'Commit_ish' - def orig_head(self): + def orig_head(self) -> 'SymbolicReference': """ :return: SymbolicReference pointing at the ORIG_HEAD, which is maintained to contain the previous value of HEAD""" From a9351347d704db02bd3d1103e9715ff6a999e3f9 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 5 Jul 2021 19:10:21 +0100 Subject: [PATCH 0542/2375] Add types to submodule.root.py --- git/objects/submodule/root.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/git/objects/submodule/root.py b/git/objects/submodule/root.py index c6746ad88..bcac5419a 100644 --- a/git/objects/submodule/root.py +++ b/git/objects/submodule/root.py @@ -12,10 +12,13 @@ # typing ------------------------------------------------------------------- -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Union + +from git.types import Commit_ish if TYPE_CHECKING: from git.repo import Repo + from git.util import IterableList # ---------------------------------------------------------------------------- @@ -70,9 +73,11 @@ def _clear_cache(self) -> None: #{ Interface - def update(self, previous_commit=None, recursive=True, force_remove=False, init=True, - to_latest_revision=False, progress=None, dry_run=False, force_reset=False, - keep_going=False): + def update(self, previous_commit: Union[Commit_ish, None] = None, # type: ignore[override] + recursive: bool = True, force_remove: bool = False, init: bool = True, + to_latest_revision: bool = False, progress: Union[None, 'RootUpdateProgress'] = None, + dry_run: bool = False, force_reset: bool = False, keep_going: bool = False + ) -> 'RootModule': """Update the submodules of this repository to the current HEAD commit. This method behaves smartly by determining changes of the path of a submodules repository, next to changes to the to-be-checked-out commit or the branch to be @@ -137,8 +142,8 @@ def update(self, previous_commit=None, recursive=True, force_remove=False, init= previous_commit = repo.commit(previous_commit) # obtain commit object # END handle previous commit - psms = self.list_items(repo, parent_commit=previous_commit) - sms = self.list_items(repo) + psms: 'IterableList[Submodule]' = self.list_items(repo, parent_commit=previous_commit) + sms: 'IterableList[Submodule]' = self.list_items(repo) spsms = set(psms) ssms = set(sms) @@ -171,8 +176,8 @@ def update(self, previous_commit=None, recursive=True, force_remove=False, init= csms = (spsms & ssms) len_csms = len(csms) for i, csm in enumerate(csms): - psm = psms[csm.name] - sm = sms[csm.name] + psm: 'Submodule' = psms[csm.name] + sm: 'Submodule' = sms[csm.name] # PATH CHANGES ############## From 0a6d9d669979cc5a89ca73f8f4843cba47b4486a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 6 Jul 2021 13:45:16 +0800 Subject: [PATCH 0543/2375] Remove accidental file and assure they don't come back --- .gitignore | 1 + output.txt | 18691 --------------------------------------------------- 2 files changed, 1 insertion(+), 18691 deletions(-) delete mode 100644 output.txt diff --git a/.gitignore b/.gitignore index db7c881cd..2bae74e5f 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ nbproject .mypy_cache/ .pytest_cache/ monkeytype.sqlite3 +output.txt diff --git a/output.txt b/output.txt deleted file mode 100644 index 25c8c95e5..000000000 --- a/output.txt +++ /dev/null @@ -1,18691 +0,0 @@ -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3d33c113b1dfa4be7e3c9924fae029c178505c3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e3068025b64bee24efc1063aba5138708737c158 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6ee9751d4e9e9526dbe810b280a4b95a43105ec9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f3e78d98e06439eea1036957796f8df9f386930f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 141b78f42c7a3c1da1e5d605af3fc56aceb921ab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5e4334f38dce4cf02db5f11a6e5844f3a7c785c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9aaaa83c44d5d23565e982a705d483c656e6c157 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bbf04348b0c79be2103fd3aaa746685578eb12fd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1578baf817c2526d29276067d2f23d28b6fab2b1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9db24bc7a617cf93321bb60de6af2a20efd6afc1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 80d43111b6bb73008683ad2f5a7c6abbab3c74ed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 86ec7573a87cd8136d7d497b99594f29e17406d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 02cb16916851336fcf2778d66a6d54ee15d086d7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5a9bbef0d2d8fc5877dab55879464a13955a341 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 369e564174bfdd592d64a027bebc3f3f41ee8f11 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 36dbe7e9b55a09c68ba179bcf2c3d3e1b7898ef3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6d0f693184884ffac97908397b074e208c63742b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 040108747e2f868c61f870799a78850b792ddd0a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 300831066507bf8b729a36a074b5c8dbc739128f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bea9077e8356b103289ba481a48d27e92c63ae7a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c0f47b3076a84c5c32cccc95748f18c50e3d948 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 195ecc3da4a851734a853af6d739c21b44e0d7f0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 85a45a691ad068a4a25566cc1ed26db09d46daa4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2efb814d0c3720f018f01329e43d9afa11ddf54 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cfc70fe92d42a853d4171943bde90d86061e3f3a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8724dfa6bf8f6de9c36d10b9b52ab8a1ea30c3b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 640d1506e7f259d675976e7fffcbc854d41d4246 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d1a9a232fbde88a347935804721ec7cd08de6f65 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a771adc5352dd3876dd2ef3d0c52c8e803fc084 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 643e6369553759407ca433ed51a5a06b47e763d4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aa0ccead680443b07fd675f8b906758907bdb415 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 982eefb2008826604d54c1a6622c12240efb0961 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c1d5c614c38db015485190d65db05b0b75d171d4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 152a60f0bd7c5b495a3ce91d0e45393879ec0477 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 14851034ab5204ddb7329eb34bb0964d3f206f2b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e15b57bf0bb40ccc6ecbebc5b008f7e96b436f19 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c8c696b3cf0c2441aefaef3592e2b815472f162a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 32e4e08cf9ccfa90f0bc6d26f0c7007aeafcffeb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 539980d51c159cb9922d0631a2994835b4243808 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a771e102ec2238a60277e2dce68283833060fd37 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22d2e4a0bfd4c2b83e718ead7f198234e3064929 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1199f90c523f170c377bf7a5ca04c2ccaab67e08 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bafb4cc0a95428cbedaaa225abdceecee7533fac ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b8e700e952d135c6903b97f022211809338232e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3e79604c8bdfc367f10a4a522c9bf548bdb3ab9a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 83017bce083c58f9a6fb0c7b13db8eeec6859493 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1143e1c66b8b054a2fefca2a23b1f499522ddb76 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5385cbd969cc8727777d503a513ccee8372cd506 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c594195eb614a200e1abb85706ec7b8b7c91268 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9563d27fbde02b8b2a8b0d808759cb235b4e083b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3470e269bcdc9091d0c5e25e7c09ce175c7cee77 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 96928d2eb3d98c475fd0737240c06bf8e5f96ad6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 545ac2574cfb75b02e407e814e10f76bc485926d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b9a2ea80aa9970bbd625da4c986d29a36c405629 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d8bf7d416f60f52335d128cf16fbba0344702e49 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e39c8b07d1c98ddf267fbc69649ecbbe043de0fd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a08733d76a8254a20a28f4c3875a173dcf0ad129 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6cc1e7e08094494916db1aadda17e03ce695d049 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5fe80b03196b1d2421109fad5b456ba7ae4393e2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c1cedc5c417ddf3c2a955514dcca6fe74913259b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1c2dd54358dd526d1d08a8e4a977f041aff74174 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 158bc981130bfbe214190cac19da228d1f321fe1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c6d952b17e63c92a060c08eac38165c6fafa869 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2f233e2405c16e2b185aa90cc8e7ad257307b991 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bccdb483aaa7235b85a49f2c208ee1befd2706dd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e9f8f159ebad405b2c08aa75f735146bb8e216ef ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f51fe3e66d358e997f4af4e91a894a635f7cb601 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e129846a1a5344c8d7c0abe5ec52136c3a581cce ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- abd23a37d8b93721c0e58e8c133cef26ed5ba1f0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 723f100a422577235e06dc024a73285710770fca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28d6c90782926412ba76838e7a81e60b41083290 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae334e4d145f6787fd08e346a925bbc09e870341 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b89b089972b5bac824ac3de67b8a02097e7e95d7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 98f6995bdcbd10ea0387d0c55cb6351b81a857fd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae0b6fe15e0b89de004d4db40c4ce35e5e2d4536 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9dc8fffd179b3d7ad7c46ff2e6875cc8075fabf3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 21b0448b65317b2830270ff4156a25aca7941472 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6d83f44007c5c581eae7ddc6c5de33311b7c1895 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f043d8a1d7f4076350ff0c778bfa60f7aa2f7aa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d8bbfea4cdcb36ce0e9ee7d7cad4c41096d4d54f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fe426d404b727d0567f21871f61cc6dc881e8bf0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 873823f39275ceb8d65ebfae74206c7347e07123 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7f662857381a0384bd03d72d6132e0b23f52deef ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f9e7a3d93da741f81a5af2e84422376c54f1f337 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ab7c3223076306ca71f692ed5979199863cf45a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 91562247e0d11d28b4bc6d85ba50b7af2bd7224b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 756b7ad43d0ad18858075f90ce5eaec2896d439c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1fd07a0a7a6300db1db8b300a3f567b31b335570 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 91645aa87e79e54a56efb8686eb4ab6c8ba67087 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d7729245060f9aecfef4544f91e2656aa8d483ec ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 54e27f7bbb412408bbf0d2735b07d57193869ea6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 47d9f1321c3a6da68a7909fcb1a66a209066d4c9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c27cd907f67f984649ff459dacf3ba105e90ebc2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f498de9bfd67bcbb42d36dfb8ff9e59ec788825b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be81304f2f8aa4a611ba9c46fbb351870aa0ce29 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1c2502ee83927437442b13b83f3a7976e4146a01 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4df4159413a4bf30a891f21cd69202e8746c8fea ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 88f3dc2eb94e9e5ff8567be837baf0b90b354f35 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 21a6cb7336b61f904198f1d48526dcbe9cba6eec ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f3d91ca75500285d19c6ae2d4bf018452ad822a6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a5e607e8aa62ca3778f1026c27a927ee5c79749b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50f763cfe38a1d69a3a04e41a36741545885f1d8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ffefb154982c6cc47c9be6b3eae6fb1170bb0791 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 630d030058c234e50d87196b624adc2049834472 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 66c5b33fb5405fe12756f07048e3bcc3a958b2c1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9d1a489931ecbdd652111669c0bd86bcd6f5abbe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ddbe4bc24e634e6496abd3bc6ce3c4377cdf2fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3236f8b966061b23ba063f3f7e1652764fee968f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ad07f7b23e762e3eb99ce45020375d2bd743fc5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e0acb8371bb2b68c2bda04db7cb2746ba3f9da86 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ce3fe7cef8910aadc2a2b39a3dab4242a751380 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1410bcc76725b50be794b385006dedd96bebf0fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bfcdf2bef08f17b4726b67f06c84be3bfe2c39b8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6f038611ff120f8283f0f1a56962f95b66730c72 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 06bec1bcd1795192f4a4a274096f053afc8f80ec ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e2feb62c17acd1dddb6cd125d8b90933c32f89e1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c00567d3025016550d55a7abaf94cbb82a5c44fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 98a17a28a21fe5f06dd2da561839fdbaa1912c64 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b54b9399920375f0bab14ff8495c0ea3f5fa1c33 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 38fc944390d57399d393dc34b4d1c5c81241fb87 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2a9b2f22c6fb5bd3e30e674874dbc8aa7e5b00ae ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d565a874f29701531ce1fc0779592838040d3edf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d74543a545a9468cabec5d20519db025952efed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 34c0831453355e09222ccc6665782d7070f5ddab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4d3809161fc54d6913c0c2c7f6a7b51eebe223f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 346424daaaf2bb3936b5f4c2891101763dc2bdc0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 261aedd2e13308755894405c7a76b72373dab879 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e48e52001d5abad7b28a4ecadde63c78c3946339 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f5320e8171324a002d3769824152cf5166a21a2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1287f69b42fa7d6b9d65abfef80899b22edfef55 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3c6c81b3281333a5a1152f667c187c9dce12944 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ac93b1d7e0694ceb303ee72c312921a9b1588f4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 47ac37be2e0e14e958ad24dc8cba1fa4b7f78700 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ed61f72c611deb07e0368cebdc9f06da32150cd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bb0f3d78d6980a1d43f05cb17a8da57a196a34f3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fe2fbc5913258ef8379852c6d45fcf226b09900b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4921139819c7949abaad6cc5679232a0fbb0632 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 34802014ca0c9546e73292260aab5e4017ffcd9a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 80701fc6f4bf74d3c6176d76563894ff0f3b32bb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a9a5414300a245b6e93ea4f39fbca792c3ec753f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9fbae711b76a4f2fa9345f43da6d2cdedd75d6c3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 26fc5866f6ed994f3b9d859a3255b10d04ee653d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea29541e213df928d356b3c12d4d074001395d3c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 508807e59ce9d6c3574d314d502e82238e3e606c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e395ac90bf088ad6b5de7dadb6531a6e7f3f4f3f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b259098782c2248f6160d2b36d42672d6925023a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 048ffa58468521c043de567f620003457b8b3dbe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 27c31e2fde54c0587c032ccffdaa7c4ddf5b2ae5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- df95149198744c258ed6856044ac5e79e6b81404 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a41a8b93167a59cd074eb3175490cd61c45b6f6a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d5054fdb1766cb035a1186c3cef4a14472fee98d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6569c4849197c9475d85d05205c55e9ef28950c1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aaa84341f876927b545abdc674c811d60af00561 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53e5fb3733e491925a01e9da6243e93c2e4214c1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20863cfe4a1b0c5bea18677470a969073570e41c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aa1b156ee96f5aabdca153c152ec6e3215fdf16f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a223c7b7730c53c3fa1e4c019bd3daefbb8fd74b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 619c989915b568e4737951fafcbae14cd06d6ea6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d4ce247c0380e3806e47b5b3e2b66c29c3ab2680 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be074c655ad53927541fc6443eed8b0c2550e415 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c15a6e1923a14bc760851913858a3942a4193cdb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e973e6f829de5dd1c09d0db39d232230e7eb01d8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae2b59625e9bde14b1d2d476e678326886ab1552 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a2d39529eea4d0ecfcd65a2d245284174cd2e0aa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c7b16ade191bb753ebadb45efe6be7386f67351d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e8eae18dcc360e6ab96c2291982bd4306adc01b9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 67680a0877f01177dc827beb49c83a9174cdb736 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e7671110bc865786ffe61cf9b92bf43c03759229 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 503b62bd76ee742bd18a1803dac76266fa8901bc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ede325d15ba9cba0e7fe9ee693085fd5db966629 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 43e430d7fa5298f6db6b1649c1a77c208bacf2fc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dfb0a9c4bca590efaa86f8edc3fdb62bd536bce7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- acd82464a11f3c2d3edc1d152d028a142da31a9f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e84300df7deed9abf248f79526a5b41fd2f7f76e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 597bc56a32e1b709eefa4e573f11387d04629f0d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- becf5efbfc4aee2677e29e1c8cbd756571cb649d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6e8aa9b0aefc30ee5807c2b2cf433a38555b7e0b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 96c6ab4f7572fd5ca8638f3cb6e342d5000955e7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bfce49feb0be6c69f7fffc57ebdd22b6da241278 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b825dc74773ffa5c7a45b48d72616b222ad2023e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a0cb95c5df7a559633c48f5b0f200599c4a62091 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c767b5206f1e9c8536110dda4d515ebb9242bbeb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 85a5a8c6a931f8b3a220ed61750d1f9758d0810a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 18caa610d50b92331485013584f5373804dd0416 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d9f1495004710b77767393a29f33df76d7b0fb5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17f5d13a7a741dcbb2a30e147bdafe929cff4697 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1531d789df97dbf1ed3f5b0340bbf39918d9fe48 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1d52f98935b70cda4eede4d52cdad4e3b886f639 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 723d20f1156530b122e9785f5efc6ebf2b838fe0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b08651e5ae2bffef5e4fb44fbdd7d467715e3b73 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fc94b89dabd9df49631cbf6b18800325f3521864 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e40ad6369bc74d01af4dc41d3a9b8e25ac2aa01e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 46889d1dce4506813206a8004f6c3e514f22b679 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de4cfcc4a1fcb24b72a31c5feff8c67d2ff930fc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 987f9bbd08446de3f9d135659f2e36ad6c9d14fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 27b4efed7a435153f18598796473b3fba06c513d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f7b7eb6245e7d7c4535975268a9be936e2c59dc8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c7887c66483ffa9a839ecf1a53c5ef718dcd1d2d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 36cdfd3209909163549850709d7f12fdf1316434 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f4a49ff2dddc66bbe25af554caba2351fbf21702 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 45eb728554953fafcee2aab0f76ca65e005326b0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c6ee00d0dadcd7b10d60a2985db4fe137ca7cfed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d83f6e84cbeb45dce4576a9a4591446afefa50b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 87a6ffa13ae2951a168cde5908c7a94b16562b96 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 73790919dbe038285a3612a191c377bc27ae6170 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a4b8e467e44bc1ca1ebf481ac2dfc1baaf9688dc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 763ef75d12f0ad6e4b79a7df304c7b5f1b5a11f2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b6ed8d46c72366e111b9a97a7c238ef4af3bf4dc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3efacd7aea48c93e0a42c1e83bf3c96e9e50f178 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c86bea60dde4016dd850916aa2e0db5260e1ff61 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d4b4ea9c84198a9b6003611a3af00ee677d09a6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d437078d8f95cb98f905162b2b06d04545806c59 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 491440543571b07c849c0ef9c4ebf5c27f263bc0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1dec7a822424bbe58b7b2a7787b1ea32683a9c19 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fce04b7e4e6e1377aa7f07da985bb68671d36ba4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28bda3aaa19955d1c172bd86d62478bee024bf7b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a6e4a6416162a698d87ba15693f2e7434beac644 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4fd7b945dfca73caf00883d4cf43740edb7516df ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1bfb44c62d15a45ca4d47b4cc482ebddb8d0ae4f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a182be6716d24fb49cb4517898b67ffcdfb5bca4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b18fd3fd13d0a1de0c3067292796e011f0f01a05 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5d0ad081ca0e723ba2a12c876b4cd1574485c726 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c824bcd73de8a7035f7e55ab3375ee0b6ab28c46 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5c12ff49fc91e66f30c5dc878f5d764d08479558 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56e942318f3c493c8dcd4759f806034331ebeda5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d46e3fe9cb0dea2617cd9231d29bf6919b0f1e91 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 68f8a43d1b643318732f30ee1cd75e1d315a4537 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3936084cdd336ce7db7d693950e345eeceab93a5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1ef4552404ba3bc92554a6c57793ee889523e3a8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c8cf69b6f8bd73525b5375bd73f1fc79ae322a82 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1de8af907dbced4fde64ee2c7f57527fc43ad1cc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1527b5734c0f2821fd6f38c1a1d70723a4bb88ab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6f55c17f48d7608072199496fbcefa33f2e97bf0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e0c65d6638698f4e3a9e726efca8c0bcf466cd62 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b9d3b961bdf79964b883d3179f085d8835e528d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 02e942b7c603163c87509195d76b2117c4997119 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c80d727e374321573bb00e23876a67c77ff466e3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 725bde98d5cf680a087b6cb47a11dc469cfe956c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 965a08c3f9f2fbd62691d533425c699c943cb865 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 95bb489a50f6c254f49ba4562d423dbf2201554f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- acac4bb07af3f168e10eee392a74a06e124d1cdd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4cfc682ff87d3629b31e0196004d1954810b206c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c255c14e9eb15f4ff29a4baead3ed31a9943e04e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f219b53f339fc0133800fac96deaf75eb4f9bf6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 79d9c4cb175792e80950fdd363a43944fb16a441 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a05e49d2419d65c59c65adf5cd8c05f276550e1d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4228b2cc8e1c9bd080fe48db98a46c21305e1464 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 60e54133aa1105a1270f0a42e74813f75cd2dc46 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a8535d1a2485b4e063ab9ef0a2719a1aab8187d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a83eee5bcee64eeb000dd413ab55aa98dcc8c7f2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e3e8ce69bec72277354eff252064a59f515d718a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b5a37564b6eec05b98c2efa5edcd1460a2df02aa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17f245cad19bf77a5a5fecdee6a41217cc128a73 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 45c1c99a22e95d730d3096c339d97181d314d6ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- db828cdfef651dd25867382d9dc5ac4c4f7f1de3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7297ff651c3cc6abf648b3fe730c2b5b1f3edbd3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2840c626d2eb712055ccb5dcbad25d040f17ce1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a67e4e49c4e7b82e416067df69c72656213e886 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 342a0276dbf11366ae91ce28dcceddc332c97eaf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 31b3673bdb9d8fb7feea8ae887be455c4a880f76 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 863a40e0d35f3ff3c3e4b5dc9ff1272e1b1783b1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e1060a2a8c90c0730c3541811df8f906dac510a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de9a6bb0c8931e7f74ea35edb372e5ca7d0a5047 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8a308613467a1510f8dac514624abae4e10c0779 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6becbaf35fa2f807837284d33649ba5376b3fe21 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d0556a31916a709e9da3eafb92fc6b8bf69896c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c9d884511ed2c8e9ca96de04df835aaa6eb973eb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 45eb6bd22554e5dad2417d185d39fe665b7a7419 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 04357d0d46fee938a618b64daed1716606e05ca5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1e1e19d33e1caa107dc0a6cc8c1bfe24d8153f51 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bc8c91200a7fb2140aadd283c66b5ab82f9ad61e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 891b124f5cc6bfd242b217759f362878b596f6e2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3f879c71bdf0aac7af9b01304ff02e94b5af71b7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae2ff0f9d704dc776a1934f72a339da206a9fff4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 750e9677b1ce303fa913c3e0754c3884d6517626 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a6fca2410a56225992959e5e4f8019e16757bfd1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a47a9c8d8253d0ae2a233fa8599b1a1c54ec53f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f6aa8d116eb33293c0a9d6d600eb7c32832758b9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8511513540ece43ac8134f3d28380b96db881526 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8a72a7a43ae004f1ae1be392d4322c07b25deff5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 616ae503462ea93326fa459034f517a4dd0cc1d1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4ae92aa57324849dd05997825c29242d2d654099 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f54c8919f297a5e5c34517d9fed0666c9d8aa10 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1234a1077f24ca0e2f1a9b4d27731482a7ed752b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 88a7002acb50bb9b921cb20868dfea837e7e8f26 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4d9b7b09a7c66e19a608d76282eacc769e349150 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 257264743154b975bc156f425217593be14727a9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d48ed95cc7bd2ad0ac36593bb2440f24f675eb59 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7ea782803efe1974471430d70ee19419287fd3d0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6fc9e6150957ff5e011142ec5e9f8522168602ec ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 706d3a28b6fa2d7ff90bbc564a53f4007321534f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3621c06c3173bff395645bd416f0efafa20a1da6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 123cb67ea60d2ae2fb32b9b60ebfe69e43541662 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22c4671b58a6289667f7ec132bc5251672411150 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5991698ee2b3046bbc9cfc3bd2abd3a881f514dd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae2baadf3aabe526bdaa5dfdf27fac0a1c63aa04 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53b65e074e4d62ea5d0251b37c35fd055e403110 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0b820e617ab21b372394bf12129c30174f57c5d7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5b6080369e7ee47b7d746685d264358c91d656bd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5025b8de2220123cd80981bb2ddecdd2ea573f6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- da5e58a47d3da8de1f58da4e871e15cc8272d0e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- da09f02e67cb18e2c5312b9a36d2891b80cd9dcd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 95436186ffb11f51a0099fe261a2c7e76b29c8a6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a2b9ac30337761fa0df74ce6e0347c5aabd7c072 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2af98929bd185cf1b4316391078240f337877f66 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8df6b87a793434065cd9a01fcaa812e3ea47c4dd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 90811b1bd194e4864f443ae714716327ba7596c2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a40d848794133de7b6e028f2513c939d823767cb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7e231a4f184583fbac2d3ef110dacd1f015d5e1c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a7c4b323bb2d3960430b11134ee59438e16d254e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9eb902eee03806db5868fc84afb23aa28802e841 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 81223de22691e2df7b81cd384ad23be25cfd999c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3f277ba01f9a93fb040a365eef80f46ce6a9de85 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d5cbe7d7de5a29c7e714214695df1948319408d0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c2e872f742e7d3c64c7e0fdb85a5d711aff1970 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 322db077a693a513e79577a0adf94c97fc2be347 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ba67e4ff74e97c4de5d980715729a773a48cd6bc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8e3883a0691ce1957996c5b37d7440ab925c731e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4d8fb73daa82420bdc69c37f0d58f7cb4cd505a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3eee7af0e69a39da2dc6c5f109c10975fae5a93e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9780b7a0f39f66d6e1946a7d109fc49165b81d64 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d6d544f67a1f3572781271b5f3030d97e6c6d9e2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55885e0c4fc40dd2780ff2cde9cda81a43e682c9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7aba59a2609ec768d5d495dafd23a4bce8179741 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c8e70749887370a99adeda972cc3503397b5f9a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3a1e0d7117b9e4ea4be3ef4895e8b2b4937ff98a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0e9eef45194039af6b8c22edf06cfd7cb106727a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f6b8bf020863f499bf956943a5ee56d067407f8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c39afa1f85f3293ad2ccef684ff62bf0a36e73c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ff13922f6cfb11128b7651ddfcbbd5cad67e477f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bed3b0989730cdc3f513884325f1447eb378aaee ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a7e7a769087b1790a18d6645740b5b670f5086b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7dcb07947cd71f47b5e2e5f101d289e263506ca9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 15c4a95ada66977c8cf80767bf1c72a45eb576b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 18fff4d4a28295500acd531a1b97bc3b89fad07e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f7ed51ba4c8416888f5744ddb84726316c461051 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 614907b7445e2ed8584c1c37df7e466e3b56170f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28fdf05b1d7827744b7b70eeb1cc66d3afd38c82 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1ddf05a78475a194ed1aa082d26b3d27ecc77475 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0441fdcbc4ea1ab8ce5455f2352436712f1b30bb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ab7ac2397d60f1a71a90bf836543f9e0dcad2d0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8005591231c8ae329f0ff320385b190d2ea81df0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be34ec23c48d6d5d8fd2ef4491981f6fb4bab8e6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5d602f267c32e1e917599d9bcdcfec4eef05d477 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e9bd04844725661c8aa2aef11091f01eeab69486 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a92ab8028c7780db728d6aad40ea1f511945fc8e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3287148a2f99fa66028434ce971b0200271437e7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56d7a9b64b6d768dd118a02c1ed2afb38265c8b9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f5d11b750ecc982541d1f936488248f0b42d75d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9d0473c1d1e6cadd986102712fff9196fff96212 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 85b836b1efb8a491230e918f7b81da3dc2a232c4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5558400e86a96936795e68bb6aa95c4c0bb0719 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 598cd1d7f452e05bfcda98ce9e3c392cf554fe75 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b8f10e74d815223341c3dd3b647910b6e6841bd6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56d5d0c70cf3a914286fe016030c9edec25c3ae0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5127e167328c7da2593fea98a27b27bb0acece68 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 916c45de7c9663806dc2cd3769a173682e5e8670 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fbd096841ddcd532e0af15eb1f42c5cd001f9d74 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c6b08c27a031f8b8b0bb6c41747ca1bc62b72706 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2e6957abf8cd88824282a19b74497872fe676a46 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dbe78c02cbdfd0a539a1e04976e1480ac0daf580 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c437ee5deb8d00cf02f03720693e4c802e99f390 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e94df6acd3e22ce0ec7f727076fd9046d96d57b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d38b9a916ab5bce9e5f622777edbc76bef617e93 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cccea02a4091cc3082adb18c4f4762fe9107d3b0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d3a728277877924e889e9fef42501127f48a4e77 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4654ca3a17832a7d479e5d8e3296f004c632183 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9e4a44b302d3a3e49aa014062b42de84480a8d4f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f09906d27affb8d08a96c07fc3386ef261f97af ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d45c76bd8cd28d05102311e9b4bc287819a51e0e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 03097c7ace28c5516aacbb1617265e50a9043a84 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5869c5c1a51d448a411ae0d51d888793c35db9c0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f573b6840509bf41be822ab7ed79e0a776005133 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b6f38d02c8ed1fb07eb6782b918f31efc4c42f3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e1ad78eb7494513f6c53f0226fe3cb7df4e67513 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c914637ab146c23484a730175aa10340db91be70 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 27c577dfd5c7f0fc75cd10ed6606674b56b405bd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f122a6aa3eb386914faa58ef3bf336f27b02fab0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 59587d81412ca9da1fd06427efd864174d76c1c5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5452aa820c0f5c2454642587ff6a3bd6d96eaa1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d43055d44e58e8f010a71ec974c6a26f091a0b7a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5244f7751c10865df94980817cfbe99b7933d4d6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9421cbc67e81629895ff1f7f397254bfe096ba49 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- db82455bd91ce00c22f6ee2b0dc622f117f07137 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 48fab54afab49f18c260463a79b90d594c7a5833 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d3e5d9cda8eae5b0f19ac25efada6d0b3b9e04e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ddd5e5ef89da7f1e3b3a7d081fbc7f5c46ac11c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c544101eed30d5656746080204f53a2563b3d535 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 007bd4b8190a6e85831c145e0aed5c68594db556 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a8bdce7a665a0b38fc822b7f05a8c2e80ccd781 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c5b87bcdd70810a20308384b0e3d1665f6d2922 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dbd784b870a878ef6dbecd14310018cdaeda5c6d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 29d94c622a7f6f696d899e5bb3484c925b5d4441 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8828ced5818d793879ae509e144fdad23465d684 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ea3dbdf67af10ccc6ad22fb3294bbd790a3698f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b137f55232155b16aa308ec4ea8d6bc994268b0d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ae512e69f37e37431239c8da6ffa48c75684f87 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 237d47b9d714fcc2eaedff68c6c0870ef3e0041a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a5a75ab7533de99a4f569b05535061581cb07a41 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9044abce7e7b3d8164fe7b83e5a21f676471b796 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3eb7265c532e99e8e434e31f910b05c055ae4369 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56cc93a548f35a0becd49a7eacde86f55ffc5dc5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a0ad305883201b6b3e68494fc70089180389f6e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d9fc8b6c06b91dfddb73d18eaa8164e64cc2600a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b7071ce13476cae789377c280aa274e6242fd756 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f3989f27e91119bb29cc1ed93751c3148762695 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6c9fcd7745d2f0c933b46a694f77f85056133ca5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4bc91d7495d7eb70a70c1f025137718f41486cd2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- eb53329253f8ec1d0eff83037ce70260b6d8fcce ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fcc166d3a6e235933e823e82e1fcf6160a32a5d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 678821a036c04dfbe331d238a7fe0223e8524901 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6a61110053bca2bbf605b66418b9670cbd555802 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f24786fca46b054789d388975614097ae71c252e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e8980057ccfcaca34b423804222a9f981350ac67 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3b7263e0bb9cc1d94e483e66c1494e0e7982fd1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6404168e6f990462c32dbe5c7ac1ec186f88c648 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 48f5476867d8316ee1af55e0e7cfacacbdf0ad68 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13e3a809554706905418a48b72e09e2eba81af2d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 10809e8854619fe9f7d5e4c5805962b8cc7a434b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 59879a4e1e2c39e41fa552d8ac0d547c62936897 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c390e223553964fc8577d6837caf19037c4cd6f6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f9b915b066f28f4ac7382b855a8af11329e3400d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ea761425b9fa1fda57e83a877f4e2fdc336a9a3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e0524096fa9f3add551abbf68ee22904b249d82f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e8987f2746637cbe518e6fe5cf574a9f151472ed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 64a4730ea1f9d7b69a1ba09b32c2aad0377bc10a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fe311b917b3cef75189e835bbef5eebd5b76cc20 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 36a984803df08b0f6eb5f8a73254dd64bc616b67 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- eb52c96d7e849e68fda40e4fa7908434e7b0b022 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ffde74dd7b5cbc4c018f0d608049be8eccc5101 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3ea450112501e0d9f11e554aaf6ce9f36b32b732 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dfe3ba3e5c08ee88afe89cc331081bbfbf5520e0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ab5b6af0c2c13794525ad84b0a80be9c42e9fcf1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f03e6162f99e4bfdd60c08168dabef3a1bdb1825 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 11e0a94f5e7ed5f824427d615199228a757471fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e583a9e22a7a0535f2c591579873e31c21bccae0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55eb3de3c31fd5d5ad35a8452060ee3be99a2d99 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d6192ad1aed30adc023621089fdf845aa528dde9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a023acbe9fc9a183c395be969b7fc7d472490cb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e11f12adffec6bf03ea1faae6c570beaceaffc86 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 863b386e195bb2b609b25614f732b1b502bc79a4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3b9b6fe0dd99803c80a3a3c52f003614ad3e0adf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5b3b65287e6849628066d5b9d08ec40c260a94dc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cc93c4f3ddade455cc4f55bc93167b1d2aeddc4f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b3061698403f0055d1d63be6ab3fbb43bd954e8e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f225d4b8c3d7eb90038c246a289a18c7b655da2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 35bceb16480b21c13a949eadff2aca0e2e5483fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea5d365a93a98907a1d7c25d433efd06a854109e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9e91a05aabb73cca7acec1cc0e07d8a562e31b45 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e7fa5ef735754e640bd6be6c0a77088009058d74 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 096897123ab5d8b500024e63ca81b658f3cb93da ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 673b21e1be26b89c9a4e8be35d521e0a43a9bfa1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a98e0af511b728030c12bf8633b077866bb74e47 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 811a6514571a94ed2e2704fb3a398218c739c9e9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec0b85e2d4907fb5fcfc5724e0e8df59e752c0d1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 96c7ac239a2c9e303233e58daee02101cc4ebf3d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e6a2942a982c2541a6b6f7c67aa7dbf57ed060ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f5ec638a77dd1cd38512bc9cf2ebae949e7a8812 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5eb7fd3f0dd99dc6c49da6fd7e78a392c4ef1b33 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a02e432530336f3e0db8807847b6947b4d9908d8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a3cc763d6ca57582964807fb171bc52174ef8d5e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2df73b317a4e2834037be8b67084bee0b533bfe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 031271e890327f631068571a3f79235a35a4f73e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 70670586e082a9352c3bebe4fb8c17068dd39b4c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e54cd8fed2d1788618df64b319a30c7aed791191 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b4b50e7348815402634b6b559b48191dba00a751 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 460cafb81f86361536077b3b6432237c6ae3d698 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6720e8df09a314c3e4ce20796df469838379480d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1ab169407354d4b9512447cd9c90e8a31263c275 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56488ced0fae2729b1e9c72447b005efdcd4fea7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b424f87a276e509dcaaee6beb10ca00c12bb7d29 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 294ee691d0fdac46d31550c7f1751d09cfb5a0f0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 96d003cb2baabd73f2aa0fd9486c13c61415106e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 46f63c30e30364eb04160df71056d4d34e97af21 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 87ae42528362d258a218b3818097fd2a4e1d6acf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f631214261a7769c8e6956a51f3d04ebc8ce8efd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 468cad66ff1f80ddaeee4123c24e4d53a032c00d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1053448ad885c633af9805a750d6187d19efaa6c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 90b20e5cd9ba8b679a488efedb1eb1983e848acf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2fbb7027ec88e2e4fe7754f22a27afe36813224b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f8ce24a835cae8c623e2936bec2618a8855c605b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 65747a216c67c3101c6ae2edaa8119d786b793cb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9004e3a1cf33110f2cbc458f1dc3259c930ad9b4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d0f24c9facb5be0c98c8859a5ce3c6b0d08504ac ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0cfe75db81bc099e4316895ff24d65ef865bced6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cf1d5bd4208514bab3e6ee523a70dff8176c8c80 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 523fb313f77717a12086319429f13723fe95f85e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f24736ad5b55a89b1057d68d6b3f3cd01018a2e8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3175b5b21194bcc8f4448abe0a03a98d3a4a1360 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7da101ba9a09a22a85c314a8909fd23468ae66f0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d810f2700f54146063ca2cb6bb1cf03c36744a2c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3b2e9a8312412b9c8d4e986510dcc30ee16c5f4c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fca367548e365f93c58c47dea45507025269f59a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3203cd7629345d32806f470a308975076b2b4686 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b81273e70c9c31ae02cb0a2d6e697d7a4e2b683a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c12fef1b1971ba7a50e7e5c497caf51e0f68479 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e86eb305a542cee5b0ff6a0e0352cb458089bf62 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 48a17c87c15b2fa7ce2e84afa09484f354d57a39 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 98a313305f0d554a179b93695d333199feb5266c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 968ffb2c2e5c6066a2b01ad2a0833c2800880d46 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cb68eef0865df6aedbc11cd81888625a70da6777 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0b813371f5a8af95152cae109d28c7c97bfaf79f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6befb28efd86556e45bb0b213bcfbfa866cac379 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 86523260c495d9a29aa5ab29d50d30a5d1981a0c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9d6310db456de9952453361c860c3ae61b8674ea ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ca0f897376e765989e92e44628228514f431458 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c946bf260d3f7ca54bffb796a82218dce0eb703f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 685760ab33b8f9d7455b18a9ecb8c4c5b3315d66 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 83a9e4a0dad595188ff3fb35bc3dfc4d931eff6d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 264ba6f54f928da31a037966198a0849325b3732 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22a88a7ec38e29827264f558f0c1691b99102e23 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e6019e16d5a74dc49eb7129ee7fd78b4de51dac2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec0657cf5de9aeb5629cc4f4f38b36f48490493e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 517ae56f517f5e7253f878dd1dc3c7c49f53df1a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fafe8a77db75083de3e7af92185ecdb7f2d542d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a17c43d0662bab137903075f2cff34bcabc7e1d1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c72b9a3eaabbe927ba77d4f69a62f35fbe60e2e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20b07fa542d2376a287435a26c967a5ee104667f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8dd51f1d63fa5ee704c2bdf4cb607bb6a71817d2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8e0e315a371cdfc80993a1532f938d56ed7acee4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- beccf1907dae129d95cee53ebe61cc8076792d07 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7029773512eee5a0bb765b82cfdd90fd5ab34e15 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8d0aa1ef19e2c3babee458bd4504820f415148e0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ca3fdbe2232ceb2441dedbec1b685466af95e73b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 61f3db7bd07ac2f3c2ff54615c13bf9219289932 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8867348ca772cdce7434e76eed141f035b63e928 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f24f9540afc0db61d197bc4932697737bff1506 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a21a9f6f13861ddc65671b278e93cf0984adaa30 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b00ad00130389f5b00da9dbfd89c3e02319d2999 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5bd7d44ff7e51105e3e277aee109a45c42590572 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2ab454f0ccf09773a4f51045329a69fd73559414 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ccd777c386704911734ae4c33a922a5682ac6c8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7dd618655c96ff32b5c30e41a5406c512bcbb65f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8ad01ee239f9111133e52af29b78daed34c52e49 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 45c0f285a6d9d9214f8167742d12af2855f527fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a93eb7e8484e5bb40f9b8d11ac64a1621cf4c9cd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f1545bd9cd6953c5b39c488bf7fe179676060499 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a8014d2ec56fd684dc81478dee73ca7eda0ab8a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6e5aae2fc8c3832bdae1cd5e0a269405fb059231 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1d1d2cb421f16bd277d7c4ce88398ff0f5afb29 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7cf2d5fcf0a3db793678dd6ba9fc1c24d4eeb36a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a25e1d4aa7e5898ab1224d0e5cc5ecfbe8ed8821 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 739fa140235cc9d65c632eaf1f5cacc944d87cfb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bd7fb976ab0607592875b5697dc76c117a18dc73 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ebe8f644e751c1b2115301c1a961bef14d2cce89 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9519f186ce757cdba217f222c95c20033d00f91d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 75c75fa136f6181f6ba2e52b8b85a98d3fe1718e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dec4663129f72321a14efd6de63f14a7419e3ed2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d5bfb5d6d22f8fe8c940f36e1fbe16738965d5f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3f2d76ba8e6d004ff5849ed8c7c34f6a4ac2e1e3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4c34d5c3f2a4ed7194276a026e0ec6437d339c67 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b6b9510e0724bfcb4250f703ddf99d1e4020bbc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cf5eaddde33e983bc7b496f458bdd49154f6f498 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c0b92e40ece170b59bced0cea752904823e06e7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c0990b2a6dd2e777b46c1685ddb985b3c0ef59a2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 97ab197140b16027975c7465a5e8786e6cc8fea1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0c1834134ce177cdbd30a56994fcc4bf8f5be8b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8858a63cb33319f3e739edcbfafdae3ec0fefa33 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 82849578e61a7dfb47fc76dcbe18b1e3b6a36951 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 94029ce1420ced83c3e5dcd181a2280b26574bc9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7a320abc52307b4d4010166bd899ac75024ec9a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13647590f96fb5a22cb60f12c5a70e00065a7f3a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1687283c13caf7ff8d1959591541dff6a171ca1e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 741dfaadf732d4a2a897250c006d5ef3d3cd9f3a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0019d7dc8c72839d238065473a62b137c3c350f5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7cc4d748a132377ffe63534e9777d7541a3253c5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c4d5caa79e6d88bb3f98bfbefa3bfa039c7e157a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f88fb96869b6ac3ed4dac7d23310a9327d3c89c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 609a46a72764dc71104aa5d7b1ca5f53d4237a75 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 394ed7006ee5dc8bddfd132b64001d5dfc0ffdd3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1e6234c27abf041e4c8cd1a799950e7cd9104f6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 192472f9673b18c91ce618e64e935f91769c50e7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b03933057df80ea9f860cc616eb7733f140f866e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 89422841e46efa99bda49acfbe33ee1ca5122845 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e84d05f4bbf7090a9802e9cd198d1c383974cb12 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d9310055f364cf3fa97f663287c596920d6e7e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ef48ca5f54fe31536920ec4171596ff8468db5fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 694265664422abab56e059b5d1c3b9cc05581074 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7b3ef45167e1c2f7d1b7507c13fcedd914f87da9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cbb58869063fe803d232f099888fe9c23510de7b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 33964afb47ce3af8a32e6613b0834e5f94bdfe68 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 33819a21f419453bc2b4ca45b640b9a59361ed2b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 98e6edb546116cd98abdc3b37c6744e859bbde5c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17a172920fde8c6688c8a1a39f258629b8b73757 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d061a1a506b71234f783628ba54a7bdf79bbce9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 24740f22c59c3bcafa7b2c1f2ec997e4e14f3615 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 78d2cd65b8b778f3b0cfef5268b0684314ca22ef ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bcd37b68533d0cceb7e73dd1ed1428fa09f7dc17 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 21b4db556619db2ef25f0e0d90fef7e38e6713e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55b67e8194b8b4d9e73e27feadbf9af6593e4600 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9f73e8ba55f33394161b403bf7b8c2e0e05f47b0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de3b9639a4c2933ebb0f11ad288514cda83c54fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- af5abca21b56fcf641ff916bd567680888c364aa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 258403da9c2a087b10082d26466528fce3de38d4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d4fd7fca515ba9b088a7c811292f76f47d16cd7b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 08457a7a6b6ad4f518fad0d5bca094a2b5b38fbe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ceee7d7e0d98db12067744ac3cd0ab3a49602457 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3288a244428751208394d8137437878277ceb71f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 624556eae1c292a1dc283d9dca1557e28abe8ee3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b425301ad16f265157abdaf47f7af1c1ea879068 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f97653aa06cf84bcf160be3786b6fce49ef52961 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ca288d443f4fc9d790eecb6e1cdf82b6cdd8dc0d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 00ce31ad308ff4c7ef874d2fa64374f47980c85c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a4287f65878000b42d11704692f9ea3734014b4c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 01ab5b96e68657892695c99a93ef909165456689 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4d36f8ff4d1274a8815e932285ad6dbd6b2888af ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f683c6623f73252645bb2819673046c9d397c567 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bc31651674648f026464fd4110858c4ffeac3c18 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1e2f63e64875a29e8c01a7ae17f5744680167a5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fd96cceded27d1372bdc1a851448d2d8613f60f3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f068cdc5a1a13539c4a1d756ae950aab65f5348b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6917ae4ce9eaa0f5ea91592988c1ea830626ac3a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3bd05b426a0e3dec8224244c3c9c0431d1ff130 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9059525a75b91e6eb6a425f1edcc608739727168 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f1401803ccf7db5d897a5ef4b27e2176627c430e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d2ebc6193f7205fd1686678a5707262cb1c59bb0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 73959f3a2d4f224fbda03c8a8850f66f53d8cb3b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8d2239f24f6a54d98201413d4f46256df0d6a5f3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28a33ca17ac5e0816a3e24febb47ffcefa663980 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a32a6bcd784fca9cb2b17365591c29d15c2f638e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 58fb1187b7b8f1e62d3930bdba9be5aba47a52c6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1fe889ea0cb2547584075dc1eb77f52c54b9a8c4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fde6522c40a346c8b1d588a2b8d4dd362ae1f58f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1c6d7830d9b87f47a0bfe82b3b5424a32e3164ad ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 402a6c2808db4333217aa300d0312836fd7923bd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 47e3138ee978ce708a41f38a0d874376d7ae5c78 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0369384c8b79c44c5369f1b6c05046899f8886da ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f963881e53a9f0a2746a11cb9cdfa82eb1f90d8c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- feb1ea0f4aacb9ea6dc4133900e65bf34c0ee02d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 18be0972304dc7f1a2a509595de7da689bddbefa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55dcc17c331f580b3beeb4d5decf64d3baf94f2e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 77cd6659b64cb1950a82e6a3cccdda94f15ae739 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 129f90aa8d83d9b250c87b0ba790605c4a2bb06a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 791765c0dc2d00a9ffa4bc857d09f615cfe3a759 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 57050184f3d962bf91511271af59ee20f3686c3f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 160081b9a7ca191afbec077c4bf970cfd9070d2c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 778234d544b3f58dd415aaf10679d15b01a5281f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1e2265a23ecec4e4d9ad60d788462e7f124f1bb7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 91725f0fc59aa05ef68ab96e9b29009ce84668a5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c4f49fb232acb2c02761a82acc12c4040699685d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aea0243840a46021e6f77c759c960a06151d91c9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0fdf6c3aaff49494c47aaeb0caa04b3016e10a26 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d2d9197cfe5d3b43cb8aee182b2e65c73ef9ab7b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c0ef65b43688b1a4615a1e7332f6215f9a8abb19 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ac62760c52abf28d1fd863f0c0dd48bc4a23d223 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 69dd8750be1fbf55010a738dc1ced4655e727f23 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be97c4558992a437cde235aafc7ae2bd6df84ac8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f164627a85ed7b816759871a76db258515b85678 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1044116d25f0311033e0951d2ab30579bba4b051 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b82dbf538ac0d03968a0f5b7e2318891abefafaa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e837b901dcfac82e864f806c80f4a9cbfdb9c9f3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1d2307532d679393ae067326e4b6fa1a2ba5cc06 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 06590aee389f4466e02407f39af1674366a74705 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c9dbf201b4f0b3c2b299464618cb4ecb624d272c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 38b3cfb9b24a108e0720f7a3f8d6355f7e0bb1a9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d9240918aa03e49feabe43af619019805ac76786 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- abaefc59a7f2986ab344a65ef2a3653ce7dd339f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fe5289ed8311fecf39913ce3ae86b1011eafe5f7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- af32b6e0ad4ab244dc70a5ade0f8a27ab45942f8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 28ed48c93f4cc8b6dd23c951363e5bd4e6880992 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6c1faef799095f3990e9970bc2cb10aa0221cf9c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 86ea63504f3e8a74cfb1d533be9d9602d2d17e27 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f91495e271597034226f1b9651345091083172c4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c1169f6ea406fec1e26e99821e18e66437e65eb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7a0b79ee574999ecbc76696506352e4a5a0d7159 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a243827ab3346e188e99db2f9fc1f916941c9b1a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1d8a577ffc6ad7ce1465001ddebdc157aecc1617 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6fbb69306c0e14bacb8dcb92a89af27d3d5d631f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be8955a0fbb77d673587974b763f17c214904b57 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 25dca42bac17d511b7e2ebdd9d1d679e7626db5f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e746f96bcc29238b79118123028ca170adc4ff0f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a28942bdf01f4ddb9d0b5a0489bd6f4e101dd775 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e79999c956e2260c37449139080d351db4aa3627 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1e80445ad5cb6da4c0070d7cb8af89da3b0803b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cac6e06cc9ef2903a15e594186445f3baa989a1a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6d9b1f4f9fa8c9f030e3207e7deacc5d5f8bba4e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b01ca6a3e4ae9d944d799743c8ff774e2a7a82b6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 29eb123beb1c55e5db4aa652d843adccbd09ae18 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1ee2afb00afaf77c883501eac8cd614c8229a444 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1906ee4df9ae4e734288c5203cf79894dff76cab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f606937a7a21237c866efafcad33675e6539c103 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e14e3f143e7260de9581aee27e5a9b2645db72de ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ecf37a1b4c2f70f1fc62a6852f40178bf08b9859 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1e2b46138ba58033738a24dadccc265748fce2ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 257a8a9441fca9a9bc384f673ba86ef5c3f1715d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 18e3252a1f655f09093a4cffd5125342a8f94f3b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1873db442dc7511fc2c92fbaeb8d998d3e62723d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de84cbdd0f9ef97fcd3477b31b040c57192e28d9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4b4a514e51fbc7dc6ddcb27c188159d57b5d1fa9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 365fb14ced88a5571d3287ff1698582ceacd80d6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ff864138cd1e680a78522c26b583639f8f5e313 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17af1f64d5f1e62d40e11b75b1dd48e843748b49 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 26e138cb47dccc859ff219f108ce9b7d96cbcbcd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea81f14dafbfb24d70373c74b5f8dabf3f2225d9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 583e6a25b0d891a2f531a81029f2bac0c237cbf9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1019d4cf68d1acdbb4d6c1abb7e71ac9c0f581af ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 38d59fc8ccccae8882fa48671377bf40a27915a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 07996a1a1e53ffdd2680d4bfbc2f4059687859a5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 01eac1a959c1fa5894a86bf11e6b92f96762bdd8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6d1212e8c412b0b4802bc1080d38d54907db879d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 600fcbc1a2d723f8d51e5f5ab6d9e4c389010e1c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6f8ce8901e21587cd2320562df412e05b5ab1731 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 57a4e09294230a36cc874a6272c71757c48139f2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cfb278d74ad01f3f1edf5e0ad113974a9555038d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fbe062bf6dacd3ad63dd827d898337fa542931ac ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8caeec1b15645fa53ec5ddc6e990e7030ffb7c5a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8b86f9b399a8f5af792a04025fdeefc02883f3e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0974f8737a3c56a7c076f9d0b757c6cb106324fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3323464f85b986cba23176271da92a478b33ab9c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c34343d0b714d2c4657972020afea034a167a682 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- de5bc8f7076c5736ef1efa57345564fbc563bd19 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 282018b79cc8df078381097cb3aeb29ff56e83c6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e6bece08aea01859a232e99a1e1ad8cc1eb7d36 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c36f3648e39ace752c67c71867693ce1eee52a3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c083f3d0b853e723d0d4b00ff2f1ec5f65f05cba ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 538820055ce1bf9dd07ecda48210832f96194504 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a988e6985849e4f6a561b4a5468d525c25ce74fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55e757928e493ce93056822d510482e4ffcaac2d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 837c32ba7ff2a3aa566a3b8e1330e3db0b4841d8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae5a69f67822d81bbbd8f4af93be68703e730b37 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1090701721888474d34f8a4af28ee1bb1c3fdaaa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 63761f4cb6f3017c6076ecd826ed0addcfb03061 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e1c89ec97ec90037583e85d0e9e71e9c845a19b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2054561da184955c4be4a92f0b4fa5c5c1c01350 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e41c727be8dbf8f663e67624b109d9f8b135a4ab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a25347d7f4c371345da2348ac6cceec7a143da2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2c8d26d3b25b864ad48e6de018757266b59f708 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 143b927307d46ccb8f1cc095739e9625c03c82ff ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c1a87d11df666d308d14e4ae7ee0e9d614296b6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 15941ca090a2c3c987324fc911bbc6f89e941c47 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22a0289972b365b7912340501b52ca3dd98be289 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- df0892351a394d768489b5647d47b73c24d3ef5f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f78d4a28f307a9d7943a06be9f919304c25ac2d9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d6ceabf5b90e7c0690360fc30774d36644f563c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3e2ba9c2028f21d11988558f3557905d21e93808 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 772b95631916223e472989b43f3a31f61e237f31 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b75c3103a700ac65b6cd18f66e2d0a07cfc09797 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be06e87433685b5ea9cfcc131ab89c56cf8292f2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 898d47d1711accdfded8ee470520fdb96fb12d46 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e5c0002d069382db1768349bf0c5ff40aafbf140 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 69361d96a59381fde0ac34d19df2d4aff05fb9a9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b48e4d3aa853687f420dc51969837734b70bfdec ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 654e54d200135e665e07e9f0097d913a77f169da ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e825f8b69760e269218b1bf1991018baf3c16b04 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13dd59ba5b3228820841682b59bad6c22476ff66 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 82b8902e033430000481eb355733cd7065342037 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 583cd8807259a69fc01874b798f657c1f9ab7828 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- def0f73989047c4ddf9b11da05ad2c9c8e387331 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 619c11787742ce00a0ee8f841cec075897873c79 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 501bf602abea7d21c3dbb409b435976e92033145 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- edd9e23c766cfd51b3a6f6eee5aac0b791ef2fd0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53152a824f5186452504f0b68306d10ebebee416 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 997b7611dc5ec41d0e3860e237b530f387f3524a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c3c271b0d6b5f56b86e3f177caf3e916b509b52 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3776f7a766851058f6435b9f606b16766425d7ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 72bcdbd0a0c8cc6aa2a7433169aa49c7fc19b55b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 619662a9138fd78df02c52cae6dc89db1d70a0e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 09c3f39ceb545e1198ad7a3f470d4ec896ce1add ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4956c1e618bfcfeef86c6ea90c22dd04ca81b9db ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a8a448b7864e21db46184eab0f0a21d7725d074f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5d996892ac76199886ba3e2754ff9c9fac2456d6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6bfdf93201ea413affd4c8fbe406ea2b4a7c1b6b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6a252661c3bf4202a4d571f9c41d2afa48d9d75f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3e14ab55a060a5637e9a4a40e40714c1f441d952 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 867129e2950458ab75523b920a5e227e3efa8bbc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4375386fb9d8c7bc0f952818e14fb04b930cc87d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b27292936c81637f6b9a7141dafaad1126f268e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f96ee7463e2454e95bf0d77ca4fe5107d3f24d68 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b3cde0ee162b8f0cb67da981311c8f9c16050a62 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 76fd1d4119246e2958c571d1f64c5beb88a70bd4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec28ad575ce1d7bb6a616ffc404f32bbb1af67b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 180a5029bc3a2f0c1023c2c63b552766dc524c41 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b72e2704022d889f116e49abf3e1e5d3e3192d3b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a803803f40163c20594f12a5a0a536598daec458 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ab59f78341f1dd188aaf4c30526f6295c63438b1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0bb2fc8129ed9adabec6a605bfe73605862b20d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 61138f2ece0cb864b933698174315c34a78835d1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 15ee0ac0d56a5fb5ba13fae4288621ddd2185f17 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50e469109eed3a752d9a1b0297f16466ad92f8d2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 400d728c99ddeae73c608e244bd301248b5467fc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 65c9fe0baa579173afa5a2d463ac198d06ef4993 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 77cde0043ceb605ed2b1beeba84d05d0fbf536c1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c69b6b979e3d6bd01ec40e75b92b21f7a391f0ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d86e77edd500f09e3e19017c974b525643fbd539 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b3feddd1269a0b0976f4eef2093cb0dbf258f99 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dcf2c3bd2aaf76e2b6e0cc92f838688712ebda6c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a38a0053d31d0285dd1e6ebe6efc28726a9656cc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 697702e72c4b148e987b873e6094da081beeb7cf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b1a2271a03313b561f5b786757feaded3d41b23f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bc66da0d66a9024f0bd86ada1c3cd4451acd8907 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 16a0c64dd5e69ed794ea741bc447f6a1a2bc98e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 54844a90b97fd7854e53a9aec85bf60564362a02 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a97d21936200f1221d8ddd89202042faed1b9bcb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 35057c56ce118e4cbd0584bd4690e765317b4c38 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6a417f4cf2df39704aa4c869e88d14e9806894a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c76a8c5499d22b9c0b4c56f03b671033eb9f9bdd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3326f34712f6a96c162033c7ccf370c8b7bc1ead ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f6102b349cbef03667d5715fcfae3161701a472d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ac4133f51817145e99b896c7063584d4dd18ad59 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8e29a91324ca7086b948a9e3a4dbcbb2254a24a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4ed59a86909b142ede105dd9262915c0e2993ac ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e729429631c84c3bd5602edcab3e7c2ab1dcce0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 12276fedec49c855401262f0929f088ebf33d2cf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7d00fa4f6cad398250ce868cef34357b45abaad3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c05ef0e7543c2845fd431420509476537fefe2b0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1eae9d1532e037a4eb08aaee79ff3233d2737f31 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bae67b87039b3364bdc22b8ef0b75dd18261814c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 615de50240aa34ec9439f81de8736fd3279d476d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f22ddca351c45edab9f71359765e34ae16205fa1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bac518bfa621a6d07e3e4d9f9b481863a98db293 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4f7255c2c1d9e54fc2f6390ad3e0be504e4099d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8775b6417b95865349a59835c673a88a541f3e13 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7ba46b8fba511fdc9b8890c36a6d941d9f2798fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2740d2cf960cec75e0527741da998bf3c28a1a45 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a1391bf06a839746bd902dd7cba2c63d1e738d37 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f28a2041f707986b65dbcdb4bb363bb39e4b3f77 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- accfe361443b3cdb8ea43ca0ccb8fbb2fa202e12 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7ef66a66dc52dcdf44cebe435de80634e1beb268 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fa98250e1dd7f296b36e0e541d3777a3256d676c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0d638bf6e55bc64c230999c9e42ed1b02505d0ce ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aaeb986f3a09c1353bdf50ab23cca8c53c397831 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c92df685d6c600a0a3324dff08a4d00d829a4f5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e40b5f075bdb9d6c2992a0a1cf05f7f6f4f101a3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5f92b17729e255ca01ffb4ed215d132e05ba4da ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 279d162f54b5156c442c878dee2450f8137d0fe3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1194dc4322e15a816bfa7731a9487f67ba1a02aa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f6c8072daa942e9850b9d7a78bd2a9851c48cd2c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f73385a5f62a211c19d90d3a7c06dcd693b3652d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 202216e2cdb50d0e704682c5f732dfb7c221fbbc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1dd7d6468a54be56039b2e3a50bcf171d8e854ff ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5020eb8ef37571154dd7eff63486f39fc76fea7f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3bee808e15707d849c00e8cea8106e41dd96d771 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 331ddc27a22bde33542f8c1a00b6b56da32e5033 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c0dcc6fb3dfd39df5970d6da340a949902ae629 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0f6c32a918544aa239a6c636666ce17752e02f15 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 84f9b603b44e0225391f1495034e0a66514c7368 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 84be1263abac102d8b4bc49096530c6fd45a9b80 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 59b05d06c1babcc8cd1c541716ca25452056020a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f4bc8ee9aeeec8bf7aa31c627e50761dd8bb2db ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1da744421619e134ed3ff2781b4d97fee78d9cd4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d884adc80c80300b4cc05321494713904ef1df2d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d2ff5822dbefa1c9c8177cbf9f0879c5cf4efc5c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 05d2687afcc78cd192714ee3d71fdf36a37d110f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ace1fed6321bb8dd6d38b2f58d7cf815fa16db7a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e0f2bb42b56f770c50a6ef087e9049fa6ac11fb5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6226720b0e6a5f7cb9223fc50363def487831315 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2df1f56cccab13d5c92abbc6b18be725e7b4833 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f1e9df152219e85798d78284beeda88f6baa9ec7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 819d6aceeb4d31c153de58081b21ad4f8b559c0e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b0e84a3401c84507dc017d6e4f57a9dfdb31de53 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4186a2dbbd48fd67ff88075c63bbd3e6c1d8a2df ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 58d692e2a1d7e3894dbed68efbcf7166d6ec3fb7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b67bd4c730273a9b6cce49a8444fb54e654de540 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 52bb0046c0bf0e50598c513e43b76d593f2cbbff ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fc2201e660014c5d91fec8e3c3a3fa5a66dcf33b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 179a1dcc65366a70369917d87d00b558a6d0c04d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6da04adff0b96c5163b0c2530028b72be2fd26fd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 07eaa4ce2696a88ec0db6e91f191af1e48226aca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 637eadce54ca8bbe536bcf7c570c025e28e47129 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1a4bfd979e5d4ea0d0457e552202eb2effc36cac ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 00c5497f190172765cc7a53ff9d8852a26b91676 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f41d42ee7e264ce2fc32cea555e5f666fa1b1fe9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9117cdbb48ffc458d809715c6ab6bc6b416ef621 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b372fdd54bab2ad6639756958978660b12095c3c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2dc5d68491eb3c73ae8478bf6edef80b18564a13 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4251bd59fb8e11e40c40548cba38180a9536118c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f2834177c0fdf6b1af659e460fd3348f468b8ab0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7cdfaceebe916c91acdf8de3f9506989bc70ad65 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 806450db9b2c4a829558557ac90bd7596a0654e0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c4cde8df886112ee32b0a09fcac90c28c85ded7f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a885d23bab51b0c00be2780055ff63b3f3c1a4c6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 555b0efc2c19aa8cf7c548b4097bd20a73f572ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5915114cdca6f09fa2355162a43596f5d20273be ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 451561c252323e74696dbe0be36601c95a75a8c3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3c0a65226f038c58fc6d6ed525f38fc00b3579b7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2e6d110fbfa1f2e6a96bc8329e936d0cf1192844 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 39229db70e71a6be275dafb3dd9468930e40ae48 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f9bbdc87a7263f479344fcf67c4b9fd6005bb6cd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 81279eeac5c525354cbe19b24a6f42219407c1f9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e99d9ab2acfaf2ebb4b150736590d6a4e33f449 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13ba1d87ab8fc45d2aed25662bf91053b0db5f9f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2454ae89983a4496a445ce347d7a41c0bb0ea7ae ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c0c2fc4ee2d8a5d0a2de50ba882657989dedc51 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c68459a17ff59043d29c90020fffe651b2164e6a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 832b56394b079c9f6e4c777934447a9e224facfe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9f51eeb2f9a1efe22e45f7a1f7b963100f2f8e6b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 43ab2afba68fd0e1b5d138ed99ffc788dc685e36 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50af864298826feaf94772982bbc7b222b4b4242 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d9671e15703918048982c9ff4e2e0fef21ede320 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 75c161cbc017a7d176dd0d7b937db26b3ce637a1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 84968314ddcbaa0e4b685c71c6ea5524b3aefc80 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 52ab307935bd2bbda52f853f9fc6b49f01897727 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b01824b1aecf8aadae4501e22feb45c20fb26bce ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5df44408218003eb49e3b8fc94329c5e8b46c7d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ce1193c851e98293a237ad3d2d87725c501e89f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e648efdcc1ca904709a646c1dbc797454a307444 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20ef1924b832a3788849793c0ee6b46dd00d4520 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 46c9a0df4403266a320059eaa66e7dce7b3d9ac4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53ed0d43ab950d4deeefd238c7685dabef943800 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3410fdc42075bd788a78f4b2a68c5e2cc0930409 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bca0cb7f507d6a21a652307737a57057692d2f79 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 07c20b4231b12fee42d15f1c44c948ce474f5851 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 708b8dda8e7b87841a5f39c60b799c514e75a9c7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6745f4542cfb74bbf3b933dba7a59ef2f54a4380 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2da2b90e6930023ec5739ae0b714bbdb30874583 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b426893ce331f71165c82b1a86252cd104ae3db ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4748e813980e1316aa364e0830a4dc082ff86eb0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a67bf61b5017e41740e997147dc88282b09c6f86 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- be53c1f33107d6891c47c784aeadd6e5ddf78e8c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4c39f9da792792d4e73fc3a5effde66576ae128c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 92a97480edcc0f0de787a752bf90feed0445dd39 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ccde80b7a3037a004a7807a6b79916ce2a1e9729 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a28d3d18f9237af5101eb22e506a9ddda6d44025 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 572ace094208c28ab1a8641aedb038456d13f70b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5593dc014a41c563ba524b9303e75da46ee96bd5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2b93f2a91e0791be3ffda1f753aa6c377bcab4d3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9a4b1d4d11eee3c5362a4152216376e634bd14cf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2b7f5cb25e0e03e06ec506d31c001c172dd71ef6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9a119924bd314934158515a1a5f5877be63f6f91 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6eeae8b24135b4de05f6d725b009c287577f053d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0c4269a21b9edf8477f2fee139d5c1b260ebc4f8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ee861ae7a7b36a811aa4b5cc8172c5cbd6a945b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ac36642ce1cde75b222e20f585ddfd240f064da2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bdf2e667f969e5c22985dd232fe3f107fe26e750 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c76852d0bff115720af3f27acdb084c59361e5f6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 15b9129ec639112e94ea96b6a395ad9b149515d1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ead94f267065bb55303f79a0a6df477810b3c68d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3cb5ba18ab1a875ef6b62c65342de476be47871b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fa44e6b579917814740393efc0b990e0fbbbdaf3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ba8d148121b1dbba444849fe9549f36a7d17db28 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bcd57e349c08bd7f076f8d6d2f39b702015358c1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7a7eedde7f5d5082f7f207ef76acccd24a6113b1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ac1cec7066eaa12a8d1a61562bfc6ee77ff5f54d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dbc18b92362f60afc05d4ddadd6e73902ae27ec7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 386d1af07bf1f32fac5e97612441488894f2ffed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50c90666c4de8ac93accdf4040e3eb010a82a46a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ca61d4c68dad68901f8a7364dd210ef27a8b4c6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 101fb1df36f29469ee8f4e0b9e7846d856b87daa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6acec357c7609fdd2cb0f5fdb1d2756726c7fe98 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6bca9899b5edeed7f964e3124e382c3573183c68 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5f23379c496942ea6fe898a7a823b65530c126a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9374a916588d9fe7169937ba262c86ad710cfa74 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f4fa1cb3c3e84cad8b74edb28531d2e27508be26 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 615fc1984b0cc09c8eeab51a1d1c4e05b583b4a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e4582f805156095604fe07e71195cd9aa43d7a34 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20f202d83bdf1f332a3cb8f010bcf8bf3c2807bd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5eb0f2c241718bc7462be44e5e8e1e36e35f9b15 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2792e534dd55fe03bca302f87a3ea638a7278bf1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ec3d91644561ef59ecdde59ddced38660923e916 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 79cfe05054de8a31758eb3de74532ed422c8da27 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9ee31065abea645cbc2cf3e54b691d5983a228b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 86fa577e135713e56b287169d69d976cde27ac97 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1b89f39432cdb395f5fbb9553b56595d29e2b773 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ef1f89abe5b2334705ee8f1a6da231b0b6c9a50 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e70f3218e910d2b3dcb8a5ab40c65b6bd7a8e9a8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b65df78a10c3bcc40d18f3e926bb5a49821acc31 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8430529e1a9fb28d8586d24ee507a8195c370fa5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a58a60ac5f322eb4bfd38741469ff21b5a33d2d5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 00499d994fea6fb55a33c788f069782f917dbdd4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 291d2f85bb861ec23b80854b974f3b7a8ded2921 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b2ccae0d7fca3a99fc6a3f85f554d162a3fdc916 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6ffd4b0193acf86b6a6e179f8673ed38bad3191d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ff3d142387e1f38b0ed390333ea99e2e23d96e35 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b2a14e4b96a0ffc5353733b50266b477539ef899 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d1bd99c0a376dec63f0f050aeb0c40664260da16 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 78a46c432b31a0ea4c12c391c404cd128df4d709 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 461fd06e1f2d91dfbe47168b53815086212862e4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4b43ca7ff72d5f535134241e7c797ddc9c7a3573 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 39f85c4358b7346fee22169da9cad93901ea9eb9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- beb76aba0c835669629d95c905551f58cc927299 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 20c34a929a8b2871edd4fd44a38688e8977a4be6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea33fe8b21d2b02f902b131aba0d14389f2f8715 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b7a5c05875a760c0bf83af6617c68061bda6cfc5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5ba2aef8f59009756567a53daaf918afa851c304 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8b5121414aaf2648b0e809e926d1016249c0222c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6ba8b8b91907bd087dfe201eb0d5dae2feb54881 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5117c9c8a4d3af19a9958677e45cda9269de1541 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- af9e37c5c8714136974124621d20c0436bb0735f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3c658c16f3437ed7e78f6072b6996cb423a8f504 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1496979cf7e9692ef869d2f99da6141756e08d25 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 58e2157ad3aa9d75ef4abb90eb2d1f01fba0ba2b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0725af77afc619cdfbe3cec727187e442cceaf97 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 685d6e651197d54e9a3e36f5adbadd4d21f4c7e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5e062f4d043234312446ea9445f07bd9dc309ce3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1083748b828dfca6a72014434850da0f2a0579ab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4c73e9cd66c77934f8a262b0c1bab9c2f15449ba ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 59e26435a8d2008073fc315bafe9f329d0ef689a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b197b2dbb527de9856e6e808339ab0ceaf0a512d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7184340f9d826a52b9e72fce8a30b21a7c73d5be ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9dfd6bcca5499e1cd472c092bc58426e9b72cccc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a519942a295cc39af4eebb7ba74b184decae13fb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6c486b2e699082763075a169c56a4b01f99fc4b9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 11ec2e08e1796b5914cd9c4830813482753ecfa0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c53eeaca19163b2b5484304a9ecce3ef92164d70 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3c770f8e98a0079497d3eb5bc31e7260cc70cc63 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 36f838e7977e62284d2928f65cacf29771f1952f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f9cec00938d9059882bb8eabdaf2f775943e00e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 44a601a068f4f543f73fd9c49e264c931b1e1652 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4712c619ed6a2ce54b781fe404fedc269b77e5dd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5da34fddda2ea6de19ecf04efd75e323c4bb41e4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3942cdff6254d59100db2ff6a3c4460c1d6dbefe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 25945899a0067a2dbeeae7a8362a6d68bbc5c6ba ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9c3bbc43d097656b54c808290ce0c656d127ce47 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d9e7f1121d3bdbb08291c7164ad622350544a21 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b999cae064fb6ac11a61a39856e074341baeefde ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b9776e88f7abb59cebac8733c04cccf6eee1c60 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dc518251eb64c3ef90502697a7e08abe3f8310b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 753e908dcea03cf9962cf45d3965cf93b0d30d94 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dc1fcf372878240e0a1af20641d361f14aea7252 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4fe5cfa0e063a8d51a1eb6f014e2aaa994e5e7d4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f2b19de3301e76ab3a6187a49c9c93ff78bafbd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bb0ac304431e8aed686a8a817aaccd74b1ba4f24 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0cd09bd306486028f5442c56ef2e947355a06282 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1047b41e2e925617474e2e7c9927314f71ce7365 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 146a6fe18da94e12aa46ec74582db640e3bbb3a9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9e14356d12226cb140b0e070bd079468b4ab599b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b00f3689aa19938c10576580fbfc9243d9f3866c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f62c9b9c0c9bda792c3fa531b18190e97eb53509 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 30d822a468dc909aac5c83d078a59bfc85fc27aa ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 13a26d4f9c22695033040dfcd8c76fd94187035b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ddc5496506f0484e4f1331261aa8782c7e606bf2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 87afd252bd11026b6ba3db8525f949cfb62c90fc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5bb812243dd1815651281a54c8191fc8e2bc2d82 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5de63b40dbb8fef7f2f46e42732081ef6d0d8866 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 33fa178eeb7bf519f5fff118ebc8e27e76098363 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aa921fee6014ef43bb2740240e9663e614e25662 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 81d8788d40867f4e5cf3016ef219473951a7f6ed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2c23ca3cd9b9bbeaca1b79068dee1eae045be5b6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2f8e6f7ab1e6dbd95c268ba0fc827abc62009013 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0ec61d4f7208a2713adeafb947f65fdae0947067 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3c9f55dd8e6697ab2f9eaf384315abd4cbefad38 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7b50af0a20bcc7280940ce07593007d17c5acabd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a7a4388eeaa4b6b94192dce67257a34c4a6cbd26 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 29c20c147b489d873fb988157a37bcf96f96ab45 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- eb8cec3cab142ef4f2773b6fc9d224461a6bf85d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fa8fe4cad336a7bdd8fb315b1ce445669138830c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bb509603e8303cd8ada7cfa1aaa626085b9bb6d6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6662422ba52753f8b10bc053aba82bac3f2e1b9c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d3a24b22d340c62fafc0e75a349c0ffe34d99d7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b1f32e231d391f8e6051957ad947d3659c196b2b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5613079f2494808f048b81815bf708debf7339d2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d7781e1056c672d5212f1aaf4b81ba6f18e8dd8b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a4fb3091a75005b047fbea72f812c53d27b15412 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2e68d907022c84392597e05afc22d9fe06bf0927 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a10aa36bc6a82bd50df6f3df7d6b7ce04a7070f1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 764cc6e344bd034360485018eb750a0e155ca1f6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3131d1a5295508f583ae22788a1065144bec3cee ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a2856af1d9289ee086b10768b53b65e0fd13a335 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 125b4875b5035dc4f6bad4351651a4236b82baeb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5e52a00c81d032b47f1bc352369be3ff8eb87b27 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d97afa24ad1ae453002357e5023f3a116f76fb17 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 138aa2b8b413a19ebf9b2bbb39860089c4436001 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1adc79ac67e5eabaa8b8509150c59bc5bd3fd4e6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 590638f9a56440a2c41cc04f52272ede04c06a43 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5d3e2f7f57620398df896d9569c5d7c5365f823d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6fcbda4e363262a339d1cacbf7d2945ec3bd83f0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- babf5765da3e328cc1060cb9b37fbdeb6fd58350 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 038f183313f796dc0313c03d652a2bcc1698e78e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c231551328faa864848bde6ff8127f59c9566e90 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8df638c22c75ddc9a43ecdde90c0c9939f5009e7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- befb617d0c645a5fa3177a1b830a8c9871da4168 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 35a09c0534e89b2d43ec4101a5fb54576b577905 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b9d6494f1075e5370a20e406c3edb102fca12854 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5047344a22ed824735d6ed1c91008767ea6638b7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a6604a00a652e754cb8b6b0b9f194f839fc38d7c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 127e511ea2e22f3bd9a0279e747e9cfa9509986d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c8c50d8be2dc5ae74e53e44a87f580bf25956af9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 972a8b84bb4a3adec6322219c11370e48824404e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 152bab7eb64e249122fefab0d5531db1e065f539 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ef592d384ad3e0ead5e516f3b2c0f31e6f1e7cab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cf37099ea8d1d8c7fbf9b6d12d7ec0249d3acb8b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4bf8e89e6784e121ddc32990d586e2276ec84596 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2f6a6e35d003c243968cdb41b72fbbe609e56841 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dd76b9e72b21d2502a51e3605e5e6ab640e5f0bd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 56823868efddd3bdbc0b624cdc79adc3a2e94a75 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 22757ed7b58862cccef64fdc09f93ea1ac72b1d2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bfdc8e26d36833b3a7106c306fdbe6d38dec817e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0425bc64384fe9a6a22edb7831d6e8c1756e2c7e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aa5e366889103172a9829730de1ba26d3dcbc01b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 50a9920b1bd9e6e8cf452c774c499b0b9014ccef ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7d6332820eaad3a6d3b0abc93424469a8ef7083a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 43eb1edf93c381bf3f3809a809df33dae23b50d9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e64957d8e52d7542310535bad1e77a9bbd7b4857 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a534eba97db3c2cfb2926368756fd633d25c056 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d4e56f627f94d93c49db40ae5944f880341f4203 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b377c07200392ac35a6ed668673451d3c9b1f5c7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 989671780551b7587d57e1d7cb5eb1002ade75b4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 14cef2bb3e0de02f306fa37c268d6c276326c002 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b9cb007076542e32f7b99bb18bc6ec424f3b407b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d3ce120c9acc7d9d4ce86aa1f07b027d1c45a9a1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0b3ecf2dcace76b65765ddf1901504b0b4861b08 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f3050b578081b24e5cf244fa252f385ffca2bf86 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 11b1f6edc164e2084e3ff034d3b65306c461a0be ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c3d5159679d17c1270ad72941922d0f18bdd6415 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 985093bae160419782b3d3cb9151e2e58625fd52 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c04c60f12d3684ecf961509d1b8db895e6f9aac0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 53d26977f1aff8289f13c02ee672349d78eeb2f0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 564db4f20bd7189a50a12d612d56ed6391081e83 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 657a57adbff49c553752254c106ce1d5b5690cf8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 26029c29765043376370a2877b7e635c17f5e76d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cbf957a36f5ed47c4387ee8069c56b16d1b4f558 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 924da9604d6474fd1be99dffdcc539eaaaa31626 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9840afda82fafcc3eaf52351c64e2cfdb8962397 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3fd37230e76a014cf5c45d55daf0be2caa6948b7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 345d6be7829c6dab359390ebc5e1a7ae0c6d48bb ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a9eeebeddaa20d10881ad505cc362a3a391e15b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 225999e9442c746333a8baa17a6dbf7341c135ca ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9513aa01fab73f53e4fe18644c7d5b530a66c6a1 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 048acc4596dc1c6d7ed3220807b827056cb01032 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bfdf98cadedfa6042117cd7a83952ca2f465d26f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 919164df96d9f956c8be712f33a9a037b097745b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9acc7806d6bdb306a929c460437d3d03e5e48dcd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a07cdbae1d485fd715a5b6eca767f211770fea4d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 95a83a7de5d3ce84206b9267962c32df4d071c21 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e063d101face690b8cf4132fa419c5ce3857ef44 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a8f8582274cd6a368a79e569e2995cee7d6ea9f9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- aed099a73025422f0550f5dd5c3e4651049494b2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7fda0ec787de5159534ebc8b81824920d9613575 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 17852bde65c12c80170d4c67b3136d8e958a92a9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c63cd9873bf733c068a5f183442ec82873fef1fc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9946e0ce07c8d93a43bd7b8900ddf5d913fe3b03 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5a45790a8699a384c3d218ac4ca8a53c109fd944 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a5cf1bc1d3e38ab32a20707d66b08f1bb0beae91 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5b01b589e7a19d6be5bd6465e600f84aa8015282 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 178dff753350014f6395f41bc21f1adddf73c8e0 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b372e26366348920eae32ee81a47b469b511a21f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 66beac619ba944afeca9d15c56ccc60d5276a799 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a0d828fcb1964a578ef3979297c59a41aedba932 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3980f11a9411d0b487b73279346cfae938845e7a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 93e19791659c279f4f7e33a433771beca65bf9ea ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8a0eee3989abd3a5d6d47d0298bd056a954d379b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 579e2c07bbb39577fa32fed8cb42297c1c5516d8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2effd7a10798a1e8e53bb546a67b2ccdea882c50 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fd5f111439e7a2e730b602a155aa533c68badbf8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0aa1ce356c7c3d53d6ee035b4c7bcf425e108cdc ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- f347c6da5e83b137c337f9ccb190090c27cfc953 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- abc2e538c6f2fe50f93e6c3fe927236bb41f94f4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b38020ae17ed9f83af75ce176e96267dcce6ecbd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 93ad8da5a8c6ddcbe67abae2cc4a7aad8084e736 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 52654c0216dcbe3fa2d9afb1de12c65d18f6a7a4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b63b3bc493a4a44ba1d857c78e4496e40f1d7b8 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ef9395f5ffe75f4e43d80cd1fa7b34c8a4db66fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c5083752d5d02d6c46bc2f18ba53a28d119af5b9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 24effa4861d6d1e8cffe848ae63fa2ed40be03f6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9aa93b5890acb152c5824a8f75c221cf1addfd1b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 3d203a0da0c709d301e973a9fe3569efd1fb2bd3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 57a561cda141a0fed3129f4f3488e3b91805e638 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4043468de4fc448b6fda670f33b7f935883793a7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- edf9fc528277a53ec37d1bd79fb4f8608cce11ae ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6e1be3032d521e3bf2f49fc87f82c8f978079ea6 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- bf2083922b7bccc31917bf9cdb74e3d4892c2600 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- eba67171bf6ea653dfb6a6ae288f3c1d10829870 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 277be842bf30848e7292a931169bd4c8ff726dee ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 79ec3a5191f9dfd398d98fe7372ad841f34876ed ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b919010b0459b2540fb609c5d1aad0b8dc0fab01 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 105fea3ef3be4b47cc3602423919329162dfcecf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- b5278c514068f469f2fca7638ef1e1b27556a37a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7f34a25eaa6de187797442bc6e0514289d77fed2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a935501a2f62d103cf9d69d775399dae2e7dfead ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 12b32450c210cec1fdd8b2c19d564776e8054aa3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 26719d252dd8e3a53c08da2ed3c3a8d62fbbc30a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 55f0245f3ee538ec49e84bcb28c33b135a07f0b9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d2c1bd80350f692c5c2298cb88859564ec0a061b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 48af0ac87dc3beef4d3e6c7982b158d50f7b2a6e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 039bfe373c990fc6db3808d255abaff91235e82f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dafe71a3e2d5cfb9b80805a26d5442ca5ad8332f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d5625170b248edc6a570c977fb1f8e7430ffd0b5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8f043f00d5161794ef538802dcc9ba75e375c058 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1a5885a4c5983242b1356b57eafeb59a9d5c0d0f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8c982c1f50bd7ae3bc4a1afc09e9ad11aecd434f ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 273400f95ae036c01d4b0fd7a7ca6ab160efd958 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 233e3ffe0ef35dbabe49340ba567499690dcc166 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7b675bf555e89e708f1b8f79bd90796dd395837b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e7252e217fe6d8f05dd50f6e125c33a1c6fff602 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- cbbb6b349e8d0557e7e55e2d05819d6bdaed3769 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ebee400cfa4a532018ee904c22c7e3e6619ca4de ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- e10706b6c167454a723636e0929061201a2f461b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 80b60fafa94b794fa77fab85e1df66f52598f3ac ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4e509130b7dfc97eeb4a517d6c9c65a8d6204234 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7d49273897bd317323e0a3bbbc01b76e83370f0c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- c4d5e7c9dab813adf9bfd8198bb9bb00c9a9503b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 4a061029eddee38110e416e3c4f60d553dafc9e5 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 323259cc3d977235f4e7e8980219e5e96d66086e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 80d01f0ef89e287184ba6d07be010ee3f16a74d9 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- fd47d6b11833870ce23102a3373b7a50a1b45d00 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 58fa2c401856f93712ae6cc45d4dc3458ee4b4f4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- dc922f3678a1b01cac2b3f1ec74b831ffec52a71 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 2405cf54ac06140a0821f55b34c1d54f699e8e73 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 579d1b8174c9be915c0fa17a67fc38cc6de36ad7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 8501e908bb8c531dfa75cef33fcec519027f4e5b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- a7129dc00826cb344c0202f152f1be33ea9326fe ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 85c6252b54108750291021a74dc00895f79a7ccf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1accc498c40e684f870d38b7d128739a0ebf57cf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 27ceafbb3f74b4677d5bae6c7ea031de07c6cfad ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c60b88138b836307bdde0487c4ffb82121b1c5e ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 70094734d601e1220c95ac586fdffbda3a23e10b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 69a56c4e2addd1ec53bb40e8a18f52353d1fc28c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 5962862e9ba0a1c9a14306688973946f6f7ce75c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 03bfdb16cd7cc6e1c7c8d3b59552da7de3d82d1c ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 71cd409660bc5b8c211dc7c51afae481d822d593 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 35ddb45b41b3de2d4f783608ad8d8752f6557997 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 30472cf3132b8c03e528b23d1c7533de740e28ab ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1dc09f0ece61ef2bd629e8bfe532aa24f4f8e0c2 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ae54e18d7ca7bc8b8fbc667119fb60b25f0f3871 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 207bf7bf30651c3284408d87d7c499e43db6bc83 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9b975d9fcf5924800f9ea5d68d7d79f743ca9af7 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- d7e59d3ef86beb3b3b3e53a610af122b2220841b ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 0651f0964ba5a33257ebbda1e92c7a1649a4a058 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 062aafa396866d4dfe8f3fd2f32d46fa7c01b6dd ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- ea6af04977c197fd07ab812d394dcb61feebaf67 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 657e98094f0f669809bc0e47f3d6bd9a8124cf32 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7c35350e5bc4fe113330818ca6784ff368c5ffef ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 620dbee78ed8481d108327c4c332899df7cb8ef4 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 6383196b7bb0773c0083a2a3d49a95e5479715bf ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 9066712dca21ef35c534e068f2cc4fefdccf1ea3 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 933d23bf95a5bd1624fbcdf328d904e1fa173474 ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 1f66cfbbce58b4b552b041707a12d437cc5f400a ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 7156cece3c49544abb6bf7a0c218eb36646fad6d ---- -58c78e649cbac271dee187b055335c876fcb1937 with predicate ----- 33ebe7acec14b25c5f84f35a664803fcab2f7781 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b213ab544114f7e6148ee5f2dda9b7421d2d998 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a0bb1b1d427b620d7acbada46a13c3123412e66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03db7c345b3ac7e4fc55646775438c86f9b79ee7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a98c7404d85ca0fdc96a5f4c0c740f5f13c62cb7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f8c61dbd14ec1bdbbee59e301aef2c158bf7b55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4359204a9b05c4abba3bc61c504dca38231d45f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d7b8ba9f2e9298496232e4ae66bd904a1d71001 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff56dbbfceef2211087aed2619b7da2e42f235e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17c750a0803ae222f1cdaf3d6282a7e1b2046adb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eff48b8ba25a0ea36a7286aa16d8888315eb1205 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09fb2274db09e44bf3bc14da482ffa9a98659c54 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07bfe1a60ae93d8b40c9aa01a3775f334d680daa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aba4d9b4029373d2bccc961a23134454072936ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b09003fffa8196277bcfaa9984a3e6833805a6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc8d23d3d6e735d70fd0a60641c58f6e44e17029 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b0465c9bcca64c3a863a95735cc5e602946facb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eae33d324376a0a1800e51bddf7f23a343f45a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d9011c05b0e27f1324f393e65954542544250d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb3fec340f89955a4b0adfd64636d26300d22af9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b72118e231c7bc42f457e2b02e0f90e8f87a5794 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59c89441fb81b0f4549e4bf7ab01f4c27da54aad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe594eb345fbefaee3b82436183d6560991724cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- affee359af09cf7971676263f59118de82e7e059 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9f9027779931c3cdb04d570df5f01596539791b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f5d2fd68e784c2b2fd914a196c66960c7f48b49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26dfeb66be61e9a2a9087bdecc98d255c0306079 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bf00a6719804c2fc5cca280e9dae6774acc1237 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae9d56e0fdd4df335a9def66aa2ac96459ed6e5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cef949913659584dd980f3de363dd830392bb68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3903d8e03af5c1e01c1a96919b926c55f45052e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 42e4f5e26b812385df65f8f32081035e2fb2a121 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6500844a925f0df90a0926dbdfc7b5ebb4a97bc9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00b5802f9b8cc01e0bf0af3efdd3c797d7885bb1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b6fe83f4d817a3b73b44df16cfb4f96bd4d9904 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ca97dcef3131a11dd5ef41d674bb6bd36608608 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 702bdf105205ca845a50b16d6703828d18e93003 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a61a63ed4bb866b2817acbb04e045f8460e040e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79e24f78fa35136216130a10d163c91f9a6d4970 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abf9373865c319d2f1aaf188feef900bb8ebf933 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 057514e85bc99754e08d45385bf316920963adf9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a625d08801eacd94f373074d2c771103823954d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dbc2be846d1d00e907efbf8171c35b889ab0155 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb02e1229d336decc7bae970483ff727ed7339db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17643e0bd1b65155412ba5dba8f995a4f0080188 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eae0e37c88a71a3b8ca816b820eed71fd1590f11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b11bcfa3df4d0b792823930bffae126fd12673f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33346b25c3a4fb5ea37202d88d6a6c66379099c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572bbb39bf36fecb502c9fdf251b760c92080e1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e76b5379cf55fcd31a2e8696fb97adf8c4df1a8d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b38725361f711ae638c048f93a7b6a12d165bd4e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34356322ca137ae6183dfdd8ea6634b64512591a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2448ac4ca337665eb22b9dd5ca096ef625a8f52b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96f8f17d5d63c0e0c044ac3f56e94a1aa2e45ec3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b16037a4ff17f0e25add382c3550323373c4398 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 559ddb3b60e36a1b9c4a145d7a00a295a37d46a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90fefb0a8cc5dc793d40608e2d6a2398acecef12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f97d37881d50da8f9702681bc1928a8d44119e88 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e37ebaa5407408ee73479a12ada0c4a75e602092 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86114886ae8c2e1a9c09fdc145269089f281d212 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- baec2e293158ccffd5657abf4acdae18256c6c90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c08f592cc0238054ec57b6024521a04cf70e692f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1fa8506d177fa49552ffa84527c35d32f193abe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18b75d9e63f513e972cbc09c06b040bcdb15aa05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6752fad0e93d1d2747f56be30a52fea212bd15d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fd9f6ee5c8b4ae4e01a40dc398e2768d838210d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71e28b8e2ac1b8bc8990454721740b2073829110 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a094ac1808f7c5fa0653ac075074bb2232223ac1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b0028e1e75e1ee0eea63ba78cb3160d49c1f3a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ad4079dde47ce721e7652f56a81a28063052a166 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26ccee15ae1712baf68df99d3f5f2fec5517ecbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 300261de4831207126906a6f4848a680f757fbd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4fe276637fe1ce3b2ebb504b69268d5b79de1ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d92fee01b05e5e217e6dad5cc621801c31debae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c6178f53233aa98a602854240a7a20b6537aa7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af7913cd75582f49bb8f143125494d7601bbcc0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f2f3e848e10d145fe28d6a8e07b0c579dd0c276 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 803aca26d3f611f7dfd7148f093f525578d609ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9b0e75c07ccbf90a9f2e67873ffbe672bb1a859 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c34c23a830bb45726c52bd5dcd84c2d5092418e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f8320b7bf75b6ec375ade605a9812b4b2147de9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3778ec37d17a6eb781fa9c6b5e2009fa7542d77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a880c5f4e00ef7bdfa3d55a187b6bb9c4fdd59ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1cd58ba862cce9cd9293933acd70b1a12feb5a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7988bb8ce25eb171d7fea88e3e6496504d0cb8f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9de6450084eee405da03b7a948015738b15f59e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c19a6e1004bb8c116bfc7823477118490a2eef6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a1339a3d6751b2e7c125aa3195bdc872d45a887 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 037d62a9966743cf7130193fa08d5182df251b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dd3cdfc9d647ecb020625351e0ff3a7346e1918d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2765dfd72cd5b0958ec574bea867f5dc1c086ab0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f653af66e4c9461579ec44db50e113facf61e2d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8cad756f357eb587f9f85f586617bff6d6c3ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21e21d04bb216a1d7dc42b97bf6dc64864bb5968 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dd71d3edbf3930cce953736e026ac3c90dd2e59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69b75e167408d0dfa3ff8a00c185b3a0bc965b58 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82189398e3b9e8f5d8f97074784d77d7c27086ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb7288d4f4a93d07c9989c90511f6887bcaeb25 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 696e4edd6c6d20d13e53a93759e63c675532af05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e4211b20e8e57fe7b105b36501b8fc9e818852f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24f75e7bae3974746f29aaecf6de011af79a675d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfbd5ece215dea328c3c6c4cba31225caa66ae9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9541d6bffe4e4275351d69fec2baf6327e1ff053 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08989071e8c47bb75f3a5f171d821b805380baef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e30a597b028290c7f703e68c4698499b3362a38f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c96476be7f10616768584a95d06cd1bddfe6d404 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c6e67013fd22840d6cd6cb1a22fcf52eecab530 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ba76d683df326f2e6d4f519675baf86d0373abf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cd47aeea822c484342e3f0632ae5cf8d332797d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 60acfa5d8d454a7c968640a307772902d211f043 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2067ba536dd78549d613dc14d8ad223c7d0aa5d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df6fa49c0662104a5f563a3495c8170e2865e31b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a9f8c55d6a58fe42fe67e112cbc98de97140f75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 624eb284e0e6edc4aabf0afbdc1438e32d13f4c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 135e7750f6b70702de6ce55633f2e508188a5c05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1759a78b31760aa4b23133d96a8cde0d1e7b7ba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb411ee92d30675a8d3d110f579692ea02949ccd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7b5e92791dd4db3535b527079f985f91d1a5100 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94bbe51e8dc21afde4148afb07536d1d689cc6ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb7fd31955aaba8becbdffb75dab2963d5f5ad8c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f9840b9220d57b737ca98343e7a756552739168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98595da46f1b6315d3c91122cfb18bbf9bac8b3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a1991773b79c50d4828091f58d2e5b0077ade96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ef37754527948af1338f8e4a408bda7034d004f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30387f16920f69544fcc7db40dfae554bcd7d1cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b68361c8b81b23be477b485e2738844e0832b2f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 176838a364fa36613cd57488c352f56352be3139 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3ea6c0564a4a8c310d0573cebac0a21ac7ab0a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a175068f3366bb12dba8231f2a017ca2f24024a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3edd16ca6e217ee35353564cad3aa2920bc0c2e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9cb7ae8d9721e1269f5bacd6dbc33ecdec4659c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5f0d48745727684473cf583a002e2c31174de2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe65adc904f3e3ebf74e983e91b4346d5bacc468 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0238e6cce512a0960d280e7ec932ff1aaab9d0f1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50edc9af4ab43c510237371aceadd520442f3e24 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7bde529ad7a8d663ce741c2d42d41d552701e19a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5453888091a86472e024753962a7510410171cbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b7839e6b55953ddac7e8f13b2f9e2fa2dea528b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 411635f78229cdec26167652d44434bf8aa309ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99ba753b837faab0509728ee455507f1a682b471 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4720e6337bb14f24ec0b2b4a96359a9460dadee4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24cd6dafc0008f155271f9462ae6ba6f0c0127a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a71ebbc1138c11fccf5cdea8d4709810360c82c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69ca329f6015301e289fcbb3c021e430c1bdfa81 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c6209f12e78218632319620da066c99d6f771d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f14903a0d4bb3737c88386a5ad8a87479ddd8448 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2fd537b5b3bb062a26c9b16a52236b2625ff44c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e236853b14795edec3f09c50ce4bb0c4efad6176 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b860d1873a25e6577a8952d625ca063f1cf66a84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fbc2304fea19a2b6fc53f4f6448102768e3eeb2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 890fd8f03ae56e39f7dc26471337f97e9ccc4749 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07f6f2aaa5bda8ca4c82ee740de156497bec1f56 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d4dd2f1a6f31df9e361ebaf75bc0a2de7110c37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 466ed9c7a6a9d6d1a61e2c5dbe6f850ee04e8b90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdd4368489345a53bceb40ebd518b961f871b7b3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d472327f4873a7a4123f7bdaecd967a86e30446 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86b269e1bff281e817b6ea820989f26d1c2a4ba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f344c8839a1ac7e4b849077906beb20d69cd11ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f404a50e95dd38012d33ee8041462b7659d79a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2616e12df494774f13fd88538e9a58673f5dabb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 391c0023675b8372cff768ff6818be456a775185 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 97aec35365231c8f81c68bcab9e9fcf375d2b0dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 173cb579972dbab1c883e455e1c9989e056a8a92 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a684a7c41e89ec82b2b03d2050382b5e50db29ee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c382f3678f25f08fc3ef1ef8ba41648f08c957ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3c8760feb03dd039c2d833af127ebd4930972eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 49f13ef2411cee164e31883e247df5376d415d55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a30b2430e25d615c14dafc547caff7da9dd5403 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15e457c8a245a7f9c90588e577a9cc85e1efec07 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 644f75338667592c35f78a2c2ab921e184a903a0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b6d4885db27b6f3e5a286543fd18247d7d765ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb792ea76888970d486323df07105129abbbe466 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5db2e0c666ea65fd15cf1c27d95e529d9e1d1661 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbf3d2745c3758490f31199e31b098945ea81fca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0420b01f24d404217210aeac0c730ec95eb7ee69 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d39bd5345af82e3acbdc1ecb348951b05a5ed1f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac286162b577c35ce855a3048c82808b30b217a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2810e8d3f34015dc5f820ec80eb2cb13c5f77b2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 607df88ee676bc28c80bca069964774f6f07b716 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7b401e0aa9dbb1a7543dde46064b24a5450db19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c9da7310eb6adf67fa8d35821ba500dffd9a2a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c859019afaffc2aadbb1a1db942bc07302087c52 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f358e04cb00647e1c74625a8f669b6803abd1fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a244bd15bcd05c08d524ca9ef307e479e511b54c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863abe8b550d48c020087384d33995ad3dc57638 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84c3f60fc805e0d5e5be488c4dd0ad5af275e495 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9de612ebe54534789822eaa164354d9523f7bde ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0059f432c4b9c564b5fa675e76ee4666be5a3ac8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14a7292b26e6ee86d523be188bd0d70527c5be84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72a2f7dd13fdede555ca66521f8bee73482dc2f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c563b7211b249b803a2a6b0b4f48b48e792d1145 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6804e73beb0900bd1f5fd932fab3a88f44cf7a31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73feb182f49b1223c9a2d8f3e941f305a6427c97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e81fd5447f8800373903e024122d034d74a273f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc553d6843c791fc4ad88d60b7d5b850a13fd0ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99b6dffe9604f86f08c2b53bef4f8ab35bb565a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a5a78b27ce1bcda6597b340d47a20efbac478d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fd8768c64d192b0b26a00d6c12188fcbc2e3224 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eca69510d250f4e69c43a230610b0ed2bd23a2e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c63abb360b4829b3d75d60fb837c0132db0510 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24d04e820ef721c8036e8424acdb1a06dc1e8b11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab361cfecf9c0472f9682d5d18c405bd90ddf6d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99471bb594c365c7ad7ba99faa9e23ee78255eb9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45a5495966c08bb8a269783fd8fa2e1c17d97d6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61fef99bd2ece28b0f2dd282843239ac8db893ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 909ee3b9fe308f99c98ad3cc56f0c608e71fdee7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d94159db3067cc5def101681e6614502837cea5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0412f6d50e9fafbbfac43f5c2a46b68ea51f896f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e47352575d9b0a453770114853620e8342662fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4a83ff7910dc3617583da7e0965cd48a69bb669 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0a69bbec284bccbeecdf155e925c3046f024d4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 625969d5f7532240fcd8e3968ac809d294a647be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e671d243c09aa8162b5c0b7f12496768009a6db0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8cb3e0cac2f1886e4b10ea3b461572e51424acc7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cf0ca8b94dc815598e354d17d87ca77f499cae6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c429fc0382868c22b56e70047b01c0567c0ba31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87abade91f84880e991eaed7ed67b1d6f6b03e17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b17a76731c06c904c505951af24ff4d059ccd975 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158131eba0d5f2b06c5a901a3a15443db9eadad1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04005d5c936a09e27ca3c074887635a2a2da914c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c40cf5e83e56e339ec6ab3e75b008721e544ede ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cb09652c007901b175b4793b351c0ee818eb249 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91f6e625da81cb43ca8bc961da0c060f23777fd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d296eec67a550e4a44f032cfdd35f6099db91597 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ee8b09fd24962889e0e298fa658f1975f7e4e48c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b74a5bb6123b425a370da60bcc229a030e7875c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6b8e7b72ce81524cf82e64ee0c56016106501d96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e82a7845af93955d24a661a1a9acf8dbcce50b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff4f970fa426606dc88d93a4c76a5506ba269258 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2573dd5409e3a88d1297c3f9d7a8f6860e093f65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f4c7f3ec32a1943a0d5cdc0633fc33c94086f5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f4e51bb4fc9d9c74cdbfb26945d053053f60e7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8da4072d71c3b0c13e478dc0e0d92336cf1fdd9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fced2eb501e3428b3e19e5074cf11650945a840 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52f9369ec96dbd7db1ca903be98aeb5da73a6087 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3fabed8d0d237b4d97b695f0dff1ba4f6508e4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00ef69351e5e7bbbad7fd661361b3569b6408d49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eba84183ea79061eebb05eab46f6503c1cf8836f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55fd173c898da2930a331db7755a7338920d3c38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 768b9fffa58e82d6aa1f799bd5caebede9c9231b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d22d57010e064cfb9e0b6160e7bd3bb31dbfffc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a10ceef3599b6efc0e785cfce17f9dd3275d174f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cedd3321e733ee1ef19998cf4fcdb2d2bc3ccd14 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 913b4ad21c4a5045700de9491b0f64fab7bd00ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6aa78cd3b969ede76a1a6e660962e898421d4ed8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e633cc009fe3dc8d29503b0d14532dc5e8c44cce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05cf33acc6f451026e22dbbb4db8b10c5eb7c65a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e50ee0a0370fcd45a9889e00f26c62fb8f6fa44e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5f3c586e0f06df7ee0fc81289c93d393ea21776 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7392d68121befe838d2494177531083e22b3d29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc209ec23819313ea3273c8c3dcbc2660b45ad6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbd9ca4f16830c4991d570d3f9fa327359a2fa11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5dd2f0c0ed534ecbc1c1a2d8e07319799a4e9c7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae7499f316770185d6e9795430fa907ca3f29679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db4cb7c6975914cbdd706e82c4914e2cb2b415e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdfd3fc5b4d892b79dfa86845fcde0acc8fc23a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec29b1562a3b7c2bf62e54e39dce18aebbb58959 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 438d3e6e8171189cfdc0a3507475f7a42d91bf02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d01f0726d5764fe2e2f0abddd9bd2e0748173e06 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2ce56ffd016e2e6d1258ce5436787cae48a0812 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e27496dea8a728446e7f13c4ff1b5d8c2f3e736 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a2f8a9db703e55f3aa2b068cb7363fd3c757e71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 820bc3482b6add7c733f36fefcc22584eb6d3474 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9432bedaa938eb0e5a48c9122dd41b08a8f0d740 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80ac0fcf1b8e8d8681f34fd7d12e10b3ab450342 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7cff58fd53bdb50fef857fdae65ee1230fd0061 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 313b3b4425012528222e086b49359dacad26d678 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85cf7e89682d061ea86514c112dfb684af664d45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d17c2f6131b9a716f5310562181f3917ddd08f91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ee6c19423297b4c667d34ed1bd621dafaabb0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 553500a3447667aaa9bd3b922742575562c03b68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebf46561837f579d202d7bd4a22362f24fb858a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a103d8c28b496ead8b4dd8215b103414f8b7f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05b5cedec2101b8f9b83b9d6ec6a8c2b4c9236bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34afc113b669873cbaa0a5eafee10e7ac89f11d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a61393899b50ae5040455499493104fb4bad6feb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6446608fdccf045c60473d5b75a7fa5892d69040 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d85574e0f37e82e266a7c56e4a3ded9e9c76d8a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6244c55e8cbe7b039780cf7585be85081345b480 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05753c1836fb924da148b992f750d0a4a895a81a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfa0eac1578bff14a8f7fa00bfc3c57aba24f877 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74930577ec77fefe6ae9989a5aeb8f244923c9ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2636d216d43b40a477d3a5180f308fc071abaeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38c624f74061a459a94f6d1dac250271f5548dab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14d7034adc2698c1e7dd13570c23d217c753e932 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44496c6370d8f9b15b953a88b33816a92096ce4d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a086625da1939d2ccfc0dd27e4d5d63f47c3d2c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 544ceecf1a8d397635592d82808d3bb1a6d57e76 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b303cb0c5995bf9c74db34a8082cdf5258c250fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fd090293792884f5a0d05f69109da1c970c3cab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95897f99551db8d81ca77adec3f44e459899c20b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4744efbb68c562adf7b42fc33381d27a463ae07a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3c3efd20c50b2a9db98a892b803eb285b2a4f83 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71b3845807458766cd715c60a5f244836f4273b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59ad90694b5393ce7f6790ade9cb58c24b8028e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43564d2e8f3b95f33e10a5c8cc2d75c0252d659a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ba39bd0f0b27152de78394d2a37f3f81016d848 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ba1ceaeadd8ff39810c5f410f92051a36dd17e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5eb90461917afe04f31abedae894e63f81f827e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 19a4df655ae2ee91a658c249f5abcbe0e208fa72 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 248ad822e2a649d20582631029e788fb09f05070 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b269775a75d9ccc565bbc6b5d4c6e600db0cd942 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 763531418cb3a2f23748d091be6e704e797a3968 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f7e92cf00814fc6c4fb66527d33f7030f98e6bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69d7a0c42cb63dab2f585fb47a08044379f1a549 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 64b85ee4cbaeb38a6dc1637a5a1cf04e98031b4b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf1354bb899726e17eaaf1df504c280b3e56f3d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55146609e2d0b120c5417714a183b3b0b625ea80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 289fab8c6bc914248f03394672d650180cf39612 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f2b40d74c67c6fa718f9079654386ab333476d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba169916b4cc6053b610eda6429446c375295d78 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c459bfcfdd7487f8aae5dd4101e7069f77be846 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 321694534e8782fa701b07c8583bf5eeb520f981 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef2316ab8fd3317316576d2a3c85b59e685a082f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e6099bce97a688c251c29f9e7e83c6402efc783 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7289c75cceaaf292c6ee01a16b24021fd777ad5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01f142158ee5f2c97ff28c27286c0700234bd8d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d0d1d6cfec28ba89ed1819bee9fe75931e765d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb08a3df46718c574e85b53799428060515ace8d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb14533db732d62778ae48a4089b2735fb9e6f92 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3a57f53d74998e835bce1a69bccbd9c1dadd6f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f83797aefa6a04372c0d5c5d86280c32e4977071 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b16b6649cfdaac0c6734af1b432c57ab31680081 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05e9a6fc1fcb996d8a37faf64f60164252cc90c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7081db74a06c89a0886e2049f71461d2d1206675 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07f81066d49eea9a24782e9e3511c623c7eab788 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d66f8f79629bcfa846a3d24a2a2c3b99fb2a13f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16c2d9c8f0e10393bf46680d93cdcd3ce6aa9cfd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89d11338daef3fc8f372f95847593bf07cf91ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ad6dc07790fe567412ccbc2a539f4501cb32ab2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 199099611dd2e62bae568897f163210a3e2d7dbb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14f3d06b47526d6f654490b4e850567e1b5d7626 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1349ee61bf58656e00cac5155389af5827934567 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7d2671c6ef156d1a2f6518de4bd43e3bb8745be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a37405664efe3b19af625b11de62832a8cfd311c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cfd4b30cda23270b5bd2d1e287e647664a49fee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccaae094ce6be2727c90788fc5b1222fda3927c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f583a810162c52cb76527d60c3ab6687b238938 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a5cef5c7c4a7130626fc2d7d5d562e1e985bbd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 916a0399c0526f0501ac78e2f70b833372201550 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d759e17181c21379d7274db76d4168cdbb403ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fa1ce2b7dcf7f1643bb494b71b9857cbfb60090 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3face9018b70f1db82101bd5173c01e4d8d2b3bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 23b83cd6a10403b5fe478932980bdd656280844d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf237db554f8e84eaecf0fad1120cbd75718c695 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66bb01306e8f0869436a2dee95e6dbba0c470bc4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 193df8e795de95432b1b73f01f7a3e3c93f433ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0dd99fe29775d6abd05029bc587303b6d37e3560 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb8b383d8be3f9da39c02f5e04fe3cf8260fa470 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63a444dd715efdce66f7ab865fc4027611f4c529 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b207f0e8910a478ad5aba17d19b2b00bf2cd9684 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9121f629d43607f3827c99b5ea0fece356080cf0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 882ebb153e14488b275e374ccebcdda1dea22dd7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fdb1dc77a45a26d8eac9f8b53f4d9200f54f7efe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 359a7e0652b6bf9be9200c651d134ec128d1ea97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bf53a3913d55f933079801ff367db5e326a189a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d7eaf1253245c6b88fd969efa383b775927cdd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d8a5144bd8c0940d9f2593a21aec8bebf7c035 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07657929bc6c0339d4d2e7e1dde1945199374b90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5c94165d24195994c929de95782e1d412e7c2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ff2f4f7a2f8212a68aff34401e66a5905f70f51 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca080bbd16bd5527e3145898f667750feb97c025 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e2d2651773722c05ae13ab084316eb8434a3e98 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6fdb67cec5c75b3f0a855042942dac75c612065 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bebfe31c2d9064d4a13de95ad79a4c9bdc3a33a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87b5d9c8e54e589d59d6b5391734e98618ffe26e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ece804aed9874b4fd1f6b4f4c40268e919a12b17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5cc590c875ada0c55d975cbe26141a94e306c94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fa99bff215249378f90e1ce0254e66af155a301 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dab0c2e0da17c879e13f0b1f6fbf307acf48a4ff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2cd5970af1ea8024ecf82b11c1b3802d7c72ba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acbd5c05c7a7987c0ac9ae925032ae553095ebee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 326409d7afd091c693f3c931654b054df6997d97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71bd08050c122eff2a7b6970ba38564e67e33760 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e7e82b114a5c1b3eb61f171c376e1cf85563d07 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b6b90f9f1e5310a6f39b75e17a04c1133269e8f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- daa3f353091ada049c0ede23997f4801cbe9941b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80204335d827eb9ed4861e16634822bf9aa60912 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 859ad046aecc077b9118f0a1c2896e3f9237cd75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 913d806f02cf50250d230f88b897350581f80f6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce7e1507fa5f6faf049794d4d47b14157d1f2e50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bd86c87c38d58b9ca18241a75c4d28440c7ef150 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e93ffe192427ee2d28a0dd90dbe493e3c54f3eae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a77a17f16ff59f717e5c281ab4189b8f67e25f53 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b176732ba16379d57f53e956456bc2c5970baf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a02facd0b4f9c2d2c039f0d7dc5af8354ce0201b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6df6d41835cd331995ad012ede3f72ef2834a6c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b50b96032094631d395523a379e7f42a58fe8168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b628dccf4102d2a63c6fc8cd957ab1293bafbc6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3bf002e3ccc26ec99e8ada726b8739975cd5640e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 687c8f0494dde31f86f98dcb48b6f3e1338d4308 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dac619e4917b0ad43d836a534633d68a871aecca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1bb0b1751b38da43dbcd2ec58e71eb7b0138d786 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9dbaab311dbafcba0b68edb6ed89988b476f1dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74a0507f4eb468b842d1f644f0e43196cda290a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc664f07535e3b3c1884d0b7f3cbcbadf9adce25 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b13c115994461fb6bafe5dd06490aae020568c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da8aeec539da461b2961ca72049df84bf30473e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c73b239bd10ae2b3cff334ace7ca7ded44850cbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41b9cea832ad5614df94c314d29d4b044aadce88 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31cc0470115b2a0bab7c9d077902953a612bbba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33f2526ba04997569f4cf88ad263a3005220885e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c282315f0b533c3790494767d1da23aaa9d360b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77e47bc313e42f9636e37ec94f2e0b366b492836 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5cd12a6bcace3c99d94bbcf341ad7d4351eaca0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6971a930644d56f10e68e818e5818aa5a5d2e646 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f6bf7948121357a85a8069771919fb13d2cecf9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11fd713f77bb0bc817ff3c17215fd7961c025d7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ee33ac9b234c7501d97b4c2bf2e2035c5ec1fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14b221bf98757ba61977c1021722eb2faec1d7cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce21f63f7acba9b82cea22790c773e539a39c158 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f66e25c25cde2423917ee18c4704fff83b837d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 881e3157d668d33655da29781efed843e4a6902a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11f0634803d43e6b9f248acd45f665bc1d3d2345 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dff4bdd4be62a00d3090647b5a92b51cea730a84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a6ca8c40433400f6bb3ece2ed30808316de5be3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b3ffcdda1114ad204c58bdf3457ac076ae9a0b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8690f8974b07f6be2db9c5248d92476a9bad51f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 530ab00f28262f6be657b8ce7d4673131b2ff34a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 926d45b5fe1b43970fedbaf846b70df6c76727ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c706a217238fbe2073d2a3453c77d3dc17edcc9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e1fe7f6a83633207c9e743708c02c6e66173e7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e4239c4c3b106b436673e4f9cca43448f6f1af9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c49ba433b3ff5960925bd405950aae9306be378b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8fc6563219017354bdfbc1bf62ec3a43ad6febcb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1634dc48b39ecca11dc39fd8bbf9f1d8f1b7be6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89df64132ccd76568ade04b5cf4e68cb67f0c5c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8591a094a768d73e6efb5a698f74d354c989291 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3d9b8df38dacfe563b1dd7abb9d61b664c21186 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1d2f4bc85da47b5863589a47b9246af0298f016 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92a481966870924604113c50645c032fa43ffb1d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ca25b9b090511fb61f9e3122a89b1e26d356618 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 914bbddfe5c02dc3cb23b4057f63359bc41a09ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f99fb4962c2777286a128adbb093d8f25ae9dc7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f08b7730438bde34ae55bc3793fa524047bb804 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9807dd48b73ec43b21aa018bdbf591af4a3cc5f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce5dfe7f95ac35263e41017c8a3c3c40c4333de3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c2446f24bc6a91ca907cb51d0b4a690131222d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29aa1b83edf3254f8031cc58188d2da5a83aaf75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8fd91020739a0d57f1df562a57bf3e50c04c05b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7be3486dc7f91069226919fea146ca1fec905657 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05e3b0e58487c8515846d80b9fffe63bdcce62e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6e0a6cb5c70efd0899f620f83eeebcc464be05c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0857d33852b6b2f4d7bc470b4c97502c7f978180 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e79a3f8f6bc6594002a0747dd4595bc6b88a2b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3265bd8beb017890699d093586126ff8af4a3fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f12b26b81a8e7667b2a26a7878e5bc033610ed5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 190c04569bd2a29597065222cdcc322ec4f2b374 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f76463221cf1c69046b27c07afde4f0442b75d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c1e984b212637fe108c0ddade166bc39f0dd2ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d15bc65735852d3dce5ca6d779a90a50c5323b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09d2ae5f1ca47e3aede940e15c28fc4c3ff1e9eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f14a596a33feaad65f30020759e9f3481a9f1d9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03126bfd6e97ddcfb6bd8d4a893d2d04939f197e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5710466a728446d8169761d9d4c29b1cb752b00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c22f1b05fee73dd212c470fecf29a0df9e25a18f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a14277eecf65ac216dd1b756acee8c23ecdf95d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a96030d82fa379d24b952a58eed395143950c7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2cd130bed184fe761105d60edda6936f348edc6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28cbb953ce01b4eea7f096c28f84da1fbab26694 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d91ae75401b851b71fcc6f4dcf7eb29ed2a63369 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 610d4c97485d2c0d4f65b87f2620a84e0df99341 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfae362363b28be9b86250eb7f6a32dac363c993 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dd14b60b112a867a2217087b7827687102b11fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66328d76a10ea53e4dfe9a9d609b44f30f734c9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7f657fb20c063dfc2a653f050accc9c40d06a60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f237620189a55d491b64cac4b5dc01b832cb3cbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95ff8274a0a0a723349416c60e593b79d16227dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ce49598a25b48ad0ab38cc1101c5e2a42a918e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddb828ecd0e28d346934fd1838a5f1c74363fba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2eb6cf0855232da2b8f37785677d1f58c8e86817 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2af601d5800a39ab04e9fe6cf22ef7b917ab5d67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ef53c53012c450adb8d5d386c207a98b0feb579 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5f034355962c5156f20b4de519aae18478b413a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb43244026643e540a2fac35b2997c6aa0e139c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6cf7a7bd864fe1fb64d7bea0c231c6254f171e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eb497ba1bbcaeb05a413a226fd78e54a29a3ff5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dca537f505e93248739478f17f836ae79e00783 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edb28b9b2c2bd699da0cdf5a4f3f0f0883ab33a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bbaf1c5c792d14867890200db68da9fd82d5997 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fad63e83853a65ee9aa98d47a64da3b71e4c01af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf8dc259fcc9c1397ea67cec3a6a4cb5816e3e68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 375e1e68304582224a29e4928e5c95af0d3ba2fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 559b90229c780663488788831bd06b92d469107f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aec58a9d386d4199374139cd1fc466826ac3d2cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bd708d41090fbe00acb41246eb22fa8b5632967 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc4e3cc8521f8315e98f38c5550d3f179933f340 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6420d2e3a914da1b4ae46c54b9eaa3c43d8fd060 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92c7c8eba97254802593d80f16956be45b753fd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bbcf2fc648561e4fc90ee4cc5525a3257604ec1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c121f60395ce47b2c0f9e26fbc5748b4bb27802d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 32da7feb496ef31c48b5cbe4e37a4c68ed1b7dd5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39335e6242c93d5ba75e7ab8d7926f5a49c119a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c418df44fd6ac431e10b3c9001699f516f3aa183 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ef889531eed9ac73ece70318d4eeb45d81b9bc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dffba51b4fd88f7d26a43cf6d1fbbe3cdb9f44d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c23ae3a48bb37ae7ebd6aacc8539fee090ca34bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8c31c6a6e9ffbfdbd292b8d687809b57644de27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ce2a4b235d2ebc38c3e081c1036e39bde9be036 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96402136e81bd18ed59be14773b08ed96c30c0f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c6ae79a7b38c7800c19e28a846cb2f227e52432 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46c4ec22d70251c487a1d43c69c455fc2baab4f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0788e0be3164acd65e3bc4b5bc1b51179b967ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 830070d7ed09d6eaa4bcaa84ab46c06c8fff33d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e8412226ffe0c046177fa6d838362bfbde60cd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72dddc7981c90a1e844898cf9d1703f5a7a55822 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3bd3c6b94c735c725f39959730de11c1cebe67a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 416daa0d11d6146e00131cf668998656186aef6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ede752333a851ee6ad9ec2260a0fb3e4f3c1b0b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0181a40db75bb27277bec6e0802f09a45f84ffb3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88732b694068704cb151e0c4256a8e8d1adaff38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fdc8ecbc0c1d8a4b76ec653602c5ab06a9659c98 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b197de0ccc0faf8b4b3da77a46750f39bf7acdb3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 552a0aa094f9fd22faf136cdbc4829a367399dfe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2ad9a239b1a06ee19b8edcd273cbfb9775b0a66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddffe26850e8175eb605f975be597afc3fca8a03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d6e1731b6324eba5abc029b26586f966db9fa4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82ae723c8c283970f75c0f4ce097ad4c9734b233 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15b6bbac7bce15f6f7d72618f51877455f3e0ee5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c823d482d03caa8238b48714af4dec6d9e476520 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0c187229cea1eb3f395e7e71f636b97982205ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f21630bcf83c363916d858dd7b6cb1edc75e2d3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06914415434cf002f712a81712024fd90cea2862 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f207e0e15ad243dd24eafce8b60ed2c77d6e725 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8437c014b0a9872168b01790f5423e8e9255840 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b06b13e61e8db81afdd666ac68f4a489cec87d5a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b93ba7ca6913ce7f29e118fd573f6ed95808912b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5149c807ec5f396c1114851ffbd0f88d65d4c84f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c3a6889b654892b3636212b880fa50df0358679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4754fa194360b4648a26b93cdff60d7906eb7f7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- caa0ea7a0893fe90ea043843d4e6ad407126d7b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- afcd64ebbb770908bd2a751279ff070dea5bb97c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aab7dc2c7771118064334ee475dff8a6bb176b57 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e4a4545dd513204efb6afe40e4b50c3b5f77e50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93d530234a4f5533aa99c3b897bb56d375c2ae60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff389af9374116c47e3dc4f8a5979784bf1babff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ca7c019a359c64a040e7f836d3b508d6a718e28 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70bb7e4026f33803bb3798927dbf8999910700d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e12ef59c559e3be8fa4a65e17c9c764da535716e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3165753f9d0d69caabac74eee195887f3fea482 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c170c3e74b8ef90a2c7f47442eabce27411231 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52e28162710eb766ffcfa375ef350078af52c094 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 896830bda41ffc5998e61bedbb187addaf98e825 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b84602026c1cc7b9d83ab618efb6b48503e97af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a596e1284c8a13784fd51b2832815fc2515b8d6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53c15282a84e20ebe0a220ff1421ae29351a1bf3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eacf90dff73ab7578cec1ba0d82930ef3044663 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09c88bec0588522afb820ee0dc704a936484cc45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aafde7d5a8046dc718843ca4b103fcb8a790332c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e355275c57812af0f4c795f229382afdda4bca86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74c7ed0e809d6f3d691d8251c70f9a5dab5fb18d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e5ef73d3d6d9b973a756fddd329cfa2a24884e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f6c697c0df4704206d2fd1572640f7f2bd80c73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 833ac6ec4c9f185fd40af7852b6878326f44a0b3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a2f7dce43617b773a6be425ea155812396d3856 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a469af892b3e929cbe9d29e414b6fcd59bec246e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be44602b633cfb49a472e192f235ba6de0055d38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86aa8738e0df54971e34f2e929484e0476c7f38a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a46f670ba62f9ec9167eb080ee8dce8d5ca44164 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6df78b19b7786b15c664a7a1e0bcbb3e7c80f8da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b440827a04ad23efb891eff28d90f172723c75d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06b16115bee85d7dd12a51c7476b0655068a970c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dc2f7358be152d8e87849ad6606461fb2a4dfd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 361854d1782b8f59dc02aa37cfe285df66048ce6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6497d1e843cbaec2b86cd5a284bd95c693e55cc0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a01ec439e19df83a2ff17d198118bd5a31c488b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f48ef3177bbee78940579d86d1db9bb30fb0798d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 794187ffab92f85934bd7fd2a437e3a446273443 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e25da8ffc66fb215590a0545f6ad44a3fd06c918 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd8537b23ce85be6f9dacb7806e791b7f902a206 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5c1cb715664fd7a98160844572cc473cb6b87c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3b9c0242ba2893231e0ab1c13fa2a0c8a9cfc59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26253699f7425c4ee568170b89513fa49de2773c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d6b417ea3a4507ea78714f0cb7add75b13032d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4592785004ad1a4869d650dc35a1e9099245dad9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0900c55a4b6f76e88da90874ba72df5a5fa2e88c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f73468bb9cb9e479a0b81e3766623c32802db579 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0de60abc5eb71eff14faa0169331327141a5e855 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6b1a9272455ef80f01a48ea22efc85b7f976503 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d37049a815b11b594776d34be50e9c0ba8df497 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80cc71edc172b395db8f14beb7add9a61c4cc2b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e50a8e6156360e0727bedff32584735b85551c5b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48c149c16a9bb06591c2eb0be4cca729b7feac3e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06c9c919707ba4116442ca53ac7cf035540981f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ba897b12024fd20681b7c2f1b40bdbbccd5df59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae6e26ed4abac8b5e4e0a893da5546cd165d48e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df65f51de6ba67138a48185ff2e63077f7fe7ce6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31ad0a0e2588819e791f4269a5d7d7e81a67f8cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5095c16894e6f4da814302349e8e32f84c8c13 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657cd7e47571710246375433795ab60520e20434 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58934b8f939d93f170858a829c0a79657b3885e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d4d70844417bf484ca917326393ca31ff0d22bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e866c4a9897572a550f8ec13b53f6665754050cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83ebc659ace06c0e0822183263b2c10fe376a43e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4ad7cee0f8723226446a993d4f1f3b98e42583a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 788bd7e55085cdb57bce1cabf1d68c172c53f935 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4006c4347788a078051dffd6b197bb0f19d50b86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ec4389bc3d1653af301e93fe0a6b25a31da9f3d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5e6676db845e10bdca47c3fcf8dca9dea75ec42 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ff3a3e72b1ff79e75777ccdddc86f8540ce833d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ed3cd7f798057c02799b6046987ed6a2e313126 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 49a9f84461fa907da786e91e1a8c29d38cdb70eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4896fa2ccbd84553392e2a74af450d807e197783 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c6e5adab98a2ea4253fefc4f83598947f4993ee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de894298780fd90c199ef9e3959a957a24084b14 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06571d7f6a260eda9ff7817764f608b731785d6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 451504f1e1aa84fb3de77adb6c554b9eb4a7d0ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f128ae9a37036614c1b5d44e391ba070dd4326d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07a8f73dca7ec7c2aeb6aa47aaf421d8d22423ad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e02afbb7343a7a4e07e3dcf8b845ea2764d927c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 105a8c0fb3fe61b77956c8ebd3216738c78a3dff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5c8ff218cb3ee5d3dd9119007ea8478626f6d2ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27f394a58b7795303926cd2f7463fc7187e1cce4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9bebaca85a19e0ac8a776ee09981f0c826e1cafa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d22c40b942cca16ff9e70d879b669c97599406b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4510b3c42b85305c95c1f39be2b9872be52c2e5e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5739cd466f77a60425bd2860895799f7c9359d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17020d8ac806faf6ffa178587a97625589ba21eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15ee5a505b43741cdb7c79f41ebfa3d881910a6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da86442f6a7bf1263fb5aafdaf904ed2f7db839f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec830a25d39d4eb842ae016095ba257428772294 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0b21f454ea43a5f67bc4905c641d95f8b6d96fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fde89f2a65c2503e5aaf44628e05079504e559a0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7548a5c43f8c39a8143cdfb9003838e586313078 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2219f13eb6e18bdd498b709e074ff9c7e8cb3511 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 543d900e68883740acf3b07026b262176191ab60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6581acaa7081d29dbf9f35c5ce78db78cf822ab8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88716d3be8d9393fcf5695dd23efb9c252d1b09e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25844b80c56890abc79423a7a727a129b2b9db85 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f91ab7bb0dadfd165031f846ae92c9466dceb66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4ace5482efa4ca8769895dc9506d8eccfb0173d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79fdaf349fa8ad3524f67f1ef86c38ecfc317585 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5089d9d6c303b47936a741b7bdf37293ec3a1c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3f24f64a20d1e09917288f67fd21969f4444acd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e836e5cdcc7e3148c388fe8c4a1bab7eeb00cc3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb20477629bf83e66edc721725effa022a4d6170 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff0365e053a6fa51a7f4e266c290c5e5bd309f6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df3dd9797c8afda79dfa99d90aadee6b0d7a093 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29724818764af6b4d30e845d9280947584078aed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce87a2bec5d9920784a255f11687f58bb5002c4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98889c3ec73bf929cdcb44b92653e429b4955652 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ece57af3b69c38f4dcd19e8ccdd07ec38f899b23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5077dac4c7680c925f4c5e792eeb3c296a3b4c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06ea4a0b0d6fcb20a106f9367f446b13df934533 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 902679c47c3d1238833ac9c9fdbc7c0ddbedf509 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5efdad2502098a2bd3af181931dc011501a13904 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 515a6b9ccf87bd1d3f5f2edd229d442706705df5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04ff96ddd0215881f72cc532adc6ff044e77ea3e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9a7dc5fe98e1aa666445bc240055b21ed809824 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b40d4b54e09a546dd9514b63c0cb141c64d80384 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8486f2d2e5c251d0fa891235a692fa8b1a440a89 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1537aabfa3bb32199e321766793c87864f36ee9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0be02e1471c99e5e5e4bd52db1019006d26c349 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bed46300fe5dcb376d43da56bbcd448d73bb2ea0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f4b1618fbf3b9b1ecaa9812efe8ee822c9579b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ef273914de9b8a50dd0dd5308e66de85eb7d44a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6a6a109885856aeff374c058db0f92c95606a0b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27a041e26f1ec2e24e86ba8ea4d86f083574c659 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d66f2b53af0d8194ee952d90f4dc171aa426c545 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7a2d43495eb184b162f8284c157288abd36666a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec35edc0150b72a7187f4d4de121031ad73c2050 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 123302cee773bc2f222526e036a57ba71d8cafa9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7228ca9bf651d9f06395419752139817511aabe1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a8f96cc8a5135a0ece19e600da914dabca7d215 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db44286366a09f1f65986db2a1c8b470fb417068 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00452efe6c748d0e39444dd16d9eb2ed7cc4e64a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bebc4f56f4e9a0bd3e88fcca3d40ece090252e82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2376bd397f084902196a929171c7f7869529bffc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bcc4d55baef64825b4163c6fb8526a2744b4a86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb577c8a1eca8958415b76cde54d454618ac431e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e73c80dd2dd1c82410fb1ee0e44eca6a73d9f052 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5320a6f68ddec847fa7743ff979df8325552ffd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25c95ace1d0b55641b75030568eefbccd245a6e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a15afe217c7c35d9b71b00c8668ae39823d33247 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eedf3c133a9137723f98df5cd407265c24cc2704 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4937fcd0dad3be003b97926e3377b0565237c5b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05c468eaec0be6ed5a1beae9d70f51655dfba770 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc505ddd603b1570c2c1acc224698e1421ca8a6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b22a5e944b2f00dd8e9e6f0c8c690ef2d6204886 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9149c34a8b99052b4e92289c035a3c2d04fb8246 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c9497463b130cce1de1b5d0b6faada330ecdc96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c673ff2d267b927d2f70765da4dc3543323cc7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 819c4ed8b443baee06472680f8d36022cb9c3240 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c883d129066f0aa11d806f123ef0ef1321262367 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2807d494db24d4d113da88a46992a056942bd828 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d0d6c9824bdd5f2cd5f6886991bb5eadca5120d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26b0f3848f06323fdf951da001a03922aa818ac8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d47fc1b67836f911592c8eb1253f3ab70d2d533d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d04aeaa17e628f13d1a590a32ae96bc7d35775b5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcb6e8832a94776d670095935a7da579a111c028 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08938d6cee0dc4b45744702e7d0e7f74f2713807 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 504870e633eeb5fc1bd7c33b8dde0eb62a5b2d12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bbf1a3b801fb4e00c10f631faa87114dcd0462f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d7a40f603412be7e1046b500057b08558d9d250 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4adafc5a99947301ca0ce40511991d6d54c57a41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76e19e4221684f24ef881415ec6ccb6bab6eb8e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccb653d655a7bf150049df079622f67fbfd83a28 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20a338ff049e7febe97411a6dc418a02ec11eefa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 978eb5bd4751acf9d53c8b6626dc3f7832a20ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9debf6b0aafb6f7781ea9d1383c86939a1aacde3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dabd563ed3d9dc02e01fbf3dd301c94c33d6d273 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfaf706d70c3c113b40ce1cbc4d11d73c7500d73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4c6851c55757fb0bc9d77da97d7db9e7ae232d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c877794b51f43b5fb2338bda478228883288bcdd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2971489fec32160836519e66ca6b97987c33d0c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ceae5e9f6bf753163f81af02640e5a479d2a55c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f4d5ce5f9459e4c7fe4fab95df1a1e4c9be61ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e9481b4ddd70cf44ad041fba771ca5c02b84cf7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f4af7c6db25c5bbec7fdc8dfc0ea6803350d94c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcca77ad97d1dfb657e88519ce8772c5cd189743 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 121f6af3a75e4f48acf31b1af2386cdd5bf91e00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55db0fcce5ec5a92d2bdba8702bdfee9a8bca93d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2f6fef3c887719a250c78c22cba723b2200df1b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ad3931357e5bb01941b50482b4b53934c0b715e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41556dac4ca83477620305273a166e7d5d9f7199 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbc07b421172da4ef3153753709271a71af6966a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84869674124aa5da988188675c1336697c5bcf81 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8775f9b8e40b18352399445dba99dd1d805e8c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b10d5e75570ac6325d1c7e2b32882112330359a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b145de39700001d91662404221609b86d2c659d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b854878fb9df8d1a06c4e97bff5e164957b3a0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3fe8f5df5794015014c53e3adbf53acdb632a8a0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b295c13140f48e6a7125b4e4baf0a0ca03e1e393 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f1110bd9b00cb8c1ea07c3aafe9cde89b3dbf9b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0de827a0e63850517aa93c576c25a37104954dba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d82a6c5ed9108be5802a03c38f728a07da57438e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1a59764096cef4048507cb50f0303f48b87a242 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0900a51f986f3ed736d9556b3296d37933018196 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a929ab29016e91d661274fc3363468eb4a19b4b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ed8939d6167571fc2b141d34f26694a79902fde2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb5e177e5d7931e30b198b06b21809ef6a78b92 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec401e4807165485a4b7a2dad4f74e373ced35ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e58e6a0d78f5298252b2d6c4b0431427ec6d152 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51f79ffeb829315c33ce273ae69baf0fdd1fbd1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84fcf8e90fd41f93d77dd00bf1bc2ffc647340f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 074842accb51b2a0c2c1193018d9f374ac5e948f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f8d9ca08352a28cba3b01e4340a24edc33e13e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8590424997ab1d578c777fe44bf7e4173036f93 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6eb3af27464ffba83e3478b0a0c8b1f9ff190889 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d768f67bd49f28fd2e626f3a8c12bd28ae5ce48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8b837923d506e265ff8bb79af61c0d86e7d5b2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8f7e3772f68c8e6350b9ff5ac981ba3223f2d43 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 039e265819cc6e5241907f1be30d2510bfa5ca6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0acb2229e1ebb59ab343e266fc5c1cc392a974e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2e4134963c971e3259137b84237d6c47964b018 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ab12b403207bb46199f46d5aaa72d3e82a3080d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8324c4b38cf37af416833d36696577d8d35dce7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c58887a2d8554d171a7c76b03bfa919c72e918e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b307f04218e87b814fb57bd9882374a9f2b52922 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c96f5885e1ec1e24b0f8442610de42bd8e168d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11b3a1dfc2eb03094c4c437162ce504722fa7ddf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1883eb9282468b3487d24f143b219b7979d86223 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f360ecd7b2de173106c08238ec60db38ec03ee9b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1d33021feb7324e0f2f91c947468bf282f036d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c8a33e2c9cae8deef1770a5fce85acb2e85b5c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c272abea2c837e4725c37f5c0467f83f3700cd5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af44258fa472a14ff25b4715f1ab934d177bf1fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b21e2f1c0fdef32e7c6329e2bc1b4ce2a7041a2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58c78e649cbac271dee187b055335c876fcb1937 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3d33c113b1dfa4be7e3c9924fae029c178505c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ee9751d4e9e9526dbe810b280a4b95a43105ec9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5e4334f38dce4cf02db5f11a6e5844f3a7c785c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bbf04348b0c79be2103fd3aaa746685578eb12fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9db24bc7a617cf93321bb60de6af2a20efd6afc1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86ec7573a87cd8136d7d497b99594f29e17406d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 02cb16916851336fcf2778d66a6d54ee15d086d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5a9bbef0d2d8fc5877dab55879464a13955a341 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 369e564174bfdd592d64a027bebc3f3f41ee8f11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36dbe7e9b55a09c68ba179bcf2c3d3e1b7898ef3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d0f693184884ffac97908397b074e208c63742b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 040108747e2f868c61f870799a78850b792ddd0a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 300831066507bf8b729a36a074b5c8dbc739128f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bea9077e8356b103289ba481a48d27e92c63ae7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 195ecc3da4a851734a853af6d739c21b44e0d7f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2efb814d0c3720f018f01329e43d9afa11ddf54 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfc70fe92d42a853d4171943bde90d86061e3f3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8724dfa6bf8f6de9c36d10b9b52ab8a1ea30c3b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 640d1506e7f259d675976e7fffcbc854d41d4246 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a771adc5352dd3876dd2ef3d0c52c8e803fc084 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 982eefb2008826604d54c1a6622c12240efb0961 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 152a60f0bd7c5b495a3ce91d0e45393879ec0477 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e15b57bf0bb40ccc6ecbebc5b008f7e96b436f19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 539980d51c159cb9922d0631a2994835b4243808 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14851034ab5204ddb7329eb34bb0964d3f206f2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 32e4e08cf9ccfa90f0bc6d26f0c7007aeafcffeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1199f90c523f170c377bf7a5ca04c2ccaab67e08 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83017bce083c58f9a6fb0c7b13db8eeec6859493 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c594195eb614a200e1abb85706ec7b8b7c91268 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96928d2eb3d98c475fd0737240c06bf8e5f96ad6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9a2ea80aa9970bbd625da4c986d29a36c405629 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e39c8b07d1c98ddf267fbc69649ecbbe043de0fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fe80b03196b1d2421109fad5b456ba7ae4393e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c6d952b17e63c92a060c08eac38165c6fafa869 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e129846a1a5344c8d7c0abe5ec52136c3a581cce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae334e4d145f6787fd08e346a925bbc09e870341 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b0448b65317b2830270ff4156a25aca7941472 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f662857381a0384bd03d72d6132e0b23f52deef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3470e269bcdc9091d0c5e25e7c09ce175c7cee77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 545ac2574cfb75b02e407e814e10f76bc485926d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8bf7d416f60f52335d128cf16fbba0344702e49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a08733d76a8254a20a28f4c3875a173dcf0ad129 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c2dd54358dd526d1d08a8e4a977f041aff74174 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9f8f159ebad405b2c08aa75f735146bb8e216ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 723f100a422577235e06dc024a73285710770fca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98f6995bdcbd10ea0387d0c55cb6351b81a857fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f043d8a1d7f4076350ff0c778bfa60f7aa2f7aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab7c3223076306ca71f692ed5979199863cf45a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fd07a0a7a6300db1db8b300a3f567b31b335570 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54e27f7bbb412408bbf0d2735b07d57193869ea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c27cd907f67f984649ff459dacf3ba105e90ebc2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be81304f2f8aa4a611ba9c46fbb351870aa0ce29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88f3dc2eb94e9e5ff8567be837baf0b90b354f35 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5e607e8aa62ca3778f1026c27a927ee5c79749b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 630d030058c234e50d87196b624adc2049834472 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d1a489931ecbdd652111669c0bd86bcd6f5abbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3236f8b966061b23ba063f3f7e1652764fee968f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0acb8371bb2b68c2bda04db7cb2746ba3f9da86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfcdf2bef08f17b4726b67f06c84be3bfe2c39b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2feb62c17acd1dddb6cd125d8b90933c32f89e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38fc944390d57399d393dc34b4d1c5c81241fb87 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d74543a545a9468cabec5d20519db025952efed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 346424daaaf2bb3936b5f4c2891101763dc2bdc0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f5320e8171324a002d3769824152cf5166a21a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ac93b1d7e0694ceb303ee72c312921a9b1588f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f51fe3e66d358e997f4af4e91a894a635f7cb601 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28d6c90782926412ba76838e7a81e60b41083290 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae0b6fe15e0b89de004d4db40c4ce35e5e2d4536 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8bbfea4cdcb36ce0e9ee7d7cad4c41096d4d54f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91562247e0d11d28b4bc6d85ba50b7af2bd7224b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91645aa87e79e54a56efb8686eb4ab6c8ba67087 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47d9f1321c3a6da68a7909fcb1a66a209066d4c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f498de9bfd67bcbb42d36dfb8ff9e59ec788825b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4df4159413a4bf30a891f21cd69202e8746c8fea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d91ca75500285d19c6ae2d4bf018452ad822a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ffefb154982c6cc47c9be6b3eae6fb1170bb0791 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66c5b33fb5405fe12756f07048e3bcc3a958b2c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ddbe4bc24e634e6496abd3bc6ce3c4377cdf2fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ad07f7b23e762e3eb99ce45020375d2bd743fc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ce3fe7cef8910aadc2a2b39a3dab4242a751380 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f038611ff120f8283f0f1a56962f95b66730c72 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98a17a28a21fe5f06dd2da561839fdbaa1912c64 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2a9b2f22c6fb5bd3e30e674874dbc8aa7e5b00ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34c0831453355e09222ccc6665782d7070f5ddab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 261aedd2e13308755894405c7a76b72373dab879 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1287f69b42fa7d6b9d65abfef80899b22edfef55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d565a874f29701531ce1fc0779592838040d3edf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4d3809161fc54d6913c0c2c7f6a7b51eebe223f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e48e52001d5abad7b28a4ecadde63c78c3946339 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c6c81b3281333a5a1152f667c187c9dce12944 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47ac37be2e0e14e958ad24dc8cba1fa4b7f78700 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb0f3d78d6980a1d43f05cb17a8da57a196a34f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4921139819c7949abaad6cc5679232a0fbb0632 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80701fc6f4bf74d3c6176d76563894ff0f3b32bb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9fbae711b76a4f2fa9345f43da6d2cdedd75d6c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea29541e213df928d356b3c12d4d074001395d3c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e395ac90bf088ad6b5de7dadb6531a6e7f3f4f3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 048ffa58468521c043de567f620003457b8b3dbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df95149198744c258ed6856044ac5e79e6b81404 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5054fdb1766cb035a1186c3cef4a14472fee98d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aaa84341f876927b545abdc674c811d60af00561 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20863cfe4a1b0c5bea18677470a969073570e41c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a223c7b7730c53c3fa1e4c019bd3daefbb8fd74b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4ce247c0380e3806e47b5b3e2b66c29c3ab2680 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c15a6e1923a14bc760851913858a3942a4193cdb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2b59625e9bde14b1d2d476e678326886ab1552 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7b16ade191bb753ebadb45efe6be7386f67351d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67680a0877f01177dc827beb49c83a9174cdb736 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 503b62bd76ee742bd18a1803dac76266fa8901bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a9a5414300a245b6e93ea4f39fbca792c3ec753f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26fc5866f6ed994f3b9d859a3255b10d04ee653d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 508807e59ce9d6c3574d314d502e82238e3e606c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b259098782c2248f6160d2b36d42672d6925023a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27c31e2fde54c0587c032ccffdaa7c4ddf5b2ae5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a41a8b93167a59cd074eb3175490cd61c45b6f6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6569c4849197c9475d85d05205c55e9ef28950c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53e5fb3733e491925a01e9da6243e93c2e4214c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa1b156ee96f5aabdca153c152ec6e3215fdf16f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619c989915b568e4737951fafcbae14cd06d6ea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be074c655ad53927541fc6443eed8b0c2550e415 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e973e6f829de5dd1c09d0db39d232230e7eb01d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d39529eea4d0ecfcd65a2d245284174cd2e0aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8eae18dcc360e6ab96c2291982bd4306adc01b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7671110bc865786ffe61cf9b92bf43c03759229 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ede325d15ba9cba0e7fe9ee693085fd5db966629 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43e430d7fa5298f6db6b1649c1a77c208bacf2fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfb0a9c4bca590efaa86f8edc3fdb62bd536bce7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acd82464a11f3c2d3edc1d152d028a142da31a9f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e84300df7deed9abf248f79526a5b41fd2f7f76e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 597bc56a32e1b709eefa4e573f11387d04629f0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- becf5efbfc4aee2677e29e1c8cbd756571cb649d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e8aa9b0aefc30ee5807c2b2cf433a38555b7e0b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c6ab4f7572fd5ca8638f3cb6e342d5000955e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfce49feb0be6c69f7fffc57ebdd22b6da241278 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b825dc74773ffa5c7a45b48d72616b222ad2023e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0cb95c5df7a559633c48f5b0f200599c4a62091 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c767b5206f1e9c8536110dda4d515ebb9242bbeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85a5a8c6a931f8b3a220ed61750d1f9758d0810a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18caa610d50b92331485013584f5373804dd0416 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d9f1495004710b77767393a29f33df76d7b0fb5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17f5d13a7a741dcbb2a30e147bdafe929cff4697 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1531d789df97dbf1ed3f5b0340bbf39918d9fe48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d52f98935b70cda4eede4d52cdad4e3b886f639 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 723d20f1156530b122e9785f5efc6ebf2b838fe0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b08651e5ae2bffef5e4fb44fbdd7d467715e3b73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc94b89dabd9df49631cbf6b18800325f3521864 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e40ad6369bc74d01af4dc41d3a9b8e25ac2aa01e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46889d1dce4506813206a8004f6c3e514f22b679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de4cfcc4a1fcb24b72a31c5feff8c67d2ff930fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 987f9bbd08446de3f9d135659f2e36ad6c9d14fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27b4efed7a435153f18598796473b3fba06c513d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7b7eb6245e7d7c4535975268a9be936e2c59dc8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7887c66483ffa9a839ecf1a53c5ef718dcd1d2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36cdfd3209909163549850709d7f12fdf1316434 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4a49ff2dddc66bbe25af554caba2351fbf21702 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45eb728554953fafcee2aab0f76ca65e005326b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d83f6e84cbeb45dce4576a9a4591446afefa50b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4b8e467e44bc1ca1ebf481ac2dfc1baaf9688dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3efacd7aea48c93e0a42c1e83bf3c96e9e50f178 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d437078d8f95cb98f905162b2b06d04545806c59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fce04b7e4e6e1377aa7f07da985bb68671d36ba4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6e4a6416162a698d87ba15693f2e7434beac644 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1bfb44c62d15a45ca4d47b4cc482ebddb8d0ae4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a182be6716d24fb49cb4517898b67ffcdfb5bca4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b18fd3fd13d0a1de0c3067292796e011f0f01a05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d0ad081ca0e723ba2a12c876b4cd1574485c726 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c824bcd73de8a7035f7e55ab3375ee0b6ab28c46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5c12ff49fc91e66f30c5dc878f5d764d08479558 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56e942318f3c493c8dcd4759f806034331ebeda5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d46e3fe9cb0dea2617cd9231d29bf6919b0f1e91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3936084cdd336ce7db7d693950e345eeceab93a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1de8af907dbced4fde64ee2c7f57527fc43ad1cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f55c17f48d7608072199496fbcefa33f2e97bf0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b9d3b961bdf79964b883d3179f085d8835e528d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c80d727e374321573bb00e23876a67c77ff466e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 965a08c3f9f2fbd62691d533425c699c943cb865 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acac4bb07af3f168e10eee392a74a06e124d1cdd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c255c14e9eb15f4ff29a4baead3ed31a9943e04e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79d9c4cb175792e80950fdd363a43944fb16a441 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4228b2cc8e1c9bd080fe48db98a46c21305e1464 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8535d1a2485b4e063ab9ef0a2719a1aab8187d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3e8ce69bec72277354eff252064a59f515d718a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17f245cad19bf77a5a5fecdee6a41217cc128a73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db828cdfef651dd25867382d9dc5ac4c4f7f1de3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2840c626d2eb712055ccb5dcbad25d040f17ce1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 342a0276dbf11366ae91ce28dcceddc332c97eaf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863a40e0d35f3ff3c3e4b5dc9ff1272e1b1783b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de9a6bb0c8931e7f74ea35edb372e5ca7d0a5047 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6becbaf35fa2f807837284d33649ba5376b3fe21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9d884511ed2c8e9ca96de04df835aaa6eb973eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e1e19d33e1caa107dc0a6cc8c1bfe24d8153f51 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 891b124f5cc6bfd242b217759f362878b596f6e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 750e9677b1ce303fa913c3e0754c3884d6517626 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8511513540ece43ac8134f3d28380b96db881526 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a72a7a43ae004f1ae1be392d4322c07b25deff5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 616ae503462ea93326fa459034f517a4dd0cc1d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f54c8919f297a5e5c34517d9fed0666c9d8aa10 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1234a1077f24ca0e2f1a9b4d27731482a7ed752b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d9b7b09a7c66e19a608d76282eacc769e349150 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d48ed95cc7bd2ad0ac36593bb2440f24f675eb59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fc9e6150957ff5e011142ec5e9f8522168602ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 123cb67ea60d2ae2fb32b9b60ebfe69e43541662 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2baadf3aabe526bdaa5dfdf27fac0a1c63aa04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b6080369e7ee47b7d746685d264358c91d656bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da09f02e67cb18e2c5312b9a36d2891b80cd9dcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2af98929bd185cf1b4316391078240f337877f66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a40d848794133de7b6e028f2513c939d823767cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9eb902eee03806db5868fc84afb23aa28802e841 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 322db077a693a513e79577a0adf94c97fc2be347 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4d8fb73daa82420bdc69c37f0d58f7cb4cd505a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7aba59a2609ec768d5d495dafd23a4bce8179741 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c39afa1f85f3293ad2ccef684ff62bf0a36e73c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15c4a95ada66977c8cf80767bf1c72a45eb576b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0441fdcbc4ea1ab8ce5455f2352436712f1b30bb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3287148a2f99fa66028434ce971b0200271437e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 598cd1d7f452e05bfcda98ce9e3c392cf554fe75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fbd096841ddcd532e0af15eb1f42c5cd001f9d74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d38b9a916ab5bce9e5f622777edbc76bef617e93 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f09906d27affb8d08a96c07fc3386ef261f97af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1ad78eb7494513f6c53f0226fe3cb7df4e67513 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5452aa820c0f5c2454642587ff6a3bd6d96eaa1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3e5d9cda8eae5b0f19ac25efada6d0b3b9e04e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c5b87bcdd70810a20308384b0e3d1665f6d2922 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ea3dbdf67af10ccc6ad22fb3294bbd790a3698f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9044abce7e7b3d8164fe7b83e5a21f676471b796 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f3989f27e91119bb29cc1ed93751c3148762695 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 678821a036c04dfbe331d238a7fe0223e8524901 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6404168e6f990462c32dbe5c7ac1ec186f88c648 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27c577dfd5c7f0fc75cd10ed6606674b56b405bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5244f7751c10865df94980817cfbe99b7933d4d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c544101eed30d5656746080204f53a2563b3d535 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29d94c622a7f6f696d899e5bb3484c925b5d4441 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ae512e69f37e37431239c8da6ffa48c75684f87 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a0ad305883201b6b3e68494fc70089180389f6e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bc91d7495d7eb70a70c1f025137718f41486cd2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f24786fca46b054789d388975614097ae71c252e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13e3a809554706905418a48b72e09e2eba81af2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9b915b066f28f4ac7382b855a8af11329e3400d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 64a4730ea1f9d7b69a1ba09b32c2aad0377bc10a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ffde74dd7b5cbc4c018f0d608049be8eccc5101 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11e0a94f5e7ed5f824427d615199228a757471fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6192ad1aed30adc023621089fdf845aa528dde9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b9b6fe0dd99803c80a3a3c52f003614ad3e0adf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc93c4f3ddade455cc4f55bc93167b1d2aeddc4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f225d4b8c3d7eb90038c246a289a18c7b655da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e91a05aabb73cca7acec1cc0e07d8a562e31b45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 673b21e1be26b89c9a4e8be35d521e0a43a9bfa1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 811a6514571a94ed2e2704fb3a398218c739c9e9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6a2942a982c2541a6b6f7c67aa7dbf57ed060ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a02e432530336f3e0db8807847b6947b4d9908d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56d5d0c70cf3a914286fe016030c9edec25c3ae0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b820e617ab21b372394bf12129c30174f57c5d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da5e58a47d3da8de1f58da4e871e15cc8272d0e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2b9ac30337761fa0df74ce6e0347c5aabd7c072 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90811b1bd194e4864f443ae714716327ba7596c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7c4b323bb2d3960430b11134ee59438e16d254e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5cbe7d7de5a29c7e714214695df1948319408d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e3883a0691ce1957996c5b37d7440ab925c731e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6d544f67a1f3572781271b5f3030d97e6c6d9e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0e9eef45194039af6b8c22edf06cfd7cb106727a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7dcb07947cd71f47b5e2e5f101d289e263506ca9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ddf05a78475a194ed1aa082d26b3d27ecc77475 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9bd04844725661c8aa2aef11091f01eeab69486 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85b836b1efb8a491230e918f7b81da3dc2a232c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5127e167328c7da2593fea98a27b27bb0acece68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c437ee5deb8d00cf02f03720693e4c802e99f390 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e4a44b302d3a3e49aa014062b42de84480a8d4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b6f38d02c8ed1fb07eb6782b918f31efc4c42f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59587d81412ca9da1fd06427efd864174d76c1c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48fab54afab49f18c260463a79b90d594c7a5833 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a8bdce7a665a0b38fc822b7f05a8c2e80ccd781 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8828ced5818d793879ae509e144fdad23465d684 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5a75ab7533de99a4f569b05535061581cb07a41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7071ce13476cae789377c280aa274e6242fd756 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcc166d3a6e235933e823e82e1fcf6160a32a5d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3b7263e0bb9cc1d94e483e66c1494e0e7982fd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59879a4e1e2c39e41fa552d8ac0d547c62936897 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0524096fa9f3add551abbf68ee22904b249d82f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36a984803df08b0f6eb5f8a73254dd64bc616b67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfe3ba3e5c08ee88afe89cc331081bbfbf5520e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e583a9e22a7a0535f2c591579873e31c21bccae0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e11f12adffec6bf03ea1faae6c570beaceaffc86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b3b65287e6849628066d5b9d08ec40c260a94dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3061698403f0055d1d63be6ab3fbb43bd954e8e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35bceb16480b21c13a949eadff2aca0e2e5483fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7fa5ef735754e640bd6be6c0a77088009058d74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a98e0af511b728030c12bf8633b077866bb74e47 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c7ac239a2c9e303233e58daee02101cc4ebf3d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb7fd3f0dd99dc6c49da6fd7e78a392c4ef1b33 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 031271e890327f631068571a3f79235a35a4f73e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4b50e7348815402634b6b559b48191dba00a751 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 460cafb81f86361536077b3b6432237c6ae3d698 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6720e8df09a314c3e4ce20796df469838379480d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ab169407354d4b9512447cd9c90e8a31263c275 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56488ced0fae2729b1e9c72447b005efdcd4fea7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 294ee691d0fdac46d31550c7f1751d09cfb5a0f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87ae42528362d258a218b3818097fd2a4e1d6acf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f631214261a7769c8e6956a51f3d04ebc8ce8efd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 468cad66ff1f80ddaeee4123c24e4d53a032c00d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1053448ad885c633af9805a750d6187d19efaa6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90b20e5cd9ba8b679a488efedb1eb1983e848acf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fbb7027ec88e2e4fe7754f22a27afe36813224b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8ce24a835cae8c623e2936bec2618a8855c605b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65747a216c67c3101c6ae2edaa8119d786b793cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d0f24c9facb5be0c98c8859a5ce3c6b0d08504ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf1d5bd4208514bab3e6ee523a70dff8176c8c80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3175b5b21194bcc8f4448abe0a03a98d3a4a1360 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fca367548e365f93c58c47dea45507025269f59a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48a17c87c15b2fa7ce2e84afa09484f354d57a39 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b813371f5a8af95152cae109d28c7c97bfaf79f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d6310db456de9952453361c860c3ae61b8674ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 685760ab33b8f9d7455b18a9ecb8c4c5b3315d66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22a88a7ec38e29827264f558f0c1691b99102e23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 517ae56f517f5e7253f878dd1dc3c7c49f53df1a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c72b9a3eaabbe927ba77d4f69a62f35fbe60e2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e0e315a371cdfc80993a1532f938d56ed7acee4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8d0aa1ef19e2c3babee458bd4504820f415148e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8867348ca772cdce7434e76eed141f035b63e928 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b00ad00130389f5b00da9dbfd89c3e02319d2999 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ab454f0ccf09773a4f51045329a69fd73559414 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7dd618655c96ff32b5c30e41a5406c512bcbb65f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45c0f285a6d9d9214f8167742d12af2855f527fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1545bd9cd6953c5b39c488bf7fe179676060499 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1d1d2cb421f16bd277d7c4ce88398ff0f5afb29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bd7fb976ab0607592875b5697dc76c117a18dc73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d5bfb5d6d22f8fe8c940f36e1fbe16738965d5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b6b9510e0724bfcb4250f703ddf99d1e4020bbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0b92e40ece170b59bced0cea752904823e06e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 97ab197140b16027975c7465a5e8786e6cc8fea1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8858a63cb33319f3e739edcbfafdae3ec0fefa33 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94029ce1420ced83c3e5dcd181a2280b26574bc9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13647590f96fb5a22cb60f12c5a70e00065a7f3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 741dfaadf732d4a2a897250c006d5ef3d3cd9f3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4d5caa79e6d88bb3f98bfbefa3bfa039c7e157a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 394ed7006ee5dc8bddfd132b64001d5dfc0ffdd3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 192472f9673b18c91ce618e64e935f91769c50e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89422841e46efa99bda49acfbe33ee1ca5122845 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d9310055f364cf3fa97f663287c596920d6e7e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 694265664422abab56e059b5d1c3b9cc05581074 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbb58869063fe803d232f099888fe9c23510de7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33819a21f419453bc2b4ca45b640b9a59361ed2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17a172920fde8c6688c8a1a39f258629b8b73757 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24740f22c59c3bcafa7b2c1f2ec997e4e14f3615 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bcd37b68533d0cceb7e73dd1ed1428fa09f7dc17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55b67e8194b8b4d9e73e27feadbf9af6593e4600 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de3b9639a4c2933ebb0f11ad288514cda83c54fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 258403da9c2a087b10082d26466528fce3de38d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08457a7a6b6ad4f518fad0d5bca094a2b5b38fbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3288a244428751208394d8137437878277ceb71f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b425301ad16f265157abdaf47f7af1c1ea879068 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca288d443f4fc9d790eecb6e1cdf82b6cdd8dc0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4287f65878000b42d11704692f9ea3734014b4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f683c6623f73252645bb2819673046c9d397c567 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd96cceded27d1372bdc1a851448d2d8613f60f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6917ae4ce9eaa0f5ea91592988c1ea830626ac3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1401803ccf7db5d897a5ef4b27e2176627c430e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8d2239f24f6a54d98201413d4f46256df0d6a5f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58fb1187b7b8f1e62d3930bdba9be5aba47a52c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 402a6c2808db4333217aa300d0312836fd7923bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- feb1ea0f4aacb9ea6dc4133900e65bf34c0ee02d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55dcc17c331f580b3beeb4d5decf64d3baf94f2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 129f90aa8d83d9b250c87b0ba790605c4a2bb06a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57050184f3d962bf91511271af59ee20f3686c3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 778234d544b3f58dd415aaf10679d15b01a5281f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91725f0fc59aa05ef68ab96e9b29009ce84668a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0fdf6c3aaff49494c47aaeb0caa04b3016e10a26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac62760c52abf28d1fd863f0c0dd48bc4a23d223 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f164627a85ed7b816759871a76db258515b85678 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b82dbf538ac0d03968a0f5b7e2318891abefafaa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e837b901dcfac82e864f806c80f4a9cbfdb9c9f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d2307532d679393ae067326e4b6fa1a2ba5cc06 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06590aee389f4466e02407f39af1674366a74705 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9dbf201b4f0b3c2b299464618cb4ecb624d272c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38b3cfb9b24a108e0720f7a3f8d6355f7e0bb1a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9240918aa03e49feabe43af619019805ac76786 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe5289ed8311fecf39913ce3ae86b1011eafe5f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28ed48c93f4cc8b6dd23c951363e5bd4e6880992 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c1faef799095f3990e9970bc2cb10aa0221cf9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86ea63504f3e8a74cfb1d533be9d9602d2d17e27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f91495e271597034226f1b9651345091083172c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c1169f6ea406fec1e26e99821e18e66437e65eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a243827ab3346e188e99db2f9fc1f916941c9b1a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fbb69306c0e14bacb8dcb92a89af27d3d5d631f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25dca42bac17d511b7e2ebdd9d1d679e7626db5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e79999c956e2260c37449139080d351db4aa3627 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d9b1f4f9fa8c9f030e3207e7deacc5d5f8bba4e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ee2afb00afaf77c883501eac8cd614c8229a444 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecf37a1b4c2f70f1fc62a6852f40178bf08b9859 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de84cbdd0f9ef97fcd3477b31b040c57192e28d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17af1f64d5f1e62d40e11b75b1dd48e843748b49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1019d4cf68d1acdbb4d6c1abb7e71ac9c0f581af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 600fcbc1a2d723f8d51e5f5ab6d9e4c389010e1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8caeec1b15645fa53ec5ddc6e990e7030ffb7c5a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de5bc8f7076c5736ef1efa57345564fbc563bd19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c083f3d0b853e723d0d4b00ff2f1ec5f65f05cba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 837c32ba7ff2a3aa566a3b8e1330e3db0b4841d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63761f4cb6f3017c6076ecd826ed0addcfb03061 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e41c727be8dbf8f663e67624b109d9f8b135a4ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 143b927307d46ccb8f1cc095739e9625c03c82ff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22a0289972b365b7912340501b52ca3dd98be289 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d6ceabf5b90e7c0690360fc30774d36644f563c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b75c3103a700ac65b6cd18f66e2d0a07cfc09797 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69361d96a59381fde0ac34d19df2d4aff05fb9a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b8902e033430000481eb355733cd7065342037 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 501bf602abea7d21c3dbb409b435976e92033145 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 997b7611dc5ec41d0e3860e237b530f387f3524a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72bcdbd0a0c8cc6aa2a7433169aa49c7fc19b55b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4956c1e618bfcfeef86c6ea90c22dd04ca81b9db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bfdf93201ea413affd4c8fbe406ea2b4a7c1b6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e14ab55a060a5637e9a4a40e40714c1f441d952 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4375386fb9d8c7bc0f952818e14fb04b930cc87d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f96ee7463e2454e95bf0d77ca4fe5107d3f24d68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76fd1d4119246e2958c571d1f64c5beb88a70bd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 180a5029bc3a2f0c1023c2c63b552766dc524c41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a803803f40163c20594f12a5a0a536598daec458 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bb2fc8129ed9adabec6a605bfe73605862b20d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15ee0ac0d56a5fb5ba13fae4288621ddd2185f17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 400d728c99ddeae73c608e244bd301248b5467fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77cde0043ceb605ed2b1beeba84d05d0fbf536c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d86e77edd500f09e3e19017c974b525643fbd539 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b3feddd1269a0b0976f4eef2093cb0dbf258f99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dcf2c3bd2aaf76e2b6e0cc92f838688712ebda6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a38a0053d31d0285dd1e6ebe6efc28726a9656cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 697702e72c4b148e987b873e6094da081beeb7cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b1a2271a03313b561f5b786757feaded3d41b23f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc66da0d66a9024f0bd86ada1c3cd4451acd8907 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16a0c64dd5e69ed794ea741bc447f6a1a2bc98e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54844a90b97fd7854e53a9aec85bf60564362a02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a97d21936200f1221d8ddd89202042faed1b9bcb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35057c56ce118e4cbd0584bd4690e765317b4c38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a417f4cf2df39704aa4c869e88d14e9806894a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c76a8c5499d22b9c0b4c56f03b671033eb9f9bdd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3326f34712f6a96c162033c7ccf370c8b7bc1ead ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6102b349cbef03667d5715fcfae3161701a472d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4133f51817145e99b896c7063584d4dd18ad59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e29a91324ca7086b948a9e3a4dbcbb2254a24a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4ed59a86909b142ede105dd9262915c0e2993ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e729429631c84c3bd5602edcab3e7c2ab1dcce0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12276fedec49c855401262f0929f088ebf33d2cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d00fa4f6cad398250ce868cef34357b45abaad3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c05ef0e7543c2845fd431420509476537fefe2b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1eae9d1532e037a4eb08aaee79ff3233d2737f31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bae67b87039b3364bdc22b8ef0b75dd18261814c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 615de50240aa34ec9439f81de8736fd3279d476d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f22ddca351c45edab9f71359765e34ae16205fa1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bac518bfa621a6d07e3e4d9f9b481863a98db293 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f7255c2c1d9e54fc2f6390ad3e0be504e4099d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8775b6417b95865349a59835c673a88a541f3e13 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ba46b8fba511fdc9b8890c36a6d941d9f2798fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2740d2cf960cec75e0527741da998bf3c28a1a45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1391bf06a839746bd902dd7cba2c63d1e738d37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f28a2041f707986b65dbcdb4bb363bb39e4b3f77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- accfe361443b3cdb8ea43ca0ccb8fbb2fa202e12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ef66a66dc52dcdf44cebe435de80634e1beb268 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa98250e1dd7f296b36e0e541d3777a3256d676c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d638bf6e55bc64c230999c9e42ed1b02505d0ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aaeb986f3a09c1353bdf50ab23cca8c53c397831 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c92df685d6c600a0a3324dff08a4d00d829a4f5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e40b5f075bdb9d6c2992a0a1cf05f7f6f4f101a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5f92b17729e255ca01ffb4ed215d132e05ba4da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 279d162f54b5156c442c878dee2450f8137d0fe3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1194dc4322e15a816bfa7731a9487f67ba1a02aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6c8072daa942e9850b9d7a78bd2a9851c48cd2c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f73385a5f62a211c19d90d3a7c06dcd693b3652d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 202216e2cdb50d0e704682c5f732dfb7c221fbbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dd7d6468a54be56039b2e3a50bcf171d8e854ff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5020eb8ef37571154dd7eff63486f39fc76fea7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3bee808e15707d849c00e8cea8106e41dd96d771 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 331ddc27a22bde33542f8c1a00b6b56da32e5033 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0dcc6fb3dfd39df5970d6da340a949902ae629 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f6c32a918544aa239a6c636666ce17752e02f15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84f9b603b44e0225391f1495034e0a66514c7368 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84be1263abac102d8b4bc49096530c6fd45a9b80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59b05d06c1babcc8cd1c541716ca25452056020a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f4bc8ee9aeeec8bf7aa31c627e50761dd8bb2db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d884adc80c80300b4cc05321494713904ef1df2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05d2687afcc78cd192714ee3d71fdf36a37d110f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6226720b0e6a5f7cb9223fc50363def487831315 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0e84a3401c84507dc017d6e4f57a9dfdb31de53 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6da04adff0b96c5163b0c2530028b72be2fd26fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dc5d68491eb3c73ae8478bf6edef80b18564a13 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5915114cdca6f09fa2355162a43596f5d20273be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13ba1d87ab8fc45d2aed25662bf91053b0db5f9f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 75c161cbc017a7d176dd0d7b937db26b3ce637a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53ed0d43ab950d4deeefd238c7685dabef943800 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be53c1f33107d6891c47c784aeadd6e5ddf78e8c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b93f2a91e0791be3ffda1f753aa6c377bcab4d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac36642ce1cde75b222e20f585ddfd240f064da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa44e6b579917814740393efc0b990e0fbbbdaf3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 386d1af07bf1f32fac5e97612441488894f2ffed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c39f9da792792d4e73fc3a5effde66576ae128c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a4b1d4d11eee3c5362a4152216376e634bd14cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c76852d0bff115720af3f27acdb084c59361e5f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bcd57e349c08bd7f076f8d6d2f39b702015358c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ca61d4c68dad68901f8a7364dd210ef27a8b4c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f23379c496942ea6fe898a7a823b65530c126a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4582f805156095604fe07e71195cd9aa43d7a34 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79cfe05054de8a31758eb3de74532ed422c8da27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b65df78a10c3bcc40d18f3e926bb5a49821acc31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ffd4b0193acf86b6a6e179f8673ed38bad3191d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b43ca7ff72d5f535134241e7c797ddc9c7a3573 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ba8b8b91907bd087dfe201eb0d5dae2feb54881 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e062f4d043234312446ea9445f07bd9dc309ce3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c486b2e699082763075a169c56a4b01f99fc4b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5da34fddda2ea6de19ecf04efd75e323c4bb41e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 753e908dcea03cf9962cf45d3965cf93b0d30d94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e14356d12226cb140b0e070bd079468b4ab599b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5bb812243dd1815651281a54c8191fc8e2bc2d82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5117c9c8a4d3af19a9958677e45cda9269de1541 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1083748b828dfca6a72014434850da0f2a0579ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11ec2e08e1796b5914cd9c4830813482753ecfa0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3942cdff6254d59100db2ff6a3c4460c1d6dbefe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc1fcf372878240e0a1af20641d361f14aea7252 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b00f3689aa19938c10576580fbfc9243d9f3866c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5de63b40dbb8fef7f2f46e42732081ef6d0d8866 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ec61d4f7208a2713adeafb947f65fdae0947067 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb8cec3cab142ef4f2773b6fc9d224461a6bf85d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5613079f2494808f048b81815bf708debf7339d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3131d1a5295508f583ae22788a1065144bec3cee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1adc79ac67e5eabaa8b8509150c59bc5bd3fd4e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c231551328faa864848bde6ff8127f59c9566e90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df638c22c75ddc9a43ecdde90c0c9939f5009e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6604a00a652e754cb8b6b0b9f194f839fc38d7c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf37099ea8d1d8c7fbf9b6d12d7ec0249d3acb8b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfdc8e26d36833b3a7106c306fdbe6d38dec817e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d6332820eaad3a6d3b0abc93424469a8ef7083a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4e56f627f94d93c49db40ae5944f880341f4203 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14cef2bb3e0de02f306fa37c268d6c276326c002 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3ce120c9acc7d9d4ce86aa1f07b027d1c45a9a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3050b578081b24e5cf244fa252f385ffca2bf86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3d5159679d17c1270ad72941922d0f18bdd6415 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c04c60f12d3684ecf961509d1b8db895e6f9aac0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 564db4f20bd7189a50a12d612d56ed6391081e83 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 924da9604d6474fd1be99dffdcc539eaaaa31626 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a9eeebeddaa20d10881ad505cc362a3a391e15b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfdf98cadedfa6042117cd7a83952ca2f465d26f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95a83a7de5d3ce84206b9267962c32df4d071c21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fda0ec787de5159534ebc8b81824920d9613575 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c63cd9873bf733c068a5f183442ec82873fef1fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a45790a8699a384c3d218ac4ca8a53c109fd944 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b01b589e7a19d6be5bd6465e600f84aa8015282 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66beac619ba944afeca9d15c56ccc60d5276a799 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93e19791659c279f4f7e33a433771beca65bf9ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0d828fcb1964a578ef3979297c59a41aedba932 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a0eee3989abd3a5d6d47d0298bd056a954d379b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2effd7a10798a1e8e53bb546a67b2ccdea882c50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f347c6da5e83b137c337f9ccb190090c27cfc953 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93ad8da5a8c6ddcbe67abae2cc4a7aad8084e736 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef9395f5ffe75f4e43d80cd1fa7b34c8a4db66fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24effa4861d6d1e8cffe848ae63fa2ed40be03f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d203a0da0c709d301e973a9fe3569efd1fb2bd3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4043468de4fc448b6fda670f33b7f935883793a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e1be3032d521e3bf2f49fc87f82c8f978079ea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eba67171bf6ea653dfb6a6ae288f3c1d10829870 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79ec3a5191f9dfd398d98fe7372ad841f34876ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 105fea3ef3be4b47cc3602423919329162dfcecf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5278c514068f469f2fca7638ef1e1b27556a37a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f34a25eaa6de187797442bc6e0514289d77fed2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a935501a2f62d103cf9d69d775399dae2e7dfead ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26719d252dd8e3a53c08da2ed3c3a8d62fbbc30a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2c1bd80350f692c5c2298cb88859564ec0a061b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 039bfe373c990fc6db3808d255abaff91235e82f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5625170b248edc6a570c977fb1f8e7430ffd0b5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dafe71a3e2d5cfb9b80805a26d5442ca5ad8332f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f043f00d5161794ef538802dcc9ba75e375c058 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a5885a4c5983242b1356b57eafeb59a9d5c0d0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c982c1f50bd7ae3bc4a1afc09e9ad11aecd434f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 273400f95ae036c01d4b0fd7a7ca6ab160efd958 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 233e3ffe0ef35dbabe49340ba567499690dcc166 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b675bf555e89e708f1b8f79bd90796dd395837b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7252e217fe6d8f05dd50f6e125c33a1c6fff602 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbbb6b349e8d0557e7e55e2d05819d6bdaed3769 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebee400cfa4a532018ee904c22c7e3e6619ca4de ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e10706b6c167454a723636e0929061201a2f461b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80b60fafa94b794fa77fab85e1df66f52598f3ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e509130b7dfc97eeb4a517d6c9c65a8d6204234 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d49273897bd317323e0a3bbbc01b76e83370f0c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4d5e7c9dab813adf9bfd8198bb9bb00c9a9503b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a061029eddee38110e416e3c4f60d553dafc9e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 323259cc3d977235f4e7e8980219e5e96d66086e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80d01f0ef89e287184ba6d07be010ee3f16a74d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd47d6b11833870ce23102a3373b7a50a1b45d00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58fa2c401856f93712ae6cc45d4dc3458ee4b4f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc922f3678a1b01cac2b3f1ec74b831ffec52a71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2405cf54ac06140a0821f55b34c1d54f699e8e73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 579d1b8174c9be915c0fa17a67fc38cc6de36ad7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8501e908bb8c531dfa75cef33fcec519027f4e5b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7129dc00826cb344c0202f152f1be33ea9326fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85c6252b54108750291021a74dc00895f79a7ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1accc498c40e684f870d38b7d128739a0ebf57cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27ceafbb3f74b4677d5bae6c7ea031de07c6cfad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c60b88138b836307bdde0487c4ffb82121b1c5e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69a56c4e2addd1ec53bb40e8a18f52353d1fc28c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03bfdb16cd7cc6e1c7c8d3b59552da7de3d82d1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35ddb45b41b3de2d4f783608ad8d8752f6557997 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dc09f0ece61ef2bd629e8bfe532aa24f4f8e0c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 207bf7bf30651c3284408d87d7c499e43db6bc83 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7e59d3ef86beb3b3b3e53a610af122b2220841b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0651f0964ba5a33257ebbda1e92c7a1649a4a058 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 062aafa396866d4dfe8f3fd2f32d46fa7c01b6dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea6af04977c197fd07ab812d394dcb61feebaf67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657e98094f0f669809bc0e47f3d6bd9a8124cf32 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c35350e5bc4fe113330818ca6784ff368c5ffef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 620dbee78ed8481d108327c4c332899df7cb8ef4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6383196b7bb0773c0083a2a3d49a95e5479715bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9066712dca21ef35c534e068f2cc4fefdccf1ea3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 933d23bf95a5bd1624fbcdf328d904e1fa173474 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f66cfbbce58b4b552b041707a12d437cc5f400a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7156cece3c49544abb6bf7a0c218eb36646fad6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33ebe7acec14b25c5f84f35a664803fcab2f7781 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70094734d601e1220c95ac586fdffbda3a23e10b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5962862e9ba0a1c9a14306688973946f6f7ce75c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71cd409660bc5b8c211dc7c51afae481d822d593 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30472cf3132b8c03e528b23d1c7533de740e28ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae54e18d7ca7bc8b8fbc667119fb60b25f0f3871 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b975d9fcf5924800f9ea5d68d7d79f743ca9af7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48af0ac87dc3beef4d3e6c7982b158d50f7b2a6e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12b32450c210cec1fdd8b2c19d564776e8054aa3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55f0245f3ee538ec49e84bcb28c33b135a07f0b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9aa93b5890acb152c5824a8f75c221cf1addfd1b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57a561cda141a0fed3129f4f3488e3b91805e638 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edf9fc528277a53ec37d1bd79fb4f8608cce11ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bf2083922b7bccc31917bf9cdb74e3d4892c2600 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 277be842bf30848e7292a931169bd4c8ff726dee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b919010b0459b2540fb609c5d1aad0b8dc0fab01 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3980f11a9411d0b487b73279346cfae938845e7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 579e2c07bbb39577fa32fed8cb42297c1c5516d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd5f111439e7a2e730b602a155aa533c68badbf8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abc2e538c6f2fe50f93e6c3fe927236bb41f94f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52654c0216dcbe3fa2d9afb1de12c65d18f6a7a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5083752d5d02d6c46bc2f18ba53a28d119af5b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0aa1ce356c7c3d53d6ee035b4c7bcf425e108cdc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b38020ae17ed9f83af75ce176e96267dcce6ecbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b63b3bc493a4a44ba1d857c78e4496e40f1d7b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 178dff753350014f6395f41bc21f1adddf73c8e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 127e511ea2e22f3bd9a0279e747e9cfa9509986d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bf8e89e6784e121ddc32990d586e2276ec84596 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 590638f9a56440a2c41cc04f52272ede04c06a43 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2856af1d9289ee086b10768b53b65e0fd13a335 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d3e2f7f57620398df896d9569c5d7c5365f823d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- befb617d0c645a5fa3177a1b830a8c9871da4168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c50d8be2dc5ae74e53e44a87f580bf25956af9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f6a6e35d003c243968cdb41b72fbbe609e56841 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0425bc64384fe9a6a22edb7831d6e8c1756e2c7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43eb1edf93c381bf3f3809a809df33dae23b50d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b377c07200392ac35a6ed668673451d3c9b1f5c7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa8fe4cad336a7bdd8fb315b1ce445669138830c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7781e1056c672d5212f1aaf4b81ba6f18e8dd8b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 125b4875b5035dc4f6bad4351651a4236b82baeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39f85c4358b7346fee22169da9cad93901ea9eb9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50c90666c4de8ac93accdf4040e3eb010a82a46a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba8d148121b1dbba444849fe9549f36a7d17db28 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdf2e667f969e5c22985dd232fe3f107fe26e750 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3410fdc42075bd788a78f4b2a68c5e2cc0930409 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07eaa4ce2696a88ec0db6e91f191af1e48226aca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4251bd59fb8e11e40c40548cba38180a9536118c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 451561c252323e74696dbe0be36601c95a75a8c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2454ae89983a4496a445ce347d7a41c0bb0ea7ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84968314ddcbaa0e4b685c71c6ea5524b3aefc80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bca0cb7f507d6a21a652307737a57057692d2f79 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4186a2dbbd48fd67ff88075c63bbd3e6c1d8a2df ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 637eadce54ca8bbe536bcf7c570c025e28e47129 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2834177c0fdf6b1af659e460fd3348f468b8ab0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c0a65226f038c58fc6d6ed525f38fc00b3579b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c0c2fc4ee2d8a5d0a2de50ba882657989dedc51 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ab307935bd2bbda52f853f9fc6b49f01897727 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07c20b4231b12fee42d15f1c44c948ce474f5851 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92a97480edcc0f0de787a752bf90feed0445dd39 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b7f5cb25e0e03e06ec506d31c001c172dd71ef6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c68459a17ff59043d29c90020fffe651b2164e6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b01824b1aecf8aadae4501e22feb45c20fb26bce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 708b8dda8e7b87841a5f39c60b799c514e75a9c7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccde80b7a3037a004a7807a6b79916ce2a1e9729 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a119924bd314934158515a1a5f5877be63f6f91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15b9129ec639112e94ea96b6a395ad9b149515d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a7eedde7f5d5082f7f207ef76acccd24a6113b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 101fb1df36f29469ee8f4e0b9e7846d856b87daa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9374a916588d9fe7169937ba262c86ad710cfa74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20f202d83bdf1f332a3cb8f010bcf8bf3c2807bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ee31065abea645cbc2cf3e54b691d5983a228b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8430529e1a9fb28d8586d24ee507a8195c370fa5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a4bfd979e5d4ea0d0457e552202eb2effc36cac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cdfaceebe916c91acdf8de3f9506989bc70ad65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e6d110fbfa1f2e6a96bc8329e936d0cf1192844 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 832b56394b079c9f6e4c777934447a9e224facfe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5df44408218003eb49e3b8fc94329c5e8b46c7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6745f4542cfb74bbf3b933dba7a59ef2f54a4380 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a28d3d18f9237af5101eb22e506a9ddda6d44025 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6eeae8b24135b4de05f6d725b009c287577f053d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ead94f267065bb55303f79a0a6df477810b3c68d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac1cec7066eaa12a8d1a61562bfc6ee77ff5f54d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6acec357c7609fdd2cb0f5fdb1d2756726c7fe98 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4fa1cb3c3e84cad8b74edb28531d2e27508be26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb0f2c241718bc7462be44e5e8e1e36e35f9b15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86fa577e135713e56b287169d69d976cde27ac97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a58a60ac5f322eb4bfd38741469ff21b5a33d2d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff3d142387e1f38b0ed390333ea99e2e23d96e35 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- beb76aba0c835669629d95c905551f58cc927299 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af9e37c5c8714136974124621d20c0436bb0735f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c73e9cd66c77934f8a262b0c1bab9c2f15449ba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2df1f56cccab13d5c92abbc6b18be725e7b4833 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58d692e2a1d7e3894dbed68efbcf7166d6ec3fb7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b67bd4c730273a9b6cce49a8444fb54e654de540 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00c5497f190172765cc7a53ff9d8852a26b91676 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 806450db9b2c4a829558557ac90bd7596a0654e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39229db70e71a6be275dafb3dd9468930e40ae48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f51eeb2f9a1efe22e45f7a1f7b963100f2f8e6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ce1193c851e98293a237ad3d2d87725c501e89f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2da2b90e6930023ec5739ae0b714bbdb30874583 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ace1fed6321bb8dd6d38b2f58d7cf815fa16db7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1e9df152219e85798d78284beeda88f6baa9ec7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52bb0046c0bf0e50598c513e43b76d593f2cbbff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f41d42ee7e264ce2fc32cea555e5f666fa1b1fe9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4cde8df886112ee32b0a09fcac90c28c85ded7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9bbdc87a7263f479344fcf67c4b9fd6005bb6cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43ab2afba68fd0e1b5d138ed99ffc788dc685e36 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e648efdcc1ca904709a646c1dbc797454a307444 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b426893ce331f71165c82b1a86252cd104ae3db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572ace094208c28ab1a8641aedb038456d13f70b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c4269a21b9edf8477f2fee139d5c1b260ebc4f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb5ba18ab1a875ef6b62c65342de476be47871b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbc18b92362f60afc05d4ddadd6e73902ae27ec7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bca9899b5edeed7f964e3124e382c3573183c68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 615fc1984b0cc09c8eeab51a1d1c4e05b583b4a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2792e534dd55fe03bca302f87a3ea638a7278bf1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b89f39432cdb395f5fbb9553b56595d29e2b773 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00499d994fea6fb55a33c788f069782f917dbdd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2a14e4b96a0ffc5353733b50266b477539ef899 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20c34a929a8b2871edd4fd44a38688e8977a4be6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c658c16f3437ed7e78f6072b6996cb423a8f504 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59e26435a8d2008073fc315bafe9f329d0ef689a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c53eeaca19163b2b5484304a9ecce3ef92164d70 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25945899a0067a2dbeeae7a8362a6d68bbc5c6ba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fe5cfa0e063a8d51a1eb6f014e2aaa994e5e7d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f62c9b9c0c9bda792c3fa531b18190e97eb53509 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33fa178eeb7bf519f5fff118ebc8e27e76098363 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c9f55dd8e6697ab2f9eaf384315abd4cbefad38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb509603e8303cd8ada7cfa1aaa626085b9bb6d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4fb3091a75005b047fbea72f812c53d27b15412 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e52a00c81d032b47f1bc352369be3ff8eb87b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fcbda4e363262a339d1cacbf7d2945ec3bd83f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35a09c0534e89b2d43ec4101a5fb54576b577905 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 972a8b84bb4a3adec6322219c11370e48824404e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dd76b9e72b21d2502a51e3605e5e6ab640e5f0bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa5e366889103172a9829730de1ba26d3dcbc01b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e64957d8e52d7542310535bad1e77a9bbd7b4857 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 989671780551b7587d57e1d7cb5eb1002ade75b4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9cb007076542e32f7b99bb18bc6ec424f3b407b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b3ecf2dcace76b65765ddf1901504b0b4861b08 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11b1f6edc164e2084e3ff034d3b65306c461a0be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 985093bae160419782b3d3cb9151e2e58625fd52 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657a57adbff49c553752254c106ce1d5b5690cf8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9840afda82fafcc3eaf52351c64e2cfdb8962397 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 225999e9442c746333a8baa17a6dbf7341c135ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 919164df96d9f956c8be712f33a9a037b097745b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9acc7806d6bdb306a929c460437d3d03e5e48dcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e063d101face690b8cf4132fa419c5ce3857ef44 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aed099a73025422f0550f5dd5c3e4651049494b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17852bde65c12c80170d4c67b3136d8e958a92a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9946e0ce07c8d93a43bd7b8900ddf5d913fe3b03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5cf1bc1d3e38ab32a20707d66b08f1bb0beae91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b372e26366348920eae32ee81a47b469b511a21f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26029c29765043376370a2877b7e635c17f5e76d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3fd37230e76a014cf5c45d55daf0be2caa6948b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9513aa01fab73f53e4fe18644c7d5b530a66c6a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53d26977f1aff8289f13c02ee672349d78eeb2f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbf957a36f5ed47c4387ee8069c56b16d1b4f558 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 345d6be7829c6dab359390ebc5e1a7ae0c6d48bb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 048acc4596dc1c6d7ed3220807b827056cb01032 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a07cdbae1d485fd715a5b6eca767f211770fea4d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8f8582274cd6a368a79e569e2995cee7d6ea9f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f2b19de3301e76ab3a6187a49c9c93ff78bafbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30d822a468dc909aac5c83d078a59bfc85fc27aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa921fee6014ef43bb2740240e9663e614e25662 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b50af0a20bcc7280940ce07593007d17c5acabd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6662422ba52753f8b10bc053aba82bac3f2e1b9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e68d907022c84392597e05afc22d9fe06bf0927 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d97afa24ad1ae453002357e5023f3a116f76fb17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- babf5765da3e328cc1060cb9b37fbdeb6fd58350 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9d6494f1075e5370a20e406c3edb102fca12854 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 152bab7eb64e249122fefab0d5531db1e065f539 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56823868efddd3bdbc0b624cdc79adc3a2e94a75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50a9920b1bd9e6e8cf452c774c499b0b9014ccef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a534eba97db3c2cfb2926368756fd633d25c056 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b197b2dbb527de9856e6e808339ab0ceaf0a512d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c770f8e98a0079497d3eb5bc31e7260cc70cc63 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c3bbc43d097656b54c808290ce0c656d127ce47 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb0ac304431e8aed686a8a817aaccd74b1ba4f24 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea33fe8b21d2b02f902b131aba0d14389f2f8715 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1496979cf7e9692ef869d2f99da6141756e08d25 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7184340f9d826a52b9e72fce8a30b21a7c73d5be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36f838e7977e62284d2928f65cacf29771f1952f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d9e7f1121d3bdbb08291c7164ad622350544a21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1bd99c0a376dec63f0f050aeb0c40664260da16 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7a5c05875a760c0bf83af6617c68061bda6cfc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58e2157ad3aa9d75ef4abb90eb2d1f01fba0ba2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ef1f89abe5b2334705ee8f1a6da231b0b6c9a50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 291d2f85bb861ec23b80854b974f3b7a8ded2921 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78a46c432b31a0ea4c12c391c404cd128df4d709 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ba2aef8f59009756567a53daaf918afa851c304 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0725af77afc619cdfbe3cec727187e442cceaf97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9dfd6bcca5499e1cd472c092bc58426e9b72cccc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9cec00938d9059882bb8eabdaf2f775943e00e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b999cae064fb6ac11a61a39856e074341baeefde ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0cd09bd306486028f5442c56ef2e947355a06282 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13a26d4f9c22695033040dfcd8c76fd94187035b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81d8788d40867f4e5cf3016ef219473951a7f6ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7a4388eeaa4b6b94192dce67257a34c4a6cbd26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d3a24b22d340c62fafc0e75a349c0ffe34d99d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a10aa36bc6a82bd50df6f3df7d6b7ce04a7070f1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44a601a068f4f543f73fd9c49e264c931b1e1652 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b9776e88f7abb59cebac8733c04cccf6eee1c60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1047b41e2e925617474e2e7c9927314f71ce7365 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddc5496506f0484e4f1331261aa8782c7e606bf2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c23ca3cd9b9bbeaca1b79068dee1eae045be5b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec3d91644561ef59ecdde59ddced38660923e916 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e70f3218e910d2b3dcb8a5ab40c65b6bd7a8e9a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2ccae0d7fca3a99fc6a3f85f554d162a3fdc916 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 461fd06e1f2d91dfbe47168b53815086212862e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b5121414aaf2648b0e809e926d1016249c0222c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 685d6e651197d54e9a3e36f5adbadd4d21f4c7e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a519942a295cc39af4eebb7ba74b184decae13fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4712c619ed6a2ce54b781fe404fedc269b77e5dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc518251eb64c3ef90502697a7e08abe3f8310b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 146a6fe18da94e12aa46ec74582db640e3bbb3a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87afd252bd11026b6ba3db8525f949cfb62c90fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f8e6f7ab1e6dbd95c268ba0fc827abc62009013 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29c20c147b489d873fb988157a37bcf96f96ab45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b1f32e231d391f8e6051957ad947d3659c196b2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 764cc6e344bd034360485018eb750a0e155ca1f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 138aa2b8b413a19ebf9b2bbb39860089c4436001 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 038f183313f796dc0313c03d652a2bcc1698e78e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5047344a22ed824735d6ed1c91008767ea6638b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef592d384ad3e0ead5e516f3b2c0f31e6f1e7cab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22757ed7b58862cccef64fdc09f93ea1ac72b1d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc2201e660014c5d91fec8e3c3a3fa5a66dcf33b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9117cdbb48ffc458d809715c6ab6bc6b416ef621 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a885d23bab51b0c00be2780055ff63b3f3c1a4c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81279eeac5c525354cbe19b24a6f42219407c1f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50af864298826feaf94772982bbc7b222b4b4242 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20ef1924b832a3788849793c0ee6b46dd00d4520 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4748e813980e1316aa364e0830a4dc082ff86eb0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1da744421619e134ed3ff2781b4d97fee78d9cd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ff5822dbefa1c9c8177cbf9f0879c5cf4efc5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0f2bb42b56f770c50a6ef087e9049fa6ac11fb5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 819d6aceeb4d31c153de58081b21ad4f8b559c0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 179a1dcc65366a70369917d87d00b558a6d0c04d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b372fdd54bab2ad6639756958978660b12095c3c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 555b0efc2c19aa8cf7c548b4097bd20a73f572ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e99d9ab2acfaf2ebb4b150736590d6a4e33f449 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9671e15703918048982c9ff4e2e0fef21ede320 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46c9a0df4403266a320059eaa66e7dce7b3d9ac4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a67bf61b5017e41740e997147dc88282b09c6f86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5593dc014a41c563ba524b9303e75da46ee96bd5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ee861ae7a7b36a811aa4b5cc8172c5cbd6a945b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b48e4d3aa853687f420dc51969837734b70bfdec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e746f96bcc29238b79118123028ca170adc4ff0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e80445ad5cb6da4c0070d7cb8af89da3b0803b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b01ca6a3e4ae9d944d799743c8ff774e2a7a82b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1906ee4df9ae4e734288c5203cf79894dff76cab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e2b46138ba58033738a24dadccc265748fce2ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b4a514e51fbc7dc6ddcb27c188159d57b5d1fa9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26e138cb47dccc859ff219f108ce9b7d96cbcbcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38d59fc8ccccae8882fa48671377bf40a27915a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f8ce8901e21587cd2320562df412e05b5ab1731 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b86f9b399a8f5af792a04025fdeefc02883f3e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 282018b79cc8df078381097cb3aeb29ff56e83c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 538820055ce1bf9dd07ecda48210832f96194504 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae5a69f67822d81bbbd8f4af93be68703e730b37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e1c89ec97ec90037583e85d0e9e71e9c845a19b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a25347d7f4c371345da2348ac6cceec7a143da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c1a87d11df666d308d14e4ae7ee0e9d614296b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df0892351a394d768489b5647d47b73c24d3ef5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a0b79ee574999ecbc76696506352e4a5a0d7159 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d8a577ffc6ad7ce1465001ddebdc157aecc1617 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be8955a0fbb77d673587974b763f17c214904b57 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a28942bdf01f4ddb9d0b5a0489bd6f4e101dd775 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cac6e06cc9ef2903a15e594186445f3baa989a1a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29eb123beb1c55e5db4aa652d843adccbd09ae18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f606937a7a21237c866efafcad33675e6539c103 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 257a8a9441fca9a9bc384f673ba86ef5c3f1715d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 365fb14ced88a5571d3287ff1698582ceacd80d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea81f14dafbfb24d70373c74b5f8dabf3f2225d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07996a1a1e53ffdd2680d4bfbc2f4059687859a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57a4e09294230a36cc874a6272c71757c48139f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0974f8737a3c56a7c076f9d0b757c6cb106324fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e6bece08aea01859a232e99a1e1ad8cc1eb7d36 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a988e6985849e4f6a561b4a5468d525c25ce74fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1090701721888474d34f8a4af28ee1bb1c3fdaaa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2054561da184955c4be4a92f0b4fa5c5c1c01350 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2c8d26d3b25b864ad48e6de018757266b59f708 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15941ca090a2c3c987324fc911bbc6f89e941c47 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f78d4a28f307a9d7943a06be9f919304c25ac2d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e2ba9c2028f21d11988558f3557905d21e93808 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be06e87433685b5ea9cfcc131ab89c56cf8292f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 654e54d200135e665e07e9f0097d913a77f169da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 583cd8807259a69fc01874b798f657c1f9ab7828 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edd9e23c766cfd51b3a6f6eee5aac0b791ef2fd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c3c271b0d6b5f56b86e3f177caf3e916b509b52 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619662a9138fd78df02c52cae6dc89db1d70a0e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8a448b7864e21db46184eab0f0a21d7725d074f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a252661c3bf4202a4d571f9c41d2afa48d9d75f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 867129e2950458ab75523b920a5e227e3efa8bbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b27292936c81637f6b9a7141dafaad1126f268e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3cde0ee162b8f0cb67da981311c8f9c16050a62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec28ad575ce1d7bb6a616ffc404f32bbb1af67b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b72e2704022d889f116e49abf3e1e5d3e3192d3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab59f78341f1dd188aaf4c30526f6295c63438b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61138f2ece0cb864b933698174315c34a78835d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50e469109eed3a752d9a1b0297f16466ad92f8d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65c9fe0baa579173afa5a2d463ac198d06ef4993 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c69b6b979e3d6bd01ec40e75b92b21f7a391f0ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 898d47d1711accdfded8ee470520fdb96fb12d46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e825f8b69760e269218b1bf1991018baf3c16b04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- def0f73989047c4ddf9b11da05ad2c9c8e387331 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 772b95631916223e472989b43f3a31f61e237f31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5c0002d069382db1768349bf0c5ff40aafbf140 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13dd59ba5b3228820841682b59bad6c22476ff66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619c11787742ce00a0ee8f841cec075897873c79 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53152a824f5186452504f0b68306d10ebebee416 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3776f7a766851058f6435b9f606b16766425d7ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09c3f39ceb545e1198ad7a3f470d4ec896ce1add ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d996892ac76199886ba3e2754ff9c9fac2456d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18e3252a1f655f09093a4cffd5125342a8f94f3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ff864138cd1e680a78522c26b583639f8f5e313 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 583e6a25b0d891a2f531a81029f2bac0c237cbf9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01eac1a959c1fa5894a86bf11e6b92f96762bdd8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfb278d74ad01f3f1edf5e0ad113974a9555038d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3323464f85b986cba23176271da92a478b33ab9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d1212e8c412b0b4802bc1080d38d54907db879d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fbe062bf6dacd3ad63dd827d898337fa542931ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c34343d0b714d2c4657972020afea034a167a682 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c36f3648e39ace752c67c71867693ce1eee52a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55e757928e493ce93056822d510482e4ffcaac2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e14e3f143e7260de9581aee27e5a9b2645db72de ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1873db442dc7511fc2c92fbaeb8d998d3e62723d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abaefc59a7f2986ab344a65ef2a3653ce7dd339f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af32b6e0ad4ab244dc70a5ade0f8a27ab45942f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4f49fb232acb2c02761a82acc12c4040699685d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2d9197cfe5d3b43cb8aee182b2e65c73ef9ab7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69dd8750be1fbf55010a738dc1ced4655e727f23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1044116d25f0311033e0951d2ab30579bba4b051 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e2265a23ecec4e4d9ad60d788462e7f124f1bb7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aea0243840a46021e6f77c759c960a06151d91c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c0ef65b43688b1a4615a1e7332f6215f9a8abb19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be97c4558992a437cde235aafc7ae2bd6df84ac8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fe889ea0cb2547584075dc1eb77f52c54b9a8c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47e3138ee978ce708a41f38a0d874376d7ae5c78 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3bd05b426a0e3dec8224244c3c9c0431d1ff130 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ebc6193f7205fd1686678a5707262cb1c59bb0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28a33ca17ac5e0816a3e24febb47ffcefa663980 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fde6522c40a346c8b1d588a2b8d4dd362ae1f58f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0369384c8b79c44c5369f1b6c05046899f8886da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18be0972304dc7f1a2a509595de7da689bddbefa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77cd6659b64cb1950a82e6a3cccdda94f15ae739 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 791765c0dc2d00a9ffa4bc857d09f615cfe3a759 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 160081b9a7ca191afbec077c4bf970cfd9070d2c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01ab5b96e68657892695c99a93ef909165456689 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc31651674648f026464fd4110858c4ffeac3c18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f068cdc5a1a13539c4a1d756ae950aab65f5348b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9059525a75b91e6eb6a425f1edcc608739727168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73959f3a2d4f224fbda03c8a8850f66f53d8cb3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a32a6bcd784fca9cb2b17365591c29d15c2f638e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c6d7830d9b87f47a0bfe82b3b5424a32e3164ad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f963881e53a9f0a2746a11cb9cdfa82eb1f90d8c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0019d7dc8c72839d238065473a62b137c3c350f5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f88fb96869b6ac3ed4dac7d23310a9327d3c89c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cf2d5fcf0a3db793678dd6ba9fc1c24d4eeb36a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebe8f644e751c1b2115301c1a961bef14d2cce89 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f2d76ba8e6d004ff5849ed8c7c34f6a4ac2e1e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf5eaddde33e983bc7b496f458bdd49154f6f498 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c0990b2a6dd2e777b46c1685ddb985b3c0ef59a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c1834134ce177cdbd30a56994fcc4bf8f5be8b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82849578e61a7dfb47fc76dcbe18b1e3b6a36951 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a320abc52307b4d4010166bd899ac75024ec9a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1687283c13caf7ff8d1959591541dff6a171ca1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cc4d748a132377ffe63534e9777d7541a3253c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 609a46a72764dc71104aa5d7b1ca5f53d4237a75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e6234c27abf041e4c8cd1a799950e7cd9104f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b03933057df80ea9f860cc616eb7733f140f866e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e84d05f4bbf7090a9802e9cd198d1c383974cb12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef48ca5f54fe31536920ec4171596ff8468db5fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b3ef45167e1c2f7d1b7507c13fcedd914f87da9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33964afb47ce3af8a32e6613b0834e5f94bdfe68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98e6edb546116cd98abdc3b37c6744e859bbde5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d061a1a506b71234f783628ba54a7bdf79bbce9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78d2cd65b8b778f3b0cfef5268b0684314ca22ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b4db556619db2ef25f0e0d90fef7e38e6713e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f73e8ba55f33394161b403bf7b8c2e0e05f47b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af5abca21b56fcf641ff916bd567680888c364aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4fd7fca515ba9b088a7c811292f76f47d16cd7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ceee7d7e0d98db12067744ac3cd0ab3a49602457 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 624556eae1c292a1dc283d9dca1557e28abe8ee3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f97653aa06cf84bcf160be3786b6fce49ef52961 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00ce31ad308ff4c7ef874d2fa64374f47980c85c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d36f8ff4d1274a8815e932285ad6dbd6b2888af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e2f63e64875a29e8c01a7ae17f5744680167a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9519f186ce757cdba217f222c95c20033d00f91d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c34d5c3f2a4ed7194276a026e0ec6437d339c67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8014d2ec56fd684dc81478dee73ca7eda0ab8a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a25e1d4aa7e5898ab1224d0e5cc5ecfbe8ed8821 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 75c75fa136f6181f6ba2e52b8b85a98d3fe1718e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- beccf1907dae129d95cee53ebe61cc8076792d07 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca3fdbe2232ceb2441dedbec1b685466af95e73b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f24f9540afc0db61d197bc4932697737bff1506 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20b07fa542d2376a287435a26c967a5ee104667f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6befb28efd86556e45bb0b213bcfbfa866cac379 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ca0f897376e765989e92e44628228514f431458 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83a9e4a0dad595188ff3fb35bc3dfc4d931eff6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6019e16d5a74dc49eb7129ee7fd78b4de51dac2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fafe8a77db75083de3e7af92185ecdb7f2d542d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3203cd7629345d32806f470a308975076b2b4686 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98a313305f0d554a179b93695d333199feb5266c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86523260c495d9a29aa5ab29d50d30a5d1981a0c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c946bf260d3f7ca54bffb796a82218dce0eb703f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 264ba6f54f928da31a037966198a0849325b3732 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec0657cf5de9aeb5629cc4f4f38b36f48490493e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a17c43d0662bab137903075f2cff34bcabc7e1d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dd51f1d63fa5ee704c2bdf4cb607bb6a71817d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7029773512eee5a0bb765b82cfdd90fd5ab34e15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61f3db7bd07ac2f3c2ff54615c13bf9219289932 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a21a9f6f13861ddc65671b278e93cf0984adaa30 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5bd7d44ff7e51105e3e277aee109a45c42590572 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ccd777c386704911734ae4c33a922a5682ac6c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ad01ee239f9111133e52af29b78daed34c52e49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a93eb7e8484e5bb40f9b8d11ac64a1621cf4c9cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e5aae2fc8c3832bdae1cd5e0a269405fb059231 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 739fa140235cc9d65c632eaf1f5cacc944d87cfb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dec4663129f72321a14efd6de63f14a7419e3ed2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7da101ba9a09a22a85c314a8909fd23468ae66f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b81273e70c9c31ae02cb0a2d6e697d7a4e2b683a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 968ffb2c2e5c6066a2b01ad2a0833c2800880d46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 523fb313f77717a12086319429f13723fe95f85e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d810f2700f54146063ca2cb6bb1cf03c36744a2c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c12fef1b1971ba7a50e7e5c497caf51e0f68479 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9004e3a1cf33110f2cbc458f1dc3259c930ad9b4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0cfe75db81bc099e4316895ff24d65ef865bced6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f24736ad5b55a89b1057d68d6b3f3cd01018a2e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b2e9a8312412b9c8d4e986510dcc30ee16c5f4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e86eb305a542cee5b0ff6a0e0352cb458089bf62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cb68eef0865df6aedbc11cd81888625a70da6777 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96d003cb2baabd73f2aa0fd9486c13c61415106e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b424f87a276e509dcaaee6beb10ca00c12bb7d29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46f63c30e30364eb04160df71056d4d34e97af21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 096897123ab5d8b500024e63ca81b658f3cb93da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea5d365a93a98907a1d7c25d433efd06a854109e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab5b6af0c2c13794525ad84b0a80be9c42e9fcf1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55eb3de3c31fd5d5ad35a8452060ee3be99a2d99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863b386e195bb2b609b25614f732b1b502bc79a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a92ab8028c7780db728d6aad40ea1f511945fc8e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5558400e86a96936795e68bb6aa95c4c0bb0719 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 916c45de7c9663806dc2cd3769a173682e5e8670 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e94df6acd3e22ce0ec7f727076fd9046d96d57b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55885e0c4fc40dd2780ff2cde9cda81a43e682c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f6b8bf020863f499bf956943a5ee56d067407f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c2e872f742e7d3c64c7e0fdb85a5d711aff1970 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbe78c02cbdfd0a539a1e04976e1480ac0daf580 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4654ca3a17832a7d479e5d8e3296f004c632183 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f573b6840509bf41be822ab7ed79e0a776005133 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70670586e082a9352c3bebe4fb8c17068dd39b4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3cc763d6ca57582964807fb171bc52174ef8d5e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5ec638a77dd1cd38512bc9cf2ebae949e7a8812 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2df73b317a4e2834037be8b67084bee0b533bfe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e54cd8fed2d1788618df64b319a30c7aed791191 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec0b85e2d4907fb5fcfc5724e0e8df59e752c0d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a023acbe9fc9a183c395be969b7fc7d472490cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ea450112501e0d9f11e554aaf6ce9f36b32b732 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe311b917b3cef75189e835bbef5eebd5b76cc20 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 10809e8854619fe9f7d5e4c5805962b8cc7a434b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ea761425b9fa1fda57e83a877f4e2fdc336a9a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb53329253f8ec1d0eff83037ce70260b6d8fcce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8980057ccfcaca34b423804222a9f981350ac67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9fc8b6c06b91dfddb73d18eaa8164e64cc2600a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 237d47b9d714fcc2eaedff68c6c0870ef3e0041a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9421cbc67e81629895ff1f7f397254bfe096ba49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c390e223553964fc8577d6837caf19037c4cd6f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8987f2746637cbe518e6fe5cf574a9f151472ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb52c96d7e849e68fda40e4fa7908434e7b0b022 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f03e6162f99e4bfdd60c08168dabef3a1bdb1825 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48f5476867d8316ee1af55e0e7cfacacbdf0ad68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a61110053bca2bbf605b66418b9670cbd555802 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c9fcd7745d2f0c933b46a694f77f85056133ca5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eb7265c532e99e8e434e31f910b05c055ae4369 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b137f55232155b16aa308ec4ea8d6bc994268b0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56cc93a548f35a0becd49a7eacde86f55ffc5dc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c914637ab146c23484a730175aa10340db91be70 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d43055d44e58e8f010a71ec974c6a26f091a0b7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ddd5e5ef89da7f1e3b3a7d081fbc7f5c46ac11c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbd784b870a878ef6dbecd14310018cdaeda5c6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d45c76bd8cd28d05102311e9b4bc287819a51e0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cccea02a4091cc3082adb18c4f4762fe9107d3b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03097c7ace28c5516aacbb1617265e50a9043a84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ab7ac2397d60f1a71a90bf836543f9e0dcad2d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18fff4d4a28295500acd531a1b97bc3b89fad07e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff13922f6cfb11128b7651ddfcbbd5cad67e477f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7ed51ba4c8416888f5744ddb84726316c461051 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8005591231c8ae329f0ff320385b190d2ea81df0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56d7a9b64b6d768dd118a02c1ed2afb38265c8b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8f10e74d815223341c3dd3b647910b6e6841bd6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6b08c27a031f8b8b0bb6c41747ca1bc62b72706 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3a728277877924e889e9fef42501127f48a4e77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5869c5c1a51d448a411ae0d51d888793c35db9c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f122a6aa3eb386914faa58ef3bf336f27b02fab0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db82455bd91ce00c22f6ee2b0dc622f117f07137 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 007bd4b8190a6e85831c145e0aed5c68594db556 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e6957abf8cd88824282a19b74497872fe676a46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8e70749887370a99adeda972cc3503397b5f9a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bed3b0989730cdc3f513884325f1447eb378aaee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 614907b7445e2ed8584c1c37df7e466e3b56170f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be34ec23c48d6d5d8fd2ef4491981f6fb4bab8e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5d11b750ecc982541d1f936488248f0b42d75d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eee7af0e69a39da2dc6c5f109c10975fae5a93e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba67e4ff74e97c4de5d980715729a773a48cd6bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9780b7a0f39f66d6e1946a7d109fc49165b81d64 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a1e0d7117b9e4ea4be3ef4895e8b2b4937ff98a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a7e7a769087b1790a18d6645740b5b670f5086b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28fdf05b1d7827744b7b70eeb1cc66d3afd38c82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d602f267c32e1e917599d9bcdcfec4eef05d477 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d0473c1d1e6cadd986102712fff9196fff96212 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81223de22691e2df7b81cd384ad23be25cfd999c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e231a4f184583fbac2d3ef110dacd1f015d5e1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f277ba01f9a93fb040a365eef80f46ce6a9de85 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df6b87a793434065cd9a01fcaa812e3ea47c4dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5025b8de2220123cd80981bb2ddecdd2ea573f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95436186ffb11f51a0099fe261a2c7e76b29c8a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 706d3a28b6fa2d7ff90bbc564a53f4007321534f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22c4671b58a6289667f7ec132bc5251672411150 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53b65e074e4d62ea5d0251b37c35fd055e403110 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ea782803efe1974471430d70ee19419287fd3d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3621c06c3173bff395645bd416f0efafa20a1da6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5991698ee2b3046bbc9cfc3bd2abd3a881f514dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 257264743154b975bc156f425217593be14727a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88a7002acb50bb9b921cb20868dfea837e7e8f26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ae92aa57324849dd05997825c29242d2d654099 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6fca2410a56225992959e5e4f8019e16757bfd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f879c71bdf0aac7af9b01304ff02e94b5af71b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a47a9c8d8253d0ae2a233fa8599b1a1c54ec53f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45eb6bd22554e5dad2417d185d39fe665b7a7419 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ef4552404ba3bc92554a6c57793ee889523e3a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 68f8a43d1b643318732f30ee1cd75e1d315a4537 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8cf69b6f8bd73525b5375bd73f1fc79ae322a82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1527b5734c0f2821fd6f38c1a1d70723a4bb88ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0c65d6638698f4e3a9e726efca8c0bcf466cd62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 02e942b7c603163c87509195d76b2117c4997119 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 725bde98d5cf680a087b6cb47a11dc469cfe956c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95bb489a50f6c254f49ba4562d423dbf2201554f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4cfc682ff87d3629b31e0196004d1954810b206c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f219b53f339fc0133800fac96deaf75eb4f9bf6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a05e49d2419d65c59c65adf5cd8c05f276550e1d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 60e54133aa1105a1270f0a42e74813f75cd2dc46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a83eee5bcee64eeb000dd413ab55aa98dcc8c7f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5a37564b6eec05b98c2efa5edcd1460a2df02aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45c1c99a22e95d730d3096c339d97181d314d6ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7297ff651c3cc6abf648b3fe730c2b5b1f3edbd3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a67e4e49c4e7b82e416067df69c72656213e886 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31b3673bdb9d8fb7feea8ae887be455c4a880f76 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1060a2a8c90c0730c3541811df8f906dac510a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a308613467a1510f8dac514624abae4e10c0779 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d0556a31916a709e9da3eafb92fc6b8bf69896c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04357d0d46fee938a618b64daed1716606e05ca5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc8c91200a7fb2140aadd283c66b5ab82f9ad61e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2ff0f9d704dc776a1934f72a339da206a9fff4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6aa8d116eb33293c0a9d6d600eb7c32832758b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a6ffa13ae2951a168cde5908c7a94b16562b96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 763ef75d12f0ad6e4b79a7df304c7b5f1b5a11f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c86bea60dde4016dd850916aa2e0db5260e1ff61 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 491440543571b07c849c0ef9c4ebf5c27f263bc0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6ee00d0dadcd7b10d60a2985db4fe137ca7cfed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73790919dbe038285a3612a191c377bc27ae6170 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6ed8d46c72366e111b9a97a7c238ef4af3bf4dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d4b4ea9c84198a9b6003611a3af00ee677d09a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dec7a822424bbe58b7b2a7787b1ea32683a9c19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28bda3aaa19955d1c172bd86d62478bee024bf7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fd7b945dfca73caf00883d4cf43740edb7516df ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ed61f72c611deb07e0368cebdc9f06da32150cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe2fbc5913258ef8379852c6d45fcf226b09900b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34802014ca0c9546e73292260aab5e4017ffcd9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1410bcc76725b50be794b385006dedd96bebf0fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06bec1bcd1795192f4a4a274096f053afc8f80ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b54b9399920375f0bab14ff8495c0ea3f5fa1c33 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe426d404b727d0567f21871f61cc6dc881e8bf0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 756b7ad43d0ad18858075f90ce5eaec2896d439c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7729245060f9aecfef4544f91e2656aa8d483ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9dc8fffd179b3d7ad7c46ff2e6875cc8075fabf3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 873823f39275ceb8d65ebfae74206c7347e07123 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c00567d3025016550d55a7abaf94cbb82a5c44fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50f763cfe38a1d69a3a04e41a36741545885f1d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21a6cb7336b61f904198f1d48526dcbe9cba6eec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c2502ee83927437442b13b83f3a7976e4146a01 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cc1e7e08094494916db1aadda17e03ce695d049 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158bc981130bfbe214190cac19da228d1f321fe1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abd23a37d8b93721c0e58e8c133cef26ed5ba1f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b89b089972b5bac824ac3de67b8a02097e7e95d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d83f44007c5c581eae7ddc6c5de33311b7c1895 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9e7a3d93da741f81a5af2e84422376c54f1f337 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f233e2405c16e2b185aa90cc8e7ad257307b991 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1cedc5c417ddf3c2a955514dcca6fe74913259b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bccdb483aaa7235b85a49f2c208ee1befd2706dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9563d27fbde02b8b2a8b0d808759cb235b4e083b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bafb4cc0a95428cbedaaa225abdceecee7533fac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1143e1c66b8b054a2fefca2a23b1f499522ddb76 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a771e102ec2238a60277e2dce68283833060fd37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8e700e952d135c6903b97f022211809338232e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5385cbd969cc8727777d503a513ccee8372cd506 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c696b3cf0c2441aefaef3592e2b815472f162a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22d2e4a0bfd4c2b83e718ead7f198234e3064929 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e79604c8bdfc367f10a4a522c9bf548bdb3ab9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 643e6369553759407ca433ed51a5a06b47e763d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1d5c614c38db015485190d65db05b0b75d171d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1a9a232fbde88a347935804721ec7cd08de6f65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa0ccead680443b07fd675f8b906758907bdb415 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85a45a691ad068a4a25566cc1ed26db09d46daa4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0f47b3076a84c5c32cccc95748f18c50e3d948 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1578baf817c2526d29276067d2f23d28b6fab2b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80d43111b6bb73008683ad2f5a7c6abbab3c74ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9aaaa83c44d5d23565e982a705d483c656e6c157 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3e78d98e06439eea1036957796f8df9f386930f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3068025b64bee24efc1063aba5138708737c158 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 141b78f42c7a3c1da1e5d605af3fc56aceb921ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3438795d2af6d9639d1d6e9182ad916e73dd0c37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdc38b83f4a6d39603dc845755df49065a19d029 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65c07d64a7b1dc85c41083c60a8082b3705154c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fdb6a5eac7433098cfbb33d3e18d6dbba8fa3d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58c5b993d218c0ebc3f610c2e55a14b194862e1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb6beb75aaa269a1e7751d389c0826646878e5fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec15e53439d228ec64cb260e02aeae5cc05c5b2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 332521ac1d94f743b06273e6a8daf91ce93aed7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2cc8f1e3c6627f0b4da7cb6550f7252f76529d8e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc8032d35a23bcc105f50b1df69a1da6fe291b90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbbcaf7a355e925911fa77e204dd2c38ee633c0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d06e76bb243dda3843cfaefe7adc362aab2b7215 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4faf5cd43dcd0b3eea0a3e71077c21f4d029eb99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cc0e6caa3117f694d367d3f3b80db1e365aac94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e1c90eb69e2dfd5fdf8418caa695112bd285f21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cd4caf15a2e977fc0f010c1532090d942421979c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a8700185dce5052ca1581b63432fb4d4839c226 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13141e733347cea5b409aa54475d281acd1c9a3c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05a302c962afbe5b54e207f557f0d3f77d040dc8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7b609c9f382685448193b59d09329b9a30c7580 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc9278fb4432f0244f4d780621d5c1b57a03b720 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1815563ec44868121ae7fa0f09e3f23cacbb2700 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5982ff789e731c1cbd9b05d1c6826adf0cd8080b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d97a8bb75098ad643d1a8853fe1b59cbb8e2338c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a91a659a3a7d8a099433d02697777221c5b9d16f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e328ffddec722be3fba2c9b637378e31e623d58e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25f27c86af9901f0135eac20a37573469a9c26ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bb927dc12fae61141f1cc7fe4a94e0d68cb4232 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5324565457e38c48b8a9f169b8ab94627dc6c979 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6271586d7ef494dd5baeff94abebbab97d45482b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f6713669a8a32af90a73d03a7fa24e6154327f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af74966685e1d1f18390a783f6b8d26b3b1c26d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f533a68cb5295f912da05e061a0b9bca05b3f0c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5b8220a1a967abdf2bae2124e3e22a9eea3729f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e61e3200d5c9c185a7ab70b2836178ae8d998c17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3297fe50067da728eb6f3f47764efb223e0d6ea4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 722473e86e64405ac5eb9cb43133f8953d6c65d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28afef550371cd506db2045cbdd89d895bec5091 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bdaa463f7c73d30d75d7ea954dd3c5c0c31617b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1875885485e7c78d34fd56b8db69d8b3f0df830c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c042f56fc801235b202ae43489787a6d479cd277 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07b124c118942bc1eec3a21601ee38de40a2ba0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b533f86cf86c96a16f96c815533bdda0585f48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aae2a7328a4d28077a4b4182b4f36f19c953765b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5de21c7fa2bdd5cd50c4f62ba848af54589167d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83156b950bb76042198950f2339cb940f1170ee2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ae1f213e1b99638ba685f58d489c0afa90a3991 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8da7852780a62d52c3d5012b89a4b15ecf989881 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f1b69ad52670a67e8b766e89451080219871739 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6964e3efc4ac779d458733a05c9d71be2194b2ba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1445b59bb41c4b1a94b7cb0ec6864c98de63814b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2090b5487e69688be61cfbb97c346c452ab45ba2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cdf7c5aca2201cf9dfc3cd301264da4ea352b737 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55d40df99085036ed265fbc6d24d90fbb1a24f95 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e77128e5344ce7d84302facc08d17c3151037ec3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3c89a5e020bb4747fd9470ba9a82a54c33bb5fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 19099f9ce7e8d6cb1f5cafae318859be8c082ca2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fbc182e6d4636f67f44e5893dee3dcedfa90e04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f77f9775277a100c7809698c75cb0855b07b884d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2c8c7f86e6a61307311ea6036dac4f89b64b500 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 895f0bc75ff96ce4d6f704a4145a4debc0d2da58 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89ade7bfff534ae799d7dd693b206931d5ed3d4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8d6fb2898ba465bc1ade60066851134a656a76c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 187fe114585be2d367a81997509b40e62fdbc18e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 903826a50d401d8829912e4bcd8412b8cdadac02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73ab28744df3fc292a71c3099ff1f3a20471f188 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9989f8965f34af5009361ec58f80bbf3ca75b465 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33940022821ec5e1c1766eb60ffd80013cb12771 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39164b038409cb66960524e19f60e83d68790325 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d255f4c8fd905d1cd12bd42b542953d54ac8a8c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4492c7965cd8e3c5faaf28b2a6414b04984720b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ba48ce5758fb2cd34db491845f3b9fdaefe3797 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0235f910916b49a38aaf1fcbaa6cfbef32c567a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1faf84f8eb760b003ad2be81432443bf443b82e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79c99c0f66c8f3c8d13258376c82125a23b1b5c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eafe201905d85be767c24106eb1ab12efd3ee22 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55969cb6034d5b416946cdb8aaf7223b1c3cbea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85e78ca3d9decf8807508b41dbe5335ffb6050a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6891caf73735ea465c909de8dc13129cc98c47f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a5cebaeda2c5062fb6c727f457ee3288f6046ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35658887753da7da9a32a297346fd4ee6e53d45c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08a0fad2c9dcdfe0bbc980b8cd260b4be5582381 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46201b346fec29f9cb740728a3c20266094d58b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78f3f38d18fc88fd639af8a6c1ef757d2ffe51d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5077fc7e4031e53f730676df4d8df5165b1d36cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 200d3c6cb436097eaee7c951a0c9921bfcb75c7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f4b410c955ea08bfb7842320afa568090242679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b366d3fabd79e921e30b44448cb357a05730c42f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 930d03fb077f531b3fbea1b4da26a96153165883 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc2ec79a88a787f586df8c40ed0fd6657dce31dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9405ac82af3a804dba1f9797bdb34815e1d7a18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ee291c469fc7ea6065ed22f344ed3f2792aa2ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e031a0ee8a6474154c780e31da2370a66d578cdc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b827f8162f61285754202bec8494192bc229f75a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cee0cec2d4a27bbc7af10b91a1ad39d735558798 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df958981ad63edae6fceb69650c1fb9890c2b14f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8ef023a5bab377764343c954bf453869def4807 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bde1038e19108ec90f899ce4aff7f31c1e387eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572ebd6e92cca39100183db7bbeb6b724dde0211 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d79951fba0994654104128b1f83990387d44ac22 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d9390866f9ce42870d3116094cd49e0019a970a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1116ef7e1bcbbc71d0b654b63156b29bfbf9afab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4b5ecc217154405ac0f6221af99a4ab18d067f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7f403b1e82d4ada20d0e747032c7382e2a6bf63 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0eafc47c307ff0bf589ce43b623bd24fad744fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c70daba7a3d195d22ded363c9915b5433ce054 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26bb778b34b93537cfbfd5c556d3810f2cf3f76e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25c207592034d00b14fd9df644705f542842fa04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1481af08064e10ce485339c6c0233acfc646572 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41fd2c679310e3f7972bd0b60c453d8b622f4aea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2253d39f3a5ffc4010c43771978e37084e642acc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4572ffd483bf69130f5680429d559e2810b7f0e9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a521681ff8614beb8e2c566cf3c475baca22169 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdf1e68f6bec679edc3feb455596e18c387879c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8b025f719b2c3203e194580bbd0785a26c08ebd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a79cf677744e2c1721fa55f934fa07034bc54b0a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13d399f4460ecb17cecc59d7158a4159010b2ac5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d84b960982b5bad0b3c78c4a680638824924004b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b114f3bbe50f50477778a0a13cf99c0cfee1392a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 842fb6852781fd74fdbc7b2762084e39c0317067 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 395955609dfd711cc4558e2b618450f3514b28c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1d2d0683afa6328b6015c6a3aa6a6912a055756 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0574b8b921dbfe1b39de68be7522b248b8404892 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e98416791566f44a407dcac07a1e1f1b0483544 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44c6d0b368bc1ec6cd0a97b01678b38788c9bd9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f11fdf1d9d22a198511b02f3ca90146cfa5deb5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf2335af23fb693549d6c4e72b65f97afddc5f64 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5db3d3c49ebe559cb80983d7bb855d4adf1b887 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 467416356a96148bcb01feb771f6ea20e5215727 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57550cce417340abcc25b20b83706788328f79bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 137ee6ef22c4e6480f95972ef220d1832cdc709a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 434505f1b6f882978de17009854d054992b827cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4cede2368aa980e30340f0ed0a1906d65fe1046c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e61439b3018b0b9a8eb43e59d0d7cf32041e2fed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df2fb548040c8313f4bb98870788604bc973fa18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25a2ebfa684f7ef37a9298c5ded2fc5af190cb42 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1124e19afc1cca38fec794fdbb9c32f199217f78 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 278423faeb843fcf324df85149eeb70c6094a3bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c572a8d95d8fa184eb58b15b7ff96d01ef1f9ec3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a3c95b408162c78b9a4230bb4f7274a94d0add4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 618e6259ef03a4b25415bae31a7540ac5eb2e38a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa3f2fa76844e1700ba37723acf603428b20ef74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f495e94028bfddc264727ffc464cd694ddd05ab8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29eb301700c41f0af7d57d923ad069cbdf636381 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45f8f20bdf1447fbfebd19a07412d337626ed6b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 783ad99b92faa68c5cc2550c489ceb143a93e54f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b343718cc1290c8d5fd5b1217724b077153262a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7bbaac26906863b9a09158346218457befb2821a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa70623a651d2a0b227202cad1e526e3eeebfa00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ec2f8a4f26cec3fbbe1fb447058acaf508b39c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 082851e0afd3a58790fe3c2434f6d070f97c69c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51bf7cbe8216d9a1da723c59b6feece0b1a34589 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1210ec763e1935b95a3a909c61998fbd251b7575 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7842e92ebaf3fc3380cc8d704afa3841f333748c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51f4a1407ef12405e16f643f5f9d2002b4b52ab9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f284a4e7c8861381b0139b76af4d5f970edb7400 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2528d11844a856838c0519e86fe08adc3feb5df1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31fd955dfcc8176fd65f92fa859374387d3e0095 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2b92c66bed6d1eea7b8aefe3405b0898fbb2019 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94ca83c6b6f49bb1244569030ce7989d4e01495c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8e914eb0dfe6a0eb2de66b6826af5f715aeed6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e6827e98c2732863857c0887d5de4138a8ae48b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85f38a1bbc8fc4b19ebf2a52a3640b59a5dcf9fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83645971b8e134f45bded528e0e0786819203252 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6310480763cdf01d8816d0c261c0ed7b516d437a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d8269a04b2b03ebf53309399a8f0ea0a4822c11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b586fbb94d5acc6e06980a8a96f66771280beda ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ea7e265d1549613c12cbe42a2e012527c1a97e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bf8ce9464987c7b0dbe6acbc2cc2653e98ec739a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1b8d0c92e4b5797b95948bdb95bec7756f5189f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b4f92c8eea41f20b95f9e62a39b210400f4d2a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66c41eb3b2b4130c7b68802dd2078534d1f6bf7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc77e6b2862733a211c55cf29cc7a83c36c27919 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08e0d5f107da2e354a182207d5732b0e48535b66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5962373da1444d841852970205bff77d5ca9377f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec731f448d304dfe1f9269cc94de405aeb3a0665 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2efa1b19061ad6ed9d683ba98a88b18bff3bfd9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4486bcbbf49ad0eacf2d8229fb0e7e3432f440d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b02662d4e870a34d2c6d97d4f702fcc1311e5177 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0210e394e0776d0b7097bf666bebd690ed0c0e4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d248bb8362808121f6b6abfd316d83b65afa79 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b1cfcc629e856b1384b811b8cf30b92a1e34fe1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57d053792d1cde6f97526d28abfae4928a61e20f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bce7cc4a43e5843c9f4939db143a9d92bb45a18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6e23ed24b35c6154b4ee0da5ae51cd5688e5e67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba7c2a0f81f83c358ae256963da86f907ca7f13c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fac8d40f535ec8f3d1cf2187fbbe3418d82cf62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a25365fea0ea3b92ba96cc281facd308311def1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76ac61a2b4bb10c8434a7d6fc798b115b4b7934d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d5d143f72e4d588e3a0abb2ab82fa5a2c35e8aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b29388a8f9cf3522e5f52b47572af7d8f61862a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9db2ff10e59b2657220d1804df19fcf946539385 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3910abfc2ab12a5d5a210b71c43b7a2318311323 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bbf02e0c648177b164560003cb51e50bc72b35cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d5df2ce3addd9e9e1863f4f33665a16b415b71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 965ccefd8f42a877ce46cf883010fd3c941865d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0e0b97b1d595b9b54d57e5bd4774e2a7b97696df ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f858c449a993124939e9082dcea796c5a13d0a74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66306f1582754ca4527b76f09924820dc9c85875 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdb4c7cb5b3dec9e4020aac864958dd16623de77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1a82e45fc177cec8cffcfe3ff970560d272d0bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12db6bbe3712042c10383082a4c40702b800a36a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dfa1685aac22a83ba1f60d1b2d52abf5a3d842f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dd7aca043c197979e6b4b5ff951e2b62c320ef4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6411bf1bf1ce403e8b38dbbdaf78ccdbe2b042dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52912b549289b9df7eeada50691139df6364e92d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b3c16c39953e7a6f55379403ca5d204dcbdb1e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d678792d3154d5de04a5225079f2e0457b45b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67291f0ab9b8aa24f7eb6032091c29106de818ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54709d9efd4624745ed0f67029ca30ee2ca87bc9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1c40f46bd547be663b4cd97a80704279708ea8a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b6cde8de6d40715cf445cf1a5d77cd9befbf4d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ef12ae4c158fa8ddb78a70dcf8f90966758db81 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a56136f9cb48a17ae15b59ae0f3f99d9303b1cb1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90dc03da3ebe1daafd7f39d1255565b5c07757cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79a36a54b8891839b455c2f39c5d7bc4331a4e03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b3e769989c4928cf49e335f9e7e6f9465a6bf99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4aa750a96baf96ac766fc874c8c3714ceb4717ee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3430bde60ae65b54c08ffa73de1f16643c7c3bfd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b56d6778ee678081e22c1897ede1314ff074122a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8cb31db6b3970d1e983f10b0e0b5eeda8348c7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aba0494701292e916761076d6d9f8beafa44c421 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- feed81ea1a332dc415ea9010c8b5204473a51bdf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a962464c1504d716d4acee7770d8831cd3a84b48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e482a20ab221cb6eca51f12f1bd29cda4eec484 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58998fb2dd6a1cad5faffdc36ae536ee6b04e3d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 251128d41cdf39a49468ed5d997cc1640339ccbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a99953c07d5befc3ca46c1c2d76e01ecef2a62c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24d4926fd8479b8a298de84a2bcfdb94709ac619 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67260a382f3d4fb841fe4cb9c19cc6ca1ada26be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55c5f73de7132472e324a02134d4ad8f53bde141 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53373c8069425af5007fb0daac54f44f9aadb288 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2b820f936132d460078b47e8de72031661f848c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dbfd290609fe43ca7d94e06cea0d60333343838 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a358f2cfdc46a99db9e595d7368ecfecba52de0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ee7e1a72aa2b9283223a8270a7aa9cb2cdb5ced ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 454fedab8ea138057cc73aa545ecb2cf0dac5b4b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d4859e26cef6c9c79324cfc10126584c94b1585 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 076446c702fd85f54b5ee94bccacc3c43c040a45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67648785d743c4fdfaa49769ba8159fcde1f10a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8503a11eb470c82181a9bd12ccebf5b3443c3e40 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eae04bf7b0620a0ef950dd39af7f07f3c88fd15f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a91cf1217155ef457d92572530503d13b5984fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecd061b2e296a4f48fc9f545ece11c22156749e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 280e573beb90616fe9cb0128cec47b3aff69b86a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d78e368f6877ec70b857ab9b7a3385bb5dca8d2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccff34d6834a038ef71f186001a34b15d0b73303 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f48d08760552448a196fa400725cde7198e9c9b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d851a6f3885ec24a963a206f77790977fd2e6c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc340779c5cd6efb6ac3c8d21141638970180f41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4459ca7fd21d549a2342a902cfdeba10c76a022 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91b9bc4c5ecae9d5c2dff08842e23c32536d4377 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 62536252a438e025c16eebd842d95d9391e651d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a67f25298c80aaeb3633342c36d6e00e91d7bd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dcfe2423fb93587685eb5f6af5e962bff7402dc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7231486c883003c43aa20a0b80e5c2de1152d17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 42e89cc7c7091bb1f7a29c1a4d986d70ee5854ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c352dba143e0b2d70e19268334242d088754229b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1aea3af6dcabfe4c6414578b22bfbb31a7e1840 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 086af072907946295f1a3870df30bfa5cf8bf7b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ee08fce6ec508fdc6e577e3e507b342d048fa16 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a6cb4aab975a35e9ca7f28c1814aa13203ab835 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2c1d194064e505fa266bd1878c231bb7da921ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cd6e82cfa3bdc3b5d75317431d58cc6efb710b1d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9db530e428f798cdf5f977e9b2dbad594296f05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da43a47adb86c50a0f4e01c3c1ea1439cefd1ac2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 044977533b727ed68823b79965142077d63fe181 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 693b17122a6ee70b37cbac8603448aa4f139f282 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80b038f8d8c7c67c148ebd7a5f7a0cb39541b761 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f773b4cedad84da3ab3f548a6293dca7a0ec2707 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16223e5828ccc8812bd0464d41710c28379c57a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ec27096fbe036a97ead869c7522262f63165e1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db0dfa07e34ed80bfe0ce389da946755ada13c5d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a644184b05e99a4809de378f21424ef6ced06e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34cce402e23a21ba9c3fdf5cd7f27a85e65245c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4f7d34f8752ab78949efcaa9f0bd938df33622 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14582df679a011e8c741eb5dcd8126f883e1bc71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 929f3e1e1b664ed8cdef90a40c96804edfd08d59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6224c72b6792e114bc1f4b48b6eca482ee6d3b35 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4106f183ad0875734ba2c697570f9fd272970804 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a26349d8df88107bd59fd69c06114d3b213d0b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7bbe6b01c82d9bcb3333b07bae0c9755eecdbbf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 096027bc4870407945261eecfe81706e32b1bfcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a77eab2b5668cd65a3230f653f19ee00c34789bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6f596d7f46cb13a3d87ff501c844c461c0a3b0a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3953d71374994a00c7ef756040d2c77090f07bb4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9932e647aaaaf6edd3a407b75edd08a96132ef5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 225529c8baaa6ee65b1b23fc1d79b99bf49ebfb1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dda3cbbd15e7a415c1cbd33f85d7d6d0e3a307a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4756f4a1298e053aaeae58b725863e8742d353a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dc46d735003df8ff928974cb07545f69f8ea411 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 284f89d768080cb86e0d986bfa1dd503cfe6b682 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 597fb586347bea58403c0d04ece26de5b6d74423 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb8289e80c8b9fe48456e769e0421b7f9972af3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 607d8aa3461e764cbe008f2878c2ac0fa79cf910 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dba01d3738912a59b468b76922642e8983d8995b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d52c5783c08f4f9e397c4dad55bbfee2b8c61c5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0685d629f86ef27e4b68947f63cb53f2e750d3a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abb18968516c6c3c9e1d736bfe6f435392b3d3af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18dd177fbfb63caed9322867550a95ffbc2f19d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6e1dcc992ff0a8ddcb4bca281ae34e9bc0df34b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09a96fb2ea908e20d5acb7445d542fa2f8d10bb6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 809c7911944bc32223a41ea3cecc051d698d0503 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0b10d965d6377c409ceb40eb47379d79c3fef9f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 961539ced52c82519767a4c9e5852dbeccfc974e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e7045c4a2b2438adecd2ba59615fbb61d014512 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7e09792a392eeed4d712b40978b1b91b751a6d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0374d7cf84ecd8182b74a639fcfdb9eafddcfd15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 762d8fb447b79db7373e296e6c60c7b57d27c090 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b88532a5346a9a7e8f0e45fec14632a9bfe2c89 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3787f622e59c2fecfa47efc114c409f51a27bbe7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c4dec45d387ccebfe9bd423bc8e633210d3cdbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3eae2cdd688d8969a4f36b96a8b41fa55c0d3ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3fc83f2333eaee5fbcbef6df9f4ed9eb320fd11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16d3ebfa3ad32d281ebdd77de587251015d04b3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dcb520caa069914f9ab014798ab321730f569cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f37011d7627e4a46cff26f07ea7ade48b284edee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e263b8f972f78c673f36f2bbc1f8563ce6acb10 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5262acbd33b70fb676284991207fb24fa9ac895 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9766832e11cdd8afed16dfd2d64529c2ae9c3382 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c16f584725a4cadafc6e113abef45f4ea52d03b3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af86f05d11c3613a418f7d3babfdc618e1cac805 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36811a2edc410589b5fde4d47d8d3a8a69d995ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6b661c04d82599ad6235ed1b4165b9f097fe07e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8e7a7df78fb98314ba5a0a98f4600454a6c3953 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 730177174bbc721fba8fbdcd28aa347b3ad75576 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4119a576251448793c07ebd080534948cad2f170 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f12c8c34371a7c46dad6788a48cf092042027ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0767cc527bf3d86c164a6e4f40f39b8f920e05d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b85fec1e333896ac0f27775469482f860e09e5bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0a7824253ae412cf7cc27348ee98c919d382cf2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36440f79bddc2c1aa4a7a3dd8c2557dca3926639 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3211ae9dbfc6aadd2dd1d7d0f9f3af37ead19383 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d0fb22b4f5f94da44075d8c43da24b344ae3f0da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 184cc1fc280979945dfd16b0bb7275d8b3c27e95 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b10de37fe036b3dd96384763ece9dc1478836287 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46b204d1b2eb6de6eaa31deacf4dd0a9095ca3fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c03da67aabaab6852020edf8c28533d88c87e43f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e7314c57ef56aaf5fd27a311bfa6a01d18366a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 651a81ded00eb993977bcdc6d65f157c751edb02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14fc8bd3e5a8249224b774ea9052c9a701fc8e0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1297f65226e3bfdb31e224c514c362b304c904c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d906f31a283785e9864cb1eaf12a27faf4f72c42 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6643a9feb39d4d49c894c1d25e3d4d71e180208a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 690722a611a25a1afcdb0163d3cfd0a8c89d1d04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbddc30a4d5c37feabc33d4c4b161ec8e5e0bf7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48c1e9b430cc84366f2c29bb0006e9593659835e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63c31b60acf2286095109106a4e9b2a4289ec91f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20f4a9d49b466a18f1af1fdfb480bc4520a4cdc2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90c4db1f3ba931b812d9415324d7a8d2769fd6db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e62078d023ba436d84458d6e9d7a56f657b613ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eec9b86a81693d2b2d18ea651b1a0b5df521266 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85ebfb2f0dedb18673a2d756274bbcecd1f034c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5df76d451ff0fde14ab71b38030b6c3e6bc79c08 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c93e971f3e0aa4dea12a0cb169539fe85681e381 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a728b0a4b107a2f8f1e68bc8c3a04099b64ee46c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5232c89de10872a6df6227c5dcea169bd1aa6550 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9562ae2e2436e052d31c40d5f9d3d0318f6c4575 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d283c83c43f5e52a1a14e55b35ffe85a780615d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ffddedf5467df993b7a42fbd15afacb901bca6d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50cbafc690e5692a16148dbde9de680be70ddbd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7968d136276607115907267b3be89c3ff9acd03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7180d50f785ec28963e12e647d269650ad89b31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b650c4f28bda658d1f3471882520698ef7fb3af6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d43a751e578e859e03350f198bca77244ba53b5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a4fc6abfb3b39237f557372262ac79f45b6a9fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 043e15fe140cfff8725d4f615f42fa1c55779402 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76ba0924be14d55d01db0506b3e6a930cc72bf0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8470777b44bed4da87aad9474f88e7f0774252a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c885781858ade2f660818e983915a6dae5672241 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a233359ce1ec30386f97d4acdf989f1c3570842 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74a1b17a29390660abe79d83d837a666141f8625 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d06f5af4311e6a1d17213dde57a261e30dbf669 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f9d492e479eda07c5bbe838319eecac459a6042 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70aa1ab69c84ac712d91c92b36a5ed7045cc647c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9448c082b158dcab960d33982e8189f2d2da4729 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8e223263c73a7516e2b216a546079e9a144b3a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 37cef2340d3e074a226c0e81eaf000b5b90dfa55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a2f5d05f4a8e3427d6dd2a5981f148a9f6bef84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fed0cadffd20e48bed8e78fd51a245ad666c54f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c43652c9f5b11b611e1aca0a6d67393e9e38c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f62c8d8bbb566edd9e7a40155c7380944cf65dfb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39eb0e607f86537929a372f3ef33c9721984565a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1ace258417deae329880754987851b1b8fc0a7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 887f249a2241d45765437b295b46bca1597d91a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3473060f4b356a6c8ed744ba17ad9aa26ef6aab7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2f9f4e7fd8af09126167fd1dfa151be4fedcd71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab69b9a67520f18dd8efd338e6e599a77b46bb34 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6e458c9f8682ab5091e15e637c66ad6836f23b4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94b7ece1794901feddf98fcac3a672f81aa6a6e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- efc259833ee184888fe21105d63b3c2aa3d51cfa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e21d96a76c223064a3b351fe062d5452da7670cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e331a0b5e2acd1938bf4906aadf7276bc7f1b60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- efe68337c513c573dde8fbf58337bed2fa2ca39a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfa37825b011af682bc12047b82d8cec0121fe4e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c30bf3ba7548a0e996907b9a097ec322760eb43a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 969185b76df038603a90518f35789f28e4cfe5b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f08d3067310e0251e6d5a33dc5bc65f1b76a2d49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 473fc3a348cd09b4ffca319daff32464d10d8ef9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 025fe17da390c410e5bae4d6db0832afbfa26442 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 595181da70978ed44983a6c0ca4cb6d982ba0e8b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f58702b0c3a0bb58d49b995a7e5479a7b24933e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158b3c75d9c621820e3f34b8567acb7898dccce4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c6c8dcc01b08748c552228e00070b0c94affa94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11d91e245194cd9a2e44b81b2b3c62514596c578 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78d12aa7c922551dddd7168498e29eae32c9d109 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3f91bd1c0e8aef1b416ae6b1f55e7bd93a4f281 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dff2004308a7a1e5b9afc7a5b3b9cb515e12514 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96364599258e7e036298dd5737918bde346ec195 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47f35d1ba2b9b75a9078592cf4c41728ac088793 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a04c15b1f77f908b1dd3983a27ee49c41b3a3e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fbf0ef97d6f59d2eb0f37b29716ba0de95c4457 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8340e0bb6ad0d7c1cdb26cbe62828d3595c3b7a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bef6d375fd21e3047ed94b79a26183050c1cc4cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a0d131ece696f259e7ab42a064ceb10dabb1fcc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0f79c58ad919e90261d1e332df79a4ad0bc40de ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 820d3cc9ceda3e5690d627677883b7f9d349b326 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d86d883714072b6e3bbc56a2127c06e9d6a6582 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cefc0df04440215dad825e109807aecf39d6180b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 617c09e70bfd54af1c88b4d2c892b8d287747542 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01a96b92f7d873cbd531d142813c2be7ab88d5a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 464504ce0069758fdb88b348e4a626a265fb3fe3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb2461d84f97a72641ef1e878450aeab7cd17241 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4832aa6bf82e4853f8f426fc06350540e2c8a9e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4fe6efbccc2ad5c2044bf36e34019363018630 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 385a8c6c1a72dc34f69c5273c1b4c1285cc1d3c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45d1cd59d39227ee6841042eab85116a59a26d22 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18b6aa55309adfa8aa99bdaf9e8f80337befe74e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8ec952343583324c4f5dbefa4fb846f395ea6e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a84459c6a5a1d8a81e4a51189091ef135e1776e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df39446bb7b90ab9436fa3a76f6d4182c2a47da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 567c892322776756e8d0095e89f39b25b9b01bc2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90f0fb8f449b6d3e4f12c28d8699ee79a6763b80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c51f93823d46f0882b49822ce6f9e668228e5b8d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76bcd7081265f1d72fcc3101bfda62c67d8a7f32 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce8cc4a6123a3ea11fc4e35416d93a8bd68cfd65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6503ef72d90164840c06f168ab08f0426fb612bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5402a166a4971512f9d513bf36159dead9672ae9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c242b55d7c64ee43405f8b335c762bcf92189d38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da88d360d040cfde4c2bdb6c2f38218481b9676b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b60ab31cfa2ca146069df8dbc21ebfc917db0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5c69071fd6c730d29c31759caddb0ba8b8e92c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b03c2eb07f08dd5d6174a04e4288d41f49920f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f875ddea28b09f2b78496266c80502d5dc2b7411 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c3255387fe2ce9b156cc06714148436ad2490d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01c8d59e426ae097e486a0bffa5b21d2118a48c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecb12c27b6dc56387594df26a205161a1e75c1b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 434306e7d09300b62763b7ebd797d08e7b99ea77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11837f61aa4b5c286c6ee9870e23a7ee342858c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 636f77bf8d58a482df0bde8c0a6a8828950a0788 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 703280b8c3df6f9b1a5cbe0997b717edbcaa8979 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 091ac2960fe30fa5477fcb5bae203eb317090b3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bbf6520460dc4d2bfd7943cda666436f860cf71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93954d20310a7b77322211fd7c1eb8bd34217612 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 1a70c883ed46decf09866fed883a38a919abb509 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 8c67a7e5b403848df7c13a02e99042895f86b35b ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 5a9a6f8d38374103fa5aa601b4dd4814b01f0727 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c946ee6160c206cd4cb88cda26cb6e6b6aa6ff52 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 20a85a80df2b7e0a9a55a67d93a88d3f61d2d8bd ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 82b21953b7dbf769ac0f8777a3da820b62f4f930 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 8df94a33e8ba7e2d8f378bd10df5512012745f1c ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 85db204ee24b01c8646ba39e2d2fa00637d4c920 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- dbc6dec2df75f3219d74600d8f14dfc4bfa07dff ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c87d2b394cfab9c0c1e066fb8bcbe33092d35b92 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 191912724d184b7300ab186fa7921d0687755749 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c5843a1f6abf5bb63b1cade6864a6c78cbcb0e34 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 078cbdf6adbd3ce0cca267397abcc7244491079f ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 838fd68e77b2e9da19210eb185630f0b6551986f ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- b5f32651ff5c1496438f0fb65f895a6fd78c4cf2 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- f5e202e7825dc4621c2395acb38fef23d90b8799 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- e852a8fc65767be911547db94f9052efa7faa537 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 28d14d0c423f7e360b14ff6b9914e7645fed6767 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- cdcc02f8aac7f21a2be85513c1fe8e7eb4f3e39a ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 82f92ce36cd73a6d081113f86546f99c37ea968f ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 9cbad67365396ebec327c8fe4e11765ed0dd7222 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 2b19ea4297b6e355a20188bc73acf9911db84c1e ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 0216e061edb1a0f08256c0e3d602d54984c2ad15 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- bf882d3312780aa7194e6ce3e8fcd82ee750ae32 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 86686f170fbd3b34abc770c21951ef49092064d3 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 5e470181aa8d5078f4ef1a2e54b78bf3dbf5ab64 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- b7ffcb61f437ea32196e557572db26a3282348b1 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 74a23126b9e2c2f80a37cccac5c0306f68594ffa ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- f7bc140e4625a69df3a89604088619d70b0d49a6 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- dea109086bca1fc6a159e11aabd9c6a2d15c40a9 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 5d0ba8ca4ad2c2483f048ed17e0086f5c49e7ed8 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 862010fc022548fcf88d3d407f5eed9a0897a032 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 8f83f391ee11fc4b94360ec69fbc531b89ffd1c8 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 3e37a7a43f51cbfb42fd4b1fce4c1471de47d308 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 65a27e98099099ef12d640658d3cad94ae4bd7a7 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 6e28f4c06fa6a05ff61cfa4946d9c0f1351aba69 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- e3408974e46691ff6be52f48c3f69c25c6d5ff72 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 6b82d0294f0db33117f397b37b339e09357210f2 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- b6f1b60e714725420bac996dea414ec3dcdc8c27 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 732bbd4527e61e11f92444ca2030c885836d97f2 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- c9fc2640dcea80f4fd2f60e34fd9fd4769afaca7 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 327a07ed89cbb276106bbad5d258577c2bb47f66 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- 775127943335431f932e0e0d12de91e307978c71 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- f66af1223bceacdd876fb5a45b27d039033670e7 ---- -ce41fc29549042f1aa09cc03174896cf23f112e3 with predicate ----- ca262ee4c7c36f0fac616763814f02cb659c9082 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 1a70c883ed46decf09866fed883a38a919abb509 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 8c67a7e5b403848df7c13a02e99042895f86b35b ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 5a9a6f8d38374103fa5aa601b4dd4814b01f0727 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 20a85a80df2b7e0a9a55a67d93a88d3f61d2d8bd ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 82b21953b7dbf769ac0f8777a3da820b62f4f930 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 8df94a33e8ba7e2d8f378bd10df5512012745f1c ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 85db204ee24b01c8646ba39e2d2fa00637d4c920 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- dbc6dec2df75f3219d74600d8f14dfc4bfa07dff ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- c87d2b394cfab9c0c1e066fb8bcbe33092d35b92 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 191912724d184b7300ab186fa7921d0687755749 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- c5843a1f6abf5bb63b1cade6864a6c78cbcb0e34 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 078cbdf6adbd3ce0cca267397abcc7244491079f ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 838fd68e77b2e9da19210eb185630f0b6551986f ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- b5f32651ff5c1496438f0fb65f895a6fd78c4cf2 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- f5e202e7825dc4621c2395acb38fef23d90b8799 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- e852a8fc65767be911547db94f9052efa7faa537 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 28d14d0c423f7e360b14ff6b9914e7645fed6767 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- cdcc02f8aac7f21a2be85513c1fe8e7eb4f3e39a ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 82f92ce36cd73a6d081113f86546f99c37ea968f ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 9cbad67365396ebec327c8fe4e11765ed0dd7222 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 2b19ea4297b6e355a20188bc73acf9911db84c1e ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 0216e061edb1a0f08256c0e3d602d54984c2ad15 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- bf882d3312780aa7194e6ce3e8fcd82ee750ae32 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 86686f170fbd3b34abc770c21951ef49092064d3 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 5e470181aa8d5078f4ef1a2e54b78bf3dbf5ab64 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- b7ffcb61f437ea32196e557572db26a3282348b1 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 74a23126b9e2c2f80a37cccac5c0306f68594ffa ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- f7bc140e4625a69df3a89604088619d70b0d49a6 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- dea109086bca1fc6a159e11aabd9c6a2d15c40a9 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 5d0ba8ca4ad2c2483f048ed17e0086f5c49e7ed8 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 862010fc022548fcf88d3d407f5eed9a0897a032 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 8f83f391ee11fc4b94360ec69fbc531b89ffd1c8 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 3e37a7a43f51cbfb42fd4b1fce4c1471de47d308 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 65a27e98099099ef12d640658d3cad94ae4bd7a7 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 6e28f4c06fa6a05ff61cfa4946d9c0f1351aba69 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- e3408974e46691ff6be52f48c3f69c25c6d5ff72 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 6b82d0294f0db33117f397b37b339e09357210f2 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- b6f1b60e714725420bac996dea414ec3dcdc8c27 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 732bbd4527e61e11f92444ca2030c885836d97f2 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- c9fc2640dcea80f4fd2f60e34fd9fd4769afaca7 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 327a07ed89cbb276106bbad5d258577c2bb47f66 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- 775127943335431f932e0e0d12de91e307978c71 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- f66af1223bceacdd876fb5a45b27d039033670e7 ---- -1a32625f14b304132196b359fcc918282bc7b3d7 with predicate ----- ca262ee4c7c36f0fac616763814f02cb659c9082 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 2826c8840a3ffb74268263bef116768a8fcc77b0 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a5ad8eb90ed759313bcc5cbec0a6206c37b6e2e6 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 1b15ac67eaefc9de706bd40678884f770212295a ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- c6f6ee37d328987bc6fb47a33fed16c7886df857 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 1b100a5e7d46bbca8fcdba5a258156e3e5cb823f ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 87c1a5b2028a68a1ee0db7a257adb6f55db0f936 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 8340f1a972bd5fbde8ffb07fb3aba8b84d06807c ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- f8c7e61f8b1d1e3b97f27105a2536619c074283a ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a714eea1336cf591b8fed481cc0ea15999bed60f ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 4af13d80d400a8338d3c2670eb98936549c26780 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -b173cb761838e9d380f2c41819715ecf8d9f28dd with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 0d236f3d9f20d5e5db86daefe1e3ba1ce68e3a97 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a5ad8eb90ed759313bcc5cbec0a6206c37b6e2e6 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- bd963561fa83a9c7808325162200125b327c1d41 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- c6f6ee37d328987bc6fb47a33fed16c7886df857 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 1b100a5e7d46bbca8fcdba5a258156e3e5cb823f ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 953420f6c79297a9b4eccfe7982115e9d89c9296 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 8340f1a972bd5fbde8ffb07fb3aba8b84d06807c ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- f8c7e61f8b1d1e3b97f27105a2536619c074283a ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- da18208c7a51000db89a66825972d311ce8d8b1e ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 4af13d80d400a8338d3c2670eb98936549c26780 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -b992298adfb778adce5d3b2e38fa81d97b27d6de with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 0d236f3d9f20d5e5db86daefe1e3ba1ce68e3a97 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a5ad8eb90ed759313bcc5cbec0a6206c37b6e2e6 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 310ebc9a0904531438bdde831fd6a27c6b6be58e ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- c6f6ee37d328987bc6fb47a33fed16c7886df857 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 1b100a5e7d46bbca8fcdba5a258156e3e5cb823f ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- e3e813b7d2b234fb0aa3a3b4dc8d3599618b72d4 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 8340f1a972bd5fbde8ffb07fb3aba8b84d06807c ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- f8c7e61f8b1d1e3b97f27105a2536619c074283a ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 4af13d80d400a8338d3c2670eb98936549c26780 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -e30c24a0089b021cae86d1a98a9fcc8b6e3c8b79 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 0d236f3d9f20d5e5db86daefe1e3ba1ce68e3a97 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 310ebc9a0904531438bdde831fd6a27c6b6be58e ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- c6f6ee37d328987bc6fb47a33fed16c7886df857 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- e3e813b7d2b234fb0aa3a3b4dc8d3599618b72d4 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 8340f1a972bd5fbde8ffb07fb3aba8b84d06807c ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- f8c7e61f8b1d1e3b97f27105a2536619c074283a ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 4af13d80d400a8338d3c2670eb98936549c26780 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -78eb4778aed234c96affc2d8eeaf8f935499bc86 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9a1baa6242c21e51d4d51c03bea35351499a6281 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 14619275dc60eef92b3e0519df7fcd17aabceee7 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 396bb230001674bed807411a8e555f517011989f ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 0fea59845b2c53a9b4eb26f4724ad547c187b601 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 2d8f3560a2b8997a54a1dcbd4345c1939f2a714e ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7044b6ca8e6ef0d91ef77bcb2bb5a37722a66177 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 091cf78cb2d0e23f3638e518357343f4695f3c59 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -37278dcb6787853bd6906a9b31f065eb974d2262 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 770dbba7a5eded885bf959a783ce126febdfc48e ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 14619275dc60eef92b3e0519df7fcd17aabceee7 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 396bb230001674bed807411a8e555f517011989f ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 0fea59845b2c53a9b4eb26f4724ad547c187b601 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 2d8f3560a2b8997a54a1dcbd4345c1939f2a714e ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7044b6ca8e6ef0d91ef77bcb2bb5a37722a66177 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 091cf78cb2d0e23f3638e518357343f4695f3c59 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- c56bb1face16ffe7e3b616b2dd9e329ada11dba0 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 717c42036033da71332cface6b1dcfc00f2f348d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- b9b1ac4f5d712d6a9fa4b069ea49d79016ee78a5 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -bca5612310925faea912572abb039b1136ddd75f with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 770dbba7a5eded885bf959a783ce126febdfc48e ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 295ed528bf629c70ae92c92837999cc7556dd6a9 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- c8493379f202e3471c382be92fb1d8d458935a3b ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 64917257e12a7a4a1b72354368e45fd9c11de2f4 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7adfd67098a0ad99087ce4b4804c13d0ceff309c ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- d44f7bda0c4653810b449a36832c7de8ac40413b ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 091cf78cb2d0e23f3638e518357343f4695f3c59 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 2d0fb973997c6a38befa2b7e5f0264c9cad6b2e0 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -8116f5c284ca1227b7e489271e2d9c1bc2633f7e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 770dbba7a5eded885bf959a783ce126febdfc48e ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 06c0c4b1bff2d0f108d776ca3cdcfe2ed5e2ba02 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- c8493379f202e3471c382be92fb1d8d458935a3b ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 35c6691a626b1b7bddb2fac9327f4466d57aa3e5 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7adfd67098a0ad99087ce4b4804c13d0ceff309c ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- d44f7bda0c4653810b449a36832c7de8ac40413b ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- e35090a1de60a5842eb1def9e006a76b6d2be41e ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -e6d5951238b7c58df410daf00144ff97d7e6245e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 06c0c4b1bff2d0f108d776ca3cdcfe2ed5e2ba02 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- c8493379f202e3471c382be92fb1d8d458935a3b ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 35c6691a626b1b7bddb2fac9327f4466d57aa3e5 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7adfd67098a0ad99087ce4b4804c13d0ceff309c ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- d44f7bda0c4653810b449a36832c7de8ac40413b ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- e35090a1de60a5842eb1def9e006a76b6d2be41e ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7a6770c42fa6cf9b10c8d3b324fb9f465b1675cb ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- da7236c8e1342cb9436f41f263beed0b9facba62 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 94ac03e0c81decf327d137f83c84cf9096f18a3d ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -0f553a341cdde34d8a92030965b8219a36945308 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 2a7f7345373d126ab2cd6d7dc2e6acd36488a87d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 04de351f49d44be309665bb5c593cc431eb2dfba ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 593bb90a269f19a49fc0cff64079741e7c38a052 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- eb3920f5a771bb12bbc1c8868ee25fa6746d50bb ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 057530a68c6ae15065403cc399dd9c5ef90a0b1e ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 093fdf0eebff8effdf774b3919a11ca70bd88cbc ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 79c2dd8ccbcebd691eb572cf2504c0d9b2448963 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -660c9bdf86b2245ba179fa694a8d30ed04be9a2a with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9f649ef5448f9666d78356a2f66ba07c5fb27229 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a58386dd101f6eb7f33499317e5508726dfd5e4f ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 98a3f5a1f904d7cb62b00573dc16fec8bbf299af ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6aa5e0ac7c8e94441e36a283fbc792ce331984ac ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9a9a625842b916246b065226150dc7df0d2b947d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- cef0c7bad7c700741c89ade5a6a063fbcd22ef35 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 1d6eed20bc6ac8356f1ac61508567604aae768e3 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 4aee12808ee5a2ca96f1a8c273612c54a58dbfff ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 626c4df94212ac46ffd1413b544bbf50787d8b46 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 93c7d2c2ff2c5300366e7d2c7e74a1966f4ce7c6 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -fb22467ae40adc5e2dae483e202e52649eec0944 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 98a3f5a1f904d7cb62b00573dc16fec8bbf299af ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6aa5e0ac7c8e94441e36a283fbc792ce331984ac ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- cef0c7bad7c700741c89ade5a6a063fbcd22ef35 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 1d6eed20bc6ac8356f1ac61508567604aae768e3 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 4aee12808ee5a2ca96f1a8c273612c54a58dbfff ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 626c4df94212ac46ffd1413b544bbf50787d8b46 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 93c7d2c2ff2c5300366e7d2c7e74a1966f4ce7c6 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 8b7677441a2a56297485c09789d77baecdba87c5 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -ee694c04f87787897a394e76c3bd6461c8581a5a with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- d7cc410b3f2fab13428969d82571105d76be97bc ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9707400209259ef4caf6972e5ea5cd1f63668aeb ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3d7ee1cef2f194e255bdf9445973bbe8500ca1f7 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- db9eb86857adb9c704ccfa29fce521d7695b9f17 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- c9e2ab599fcd33859828a822be05628085d00b12 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 626c4df94212ac46ffd1413b544bbf50787d8b46 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 93c7d2c2ff2c5300366e7d2c7e74a1966f4ce7c6 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- e5264a0d0bde9b0e40dfd632f021f6407120d076 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -d9f615db8feff57cd1e5d4ac0a42d81001bde4f2 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- df6e1d43a734e411e5c158409e26a2575775be5d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9707400209259ef4caf6972e5ea5cd1f63668aeb ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 69278812572c21d54293dbd56987cfabbee42a49 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- db9eb86857adb9c704ccfa29fce521d7695b9f17 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- c9e2ab599fcd33859828a822be05628085d00b12 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 28ebda015675a0dc8af3fbd1cb18af034290433e ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 93c7d2c2ff2c5300366e7d2c7e74a1966f4ce7c6 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- e5264a0d0bde9b0e40dfd632f021f6407120d076 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -409595f1b5368461b5afc7ee0db642c6a83fd538 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- c32d4b14c7c8ced823177d6dddae291a86e2a210 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9d866aef43909ac300c0176986519e70cbb684a7 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 291fd09ec351fb9fbaae78fd9ce95ef8399b76d3 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a29b7c0fa94dfd092f2cf3aaa4781d5fe4c7002a ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- c9e2ab599fcd33859828a822be05628085d00b12 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 47f9c2ce9391713eac3c846468536882e42c997d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- f6e34dac0fd7fdbfdf1631b35103fd7aa968cf88 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- e5264a0d0bde9b0e40dfd632f021f6407120d076 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -e0520e90acb8af1f0efd62cbdbce7061be702d51 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 4abac49168e53467b747cb847aed9eb8ba924dce ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6d4db21bab63d8f45e59fdac2379af57ed7e7d54 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- b22996efb211ef14421a272ba28cde7402afaedf ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 697cf27c651cd59c2338c65fd377c8363d729303 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- c50d9d2deebeec9318fb605f88d4506ab5d79f41 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 09215b1e12423b415577196887d90e9741d35672 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- df9ea039c996b519de6750d2dbf2a53fc1225472 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 67489b390a523f855facd28f0932130bd6210fa7 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -ce472b595fa84369fc34fc0051894f4e9d701b9c with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 6b4148bdabd98bdcdf2bcba204c642fb7b88c8a5 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9643dcf549f34fbd09503d4c941a5d04157570fe ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9faa1b7a7339db85692f91ad4b922554624a3ef7 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 49d69d1d0433e4aa5d4a014754ba9a095002a69b ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 04de351f49d44be309665bb5c593cc431eb2dfba ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 496a5d54425d284d0fbf4e127351969052c621f2 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- eb3920f5a771bb12bbc1c8868ee25fa6746d50bb ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 79c2dd8ccbcebd691eb572cf2504c0d9b2448963 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -860b245dc034d4089c2ecbaf4926e128bb591ff1 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 49d69d1d0433e4aa5d4a014754ba9a095002a69b ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 04de351f49d44be309665bb5c593cc431eb2dfba ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 496a5d54425d284d0fbf4e127351969052c621f2 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- eb3920f5a771bb12bbc1c8868ee25fa6746d50bb ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 79c2dd8ccbcebd691eb572cf2504c0d9b2448963 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -1a9b62fea6b26448319ba191b39c5f254eef9ae0 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 49d69d1d0433e4aa5d4a014754ba9a095002a69b ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 00fa9a35eb814f2cfc6daa3d23400a5d9576088e ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 496a5d54425d284d0fbf4e127351969052c621f2 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9b5567b95d30a566564067470676c39194620a99 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- ccada1951876151b5d60ce8a501aa0ccd88945d7 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- aca638438cfd79210a9e0dae656b5aa3fa1b75ed ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -bd1a8bacc0bf311642d66c01a38f9f2602cfd5f6 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 2317d6a9aae471ed6a2a7f43ff676b949331661d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 271074302aee04eb0394a4706c74f0c2eb504746 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 00fa9a35eb814f2cfc6daa3d23400a5d9576088e ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 360114c20d88166e40e47a49d2ffc870c6b9d1b0 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9b5567b95d30a566564067470676c39194620a99 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- d45875739cc36ec752e5d1264b97af9e09e3de0e ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- aca638438cfd79210a9e0dae656b5aa3fa1b75ed ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -7e02c9fda54c55b5ed729831ae3586b30dfbfb59 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 2317d6a9aae471ed6a2a7f43ff676b949331661d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 00fa9a35eb814f2cfc6daa3d23400a5d9576088e ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 360114c20d88166e40e47a49d2ffc870c6b9d1b0 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9b5567b95d30a566564067470676c39194620a99 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- d45875739cc36ec752e5d1264b97af9e09e3de0e ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- fb7fc8909c027074289eea30ef3a02d41a9ffa0d ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- e9336f2c1ab37ae94c11a56db25b24fe37baeea5 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3a3dc564e23d9e7536e3073e440722943a1ae0b2 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 669665c05771ef99d45154181091bf3a7cb0a991 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- aca638438cfd79210a9e0dae656b5aa3fa1b75ed ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- a8b128b1a3692a00122c52958141046030ae55e9 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 487c5dad31b6bc77ccaab6f4d22f2d2b83dd9e73 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -cfb0a64a630f857aa86f8afdb6a88b10a9c70c6e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- d6dea844079663a732630f4e3e04380734f8722f ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 2317d6a9aae471ed6a2a7f43ff676b949331661d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 975db6de6685819b11cd2c1c2dad102fd11a1cf6 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 26cdf1af4ba18099346d7b2a0956e121590fd6c1 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 360114c20d88166e40e47a49d2ffc870c6b9d1b0 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 45365655583f3aa4d0aa2105467182363683089c ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 901e52afc6a6d2040259cc64b6a0ada27d65335d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a79cd81c0e0bc2ffc0a2b842e276dc8e115fab4a ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 8b7bdfa81758fc408ee86f3c58ba4a67d1f2c01d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 4386aa986e57e821a09edf7ea7e4dfe170858a8e ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a3874259ba7c953bd96e390a7b83d409e983b418 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- e780d2badceb96998e2a044af492378ae405b602 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- d45875739cc36ec752e5d1264b97af9e09e3de0e ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 76b0ecc9827f49246f1057e35d17a37c0ddfcb1f ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 2f43e82fda2d5a1f4e50497e254eeb956e0b2ce9 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 583a5079970a403d536e2093e093fefb563578af ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- ecac13c8749531840b026477b7e544af822daff6 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 669a8f62cb75410207229f08f3fa8db519161f51 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3d33d7e33eb75370c1f696e9da8ce6e00af13c74 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- fa3337c91573b28c2f98fe6dfa987ce158921605 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -c9575089d08f9c1f701c7fdb5305b38142131975 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 47ab8318e5f3b02f34d0e2d8899746050dcf1dbe ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 71c2c9831cfd4f535462bb640fcca662cb322d8e ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 71af941b2e981c4e014cbeab49af2bd559170707 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9319639a5d46e51192debb8eaa8f47f9b406ade0 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- f84e8c65d9ff3359659f357e56f09c5d6d7eb469 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- e92293e422e1be0039e831a104dd908ecdd5ce8a ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- fdfb79282f991edafd39266a0800ec70969c14ba ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 989dd4fe5ce7aca2f66b48e97790104333203599 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -8bf206075de062aec4b1fb1c046ed74324a823df with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 954c889b8197d3d7e3bbf6812942967539d780f9 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 71c2c9831cfd4f535462bb640fcca662cb322d8e ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 71af941b2e981c4e014cbeab49af2bd559170707 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9319639a5d46e51192debb8eaa8f47f9b406ade0 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- f84e8c65d9ff3359659f357e56f09c5d6d7eb469 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- e92293e422e1be0039e831a104dd908ecdd5ce8a ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- fdfb79282f991edafd39266a0800ec70969c14ba ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 989dd4fe5ce7aca2f66b48e97790104333203599 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -4b93d00ddd8b41b61977fa767dd7d1627915c763 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 954c889b8197d3d7e3bbf6812942967539d780f9 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- d74ea7a48497691adaa59f53f85f734b7c6f9fd7 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9bacebf9147aa0cdc22b954aeddeffe0f4b87c69 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9df1f6166bff415022d2d73ba99a0fb797b2644a ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 286271f9add31f25ccfbb425b459ce46a78905de ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- e92293e422e1be0039e831a104dd908ecdd5ce8a ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- aff595f1d6233c85c127d2c0df1594dfe63f604d ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 29ba463b52497804f8dc90e345f153d7d32a1291 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -2aacdc9de8fffaf4e6160755ec134b98b1f61e86 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- d74ea7a48497691adaa59f53f85f734b7c6f9fd7 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9bacebf9147aa0cdc22b954aeddeffe0f4b87c69 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9df1f6166bff415022d2d73ba99a0fb797b2644a ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 286271f9add31f25ccfbb425b459ce46a78905de ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- e92293e422e1be0039e831a104dd908ecdd5ce8a ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- aff595f1d6233c85c127d2c0df1594dfe63f604d ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 29ba463b52497804f8dc90e345f153d7d32a1291 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -bd1af57549b98d7c8b28cc1a867df75bfd542044 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- f9a6d45a3284701708dfd5245ac19167f51e166f ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a7cd7a1f0d9d0376018792491aac64705d498b3e ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 8ad4b2db6c1edf739374b48665411550c7dd341a ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- db89bfe8694068b0b828f5dba11082a916ea57a6 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 18e36c003246c2051d0453233de1f31e89152a31 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 55f73f66fd7c87edd73c69a585ad2d39dc017362 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 13846555356af4891a26d9e0cf2270e22c3ed5e7 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -316d7948f2a3a62d7c39fb2c646b332e4ba359d8 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- bf9e838b7f618a89013cc6eec3516b0f526011da ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 099eb85c9cfda1d214896fec3bb5db48b9871bea ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- ad90f84b0b6ffa265da7b002fea18ad852cc5872 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 1e7c654f5d96e96aee8f733e01f9b85af6a31127 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 18e36c003246c2051d0453233de1f31e89152a31 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- aaa7cecc818a07fe53dc0fa77f35a3b7a28a14d4 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 4a5ee8ac9eec188a9580ec4b1d81b601f11a82a8 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -765d2cc43cb13ae3f012fe46db3ca8910ed0149e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 324d549540c79db396afbfc3f27c4fbc9daff836 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 099eb85c9cfda1d214896fec3bb5db48b9871bea ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 1aa990b63d6c78a155e5ff813129ca2b0e9b374e ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 1e7c654f5d96e96aee8f733e01f9b85af6a31127 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 18e36c003246c2051d0453233de1f31e89152a31 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- ef440cd1c7e802c347d529ca1545003f7b14d302 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 4a5ee8ac9eec188a9580ec4b1d81b601f11a82a8 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -602068aa79e32eb575b6e65a2f66ba970fa46f52 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 360f110bba2d0e918dcb695f0b342531b24f8cca ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 383f1332c13f9e82edb6a52280c4c19f2836b1c2 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 71c8e8904eaa9506b1e4d163465534143b142ed9 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 42e015b67e91ee0a42b8b8f05669b100422e1672 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 2bdb647caf34078277eb93af138e93c74da5f917 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 6f4dce637c8b7e29f162bf69f91c42f8300c29d0 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 93a2b70f15af712b32f5ec0390756d2f99680c06 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- aff595f1d6233c85c127d2c0df1594dfe63f604d ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 29ba463b52497804f8dc90e345f153d7d32a1291 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -2dd49ceb26d56241e7d5578aa26c3e6b2031115c with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 383f1332c13f9e82edb6a52280c4c19f2836b1c2 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 71c8e8904eaa9506b1e4d163465534143b142ed9 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 2bdb647caf34078277eb93af138e93c74da5f917 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 6f4dce637c8b7e29f162bf69f91c42f8300c29d0 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 93a2b70f15af712b32f5ec0390756d2f99680c06 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- aff595f1d6233c85c127d2c0df1594dfe63f604d ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 29ba463b52497804f8dc90e345f153d7d32a1291 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -1d734976d6984236690de77ff4b6eacf31e6b3c7 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 2a8489019cdd3574ea87c31a5ec83ca0fa3b0023 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- f8062d01dc23bab6a0cc6dc868f3a3fb91876b25 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9b8f8c59e31b12ea5bbe84ffc4cb204d5e799dc6 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 270a77486489810256f862889d3feb2704d40ea7 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 93a2b70f15af712b32f5ec0390756d2f99680c06 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 8cfc2cadea0542969e7304e173338fe4a08957a3 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 036ae1e942671feb0509778a993e2e4b6b3e5abe ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -1b338262374193e747cb8c10a540395b4644a636 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- e7a00a07ba7b653c42ad4e9c5979898fd9525eed ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- dc2e623daf921e4973ded524e7e7183e3f2f14e4 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 6b59af9dde79485cd568c4cb254de7f5ac03bf5e ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- f6c7e5ae379943e7832673ad68d45e6fb1d50198 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 80d237d73e92c490196cbf067cf6a6be4b749696 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 93a2b70f15af712b32f5ec0390756d2f99680c06 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 86057d8bce7cfb413992e5cd953addee9f35fe2b ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- dbd78ac4b81ae672d08dc5805b6c1dea36090da0 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3c32387841a4bfaea75e9f38148b25577902879a ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -39348788be4e9acf31abcf4d81e391cdd9183304 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a5dc6eacfb36d70db3112453463ded8874b871fe ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- dc2e623daf921e4973ded524e7e7183e3f2f14e4 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 06727d08d1c154f7d7c6e33fced1fba602b96ee9 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- f6c7e5ae379943e7832673ad68d45e6fb1d50198 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 86057d8bce7cfb413992e5cd953addee9f35fe2b ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 59d3af1e2f7e0dbfbd5f386b748d9d54573dafc2 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3c32387841a4bfaea75e9f38148b25577902879a ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 34aa4d61dba4605d4e221b47c83f30069c90861f ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -b06845329bd529d6130e9c88f56fe5dd84de97cf with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 554bde9938f7e8ebf16ad4c1d37e00f453616a0f ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 1681b00a289967f2b2868f51cff369c3eb2bf46b ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6a7db6164e74b0de064180d8bdae2b94b562c621 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- bf6f8228b7409d51d8c4c3fc90373331ec115ec3 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 86057d8bce7cfb413992e5cd953addee9f35fe2b ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 630fa1fc2dffc07feb92cf44c3d70d6b6eb63566 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3c32387841a4bfaea75e9f38148b25577902879a ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 6b62c958d3a6f36ef7b15deeec9d001a09506125 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -d029b6f65e0bc56c292f8078b1843da9e73b69dc with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 96d4d37f7f971bf62c040e3f45a6eeb5b31cd325 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- b4fca61a55a1a9fb51719843ab61cb4d1d0a246d ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 6ce26d0304815d1ac8f2d161788a401017e184af ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- f0e4ead660491ba0935378e87b713d8c346993ba ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 86057d8bce7cfb413992e5cd953addee9f35fe2b ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 1ed3396dc2d2e12b96b872f1c268f967b06409ca ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- c7a4c01b77a161980d1f413119121a6c20ea2c37 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- d66764b3ef06230d2e7f6d140e498410a41abf0a ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -616cc636a1f5aacd31d3b7707d621e5fe8397151 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a35f90375c790260f94ea6cb1cda25b5f002e456 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- b4fca61a55a1a9fb51719843ab61cb4d1d0a246d ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- b03a21c919171b06c6291cdf68a14a908d1c7696 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- f0e4ead660491ba0935378e87b713d8c346993ba ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 0e52fab765a18d46dfc1e35228731a6c539afec7 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 86e893efc62c03ea4cbecc030a64dde708e81f49 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- c7a4c01b77a161980d1f413119121a6c20ea2c37 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- d66764b3ef06230d2e7f6d140e498410a41abf0a ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -59d864deb2049863dc4d989927c360851ca4c280 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9d1a8ce05cd7de2b29fb8eebd21e3829ba0a4069 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 5f580eb86e2c749335eb257834939ea1440c549a ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- fad5c147d8a1a19e1ae5bfe0609c618f2c0a254d ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 58138bbddb2927a4738ef3db7286fab0a8f23531 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 18e36c003246c2051d0453233de1f31e89152a31 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 0e52fab765a18d46dfc1e35228731a6c539afec7 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -7b35b4b87dba41b417cdc4ce276c3f2af3fca7c3 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 870dbc732c60c7180119ef3fa950fa1cfa64e27f ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- aa1151b2e9d294c53e4549d2be240d33bee830d5 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9d588990b9d6dfd93cec444517e28b2c2f37f2af ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 4b22448cea783186ecbe1a62d4a7f2bd46c8abe0 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 0b4b19c222f928364cf716e74995816592b5a1a8 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 13472debdc1d364e417e9b1ef9bee1264adccd4f ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 51315fe32dc12c2a837f02aed1dbbfb1588d0799 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 96d35010ef1f545b667a32c92fc633cb055b4804 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 0e52fab765a18d46dfc1e35228731a6c539afec7 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- f54b7661ea71a6d55846524d9cb557556285128e ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- f1aa0b3b4aed4691a59bc0be6400030490ea2206 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -fbef0d64b08db9d9e6b7c7f812b70c666243804c with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5449c4376d0b1217cb9a93042b51aa05791acfe2 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5f580eb86e2c749335eb257834939ea1440c549a ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- efdd3d41e1f7209e7cfccaa69586fdaa212a2a04 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7207072c7e45bca3765f3267d892b7b241acbd65 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 58138bbddb2927a4738ef3db7286fab0a8f23531 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- d30d1250fa40d6b9b3aedc5ab3be820355a95b72 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 8f5d4dca346e8ef2843169537d57b7b3c12eb78e ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- ff7458e115d6df2458848ef9fa63ca99845db966 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -9698421c1646a517cca69cdad86ebccf3be8c034 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 5449c4376d0b1217cb9a93042b51aa05791acfe2 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- aa1151b2e9d294c53e4549d2be240d33bee830d5 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- efdd3d41e1f7209e7cfccaa69586fdaa212a2a04 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 4b22448cea783186ecbe1a62d4a7f2bd46c8abe0 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- d30d1250fa40d6b9b3aedc5ab3be820355a95b72 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 8f5d4dca346e8ef2843169537d57b7b3c12eb78e ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -991ed402b4f6562209ea56550a3c5050d1aa0118 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 627a9935c5a7baa31fd48ec4146f2fe5db44539c ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- aa1151b2e9d294c53e4549d2be240d33bee830d5 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 564131dc8a540b7aa9abc9b6924fed237b39f9a2 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 4b22448cea783186ecbe1a62d4a7f2bd46c8abe0 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 8f5d4dca346e8ef2843169537d57b7b3c12eb78e ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -43a63b045e538a38161c8da5e154ff1c9436ea4e with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- fe3469174e4e87a1366e8cc4ca5a451b68b525af ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3c08157c10d77f1a1cd779b6d50673c739d9b6ef ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 1efd57bbcc1ca6fdb96ac5cfc779cc3ef27fe1cb ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 110ae5310fe5c791cbfed35dad02493913a3ba21 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- edaeee836a137ccbd995c74b93d56cb048e50cdc ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- e720856b4b81854f678b87d6fd20cee47d9b6b23 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -547e8af2f10ffa77c4ed4d0a8381e64141f986b4 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 4bdc4bc748c2c5f5cce03a727cabaee20e373190 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- aa1151b2e9d294c53e4549d2be240d33bee830d5 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 0b275eb563418cdcdce2a3d483a13803c85d7a06 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 4b22448cea783186ecbe1a62d4a7f2bd46c8abe0 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 682b76521d5f74c02d711b43edabb2801e71d657 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 7550e1d638ab929acb98e1dc6972288eb8b12955 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -e2f10b1aa474a29bdb6421598eea9fc9d9f044a4 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 4bdc4bc748c2c5f5cce03a727cabaee20e373190 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3c08157c10d77f1a1cd779b6d50673c739d9b6ef ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 0b275eb563418cdcdce2a3d483a13803c85d7a06 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 110ae5310fe5c791cbfed35dad02493913a3ba21 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 682b76521d5f74c02d711b43edabb2801e71d657 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- e720856b4b81854f678b87d6fd20cee47d9b6b23 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -73f2d8ad35e02a443aef3381b8610c1351cdfc99 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- d238defeab2d93e835ce30358571d772a4b8e1f4 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3c08157c10d77f1a1cd779b6d50673c739d9b6ef ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- fdd41f5536c40a79a715a27c413087cf1b04abec ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 110ae5310fe5c791cbfed35dad02493913a3ba21 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- c7ec38f600fce551b445514e24f5804b43de55fc ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 1ceb7449e54b5276c5cc6a8103997c906012c615 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 4618ecf2709b47b14145c26cd56b1d2c13d887c3 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- e720856b4b81854f678b87d6fd20cee47d9b6b23 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -01fb5ddba393df486d850c37f40c9a87f4a28a14 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- bb7fb53ea164d6953b47dededd02aad970bcbd71 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 97db5d0b2080150a26f7849f22ff6cbedc7e76dc ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6bcb5cf470ee673fdb7a61ebf0778d2a2baf1ee1 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 0940aa6cb561f7b69342895842c62ad73ed43164 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 1ceb7449e54b5276c5cc6a8103997c906012c615 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- d649bb1b92a17e0f9ec4ff673dc503003c5d5458 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- ea3032c18ae6963b94a080eb91c50fe6592b0e5d ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -501def85e5660674574bba39564f98b5eda484b8 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 5700780944c01b4cd30f96a325c1602553aaa19e ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 97db5d0b2080150a26f7849f22ff6cbedc7e76dc ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- b31b5a335457d1fc781f67f2cc12bf068ad41b58 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 0940aa6cb561f7b69342895842c62ad73ed43164 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9a5d2fd40fc31f0601749ab2e3a45bfb4487274c ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- d649bb1b92a17e0f9ec4ff673dc503003c5d5458 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- ea3032c18ae6963b94a080eb91c50fe6592b0e5d ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -d362befc96472a2178c14199cf287a9497e86478 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 114959f89549d199828ebdecf7553936052fbb5f ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- f7f7ff067e3d19e2c6a985a6f0ec6094e7677ae2 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 97db5d0b2080150a26f7849f22ff6cbedc7e76dc ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 0ed54e915a0e618e81cb2d29c1b29ad554cb33ee ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 0940aa6cb561f7b69342895842c62ad73ed43164 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- d649bb1b92a17e0f9ec4ff673dc503003c5d5458 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- ea3032c18ae6963b94a080eb91c50fe6592b0e5d ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -4bda206c2bb7820d61d6b06d6d081fddc71c5459 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- f7f7ff067e3d19e2c6a985a6f0ec6094e7677ae2 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 70a3445f8dcb37eee836e7b98edc2f4bb7470c7d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 0ed54e915a0e618e81cb2d29c1b29ad554cb33ee ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 2e250a159f5233f518792cbb3d1294fc6367105a ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- ee55b93baa792a3ce77dc5147ae08c27a313ec9d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- fd83fe1df9e7913987656013ba5601641881a551 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- c4d8036cb742f380fd4bacd7b77b4ba7037a63c9 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- ea3032c18ae6963b94a080eb91c50fe6592b0e5d ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -e91fb271de73f006a160fcaea928cd266efb07db with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- b42a17f61204311a7ae6beb735c41da921474ff9 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- fdeb8762014829f1da8c80d944ae71a04d77a917 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 466b3ff3a9d415e0085f39b919e7dd2172f3c795 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6359bb348244fe59d7d9b2b667ec229b7851c0f9 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- e541a71175bf9014e67ac61c92fa59b1b504d5db ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 68afdbd892ca1780c3d6d61040f2a0ecbfe337af ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 21b43a88fac030def3edbaaf824b5e6befdfd54f ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -38b2dae3efac6ea51011ef5a55eef1ec0ce2399b with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 7da4e346bb0a682e99312c48a1f452796d3fb988 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- fdeb8762014829f1da8c80d944ae71a04d77a917 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 466b3ff3a9d415e0085f39b919e7dd2172f3c795 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6359bb348244fe59d7d9b2b667ec229b7851c0f9 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- e541a71175bf9014e67ac61c92fa59b1b504d5db ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 68afdbd892ca1780c3d6d61040f2a0ecbfe337af ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 21b43a88fac030def3edbaaf824b5e6befdfd54f ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -b131664f9b6ec0be70460d4c0b4bb58932341be4 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3af154a3002c7e99ef3a4289047335c8be4463f8 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- fdeb8762014829f1da8c80d944ae71a04d77a917 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 466b3ff3a9d415e0085f39b919e7dd2172f3c795 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6359bb348244fe59d7d9b2b667ec229b7851c0f9 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- e541a71175bf9014e67ac61c92fa59b1b504d5db ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 68afdbd892ca1780c3d6d61040f2a0ecbfe337af ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 21b43a88fac030def3edbaaf824b5e6befdfd54f ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -3023161a73108446f244d972d16edbd39e3401a9 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a4d21eec9c190d7f47ec4f71985b25f9b8bd3a49 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a4d8c86e95640ef8fcbbb365be7c1b66935dbcff ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a5074eb5714091f88a8f887ea5b7d0ef573150ae ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- fdeb8762014829f1da8c80d944ae71a04d77a917 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 466b3ff3a9d415e0085f39b919e7dd2172f3c795 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 5ad56129b44e627490c5048280b1e0ce8d3fb698 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6359bb348244fe59d7d9b2b667ec229b7851c0f9 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- e541a71175bf9014e67ac61c92fa59b1b504d5db ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 38cfe3bd8c08b8e221efc04b043f2a5dcbf5e010 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 68afdbd892ca1780c3d6d61040f2a0ecbfe337af ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- fb887d28ab2cdf18678d6853f2d90f69be68fd0f ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 5a99dc6ecd989e6101c0df766a711c200560f142 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- d3af3d6b7db68fc3badc6c5994c9ef77b4a4dc04 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 21b43a88fac030def3edbaaf824b5e6befdfd54f ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 2f915b8d6808b145813a8a47ca92e173f1c9836c ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 957b89623bead44b1c51f4ae719dfb84b90175b6 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -464108d7ba000759bb0b75523cde6d0125d1d6d8 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a4d21eec9c190d7f47ec4f71985b25f9b8bd3a49 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- ded718b90e4d35b45a277a8fddb95766574e3d8c ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3e5be8fda2b346cdd68bba3a8f2051cfe3d1b17f ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 824dca1d2aa2b706f1d5b9c4c3ffdac2b25bcc91 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- e3436bb72a40e0b1fab9a8e92f5c6fc1887c83cd ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 2f84ca8dd19f99c9fbb646a2b38be90092b22889 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a6e8f6cc4d71de6eeb71b0f57cf66408c10eb917 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 250fcc6d3621ffff170115288c9199cc21224af4 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 7821518ffa3f6b804bb760ea67202686ad48cbe9 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- b7f44ff0f04fd1de099be7e1c5250b4ac3bc8a14 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- ac807dc258a2d84c0c445ba8b0d7896a0bf29843 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- cc732032037f089beb33ee2b44a398772ddc12b8 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6d32b2d37b4adbc600d7c3a43589399f6d0395cb ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 46c5d00c1acc5d703dbd9ae5337a0680728d7d9e ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 6626ec65e6e2e5eb94857daabfa0ae0c3f25b1ac ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 2c7fdd58572c6f20d92075f419bb03d059e8d3e4 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -6c1ec74fee05b64f39a5fac75240fbc3050de1f4 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a4d21eec9c190d7f47ec4f71985b25f9b8bd3a49 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- ded718b90e4d35b45a277a8fddb95766574e3d8c ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 446ba66e7eb44c642633196dbcbffb8bdefff332 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 401b81ca564f05af28093c1cc34bbc0880d1ed80 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 824dca1d2aa2b706f1d5b9c4c3ffdac2b25bcc91 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- c1b6dd1507d45d3c4fb57348c9dc2f78d155424b ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 2f84ca8dd19f99c9fbb646a2b38be90092b22889 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a6e8f6cc4d71de6eeb71b0f57cf66408c10eb917 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 250fcc6d3621ffff170115288c9199cc21224af4 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 97d2bbde1039ec6a1032939a463c2e50c8371b85 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- b7f44ff0f04fd1de099be7e1c5250b4ac3bc8a14 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- ac807dc258a2d84c0c445ba8b0d7896a0bf29843 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- cc732032037f089beb33ee2b44a398772ddc12b8 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6d32b2d37b4adbc600d7c3a43589399f6d0395cb ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 46c5d00c1acc5d703dbd9ae5337a0680728d7d9e ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 6626ec65e6e2e5eb94857daabfa0ae0c3f25b1ac ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 2c7fdd58572c6f20d92075f419bb03d059e8d3e4 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -54099860d1c3814d43827a7974120b01c04c4a4a with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3c3363479df9554a2146ca19851844b0e5b3ce3b ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- ded718b90e4d35b45a277a8fddb95766574e3d8c ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 401b81ca564f05af28093c1cc34bbc0880d1ed80 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 824dca1d2aa2b706f1d5b9c4c3ffdac2b25bcc91 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- c1b6dd1507d45d3c4fb57348c9dc2f78d155424b ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 2f84ca8dd19f99c9fbb646a2b38be90092b22889 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- a6e8f6cc4d71de6eeb71b0f57cf66408c10eb917 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 250fcc6d3621ffff170115288c9199cc21224af4 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 97d2bbde1039ec6a1032939a463c2e50c8371b85 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- b7f44ff0f04fd1de099be7e1c5250b4ac3bc8a14 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- ac807dc258a2d84c0c445ba8b0d7896a0bf29843 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- cc732032037f089beb33ee2b44a398772ddc12b8 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6d32b2d37b4adbc600d7c3a43589399f6d0395cb ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 46c5d00c1acc5d703dbd9ae5337a0680728d7d9e ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 6626ec65e6e2e5eb94857daabfa0ae0c3f25b1ac ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 2c7fdd58572c6f20d92075f419bb03d059e8d3e4 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -ee4198be8ac4eec84946ff721f81571be6173c87 with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- ded718b90e4d35b45a277a8fddb95766574e3d8c ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 401b81ca564f05af28093c1cc34bbc0880d1ed80 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 824dca1d2aa2b706f1d5b9c4c3ffdac2b25bcc91 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- c1b6dd1507d45d3c4fb57348c9dc2f78d155424b ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 2f84ca8dd19f99c9fbb646a2b38be90092b22889 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 71be284058d55c956a4eeb80f0d30849867836e2 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3e2558c26f88f5c592e6522a169eea4af70b7e6c ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- afd94016e22ccfef3ba28b4321fa3f0c93688104 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- a6768afb4c7de95a17fb7bc5e372cef1d459c331 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- a6e8f6cc4d71de6eeb71b0f57cf66408c10eb917 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 2835e07f105c689d57f86e4931b0003662d5591d ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9285465aa45356a83e6f20ed6c81e43f622fcb8b ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 0cf29c79017c310bb32dd852e6509bae5a6f8af8 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- f35d1680819552472b597314efa5351c41700c0a ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 7f39c304bee43d161f0c67811493c52a399c6ddd ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 250fcc6d3621ffff170115288c9199cc21224af4 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- c03adeba10adf7b0e1e4a0c267b879559caae852 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 97d2bbde1039ec6a1032939a463c2e50c8371b85 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6b0e63e0baca6509a3d9ce7b1b137060aefbd427 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- daa2a49e1830f7d2436cc1436f678219bee77413 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 7709b4eb37d9cdea66587c5507c60779399cf248 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9255d20b1263a09b7549a399304a40464a6cf253 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3bb92a09c93423a8f40e02a27211d2920dc731d9 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- b7f44ff0f04fd1de099be7e1c5250b4ac3bc8a14 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- ac807dc258a2d84c0c445ba8b0d7896a0bf29843 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 9b7e9c73ff3d0f88978636ecd14438b5c590ea68 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- cc732032037f089beb33ee2b44a398772ddc12b8 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6d32b2d37b4adbc600d7c3a43589399f6d0395cb ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 46c5d00c1acc5d703dbd9ae5337a0680728d7d9e ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 4546eea18b6c3003140a18e12dd4e84029d012fd ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 6626ec65e6e2e5eb94857daabfa0ae0c3f25b1ac ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 2c7fdd58572c6f20d92075f419bb03d059e8d3e4 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- e6baf3eae057fa8c44959eab1e1a8a80fe466133 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- bfa38d6efdcffa297fae1b28cbe761c4dbbd78bc ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 5021e7c03634285f92aac2bad93e020bb5a53957 ---- -44fa49d5ffb10bffeb628b2afeaa4092e6a50a3c with predicate ----- 3d6b33dc36af572196b99454cab35ecac41b4106 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- b54809b407ecedd08dde421a78a73687b2762237 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e4b4203719a8f9a82890927812271fdbda4698ee ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 4fa22fd9d30a4b766eaa7b4a40465bf87da79397 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- f1a5a8ee011d264d566affff33f80b0f07f025ae ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 76f6410f61cb71ad18d31e3b2df7bee44e2f69e3 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 656e783cfac1feab3e56ce960de02c9f2545e3e7 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -8d4b8b1d79eeb3b43c852e0772393e7db7f76453 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 2f698b973ee706997ed07d69bd36063fba73500b ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 51fe298b120a1bd9b9a6d0e56db0d7fc5f52dd5d ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 4fa22fd9d30a4b766eaa7b4a40465bf87da79397 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- f1a5a8ee011d264d566affff33f80b0f07f025ae ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 0fb6828cf5d24535b1b69a542367fac2e540bb36 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 656e783cfac1feab3e56ce960de02c9f2545e3e7 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -a529af9a05481053a9286a346be7612fdee15df6 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 2b7e69db9a000b2ee84ebec1aace4363e3b5512f ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- fe21faac40f1278f22b9a0fc333fc56aaa7f4c38 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 4cadeeb3b018c6fac6961e58364aded930cd27cc ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7621c67b275565d08300c5e7e43d6c60052b8b7d ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -6ab04055fa8857d05ac3b77287ee41657c04fb3b with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- d0464862795017bd3aebd842065dd0ac9ad6d482 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 422adcad8a2cc3c4ce043a8d6b2c081c40e3b298 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 4cadeeb3b018c6fac6961e58364aded930cd27cc ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -5f8b970e1c939cb6387797958165ca765cce51e6 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f51c267f61b1d55db68a9de47bbbf1b08b350097 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 34656fe34b1d597be9010a282d0a1a17059d3604 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9c8b4010a0808c8de1bbdc10ef6fc2fb6b574bf6 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f51c267f61b1d55db68a9de47bbbf1b08b350097 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f59a4935cc1bcc4cd6d6478a761fb73fa457e58a ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 34656fe34b1d597be9010a282d0a1a17059d3604 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 643853fb70ae88dd7205b2a12ea20a5f183ac5d8 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9c8b4010a0808c8de1bbdc10ef6fc2fb6b574bf6 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- f0a4be1a6d8b3ced700b75d14bb79211db6c753d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 0c074ec3fb9cbdab56b3cc0f0385f3284e8fb512 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -b1ff3f59c4cac75bcb0e2124b68dd75bf42d1f1f with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 601b829cd650f7c872771c1072485a089fcf09f6 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 8beaead631d0cd4a35945327602597167fca2771 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- a5b12156418f2305575e4941efeb44a9dd56150f ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- db3b17077426492987971e570ba016c4d830123d ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 029fcbc90e100c49d4534b9a15609c2d6d930186 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -b73e11c8fb9c91785fceb022759660d12d373b78 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- aa1522452fc5e3653c4f5016fdaeea95f53f697e ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 8beaead631d0cd4a35945327602597167fca2771 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 56efd82d4136362b9a530613c73b0693ea239c83 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- db3b17077426492987971e570ba016c4d830123d ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 4504a36084538a3e33ce9499e16a9069bc99540b ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -d56b220dec6b52ce77d3ba24aa6651e705e11954 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 601b829cd650f7c872771c1072485a089fcf09f6 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- a5b12156418f2305575e4941efeb44a9dd56150f ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 029fcbc90e100c49d4534b9a15609c2d6d930186 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -bd99788219fd6d4e726d6b198a1acf144ba90b44 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- aa1522452fc5e3653c4f5016fdaeea95f53f697e ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 56efd82d4136362b9a530613c73b0693ea239c83 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- fb52e42a4dd314d179cbca9106071dbb2aa0e21c ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -74ea5789d6094d5424394b84122d4d55f5581c46 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 8b7c88e3caa63e70919eef247ed0233d83780c41 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 2b016cf4359d6cf036cf15dc90d04433676d728f ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 029fcbc90e100c49d4534b9a15609c2d6d930186 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -85977ee41ee5d18de056f0661ef2a5622cce7dd9 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 0edb1949002ba2127139b618e4a7632a1fd89b62 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 4abf9c798b3f9c31a73a3ae14976e72459f8ff5b ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- bd8da4caef5a016424c089b8baa43e43697e61b3 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -d8c0b5de14c50309c41b9feed2131debea557d5f with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- bdd8f0eb9c569dec8d621b3f098be4ad15df6f39 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- da2f93a8d261595748a0782ed1e60d0fe8864703 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 1a764ed3c130268dc1a88dae3e12b3c95160a18b ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 5a9855ac2261e2bcefb3bec95962f1e48944742a ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -a9d2ae2b7b1fcc63fa75dac8d9134f749940e8de with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- f6f45f74da02782a90d8621ad1c4862212f9dc63 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 53bc982e3f58e53d72243fb345898bbe2eb9b1e7 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 8a3de181c809084d40b4d306ed19ae3b902c8537 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -7877832dcef94e5361aed2fc2ad766df821ba390 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 8f61a3c3fb9a32ffc34fe61d46798db3165a680c ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 6204fb368d8f7dd75047aa537755732217f8764d ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 1eed1f84ed1c140f360e998755d0b897507366b2 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -7ceae0ed68e8e44d00e863425587d78683434753 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 6870991011cc8d9853a7a8a6f02061512c6a8190 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 2f3601b33ae990737b098770dbf5c2f08cab7c6c ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 8c838182b03cb555a3518f42d268f556b5a92758 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -dca4707db48a5a2e3d27ef7ffd096a350298452f with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- b4bc4a754af30be3dd0e18372eb1ff58cd3e22d1 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 88c0ba44f8ec296b222a56cba1acc9eac70c9ace ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- d3a7e36be2c372a497d46433e0ddf93c9581289a ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 8b519c1caab06d85897b107029bd7b5895406399 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -1f350705bb60063f073092f22799c09b1731bf51 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 23b1b6f6ed86a2a67b28df2e6c66ea781081f26e ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 38c034db41d6582cf9e56ab5a694a960e26778e9 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 55e81e78e51f31478deb94cdbc50cdc8f579e2f6 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 8b519c1caab06d85897b107029bd7b5895406399 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -a24aac921256040e6243a6352e95228bb921a33d with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- ba03709e6dda785ff3181f314cf27b3f0fa7ad11 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e65068295023a4bc3d536ad285181aa481a43692 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 55e81e78e51f31478deb94cdbc50cdc8f579e2f6 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 72291dc951a30e6791f96041cae7e28c7c07fd76 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -6d55b650713f27e2b1e83ccb2b557cc5e0cca017 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 2f3601b33ae990737b098770dbf5c2f08cab7c6c ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 8c838182b03cb555a3518f42d268f556b5a92758 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 5853356eb7bf1894d6f3d163da24b7b68a5e077e ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -dd4ceb509424286fffada5f8af14ec07f736a39d with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- bcd25136fa341b9f022a73a8492a912071c8e9fc ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 79439f01f43d09132f3bfb3a734c2ad6a6a04c2e ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- f531617d495425dda54c611263ace4771007b252 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -1b1f223392508b9f7194515708000a942bb727bc with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- c21e4cc5c022837d2de1af233e783e1c8ab6373e ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 95cd33173456304e1ab31a8cbfb1a6192b37d784 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- cf0f066d2e6f7725e7bc70ca413d60aaa05826b1 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 951c18d9aa9c0a750244d73bb849c997939d3c7c ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -793b9e11cc84072c1214cc3697cc27c482a39852 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 4ba4515b1639bc4edc2948f61119206f8e3c8b2a ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- d6d0d1b6c823d758cba70d3acfe1b4b69b1a8cf0 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 951c18d9aa9c0a750244d73bb849c997939d3c7c ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -29006db382b51eca75d694d77735ce83c4c7773c with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e172acef0dd80f57bd1454640b72b8cc0f270231 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- cf12c9183c5f7aaa1917b8b02197075dabb425c8 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -8cc2dd0502a838489925e68861f0542183c177c9 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- fe591ddb7fd5313dca0e9a41b8da9ee9d5b61f69 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 45c5b60544fa5b50a84116ec2664924ad0fc4334 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- bfb455469ad96be91ca1fca2c607f33ef4903879 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 16967eb5debcad7cf861e1ea6ba0cddd75f2ddc1 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 85d72353395d3f77d03618f68beaed15aa16d5af ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 06414cc49e7db0d902cfea94eb92db2eeac7fb5c ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- b8fa734a0bfd21e14b82f576350f0c07592b7ec2 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -3ccc095fdfba18b96defee98cfe6fe03ef086cf8 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- f0a3c2dd52640c7bcbd534ab36de60d8d729c927 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 45c5b60544fa5b50a84116ec2664924ad0fc4334 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 6a12adf9f736dde91ea0cf230d0ecc6c2a915c26 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 16967eb5debcad7cf861e1ea6ba0cddd75f2ddc1 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 85d72353395d3f77d03618f68beaed15aa16d5af ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 51ff8326ef50dcc34674f9eba78486413c72e50f ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- b8fa734a0bfd21e14b82f576350f0c07592b7ec2 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -c213ae47ebcae84cb1e84c1e336987dcb556b1c1 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 1a8ffc679e9b9b9488c11569854b8de752f3beca ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- db22b2ac43fbcffd4db8ed1752d6df6f5c711f99 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 3368d19c227a7a950c05d83be72ef171fe255eef ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- f6bc58055ec59c3208c90066a3bd23eb6fa22592 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 20791b624615f5a291e6a4de62b957f770054180 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 7de5088a9ecd4375fdfca1577b77219d43cca190 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 82644b6d11bbc4ac6065e615d9b7665733452cfd ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -5987d8e483944e30822ce0b67feee4343998a902 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 754d76863d0b575b8a8b2782df19cc334c85f523 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 3368d19c227a7a950c05d83be72ef171fe255eef ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 626c9b73b6b1148f639fb9589a2091d1cca5aa8b ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 20791b624615f5a291e6a4de62b957f770054180 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 82644b6d11bbc4ac6065e615d9b7665733452cfd ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -cc13fd258aa7a9a04417550c999dab55ba7b78e3 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 754d76863d0b575b8a8b2782df19cc334c85f523 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 626c9b73b6b1148f639fb9589a2091d1cca5aa8b ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- afa13e2cc669ef2633fba439a2919bf3b2ed9228 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -9a4528e86e6b5429c3e2332c53c43c327e3c0bc0 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- babc9c65b1132a92efc993d012d2850ad8e0e1b3 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 03562085895577f50212e65dbe3c5a487b794321 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 8e517bde7e0a68edd13ce908c53f8897b7843938 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 7eb517dacac04372c68c7c02db47e1fd206df88c ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 4531315fb2dd8247f48d391cc3d7d2d38689b53b ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 8c996070e1434b525658b34fc3c22719d9f23cbe ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e452e68b8d4b8e5cb3a9a7ec2adfdf8807a16521 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -bba087d69b6d317e1156652ed4a3804911920069 with predicate ----- ccc7f0acebe45ff35ada1492b727b07dae578391 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- babc9c65b1132a92efc993d012d2850ad8e0e1b3 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 8e517bde7e0a68edd13ce908c53f8897b7843938 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 8c996070e1434b525658b34fc3c22719d9f23cbe ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -13b91096dc4acc6aac70ce5fea8d0157976e32f4 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- c5a7d3312a1e36417ba907266f3cc33831460f15 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- eda1906b6fec1da599d32dc2f2ee3560840bb851 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 70966d599c7ff569ec9df61091641ed5dd197e88 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- f38dd220f0cdff8c6640db287c50b27dd322e45c ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -70feb16bcad481ca8fb5caa25e46fcb57ed1656b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 7fbaa5566d1e0d4e882fbce3caedbb6439ff7a62 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 45c5b60544fa5b50a84116ec2664924ad0fc4334 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 2dba841d6008476ffad7d666f3f7d7af1cf07152 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 16967eb5debcad7cf861e1ea6ba0cddd75f2ddc1 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 85d72353395d3f77d03618f68beaed15aa16d5af ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- b8fa734a0bfd21e14b82f576350f0c07592b7ec2 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -180e3ee0f7f738562179bb1138159aa6ec1f0c64 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 7fbaa5566d1e0d4e882fbce3caedbb6439ff7a62 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 2dba841d6008476ffad7d666f3f7d7af1cf07152 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 85d72353395d3f77d03618f68beaed15aa16d5af ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -1be5bc0b32a0ce2541bb072ba790b7a9822a02ea with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- be435edb681f9d87058ee09bd2629eb305af89c9 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -6748787c86f19805825bf23e926ca51f75831ffe with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 645b2abedc56b01778a4b3b40315b3a2aca6e775 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 92ed3cdc14190b50fcb4569607d5e84f82a649f4 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -d3ee8c071627c2ade8d14bfec0ce999c4275b2c1 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 6962dfebfdeaaf13f45823460af22f5acbb56844 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- d194b228a83c0d9665d0ec191ac6a8a6ceb6c2d4 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 61b90a5f2c1144caeaa958b63a37fda14c8f3585 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -e956d06771e377b06beee7e4571d30b1ffb2fceb with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- d5463dfca9f0c211bb74e90628165981c450a523 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- c989ee89ef3fb3e54fa52ff268d4b27e0b98c0e0 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 8b302b7ff6d91f2e70e090af93c42b24cc91645b ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -14c466cf0420e6433a6de52a040564b16eb348e6 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 62863471849f9f5abc13ccedc2bb5ad3a26ec505 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- f714fa793ab2930caa67617438b842461faa4edc ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- d11bd6618852a67120ef123158ea512e9551f8f9 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -ca6aa5be660cf85a20c35b54eab125ad18dc7e68 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- b9270ae52e7305ccb6209ad0e36a849e7a211645 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 8e8eb8483a8e701ddc37d7e93489a47294c1f9b9 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 4189639065cdab8d82c3df71b436c308c7e64378 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 7eb9c80af9b372bbbc1bde28486044b0ed60cf72 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- ac449e9102388213c107b35297e266bd91a050eb ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 2b2464b0605bbcd4448ab7777c21dd7c7115b956 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -6eca51a7e371e3767d6842d11c9e101fca6aca4b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 14dde4ff2f969828d9f394056805216e4e1c5ceb ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 62863471849f9f5abc13ccedc2bb5ad3a26ec505 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 9364380c40de1dc770b0238588acbe68797a9ee6 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- f714fa793ab2930caa67617438b842461faa4edc ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- d11bd6618852a67120ef123158ea512e9551f8f9 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -aa2c099f5d937d295ef78838a46d7614fef27c35 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 14dde4ff2f969828d9f394056805216e4e1c5ceb ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 8e8eb8483a8e701ddc37d7e93489a47294c1f9b9 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 9364380c40de1dc770b0238588acbe68797a9ee6 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 7eb9c80af9b372bbbc1bde28486044b0ed60cf72 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 2b2464b0605bbcd4448ab7777c21dd7c7115b956 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -59cf79d8f84f9b1a646543e5abb78c40ef2bc865 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- d5c786436ef51e0959515cfc9401a2674b5b1fa7 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 8e8eb8483a8e701ddc37d7e93489a47294c1f9b9 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 2bada62a31515dc5bb8dffa1d57e260cbe6e6cd8 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 7eb9c80af9b372bbbc1bde28486044b0ed60cf72 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 80ef6a78023cd2b39f1ef93f5643347c448f0957 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 2b2464b0605bbcd4448ab7777c21dd7c7115b956 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -2468d01d1430521f0982287b91736da90bc46970 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- d5c786436ef51e0959515cfc9401a2674b5b1fa7 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- d3596706c137e5fa769c7bd4c341ced63406d642 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 2bada62a31515dc5bb8dffa1d57e260cbe6e6cd8 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- c77cb49fc61e7d74b80dd7efe1c32fe4faa581d5 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 80ef6a78023cd2b39f1ef93f5643347c448f0957 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- d0f3b72e6828b73bf40bf07dc7a9ce59dcc945a1 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -be962f19320c901bb332609778e39a3681b66936 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 8e8eb8483a8e701ddc37d7e93489a47294c1f9b9 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 7eb9c80af9b372bbbc1bde28486044b0ed60cf72 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 2b2464b0605bbcd4448ab7777c21dd7c7115b956 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -c3ea6a239128af5b464a3fc16cad637a0f9d4594 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 14dde4ff2f969828d9f394056805216e4e1c5ceb ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- d3596706c137e5fa769c7bd4c341ced63406d642 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 9364380c40de1dc770b0238588acbe68797a9ee6 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- c77cb49fc61e7d74b80dd7efe1c32fe4faa581d5 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- d0f3b72e6828b73bf40bf07dc7a9ce59dcc945a1 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -12d86d2966c40866cfeec2e66bf39733af38918d with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- b2b95fcc33e09f04e9cc1788e87a353bf47cabf4 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 6a3552c278342618fa90be0685b663e72c7c0334 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- d3596706c137e5fa769c7bd4c341ced63406d642 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 2dfe330e4c2de91e01b27f77b0b659d4d11d3471 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- c77cb49fc61e7d74b80dd7efe1c32fe4faa581d5 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 54f77bafc7ed27df2f0a6c07adab076170ec9440 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 015ce4a88d258e1d97180e37700d92fd321a003c ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- d0f3b72e6828b73bf40bf07dc7a9ce59dcc945a1 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -d6751b8ae970ddec6a1d110973f6fd45167884e2 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- d3596706c137e5fa769c7bd4c341ced63406d642 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- c77cb49fc61e7d74b80dd7efe1c32fe4faa581d5 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- d0f3b72e6828b73bf40bf07dc7a9ce59dcc945a1 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -9a1f93ce5ad35771243e8089d43215cc11d916e0 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 88bf7cdb0ce43b7c1e895840d92e0c737c2e4478 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 8fd73e1acc11d0e9a8b3cb35f756003d9ff1b191 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 3bf7e3628e58645e70b9e1d16c54d56131f117f3 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -84603fa2f12c47f68d80cfb7d01f848def47eeb9 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 94ee7c24814f475a659e39777034703d01bfbe0c ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- ab650abf1b5aa8641a8e78ffdddf324813ee7b33 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e358d01becd615b498d44e21b6bc994c5632335d ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 67008d72958e1a6abddba3141d52db6a093c27bd ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -e6d7ff7ec266a61e6691d5d4ed33b305b29f3ad7 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 6386f2fb33771e9b9d03139fbe4bb2bee45b3db6 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- d2882218789ba9a993e72249fb476d4399dc5373 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 7689175546ed52f32ea74fb77d6ab708d2a888d2 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e358d01becd615b498d44e21b6bc994c5632335d ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 3f7196bef85feb6764dadb6473ec9659251f408d ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -4fb39f35ffc73f8fffb2ad647d61fa2b984da55b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 89aa23f13d3fc48c46df5a1056da696dca71b517 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- d2882218789ba9a993e72249fb476d4399dc5373 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 7689175546ed52f32ea74fb77d6ab708d2a888d2 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e358d01becd615b498d44e21b6bc994c5632335d ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 3f7196bef85feb6764dadb6473ec9659251f408d ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -bcd592a8292023079eec903c126257d733057ea4 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- bd1d4425d2c3b421bd499331d94cbe322eb11804 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- d4bd4875c7d9de14671f5098b689c0a1c55eab88 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e67a6abcaf11a94e09479c5fbf2d074e6bec1e16 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 7693c96bff25904b0df72d6d56f5ad0826fe8108 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- ab6410915f59bb094d6e465a054dffff672ea874 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- d2882218789ba9a993e72249fb476d4399dc5373 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 19854dad7bfec8070f5bf97d5c2175977abba9c6 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 7689175546ed52f32ea74fb77d6ab708d2a888d2 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 66ce9a4573d34fca9e58ac84519bbca707752016 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 422552a7ce98b34ae4881905aea9f4a02fb859f3 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- c130650e4dc0bfcc78f8f3b45f86af3e31d385ce ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 7468c3fffeba123835555c7d24f61e8aa944a086 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 05d6828504c6c4651ced30c088f12114c370e8f1 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 44b24c826dd5d60c71f2bf2de04628c4976c21d9 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 7b24cd972a8e0d0608c4ad1840014334ae0d90b3 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e358d01becd615b498d44e21b6bc994c5632335d ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 0e5592d3c10890891bf15705637ba780222ed4fc ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 3f7196bef85feb6764dadb6473ec9659251f408d ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- abe129a83c7bc35a504c84b0f83398504cc1a5d2 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 30311f5283ce5ef521387e87fd32f2dc2900a94b ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- e91e57ba3bce2755a0659dc7c8b01e5c91abbb1a ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- b8fcfb3e7da35a8cc8abce7e2d87a1dccebb1b17 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -289bb04b3a806a20fe5b7b831a4643e2fcfd0190 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- ff6baab4b76630bf39283f34631c24f471f938cb ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- b5bd3992ece3fb6654839a0582816d71640a4fea ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c8def9e035fdd8661e80fd4db4aa808b0af5cfc2 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 659344343b90a4900f60e48aefa6b50f67657197 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 759c9127e0c8515dc0fe7a518b4624f4da083a3a ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 9a50e7137441d96eb414ac1122beb788b71c7988 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- b6eee00a5ead15223afc6e2d3a34069b9e98e73d ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -9fd994ba8ebbb3cb596d6c66c920f20a4a6d58b9 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- faca3a87ef348423dae73775fb745676c3aba1ea ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ff6baab4b76630bf39283f34631c24f471f938cb ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 1d389e5dd0afe975d225220257fad55a97dbf04b ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c8def9e035fdd8661e80fd4db4aa808b0af5cfc2 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 4c76b70273ad8331e7c017b311d4198b6c6dfb13 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 759c9127e0c8515dc0fe7a518b4624f4da083a3a ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- b6eee00a5ead15223afc6e2d3a34069b9e98e73d ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -a7af5240f4fa30c7775de867ece8655a675a87aa with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ff6baab4b76630bf39283f34631c24f471f938cb ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 1d389e5dd0afe975d225220257fad55a97dbf04b ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c8def9e035fdd8661e80fd4db4aa808b0af5cfc2 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 4c76b70273ad8331e7c017b311d4198b6c6dfb13 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 759c9127e0c8515dc0fe7a518b4624f4da083a3a ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- b6eee00a5ead15223afc6e2d3a34069b9e98e73d ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -2ebb7aac2e26486ae352418e011c7240ffdc4c5c with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 4273d376b6ce83f186dfec2d924590abef9dd85d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 1d389e5dd0afe975d225220257fad55a97dbf04b ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 17e47aad7b111edf1e27319a9864cbbbffa54cee ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 4c76b70273ad8331e7c017b311d4198b6c6dfb13 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 436df8568715e22ebfeb51a2c96c6319e4772ea5 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- b6eee00a5ead15223afc6e2d3a34069b9e98e73d ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -c725ff1212e6c592d06790847eaf7d0a70412c4b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 4273d376b6ce83f186dfec2d924590abef9dd85d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- a8cffc105889e679f36ab10bd6d4702c35efaae9 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 17e47aad7b111edf1e27319a9864cbbbffa54cee ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- f2c19765442952d9a392bcb65920586f3111cd7d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 36eb7b37aec7a21dac67fac0c7d99d3a31af0877 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 436df8568715e22ebfeb51a2c96c6319e4772ea5 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -eb3bbff6713417d4bcc1c6ad617a391c27b702de with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 0d6c9a9b0349cc7f4af6bf7e9b98cc5bd6cadbdf ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- a8cffc105889e679f36ab10bd6d4702c35efaae9 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- da8df3a7daad07c9b29c0f7d9f859babc2d90d67 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- f2c19765442952d9a392bcb65920586f3111cd7d ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 436df8568715e22ebfeb51a2c96c6319e4772ea5 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- c20ea7b5ecb21abbc1c8267354b453d183e8eb9e ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -4c85b583f690b218851c22af956ec9fa61bafa86 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 0d6c9a9b0349cc7f4af6bf7e9b98cc5bd6cadbdf ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 53f1a16dabc6b4fc334f461f3e274c9f74c0de1a ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- da8df3a7daad07c9b29c0f7d9f859babc2d90d67 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 7a312ea90e3dccc19b9799c91e8ae6d055b63ee2 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 436df8568715e22ebfeb51a2c96c6319e4772ea5 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 9984e4e0653a826cb8e94737254145af37e79a25 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -0b2290403c1474dd7ac5067edd836091aa0625a0 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9bb53c4116c008a3047b1a27bcd76f59158a4a8a ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 53f1a16dabc6b4fc334f461f3e274c9f74c0de1a ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9b27ee18c4feb0d1d21b67082900d1643b494025 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 7a312ea90e3dccc19b9799c91e8ae6d055b63ee2 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 00cdf40ef22626dc05ab982e38e29be54598a03b ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 9984e4e0653a826cb8e94737254145af37e79a25 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -dd55affa00a6255dfeafe79dfb7747243137bd08 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 9bb53c4116c008a3047b1a27bcd76f59158a4a8a ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 32062b074b5ea92dea47bf088e5fdd2bbde72447 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 9b27ee18c4feb0d1d21b67082900d1643b494025 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 8b1ca780f4c756161734ce28f606249ffae0a27d ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 00cdf40ef22626dc05ab982e38e29be54598a03b ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 470669419034724cbc38527089b718bc5e2aa73b ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -9f27fb8406b453f52cb81bdc3b736fd4910b090e with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- fea60d692ee9c99e0d8f9d8f743a0e689052f930 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 32062b074b5ea92dea47bf088e5fdd2bbde72447 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 76503b3f607f1b2541bbf6d18aa2193d88195359 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 8b1ca780f4c756161734ce28f606249ffae0a27d ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 6d5fd1edc69477e7a1f290d49aab2613c64ccb79 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 470669419034724cbc38527089b718bc5e2aa73b ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -73b3e17779d84aba078fce339ddae99c40ced1e1 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- fea60d692ee9c99e0d8f9d8f743a0e689052f930 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 1bbe89276621e8dd9aab654e9ec17302fcc56df0 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 76503b3f607f1b2541bbf6d18aa2193d88195359 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 7936ad8c8d015ac6d95d7fd7c356a911647b6714 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 6d5fd1edc69477e7a1f290d49aab2613c64ccb79 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 63343d910e13228d3d0bbae716fdeb2e3f1a2550 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -817aa0c870bb686999be14d4675bae17d1aafb0a with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- c1e6b2b22e5b0db3f46aa709afb3452de778409b ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 1bbe89276621e8dd9aab654e9ec17302fcc56df0 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- fca89a04b8db9c412baca7299a96f7aa4ef3016e ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 7936ad8c8d015ac6d95d7fd7c356a911647b6714 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- f3fae26b62cfcd10f62dbf1c2c223a6638cb0351 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- de588b36565477ce137fe2b8ac6307d43cc304ad ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 63343d910e13228d3d0bbae716fdeb2e3f1a2550 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -26e54340d3c779ef120032580b9c8bc17ce1ac88 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 9daffc64f32001c1489e0dd2b2feb54a2a06f1fc ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 1bbe89276621e8dd9aab654e9ec17302fcc56df0 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- c5339879d1f52610dde57f9f6a6f3632ebb5c611 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 7936ad8c8d015ac6d95d7fd7c356a911647b6714 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- de588b36565477ce137fe2b8ac6307d43cc304ad ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 63343d910e13228d3d0bbae716fdeb2e3f1a2550 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -6f9a0ee4445ad7581eae98d93a5e7ba26c809821 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 9daffc64f32001c1489e0dd2b2feb54a2a06f1fc ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ec7ff6deb8c12d4a9dd59e9fb59c889c1b675224 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c5339879d1f52610dde57f9f6a6f3632ebb5c611 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c283f417dd9a9385e1255c83ec23fcb75339a812 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- de588b36565477ce137fe2b8ac6307d43cc304ad ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 8ea9b8ef0c887d88e15ffb11a5026e4decfecc97 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -d8058c55e6aca64c4d6fd9831af0ac5c3bed29d4 with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- fe24b3fb4e83bf58a9b3552b1ec99bc87bbd720e ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ec7ff6deb8c12d4a9dd59e9fb59c889c1b675224 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- b1b8f02aea594520a0649de15d44c1a392388f12 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- c283f417dd9a9385e1255c83ec23fcb75339a812 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 06650ca3a951bbb09ee6bb5f41e31b02f9ef49fc ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 01548d4a5777938ec2bfa79d2c6c0df75eac38fa ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 8ea9b8ef0c887d88e15ffb11a5026e4decfecc97 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -e75eb8921a18e28010d14f01d02a864419d7c40b with predicate ----- 0e3f6bf5a405a734b03cf3a4aee59661086a6c8f ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- fe24b3fb4e83bf58a9b3552b1ec99bc87bbd720e ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- b1b8f02aea594520a0649de15d44c1a392388f12 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 01548d4a5777938ec2bfa79d2c6c0df75eac38fa ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -4d21880097532f025e8dd9772751b20b3964dd0a with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 2833afcc0f6c25a050f6d16d15f20598a08064f0 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 9bc6128ffd6703432c716654331edbbda0b494e1 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- c66d94618103a91abd96db3c1731ad9298b67726 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -4d292e6ba9133554d51148e5b29e1470dbd151c2 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- a35e9cc5e55f1ea39e626a3fb379dea129d63c7e ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ad3e534715c275a21b7fe1df24f90c05f983a4cc ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 450f71fd6eca75f44fc6b6e3e03ee346ab3cd795 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- f367c3e21621bdec0f0642093f9eadf0ce2278e5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -05983d2952787cf220e7b5cce47b738fbfedf438 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- da38ea2c0d21746c173f0f14d7d02c5f465d4cc2 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- a0adc6ecb0ab27bef5449899a75a1e4682b8958a ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 450f71fd6eca75f44fc6b6e3e03ee346ab3cd795 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -180e3081d7a4daf5d971bfa8623387f7bc713406 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 715ffe6d88d1ab92fbd8b4e83b04e24e8f662baa ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 15b858bbffdb69a048a26d0c381683adab6408f5 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 9aca18131c1e3ad91cd6b8e70497f116e392135d ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 0c5bab65eef38f978c9589a24cf9a453363b2999 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 87087ca749ad68f8cdfdd9ca51d1e941c98d5208 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- cae756724f53b8312a061db3a1efeb0151e7e3d5 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -356b3d552177639704d7ab35da404c9c67d138f9 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 715ffe6d88d1ab92fbd8b4e83b04e24e8f662baa ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 9aca18131c1e3ad91cd6b8e70497f116e392135d ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 87087ca749ad68f8cdfdd9ca51d1e941c98d5208 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -40cc6b570491cc0a2d4f9ff2ec28b07d3cfdac52 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- f6f25471797d4b56d51ce1ae42f1b5c7548bd966 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- da644127cbbfe06ab60b16a2b3398147b28568b6 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 654f655dc25b5d07606fe46b972fa779efc139ca ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- aad1f85d06b82ce337d8036e155fd7765f6f1b0c ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -3987e79bcf26cbfb4f0653d41e57ce58acb658a3 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- da644127cbbfe06ab60b16a2b3398147b28568b6 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 654f655dc25b5d07606fe46b972fa779efc139ca ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- aad1f85d06b82ce337d8036e155fd7765f6f1b0c ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -1a5cf74ebc29d6b3ddc6c686133a56389cad88d2 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 27aab3bdf8e58641371d0997160df04a1f95c762 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 7c527671e5f414345e42188c783de0e1de101a62 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- c71ae6fb4dea62a971699bbad5e8bf68d7b21435 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 9c4dab1d6f76dd3a86269059b0e3c4fda884d44f ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -aa913d4d91e9e1ad959b25f613fb7487ebf7910e with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- eeea17544e0ab2cc74012112e7fc5169445819d6 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 932e8570316e1cd7d76be44414d2dc1515fcc0f3 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- aad1f85d06b82ce337d8036e155fd7765f6f1b0c ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -0d606de6f55e96dbf8c56e0465706e91454ebdad with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3a56382a340d43f3581046347e401874f83538c1 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 7acf50466803aedf4228a13ca65a198f6fc6ac0b ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 72fa9416d9b88e6c39e4254f8a32c184a2bb36c6 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- c0692e0307dcfbbb457e319f96677a45c238707f ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 2cec49545614f3eda402a2f495b105bf7dbee59b ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- ff267956306a2f23bd33e796343b0f6664277dbb ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -5d5caa8fb3b597fa7fee469c60510aa5b0e8086e with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3a56382a340d43f3581046347e401874f83538c1 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 795e80b18c23255c4ad585f62eaa511edf884849 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 72fa9416d9b88e6c39e4254f8a32c184a2bb36c6 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- beeb9b2f13ddcf06568af177d53638eddbc5673f ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 2cec49545614f3eda402a2f495b105bf7dbee59b ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 43fd231cbe38e663999d7353dad2ada15a866d08 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- b2b42a1c9c972784d9c82593e293705987c4b2f3 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -f600d5ed40ad4ddf0c5126fe3cf4cd498ea394d9 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- ee1519e585cdd413f7e9725fe714a661faffa833 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 757bcacfbfc43ed4240abfc6b3b60e42b6f0fe0a ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 8711c1fbb68d70bd9686962a39b87f2b6e6eb54e ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -ceefe0db24c028e19f4545d6cd69dab741a970a7 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3dc460a850cda8c48e1cfe81d885abdfb1d54fff ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 8832db585d7d81290862b66ac1baacd59ac6cd6d ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 11f933139bbcf1d07e92385d2bfb16facc39fcb5 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 25cd1cce114c7db946f235ac8fb33e849811129e ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- c2140ba0d8e77502c2b30c3b1fbbcf73d7c15aea ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -6ae9d3978476b54653f426bd971d07e46f8d368b with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 5c4264e97e16d051cac6190a44cd7888d1b5715a ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 571d0036257d1aa3f580b86698418675cc22882f ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 2251ecb251ae6cd741351dbf159de651ef7154eb ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -47c1bdb2909d7383146f08dc1c15c390eefe9e47 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 1a39c83aa482f5993be4719eb1b7f8aea6a9f042 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 9e0b46a371ed5a85938511b89c7ef2e7699ed256 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 4a39ff57eaf869f57a6bd16680f0b55970fbb2f1 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- d8324638f66030b4abb1e94bdf5a17605e37dd96 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- e882f5e74e61272f46709822f35a74c7eaffe952 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -5a6239609b68e8206539af817a61d72259886460 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- a3b7b8eac00271f3228c5f37dc42d1706ae16d97 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 1a39c83aa482f5993be4719eb1b7f8aea6a9f042 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 4a39ff57eaf869f57a6bd16680f0b55970fbb2f1 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -8dd7cc00d2dcf6c511a86a4604cf7c496e894bcb with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 1a39c83aa482f5993be4719eb1b7f8aea6a9f042 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 4a39ff57eaf869f57a6bd16680f0b55970fbb2f1 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- ed21d8ba7decf3915ccbd2420842a631cc64b6a9 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 134cb93d214e1e0d43bf622673eddb0a24d4fdcc ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 701f6c0412cb1b52f9843e160bb7e88954d05a69 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 075b0f870e1be612ec9ccb98d8d4218fdd9a46a7 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 58191fd89b01610be33962dd4de2242df659ea2e ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 66e56c2b16c7c7b7a8992f0c604057b1e4000871 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 478ee1d3b9b54180103423b9804803f10207d6d3 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 0c20b6e3e57925d54a924009ebbfca88f9630b08 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 95dc875ee722908aa919108a69c09b836d84076c ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- fb119f7671b1e4ea27b5beebf3c72ba3340e1909 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 3faec26b62605b4f9217c4732b0079759ed3e89c ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -aa5cc1acfcf65a4c7889846c227e85386090f719 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 95eef6487597c97e01fa0fc53d8d548900f21197 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 187ef7c1bfde8d77268bf4382da0613984394990 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- d05e01468b105514716d41a0dba1db8b52e0276c ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 32661d4cedd9cb43d1fe963001adc391599615f3 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- dc9fa729dd8d3b938d5ec89d00b14f57083cce0c ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- c459bb431051e3d0fe8a4496b018046570179808 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -32888d44441e334d0abf754e33ac86001c60ff36 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 187ef7c1bfde8d77268bf4382da0613984394990 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- d05e01468b105514716d41a0dba1db8b52e0276c ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 32661d4cedd9cb43d1fe963001adc391599615f3 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- dc9fa729dd8d3b938d5ec89d00b14f57083cce0c ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- c459bb431051e3d0fe8a4496b018046570179808 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -ac01368786cf384abbf7da34db6ed7556b032f96 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- fd5597c606727a801bcddeeed51117eb29a6d1b6 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 4e217f3f0084ebf85ecbf32995aa5830105f89cc ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 03ba7624fec4952d5865a2a844c8d8b1e8b744a8 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 772dd12a293a9925ddb7dde00f52877279637693 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 5d58670b0f61d6413ed32a7d0bd9fdaca0f9017b ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 054cdb9bc9c143ba689e61b3e59fe7fa3dc8b101 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- dc9fa729dd8d3b938d5ec89d00b14f57083cce0c ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 52f5856d6312a53515da1901cd9d29df5e6644e0 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -918020d1c68249c74bb0e7e6efda9b90a6605123 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- c97be118910fafe078d5f9ef1a3572ae5178d595 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 6797c1421052efe2ded9efdbb498b37aeae16415 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d9c6f1df8f749aa032f102f0c2dae9481d4aab66 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d917d3e26adc9854b4569871e20111c38de2606f ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 4e217f3f0084ebf85ecbf32995aa5830105f89cc ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 8c84b543971e970f694d0700e43642b12bb5a649 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 772dd12a293a9925ddb7dde00f52877279637693 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- df7981c82f3d6b6523af404886cbb2d93b2ca235 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 054cdb9bc9c143ba689e61b3e59fe7fa3dc8b101 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- ee25635640ae59703275c72ade6a68d9bee821d5 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- dc9fa729dd8d3b938d5ec89d00b14f57083cce0c ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- d5971e65b6a13cafc68d5bf8c211c14dd4863cd9 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 0550e410e4811d1bd7fc064fe42f17202ae1b166 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -d1565ced15d3ad46e9adf9d88e7622c76cbe6453 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 5212b9fa864e35ba0fd2b099a7998189b42bb8b6 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3115e9ee914951e01f285eb5eb2dad72b06e8cf2 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- abb9ad1f40f5b33d2f35462244d499484410addb ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 1928617dbe33f61ad502cb795f263e9ce4d38f24 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- cf66b9258c4a4573664e1cc394921c81b08902a1 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f169a85ed43158001a8d0727a3d2afd7f831603f ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3e415ab36161c729f03ab8d2c720a290b7310acd ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 054cdb9bc9c143ba689e61b3e59fe7fa3dc8b101 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- ee546ab4eae43c5a70231d9eee62424d7658eba5 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- d5971e65b6a13cafc68d5bf8c211c14dd4863cd9 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -1b8f14cbee09dfce1a8f224e793bc4e44ab96793 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 29841f1ee0c2d9f289bce7924cfeeb8b1b44115d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- b68b746f074b947f470d666b2c4091f7112053f4 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- fc259daa23602ca956f594ae49a9426226ffe6ca ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- ab62cbc9a6ac20ecdda2d400384ab43d8904fd23 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- d5971e65b6a13cafc68d5bf8c211c14dd4863cd9 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -5b1decf33dbb5aa6e4c65fc4dca2b05a2a035818 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 29841f1ee0c2d9f289bce7924cfeeb8b1b44115d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 5568880f9cea2444c9f66200278bb251f4c9f250 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- fc259daa23602ca956f594ae49a9426226ffe6ca ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- ab62cbc9a6ac20ecdda2d400384ab43d8904fd23 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- d5971e65b6a13cafc68d5bf8c211c14dd4863cd9 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -c2ef9e42336a20b3751f8b4184fff2402d8a6257 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 5568880f9cea2444c9f66200278bb251f4c9f250 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 1598aca49f64c14012c070d2506f572106f31748 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- cb8e91e36890d9a5034020640dd0077979651f8a ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 44cf31f4642e7ff74dc6b83724319ad571a2b277 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -1d8cf9c80fd2d98be2ae84c7e6ee1284eaf43b8a with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 17e51c385ea382d4f2ef124b7032c1604845622d ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 434e4fb70a2aa52de64ff68f9774e2c6498dfa03 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 1598aca49f64c14012c070d2506f572106f31748 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- cb8e91e36890d9a5034020640dd0077979651f8a ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 44cf31f4642e7ff74dc6b83724319ad571a2b277 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -404d6fc0668068dbc1835ae7d25972753ce433f9 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 2efaddebaf08e65b6c2913fbc42eb82a8226f974 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 1598aca49f64c14012c070d2506f572106f31748 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- b9f61b06d238df9d062239318afe9caa8f299398 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- cb8e91e36890d9a5034020640dd0077979651f8a ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- ad08bb2037d9fc4be7544b72df7e5ab706037411 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- f04ba19c84cc7834fca89a628e77f9a0219b510b ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 44cf31f4642e7ff74dc6b83724319ad571a2b277 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -9d4f2507a4eacd98fb17d427567b9565a74f7295 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 421750c5311e02798dbb8baf3c3e120004bdd978 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 6fb6240fdb19cb72b138c32d0f1051e146fef65b ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 300e33465be379c83c8ab6492db751b88a512eaf ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 54a76695c5864bdc4e9f934aa0998dbdc2b54967 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- f1cfcfc3ddc85ee9f22e4eddd8f6cd56571662bd ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 71142a400ba79be06956873b2c395e9ca08e1571 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 4d7063f4fb47e081fce57ca3015be2e5f9126636 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 20f60a3d9af2a1b91586657ec3530c146ec58dc9 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 14b78f19ac1d72803f53e6285cd97774d692c2f4 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 1d84e1d8246ca83056314ef74f9bef15dad30aa5 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 65e92812fa00679c530af347b5743bfb2421eb8a ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- b605edddc553d278ef4eb2a6d9408d379a49d59d ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 0634a5ddf339c9fa257136591fc384523233e4d7 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 47cfb60895ee2662722ebcc1d044b09308972958 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- af5678110f1173ff12753f127c0dd8f265f8541d ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 4926ac4f50a4532988136ed86a97b6fd5657a3a5 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- fb9613c8c5cca81e169b478c4c1db5b47bbf6c61 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 5d8dea678a648ef077a4b81105eda9978d7d2bfb ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- a9af20404642ae5576b19b57d9f21ede22f1a8ec ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 3662435daf8157c7e248c84d3aa26e7f92f8cc1b ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -10e04737320fdab63f749bf91260f0d91cec9d36 with predicate ----- 19cff8f5d9dcf38c3bf1ba5d45ff815cfb5c379b ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- c951561453e3daeec1f675a594cd6307bcd603b5 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- ee90c978d296d6f44393944b6309e11b4d839ffe ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 78810a2f78cb5abb267cee04a4ee9b2e0ef65df3 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 2d316f065241fdcd43e3d058a125a7a48e47ed39 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 082e57e560335105e26c0224addd6f738a7dbfad ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 404cea120c3e485c1be5be7d5221cc9abd05392f ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 4d7063f4fb47e081fce57ca3015be2e5f9126636 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 20f60a3d9af2a1b91586657ec3530c146ec58dc9 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 2fc7781f3f015f5f11926aa968051bdd66e4679f ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- f41429a6851ba2ad748ad3ffa01b025cb7aebdfc ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 825eba5a8f304bc8e99719d454c729477952cbd1 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- c9352a1803198241d676cf5d623b054cd99a0736 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 973f242ad1c93750a303092a0eea6bb4ab82d5eb ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- fff3c0a0da317a9fc345906563356438360074f3 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 09238c667aaaa284f9d03c17c4aea771054bd8af ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 36e35e4065817c503f545519bcb4808ce7a2bbf3 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 14a0990db542a3be29bc753cbd9a46431737d561 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- 3739a704b637b7e5ad329b5f71449cafb23beb27 ---- -cecac8c5d77669ace6745579afe489fac540a9ef with predicate ----- e3b23b2aaa6493a78275e3c667ab931ed2c4dce9 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 8725f820160f9e2cf0662a559bce55fc5fad3497 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- c951561453e3daeec1f675a594cd6307bcd603b5 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 2989947806c923b5b7c54177318b387e72836b1e ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 78810a2f78cb5abb267cee04a4ee9b2e0ef65df3 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- b18d7ff8bfd9415e599ada95ef1aec0e9bbd2a8b ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 082e57e560335105e26c0224addd6f738a7dbfad ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 404cea120c3e485c1be5be7d5221cc9abd05392f ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 185e1f57edd91cb94cc85ff664a12defae215ba6 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 4d7063f4fb47e081fce57ca3015be2e5f9126636 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 20f60a3d9af2a1b91586657ec3530c146ec58dc9 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- f045926d19ca39952d191f72430b0e19bfde53ea ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 7091136b6fdb254e81544ad8d594a447cec7e186 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- d47c37ff49fad250a4c845a199532826870e6337 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 4c1fa7fb009aba16dc0642ca6934eddde60912a8 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- dc6f067e4d699879e21f067bfe1a909b79c004e3 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 38b2a5abf3287e16d372659260bcd8183e15c840 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 85a7c581718cff7e6a9d8ad94c9c961498730bd0 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- b095b47ed90835f8d5797c5042bc07d21b7957f1 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 15b5bbbeb61ea34f90419600648844be693f0476 ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 3812f21365c03e6914426d7283da4ab26bd8209f ---- -a71a31324498ab4eb4d673cdfb2d4b69209379ec with predicate ----- 2147e4cb4d6ae7bc9bd427c0df70e23f1cd6210e ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 1fbe3e437516992f78ba9290c55ab9c8410ec574 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- ad7a3380840fe64959603faf76db7265dc8d82f7 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 28cba11a5d6f3ee8349563fe0bedfc17a309de79 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 9822d97f95f3200f2bdc7705a93549370c94a4f7 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 4c42412f8f6f8c50fe1c918fbc4d8e82e77e58be ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 082e57e560335105e26c0224addd6f738a7dbfad ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 404cea120c3e485c1be5be7d5221cc9abd05392f ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 9d2690be518742aadcd39114b7f02c01a86cc43d ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 4bc8760a994ba6bb1a2ee04b8d949fe17128c0b9 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- a9bf30dd24364a8322a6845a0664fe1b2781b391 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- f045926d19ca39952d191f72430b0e19bfde53ea ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 7091136b6fdb254e81544ad8d594a447cec7e186 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- d47c37ff49fad250a4c845a199532826870e6337 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 4c1fa7fb009aba16dc0642ca6934eddde60912a8 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- dc6f067e4d699879e21f067bfe1a909b79c004e3 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 38b2a5abf3287e16d372659260bcd8183e15c840 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- d7a2f27140e393a47d8c34a43eeb9bc620da9ab3 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- b095b47ed90835f8d5797c5042bc07d21b7957f1 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 15b5bbbeb61ea34f90419600648844be693f0476 ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 3812f21365c03e6914426d7283da4ab26bd8209f ---- -8a774b69494b286fb78b539b9f5a4867278d53f0 with predicate ----- 2147e4cb4d6ae7bc9bd427c0df70e23f1cd6210e ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- ac7766e33159fb2b7b2c2aceef7a3b80f8efec24 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- a49d06b5c18b2efb683c222c1fbb54219cd4d2e6 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- eeb770e065099ceb925b0fa98844436600daf541 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- dffad2f029b6f1f8a8f4011cd3da3ce0cc89aa1a ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- ad7a3380840fe64959603faf76db7265dc8d82f7 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 01bb954499e4eebf51604784cd75a64aa82b7b5a ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 008fb66861b7bc97eeb2d1937efee9609cc81d80 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 28cba11a5d6f3ee8349563fe0bedfc17a309de79 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 9822d97f95f3200f2bdc7705a93549370c94a4f7 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 33dd843be2bb0992afd7fcd75613b3f3af2f00f4 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 3c2d37c16f49afd8e7ed5d85807bb9491633b335 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 4c42412f8f6f8c50fe1c918fbc4d8e82e77e58be ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 082e57e560335105e26c0224addd6f738a7dbfad ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 404cea120c3e485c1be5be7d5221cc9abd05392f ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 235c3e215c4fb1f04838d9a757e1ca2e3e7b9e96 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- c89c3c3fbdf8dd31bf0d712732dc2dc3def477ca ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 0cd7715ebff8c16e34480d699d874a9373d02312 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 9d2690be518742aadcd39114b7f02c01a86cc43d ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 4083841e8b31bad0fd60a72ae7dd318a7d24bcec ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 4bc8760a994ba6bb1a2ee04b8d949fe17128c0b9 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- cb432bd95e70dbdbcdff14dbe20bb4211ca34743 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- f6d31e8d8b66d0b4f4a8f8b6bce9614d626ae489 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 63bc36a919bb26745182445139e76f4cca6608e5 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- a9bf30dd24364a8322a6845a0664fe1b2781b391 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- f1e103487d229f448776ab3c543ee0cfc7d78369 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 7da48d85ef4158dd32829dce50407e05ec817824 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- e1afc7ff3677ba8053f691931e9962482ab8cb22 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 2bd6f2cd8e5e633722a9e9923606c2d9e46e2009 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- e56f5262621ebe2a5a903dde14e149845c963930 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- c4df85c6216036926df44a108f9689094f095533 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 95a1ebffc0d01c7dc3dbb6aaf3ba899debd1b833 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- f045926d19ca39952d191f72430b0e19bfde53ea ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 7091136b6fdb254e81544ad8d594a447cec7e186 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- d47c37ff49fad250a4c845a199532826870e6337 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 4c1fa7fb009aba16dc0642ca6934eddde60912a8 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- dc6f067e4d699879e21f067bfe1a909b79c004e3 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 38b2a5abf3287e16d372659260bcd8183e15c840 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- d7a2f27140e393a47d8c34a43eeb9bc620da9ab3 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- b095b47ed90835f8d5797c5042bc07d21b7957f1 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 15b5bbbeb61ea34f90419600648844be693f0476 ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 3812f21365c03e6914426d7283da4ab26bd8209f ---- -960b40fe368a9882221bcdd8635b9080dec01ec6 with predicate ----- 2147e4cb4d6ae7bc9bd427c0df70e23f1cd6210e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b213ab544114f7e6148ee5f2dda9b7421d2d998 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a0bb1b1d427b620d7acbada46a13c3123412e66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03db7c345b3ac7e4fc55646775438c86f9b79ee7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a98c7404d85ca0fdc96a5f4c0c740f5f13c62cb7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f8c61dbd14ec1bdbbee59e301aef2c158bf7b55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4359204a9b05c4abba3bc61c504dca38231d45f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d7b8ba9f2e9298496232e4ae66bd904a1d71001 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff56dbbfceef2211087aed2619b7da2e42f235e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17c750a0803ae222f1cdaf3d6282a7e1b2046adb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eff48b8ba25a0ea36a7286aa16d8888315eb1205 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09fb2274db09e44bf3bc14da482ffa9a98659c54 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07bfe1a60ae93d8b40c9aa01a3775f334d680daa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aba4d9b4029373d2bccc961a23134454072936ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b09003fffa8196277bcfaa9984a3e6833805a6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc8d23d3d6e735d70fd0a60641c58f6e44e17029 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b0465c9bcca64c3a863a95735cc5e602946facb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eae33d324376a0a1800e51bddf7f23a343f45a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d9011c05b0e27f1324f393e65954542544250d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb3fec340f89955a4b0adfd64636d26300d22af9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b72118e231c7bc42f457e2b02e0f90e8f87a5794 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59c89441fb81b0f4549e4bf7ab01f4c27da54aad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe594eb345fbefaee3b82436183d6560991724cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- affee359af09cf7971676263f59118de82e7e059 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9f9027779931c3cdb04d570df5f01596539791b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f5d2fd68e784c2b2fd914a196c66960c7f48b49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26dfeb66be61e9a2a9087bdecc98d255c0306079 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bf00a6719804c2fc5cca280e9dae6774acc1237 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae9d56e0fdd4df335a9def66aa2ac96459ed6e5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cef949913659584dd980f3de363dd830392bb68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3903d8e03af5c1e01c1a96919b926c55f45052e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 42e4f5e26b812385df65f8f32081035e2fb2a121 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6500844a925f0df90a0926dbdfc7b5ebb4a97bc9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00b5802f9b8cc01e0bf0af3efdd3c797d7885bb1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 703280b8c3df6f9b1a5cbe0997b717edbcaa8979 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b6fe83f4d817a3b73b44df16cfb4f96bd4d9904 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8340e0bb6ad0d7c1cdb26cbe62828d3595c3b7a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 091ac2960fe30fa5477fcb5bae203eb317090b3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ca97dcef3131a11dd5ef41d674bb6bd36608608 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bef6d375fd21e3047ed94b79a26183050c1cc4cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bbf6520460dc4d2bfd7943cda666436f860cf71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 702bdf105205ca845a50b16d6703828d18e93003 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a0d131ece696f259e7ab42a064ceb10dabb1fcc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93954d20310a7b77322211fd7c1eb8bd34217612 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a61a63ed4bb866b2817acbb04e045f8460e040e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0f79c58ad919e90261d1e332df79a4ad0bc40de ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18b6aa55309adfa8aa99bdaf9e8f80337befe74e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79e24f78fa35136216130a10d163c91f9a6d4970 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 820d3cc9ceda3e5690d627677883b7f9d349b326 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8ec952343583324c4f5dbefa4fb846f395ea6e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abf9373865c319d2f1aaf188feef900bb8ebf933 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d86d883714072b6e3bbc56a2127c06e9d6a6582 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a84459c6a5a1d8a81e4a51189091ef135e1776e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 057514e85bc99754e08d45385bf316920963adf9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cefc0df04440215dad825e109807aecf39d6180b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df39446bb7b90ab9436fa3a76f6d4182c2a47da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 636f77bf8d58a482df0bde8c0a6a8828950a0788 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a625d08801eacd94f373074d2c771103823954d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 617c09e70bfd54af1c88b4d2c892b8d287747542 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45d1cd59d39227ee6841042eab85116a59a26d22 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 567c892322776756e8d0095e89f39b25b9b01bc2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dbc2be846d1d00e907efbf8171c35b889ab0155 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01a96b92f7d873cbd531d142813c2be7ab88d5a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 464504ce0069758fdb88b348e4a626a265fb3fe3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 690722a611a25a1afcdb0163d3cfd0a8c89d1d04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90f0fb8f449b6d3e4f12c28d8699ee79a6763b80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb02e1229d336decc7bae970483ff727ed7339db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb2461d84f97a72641ef1e878450aeab7cd17241 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbddc30a4d5c37feabc33d4c4b161ec8e5e0bf7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c51f93823d46f0882b49822ce6f9e668228e5b8d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17643e0bd1b65155412ba5dba8f995a4f0080188 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fbf0ef97d6f59d2eb0f37b29716ba0de95c4457 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4832aa6bf82e4853f8f426fc06350540e2c8a9e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48c1e9b430cc84366f2c29bb0006e9593659835e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76bcd7081265f1d72fcc3101bfda62c67d8a7f32 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eae0e37c88a71a3b8ca816b820eed71fd1590f11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a04c15b1f77f908b1dd3983a27ee49c41b3a3e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4fe6efbccc2ad5c2044bf36e34019363018630 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63c31b60acf2286095109106a4e9b2a4289ec91f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5df76d451ff0fde14ab71b38030b6c3e6bc79c08 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce8cc4a6123a3ea11fc4e35416d93a8bd68cfd65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b11bcfa3df4d0b792823930bffae126fd12673f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47f35d1ba2b9b75a9078592cf4c41728ac088793 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 385a8c6c1a72dc34f69c5273c1b4c1285cc1d3c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20f4a9d49b466a18f1af1fdfb480bc4520a4cdc2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85ebfb2f0dedb18673a2d756274bbcecd1f034c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6503ef72d90164840c06f168ab08f0426fb612bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33346b25c3a4fb5ea37202d88d6a6c66379099c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c30bf3ba7548a0e996907b9a097ec322760eb43a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90c4db1f3ba931b812d9415324d7a8d2769fd6db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26ccee15ae1712baf68df99d3f5f2fec5517ecbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5402a166a4971512f9d513bf36159dead9672ae9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572bbb39bf36fecb502c9fdf251b760c92080e1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 969185b76df038603a90518f35789f28e4cfe5b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e62078d023ba436d84458d6e9d7a56f657b613ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 300261de4831207126906a6f4848a680f757fbd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c242b55d7c64ee43405f8b335c762bcf92189d38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e76b5379cf55fcd31a2e8696fb97adf8c4df1a8d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfa37825b011af682bc12047b82d8cec0121fe4e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f08d3067310e0251e6d5a33dc5bc65f1b76a2d49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eec9b86a81693d2b2d18ea651b1a0b5df521266 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4fe276637fe1ce3b2ebb504b69268d5b79de1ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da88d360d040cfde4c2bdb6c2f38218481b9676b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b38725361f711ae638c048f93a7b6a12d165bd4e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c43652c9f5b11b611e1aca0a6d67393e9e38c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 473fc3a348cd09b4ffca319daff32464d10d8ef9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3778ec37d17a6eb781fa9c6b5e2009fa7542d77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 803aca26d3f611f7dfd7148f093f525578d609ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d92fee01b05e5e217e6dad5cc621801c31debae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b60ab31cfa2ca146069df8dbc21ebfc917db0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34356322ca137ae6183dfdd8ea6634b64512591a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f62c8d8bbb566edd9e7a40155c7380944cf65dfb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 025fe17da390c410e5bae4d6db0832afbfa26442 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a880c5f4e00ef7bdfa3d55a187b6bb9c4fdd59ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6b661c04d82599ad6235ed1b4165b9f097fe07e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9b0e75c07ccbf90a9f2e67873ffbe672bb1a859 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c6178f53233aa98a602854240a7a20b6537aa7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5c69071fd6c730d29c31759caddb0ba8b8e92c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2448ac4ca337665eb22b9dd5ca096ef625a8f52b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fed0cadffd20e48bed8e78fd51a245ad666c54f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39eb0e607f86537929a372f3ef33c9721984565a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 595181da70978ed44983a6c0ca4cb6d982ba0e8b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1cd58ba862cce9cd9293933acd70b1a12feb5a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36811a2edc410589b5fde4d47d8d3a8a69d995ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c34c23a830bb45726c52bd5dcd84c2d5092418e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af7913cd75582f49bb8f143125494d7601bbcc0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b03c2eb07f08dd5d6174a04e4288d41f49920f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96f8f17d5d63c0e0c044ac3f56e94a1aa2e45ec3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 37cef2340d3e074a226c0e81eaf000b5b90dfa55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1ace258417deae329880754987851b1b8fc0a7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f58702b0c3a0bb58d49b995a7e5479a7b24933e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7988bb8ce25eb171d7fea88e3e6496504d0cb8f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f8320b7bf75b6ec375ade605a9812b4b2147de9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f2f3e848e10d145fe28d6a8e07b0c579dd0c276 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f875ddea28b09f2b78496266c80502d5dc2b7411 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b16037a4ff17f0e25add382c3550323373c4398 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a2f5d05f4a8e3427d6dd2a5981f148a9f6bef84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 887f249a2241d45765437b295b46bca1597d91a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158b3c75d9c621820e3f34b8567acb7898dccce4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9de6450084eee405da03b7a948015738b15f59e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c3255387fe2ce9b156cc06714148436ad2490d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 559ddb3b60e36a1b9c4a145d7a00a295a37d46a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3473060f4b356a6c8ed744ba17ad9aa26ef6aab7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c6c8dcc01b08748c552228e00070b0c94affa94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c19a6e1004bb8c116bfc7823477118490a2eef6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af86f05d11c3613a418f7d3babfdc618e1cac805 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01c8d59e426ae097e486a0bffa5b21d2118a48c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90fefb0a8cc5dc793d40608e2d6a2398acecef12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2f9f4e7fd8af09126167fd1dfa151be4fedcd71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11d91e245194cd9a2e44b81b2b3c62514596c578 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a1339a3d6751b2e7c125aa3195bdc872d45a887 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecb12c27b6dc56387594df26a205161a1e75c1b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f97d37881d50da8f9702681bc1928a8d44119e88 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab69b9a67520f18dd8efd338e6e599a77b46bb34 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78d12aa7c922551dddd7168498e29eae32c9d109 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 037d62a9966743cf7130193fa08d5182df251b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 434306e7d09300b62763b7ebd797d08e7b99ea77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e37ebaa5407408ee73479a12ada0c4a75e602092 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6e458c9f8682ab5091e15e637c66ad6836f23b4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3f91bd1c0e8aef1b416ae6b1f55e7bd93a4f281 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dd3cdfc9d647ecb020625351e0ff3a7346e1918d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11837f61aa4b5c286c6ee9870e23a7ee342858c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86114886ae8c2e1a9c09fdc145269089f281d212 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94b7ece1794901feddf98fcac3a672f81aa6a6e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dff2004308a7a1e5b9afc7a5b3b9cb515e12514 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2765dfd72cd5b0958ec574bea867f5dc1c086ab0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- baec2e293158ccffd5657abf4acdae18256c6c90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8e7a7df78fb98314ba5a0a98f4600454a6c3953 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- efc259833ee184888fe21105d63b3c2aa3d51cfa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96364599258e7e036298dd5737918bde346ec195 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f653af66e4c9461579ec44db50e113facf61e2d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c08f592cc0238054ec57b6024521a04cf70e692f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 730177174bbc721fba8fbdcd28aa347b3ad75576 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e21d96a76c223064a3b351fe062d5452da7670cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8cad756f357eb587f9f85f586617bff6d6c3ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1fa8506d177fa49552ffa84527c35d32f193abe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4119a576251448793c07ebd080534948cad2f170 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9448c082b158dcab960d33982e8189f2d2da4729 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e331a0b5e2acd1938bf4906aadf7276bc7f1b60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21e21d04bb216a1d7dc42b97bf6dc64864bb5968 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18b75d9e63f513e972cbc09c06b040bcdb15aa05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f12c8c34371a7c46dad6788a48cf092042027ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 043e15fe140cfff8725d4f615f42fa1c55779402 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8e223263c73a7516e2b216a546079e9a144b3a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- efe68337c513c573dde8fbf58337bed2fa2ca39a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dd71d3edbf3930cce953736e026ac3c90dd2e59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6752fad0e93d1d2747f56be30a52fea212bd15d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0767cc527bf3d86c164a6e4f40f39b8f920e05d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76ba0924be14d55d01db0506b3e6a930cc72bf0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69b75e167408d0dfa3ff8a00c185b3a0bc965b58 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fd9f6ee5c8b4ae4e01a40dc398e2768d838210d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b85fec1e333896ac0f27775469482f860e09e5bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8470777b44bed4da87aad9474f88e7f0774252a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82189398e3b9e8f5d8f97074784d77d7c27086ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71e28b8e2ac1b8bc8990454721740b2073829110 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0a7824253ae412cf7cc27348ee98c919d382cf2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c885781858ade2f660818e983915a6dae5672241 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb7288d4f4a93d07c9989c90511f6887bcaeb25 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a094ac1808f7c5fa0653ac075074bb2232223ac1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36440f79bddc2c1aa4a7a3dd8c2557dca3926639 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a233359ce1ec30386f97d4acdf989f1c3570842 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 696e4edd6c6d20d13e53a93759e63c675532af05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b0028e1e75e1ee0eea63ba78cb3160d49c1f3a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3211ae9dbfc6aadd2dd1d7d0f9f3af37ead19383 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74a1b17a29390660abe79d83d837a666141f8625 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e4211b20e8e57fe7b105b36501b8fc9e818852f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ad4079dde47ce721e7652f56a81a28063052a166 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d0fb22b4f5f94da44075d8c43da24b344ae3f0da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d06f5af4311e6a1d17213dde57a261e30dbf669 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24f75e7bae3974746f29aaecf6de011af79a675d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 184cc1fc280979945dfd16b0bb7275d8b3c27e95 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f9d492e479eda07c5bbe838319eecac459a6042 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfbd5ece215dea328c3c6c4cba31225caa66ae9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b10de37fe036b3dd96384763ece9dc1478836287 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70aa1ab69c84ac712d91c92b36a5ed7045cc647c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9541d6bffe4e4275351d69fec2baf6327e1ff053 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46b204d1b2eb6de6eaa31deacf4dd0a9095ca3fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08989071e8c47bb75f3a5f171d821b805380baef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c03da67aabaab6852020edf8c28533d88c87e43f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e30a597b028290c7f703e68c4698499b3362a38f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e7314c57ef56aaf5fd27a311bfa6a01d18366a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c96476be7f10616768584a95d06cd1bddfe6d404 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 651a81ded00eb993977bcdc6d65f157c751edb02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c6e67013fd22840d6cd6cb1a22fcf52eecab530 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14fc8bd3e5a8249224b774ea9052c9a701fc8e0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ba76d683df326f2e6d4f519675baf86d0373abf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1297f65226e3bfdb31e224c514c362b304c904c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cd47aeea822c484342e3f0632ae5cf8d332797d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d906f31a283785e9864cb1eaf12a27faf4f72c42 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d283c83c43f5e52a1a14e55b35ffe85a780615d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 60acfa5d8d454a7c968640a307772902d211f043 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6643a9feb39d4d49c894c1d25e3d4d71e180208a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ffddedf5467df993b7a42fbd15afacb901bca6d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2067ba536dd78549d613dc14d8ad223c7d0aa5d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c93e971f3e0aa4dea12a0cb169539fe85681e381 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50cbafc690e5692a16148dbde9de680be70ddbd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df6fa49c0662104a5f563a3495c8170e2865e31b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a728b0a4b107a2f8f1e68bc8c3a04099b64ee46c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7968d136276607115907267b3be89c3ff9acd03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a9f8c55d6a58fe42fe67e112cbc98de97140f75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5232c89de10872a6df6227c5dcea169bd1aa6550 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7180d50f785ec28963e12e647d269650ad89b31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 624eb284e0e6edc4aabf0afbdc1438e32d13f4c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9562ae2e2436e052d31c40d5f9d3d0318f6c4575 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b650c4f28bda658d1f3471882520698ef7fb3af6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 135e7750f6b70702de6ce55633f2e508188a5c05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d43a751e578e859e03350f198bca77244ba53b5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1759a78b31760aa4b23133d96a8cde0d1e7b7ba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a4fc6abfb3b39237f557372262ac79f45b6a9fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb411ee92d30675a8d3d110f579692ea02949ccd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7b5e92791dd4db3535b527079f985f91d1a5100 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94bbe51e8dc21afde4148afb07536d1d689cc6ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb7fd31955aaba8becbdffb75dab2963d5f5ad8c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b88532a5346a9a7e8f0e45fec14632a9bfe2c89 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f9840b9220d57b737ca98343e7a756552739168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3787f622e59c2fecfa47efc114c409f51a27bbe7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98595da46f1b6315d3c91122cfb18bbf9bac8b3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c4dec45d387ccebfe9bd423bc8e633210d3cdbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a1991773b79c50d4828091f58d2e5b0077ade96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3eae2cdd688d8969a4f36b96a8b41fa55c0d3ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ef37754527948af1338f8e4a408bda7034d004f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3fc83f2333eaee5fbcbef6df9f4ed9eb320fd11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30387f16920f69544fcc7db40dfae554bcd7d1cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16d3ebfa3ad32d281ebdd77de587251015d04b3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b68361c8b81b23be477b485e2738844e0832b2f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dcb520caa069914f9ab014798ab321730f569cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 176838a364fa36613cd57488c352f56352be3139 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f37011d7627e4a46cff26f07ea7ade48b284edee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3ea6c0564a4a8c310d0573cebac0a21ac7ab0a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e263b8f972f78c673f36f2bbc1f8563ce6acb10 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a175068f3366bb12dba8231f2a017ca2f24024a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 762d8fb447b79db7373e296e6c60c7b57d27c090 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5262acbd33b70fb676284991207fb24fa9ac895 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3edd16ca6e217ee35353564cad3aa2920bc0c2e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9766832e11cdd8afed16dfd2d64529c2ae9c3382 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9cb7ae8d9721e1269f5bacd6dbc33ecdec4659c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0b10d965d6377c409ceb40eb47379d79c3fef9f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c16f584725a4cadafc6e113abef45f4ea52d03b3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5f0d48745727684473cf583a002e2c31174de2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 961539ced52c82519767a4c9e5852dbeccfc974e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe65adc904f3e3ebf74e983e91b4346d5bacc468 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e7045c4a2b2438adecd2ba59615fbb61d014512 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0238e6cce512a0960d280e7ec932ff1aaab9d0f1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7e09792a392eeed4d712b40978b1b91b751a6d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50edc9af4ab43c510237371aceadd520442f3e24 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0374d7cf84ecd8182b74a639fcfdb9eafddcfd15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7bde529ad7a8d663ce741c2d42d41d552701e19a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5453888091a86472e024753962a7510410171cbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b7839e6b55953ddac7e8f13b2f9e2fa2dea528b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 411635f78229cdec26167652d44434bf8aa309ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99ba753b837faab0509728ee455507f1a682b471 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4720e6337bb14f24ec0b2b4a96359a9460dadee4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24cd6dafc0008f155271f9462ae6ba6f0c0127a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a71ebbc1138c11fccf5cdea8d4709810360c82c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69ca329f6015301e289fcbb3c021e430c1bdfa81 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c6209f12e78218632319620da066c99d6f771d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f14903a0d4bb3737c88386a5ad8a87479ddd8448 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2fd537b5b3bb062a26c9b16a52236b2625ff44c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e236853b14795edec3f09c50ce4bb0c4efad6176 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18dd177fbfb63caed9322867550a95ffbc2f19d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b860d1873a25e6577a8952d625ca063f1cf66a84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6e1dcc992ff0a8ddcb4bca281ae34e9bc0df34b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fbc2304fea19a2b6fc53f4f6448102768e3eeb2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09a96fb2ea908e20d5acb7445d542fa2f8d10bb6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 890fd8f03ae56e39f7dc26471337f97e9ccc4749 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 809c7911944bc32223a41ea3cecc051d698d0503 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07f6f2aaa5bda8ca4c82ee740de156497bec1f56 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d4dd2f1a6f31df9e361ebaf75bc0a2de7110c37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 466ed9c7a6a9d6d1a61e2c5dbe6f850ee04e8b90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdd4368489345a53bceb40ebd518b961f871b7b3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d472327f4873a7a4123f7bdaecd967a86e30446 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86b269e1bff281e817b6ea820989f26d1c2a4ba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f344c8839a1ac7e4b849077906beb20d69cd11ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f404a50e95dd38012d33ee8041462b7659d79a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2616e12df494774f13fd88538e9a58673f5dabb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 391c0023675b8372cff768ff6818be456a775185 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 97aec35365231c8f81c68bcab9e9fcf375d2b0dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 173cb579972dbab1c883e455e1c9989e056a8a92 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a684a7c41e89ec82b2b03d2050382b5e50db29ee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c382f3678f25f08fc3ef1ef8ba41648f08c957ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3c8760feb03dd039c2d833af127ebd4930972eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 49f13ef2411cee164e31883e247df5376d415d55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a30b2430e25d615c14dafc547caff7da9dd5403 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15e457c8a245a7f9c90588e577a9cc85e1efec07 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 644f75338667592c35f78a2c2ab921e184a903a0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b6d4885db27b6f3e5a286543fd18247d7d765ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb792ea76888970d486323df07105129abbbe466 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5db2e0c666ea65fd15cf1c27d95e529d9e1d1661 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbf3d2745c3758490f31199e31b098945ea81fca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0420b01f24d404217210aeac0c730ec95eb7ee69 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d39bd5345af82e3acbdc1ecb348951b05a5ed1f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac286162b577c35ce855a3048c82808b30b217a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2810e8d3f34015dc5f820ec80eb2cb13c5f77b2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 607df88ee676bc28c80bca069964774f6f07b716 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7b401e0aa9dbb1a7543dde46064b24a5450db19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c9da7310eb6adf67fa8d35821ba500dffd9a2a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c859019afaffc2aadbb1a1db942bc07302087c52 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f358e04cb00647e1c74625a8f669b6803abd1fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a244bd15bcd05c08d524ca9ef307e479e511b54c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863abe8b550d48c020087384d33995ad3dc57638 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84c3f60fc805e0d5e5be488c4dd0ad5af275e495 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9de612ebe54534789822eaa164354d9523f7bde ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0059f432c4b9c564b5fa675e76ee4666be5a3ac8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14a7292b26e6ee86d523be188bd0d70527c5be84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72a2f7dd13fdede555ca66521f8bee73482dc2f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c563b7211b249b803a2a6b0b4f48b48e792d1145 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6804e73beb0900bd1f5fd932fab3a88f44cf7a31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73feb182f49b1223c9a2d8f3e941f305a6427c97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e81fd5447f8800373903e024122d034d74a273f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc553d6843c791fc4ad88d60b7d5b850a13fd0ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99b6dffe9604f86f08c2b53bef4f8ab35bb565a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a5a78b27ce1bcda6597b340d47a20efbac478d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fd8768c64d192b0b26a00d6c12188fcbc2e3224 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eca69510d250f4e69c43a230610b0ed2bd23a2e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c63abb360b4829b3d75d60fb837c0132db0510 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24d04e820ef721c8036e8424acdb1a06dc1e8b11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab361cfecf9c0472f9682d5d18c405bd90ddf6d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 99471bb594c365c7ad7ba99faa9e23ee78255eb9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45a5495966c08bb8a269783fd8fa2e1c17d97d6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61fef99bd2ece28b0f2dd282843239ac8db893ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 909ee3b9fe308f99c98ad3cc56f0c608e71fdee7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d94159db3067cc5def101681e6614502837cea5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0412f6d50e9fafbbfac43f5c2a46b68ea51f896f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e47352575d9b0a453770114853620e8342662fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4a83ff7910dc3617583da7e0965cd48a69bb669 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0a69bbec284bccbeecdf155e925c3046f024d4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 625969d5f7532240fcd8e3968ac809d294a647be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e671d243c09aa8162b5c0b7f12496768009a6db0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8cb3e0cac2f1886e4b10ea3b461572e51424acc7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cf0ca8b94dc815598e354d17d87ca77f499cae6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c429fc0382868c22b56e70047b01c0567c0ba31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87abade91f84880e991eaed7ed67b1d6f6b03e17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b17a76731c06c904c505951af24ff4d059ccd975 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158131eba0d5f2b06c5a901a3a15443db9eadad1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04005d5c936a09e27ca3c074887635a2a2da914c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c40cf5e83e56e339ec6ab3e75b008721e544ede ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cb09652c007901b175b4793b351c0ee818eb249 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91f6e625da81cb43ca8bc961da0c060f23777fd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d296eec67a550e4a44f032cfdd35f6099db91597 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ee8b09fd24962889e0e298fa658f1975f7e4e48c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b74a5bb6123b425a370da60bcc229a030e7875c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6b8e7b72ce81524cf82e64ee0c56016106501d96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e82a7845af93955d24a661a1a9acf8dbcce50b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff4f970fa426606dc88d93a4c76a5506ba269258 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2573dd5409e3a88d1297c3f9d7a8f6860e093f65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f4c7f3ec32a1943a0d5cdc0633fc33c94086f5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f4e51bb4fc9d9c74cdbfb26945d053053f60e7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8da4072d71c3b0c13e478dc0e0d92336cf1fdd9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fced2eb501e3428b3e19e5074cf11650945a840 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52f9369ec96dbd7db1ca903be98aeb5da73a6087 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3fabed8d0d237b4d97b695f0dff1ba4f6508e4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00ef69351e5e7bbbad7fd661361b3569b6408d49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eba84183ea79061eebb05eab46f6503c1cf8836f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55fd173c898da2930a331db7755a7338920d3c38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 768b9fffa58e82d6aa1f799bd5caebede9c9231b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d22d57010e064cfb9e0b6160e7bd3bb31dbfffc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a10ceef3599b6efc0e785cfce17f9dd3275d174f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cedd3321e733ee1ef19998cf4fcdb2d2bc3ccd14 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 913b4ad21c4a5045700de9491b0f64fab7bd00ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6aa78cd3b969ede76a1a6e660962e898421d4ed8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e633cc009fe3dc8d29503b0d14532dc5e8c44cce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05cf33acc6f451026e22dbbb4db8b10c5eb7c65a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e50ee0a0370fcd45a9889e00f26c62fb8f6fa44e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5f3c586e0f06df7ee0fc81289c93d393ea21776 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7392d68121befe838d2494177531083e22b3d29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc209ec23819313ea3273c8c3dcbc2660b45ad6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbd9ca4f16830c4991d570d3f9fa327359a2fa11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5dd2f0c0ed534ecbc1c1a2d8e07319799a4e9c7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae7499f316770185d6e9795430fa907ca3f29679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db4cb7c6975914cbdd706e82c4914e2cb2b415e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdfd3fc5b4d892b79dfa86845fcde0acc8fc23a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec29b1562a3b7c2bf62e54e39dce18aebbb58959 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 438d3e6e8171189cfdc0a3507475f7a42d91bf02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d01f0726d5764fe2e2f0abddd9bd2e0748173e06 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2ce56ffd016e2e6d1258ce5436787cae48a0812 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e27496dea8a728446e7f13c4ff1b5d8c2f3e736 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a2f8a9db703e55f3aa2b068cb7363fd3c757e71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 820bc3482b6add7c733f36fefcc22584eb6d3474 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9432bedaa938eb0e5a48c9122dd41b08a8f0d740 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80ac0fcf1b8e8d8681f34fd7d12e10b3ab450342 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7cff58fd53bdb50fef857fdae65ee1230fd0061 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 313b3b4425012528222e086b49359dacad26d678 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85cf7e89682d061ea86514c112dfb684af664d45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d17c2f6131b9a716f5310562181f3917ddd08f91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ee6c19423297b4c667d34ed1bd621dafaabb0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 553500a3447667aaa9bd3b922742575562c03b68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9932e647aaaaf6edd3a407b75edd08a96132ef5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebf46561837f579d202d7bd4a22362f24fb858a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 225529c8baaa6ee65b1b23fc1d79b99bf49ebfb1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a103d8c28b496ead8b4dd8215b103414f8b7f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dda3cbbd15e7a415c1cbd33f85d7d6d0e3a307a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05b5cedec2101b8f9b83b9d6ec6a8c2b4c9236bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4756f4a1298e053aaeae58b725863e8742d353a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34afc113b669873cbaa0a5eafee10e7ac89f11d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dc46d735003df8ff928974cb07545f69f8ea411 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abb18968516c6c3c9e1d736bfe6f435392b3d3af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a61393899b50ae5040455499493104fb4bad6feb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 284f89d768080cb86e0d986bfa1dd503cfe6b682 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfa0eac1578bff14a8f7fa00bfc3c57aba24f877 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6446608fdccf045c60473d5b75a7fa5892d69040 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 597fb586347bea58403c0d04ece26de5b6d74423 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74930577ec77fefe6ae9989a5aeb8f244923c9ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d85574e0f37e82e266a7c56e4a3ded9e9c76d8a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb8289e80c8b9fe48456e769e0421b7f9972af3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c2636d216d43b40a477d3a5180f308fc071abaeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6244c55e8cbe7b039780cf7585be85081345b480 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 607d8aa3461e764cbe008f2878c2ac0fa79cf910 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38c624f74061a459a94f6d1dac250271f5548dab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05753c1836fb924da148b992f750d0a4a895a81a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dba01d3738912a59b468b76922642e8983d8995b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14d7034adc2698c1e7dd13570c23d217c753e932 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d52c5783c08f4f9e397c4dad55bbfee2b8c61c5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44496c6370d8f9b15b953a88b33816a92096ce4d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0685d629f86ef27e4b68947f63cb53f2e750d3a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a086625da1939d2ccfc0dd27e4d5d63f47c3d2c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ba1ceaeadd8ff39810c5f410f92051a36dd17e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 544ceecf1a8d397635592d82808d3bb1a6d57e76 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5eb90461917afe04f31abedae894e63f81f827e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b303cb0c5995bf9c74db34a8082cdf5258c250fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 19a4df655ae2ee91a658c249f5abcbe0e208fa72 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fd090293792884f5a0d05f69109da1c970c3cab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 248ad822e2a649d20582631029e788fb09f05070 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95897f99551db8d81ca77adec3f44e459899c20b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b269775a75d9ccc565bbc6b5d4c6e600db0cd942 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4744efbb68c562adf7b42fc33381d27a463ae07a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 763531418cb3a2f23748d091be6e704e797a3968 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3c3efd20c50b2a9db98a892b803eb285b2a4f83 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f7e92cf00814fc6c4fb66527d33f7030f98e6bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71b3845807458766cd715c60a5f244836f4273b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69d7a0c42cb63dab2f585fb47a08044379f1a549 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59ad90694b5393ce7f6790ade9cb58c24b8028e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 64b85ee4cbaeb38a6dc1637a5a1cf04e98031b4b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43564d2e8f3b95f33e10a5c8cc2d75c0252d659a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf1354bb899726e17eaaf1df504c280b3e56f3d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ba39bd0f0b27152de78394d2a37f3f81016d848 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55146609e2d0b120c5417714a183b3b0b625ea80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 289fab8c6bc914248f03394672d650180cf39612 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f2b40d74c67c6fa718f9079654386ab333476d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba169916b4cc6053b610eda6429446c375295d78 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c459bfcfdd7487f8aae5dd4101e7069f77be846 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 321694534e8782fa701b07c8583bf5eeb520f981 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef2316ab8fd3317316576d2a3c85b59e685a082f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e6099bce97a688c251c29f9e7e83c6402efc783 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7289c75cceaaf292c6ee01a16b24021fd777ad5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01f142158ee5f2c97ff28c27286c0700234bd8d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d0d1d6cfec28ba89ed1819bee9fe75931e765d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb08a3df46718c574e85b53799428060515ace8d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb14533db732d62778ae48a4089b2735fb9e6f92 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3a57f53d74998e835bce1a69bccbd9c1dadd6f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f83797aefa6a04372c0d5c5d86280c32e4977071 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b16b6649cfdaac0c6734af1b432c57ab31680081 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05e9a6fc1fcb996d8a37faf64f60164252cc90c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7081db74a06c89a0886e2049f71461d2d1206675 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07f81066d49eea9a24782e9e3511c623c7eab788 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d66f8f79629bcfa846a3d24a2a2c3b99fb2a13f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16c2d9c8f0e10393bf46680d93cdcd3ce6aa9cfd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89d11338daef3fc8f372f95847593bf07cf91ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ad6dc07790fe567412ccbc2a539f4501cb32ab2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 199099611dd2e62bae568897f163210a3e2d7dbb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14f3d06b47526d6f654490b4e850567e1b5d7626 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1349ee61bf58656e00cac5155389af5827934567 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7d2671c6ef156d1a2f6518de4bd43e3bb8745be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a37405664efe3b19af625b11de62832a8cfd311c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cfd4b30cda23270b5bd2d1e287e647664a49fee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccaae094ce6be2727c90788fc5b1222fda3927c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f583a810162c52cb76527d60c3ab6687b238938 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a5cef5c7c4a7130626fc2d7d5d562e1e985bbd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 916a0399c0526f0501ac78e2f70b833372201550 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d759e17181c21379d7274db76d4168cdbb403ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fa1ce2b7dcf7f1643bb494b71b9857cbfb60090 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3face9018b70f1db82101bd5173c01e4d8d2b3bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 23b83cd6a10403b5fe478932980bdd656280844d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf237db554f8e84eaecf0fad1120cbd75718c695 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66bb01306e8f0869436a2dee95e6dbba0c470bc4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 193df8e795de95432b1b73f01f7a3e3c93f433ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0dd99fe29775d6abd05029bc587303b6d37e3560 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb8b383d8be3f9da39c02f5e04fe3cf8260fa470 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63a444dd715efdce66f7ab865fc4027611f4c529 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b207f0e8910a478ad5aba17d19b2b00bf2cd9684 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9121f629d43607f3827c99b5ea0fece356080cf0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 882ebb153e14488b275e374ccebcdda1dea22dd7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fdb1dc77a45a26d8eac9f8b53f4d9200f54f7efe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 359a7e0652b6bf9be9200c651d134ec128d1ea97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bf53a3913d55f933079801ff367db5e326a189a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d7eaf1253245c6b88fd969efa383b775927cdd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d8a5144bd8c0940d9f2593a21aec8bebf7c035 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07657929bc6c0339d4d2e7e1dde1945199374b90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5c94165d24195994c929de95782e1d412e7c2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ff2f4f7a2f8212a68aff34401e66a5905f70f51 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca080bbd16bd5527e3145898f667750feb97c025 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e2d2651773722c05ae13ab084316eb8434a3e98 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6fdb67cec5c75b3f0a855042942dac75c612065 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bebfe31c2d9064d4a13de95ad79a4c9bdc3a33a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87b5d9c8e54e589d59d6b5391734e98618ffe26e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ece804aed9874b4fd1f6b4f4c40268e919a12b17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5cc590c875ada0c55d975cbe26141a94e306c94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fa99bff215249378f90e1ce0254e66af155a301 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dab0c2e0da17c879e13f0b1f6fbf307acf48a4ff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2cd5970af1ea8024ecf82b11c1b3802d7c72ba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acbd5c05c7a7987c0ac9ae925032ae553095ebee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 326409d7afd091c693f3c931654b054df6997d97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71bd08050c122eff2a7b6970ba38564e67e33760 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e7e82b114a5c1b3eb61f171c376e1cf85563d07 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b6b90f9f1e5310a6f39b75e17a04c1133269e8f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- daa3f353091ada049c0ede23997f4801cbe9941b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80204335d827eb9ed4861e16634822bf9aa60912 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 859ad046aecc077b9118f0a1c2896e3f9237cd75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 913d806f02cf50250d230f88b897350581f80f6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce7e1507fa5f6faf049794d4d47b14157d1f2e50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bd86c87c38d58b9ca18241a75c4d28440c7ef150 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e93ffe192427ee2d28a0dd90dbe493e3c54f3eae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a77a17f16ff59f717e5c281ab4189b8f67e25f53 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b176732ba16379d57f53e956456bc2c5970baf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a02facd0b4f9c2d2c039f0d7dc5af8354ce0201b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6df6d41835cd331995ad012ede3f72ef2834a6c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b50b96032094631d395523a379e7f42a58fe8168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b628dccf4102d2a63c6fc8cd957ab1293bafbc6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3bf002e3ccc26ec99e8ada726b8739975cd5640e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 687c8f0494dde31f86f98dcb48b6f3e1338d4308 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dac619e4917b0ad43d836a534633d68a871aecca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1bb0b1751b38da43dbcd2ec58e71eb7b0138d786 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9dbaab311dbafcba0b68edb6ed89988b476f1dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74a0507f4eb468b842d1f644f0e43196cda290a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc664f07535e3b3c1884d0b7f3cbcbadf9adce25 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b13c115994461fb6bafe5dd06490aae020568c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da8aeec539da461b2961ca72049df84bf30473e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a77eab2b5668cd65a3230f653f19ee00c34789bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c73b239bd10ae2b3cff334ace7ca7ded44850cbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 096027bc4870407945261eecfe81706e32b1bfcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6f596d7f46cb13a3d87ff501c844c461c0a3b0a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41b9cea832ad5614df94c314d29d4b044aadce88 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f66e25c25cde2423917ee18c4704fff83b837d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3953d71374994a00c7ef756040d2c77090f07bb4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31cc0470115b2a0bab7c9d077902953a612bbba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 881e3157d668d33655da29781efed843e4a6902a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33f2526ba04997569f4cf88ad263a3005220885e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11f0634803d43e6b9f248acd45f665bc1d3d2345 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c282315f0b533c3790494767d1da23aaa9d360b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dff4bdd4be62a00d3090647b5a92b51cea730a84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77e47bc313e42f9636e37ec94f2e0b366b492836 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a6ca8c40433400f6bb3ece2ed30808316de5be3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5cd12a6bcace3c99d94bbcf341ad7d4351eaca0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b3ffcdda1114ad204c58bdf3457ac076ae9a0b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6971a930644d56f10e68e818e5818aa5a5d2e646 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4106f183ad0875734ba2c697570f9fd272970804 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8690f8974b07f6be2db9c5248d92476a9bad51f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f6bf7948121357a85a8069771919fb13d2cecf9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a26349d8df88107bd59fd69c06114d3b213d0b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 530ab00f28262f6be657b8ce7d4673131b2ff34a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11fd713f77bb0bc817ff3c17215fd7961c025d7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6224c72b6792e114bc1f4b48b6eca482ee6d3b35 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7bbe6b01c82d9bcb3333b07bae0c9755eecdbbf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 926d45b5fe1b43970fedbaf846b70df6c76727ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ee33ac9b234c7501d97b4c2bf2e2035c5ec1fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c706a217238fbe2073d2a3453c77d3dc17edcc9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14b221bf98757ba61977c1021722eb2faec1d7cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e1fe7f6a83633207c9e743708c02c6e66173e7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce21f63f7acba9b82cea22790c773e539a39c158 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e4239c4c3b106b436673e4f9cca43448f6f1af9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c49ba433b3ff5960925bd405950aae9306be378b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8fc6563219017354bdfbc1bf62ec3a43ad6febcb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1634dc48b39ecca11dc39fd8bbf9f1d8f1b7be6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89df64132ccd76568ade04b5cf4e68cb67f0c5c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8591a094a768d73e6efb5a698f74d354c989291 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3d9b8df38dacfe563b1dd7abb9d61b664c21186 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1d2f4bc85da47b5863589a47b9246af0298f016 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92a481966870924604113c50645c032fa43ffb1d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ca25b9b090511fb61f9e3122a89b1e26d356618 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 914bbddfe5c02dc3cb23b4057f63359bc41a09ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f99fb4962c2777286a128adbb093d8f25ae9dc7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f08b7730438bde34ae55bc3793fa524047bb804 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9807dd48b73ec43b21aa018bdbf591af4a3cc5f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce5dfe7f95ac35263e41017c8a3c3c40c4333de3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c2446f24bc6a91ca907cb51d0b4a690131222d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29aa1b83edf3254f8031cc58188d2da5a83aaf75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8fd91020739a0d57f1df562a57bf3e50c04c05b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7be3486dc7f91069226919fea146ca1fec905657 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05e3b0e58487c8515846d80b9fffe63bdcce62e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6e0a6cb5c70efd0899f620f83eeebcc464be05c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0857d33852b6b2f4d7bc470b4c97502c7f978180 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e79a3f8f6bc6594002a0747dd4595bc6b88a2b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3265bd8beb017890699d093586126ff8af4a3fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f12b26b81a8e7667b2a26a7878e5bc033610ed5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80b038f8d8c7c67c148ebd7a5f7a0cb39541b761 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 190c04569bd2a29597065222cdcc322ec4f2b374 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 693b17122a6ee70b37cbac8603448aa4f139f282 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f773b4cedad84da3ab3f548a6293dca7a0ec2707 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f76463221cf1c69046b27c07afde4f0442b75d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9db530e428f798cdf5f977e9b2dbad594296f05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16223e5828ccc8812bd0464d41710c28379c57a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c1e984b212637fe108c0ddade166bc39f0dd2ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da43a47adb86c50a0f4e01c3c1ea1439cefd1ac2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 044977533b727ed68823b79965142077d63fe181 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ec27096fbe036a97ead869c7522262f63165e1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d15bc65735852d3dce5ca6d779a90a50c5323b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db0dfa07e34ed80bfe0ce389da946755ada13c5d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09d2ae5f1ca47e3aede940e15c28fc4c3ff1e9eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a644184b05e99a4809de378f21424ef6ced06e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f14a596a33feaad65f30020759e9f3481a9f1d9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34cce402e23a21ba9c3fdf5cd7f27a85e65245c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03126bfd6e97ddcfb6bd8d4a893d2d04939f197e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4f7d34f8752ab78949efcaa9f0bd938df33622 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5710466a728446d8169761d9d4c29b1cb752b00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a6cb4aab975a35e9ca7f28c1814aa13203ab835 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14582df679a011e8c741eb5dcd8126f883e1bc71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c22f1b05fee73dd212c470fecf29a0df9e25a18f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a14277eecf65ac216dd1b756acee8c23ecdf95d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2c1d194064e505fa266bd1878c231bb7da921ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 929f3e1e1b664ed8cdef90a40c96804edfd08d59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a96030d82fa379d24b952a58eed395143950c7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f48d08760552448a196fa400725cde7198e9c9b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cd6e82cfa3bdc3b5d75317431d58cc6efb710b1d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2cd130bed184fe761105d60edda6936f348edc6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d78e368f6877ec70b857ab9b7a3385bb5dca8d2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d851a6f3885ec24a963a206f77790977fd2e6c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28cbb953ce01b4eea7f096c28f84da1fbab26694 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 280e573beb90616fe9cb0128cec47b3aff69b86a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccff34d6834a038ef71f186001a34b15d0b73303 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc340779c5cd6efb6ac3c8d21141638970180f41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d91ae75401b851b71fcc6f4dcf7eb29ed2a63369 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a91cf1217155ef457d92572530503d13b5984fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfae362363b28be9b86250eb7f6a32dac363c993 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddb828ecd0e28d346934fd1838a5f1c74363fba6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4459ca7fd21d549a2342a902cfdeba10c76a022 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 610d4c97485d2c0d4f65b87f2620a84e0df99341 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eae04bf7b0620a0ef950dd39af7f07f3c88fd15f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecd061b2e296a4f48fc9f545ece11c22156749e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4dd14b60b112a867a2217087b7827687102b11fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 454fedab8ea138057cc73aa545ecb2cf0dac5b4b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2eb6cf0855232da2b8f37785677d1f58c8e86817 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e482a20ab221cb6eca51f12f1bd29cda4eec484 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91b9bc4c5ecae9d5c2dff08842e23c32536d4377 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d4859e26cef6c9c79324cfc10126584c94b1585 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7f657fb20c063dfc2a653f050accc9c40d06a60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66328d76a10ea53e4dfe9a9d609b44f30f734c9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ee7e1a72aa2b9283223a8270a7aa9cb2cdb5ced ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f237620189a55d491b64cac4b5dc01b832cb3cbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2af601d5800a39ab04e9fe6cf22ef7b917ab5d67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a56136f9cb48a17ae15b59ae0f3f99d9303b1cb1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58998fb2dd6a1cad5faffdc36ae536ee6b04e3d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 62536252a438e025c16eebd842d95d9391e651d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 076446c702fd85f54b5ee94bccacc3c43c040a45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a358f2cfdc46a99db9e595d7368ecfecba52de0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95ff8274a0a0a723349416c60e593b79d16227dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dbfd290609fe43ca7d94e06cea0d60333343838 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ef53c53012c450adb8d5d386c207a98b0feb579 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ef12ae4c158fa8ddb78a70dcf8f90966758db81 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90dc03da3ebe1daafd7f39d1255565b5c07757cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 251128d41cdf39a49468ed5d997cc1640339ccbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0a67f25298c80aaeb3633342c36d6e00e91d7bd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67648785d743c4fdfaa49769ba8159fcde1f10a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ce49598a25b48ad0ab38cc1101c5e2a42a918e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2b820f936132d460078b47e8de72031661f848c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5f034355962c5156f20b4de519aae18478b413a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b6cde8de6d40715cf445cf1a5d77cd9befbf4d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf8dc259fcc9c1397ea67cec3a6a4cb5816e3e68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79a36a54b8891839b455c2f39c5d7bc4331a4e03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a99953c07d5befc3ca46c1c2d76e01ecef2a62c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dcfe2423fb93587685eb5f6af5e962bff7402dc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8503a11eb470c82181a9bd12ccebf5b3443c3e40 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55c5f73de7132472e324a02134d4ad8f53bde141 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb43244026643e540a2fac35b2997c6aa0e139c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1c40f46bd547be663b4cd97a80704279708ea8a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 375e1e68304582224a29e4928e5c95af0d3ba2fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b3e769989c4928cf49e335f9e7e6f9465a6bf99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24d4926fd8479b8a298de84a2bcfdb94709ac619 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67260a382f3d4fb841fe4cb9c19cc6ca1ada26be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7231486c883003c43aa20a0b80e5c2de1152d17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53373c8069425af5007fb0daac54f44f9aadb288 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6cf7a7bd864fe1fb64d7bea0c231c6254f171e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67291f0ab9b8aa24f7eb6032091c29106de818ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 559b90229c780663488788831bd06b92d469107f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4aa750a96baf96ac766fc874c8c3714ceb4717ee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 42e89cc7c7091bb1f7a29c1a4d986d70ee5854ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eb497ba1bbcaeb05a413a226fd78e54a29a3ff5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54709d9efd4624745ed0f67029ca30ee2ca87bc9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aec58a9d386d4199374139cd1fc466826ac3d2cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3430bde60ae65b54c08ffa73de1f16643c7c3bfd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c352dba143e0b2d70e19268334242d088754229b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dca537f505e93248739478f17f836ae79e00783 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d678792d3154d5de04a5225079f2e0457b45b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bd708d41090fbe00acb41246eb22fa8b5632967 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b56d6778ee678081e22c1897ede1314ff074122a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1aea3af6dcabfe4c6414578b22bfbb31a7e1840 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edb28b9b2c2bd699da0cdf5a4f3f0f0883ab33a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc4e3cc8521f8315e98f38c5550d3f179933f340 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8cb31db6b3970d1e983f10b0e0b5eeda8348c7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 086af072907946295f1a3870df30bfa5cf8bf7b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bbaf1c5c792d14867890200db68da9fd82d5997 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6420d2e3a914da1b4ae46c54b9eaa3c43d8fd060 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aba0494701292e916761076d6d9f8beafa44c421 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ee08fce6ec508fdc6e577e3e507b342d048fa16 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fad63e83853a65ee9aa98d47a64da3b71e4c01af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b3c16c39953e7a6f55379403ca5d204dcbdb1e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92c7c8eba97254802593d80f16956be45b753fd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- feed81ea1a332dc415ea9010c8b5204473a51bdf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52912b549289b9df7eeada50691139df6364e92d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bbcf2fc648561e4fc90ee4cc5525a3257604ec1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a962464c1504d716d4acee7770d8831cd3a84b48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c121f60395ce47b2c0f9e26fbc5748b4bb27802d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 32da7feb496ef31c48b5cbe4e37a4c68ed1b7dd5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39335e6242c93d5ba75e7ab8d7926f5a49c119a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c418df44fd6ac431e10b3c9001699f516f3aa183 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ef889531eed9ac73ece70318d4eeb45d81b9bc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dd7aca043c197979e6b4b5ff951e2b62c320ef4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dffba51b4fd88f7d26a43cf6d1fbbe3cdb9f44d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6411bf1bf1ce403e8b38dbbdaf78ccdbe2b042dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c23ae3a48bb37ae7ebd6aacc8539fee090ca34bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8c31c6a6e9ffbfdbd292b8d687809b57644de27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ce2a4b235d2ebc38c3e081c1036e39bde9be036 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96402136e81bd18ed59be14773b08ed96c30c0f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c6ae79a7b38c7800c19e28a846cb2f227e52432 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46c4ec22d70251c487a1d43c69c455fc2baab4f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0788e0be3164acd65e3bc4b5bc1b51179b967ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 830070d7ed09d6eaa4bcaa84ab46c06c8fff33d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e8412226ffe0c046177fa6d838362bfbde60cd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72dddc7981c90a1e844898cf9d1703f5a7a55822 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3bd3c6b94c735c725f39959730de11c1cebe67a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 416daa0d11d6146e00131cf668998656186aef6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dfa1685aac22a83ba1f60d1b2d52abf5a3d842f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ede752333a851ee6ad9ec2260a0fb3e4f3c1b0b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b197de0ccc0faf8b4b3da77a46750f39bf7acdb3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0181a40db75bb27277bec6e0802f09a45f84ffb3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12db6bbe3712042c10383082a4c40702b800a36a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 552a0aa094f9fd22faf136cdbc4829a367399dfe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88732b694068704cb151e0c4256a8e8d1adaff38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f858c449a993124939e9082dcea796c5a13d0a74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2ad9a239b1a06ee19b8edcd273cbfb9775b0a66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0e0b97b1d595b9b54d57e5bd4774e2a7b97696df ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fdc8ecbc0c1d8a4b76ec653602c5ab06a9659c98 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66306f1582754ca4527b76f09924820dc9c85875 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddffe26850e8175eb605f975be597afc3fca8a03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 965ccefd8f42a877ce46cf883010fd3c941865d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdb4c7cb5b3dec9e4020aac864958dd16623de77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d6e1731b6324eba5abc029b26586f966db9fa4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1a82e45fc177cec8cffcfe3ff970560d272d0bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82ae723c8c283970f75c0f4ce097ad4c9734b233 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f207e0e15ad243dd24eafce8b60ed2c77d6e725 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15b6bbac7bce15f6f7d72618f51877455f3e0ee5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8437c014b0a9872168b01790f5423e8e9255840 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d5df2ce3addd9e9e1863f4f33665a16b415b71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c823d482d03caa8238b48714af4dec6d9e476520 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b06b13e61e8db81afdd666ac68f4a489cec87d5a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bbf02e0c648177b164560003cb51e50bc72b35cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5149c807ec5f396c1114851ffbd0f88d65d4c84f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0c187229cea1eb3f395e7e71f636b97982205ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b93ba7ca6913ce7f29e118fd573f6ed95808912b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c3a6889b654892b3636212b880fa50df0358679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9db2ff10e59b2657220d1804df19fcf946539385 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f21630bcf83c363916d858dd7b6cb1edc75e2d3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4754fa194360b4648a26b93cdff60d7906eb7f7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3910abfc2ab12a5d5a210b71c43b7a2318311323 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06914415434cf002f712a81712024fd90cea2862 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- caa0ea7a0893fe90ea043843d4e6ad407126d7b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fac8d40f535ec8f3d1cf2187fbbe3418d82cf62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- afcd64ebbb770908bd2a751279ff070dea5bb97c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc77e6b2862733a211c55cf29cc7a83c36c27919 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a25365fea0ea3b92ba96cc281facd308311def1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aab7dc2c7771118064334ee475dff8a6bb176b57 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66c41eb3b2b4130c7b68802dd2078534d1f6bf7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08e0d5f107da2e354a182207d5732b0e48535b66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76ac61a2b4bb10c8434a7d6fc798b115b4b7934d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e4a4545dd513204efb6afe40e4b50c3b5f77e50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bf8ce9464987c7b0dbe6acbc2cc2653e98ec739a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5962373da1444d841852970205bff77d5ca9377f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d5d143f72e4d588e3a0abb2ab82fa5a2c35e8aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93d530234a4f5533aa99c3b897bb56d375c2ae60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1b8d0c92e4b5797b95948bdb95bec7756f5189f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec731f448d304dfe1f9269cc94de405aeb3a0665 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b29388a8f9cf3522e5f52b47572af7d8f61862a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff389af9374116c47e3dc4f8a5979784bf1babff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b4f92c8eea41f20b95f9e62a39b210400f4d2a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2efa1b19061ad6ed9d683ba98a88b18bff3bfd9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ca7c019a359c64a040e7f836d3b508d6a718e28 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4486bcbbf49ad0eacf2d8229fb0e7e3432f440d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70bb7e4026f33803bb3798927dbf8999910700d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b02662d4e870a34d2c6d97d4f702fcc1311e5177 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e12ef59c559e3be8fa4a65e17c9c764da535716e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0210e394e0776d0b7097bf666bebd690ed0c0e4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3165753f9d0d69caabac74eee195887f3fea482 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8e914eb0dfe6a0eb2de66b6826af5f715aeed6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d248bb8362808121f6b6abfd316d83b65afa79 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c170c3e74b8ef90a2c7f47442eabce27411231 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e6827e98c2732863857c0887d5de4138a8ae48b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b1cfcc629e856b1384b811b8cf30b92a1e34fe1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52e28162710eb766ffcfa375ef350078af52c094 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85f38a1bbc8fc4b19ebf2a52a3640b59a5dcf9fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57d053792d1cde6f97526d28abfae4928a61e20f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 896830bda41ffc5998e61bedbb187addaf98e825 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83645971b8e134f45bded528e0e0786819203252 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bce7cc4a43e5843c9f4939db143a9d92bb45a18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b84602026c1cc7b9d83ab618efb6b48503e97af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6310480763cdf01d8816d0c261c0ed7b516d437a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6e23ed24b35c6154b4ee0da5ae51cd5688e5e67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a596e1284c8a13784fd51b2832815fc2515b8d6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d8269a04b2b03ebf53309399a8f0ea0a4822c11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba7c2a0f81f83c358ae256963da86f907ca7f13c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53c15282a84e20ebe0a220ff1421ae29351a1bf3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b586fbb94d5acc6e06980a8a96f66771280beda ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eacf90dff73ab7578cec1ba0d82930ef3044663 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ea7e265d1549613c12cbe42a2e012527c1a97e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09c88bec0588522afb820ee0dc704a936484cc45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aafde7d5a8046dc718843ca4b103fcb8a790332c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e355275c57812af0f4c795f229382afdda4bca86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 74c7ed0e809d6f3d691d8251c70f9a5dab5fb18d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e5ef73d3d6d9b973a756fddd329cfa2a24884e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f6c697c0df4704206d2fd1572640f7f2bd80c73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 833ac6ec4c9f185fd40af7852b6878326f44a0b3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94ca83c6b6f49bb1244569030ce7989d4e01495c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a2f7dce43617b773a6be425ea155812396d3856 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3b9c0242ba2893231e0ab1c13fa2a0c8a9cfc59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a469af892b3e929cbe9d29e414b6fcd59bec246e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26253699f7425c4ee568170b89513fa49de2773c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be44602b633cfb49a472e192f235ba6de0055d38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d6b417ea3a4507ea78714f0cb7add75b13032d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86aa8738e0df54971e34f2e929484e0476c7f38a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4592785004ad1a4869d650dc35a1e9099245dad9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a521681ff8614beb8e2c566cf3c475baca22169 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a46f670ba62f9ec9167eb080ee8dce8d5ca44164 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0900c55a4b6f76e88da90874ba72df5a5fa2e88c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2253d39f3a5ffc4010c43771978e37084e642acc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdf1e68f6bec679edc3feb455596e18c387879c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6df78b19b7786b15c664a7a1e0bcbb3e7c80f8da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f73468bb9cb9e479a0b81e3766623c32802db579 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4572ffd483bf69130f5680429d559e2810b7f0e9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8b025f719b2c3203e194580bbd0785a26c08ebd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b440827a04ad23efb891eff28d90f172723c75d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0de60abc5eb71eff14faa0169331327141a5e855 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48c149c16a9bb06591c2eb0be4cca729b7feac3e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a79cf677744e2c1721fa55f934fa07034bc54b0a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06b16115bee85d7dd12a51c7476b0655068a970c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6b1a9272455ef80f01a48ea22efc85b7f976503 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06c9c919707ba4116442ca53ac7cf035540981f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13d399f4460ecb17cecc59d7158a4159010b2ac5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3dc2f7358be152d8e87849ad6606461fb2a4dfd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2d37049a815b11b594776d34be50e9c0ba8df497 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ba897b12024fd20681b7c2f1b40bdbbccd5df59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d84b960982b5bad0b3c78c4a680638824924004b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 361854d1782b8f59dc02aa37cfe285df66048ce6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f284a4e7c8861381b0139b76af4d5f970edb7400 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80cc71edc172b395db8f14beb7add9a61c4cc2b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae6e26ed4abac8b5e4e0a893da5546cd165d48e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b114f3bbe50f50477778a0a13cf99c0cfee1392a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6497d1e843cbaec2b86cd5a284bd95c693e55cc0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2528d11844a856838c0519e86fe08adc3feb5df1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e50a8e6156360e0727bedff32584735b85551c5b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df65f51de6ba67138a48185ff2e63077f7fe7ce6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 842fb6852781fd74fdbc7b2762084e39c0317067 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a01ec439e19df83a2ff17d198118bd5a31c488b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31fd955dfcc8176fd65f92fa859374387d3e0095 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41fd2c679310e3f7972bd0b60c453d8b622f4aea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31ad0a0e2588819e791f4269a5d7d7e81a67f8cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 395955609dfd711cc4558e2b618450f3514b28c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f48ef3177bbee78940579d86d1db9bb30fb0798d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2b92c66bed6d1eea7b8aefe3405b0898fbb2019 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5095c16894e6f4da814302349e8e32f84c8c13 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1d2d0683afa6328b6015c6a3aa6a6912a055756 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 794187ffab92f85934bd7fd2a437e3a446273443 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657cd7e47571710246375433795ab60520e20434 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25c207592034d00b14fd9df644705f542842fa04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0574b8b921dbfe1b39de68be7522b248b8404892 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e25da8ffc66fb215590a0545f6ad44a3fd06c918 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58934b8f939d93f170858a829c0a79657b3885e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26bb778b34b93537cfbfd5c556d3810f2cf3f76e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1481af08064e10ce485339c6c0233acfc646572 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e98416791566f44a407dcac07a1e1f1b0483544 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd8537b23ce85be6f9dacb7806e791b7f902a206 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d4d70844417bf484ca917326393ca31ff0d22bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44c6d0b368bc1ec6cd0a97b01678b38788c9bd9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df5c1cb715664fd7a98160844572cc473cb6b87c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51f4a1407ef12405e16f643f5f9d2002b4b52ab9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e866c4a9897572a550f8ec13b53f6665754050cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f11fdf1d9d22a198511b02f3ca90146cfa5deb5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83ebc659ace06c0e0822183263b2c10fe376a43e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c70daba7a3d195d22ded363c9915b5433ce054 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf2335af23fb693549d6c4e72b65f97afddc5f64 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4ad7cee0f8723226446a993d4f1f3b98e42583a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df958981ad63edae6fceb69650c1fb9890c2b14f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4896fa2ccbd84553392e2a74af450d807e197783 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5db3d3c49ebe559cb80983d7bb855d4adf1b887 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 788bd7e55085cdb57bce1cabf1d68c172c53f935 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b827f8162f61285754202bec8494192bc229f75a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8ef023a5bab377764343c954bf453869def4807 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c6e5adab98a2ea4253fefc4f83598947f4993ee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e031a0ee8a6474154c780e31da2370a66d578cdc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 467416356a96148bcb01feb771f6ea20e5215727 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4006c4347788a078051dffd6b197bb0f19d50b86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cee0cec2d4a27bbc7af10b91a1ad39d735558798 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bde1038e19108ec90f899ce4aff7f31c1e387eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de894298780fd90c199ef9e3959a957a24084b14 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57550cce417340abcc25b20b83706788328f79bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ec4389bc3d1653af301e93fe0a6b25a31da9f3d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5e6676db845e10bdca47c3fcf8dca9dea75ec42 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572ebd6e92cca39100183db7bbeb6b724dde0211 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06571d7f6a260eda9ff7817764f608b731785d6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 137ee6ef22c4e6480f95972ef220d1832cdc709a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ff3a3e72b1ff79e75777ccdddc86f8540ce833d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d79951fba0994654104128b1f83990387d44ac22 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 451504f1e1aa84fb3de77adb6c554b9eb4a7d0ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 434505f1b6f882978de17009854d054992b827cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ed3cd7f798057c02799b6046987ed6a2e313126 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d9390866f9ce42870d3116094cd49e0019a970a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f128ae9a37036614c1b5d44e391ba070dd4326d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4cede2368aa980e30340f0ed0a1906d65fe1046c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 49a9f84461fa907da786e91e1a8c29d38cdb70eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1116ef7e1bcbbc71d0b654b63156b29bfbf9afab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07a8f73dca7ec7c2aeb6aa47aaf421d8d22423ad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9405ac82af3a804dba1f9797bdb34815e1d7a18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e61439b3018b0b9a8eb43e59d0d7cf32041e2fed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4b5ecc217154405ac0f6221af99a4ab18d067f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e02afbb7343a7a4e07e3dcf8b845ea2764d927c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 930d03fb077f531b3fbea1b4da26a96153165883 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ee291c469fc7ea6065ed22f344ed3f2792aa2ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df2fb548040c8313f4bb98870788604bc973fa18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7f403b1e82d4ada20d0e747032c7382e2a6bf63 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 105a8c0fb3fe61b77956c8ebd3216738c78a3dff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc2ec79a88a787f586df8c40ed0fd6657dce31dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25a2ebfa684f7ef37a9298c5ded2fc5af190cb42 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0eafc47c307ff0bf589ce43b623bd24fad744fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5c8ff218cb3ee5d3dd9119007ea8478626f6d2ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1124e19afc1cca38fec794fdbb9c32f199217f78 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5739cd466f77a60425bd2860895799f7c9359d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27f394a58b7795303926cd2f7463fc7187e1cce4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 278423faeb843fcf324df85149eeb70c6094a3bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17020d8ac806faf6ffa178587a97625589ba21eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9bebaca85a19e0ac8a776ee09981f0c826e1cafa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c572a8d95d8fa184eb58b15b7ff96d01ef1f9ec3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15ee5a505b43741cdb7c79f41ebfa3d881910a6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d22c40b942cca16ff9e70d879b669c97599406b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f4b410c955ea08bfb7842320afa568090242679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a3c95b408162c78b9a4230bb4f7274a94d0add4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da86442f6a7bf1263fb5aafdaf904ed2f7db839f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4510b3c42b85305c95c1f39be2b9872be52c2e5e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 200d3c6cb436097eaee7c951a0c9921bfcb75c7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b366d3fabd79e921e30b44448cb357a05730c42f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 618e6259ef03a4b25415bae31a7540ac5eb2e38a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec830a25d39d4eb842ae016095ba257428772294 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6891caf73735ea465c909de8dc13129cc98c47f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0b21f454ea43a5f67bc4905c641d95f8b6d96fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 902679c47c3d1238833ac9c9fdbc7c0ddbedf509 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa3f2fa76844e1700ba37723acf603428b20ef74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a5cebaeda2c5062fb6c727f457ee3288f6046ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fde89f2a65c2503e5aaf44628e05079504e559a0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85e78ca3d9decf8807508b41dbe5335ffb6050a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5efdad2502098a2bd3af181931dc011501a13904 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f495e94028bfddc264727ffc464cd694ddd05ab8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35658887753da7da9a32a297346fd4ee6e53d45c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7548a5c43f8c39a8143cdfb9003838e586313078 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 515a6b9ccf87bd1d3f5f2edd229d442706705df5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29eb301700c41f0af7d57d923ad069cbdf636381 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08a0fad2c9dcdfe0bbc980b8cd260b4be5582381 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2219f13eb6e18bdd498b709e074ff9c7e8cb3511 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55969cb6034d5b416946cdb8aaf7223b1c3cbea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04ff96ddd0215881f72cc532adc6ff044e77ea3e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45f8f20bdf1447fbfebd19a07412d337626ed6b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46201b346fec29f9cb740728a3c20266094d58b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 543d900e68883740acf3b07026b262176191ab60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9a7dc5fe98e1aa666445bc240055b21ed809824 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 783ad99b92faa68c5cc2550c489ceb143a93e54f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78f3f38d18fc88fd639af8a6c1ef757d2ffe51d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6581acaa7081d29dbf9f35c5ce78db78cf822ab8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b40d4b54e09a546dd9514b63c0cb141c64d80384 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b343718cc1290c8d5fd5b1217724b077153262a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5077fc7e4031e53f730676df4d8df5165b1d36cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88716d3be8d9393fcf5695dd23efb9c252d1b09e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8486f2d2e5c251d0fa891235a692fa8b1a440a89 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7bbaac26906863b9a09158346218457befb2821a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e836e5cdcc7e3148c388fe8c4a1bab7eeb00cc3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25844b80c56890abc79423a7a727a129b2b9db85 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1537aabfa3bb32199e321766793c87864f36ee9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9989f8965f34af5009361ec58f80bbf3ca75b465 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa70623a651d2a0b227202cad1e526e3eeebfa00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb20477629bf83e66edc721725effa022a4d6170 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f91ab7bb0dadfd165031f846ae92c9466dceb66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0be02e1471c99e5e5e4bd52db1019006d26c349 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ec2f8a4f26cec3fbbe1fb447058acaf508b39c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff0365e053a6fa51a7f4e266c290c5e5bd309f6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4ace5482efa4ca8769895dc9506d8eccfb0173d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bed46300fe5dcb376d43da56bbcd448d73bb2ea0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 082851e0afd3a58790fe3c2434f6d070f97c69c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df3dd9797c8afda79dfa99d90aadee6b0d7a093 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ba48ce5758fb2cd34db491845f3b9fdaefe3797 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79fdaf349fa8ad3524f67f1ef86c38ecfc317585 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f4b1618fbf3b9b1ecaa9812efe8ee822c9579b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51bf7cbe8216d9a1da723c59b6feece0b1a34589 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29724818764af6b4d30e845d9280947584078aed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5089d9d6c303b47936a741b7bdf37293ec3a1c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79c99c0f66c8f3c8d13258376c82125a23b1b5c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ef273914de9b8a50dd0dd5308e66de85eb7d44a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1210ec763e1935b95a3a909c61998fbd251b7575 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ce87a2bec5d9920784a255f11687f58bb5002c4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3f24f64a20d1e09917288f67fd21969f4444acd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1faf84f8eb760b003ad2be81432443bf443b82e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0eafe201905d85be767c24106eb1ab12efd3ee22 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6a6a109885856aeff374c058db0f92c95606a0b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7842e92ebaf3fc3380cc8d704afa3841f333748c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98889c3ec73bf929cdcb44b92653e429b4955652 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0235f910916b49a38aaf1fcbaa6cfbef32c567a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27a041e26f1ec2e24e86ba8ea4d86f083574c659 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ece57af3b69c38f4dcd19e8ccdd07ec38f899b23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d66f2b53af0d8194ee952d90f4dc171aa426c545 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5077dac4c7680c925f4c5e792eeb3c296a3b4c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d255f4c8fd905d1cd12bd42b542953d54ac8a8c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7a2d43495eb184b162f8284c157288abd36666a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06ea4a0b0d6fcb20a106f9367f446b13df934533 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39164b038409cb66960524e19f60e83d68790325 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4492c7965cd8e3c5faaf28b2a6414b04984720b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec35edc0150b72a7187f4d4de121031ad73c2050 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33940022821ec5e1c1766eb60ffd80013cb12771 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 123302cee773bc2f222526e036a57ba71d8cafa9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7228ca9bf651d9f06395419752139817511aabe1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 187fe114585be2d367a81997509b40e62fdbc18e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a8f96cc8a5135a0ece19e600da914dabca7d215 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 903826a50d401d8829912e4bcd8412b8cdadac02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db44286366a09f1f65986db2a1c8b470fb417068 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73ab28744df3fc292a71c3099ff1f3a20471f188 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00452efe6c748d0e39444dd16d9eb2ed7cc4e64a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8d6fb2898ba465bc1ade60066851134a656a76c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bebc4f56f4e9a0bd3e88fcca3d40ece090252e82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89ade7bfff534ae799d7dd693b206931d5ed3d4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fb577c8a1eca8958415b76cde54d454618ac431e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2376bd397f084902196a929171c7f7869529bffc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e73c80dd2dd1c82410fb1ee0e44eca6a73d9f052 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 895f0bc75ff96ce4d6f704a4145a4debc0d2da58 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bcc4d55baef64825b4163c6fb8526a2744b4a86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5320a6f68ddec847fa7743ff979df8325552ffd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25c95ace1d0b55641b75030568eefbccd245a6e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a15afe217c7c35d9b71b00c8668ae39823d33247 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eedf3c133a9137723f98df5cd407265c24cc2704 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4937fcd0dad3be003b97926e3377b0565237c5b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05c468eaec0be6ed5a1beae9d70f51655dfba770 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc505ddd603b1570c2c1acc224698e1421ca8a6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b22a5e944b2f00dd8e9e6f0c8c690ef2d6204886 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9149c34a8b99052b4e92289c035a3c2d04fb8246 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c9497463b130cce1de1b5d0b6faada330ecdc96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c673ff2d267b927d2f70765da4dc3543323cc7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 819c4ed8b443baee06472680f8d36022cb9c3240 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c883d129066f0aa11d806f123ef0ef1321262367 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2807d494db24d4d113da88a46992a056942bd828 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d0d6c9824bdd5f2cd5f6886991bb5eadca5120d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26b0f3848f06323fdf951da001a03922aa818ac8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d47fc1b67836f911592c8eb1253f3ab70d2d533d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d04aeaa17e628f13d1a590a32ae96bc7d35775b5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcb6e8832a94776d670095935a7da579a111c028 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f77f9775277a100c7809698c75cb0855b07b884d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08938d6cee0dc4b45744702e7d0e7f74f2713807 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 19099f9ce7e8d6cb1f5cafae318859be8c082ca2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2c8c7f86e6a61307311ea6036dac4f89b64b500 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 504870e633eeb5fc1bd7c33b8dde0eb62a5b2d12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fbc182e6d4636f67f44e5893dee3dcedfa90e04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8bbf1a3b801fb4e00c10f631faa87114dcd0462f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3c89a5e020bb4747fd9470ba9a82a54c33bb5fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d7a40f603412be7e1046b500057b08558d9d250 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1445b59bb41c4b1a94b7cb0ec6864c98de63814b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4adafc5a99947301ca0ce40511991d6d54c57a41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8da7852780a62d52c3d5012b89a4b15ecf989881 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2090b5487e69688be61cfbb97c346c452ab45ba2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76e19e4221684f24ef881415ec6ccb6bab6eb8e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3297fe50067da728eb6f3f47764efb223e0d6ea4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f1b69ad52670a67e8b766e89451080219871739 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cdf7c5aca2201cf9dfc3cd301264da4ea352b737 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccb653d655a7bf150049df079622f67fbfd83a28 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 722473e86e64405ac5eb9cb43133f8953d6c65d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6964e3efc4ac779d458733a05c9d71be2194b2ba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55d40df99085036ed265fbc6d24d90fbb1a24f95 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20a338ff049e7febe97411a6dc418a02ec11eefa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e61e3200d5c9c185a7ab70b2836178ae8d998c17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28afef550371cd506db2045cbdd89d895bec5091 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e77128e5344ce7d84302facc08d17c3151037ec3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 978eb5bd4751acf9d53c8b6626dc3f7832a20ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f533a68cb5295f912da05e061a0b9bca05b3f0c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfaf706d70c3c113b40ce1cbc4d11d73c7500d73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bdaa463f7c73d30d75d7ea954dd3c5c0c31617b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9debf6b0aafb6f7781ea9d1383c86939a1aacde3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f6713669a8a32af90a73d03a7fa24e6154327f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5b8220a1a967abdf2bae2124e3e22a9eea3729f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4c6851c55757fb0bc9d77da97d7db9e7ae232d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1875885485e7c78d34fd56b8db69d8b3f0df830c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dabd563ed3d9dc02e01fbf3dd301c94c33d6d273 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5324565457e38c48b8a9f169b8ab94627dc6c979 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af74966685e1d1f18390a783f6b8d26b3b1c26d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c877794b51f43b5fb2338bda478228883288bcdd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c042f56fc801235b202ae43489787a6d479cd277 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bb927dc12fae61141f1cc7fe4a94e0d68cb4232 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6271586d7ef494dd5baeff94abebbab97d45482b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2971489fec32160836519e66ca6b97987c33d0c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e328ffddec722be3fba2c9b637378e31e623d58e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07b124c118942bc1eec3a21601ee38de40a2ba0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ceae5e9f6bf753163f81af02640e5a479d2a55c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a91a659a3a7d8a099433d02697777221c5b9d16f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25f27c86af9901f0135eac20a37573469a9c26ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b533f86cf86c96a16f96c815533bdda0585f48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f4d5ce5f9459e4c7fe4fab95df1a1e4c9be61ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d97a8bb75098ad643d1a8853fe1b59cbb8e2338c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aae2a7328a4d28077a4b4182b4f36f19c953765b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e9481b4ddd70cf44ad041fba771ca5c02b84cf7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5982ff789e731c1cbd9b05d1c6826adf0cd8080b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5de21c7fa2bdd5cd50c4f62ba848af54589167d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f4af7c6db25c5bbec7fdc8dfc0ea6803350d94c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1815563ec44868121ae7fa0f09e3f23cacbb2700 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83156b950bb76042198950f2339cb940f1170ee2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcca77ad97d1dfb657e88519ce8772c5cd189743 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ad3931357e5bb01941b50482b4b53934c0b715e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ae1f213e1b99638ba685f58d489c0afa90a3991 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 121f6af3a75e4f48acf31b1af2386cdd5bf91e00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc9278fb4432f0244f4d780621d5c1b57a03b720 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 41556dac4ca83477620305273a166e7d5d9f7199 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55db0fcce5ec5a92d2bdba8702bdfee9a8bca93d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbc07b421172da4ef3153753709271a71af6966a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2f6fef3c887719a250c78c22cba723b2200df1b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84869674124aa5da988188675c1336697c5bcf81 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8775f9b8e40b18352399445dba99dd1d805e8c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b10d5e75570ac6325d1c7e2b32882112330359a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b145de39700001d91662404221609b86d2c659d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b854878fb9df8d1a06c4e97bff5e164957b3a0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3fe8f5df5794015014c53e3adbf53acdb632a8a0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7b609c9f382685448193b59d09329b9a30c7580 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b295c13140f48e6a7125b4e4baf0a0ca03e1e393 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05a302c962afbe5b54e207f557f0d3f77d040dc8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f1110bd9b00cb8c1ea07c3aafe9cde89b3dbf9b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0de827a0e63850517aa93c576c25a37104954dba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d82a6c5ed9108be5802a03c38f728a07da57438e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1a59764096cef4048507cb50f0303f48b87a242 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0900a51f986f3ed736d9556b3296d37933018196 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a8700185dce5052ca1581b63432fb4d4839c226 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a929ab29016e91d661274fc3363468eb4a19b4b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13141e733347cea5b409aa54475d281acd1c9a3c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ed8939d6167571fc2b141d34f26694a79902fde2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbbcaf7a355e925911fa77e204dd2c38ee633c0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb5e177e5d7931e30b198b06b21809ef6a78b92 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d06e76bb243dda3843cfaefe7adc362aab2b7215 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec401e4807165485a4b7a2dad4f74e373ced35ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4faf5cd43dcd0b3eea0a3e71077c21f4d029eb99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e58e6a0d78f5298252b2d6c4b0431427ec6d152 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc8032d35a23bcc105f50b1df69a1da6fe291b90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cc0e6caa3117f694d367d3f3b80db1e365aac94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 51f79ffeb829315c33ce273ae69baf0fdd1fbd1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2cc8f1e3c6627f0b4da7cb6550f7252f76529d8e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e1c90eb69e2dfd5fdf8418caa695112bd285f21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84fcf8e90fd41f93d77dd00bf1bc2ffc647340f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cd4caf15a2e977fc0f010c1532090d942421979c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 074842accb51b2a0c2c1193018d9f374ac5e948f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f8d9ca08352a28cba3b01e4340a24edc33e13e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8590424997ab1d578c777fe44bf7e4173036f93 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6eb3af27464ffba83e3478b0a0c8b1f9ff190889 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d768f67bd49f28fd2e626f3a8c12bd28ae5ce48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8b837923d506e265ff8bb79af61c0d86e7d5b2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec15e53439d228ec64cb260e02aeae5cc05c5b2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8f7e3772f68c8e6350b9ff5ac981ba3223f2d43 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 332521ac1d94f743b06273e6a8daf91ce93aed7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 039e265819cc6e5241907f1be30d2510bfa5ca6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8324c4b38cf37af416833d36696577d8d35dce7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0acb2229e1ebb59ab343e266fc5c1cc392a974e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c58887a2d8554d171a7c76b03bfa919c72e918e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2e4134963c971e3259137b84237d6c47964b018 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b307f04218e87b814fb57bd9882374a9f2b52922 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ab12b403207bb46199f46d5aaa72d3e82a3080d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c96f5885e1ec1e24b0f8442610de42bd8e168d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb6beb75aaa269a1e7751d389c0826646878e5fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11b3a1dfc2eb03094c4c437162ce504722fa7ddf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58c5b993d218c0ebc3f610c2e55a14b194862e1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1883eb9282468b3487d24f143b219b7979d86223 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fdb6a5eac7433098cfbb33d3e18d6dbba8fa3d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f360ecd7b2de173106c08238ec60db38ec03ee9b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65c07d64a7b1dc85c41083c60a8082b3705154c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1d33021feb7324e0f2f91c947468bf282f036d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c8a33e2c9cae8deef1770a5fce85acb2e85b5c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c272abea2c837e4725c37f5c0467f83f3700cd5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af44258fa472a14ff25b4715f1ab934d177bf1fa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b21e2f1c0fdef32e7c6329e2bc1b4ce2a7041a2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdc38b83f4a6d39603dc845755df49065a19d029 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58c78e649cbac271dee187b055335c876fcb1937 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3438795d2af6d9639d1d6e9182ad916e73dd0c37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3d33c113b1dfa4be7e3c9924fae029c178505c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3068025b64bee24efc1063aba5138708737c158 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ee9751d4e9e9526dbe810b280a4b95a43105ec9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3e78d98e06439eea1036957796f8df9f386930f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 141b78f42c7a3c1da1e5d605af3fc56aceb921ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5e4334f38dce4cf02db5f11a6e5844f3a7c785c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9aaaa83c44d5d23565e982a705d483c656e6c157 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bbf04348b0c79be2103fd3aaa746685578eb12fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1578baf817c2526d29276067d2f23d28b6fab2b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9db24bc7a617cf93321bb60de6af2a20efd6afc1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80d43111b6bb73008683ad2f5a7c6abbab3c74ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86ec7573a87cd8136d7d497b99594f29e17406d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 02cb16916851336fcf2778d66a6d54ee15d086d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5a9bbef0d2d8fc5877dab55879464a13955a341 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 369e564174bfdd592d64a027bebc3f3f41ee8f11 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36dbe7e9b55a09c68ba179bcf2c3d3e1b7898ef3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d0f693184884ffac97908397b074e208c63742b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 040108747e2f868c61f870799a78850b792ddd0a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 300831066507bf8b729a36a074b5c8dbc739128f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bea9077e8356b103289ba481a48d27e92c63ae7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0f47b3076a84c5c32cccc95748f18c50e3d948 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 195ecc3da4a851734a853af6d739c21b44e0d7f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85a45a691ad068a4a25566cc1ed26db09d46daa4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2efb814d0c3720f018f01329e43d9afa11ddf54 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfc70fe92d42a853d4171943bde90d86061e3f3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8724dfa6bf8f6de9c36d10b9b52ab8a1ea30c3b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 640d1506e7f259d675976e7fffcbc854d41d4246 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1a9a232fbde88a347935804721ec7cd08de6f65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a771adc5352dd3876dd2ef3d0c52c8e803fc084 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 643e6369553759407ca433ed51a5a06b47e763d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa0ccead680443b07fd675f8b906758907bdb415 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 982eefb2008826604d54c1a6622c12240efb0961 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1d5c614c38db015485190d65db05b0b75d171d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 152a60f0bd7c5b495a3ce91d0e45393879ec0477 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14851034ab5204ddb7329eb34bb0964d3f206f2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e15b57bf0bb40ccc6ecbebc5b008f7e96b436f19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c696b3cf0c2441aefaef3592e2b815472f162a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 32e4e08cf9ccfa90f0bc6d26f0c7007aeafcffeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 539980d51c159cb9922d0631a2994835b4243808 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a771e102ec2238a60277e2dce68283833060fd37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22d2e4a0bfd4c2b83e718ead7f198234e3064929 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1199f90c523f170c377bf7a5ca04c2ccaab67e08 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bafb4cc0a95428cbedaaa225abdceecee7533fac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8e700e952d135c6903b97f022211809338232e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e79604c8bdfc367f10a4a522c9bf548bdb3ab9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83017bce083c58f9a6fb0c7b13db8eeec6859493 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1143e1c66b8b054a2fefca2a23b1f499522ddb76 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5385cbd969cc8727777d503a513ccee8372cd506 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c594195eb614a200e1abb85706ec7b8b7c91268 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9563d27fbde02b8b2a8b0d808759cb235b4e083b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3470e269bcdc9091d0c5e25e7c09ce175c7cee77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96928d2eb3d98c475fd0737240c06bf8e5f96ad6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 545ac2574cfb75b02e407e814e10f76bc485926d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9a2ea80aa9970bbd625da4c986d29a36c405629 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8bf7d416f60f52335d128cf16fbba0344702e49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e39c8b07d1c98ddf267fbc69649ecbbe043de0fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a08733d76a8254a20a28f4c3875a173dcf0ad129 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6cc1e7e08094494916db1aadda17e03ce695d049 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5fe80b03196b1d2421109fad5b456ba7ae4393e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c1cedc5c417ddf3c2a955514dcca6fe74913259b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c2dd54358dd526d1d08a8e4a977f041aff74174 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 158bc981130bfbe214190cac19da228d1f321fe1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c6d952b17e63c92a060c08eac38165c6fafa869 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f233e2405c16e2b185aa90cc8e7ad257307b991 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bccdb483aaa7235b85a49f2c208ee1befd2706dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9f8f159ebad405b2c08aa75f735146bb8e216ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f51fe3e66d358e997f4af4e91a894a635f7cb601 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e129846a1a5344c8d7c0abe5ec52136c3a581cce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abd23a37d8b93721c0e58e8c133cef26ed5ba1f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 723f100a422577235e06dc024a73285710770fca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28d6c90782926412ba76838e7a81e60b41083290 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae334e4d145f6787fd08e346a925bbc09e870341 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b89b089972b5bac824ac3de67b8a02097e7e95d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98f6995bdcbd10ea0387d0c55cb6351b81a857fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae0b6fe15e0b89de004d4db40c4ce35e5e2d4536 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9dc8fffd179b3d7ad7c46ff2e6875cc8075fabf3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b0448b65317b2830270ff4156a25aca7941472 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d83f44007c5c581eae7ddc6c5de33311b7c1895 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f043d8a1d7f4076350ff0c778bfa60f7aa2f7aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d8bbfea4cdcb36ce0e9ee7d7cad4c41096d4d54f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe426d404b727d0567f21871f61cc6dc881e8bf0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 873823f39275ceb8d65ebfae74206c7347e07123 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f662857381a0384bd03d72d6132e0b23f52deef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9e7a3d93da741f81a5af2e84422376c54f1f337 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab7c3223076306ca71f692ed5979199863cf45a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91562247e0d11d28b4bc6d85ba50b7af2bd7224b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 756b7ad43d0ad18858075f90ce5eaec2896d439c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fd07a0a7a6300db1db8b300a3f567b31b335570 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91645aa87e79e54a56efb8686eb4ab6c8ba67087 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7729245060f9aecfef4544f91e2656aa8d483ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54e27f7bbb412408bbf0d2735b07d57193869ea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47d9f1321c3a6da68a7909fcb1a66a209066d4c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c27cd907f67f984649ff459dacf3ba105e90ebc2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f498de9bfd67bcbb42d36dfb8ff9e59ec788825b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be81304f2f8aa4a611ba9c46fbb351870aa0ce29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c2502ee83927437442b13b83f3a7976e4146a01 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4df4159413a4bf30a891f21cd69202e8746c8fea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88f3dc2eb94e9e5ff8567be837baf0b90b354f35 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21a6cb7336b61f904198f1d48526dcbe9cba6eec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3d91ca75500285d19c6ae2d4bf018452ad822a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5e607e8aa62ca3778f1026c27a927ee5c79749b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50f763cfe38a1d69a3a04e41a36741545885f1d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ffefb154982c6cc47c9be6b3eae6fb1170bb0791 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 630d030058c234e50d87196b624adc2049834472 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66c5b33fb5405fe12756f07048e3bcc3a958b2c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d1a489931ecbdd652111669c0bd86bcd6f5abbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ddbe4bc24e634e6496abd3bc6ce3c4377cdf2fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3236f8b966061b23ba063f3f7e1652764fee968f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ad07f7b23e762e3eb99ce45020375d2bd743fc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0acb8371bb2b68c2bda04db7cb2746ba3f9da86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ce3fe7cef8910aadc2a2b39a3dab4242a751380 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1410bcc76725b50be794b385006dedd96bebf0fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfcdf2bef08f17b4726b67f06c84be3bfe2c39b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f038611ff120f8283f0f1a56962f95b66730c72 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06bec1bcd1795192f4a4a274096f053afc8f80ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e2feb62c17acd1dddb6cd125d8b90933c32f89e1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c00567d3025016550d55a7abaf94cbb82a5c44fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98a17a28a21fe5f06dd2da561839fdbaa1912c64 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b54b9399920375f0bab14ff8495c0ea3f5fa1c33 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38fc944390d57399d393dc34b4d1c5c81241fb87 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2a9b2f22c6fb5bd3e30e674874dbc8aa7e5b00ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d565a874f29701531ce1fc0779592838040d3edf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d74543a545a9468cabec5d20519db025952efed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34c0831453355e09222ccc6665782d7070f5ddab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4d3809161fc54d6913c0c2c7f6a7b51eebe223f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 346424daaaf2bb3936b5f4c2891101763dc2bdc0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 261aedd2e13308755894405c7a76b72373dab879 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e48e52001d5abad7b28a4ecadde63c78c3946339 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f5320e8171324a002d3769824152cf5166a21a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1287f69b42fa7d6b9d65abfef80899b22edfef55 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3c6c81b3281333a5a1152f667c187c9dce12944 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ac93b1d7e0694ceb303ee72c312921a9b1588f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47ac37be2e0e14e958ad24dc8cba1fa4b7f78700 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ed61f72c611deb07e0368cebdc9f06da32150cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb0f3d78d6980a1d43f05cb17a8da57a196a34f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe2fbc5913258ef8379852c6d45fcf226b09900b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4921139819c7949abaad6cc5679232a0fbb0632 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 34802014ca0c9546e73292260aab5e4017ffcd9a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80701fc6f4bf74d3c6176d76563894ff0f3b32bb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a9a5414300a245b6e93ea4f39fbca792c3ec753f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9fbae711b76a4f2fa9345f43da6d2cdedd75d6c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26fc5866f6ed994f3b9d859a3255b10d04ee653d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea29541e213df928d356b3c12d4d074001395d3c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 508807e59ce9d6c3574d314d502e82238e3e606c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e395ac90bf088ad6b5de7dadb6531a6e7f3f4f3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b259098782c2248f6160d2b36d42672d6925023a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 048ffa58468521c043de567f620003457b8b3dbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27c31e2fde54c0587c032ccffdaa7c4ddf5b2ae5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df95149198744c258ed6856044ac5e79e6b81404 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a41a8b93167a59cd074eb3175490cd61c45b6f6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5054fdb1766cb035a1186c3cef4a14472fee98d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6569c4849197c9475d85d05205c55e9ef28950c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aaa84341f876927b545abdc674c811d60af00561 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53e5fb3733e491925a01e9da6243e93c2e4214c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20863cfe4a1b0c5bea18677470a969073570e41c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa1b156ee96f5aabdca153c152ec6e3215fdf16f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a223c7b7730c53c3fa1e4c019bd3daefbb8fd74b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619c989915b568e4737951fafcbae14cd06d6ea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4ce247c0380e3806e47b5b3e2b66c29c3ab2680 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be074c655ad53927541fc6443eed8b0c2550e415 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c15a6e1923a14bc760851913858a3942a4193cdb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e973e6f829de5dd1c09d0db39d232230e7eb01d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2b59625e9bde14b1d2d476e678326886ab1552 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2d39529eea4d0ecfcd65a2d245284174cd2e0aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7b16ade191bb753ebadb45efe6be7386f67351d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8eae18dcc360e6ab96c2291982bd4306adc01b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 67680a0877f01177dc827beb49c83a9174cdb736 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7671110bc865786ffe61cf9b92bf43c03759229 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 503b62bd76ee742bd18a1803dac76266fa8901bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ede325d15ba9cba0e7fe9ee693085fd5db966629 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43e430d7fa5298f6db6b1649c1a77c208bacf2fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfb0a9c4bca590efaa86f8edc3fdb62bd536bce7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acd82464a11f3c2d3edc1d152d028a142da31a9f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e84300df7deed9abf248f79526a5b41fd2f7f76e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 597bc56a32e1b709eefa4e573f11387d04629f0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- becf5efbfc4aee2677e29e1c8cbd756571cb649d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e8aa9b0aefc30ee5807c2b2cf433a38555b7e0b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c6ab4f7572fd5ca8638f3cb6e342d5000955e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfce49feb0be6c69f7fffc57ebdd22b6da241278 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b825dc74773ffa5c7a45b48d72616b222ad2023e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0cb95c5df7a559633c48f5b0f200599c4a62091 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c767b5206f1e9c8536110dda4d515ebb9242bbeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85a5a8c6a931f8b3a220ed61750d1f9758d0810a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18caa610d50b92331485013584f5373804dd0416 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d9f1495004710b77767393a29f33df76d7b0fb5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17f5d13a7a741dcbb2a30e147bdafe929cff4697 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1531d789df97dbf1ed3f5b0340bbf39918d9fe48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d52f98935b70cda4eede4d52cdad4e3b886f639 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 723d20f1156530b122e9785f5efc6ebf2b838fe0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b08651e5ae2bffef5e4fb44fbdd7d467715e3b73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc94b89dabd9df49631cbf6b18800325f3521864 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e40ad6369bc74d01af4dc41d3a9b8e25ac2aa01e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46889d1dce4506813206a8004f6c3e514f22b679 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de4cfcc4a1fcb24b72a31c5feff8c67d2ff930fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 987f9bbd08446de3f9d135659f2e36ad6c9d14fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27b4efed7a435153f18598796473b3fba06c513d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7b7eb6245e7d7c4535975268a9be936e2c59dc8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c7887c66483ffa9a839ecf1a53c5ef718dcd1d2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36cdfd3209909163549850709d7f12fdf1316434 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4a49ff2dddc66bbe25af554caba2351fbf21702 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45eb728554953fafcee2aab0f76ca65e005326b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6ee00d0dadcd7b10d60a2985db4fe137ca7cfed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d83f6e84cbeb45dce4576a9a4591446afefa50b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87a6ffa13ae2951a168cde5908c7a94b16562b96 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73790919dbe038285a3612a191c377bc27ae6170 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4b8e467e44bc1ca1ebf481ac2dfc1baaf9688dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 763ef75d12f0ad6e4b79a7df304c7b5f1b5a11f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b6ed8d46c72366e111b9a97a7c238ef4af3bf4dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3efacd7aea48c93e0a42c1e83bf3c96e9e50f178 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c86bea60dde4016dd850916aa2e0db5260e1ff61 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d4b4ea9c84198a9b6003611a3af00ee677d09a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d437078d8f95cb98f905162b2b06d04545806c59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 491440543571b07c849c0ef9c4ebf5c27f263bc0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dec7a822424bbe58b7b2a7787b1ea32683a9c19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fce04b7e4e6e1377aa7f07da985bb68671d36ba4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28bda3aaa19955d1c172bd86d62478bee024bf7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6e4a6416162a698d87ba15693f2e7434beac644 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fd7b945dfca73caf00883d4cf43740edb7516df ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1bfb44c62d15a45ca4d47b4cc482ebddb8d0ae4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a182be6716d24fb49cb4517898b67ffcdfb5bca4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b18fd3fd13d0a1de0c3067292796e011f0f01a05 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d0ad081ca0e723ba2a12c876b4cd1574485c726 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c824bcd73de8a7035f7e55ab3375ee0b6ab28c46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5c12ff49fc91e66f30c5dc878f5d764d08479558 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56e942318f3c493c8dcd4759f806034331ebeda5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d46e3fe9cb0dea2617cd9231d29bf6919b0f1e91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 68f8a43d1b643318732f30ee1cd75e1d315a4537 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3936084cdd336ce7db7d693950e345eeceab93a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ef4552404ba3bc92554a6c57793ee889523e3a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8cf69b6f8bd73525b5375bd73f1fc79ae322a82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1de8af907dbced4fde64ee2c7f57527fc43ad1cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1527b5734c0f2821fd6f38c1a1d70723a4bb88ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f55c17f48d7608072199496fbcefa33f2e97bf0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0c65d6638698f4e3a9e726efca8c0bcf466cd62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b9d3b961bdf79964b883d3179f085d8835e528d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 02e942b7c603163c87509195d76b2117c4997119 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c80d727e374321573bb00e23876a67c77ff466e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 725bde98d5cf680a087b6cb47a11dc469cfe956c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 965a08c3f9f2fbd62691d533425c699c943cb865 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95bb489a50f6c254f49ba4562d423dbf2201554f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- acac4bb07af3f168e10eee392a74a06e124d1cdd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4cfc682ff87d3629b31e0196004d1954810b206c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c255c14e9eb15f4ff29a4baead3ed31a9943e04e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f219b53f339fc0133800fac96deaf75eb4f9bf6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79d9c4cb175792e80950fdd363a43944fb16a441 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a05e49d2419d65c59c65adf5cd8c05f276550e1d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4228b2cc8e1c9bd080fe48db98a46c21305e1464 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 60e54133aa1105a1270f0a42e74813f75cd2dc46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8535d1a2485b4e063ab9ef0a2719a1aab8187d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a83eee5bcee64eeb000dd413ab55aa98dcc8c7f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e3e8ce69bec72277354eff252064a59f515d718a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5a37564b6eec05b98c2efa5edcd1460a2df02aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17f245cad19bf77a5a5fecdee6a41217cc128a73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45c1c99a22e95d730d3096c339d97181d314d6ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db828cdfef651dd25867382d9dc5ac4c4f7f1de3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7297ff651c3cc6abf648b3fe730c2b5b1f3edbd3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2840c626d2eb712055ccb5dcbad25d040f17ce1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a67e4e49c4e7b82e416067df69c72656213e886 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 342a0276dbf11366ae91ce28dcceddc332c97eaf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 31b3673bdb9d8fb7feea8ae887be455c4a880f76 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863a40e0d35f3ff3c3e4b5dc9ff1272e1b1783b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1060a2a8c90c0730c3541811df8f906dac510a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de9a6bb0c8931e7f74ea35edb372e5ca7d0a5047 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a308613467a1510f8dac514624abae4e10c0779 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6becbaf35fa2f807837284d33649ba5376b3fe21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d0556a31916a709e9da3eafb92fc6b8bf69896c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9d884511ed2c8e9ca96de04df835aaa6eb973eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45eb6bd22554e5dad2417d185d39fe665b7a7419 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 04357d0d46fee938a618b64daed1716606e05ca5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e1e19d33e1caa107dc0a6cc8c1bfe24d8153f51 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc8c91200a7fb2140aadd283c66b5ab82f9ad61e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 891b124f5cc6bfd242b217759f362878b596f6e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f879c71bdf0aac7af9b01304ff02e94b5af71b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2ff0f9d704dc776a1934f72a339da206a9fff4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 750e9677b1ce303fa913c3e0754c3884d6517626 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6fca2410a56225992959e5e4f8019e16757bfd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a47a9c8d8253d0ae2a233fa8599b1a1c54ec53f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6aa8d116eb33293c0a9d6d600eb7c32832758b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8511513540ece43ac8134f3d28380b96db881526 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a72a7a43ae004f1ae1be392d4322c07b25deff5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 616ae503462ea93326fa459034f517a4dd0cc1d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4ae92aa57324849dd05997825c29242d2d654099 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f54c8919f297a5e5c34517d9fed0666c9d8aa10 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1234a1077f24ca0e2f1a9b4d27731482a7ed752b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 88a7002acb50bb9b921cb20868dfea837e7e8f26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d9b7b09a7c66e19a608d76282eacc769e349150 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 257264743154b975bc156f425217593be14727a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d48ed95cc7bd2ad0ac36593bb2440f24f675eb59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ea782803efe1974471430d70ee19419287fd3d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fc9e6150957ff5e011142ec5e9f8522168602ec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 706d3a28b6fa2d7ff90bbc564a53f4007321534f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3621c06c3173bff395645bd416f0efafa20a1da6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 123cb67ea60d2ae2fb32b9b60ebfe69e43541662 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22c4671b58a6289667f7ec132bc5251672411150 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5991698ee2b3046bbc9cfc3bd2abd3a881f514dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae2baadf3aabe526bdaa5dfdf27fac0a1c63aa04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53b65e074e4d62ea5d0251b37c35fd055e403110 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b820e617ab21b372394bf12129c30174f57c5d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b6080369e7ee47b7d746685d264358c91d656bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5025b8de2220123cd80981bb2ddecdd2ea573f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da5e58a47d3da8de1f58da4e871e15cc8272d0e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- da09f02e67cb18e2c5312b9a36d2891b80cd9dcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95436186ffb11f51a0099fe261a2c7e76b29c8a6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2b9ac30337761fa0df74ce6e0347c5aabd7c072 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2af98929bd185cf1b4316391078240f337877f66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df6b87a793434065cd9a01fcaa812e3ea47c4dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90811b1bd194e4864f443ae714716327ba7596c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a40d848794133de7b6e028f2513c939d823767cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7e231a4f184583fbac2d3ef110dacd1f015d5e1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7c4b323bb2d3960430b11134ee59438e16d254e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9eb902eee03806db5868fc84afb23aa28802e841 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81223de22691e2df7b81cd384ad23be25cfd999c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f277ba01f9a93fb040a365eef80f46ce6a9de85 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5cbe7d7de5a29c7e714214695df1948319408d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c2e872f742e7d3c64c7e0fdb85a5d711aff1970 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 322db077a693a513e79577a0adf94c97fc2be347 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba67e4ff74e97c4de5d980715729a773a48cd6bc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e3883a0691ce1957996c5b37d7440ab925c731e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4d8fb73daa82420bdc69c37f0d58f7cb4cd505a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eee7af0e69a39da2dc6c5f109c10975fae5a93e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9780b7a0f39f66d6e1946a7d109fc49165b81d64 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6d544f67a1f3572781271b5f3030d97e6c6d9e2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55885e0c4fc40dd2780ff2cde9cda81a43e682c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7aba59a2609ec768d5d495dafd23a4bce8179741 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8e70749887370a99adeda972cc3503397b5f9a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3a1e0d7117b9e4ea4be3ef4895e8b2b4937ff98a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0e9eef45194039af6b8c22edf06cfd7cb106727a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f6b8bf020863f499bf956943a5ee56d067407f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c39afa1f85f3293ad2ccef684ff62bf0a36e73c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff13922f6cfb11128b7651ddfcbbd5cad67e477f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bed3b0989730cdc3f513884325f1447eb378aaee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a7e7a769087b1790a18d6645740b5b670f5086b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7dcb07947cd71f47b5e2e5f101d289e263506ca9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15c4a95ada66977c8cf80767bf1c72a45eb576b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18fff4d4a28295500acd531a1b97bc3b89fad07e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f7ed51ba4c8416888f5744ddb84726316c461051 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 614907b7445e2ed8584c1c37df7e466e3b56170f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28fdf05b1d7827744b7b70eeb1cc66d3afd38c82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ddf05a78475a194ed1aa082d26b3d27ecc77475 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0441fdcbc4ea1ab8ce5455f2352436712f1b30bb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ab7ac2397d60f1a71a90bf836543f9e0dcad2d0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8005591231c8ae329f0ff320385b190d2ea81df0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be34ec23c48d6d5d8fd2ef4491981f6fb4bab8e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d602f267c32e1e917599d9bcdcfec4eef05d477 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e9bd04844725661c8aa2aef11091f01eeab69486 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a92ab8028c7780db728d6aad40ea1f511945fc8e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3287148a2f99fa66028434ce971b0200271437e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56d7a9b64b6d768dd118a02c1ed2afb38265c8b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5d11b750ecc982541d1f936488248f0b42d75d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d0473c1d1e6cadd986102712fff9196fff96212 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85b836b1efb8a491230e918f7b81da3dc2a232c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5558400e86a96936795e68bb6aa95c4c0bb0719 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 598cd1d7f452e05bfcda98ce9e3c392cf554fe75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b8f10e74d815223341c3dd3b647910b6e6841bd6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56d5d0c70cf3a914286fe016030c9edec25c3ae0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5127e167328c7da2593fea98a27b27bb0acece68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 916c45de7c9663806dc2cd3769a173682e5e8670 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fbd096841ddcd532e0af15eb1f42c5cd001f9d74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c6b08c27a031f8b8b0bb6c41747ca1bc62b72706 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e6957abf8cd88824282a19b74497872fe676a46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbe78c02cbdfd0a539a1e04976e1480ac0daf580 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c437ee5deb8d00cf02f03720693e4c802e99f390 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e94df6acd3e22ce0ec7f727076fd9046d96d57b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d38b9a916ab5bce9e5f622777edbc76bef617e93 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cccea02a4091cc3082adb18c4f4762fe9107d3b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3a728277877924e889e9fef42501127f48a4e77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4654ca3a17832a7d479e5d8e3296f004c632183 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e4a44b302d3a3e49aa014062b42de84480a8d4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f09906d27affb8d08a96c07fc3386ef261f97af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d45c76bd8cd28d05102311e9b4bc287819a51e0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03097c7ace28c5516aacbb1617265e50a9043a84 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5869c5c1a51d448a411ae0d51d888793c35db9c0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f573b6840509bf41be822ab7ed79e0a776005133 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b6f38d02c8ed1fb07eb6782b918f31efc4c42f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e1ad78eb7494513f6c53f0226fe3cb7df4e67513 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c914637ab146c23484a730175aa10340db91be70 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27c577dfd5c7f0fc75cd10ed6606674b56b405bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f122a6aa3eb386914faa58ef3bf336f27b02fab0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59587d81412ca9da1fd06427efd864174d76c1c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5452aa820c0f5c2454642587ff6a3bd6d96eaa1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d43055d44e58e8f010a71ec974c6a26f091a0b7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5244f7751c10865df94980817cfbe99b7933d4d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9421cbc67e81629895ff1f7f397254bfe096ba49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- db82455bd91ce00c22f6ee2b0dc622f117f07137 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48fab54afab49f18c260463a79b90d594c7a5833 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3e5d9cda8eae5b0f19ac25efada6d0b3b9e04e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ddd5e5ef89da7f1e3b3a7d081fbc7f5c46ac11c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c544101eed30d5656746080204f53a2563b3d535 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 007bd4b8190a6e85831c145e0aed5c68594db556 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a8bdce7a665a0b38fc822b7f05a8c2e80ccd781 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c5b87bcdd70810a20308384b0e3d1665f6d2922 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbd784b870a878ef6dbecd14310018cdaeda5c6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29d94c622a7f6f696d899e5bb3484c925b5d4441 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8828ced5818d793879ae509e144fdad23465d684 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ea3dbdf67af10ccc6ad22fb3294bbd790a3698f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b137f55232155b16aa308ec4ea8d6bc994268b0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ae512e69f37e37431239c8da6ffa48c75684f87 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 237d47b9d714fcc2eaedff68c6c0870ef3e0041a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5a75ab7533de99a4f569b05535061581cb07a41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9044abce7e7b3d8164fe7b83e5a21f676471b796 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3eb7265c532e99e8e434e31f910b05c055ae4369 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56cc93a548f35a0becd49a7eacde86f55ffc5dc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a0ad305883201b6b3e68494fc70089180389f6e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9fc8b6c06b91dfddb73d18eaa8164e64cc2600a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7071ce13476cae789377c280aa274e6242fd756 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f3989f27e91119bb29cc1ed93751c3148762695 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c9fcd7745d2f0c933b46a694f77f85056133ca5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bc91d7495d7eb70a70c1f025137718f41486cd2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb53329253f8ec1d0eff83037ce70260b6d8fcce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fcc166d3a6e235933e823e82e1fcf6160a32a5d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 678821a036c04dfbe331d238a7fe0223e8524901 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a61110053bca2bbf605b66418b9670cbd555802 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f24786fca46b054789d388975614097ae71c252e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8980057ccfcaca34b423804222a9f981350ac67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3b7263e0bb9cc1d94e483e66c1494e0e7982fd1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6404168e6f990462c32dbe5c7ac1ec186f88c648 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48f5476867d8316ee1af55e0e7cfacacbdf0ad68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13e3a809554706905418a48b72e09e2eba81af2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 10809e8854619fe9f7d5e4c5805962b8cc7a434b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59879a4e1e2c39e41fa552d8ac0d547c62936897 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c390e223553964fc8577d6837caf19037c4cd6f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9b915b066f28f4ac7382b855a8af11329e3400d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ea761425b9fa1fda57e83a877f4e2fdc336a9a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0524096fa9f3add551abbf68ee22904b249d82f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e8987f2746637cbe518e6fe5cf574a9f151472ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 64a4730ea1f9d7b69a1ba09b32c2aad0377bc10a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe311b917b3cef75189e835bbef5eebd5b76cc20 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36a984803df08b0f6eb5f8a73254dd64bc616b67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb52c96d7e849e68fda40e4fa7908434e7b0b022 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ffde74dd7b5cbc4c018f0d608049be8eccc5101 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3ea450112501e0d9f11e554aaf6ce9f36b32b732 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dfe3ba3e5c08ee88afe89cc331081bbfbf5520e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab5b6af0c2c13794525ad84b0a80be9c42e9fcf1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f03e6162f99e4bfdd60c08168dabef3a1bdb1825 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11e0a94f5e7ed5f824427d615199228a757471fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e583a9e22a7a0535f2c591579873e31c21bccae0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55eb3de3c31fd5d5ad35a8452060ee3be99a2d99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d6192ad1aed30adc023621089fdf845aa528dde9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a023acbe9fc9a183c395be969b7fc7d472490cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e11f12adffec6bf03ea1faae6c570beaceaffc86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 863b386e195bb2b609b25614f732b1b502bc79a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b9b6fe0dd99803c80a3a3c52f003614ad3e0adf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b3b65287e6849628066d5b9d08ec40c260a94dc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cc93c4f3ddade455cc4f55bc93167b1d2aeddc4f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3061698403f0055d1d63be6ab3fbb43bd954e8e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f225d4b8c3d7eb90038c246a289a18c7b655da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35bceb16480b21c13a949eadff2aca0e2e5483fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea5d365a93a98907a1d7c25d433efd06a854109e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e91a05aabb73cca7acec1cc0e07d8a562e31b45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7fa5ef735754e640bd6be6c0a77088009058d74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 096897123ab5d8b500024e63ca81b658f3cb93da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 673b21e1be26b89c9a4e8be35d521e0a43a9bfa1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a98e0af511b728030c12bf8633b077866bb74e47 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 811a6514571a94ed2e2704fb3a398218c739c9e9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec0b85e2d4907fb5fcfc5724e0e8df59e752c0d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96c7ac239a2c9e303233e58daee02101cc4ebf3d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6a2942a982c2541a6b6f7c67aa7dbf57ed060ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f5ec638a77dd1cd38512bc9cf2ebae949e7a8812 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb7fd3f0dd99dc6c49da6fd7e78a392c4ef1b33 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a02e432530336f3e0db8807847b6947b4d9908d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a3cc763d6ca57582964807fb171bc52174ef8d5e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2df73b317a4e2834037be8b67084bee0b533bfe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 031271e890327f631068571a3f79235a35a4f73e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70670586e082a9352c3bebe4fb8c17068dd39b4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e54cd8fed2d1788618df64b319a30c7aed791191 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b4b50e7348815402634b6b559b48191dba00a751 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 460cafb81f86361536077b3b6432237c6ae3d698 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6720e8df09a314c3e4ce20796df469838379480d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ab169407354d4b9512447cd9c90e8a31263c275 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56488ced0fae2729b1e9c72447b005efdcd4fea7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b424f87a276e509dcaaee6beb10ca00c12bb7d29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 294ee691d0fdac46d31550c7f1751d09cfb5a0f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 96d003cb2baabd73f2aa0fd9486c13c61415106e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46f63c30e30364eb04160df71056d4d34e97af21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87ae42528362d258a218b3818097fd2a4e1d6acf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f631214261a7769c8e6956a51f3d04ebc8ce8efd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 468cad66ff1f80ddaeee4123c24e4d53a032c00d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1053448ad885c633af9805a750d6187d19efaa6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 90b20e5cd9ba8b679a488efedb1eb1983e848acf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2fbb7027ec88e2e4fe7754f22a27afe36813224b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f8ce24a835cae8c623e2936bec2618a8855c605b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65747a216c67c3101c6ae2edaa8119d786b793cb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9004e3a1cf33110f2cbc458f1dc3259c930ad9b4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d0f24c9facb5be0c98c8859a5ce3c6b0d08504ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0cfe75db81bc099e4316895ff24d65ef865bced6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf1d5bd4208514bab3e6ee523a70dff8176c8c80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 523fb313f77717a12086319429f13723fe95f85e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f24736ad5b55a89b1057d68d6b3f3cd01018a2e8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3175b5b21194bcc8f4448abe0a03a98d3a4a1360 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7da101ba9a09a22a85c314a8909fd23468ae66f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d810f2700f54146063ca2cb6bb1cf03c36744a2c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3b2e9a8312412b9c8d4e986510dcc30ee16c5f4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fca367548e365f93c58c47dea45507025269f59a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3203cd7629345d32806f470a308975076b2b4686 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b81273e70c9c31ae02cb0a2d6e697d7a4e2b683a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c12fef1b1971ba7a50e7e5c497caf51e0f68479 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e86eb305a542cee5b0ff6a0e0352cb458089bf62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48a17c87c15b2fa7ce2e84afa09484f354d57a39 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98a313305f0d554a179b93695d333199feb5266c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 968ffb2c2e5c6066a2b01ad2a0833c2800880d46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cb68eef0865df6aedbc11cd81888625a70da6777 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b813371f5a8af95152cae109d28c7c97bfaf79f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6befb28efd86556e45bb0b213bcfbfa866cac379 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86523260c495d9a29aa5ab29d50d30a5d1981a0c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9d6310db456de9952453361c860c3ae61b8674ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ca0f897376e765989e92e44628228514f431458 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c946bf260d3f7ca54bffb796a82218dce0eb703f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 685760ab33b8f9d7455b18a9ecb8c4c5b3315d66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 83a9e4a0dad595188ff3fb35bc3dfc4d931eff6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 264ba6f54f928da31a037966198a0849325b3732 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22a88a7ec38e29827264f558f0c1691b99102e23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e6019e16d5a74dc49eb7129ee7fd78b4de51dac2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec0657cf5de9aeb5629cc4f4f38b36f48490493e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 517ae56f517f5e7253f878dd1dc3c7c49f53df1a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fafe8a77db75083de3e7af92185ecdb7f2d542d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a17c43d0662bab137903075f2cff34bcabc7e1d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c72b9a3eaabbe927ba77d4f69a62f35fbe60e2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20b07fa542d2376a287435a26c967a5ee104667f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8dd51f1d63fa5ee704c2bdf4cb607bb6a71817d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e0e315a371cdfc80993a1532f938d56ed7acee4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- beccf1907dae129d95cee53ebe61cc8076792d07 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7029773512eee5a0bb765b82cfdd90fd5ab34e15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8d0aa1ef19e2c3babee458bd4504820f415148e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca3fdbe2232ceb2441dedbec1b685466af95e73b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61f3db7bd07ac2f3c2ff54615c13bf9219289932 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8867348ca772cdce7434e76eed141f035b63e928 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f24f9540afc0db61d197bc4932697737bff1506 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a21a9f6f13861ddc65671b278e93cf0984adaa30 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b00ad00130389f5b00da9dbfd89c3e02319d2999 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5bd7d44ff7e51105e3e277aee109a45c42590572 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2ab454f0ccf09773a4f51045329a69fd73559414 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ccd777c386704911734ae4c33a922a5682ac6c8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7dd618655c96ff32b5c30e41a5406c512bcbb65f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8ad01ee239f9111133e52af29b78daed34c52e49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 45c0f285a6d9d9214f8167742d12af2855f527fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a93eb7e8484e5bb40f9b8d11ac64a1621cf4c9cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1545bd9cd6953c5b39c488bf7fe179676060499 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8014d2ec56fd684dc81478dee73ca7eda0ab8a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e5aae2fc8c3832bdae1cd5e0a269405fb059231 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1d1d2cb421f16bd277d7c4ce88398ff0f5afb29 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cf2d5fcf0a3db793678dd6ba9fc1c24d4eeb36a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a25e1d4aa7e5898ab1224d0e5cc5ecfbe8ed8821 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 739fa140235cc9d65c632eaf1f5cacc944d87cfb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bd7fb976ab0607592875b5697dc76c117a18dc73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebe8f644e751c1b2115301c1a961bef14d2cce89 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9519f186ce757cdba217f222c95c20033d00f91d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 75c75fa136f6181f6ba2e52b8b85a98d3fe1718e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dec4663129f72321a14efd6de63f14a7419e3ed2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d5bfb5d6d22f8fe8c940f36e1fbe16738965d5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3f2d76ba8e6d004ff5849ed8c7c34f6a4ac2e1e3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c34d5c3f2a4ed7194276a026e0ec6437d339c67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b6b9510e0724bfcb4250f703ddf99d1e4020bbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf5eaddde33e983bc7b496f458bdd49154f6f498 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0b92e40ece170b59bced0cea752904823e06e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c0990b2a6dd2e777b46c1685ddb985b3c0ef59a2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 97ab197140b16027975c7465a5e8786e6cc8fea1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c1834134ce177cdbd30a56994fcc4bf8f5be8b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8858a63cb33319f3e739edcbfafdae3ec0fefa33 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82849578e61a7dfb47fc76dcbe18b1e3b6a36951 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 94029ce1420ced83c3e5dcd181a2280b26574bc9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a320abc52307b4d4010166bd899ac75024ec9a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13647590f96fb5a22cb60f12c5a70e00065a7f3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1687283c13caf7ff8d1959591541dff6a171ca1e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 741dfaadf732d4a2a897250c006d5ef3d3cd9f3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0019d7dc8c72839d238065473a62b137c3c350f5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cc4d748a132377ffe63534e9777d7541a3253c5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4d5caa79e6d88bb3f98bfbefa3bfa039c7e157a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f88fb96869b6ac3ed4dac7d23310a9327d3c89c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 609a46a72764dc71104aa5d7b1ca5f53d4237a75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 394ed7006ee5dc8bddfd132b64001d5dfc0ffdd3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e6234c27abf041e4c8cd1a799950e7cd9104f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 192472f9673b18c91ce618e64e935f91769c50e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b03933057df80ea9f860cc616eb7733f140f866e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 89422841e46efa99bda49acfbe33ee1ca5122845 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e84d05f4bbf7090a9802e9cd198d1c383974cb12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d9310055f364cf3fa97f663287c596920d6e7e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef48ca5f54fe31536920ec4171596ff8468db5fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 694265664422abab56e059b5d1c3b9cc05581074 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b3ef45167e1c2f7d1b7507c13fcedd914f87da9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbb58869063fe803d232f099888fe9c23510de7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33964afb47ce3af8a32e6613b0834e5f94bdfe68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33819a21f419453bc2b4ca45b640b9a59361ed2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 98e6edb546116cd98abdc3b37c6744e859bbde5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17a172920fde8c6688c8a1a39f258629b8b73757 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d061a1a506b71234f783628ba54a7bdf79bbce9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24740f22c59c3bcafa7b2c1f2ec997e4e14f3615 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78d2cd65b8b778f3b0cfef5268b0684314ca22ef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bcd37b68533d0cceb7e73dd1ed1428fa09f7dc17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 21b4db556619db2ef25f0e0d90fef7e38e6713e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55b67e8194b8b4d9e73e27feadbf9af6593e4600 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f73e8ba55f33394161b403bf7b8c2e0e05f47b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de3b9639a4c2933ebb0f11ad288514cda83c54fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af5abca21b56fcf641ff916bd567680888c364aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 258403da9c2a087b10082d26466528fce3de38d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4fd7fca515ba9b088a7c811292f76f47d16cd7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 08457a7a6b6ad4f518fad0d5bca094a2b5b38fbe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ceee7d7e0d98db12067744ac3cd0ab3a49602457 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3288a244428751208394d8137437878277ceb71f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 624556eae1c292a1dc283d9dca1557e28abe8ee3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b425301ad16f265157abdaf47f7af1c1ea879068 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f97653aa06cf84bcf160be3786b6fce49ef52961 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ca288d443f4fc9d790eecb6e1cdf82b6cdd8dc0d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00ce31ad308ff4c7ef874d2fa64374f47980c85c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4287f65878000b42d11704692f9ea3734014b4c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01ab5b96e68657892695c99a93ef909165456689 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4d36f8ff4d1274a8815e932285ad6dbd6b2888af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f683c6623f73252645bb2819673046c9d397c567 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc31651674648f026464fd4110858c4ffeac3c18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e2f63e64875a29e8c01a7ae17f5744680167a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd96cceded27d1372bdc1a851448d2d8613f60f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f068cdc5a1a13539c4a1d756ae950aab65f5348b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6917ae4ce9eaa0f5ea91592988c1ea830626ac3a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3bd05b426a0e3dec8224244c3c9c0431d1ff130 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9059525a75b91e6eb6a425f1edcc608739727168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1401803ccf7db5d897a5ef4b27e2176627c430e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ebc6193f7205fd1686678a5707262cb1c59bb0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 73959f3a2d4f224fbda03c8a8850f66f53d8cb3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8d2239f24f6a54d98201413d4f46256df0d6a5f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28a33ca17ac5e0816a3e24febb47ffcefa663980 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a32a6bcd784fca9cb2b17365591c29d15c2f638e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58fb1187b7b8f1e62d3930bdba9be5aba47a52c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1fe889ea0cb2547584075dc1eb77f52c54b9a8c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fde6522c40a346c8b1d588a2b8d4dd362ae1f58f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1c6d7830d9b87f47a0bfe82b3b5424a32e3164ad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 402a6c2808db4333217aa300d0312836fd7923bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 47e3138ee978ce708a41f38a0d874376d7ae5c78 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0369384c8b79c44c5369f1b6c05046899f8886da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f963881e53a9f0a2746a11cb9cdfa82eb1f90d8c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- feb1ea0f4aacb9ea6dc4133900e65bf34c0ee02d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18be0972304dc7f1a2a509595de7da689bddbefa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55dcc17c331f580b3beeb4d5decf64d3baf94f2e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77cd6659b64cb1950a82e6a3cccdda94f15ae739 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 129f90aa8d83d9b250c87b0ba790605c4a2bb06a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 791765c0dc2d00a9ffa4bc857d09f615cfe3a759 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57050184f3d962bf91511271af59ee20f3686c3f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 160081b9a7ca191afbec077c4bf970cfd9070d2c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 778234d544b3f58dd415aaf10679d15b01a5281f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e2265a23ecec4e4d9ad60d788462e7f124f1bb7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 91725f0fc59aa05ef68ab96e9b29009ce84668a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4f49fb232acb2c02761a82acc12c4040699685d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aea0243840a46021e6f77c759c960a06151d91c9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0fdf6c3aaff49494c47aaeb0caa04b3016e10a26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2d9197cfe5d3b43cb8aee182b2e65c73ef9ab7b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c0ef65b43688b1a4615a1e7332f6215f9a8abb19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac62760c52abf28d1fd863f0c0dd48bc4a23d223 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69dd8750be1fbf55010a738dc1ced4655e727f23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be97c4558992a437cde235aafc7ae2bd6df84ac8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f164627a85ed7b816759871a76db258515b85678 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1044116d25f0311033e0951d2ab30579bba4b051 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b82dbf538ac0d03968a0f5b7e2318891abefafaa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e837b901dcfac82e864f806c80f4a9cbfdb9c9f3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d2307532d679393ae067326e4b6fa1a2ba5cc06 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 06590aee389f4466e02407f39af1674366a74705 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c9dbf201b4f0b3c2b299464618cb4ecb624d272c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38b3cfb9b24a108e0720f7a3f8d6355f7e0bb1a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9240918aa03e49feabe43af619019805ac76786 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abaefc59a7f2986ab344a65ef2a3653ce7dd339f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fe5289ed8311fecf39913ce3ae86b1011eafe5f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af32b6e0ad4ab244dc70a5ade0f8a27ab45942f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 28ed48c93f4cc8b6dd23c951363e5bd4e6880992 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c1faef799095f3990e9970bc2cb10aa0221cf9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86ea63504f3e8a74cfb1d533be9d9602d2d17e27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f91495e271597034226f1b9651345091083172c4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c1169f6ea406fec1e26e99821e18e66437e65eb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a0b79ee574999ecbc76696506352e4a5a0d7159 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a243827ab3346e188e99db2f9fc1f916941c9b1a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1d8a577ffc6ad7ce1465001ddebdc157aecc1617 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fbb69306c0e14bacb8dcb92a89af27d3d5d631f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be8955a0fbb77d673587974b763f17c214904b57 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25dca42bac17d511b7e2ebdd9d1d679e7626db5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e746f96bcc29238b79118123028ca170adc4ff0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a28942bdf01f4ddb9d0b5a0489bd6f4e101dd775 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e79999c956e2260c37449139080d351db4aa3627 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1e80445ad5cb6da4c0070d7cb8af89da3b0803b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cac6e06cc9ef2903a15e594186445f3baa989a1a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d9b1f4f9fa8c9f030e3207e7deacc5d5f8bba4e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b01ca6a3e4ae9d944d799743c8ff774e2a7a82b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29eb123beb1c55e5db4aa652d843adccbd09ae18 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1ee2afb00afaf77c883501eac8cd614c8229a444 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1906ee4df9ae4e734288c5203cf79894dff76cab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f606937a7a21237c866efafcad33675e6539c103 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e14e3f143e7260de9581aee27e5a9b2645db72de ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ecf37a1b4c2f70f1fc62a6852f40178bf08b9859 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1e2b46138ba58033738a24dadccc265748fce2ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 257a8a9441fca9a9bc384f673ba86ef5c3f1715d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 18e3252a1f655f09093a4cffd5125342a8f94f3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1873db442dc7511fc2c92fbaeb8d998d3e62723d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de84cbdd0f9ef97fcd3477b31b040c57192e28d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b4a514e51fbc7dc6ddcb27c188159d57b5d1fa9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 365fb14ced88a5571d3287ff1698582ceacd80d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ff864138cd1e680a78522c26b583639f8f5e313 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17af1f64d5f1e62d40e11b75b1dd48e843748b49 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26e138cb47dccc859ff219f108ce9b7d96cbcbcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea81f14dafbfb24d70373c74b5f8dabf3f2225d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 583e6a25b0d891a2f531a81029f2bac0c237cbf9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1019d4cf68d1acdbb4d6c1abb7e71ac9c0f581af ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 38d59fc8ccccae8882fa48671377bf40a27915a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07996a1a1e53ffdd2680d4bfbc2f4059687859a5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 01eac1a959c1fa5894a86bf11e6b92f96762bdd8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6d1212e8c412b0b4802bc1080d38d54907db879d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 600fcbc1a2d723f8d51e5f5ab6d9e4c389010e1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6f8ce8901e21587cd2320562df412e05b5ab1731 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57a4e09294230a36cc874a6272c71757c48139f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cfb278d74ad01f3f1edf5e0ad113974a9555038d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fbe062bf6dacd3ad63dd827d898337fa542931ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8caeec1b15645fa53ec5ddc6e990e7030ffb7c5a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b86f9b399a8f5af792a04025fdeefc02883f3e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0974f8737a3c56a7c076f9d0b757c6cb106324fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3323464f85b986cba23176271da92a478b33ab9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c34343d0b714d2c4657972020afea034a167a682 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- de5bc8f7076c5736ef1efa57345564fbc563bd19 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 282018b79cc8df078381097cb3aeb29ff56e83c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e6bece08aea01859a232e99a1e1ad8cc1eb7d36 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c36f3648e39ace752c67c71867693ce1eee52a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c083f3d0b853e723d0d4b00ff2f1ec5f65f05cba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 538820055ce1bf9dd07ecda48210832f96194504 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a988e6985849e4f6a561b4a5468d525c25ce74fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55e757928e493ce93056822d510482e4ffcaac2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 837c32ba7ff2a3aa566a3b8e1330e3db0b4841d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae5a69f67822d81bbbd8f4af93be68703e730b37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1090701721888474d34f8a4af28ee1bb1c3fdaaa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 63761f4cb6f3017c6076ecd826ed0addcfb03061 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e1c89ec97ec90037583e85d0e9e71e9c845a19b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2054561da184955c4be4a92f0b4fa5c5c1c01350 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e41c727be8dbf8f663e67624b109d9f8b135a4ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a25347d7f4c371345da2348ac6cceec7a143da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2c8d26d3b25b864ad48e6de018757266b59f708 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 143b927307d46ccb8f1cc095739e9625c03c82ff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c1a87d11df666d308d14e4ae7ee0e9d614296b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15941ca090a2c3c987324fc911bbc6f89e941c47 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22a0289972b365b7912340501b52ca3dd98be289 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- df0892351a394d768489b5647d47b73c24d3ef5f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f78d4a28f307a9d7943a06be9f919304c25ac2d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d6ceabf5b90e7c0690360fc30774d36644f563c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e2ba9c2028f21d11988558f3557905d21e93808 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 772b95631916223e472989b43f3a31f61e237f31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b75c3103a700ac65b6cd18f66e2d0a07cfc09797 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be06e87433685b5ea9cfcc131ab89c56cf8292f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 898d47d1711accdfded8ee470520fdb96fb12d46 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e5c0002d069382db1768349bf0c5ff40aafbf140 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69361d96a59381fde0ac34d19df2d4aff05fb9a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b48e4d3aa853687f420dc51969837734b70bfdec ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 654e54d200135e665e07e9f0097d913a77f169da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e825f8b69760e269218b1bf1991018baf3c16b04 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13dd59ba5b3228820841682b59bad6c22476ff66 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 82b8902e033430000481eb355733cd7065342037 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 583cd8807259a69fc01874b798f657c1f9ab7828 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- def0f73989047c4ddf9b11da05ad2c9c8e387331 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619c11787742ce00a0ee8f841cec075897873c79 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 501bf602abea7d21c3dbb409b435976e92033145 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edd9e23c766cfd51b3a6f6eee5aac0b791ef2fd0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53152a824f5186452504f0b68306d10ebebee416 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 997b7611dc5ec41d0e3860e237b530f387f3524a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c3c271b0d6b5f56b86e3f177caf3e916b509b52 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3776f7a766851058f6435b9f606b16766425d7ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 72bcdbd0a0c8cc6aa2a7433169aa49c7fc19b55b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 619662a9138fd78df02c52cae6dc89db1d70a0e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 09c3f39ceb545e1198ad7a3f470d4ec896ce1add ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4956c1e618bfcfeef86c6ea90c22dd04ca81b9db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8a448b7864e21db46184eab0f0a21d7725d074f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d996892ac76199886ba3e2754ff9c9fac2456d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bfdf93201ea413affd4c8fbe406ea2b4a7c1b6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a252661c3bf4202a4d571f9c41d2afa48d9d75f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3e14ab55a060a5637e9a4a40e40714c1f441d952 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 867129e2950458ab75523b920a5e227e3efa8bbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4375386fb9d8c7bc0f952818e14fb04b930cc87d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b27292936c81637f6b9a7141dafaad1126f268e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f96ee7463e2454e95bf0d77ca4fe5107d3f24d68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b3cde0ee162b8f0cb67da981311c8f9c16050a62 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 76fd1d4119246e2958c571d1f64c5beb88a70bd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec28ad575ce1d7bb6a616ffc404f32bbb1af67b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 180a5029bc3a2f0c1023c2c63b552766dc524c41 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b72e2704022d889f116e49abf3e1e5d3e3192d3b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a803803f40163c20594f12a5a0a536598daec458 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ab59f78341f1dd188aaf4c30526f6295c63438b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0bb2fc8129ed9adabec6a605bfe73605862b20d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 61138f2ece0cb864b933698174315c34a78835d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15ee0ac0d56a5fb5ba13fae4288621ddd2185f17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50e469109eed3a752d9a1b0297f16466ad92f8d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 400d728c99ddeae73c608e244bd301248b5467fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 65c9fe0baa579173afa5a2d463ac198d06ef4993 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 77cde0043ceb605ed2b1beeba84d05d0fbf536c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c69b6b979e3d6bd01ec40e75b92b21f7a391f0ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d86e77edd500f09e3e19017c974b525643fbd539 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b3feddd1269a0b0976f4eef2093cb0dbf258f99 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dcf2c3bd2aaf76e2b6e0cc92f838688712ebda6c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a38a0053d31d0285dd1e6ebe6efc28726a9656cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 697702e72c4b148e987b873e6094da081beeb7cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b1a2271a03313b561f5b786757feaded3d41b23f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bc66da0d66a9024f0bd86ada1c3cd4451acd8907 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 16a0c64dd5e69ed794ea741bc447f6a1a2bc98e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 54844a90b97fd7854e53a9aec85bf60564362a02 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a97d21936200f1221d8ddd89202042faed1b9bcb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35057c56ce118e4cbd0584bd4690e765317b4c38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6a417f4cf2df39704aa4c869e88d14e9806894a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c76a8c5499d22b9c0b4c56f03b671033eb9f9bdd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3326f34712f6a96c162033c7ccf370c8b7bc1ead ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6102b349cbef03667d5715fcfae3161701a472d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac4133f51817145e99b896c7063584d4dd18ad59 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8e29a91324ca7086b948a9e3a4dbcbb2254a24a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4ed59a86909b142ede105dd9262915c0e2993ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e729429631c84c3bd5602edcab3e7c2ab1dcce0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12276fedec49c855401262f0929f088ebf33d2cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d00fa4f6cad398250ce868cef34357b45abaad3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c05ef0e7543c2845fd431420509476537fefe2b0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1eae9d1532e037a4eb08aaee79ff3233d2737f31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bae67b87039b3364bdc22b8ef0b75dd18261814c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 615de50240aa34ec9439f81de8736fd3279d476d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f22ddca351c45edab9f71359765e34ae16205fa1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bac518bfa621a6d07e3e4d9f9b481863a98db293 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4f7255c2c1d9e54fc2f6390ad3e0be504e4099d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8775b6417b95865349a59835c673a88a541f3e13 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ba46b8fba511fdc9b8890c36a6d941d9f2798fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2740d2cf960cec75e0527741da998bf3c28a1a45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a1391bf06a839746bd902dd7cba2c63d1e738d37 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f28a2041f707986b65dbcdb4bb363bb39e4b3f77 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- accfe361443b3cdb8ea43ca0ccb8fbb2fa202e12 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7ef66a66dc52dcdf44cebe435de80634e1beb268 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa98250e1dd7f296b36e0e541d3777a3256d676c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0d638bf6e55bc64c230999c9e42ed1b02505d0ce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aaeb986f3a09c1353bdf50ab23cca8c53c397831 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c92df685d6c600a0a3324dff08a4d00d829a4f5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e40b5f075bdb9d6c2992a0a1cf05f7f6f4f101a3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5f92b17729e255ca01ffb4ed215d132e05ba4da ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 279d162f54b5156c442c878dee2450f8137d0fe3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1194dc4322e15a816bfa7731a9487f67ba1a02aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f6c8072daa942e9850b9d7a78bd2a9851c48cd2c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f73385a5f62a211c19d90d3a7c06dcd693b3652d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 202216e2cdb50d0e704682c5f732dfb7c221fbbc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dd7d6468a54be56039b2e3a50bcf171d8e854ff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5020eb8ef37571154dd7eff63486f39fc76fea7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3bee808e15707d849c00e8cea8106e41dd96d771 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 331ddc27a22bde33542f8c1a00b6b56da32e5033 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c0dcc6fb3dfd39df5970d6da340a949902ae629 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0f6c32a918544aa239a6c636666ce17752e02f15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84f9b603b44e0225391f1495034e0a66514c7368 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84be1263abac102d8b4bc49096530c6fd45a9b80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59b05d06c1babcc8cd1c541716ca25452056020a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f4bc8ee9aeeec8bf7aa31c627e50761dd8bb2db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1da744421619e134ed3ff2781b4d97fee78d9cd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d884adc80c80300b4cc05321494713904ef1df2d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2ff5822dbefa1c9c8177cbf9f0879c5cf4efc5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 05d2687afcc78cd192714ee3d71fdf36a37d110f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ace1fed6321bb8dd6d38b2f58d7cf815fa16db7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e0f2bb42b56f770c50a6ef087e9049fa6ac11fb5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6226720b0e6a5f7cb9223fc50363def487831315 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2df1f56cccab13d5c92abbc6b18be725e7b4833 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f1e9df152219e85798d78284beeda88f6baa9ec7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 819d6aceeb4d31c153de58081b21ad4f8b559c0e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b0e84a3401c84507dc017d6e4f57a9dfdb31de53 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4186a2dbbd48fd67ff88075c63bbd3e6c1d8a2df ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58d692e2a1d7e3894dbed68efbcf7166d6ec3fb7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b67bd4c730273a9b6cce49a8444fb54e654de540 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52bb0046c0bf0e50598c513e43b76d593f2cbbff ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fc2201e660014c5d91fec8e3c3a3fa5a66dcf33b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 179a1dcc65366a70369917d87d00b558a6d0c04d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6da04adff0b96c5163b0c2530028b72be2fd26fd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07eaa4ce2696a88ec0db6e91f191af1e48226aca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 637eadce54ca8bbe536bcf7c570c025e28e47129 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a4bfd979e5d4ea0d0457e552202eb2effc36cac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00c5497f190172765cc7a53ff9d8852a26b91676 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f41d42ee7e264ce2fc32cea555e5f666fa1b1fe9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9117cdbb48ffc458d809715c6ab6bc6b416ef621 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b372fdd54bab2ad6639756958978660b12095c3c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2dc5d68491eb3c73ae8478bf6edef80b18564a13 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4251bd59fb8e11e40c40548cba38180a9536118c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f2834177c0fdf6b1af659e460fd3348f468b8ab0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7cdfaceebe916c91acdf8de3f9506989bc70ad65 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 806450db9b2c4a829558557ac90bd7596a0654e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4cde8df886112ee32b0a09fcac90c28c85ded7f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a885d23bab51b0c00be2780055ff63b3f3c1a4c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 555b0efc2c19aa8cf7c548b4097bd20a73f572ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5915114cdca6f09fa2355162a43596f5d20273be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 451561c252323e74696dbe0be36601c95a75a8c3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c0a65226f038c58fc6d6ed525f38fc00b3579b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e6d110fbfa1f2e6a96bc8329e936d0cf1192844 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39229db70e71a6be275dafb3dd9468930e40ae48 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9bbdc87a7263f479344fcf67c4b9fd6005bb6cd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81279eeac5c525354cbe19b24a6f42219407c1f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e99d9ab2acfaf2ebb4b150736590d6a4e33f449 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13ba1d87ab8fc45d2aed25662bf91053b0db5f9f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2454ae89983a4496a445ce347d7a41c0bb0ea7ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c0c2fc4ee2d8a5d0a2de50ba882657989dedc51 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c68459a17ff59043d29c90020fffe651b2164e6a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 832b56394b079c9f6e4c777934447a9e224facfe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9f51eeb2f9a1efe22e45f7a1f7b963100f2f8e6b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43ab2afba68fd0e1b5d138ed99ffc788dc685e36 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50af864298826feaf94772982bbc7b222b4b4242 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d9671e15703918048982c9ff4e2e0fef21ede320 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 75c161cbc017a7d176dd0d7b937db26b3ce637a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 84968314ddcbaa0e4b685c71c6ea5524b3aefc80 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52ab307935bd2bbda52f853f9fc6b49f01897727 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b01824b1aecf8aadae4501e22feb45c20fb26bce ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5df44408218003eb49e3b8fc94329c5e8b46c7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ce1193c851e98293a237ad3d2d87725c501e89f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e648efdcc1ca904709a646c1dbc797454a307444 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20ef1924b832a3788849793c0ee6b46dd00d4520 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 46c9a0df4403266a320059eaa66e7dce7b3d9ac4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53ed0d43ab950d4deeefd238c7685dabef943800 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3410fdc42075bd788a78f4b2a68c5e2cc0930409 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bca0cb7f507d6a21a652307737a57057692d2f79 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 07c20b4231b12fee42d15f1c44c948ce474f5851 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 708b8dda8e7b87841a5f39c60b799c514e75a9c7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6745f4542cfb74bbf3b933dba7a59ef2f54a4380 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2da2b90e6930023ec5739ae0b714bbdb30874583 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b426893ce331f71165c82b1a86252cd104ae3db ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4748e813980e1316aa364e0830a4dc082ff86eb0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a67bf61b5017e41740e997147dc88282b09c6f86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- be53c1f33107d6891c47c784aeadd6e5ddf78e8c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c39f9da792792d4e73fc3a5effde66576ae128c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 92a97480edcc0f0de787a752bf90feed0445dd39 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ccde80b7a3037a004a7807a6b79916ce2a1e9729 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a28d3d18f9237af5101eb22e506a9ddda6d44025 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 572ace094208c28ab1a8641aedb038456d13f70b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5593dc014a41c563ba524b9303e75da46ee96bd5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b93f2a91e0791be3ffda1f753aa6c377bcab4d3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a4b1d4d11eee3c5362a4152216376e634bd14cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2b7f5cb25e0e03e06ec506d31c001c172dd71ef6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9a119924bd314934158515a1a5f5877be63f6f91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6eeae8b24135b4de05f6d725b009c287577f053d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0c4269a21b9edf8477f2fee139d5c1b260ebc4f8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ee861ae7a7b36a811aa4b5cc8172c5cbd6a945b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac36642ce1cde75b222e20f585ddfd240f064da2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bdf2e667f969e5c22985dd232fe3f107fe26e750 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c76852d0bff115720af3f27acdb084c59361e5f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 15b9129ec639112e94ea96b6a395ad9b149515d1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ead94f267065bb55303f79a0a6df477810b3c68d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3cb5ba18ab1a875ef6b62c65342de476be47871b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa44e6b579917814740393efc0b990e0fbbbdaf3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ba8d148121b1dbba444849fe9549f36a7d17db28 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bcd57e349c08bd7f076f8d6d2f39b702015358c1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7a7eedde7f5d5082f7f207ef76acccd24a6113b1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ac1cec7066eaa12a8d1a61562bfc6ee77ff5f54d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dbc18b92362f60afc05d4ddadd6e73902ae27ec7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 386d1af07bf1f32fac5e97612441488894f2ffed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50c90666c4de8ac93accdf4040e3eb010a82a46a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ca61d4c68dad68901f8a7364dd210ef27a8b4c6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 101fb1df36f29469ee8f4e0b9e7846d856b87daa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6acec357c7609fdd2cb0f5fdb1d2756726c7fe98 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6bca9899b5edeed7f964e3124e382c3573183c68 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5f23379c496942ea6fe898a7a823b65530c126a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9374a916588d9fe7169937ba262c86ad710cfa74 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f4fa1cb3c3e84cad8b74edb28531d2e27508be26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 615fc1984b0cc09c8eeab51a1d1c4e05b583b4a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e4582f805156095604fe07e71195cd9aa43d7a34 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20f202d83bdf1f332a3cb8f010bcf8bf3c2807bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5eb0f2c241718bc7462be44e5e8e1e36e35f9b15 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2792e534dd55fe03bca302f87a3ea638a7278bf1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ec3d91644561ef59ecdde59ddced38660923e916 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79cfe05054de8a31758eb3de74532ed422c8da27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9ee31065abea645cbc2cf3e54b691d5983a228b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 86fa577e135713e56b287169d69d976cde27ac97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1b89f39432cdb395f5fbb9553b56595d29e2b773 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ef1f89abe5b2334705ee8f1a6da231b0b6c9a50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e70f3218e910d2b3dcb8a5ab40c65b6bd7a8e9a8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b65df78a10c3bcc40d18f3e926bb5a49821acc31 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8430529e1a9fb28d8586d24ee507a8195c370fa5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a58a60ac5f322eb4bfd38741469ff21b5a33d2d5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 00499d994fea6fb55a33c788f069782f917dbdd4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 291d2f85bb861ec23b80854b974f3b7a8ded2921 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2ccae0d7fca3a99fc6a3f85f554d162a3fdc916 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ffd4b0193acf86b6a6e179f8673ed38bad3191d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ff3d142387e1f38b0ed390333ea99e2e23d96e35 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b2a14e4b96a0ffc5353733b50266b477539ef899 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d1bd99c0a376dec63f0f050aeb0c40664260da16 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 78a46c432b31a0ea4c12c391c404cd128df4d709 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 461fd06e1f2d91dfbe47168b53815086212862e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4b43ca7ff72d5f535134241e7c797ddc9c7a3573 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 39f85c4358b7346fee22169da9cad93901ea9eb9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- beb76aba0c835669629d95c905551f58cc927299 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 20c34a929a8b2871edd4fd44a38688e8977a4be6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea33fe8b21d2b02f902b131aba0d14389f2f8715 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b7a5c05875a760c0bf83af6617c68061bda6cfc5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5ba2aef8f59009756567a53daaf918afa851c304 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8b5121414aaf2648b0e809e926d1016249c0222c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6ba8b8b91907bd087dfe201eb0d5dae2feb54881 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5117c9c8a4d3af19a9958677e45cda9269de1541 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- af9e37c5c8714136974124621d20c0436bb0735f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c658c16f3437ed7e78f6072b6996cb423a8f504 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1496979cf7e9692ef869d2f99da6141756e08d25 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58e2157ad3aa9d75ef4abb90eb2d1f01fba0ba2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0725af77afc619cdfbe3cec727187e442cceaf97 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 685d6e651197d54e9a3e36f5adbadd4d21f4c7e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e062f4d043234312446ea9445f07bd9dc309ce3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1083748b828dfca6a72014434850da0f2a0579ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4c73e9cd66c77934f8a262b0c1bab9c2f15449ba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 59e26435a8d2008073fc315bafe9f329d0ef689a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b197b2dbb527de9856e6e808339ab0ceaf0a512d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7184340f9d826a52b9e72fce8a30b21a7c73d5be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9dfd6bcca5499e1cd472c092bc58426e9b72cccc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a519942a295cc39af4eebb7ba74b184decae13fb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6c486b2e699082763075a169c56a4b01f99fc4b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11ec2e08e1796b5914cd9c4830813482753ecfa0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c53eeaca19163b2b5484304a9ecce3ef92164d70 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c770f8e98a0079497d3eb5bc31e7260cc70cc63 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 36f838e7977e62284d2928f65cacf29771f1952f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f9cec00938d9059882bb8eabdaf2f775943e00e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 44a601a068f4f543f73fd9c49e264c931b1e1652 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4712c619ed6a2ce54b781fe404fedc269b77e5dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5da34fddda2ea6de19ecf04efd75e323c4bb41e4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3942cdff6254d59100db2ff6a3c4460c1d6dbefe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 25945899a0067a2dbeeae7a8362a6d68bbc5c6ba ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9c3bbc43d097656b54c808290ce0c656d127ce47 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d9e7f1121d3bdbb08291c7164ad622350544a21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b999cae064fb6ac11a61a39856e074341baeefde ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b9776e88f7abb59cebac8733c04cccf6eee1c60 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc518251eb64c3ef90502697a7e08abe3f8310b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 753e908dcea03cf9962cf45d3965cf93b0d30d94 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc1fcf372878240e0a1af20641d361f14aea7252 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4fe5cfa0e063a8d51a1eb6f014e2aaa994e5e7d4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f2b19de3301e76ab3a6187a49c9c93ff78bafbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb0ac304431e8aed686a8a817aaccd74b1ba4f24 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0cd09bd306486028f5442c56ef2e947355a06282 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1047b41e2e925617474e2e7c9927314f71ce7365 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 146a6fe18da94e12aa46ec74582db640e3bbb3a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9e14356d12226cb140b0e070bd079468b4ab599b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b00f3689aa19938c10576580fbfc9243d9f3866c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f62c9b9c0c9bda792c3fa531b18190e97eb53509 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30d822a468dc909aac5c83d078a59bfc85fc27aa ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 13a26d4f9c22695033040dfcd8c76fd94187035b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ddc5496506f0484e4f1331261aa8782c7e606bf2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 87afd252bd11026b6ba3db8525f949cfb62c90fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5bb812243dd1815651281a54c8191fc8e2bc2d82 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5de63b40dbb8fef7f2f46e42732081ef6d0d8866 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33fa178eeb7bf519f5fff118ebc8e27e76098363 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa921fee6014ef43bb2740240e9663e614e25662 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 81d8788d40867f4e5cf3016ef219473951a7f6ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2c23ca3cd9b9bbeaca1b79068dee1eae045be5b6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f8e6f7ab1e6dbd95c268ba0fc827abc62009013 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0ec61d4f7208a2713adeafb947f65fdae0947067 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3c9f55dd8e6697ab2f9eaf384315abd4cbefad38 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b50af0a20bcc7280940ce07593007d17c5acabd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7a4388eeaa4b6b94192dce67257a34c4a6cbd26 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 29c20c147b489d873fb988157a37bcf96f96ab45 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eb8cec3cab142ef4f2773b6fc9d224461a6bf85d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fa8fe4cad336a7bdd8fb315b1ce445669138830c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb509603e8303cd8ada7cfa1aaa626085b9bb6d6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6662422ba52753f8b10bc053aba82bac3f2e1b9c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d3a24b22d340c62fafc0e75a349c0ffe34d99d7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b1f32e231d391f8e6051957ad947d3659c196b2b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5613079f2494808f048b81815bf708debf7339d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7781e1056c672d5212f1aaf4b81ba6f18e8dd8b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a4fb3091a75005b047fbea72f812c53d27b15412 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2e68d907022c84392597e05afc22d9fe06bf0927 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a10aa36bc6a82bd50df6f3df7d6b7ce04a7070f1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 764cc6e344bd034360485018eb750a0e155ca1f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3131d1a5295508f583ae22788a1065144bec3cee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a2856af1d9289ee086b10768b53b65e0fd13a335 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 125b4875b5035dc4f6bad4351651a4236b82baeb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5e52a00c81d032b47f1bc352369be3ff8eb87b27 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d97afa24ad1ae453002357e5023f3a116f76fb17 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 138aa2b8b413a19ebf9b2bbb39860089c4436001 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1adc79ac67e5eabaa8b8509150c59bc5bd3fd4e6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 590638f9a56440a2c41cc04f52272ede04c06a43 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5d3e2f7f57620398df896d9569c5d7c5365f823d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6fcbda4e363262a339d1cacbf7d2945ec3bd83f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- babf5765da3e328cc1060cb9b37fbdeb6fd58350 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 038f183313f796dc0313c03d652a2bcc1698e78e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c231551328faa864848bde6ff8127f59c9566e90 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8df638c22c75ddc9a43ecdde90c0c9939f5009e7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- befb617d0c645a5fa3177a1b830a8c9871da4168 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35a09c0534e89b2d43ec4101a5fb54576b577905 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9d6494f1075e5370a20e406c3edb102fca12854 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5047344a22ed824735d6ed1c91008767ea6638b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a6604a00a652e754cb8b6b0b9f194f839fc38d7c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 127e511ea2e22f3bd9a0279e747e9cfa9509986d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c8c50d8be2dc5ae74e53e44a87f580bf25956af9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 972a8b84bb4a3adec6322219c11370e48824404e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 152bab7eb64e249122fefab0d5531db1e065f539 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef592d384ad3e0ead5e516f3b2c0f31e6f1e7cab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cf37099ea8d1d8c7fbf9b6d12d7ec0249d3acb8b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4bf8e89e6784e121ddc32990d586e2276ec84596 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2f6a6e35d003c243968cdb41b72fbbe609e56841 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dd76b9e72b21d2502a51e3605e5e6ab640e5f0bd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 56823868efddd3bdbc0b624cdc79adc3a2e94a75 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 22757ed7b58862cccef64fdc09f93ea1ac72b1d2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfdc8e26d36833b3a7106c306fdbe6d38dec817e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0425bc64384fe9a6a22edb7831d6e8c1756e2c7e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aa5e366889103172a9829730de1ba26d3dcbc01b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 50a9920b1bd9e6e8cf452c774c499b0b9014ccef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d6332820eaad3a6d3b0abc93424469a8ef7083a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 43eb1edf93c381bf3f3809a809df33dae23b50d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e64957d8e52d7542310535bad1e77a9bbd7b4857 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a534eba97db3c2cfb2926368756fd633d25c056 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d4e56f627f94d93c49db40ae5944f880341f4203 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b377c07200392ac35a6ed668673451d3c9b1f5c7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 989671780551b7587d57e1d7cb5eb1002ade75b4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 14cef2bb3e0de02f306fa37c268d6c276326c002 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b9cb007076542e32f7b99bb18bc6ec424f3b407b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d3ce120c9acc7d9d4ce86aa1f07b027d1c45a9a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0b3ecf2dcace76b65765ddf1901504b0b4861b08 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f3050b578081b24e5cf244fa252f385ffca2bf86 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 11b1f6edc164e2084e3ff034d3b65306c461a0be ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c3d5159679d17c1270ad72941922d0f18bdd6415 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 985093bae160419782b3d3cb9151e2e58625fd52 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c04c60f12d3684ecf961509d1b8db895e6f9aac0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 53d26977f1aff8289f13c02ee672349d78eeb2f0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 564db4f20bd7189a50a12d612d56ed6391081e83 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657a57adbff49c553752254c106ce1d5b5690cf8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26029c29765043376370a2877b7e635c17f5e76d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbf957a36f5ed47c4387ee8069c56b16d1b4f558 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 924da9604d6474fd1be99dffdcc539eaaaa31626 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9840afda82fafcc3eaf52351c64e2cfdb8962397 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3fd37230e76a014cf5c45d55daf0be2caa6948b7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 345d6be7829c6dab359390ebc5e1a7ae0c6d48bb ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a9eeebeddaa20d10881ad505cc362a3a391e15b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 225999e9442c746333a8baa17a6dbf7341c135ca ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9513aa01fab73f53e4fe18644c7d5b530a66c6a1 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 048acc4596dc1c6d7ed3220807b827056cb01032 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bfdf98cadedfa6042117cd7a83952ca2f465d26f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 919164df96d9f956c8be712f33a9a037b097745b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9acc7806d6bdb306a929c460437d3d03e5e48dcd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a07cdbae1d485fd715a5b6eca767f211770fea4d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 95a83a7de5d3ce84206b9267962c32df4d071c21 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e063d101face690b8cf4132fa419c5ce3857ef44 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a8f8582274cd6a368a79e569e2995cee7d6ea9f9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- aed099a73025422f0550f5dd5c3e4651049494b2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7fda0ec787de5159534ebc8b81824920d9613575 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 17852bde65c12c80170d4c67b3136d8e958a92a9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c63cd9873bf733c068a5f183442ec82873fef1fc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9946e0ce07c8d93a43bd7b8900ddf5d913fe3b03 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5a45790a8699a384c3d218ac4ca8a53c109fd944 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a5cf1bc1d3e38ab32a20707d66b08f1bb0beae91 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5b01b589e7a19d6be5bd6465e600f84aa8015282 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 178dff753350014f6395f41bc21f1adddf73c8e0 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b372e26366348920eae32ee81a47b469b511a21f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 66beac619ba944afeca9d15c56ccc60d5276a799 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a0d828fcb1964a578ef3979297c59a41aedba932 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3980f11a9411d0b487b73279346cfae938845e7a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93e19791659c279f4f7e33a433771beca65bf9ea ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8a0eee3989abd3a5d6d47d0298bd056a954d379b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 579e2c07bbb39577fa32fed8cb42297c1c5516d8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2effd7a10798a1e8e53bb546a67b2ccdea882c50 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd5f111439e7a2e730b602a155aa533c68badbf8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0aa1ce356c7c3d53d6ee035b4c7bcf425e108cdc ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- f347c6da5e83b137c337f9ccb190090c27cfc953 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- abc2e538c6f2fe50f93e6c3fe927236bb41f94f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b38020ae17ed9f83af75ce176e96267dcce6ecbd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 93ad8da5a8c6ddcbe67abae2cc4a7aad8084e736 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 52654c0216dcbe3fa2d9afb1de12c65d18f6a7a4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b63b3bc493a4a44ba1d857c78e4496e40f1d7b8 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ef9395f5ffe75f4e43d80cd1fa7b34c8a4db66fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c5083752d5d02d6c46bc2f18ba53a28d119af5b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 24effa4861d6d1e8cffe848ae63fa2ed40be03f6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9aa93b5890acb152c5824a8f75c221cf1addfd1b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 3d203a0da0c709d301e973a9fe3569efd1fb2bd3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 57a561cda141a0fed3129f4f3488e3b91805e638 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4043468de4fc448b6fda670f33b7f935883793a7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- edf9fc528277a53ec37d1bd79fb4f8608cce11ae ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6e1be3032d521e3bf2f49fc87f82c8f978079ea6 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- bf2083922b7bccc31917bf9cdb74e3d4892c2600 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- eba67171bf6ea653dfb6a6ae288f3c1d10829870 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 277be842bf30848e7292a931169bd4c8ff726dee ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 79ec3a5191f9dfd398d98fe7372ad841f34876ed ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b919010b0459b2540fb609c5d1aad0b8dc0fab01 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 105fea3ef3be4b47cc3602423919329162dfcecf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- b5278c514068f469f2fca7638ef1e1b27556a37a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7f34a25eaa6de187797442bc6e0514289d77fed2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a935501a2f62d103cf9d69d775399dae2e7dfead ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 12b32450c210cec1fdd8b2c19d564776e8054aa3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 26719d252dd8e3a53c08da2ed3c3a8d62fbbc30a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 55f0245f3ee538ec49e84bcb28c33b135a07f0b9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d2c1bd80350f692c5c2298cb88859564ec0a061b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 48af0ac87dc3beef4d3e6c7982b158d50f7b2a6e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 039bfe373c990fc6db3808d255abaff91235e82f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dafe71a3e2d5cfb9b80805a26d5442ca5ad8332f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d5625170b248edc6a570c977fb1f8e7430ffd0b5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8f043f00d5161794ef538802dcc9ba75e375c058 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1a5885a4c5983242b1356b57eafeb59a9d5c0d0f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8c982c1f50bd7ae3bc4a1afc09e9ad11aecd434f ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 273400f95ae036c01d4b0fd7a7ca6ab160efd958 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 233e3ffe0ef35dbabe49340ba567499690dcc166 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7b675bf555e89e708f1b8f79bd90796dd395837b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e7252e217fe6d8f05dd50f6e125c33a1c6fff602 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- cbbb6b349e8d0557e7e55e2d05819d6bdaed3769 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ebee400cfa4a532018ee904c22c7e3e6619ca4de ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- e10706b6c167454a723636e0929061201a2f461b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80b60fafa94b794fa77fab85e1df66f52598f3ac ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4e509130b7dfc97eeb4a517d6c9c65a8d6204234 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7d49273897bd317323e0a3bbbc01b76e83370f0c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- c4d5e7c9dab813adf9bfd8198bb9bb00c9a9503b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 4a061029eddee38110e416e3c4f60d553dafc9e5 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 323259cc3d977235f4e7e8980219e5e96d66086e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 80d01f0ef89e287184ba6d07be010ee3f16a74d9 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- fd47d6b11833870ce23102a3373b7a50a1b45d00 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 58fa2c401856f93712ae6cc45d4dc3458ee4b4f4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- dc922f3678a1b01cac2b3f1ec74b831ffec52a71 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 2405cf54ac06140a0821f55b34c1d54f699e8e73 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 579d1b8174c9be915c0fa17a67fc38cc6de36ad7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 8501e908bb8c531dfa75cef33fcec519027f4e5b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- a7129dc00826cb344c0202f152f1be33ea9326fe ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 85c6252b54108750291021a74dc00895f79a7ccf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1accc498c40e684f870d38b7d128739a0ebf57cf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 27ceafbb3f74b4677d5bae6c7ea031de07c6cfad ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c60b88138b836307bdde0487c4ffb82121b1c5e ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 70094734d601e1220c95ac586fdffbda3a23e10b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 69a56c4e2addd1ec53bb40e8a18f52353d1fc28c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 5962862e9ba0a1c9a14306688973946f6f7ce75c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 03bfdb16cd7cc6e1c7c8d3b59552da7de3d82d1c ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 71cd409660bc5b8c211dc7c51afae481d822d593 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 35ddb45b41b3de2d4f783608ad8d8752f6557997 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 30472cf3132b8c03e528b23d1c7533de740e28ab ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1dc09f0ece61ef2bd629e8bfe532aa24f4f8e0c2 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ae54e18d7ca7bc8b8fbc667119fb60b25f0f3871 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 207bf7bf30651c3284408d87d7c499e43db6bc83 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9b975d9fcf5924800f9ea5d68d7d79f743ca9af7 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- d7e59d3ef86beb3b3b3e53a610af122b2220841b ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 0651f0964ba5a33257ebbda1e92c7a1649a4a058 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 062aafa396866d4dfe8f3fd2f32d46fa7c01b6dd ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- ea6af04977c197fd07ab812d394dcb61feebaf67 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 657e98094f0f669809bc0e47f3d6bd9a8124cf32 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7c35350e5bc4fe113330818ca6784ff368c5ffef ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 620dbee78ed8481d108327c4c332899df7cb8ef4 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 6383196b7bb0773c0083a2a3d49a95e5479715bf ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 9066712dca21ef35c534e068f2cc4fefdccf1ea3 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 933d23bf95a5bd1624fbcdf328d904e1fa173474 ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 1f66cfbbce58b4b552b041707a12d437cc5f400a ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 7156cece3c49544abb6bf7a0c218eb36646fad6d ---- -37fa6002c0b03203758cabd7a2335fd1f559f957 with predicate ----- 33ebe7acec14b25c5f84f35a664803fcab2f7781 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 833f5c7b95c92a3f77cf1c90492f8c5ab2adc138 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e658e67859c06ca082d46c1cad9a7f44b0279edc ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e2b6256e9edfb94f0c33bd97b9755679970d7b3e ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- d55288b879df71ca7a623b0e87d53f2e0e1d038a ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- b59962d2173c168a07fddd98b8414aae510ee5c0 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 6d2618f2fbe97015ce1cb1193d8d16100ba8b4fc ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8a801152c694671ad79a4fc2f5739f58abecb9a5 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- db7c881cd7935920e2173f8f774e2e57eb4017a6 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 251eeeec4053dde36c474c1749d00675ab7e3195 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 606796d98415c198208ffbdeb7e10cc6bd45b0aa ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 9796566ae0e69f7425c571b09b81e8c813009710 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f685e7e7250168bf3fca677f2665347b38a7c8c1 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f2d7e22f57fccde3b8d09e796720f90e10cb1960 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 5a9a6f8d38374103fa5aa601b4dd4814b01f0727 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f02721fc60967327cf625a36f5fd4f65ea2e7401 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f5d8a1089d853b2a7aab6878dff237f08d184fa8 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 4725d3aeb8fd43cb267b17134fcb383f0ee979ae ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 5762a6ffed20d8dc7fcf3b0ebace0d6194a7890d ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- bfb5cd440b1a9dae931740ba5e4cd0f02d0f5ff5 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- c9227118a5e58323a041cdd6f461fea605fa8e2d ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 3b03c197a1581576108028fe375eb4b695cb3bb9 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 95203fc7a90a1268a499120a7dbbba10600acfe9 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e852f3cd9b4affb14b43255518e7780675246194 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8f86a6af73e2c5f1417e27ebbcc8859922b34e36 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e20fe8b9b03208ef3ded0182ca45fb49617fd270 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a20310fb21168c4f7a58cbc60229b2e730538cdf ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 2845bbecdd2924831d87a9158a7c8ea8e9f90dbd ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ab3f86109142254fa4a5e29b5382c5b990bb24b5 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 0e1a9f2d23fbe366de141d5b4ed9d514bd093ef0 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e3dd84b6b16392c401da82256b50dedab1c782e5 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 80819f5d8c9419ec6c05cafa4fe6e8d2357dcf08 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 81c3f5b864d5d52bb0b272c66de66510fe5646ea ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 567609b1234a9b8806c5a05da6c866e480aa148d ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ef2d60e5f49b6fa87206c5cdeb412d05142db57e ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 98e5c06a0cc73ba3c0e8da2e87cd28768c11fc82 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 6cae852d3dec6bb56bf629ca50fbc2177d39e13c ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- b897e17e526fb9c8b57c603a1291f129ed368893 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ae9254a26aff973cab94448e6bf337c3aba78aec ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e078e4a18e5a921f899d7e2cf468a5c096f843a4 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 187618a2aa7d5191df7ff6bfc3f8f2c79922cb08 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- cc6fcfa4f7a87cb7aafbf9c04fe5d3899d49356c ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 47cccda8db8d8d12ce5a19459c3abbc34ef4ee56 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 346a2ca7be2134703a02647c37ca1e4188e92f48 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e8ff784c7324e3ec1ec77ac972007a9003aa1eaa ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 6d674893f4b24621bcb443a5cc06bf8b0603ca61 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 2d5177bd3dc00484e49c12644666a4530f1d47dc ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 7d9a7e63d06146d7fdb2508a58a824e1766fb164 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- cca398a147f0d0d15e84b7ab32f15941397925ae ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a6232db329f3a17752e98cfde6a8d8a0eed16c7d ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ea4a6158e73258af5cf12ed9820704546a7a2860 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e3b49170d592763b8f4c9e5acd82d5dab95d55b5 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f4bbdbabaaca83e055e91affc49024359b5cfe82 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 63d0f103c575e5da4efa8d0b2166b880180278b0 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 5c94e2b608895536d0cbb28aff7ae942ab478162 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 9426382ae54d9eb8a0a3e9d28011b3efae06e445 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 32d16ea71dd8394c8010f92baf8b18c4a24890ec ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 02963ce0a9eb32551a3549ccd688d8f480ab6726 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- c9c8c48aba627d80e17b2d3df82ca67ca59708db ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e9f6714d3edeb9f4eeefbba03066f7b04fe8a342 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 2fe80530d8f4c70d25f5cfe398240025e7cb9a6a ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8892b8399b26ae0aade9dd17cc8bfe41e03c69ed ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f9090fddaded97b77e3e47b58bf88b254066bd9b ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 9b20893a49cf26644926453ef043800e26f568df ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 220156bceced19f38058b357285cf5a304f70865 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- f16498ab51919b0178189839345bd6809325581f ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- e3d07194bc64e75ac160947a935cc55b3d57fac9 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 72c7ef62b5e7ebe7dcd2caf64674f2c517e083a2 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 02cb4e81341a9a16f79882fccacce3d70805f827 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 6117be984d247ddc406403eebb8221fd2498669d ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a6c15950afb8ef11a624a9266ae64cef417f8eff ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8ab45d22c5c66a9a2bb4ebb3c49baa011b4a321c ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- fb7d23c6c480a084d5490fe1d4d3f5ac435b3a37 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 8aced94d44c3467f109b348525dc1da236be4401 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 2759698a94a514a3f95ec025390fe83f00eb53cd ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- eb821b54eede052d32016e5dd8f1875995380f4d ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 0607d8e3c96ecb9ea41c21bcc206d7b36963d950 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- ddc5f628f54d4e747faece5c860317323ad8cd0a ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a3bcfa3cb2785f5e705c7c872c3bd17cfb39e6a9 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 53da761496ca2a63480e006310c4f8435ccb4a47 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- aabef802361db3013dde51d926f219ab29060bc2 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 0ec64179e5a5eb6bba932ec632820c00b5bf9309 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 69fb573a4a0280d5326f919cf23232d3b008ca14 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 956a36073bd8020f7caf12cd2559364ae10cf8d3 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 68a7f0ba48a654800f2e720a067e58322ff57c58 ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- a573df33ace74281834b165f2bacf8154fd6128f ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 303e89cffb01c26c8e946f515ed5cafe2569882e ---- -ac765d9dddc38765c2f91f3c95f181c32b9c2735 with predicate ----- 3dab9f6562ecb0408d9ece8dd63cc4461d280113 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 453995f70f93c0071c5f7534f58864414f01cfde ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ec1f9c9e9a6ce14ddc69b6be65188b3438f31f23 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1da744421619e134ed3ff2781b4d97fee78d9cd4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d884adc80c80300b4cc05321494713904ef1df2d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d2ff5822dbefa1c9c8177cbf9f0879c5cf4efc5c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 05d2687afcc78cd192714ee3d71fdf36a37d110f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ace1fed6321bb8dd6d38b2f58d7cf815fa16db7a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e0f2bb42b56f770c50a6ef087e9049fa6ac11fb5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6226720b0e6a5f7cb9223fc50363def487831315 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f2df1f56cccab13d5c92abbc6b18be725e7b4833 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f1e9df152219e85798d78284beeda88f6baa9ec7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 819d6aceeb4d31c153de58081b21ad4f8b559c0e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b0e84a3401c84507dc017d6e4f57a9dfdb31de53 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4186a2dbbd48fd67ff88075c63bbd3e6c1d8a2df ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 58d692e2a1d7e3894dbed68efbcf7166d6ec3fb7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b67bd4c730273a9b6cce49a8444fb54e654de540 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 52bb0046c0bf0e50598c513e43b76d593f2cbbff ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fc2201e660014c5d91fec8e3c3a3fa5a66dcf33b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 179a1dcc65366a70369917d87d00b558a6d0c04d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6da04adff0b96c5163b0c2530028b72be2fd26fd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 07eaa4ce2696a88ec0db6e91f191af1e48226aca ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 637eadce54ca8bbe536bcf7c570c025e28e47129 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1a4bfd979e5d4ea0d0457e552202eb2effc36cac ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 00c5497f190172765cc7a53ff9d8852a26b91676 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f41d42ee7e264ce2fc32cea555e5f666fa1b1fe9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9117cdbb48ffc458d809715c6ab6bc6b416ef621 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b372fdd54bab2ad6639756958978660b12095c3c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2dc5d68491eb3c73ae8478bf6edef80b18564a13 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4251bd59fb8e11e40c40548cba38180a9536118c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f2834177c0fdf6b1af659e460fd3348f468b8ab0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7cdfaceebe916c91acdf8de3f9506989bc70ad65 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 806450db9b2c4a829558557ac90bd7596a0654e0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c4cde8df886112ee32b0a09fcac90c28c85ded7f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a885d23bab51b0c00be2780055ff63b3f3c1a4c6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 555b0efc2c19aa8cf7c548b4097bd20a73f572ca ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5915114cdca6f09fa2355162a43596f5d20273be ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 451561c252323e74696dbe0be36601c95a75a8c3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3c0a65226f038c58fc6d6ed525f38fc00b3579b7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2e6d110fbfa1f2e6a96bc8329e936d0cf1192844 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 39229db70e71a6be275dafb3dd9468930e40ae48 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f9bbdc87a7263f479344fcf67c4b9fd6005bb6cd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 81279eeac5c525354cbe19b24a6f42219407c1f9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4e99d9ab2acfaf2ebb4b150736590d6a4e33f449 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 13ba1d87ab8fc45d2aed25662bf91053b0db5f9f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2454ae89983a4496a445ce347d7a41c0bb0ea7ae ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9c0c2fc4ee2d8a5d0a2de50ba882657989dedc51 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c68459a17ff59043d29c90020fffe651b2164e6a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 832b56394b079c9f6e4c777934447a9e224facfe ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9f51eeb2f9a1efe22e45f7a1f7b963100f2f8e6b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 43ab2afba68fd0e1b5d138ed99ffc788dc685e36 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 50af864298826feaf94772982bbc7b222b4b4242 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d9671e15703918048982c9ff4e2e0fef21ede320 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 75c161cbc017a7d176dd0d7b937db26b3ce637a1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 84968314ddcbaa0e4b685c71c6ea5524b3aefc80 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 52ab307935bd2bbda52f853f9fc6b49f01897727 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b01824b1aecf8aadae4501e22feb45c20fb26bce ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c5df44408218003eb49e3b8fc94329c5e8b46c7d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9ce1193c851e98293a237ad3d2d87725c501e89f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e648efdcc1ca904709a646c1dbc797454a307444 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 20ef1924b832a3788849793c0ee6b46dd00d4520 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 46c9a0df4403266a320059eaa66e7dce7b3d9ac4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 53ed0d43ab950d4deeefd238c7685dabef943800 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3410fdc42075bd788a78f4b2a68c5e2cc0930409 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bca0cb7f507d6a21a652307737a57057692d2f79 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 07c20b4231b12fee42d15f1c44c948ce474f5851 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 708b8dda8e7b87841a5f39c60b799c514e75a9c7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6745f4542cfb74bbf3b933dba7a59ef2f54a4380 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2da2b90e6930023ec5739ae0b714bbdb30874583 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9b426893ce331f71165c82b1a86252cd104ae3db ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4748e813980e1316aa364e0830a4dc082ff86eb0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a67bf61b5017e41740e997147dc88282b09c6f86 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- be53c1f33107d6891c47c784aeadd6e5ddf78e8c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4c39f9da792792d4e73fc3a5effde66576ae128c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 92a97480edcc0f0de787a752bf90feed0445dd39 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ccde80b7a3037a004a7807a6b79916ce2a1e9729 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a28d3d18f9237af5101eb22e506a9ddda6d44025 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 572ace094208c28ab1a8641aedb038456d13f70b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5593dc014a41c563ba524b9303e75da46ee96bd5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2b93f2a91e0791be3ffda1f753aa6c377bcab4d3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9a4b1d4d11eee3c5362a4152216376e634bd14cf ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2b7f5cb25e0e03e06ec506d31c001c172dd71ef6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9a119924bd314934158515a1a5f5877be63f6f91 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6eeae8b24135b4de05f6d725b009c287577f053d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0c4269a21b9edf8477f2fee139d5c1b260ebc4f8 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9ee861ae7a7b36a811aa4b5cc8172c5cbd6a945b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ac36642ce1cde75b222e20f585ddfd240f064da2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bdf2e667f969e5c22985dd232fe3f107fe26e750 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c76852d0bff115720af3f27acdb084c59361e5f6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 15b9129ec639112e94ea96b6a395ad9b149515d1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ead94f267065bb55303f79a0a6df477810b3c68d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3cb5ba18ab1a875ef6b62c65342de476be47871b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fa44e6b579917814740393efc0b990e0fbbbdaf3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ba8d148121b1dbba444849fe9549f36a7d17db28 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bcd57e349c08bd7f076f8d6d2f39b702015358c1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7a7eedde7f5d5082f7f207ef76acccd24a6113b1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ac1cec7066eaa12a8d1a61562bfc6ee77ff5f54d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dbc18b92362f60afc05d4ddadd6e73902ae27ec7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 386d1af07bf1f32fac5e97612441488894f2ffed ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 50c90666c4de8ac93accdf4040e3eb010a82a46a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0ca61d4c68dad68901f8a7364dd210ef27a8b4c6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 101fb1df36f29469ee8f4e0b9e7846d856b87daa ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6acec357c7609fdd2cb0f5fdb1d2756726c7fe98 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6bca9899b5edeed7f964e3124e382c3573183c68 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5f23379c496942ea6fe898a7a823b65530c126a7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9374a916588d9fe7169937ba262c86ad710cfa74 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f4fa1cb3c3e84cad8b74edb28531d2e27508be26 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 615fc1984b0cc09c8eeab51a1d1c4e05b583b4a7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e4582f805156095604fe07e71195cd9aa43d7a34 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 20f202d83bdf1f332a3cb8f010bcf8bf3c2807bd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5eb0f2c241718bc7462be44e5e8e1e36e35f9b15 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2792e534dd55fe03bca302f87a3ea638a7278bf1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ec3d91644561ef59ecdde59ddced38660923e916 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 79cfe05054de8a31758eb3de74532ed422c8da27 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9ee31065abea645cbc2cf3e54b691d5983a228b2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 86fa577e135713e56b287169d69d976cde27ac97 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1b89f39432cdb395f5fbb9553b56595d29e2b773 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0ef1f89abe5b2334705ee8f1a6da231b0b6c9a50 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e70f3218e910d2b3dcb8a5ab40c65b6bd7a8e9a8 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b65df78a10c3bcc40d18f3e926bb5a49821acc31 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8430529e1a9fb28d8586d24ee507a8195c370fa5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a58a60ac5f322eb4bfd38741469ff21b5a33d2d5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 00499d994fea6fb55a33c788f069782f917dbdd4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 291d2f85bb861ec23b80854b974f3b7a8ded2921 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b2ccae0d7fca3a99fc6a3f85f554d162a3fdc916 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6ffd4b0193acf86b6a6e179f8673ed38bad3191d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ff3d142387e1f38b0ed390333ea99e2e23d96e35 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b2a14e4b96a0ffc5353733b50266b477539ef899 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d1bd99c0a376dec63f0f050aeb0c40664260da16 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 78a46c432b31a0ea4c12c391c404cd128df4d709 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 461fd06e1f2d91dfbe47168b53815086212862e4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4b43ca7ff72d5f535134241e7c797ddc9c7a3573 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 39f85c4358b7346fee22169da9cad93901ea9eb9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- beb76aba0c835669629d95c905551f58cc927299 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 20c34a929a8b2871edd4fd44a38688e8977a4be6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ea33fe8b21d2b02f902b131aba0d14389f2f8715 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b7a5c05875a760c0bf83af6617c68061bda6cfc5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5ba2aef8f59009756567a53daaf918afa851c304 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8b5121414aaf2648b0e809e926d1016249c0222c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6ba8b8b91907bd087dfe201eb0d5dae2feb54881 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5117c9c8a4d3af19a9958677e45cda9269de1541 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- af9e37c5c8714136974124621d20c0436bb0735f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3c658c16f3437ed7e78f6072b6996cb423a8f504 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1496979cf7e9692ef869d2f99da6141756e08d25 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 58e2157ad3aa9d75ef4abb90eb2d1f01fba0ba2b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0725af77afc619cdfbe3cec727187e442cceaf97 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 685d6e651197d54e9a3e36f5adbadd4d21f4c7e5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5e062f4d043234312446ea9445f07bd9dc309ce3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1083748b828dfca6a72014434850da0f2a0579ab ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4c73e9cd66c77934f8a262b0c1bab9c2f15449ba ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 59e26435a8d2008073fc315bafe9f329d0ef689a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b197b2dbb527de9856e6e808339ab0ceaf0a512d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7184340f9d826a52b9e72fce8a30b21a7c73d5be ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9dfd6bcca5499e1cd472c092bc58426e9b72cccc ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a519942a295cc39af4eebb7ba74b184decae13fb ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6c486b2e699082763075a169c56a4b01f99fc4b9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 11ec2e08e1796b5914cd9c4830813482753ecfa0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c53eeaca19163b2b5484304a9ecce3ef92164d70 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3c770f8e98a0079497d3eb5bc31e7260cc70cc63 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 36f838e7977e62284d2928f65cacf29771f1952f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f9cec00938d9059882bb8eabdaf2f775943e00e5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 44a601a068f4f543f73fd9c49e264c931b1e1652 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4712c619ed6a2ce54b781fe404fedc269b77e5dd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5da34fddda2ea6de19ecf04efd75e323c4bb41e4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3942cdff6254d59100db2ff6a3c4460c1d6dbefe ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 25945899a0067a2dbeeae7a8362a6d68bbc5c6ba ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9c3bbc43d097656b54c808290ce0c656d127ce47 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3d9e7f1121d3bdbb08291c7164ad622350544a21 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b999cae064fb6ac11a61a39856e074341baeefde ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9b9776e88f7abb59cebac8733c04cccf6eee1c60 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dc518251eb64c3ef90502697a7e08abe3f8310b2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 753e908dcea03cf9962cf45d3965cf93b0d30d94 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dc1fcf372878240e0a1af20641d361f14aea7252 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4fe5cfa0e063a8d51a1eb6f014e2aaa994e5e7d4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1f2b19de3301e76ab3a6187a49c9c93ff78bafbd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bb0ac304431e8aed686a8a817aaccd74b1ba4f24 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0cd09bd306486028f5442c56ef2e947355a06282 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1047b41e2e925617474e2e7c9927314f71ce7365 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 146a6fe18da94e12aa46ec74582db640e3bbb3a9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9e14356d12226cb140b0e070bd079468b4ab599b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b00f3689aa19938c10576580fbfc9243d9f3866c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f62c9b9c0c9bda792c3fa531b18190e97eb53509 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 30d822a468dc909aac5c83d078a59bfc85fc27aa ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 13a26d4f9c22695033040dfcd8c76fd94187035b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ddc5496506f0484e4f1331261aa8782c7e606bf2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 87afd252bd11026b6ba3db8525f949cfb62c90fc ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5bb812243dd1815651281a54c8191fc8e2bc2d82 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5de63b40dbb8fef7f2f46e42732081ef6d0d8866 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 33fa178eeb7bf519f5fff118ebc8e27e76098363 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- aa921fee6014ef43bb2740240e9663e614e25662 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 81d8788d40867f4e5cf3016ef219473951a7f6ed ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2c23ca3cd9b9bbeaca1b79068dee1eae045be5b6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2f8e6f7ab1e6dbd95c268ba0fc827abc62009013 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0ec61d4f7208a2713adeafb947f65fdae0947067 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3c9f55dd8e6697ab2f9eaf384315abd4cbefad38 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7b50af0a20bcc7280940ce07593007d17c5acabd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a7a4388eeaa4b6b94192dce67257a34c4a6cbd26 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 29c20c147b489d873fb988157a37bcf96f96ab45 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- eb8cec3cab142ef4f2773b6fc9d224461a6bf85d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fa8fe4cad336a7bdd8fb315b1ce445669138830c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bb509603e8303cd8ada7cfa1aaa626085b9bb6d6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6662422ba52753f8b10bc053aba82bac3f2e1b9c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3d3a24b22d340c62fafc0e75a349c0ffe34d99d7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b1f32e231d391f8e6051957ad947d3659c196b2b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5613079f2494808f048b81815bf708debf7339d2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d7781e1056c672d5212f1aaf4b81ba6f18e8dd8b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a4fb3091a75005b047fbea72f812c53d27b15412 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2e68d907022c84392597e05afc22d9fe06bf0927 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a10aa36bc6a82bd50df6f3df7d6b7ce04a7070f1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 764cc6e344bd034360485018eb750a0e155ca1f6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3131d1a5295508f583ae22788a1065144bec3cee ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a2856af1d9289ee086b10768b53b65e0fd13a335 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 125b4875b5035dc4f6bad4351651a4236b82baeb ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5e52a00c81d032b47f1bc352369be3ff8eb87b27 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d97afa24ad1ae453002357e5023f3a116f76fb17 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 138aa2b8b413a19ebf9b2bbb39860089c4436001 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1adc79ac67e5eabaa8b8509150c59bc5bd3fd4e6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 590638f9a56440a2c41cc04f52272ede04c06a43 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5d3e2f7f57620398df896d9569c5d7c5365f823d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6fcbda4e363262a339d1cacbf7d2945ec3bd83f0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- babf5765da3e328cc1060cb9b37fbdeb6fd58350 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 038f183313f796dc0313c03d652a2bcc1698e78e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c231551328faa864848bde6ff8127f59c9566e90 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8df638c22c75ddc9a43ecdde90c0c9939f5009e7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- befb617d0c645a5fa3177a1b830a8c9871da4168 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 35a09c0534e89b2d43ec4101a5fb54576b577905 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b9d6494f1075e5370a20e406c3edb102fca12854 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5047344a22ed824735d6ed1c91008767ea6638b7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a6604a00a652e754cb8b6b0b9f194f839fc38d7c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 127e511ea2e22f3bd9a0279e747e9cfa9509986d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c8c50d8be2dc5ae74e53e44a87f580bf25956af9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 972a8b84bb4a3adec6322219c11370e48824404e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 152bab7eb64e249122fefab0d5531db1e065f539 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ef592d384ad3e0ead5e516f3b2c0f31e6f1e7cab ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- cf37099ea8d1d8c7fbf9b6d12d7ec0249d3acb8b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4bf8e89e6784e121ddc32990d586e2276ec84596 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2f6a6e35d003c243968cdb41b72fbbe609e56841 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dd76b9e72b21d2502a51e3605e5e6ab640e5f0bd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 56823868efddd3bdbc0b624cdc79adc3a2e94a75 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 22757ed7b58862cccef64fdc09f93ea1ac72b1d2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bfdc8e26d36833b3a7106c306fdbe6d38dec817e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0425bc64384fe9a6a22edb7831d6e8c1756e2c7e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- aa5e366889103172a9829730de1ba26d3dcbc01b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 50a9920b1bd9e6e8cf452c774c499b0b9014ccef ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7d6332820eaad3a6d3b0abc93424469a8ef7083a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 43eb1edf93c381bf3f3809a809df33dae23b50d9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e64957d8e52d7542310535bad1e77a9bbd7b4857 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4a534eba97db3c2cfb2926368756fd633d25c056 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d4e56f627f94d93c49db40ae5944f880341f4203 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b377c07200392ac35a6ed668673451d3c9b1f5c7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 989671780551b7587d57e1d7cb5eb1002ade75b4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 14cef2bb3e0de02f306fa37c268d6c276326c002 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b9cb007076542e32f7b99bb18bc6ec424f3b407b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d3ce120c9acc7d9d4ce86aa1f07b027d1c45a9a1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0b3ecf2dcace76b65765ddf1901504b0b4861b08 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f3050b578081b24e5cf244fa252f385ffca2bf86 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 11b1f6edc164e2084e3ff034d3b65306c461a0be ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c3d5159679d17c1270ad72941922d0f18bdd6415 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 985093bae160419782b3d3cb9151e2e58625fd52 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c04c60f12d3684ecf961509d1b8db895e6f9aac0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 53d26977f1aff8289f13c02ee672349d78eeb2f0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 564db4f20bd7189a50a12d612d56ed6391081e83 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 657a57adbff49c553752254c106ce1d5b5690cf8 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 26029c29765043376370a2877b7e635c17f5e76d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- cbf957a36f5ed47c4387ee8069c56b16d1b4f558 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 924da9604d6474fd1be99dffdcc539eaaaa31626 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9840afda82fafcc3eaf52351c64e2cfdb8962397 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3fd37230e76a014cf5c45d55daf0be2caa6948b7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 345d6be7829c6dab359390ebc5e1a7ae0c6d48bb ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a9eeebeddaa20d10881ad505cc362a3a391e15b2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 225999e9442c746333a8baa17a6dbf7341c135ca ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9513aa01fab73f53e4fe18644c7d5b530a66c6a1 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 048acc4596dc1c6d7ed3220807b827056cb01032 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bfdf98cadedfa6042117cd7a83952ca2f465d26f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 919164df96d9f956c8be712f33a9a037b097745b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9acc7806d6bdb306a929c460437d3d03e5e48dcd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a07cdbae1d485fd715a5b6eca767f211770fea4d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 95a83a7de5d3ce84206b9267962c32df4d071c21 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e063d101face690b8cf4132fa419c5ce3857ef44 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a8f8582274cd6a368a79e569e2995cee7d6ea9f9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- aed099a73025422f0550f5dd5c3e4651049494b2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7fda0ec787de5159534ebc8b81824920d9613575 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 17852bde65c12c80170d4c67b3136d8e958a92a9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c63cd9873bf733c068a5f183442ec82873fef1fc ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9946e0ce07c8d93a43bd7b8900ddf5d913fe3b03 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5a45790a8699a384c3d218ac4ca8a53c109fd944 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a5cf1bc1d3e38ab32a20707d66b08f1bb0beae91 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5b01b589e7a19d6be5bd6465e600f84aa8015282 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 178dff753350014f6395f41bc21f1adddf73c8e0 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b372e26366348920eae32ee81a47b469b511a21f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 66beac619ba944afeca9d15c56ccc60d5276a799 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a0d828fcb1964a578ef3979297c59a41aedba932 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3980f11a9411d0b487b73279346cfae938845e7a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 93e19791659c279f4f7e33a433771beca65bf9ea ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8a0eee3989abd3a5d6d47d0298bd056a954d379b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 579e2c07bbb39577fa32fed8cb42297c1c5516d8 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2effd7a10798a1e8e53bb546a67b2ccdea882c50 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fd5f111439e7a2e730b602a155aa533c68badbf8 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0aa1ce356c7c3d53d6ee035b4c7bcf425e108cdc ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- f347c6da5e83b137c337f9ccb190090c27cfc953 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- abc2e538c6f2fe50f93e6c3fe927236bb41f94f4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b38020ae17ed9f83af75ce176e96267dcce6ecbd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 93ad8da5a8c6ddcbe67abae2cc4a7aad8084e736 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 52654c0216dcbe3fa2d9afb1de12c65d18f6a7a4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9b63b3bc493a4a44ba1d857c78e4496e40f1d7b8 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ef9395f5ffe75f4e43d80cd1fa7b34c8a4db66fe ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c5083752d5d02d6c46bc2f18ba53a28d119af5b9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 24effa4861d6d1e8cffe848ae63fa2ed40be03f6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9aa93b5890acb152c5824a8f75c221cf1addfd1b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 3d203a0da0c709d301e973a9fe3569efd1fb2bd3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 57a561cda141a0fed3129f4f3488e3b91805e638 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4043468de4fc448b6fda670f33b7f935883793a7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- edf9fc528277a53ec37d1bd79fb4f8608cce11ae ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6e1be3032d521e3bf2f49fc87f82c8f978079ea6 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- bf2083922b7bccc31917bf9cdb74e3d4892c2600 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- eba67171bf6ea653dfb6a6ae288f3c1d10829870 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 277be842bf30848e7292a931169bd4c8ff726dee ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 79ec3a5191f9dfd398d98fe7372ad841f34876ed ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b919010b0459b2540fb609c5d1aad0b8dc0fab01 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 105fea3ef3be4b47cc3602423919329162dfcecf ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- b5278c514068f469f2fca7638ef1e1b27556a37a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7f34a25eaa6de187797442bc6e0514289d77fed2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a935501a2f62d103cf9d69d775399dae2e7dfead ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 12b32450c210cec1fdd8b2c19d564776e8054aa3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 26719d252dd8e3a53c08da2ed3c3a8d62fbbc30a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 55f0245f3ee538ec49e84bcb28c33b135a07f0b9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d2c1bd80350f692c5c2298cb88859564ec0a061b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 48af0ac87dc3beef4d3e6c7982b158d50f7b2a6e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 039bfe373c990fc6db3808d255abaff91235e82f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dafe71a3e2d5cfb9b80805a26d5442ca5ad8332f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d5625170b248edc6a570c977fb1f8e7430ffd0b5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8f043f00d5161794ef538802dcc9ba75e375c058 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1a5885a4c5983242b1356b57eafeb59a9d5c0d0f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8c982c1f50bd7ae3bc4a1afc09e9ad11aecd434f ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 273400f95ae036c01d4b0fd7a7ca6ab160efd958 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 233e3ffe0ef35dbabe49340ba567499690dcc166 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7b675bf555e89e708f1b8f79bd90796dd395837b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e7252e217fe6d8f05dd50f6e125c33a1c6fff602 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- cbbb6b349e8d0557e7e55e2d05819d6bdaed3769 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ebee400cfa4a532018ee904c22c7e3e6619ca4de ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- e10706b6c167454a723636e0929061201a2f461b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 80b60fafa94b794fa77fab85e1df66f52598f3ac ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4e509130b7dfc97eeb4a517d6c9c65a8d6204234 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7d49273897bd317323e0a3bbbc01b76e83370f0c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- c4d5e7c9dab813adf9bfd8198bb9bb00c9a9503b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4a061029eddee38110e416e3c4f60d553dafc9e5 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 323259cc3d977235f4e7e8980219e5e96d66086e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 80d01f0ef89e287184ba6d07be010ee3f16a74d9 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- fd47d6b11833870ce23102a3373b7a50a1b45d00 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 58fa2c401856f93712ae6cc45d4dc3458ee4b4f4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- dc922f3678a1b01cac2b3f1ec74b831ffec52a71 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 2405cf54ac06140a0821f55b34c1d54f699e8e73 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 579d1b8174c9be915c0fa17a67fc38cc6de36ad7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 8501e908bb8c531dfa75cef33fcec519027f4e5b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a7129dc00826cb344c0202f152f1be33ea9326fe ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 85c6252b54108750291021a74dc00895f79a7ccf ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1accc498c40e684f870d38b7d128739a0ebf57cf ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 27ceafbb3f74b4677d5bae6c7ea031de07c6cfad ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7c60b88138b836307bdde0487c4ffb82121b1c5e ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 70094734d601e1220c95ac586fdffbda3a23e10b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 69a56c4e2addd1ec53bb40e8a18f52353d1fc28c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 5962862e9ba0a1c9a14306688973946f6f7ce75c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 03bfdb16cd7cc6e1c7c8d3b59552da7de3d82d1c ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 71cd409660bc5b8c211dc7c51afae481d822d593 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 35ddb45b41b3de2d4f783608ad8d8752f6557997 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 30472cf3132b8c03e528b23d1c7533de740e28ab ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1dc09f0ece61ef2bd629e8bfe532aa24f4f8e0c2 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ae54e18d7ca7bc8b8fbc667119fb60b25f0f3871 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 207bf7bf30651c3284408d87d7c499e43db6bc83 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9b975d9fcf5924800f9ea5d68d7d79f743ca9af7 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- d7e59d3ef86beb3b3b3e53a610af122b2220841b ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 0651f0964ba5a33257ebbda1e92c7a1649a4a058 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 062aafa396866d4dfe8f3fd2f32d46fa7c01b6dd ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- ea6af04977c197fd07ab812d394dcb61feebaf67 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 657e98094f0f669809bc0e47f3d6bd9a8124cf32 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7c35350e5bc4fe113330818ca6784ff368c5ffef ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 620dbee78ed8481d108327c4c332899df7cb8ef4 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 6383196b7bb0773c0083a2a3d49a95e5479715bf ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 9066712dca21ef35c534e068f2cc4fefdccf1ea3 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 933d23bf95a5bd1624fbcdf328d904e1fa173474 ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 1f66cfbbce58b4b552b041707a12d437cc5f400a ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 7156cece3c49544abb6bf7a0c218eb36646fad6d ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 33ebe7acec14b25c5f84f35a664803fcab2f7781 ---- -254d04aa3180eb8b8daf7b7ff25f010cd69b4e7d with predicate ----- (, ) ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- a4d06724202afccd2b5c54f81bcf2bf26dea7fff ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- -a4d06724202afccd2b5c54f81bcf2bf26dea7fff with predicate ----- 4114d19e2c02f3ffca9feb07b40d9475f36604cc ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 37c5e30c879213e9ae83b21e9d11e55fc20c54b7 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 40fa69883bd176d43145dfe3a1b222a02ffbb568 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e9e1257eb4dddedb466e71a8dfe3c5209ea153be ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5a9a6f8d38374103fa5aa601b4dd4814b01f0727 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e01ae09037b856941517195513360f19b5baadfa ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 531ea8f97a99eee41a7678d94f14d0dba6587c66 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 2643676ceeeed5a8bb3882587765b5f0ee640a26 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 8d453c412493d6305cb1904d08b22e2ffac7b9c2 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3031ad0d119bd5010648cf8c038e2bbe21969ecb ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 0554721362df66bc6fcb0e0c35667471f17302cc ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- dbc6dec2df75f3219d74600d8f14dfc4bfa07dff ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 0196759d8235df6485d00e15ed793c4c8ec9f264 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d05a8c98370523bc9f9d6ec6343977d718cb9d1f ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d4106b19e708dcec1568484abbd74fe66000cd68 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9cc32b71b1bc7a9063bd6beffd772a027000ca8d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a6bdc3a0d1ed561b4897a923a22718b5320edf39 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 37dd8d32093343ea7f2795df0797f180f9025211 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 2f17c55b49f70d94f623d8bceec81fdd35f27cb4 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- b5426f216f27fce14d7ba6026be01cc53fd97de0 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5cae29983c6facc24f2bafe93736d652fc189b63 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e5fd9902fbabd3b2ea6fe1e8759e160a947bae80 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9df0c499758875f9efdfb86a7ede75bab47118a6 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d8a35e02b86bb17a388c01cc9f2f99ca1f77c564 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3642831530100f3aa8068abe0d8dcb98606f2fb2 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 2c8391d781911ce94de0f01bc38a0f0f34869dc2 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 6c57eb07c401aad335b9ac5e33a3ab3c96cd28b2 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 65e07bd33d63095131b0e7d0c798c8c140398617 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 78e5f526ada51e17d1c795db2c4bbc40b40c5ebf ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 6b759b7fe8a45ca584b37accb4b94a37634726f4 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 60a7de486651ef524ef8f39ed035a999b1af7e40 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 10c141ddad72cf3d1b4d453b3a3f404fc89618b5 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 70c379b63ffa0795fdbfbc128e5a2818397b7ef8 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 802992c4220de19a90767f3000a79a31b98d0df7 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- b4de3947675361a7770d29b8982c407b0ec6b2a0 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 1f060c70c1faa94ca1aa252ad941761a83d0f51d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5246cd6b9ac9b25fd749000e3e2ca3c83e517703 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 48a49256b8df9cfff4ac9525a27a5748e8461ea8 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- cec64e1d2bfbaff09a6239d360525525a6da4506 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 6fc18f69e9b74eafb4a58a6fcbd218adc0d80c36 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 663c90996ae3eeb9dd64ff9372078ca7e8ef973d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 44c6ca2d51dcc525a327acd97b0d9a9ff854d78e ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- af4759e50713c3f076f6fd9ee382390dc1e13eaa ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 13abae0ea3eb72a33b4387f1dbd40e009bdaf769 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- bebdaa6d64c4e92053e6d8b85d3fa1cf8060757c ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e723b4ae992aa1ca29d00c8cb37d646f7e3d8bda ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3c91985fe47eb9b0a26dbb2940ae126794de62bb ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 1a55397f625b4bdda93cf9acecbb2560f07e197f ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 40914bacba62d254ac1008caa0051d34bc7c9f60 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 2a743455989fe0732d024c33de73cd727c4bc33a ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 69b76f4a366b6675ddc2765a73a5db515e45ce84 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 329aff399afe21e6bc4ed06d35476b4e949d4c9c ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d97aca04f64f0fea0888c848c39d92c5aee15f38 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 1a576118fa7d86d43c74d6a653ccd76a2aad7f0a ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 810b66093f214e84881c4d650398ad69058069ae ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 20397e2e4908c6d69c69a371a949a82868bbf22d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9385ba713bd9324024213a134ea6f5123afcfdfe ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 60aa8cf582b37ebb742a34b794b1ecec14997119 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a802c139d4767c89dcad79d836d05f7004d39aac ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 023c5515d50df1e1e7819d63cfb05df5872bb931 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- aea7187f97d6002d50b6d326c4e6f1fb5d2b005e ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d8c6431e0a82b6b1bd4db339ee536f8bd4099c8f ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a639d89e68c58bb3e7c1ffa0f4c71f7f9d468e7d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- ea25e32a409fdf74c1b9268820108d1c16dcc553 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 8fda57e5c361758d34a7b11da8cdfb49df03e1c9 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 81931ad08b90c0fc4e15ae55a37890c80e6d85bc ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- cf70cb8c48de126cc913ef63a881963e8a25e798 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e65e2e59367839a18d97511bb91b9fca71597466 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 604a25f42d7e96d04f80d3b41171519710e4d1f0 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a113b99248c8da0b02b7a4031b8780fac330c68f ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 518c464a47852c7ead791ce5b6093ed552cf8106 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- f0f5f115b232fc948b4228f4c6bd78206763a995 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 958bcf854cbd679333a34bcbd362cda06fc49852 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 58fad3084283604d8c5be243e27a8ad6d4148655 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d2c7c742d0a15ea7e8aabf68d04ec7cc718255a1 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- cc30bf92da0ef0b1f57d2a9f083014872d33d9f5 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 04b8c41aa3ac8077813e64d4dcae5f30845f037e ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 83ef7e4b057bc3b1b06afcfea979c7275d39a80a ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 775127943335431f932e0e0d12de91e307978c71 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- fa754b9251adc4a981c52ddf186fe96e7daddf3e ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 457cc26cef42f2565aeeb4e9b9711d9e8ba8af03 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 89b9eb475dde60c91a2c4763de79dfa6c6268d9c ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9b0197070d48ac3cf405efda55bb5802953b35f2 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9ee0e891a04a536a1bbe14ddc36c07c5b5658e94 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- dbc201a977360215622ff162f9c7aec413322a57 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 49e7e7cfeab5ef837243ec96328d4319a5751988 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 4d046a2fd233a4d113f7856a45ae8912503a1b5d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 11ab75a6827961227ea5049b791db422a9179e1a ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 717fa808ec6600748e2a7d040a109b304ba54fe0 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5a3a15a7c307060f6f31e940d53d2fdaef5a220c ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3f91d0789fac756deccc0c892e24b9fac0430ff0 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9a3c2c958a1cc12031ad59ce0dba579c9407115a ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 96363db6390c601a8b312364e6b65a68191fcffb ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 285d3b5bc5aa5ac7be842e887c0d432f848d2703 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- c93f2091b62505efd1c3cb0721b360c9aad1c8a3 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5789d7eb7247daca4cbda1d72df274b49360d4aa ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 5d3cc6a3f1b938135e1a7c1b5cdc02d765da52be ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 3321a8ea4d008e34c9e5dcd56cf97aeae1970302 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- da97cf5b64c782a3e5d8c0b9da315378876f6607 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 6863e97b9d28029415b08769a2305f2e69bec91c ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 9cc3cb9d08e2a16e0545ab5ca2b9bd8f374bb0de ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a24c7c9129528698e15c84994d142f7d71396ee5 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 7630226b808d644b859d208fa2f0dbeab58cd9c1 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 40c6d66ea0b763d6c67e5a6102c6cc5c07bba924 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 91ac4dc3f45d37a4f669e5dbb4c788d2afaf3e03 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- a08c1dc7074610984ab9035f5481276a1b074af2 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 8b137891791fe96927ad78e64b0aad7bded08bdc ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- d5199748889e0379b08f1bd0d49b5deac296510d ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 35ba86802ce4b730ce3c7e80831d0208c67bd575 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 020fe6bd35e7c1409b167c3db3e4e96fdd96b9be ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 34572b37e0f53e0193e10c8c74ea3a8d13a16969 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 7d2a9f4a436ed7ab00a54bbab5204c8047feca0f ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 0571d0d9fb8c870e94faa835625f8b560c176424 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 7b1ee8384dbd54e6b5c6aef9af1326f071f7f82e ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 8f600cb3cd4749e0a098e07acb7d626ca7293004 ---- -13ba7731de4798b2c9bfa24ccc893e4d8e5b8e8d with predicate ----- 76adffec249ee11a33a6266947c14ba61f7d50a8 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- f606937a7a21237c866efafcad33675e6539c103 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- e14e3f143e7260de9581aee27e5a9b2645db72de ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 257a8a9441fca9a9bc384f673ba86ef5c3f1715d ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 18e3252a1f655f09093a4cffd5125342a8f94f3b ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 1873db442dc7511fc2c92fbaeb8d998d3e62723d ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 365fb14ced88a5571d3287ff1698582ceacd80d6 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 5ff864138cd1e680a78522c26b583639f8f5e313 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- ea81f14dafbfb24d70373c74b5f8dabf3f2225d9 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 583e6a25b0d891a2f531a81029f2bac0c237cbf9 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 07996a1a1e53ffdd2680d4bfbc2f4059687859a5 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 01eac1a959c1fa5894a86bf11e6b92f96762bdd8 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 6d1212e8c412b0b4802bc1080d38d54907db879d ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 57a4e09294230a36cc874a6272c71757c48139f2 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- cfb278d74ad01f3f1edf5e0ad113974a9555038d ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- fbe062bf6dacd3ad63dd827d898337fa542931ac ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 0974f8737a3c56a7c076f9d0b757c6cb106324fb ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 3323464f85b986cba23176271da92a478b33ab9c ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- c34343d0b714d2c4657972020afea034a167a682 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 4e6bece08aea01859a232e99a1e1ad8cc1eb7d36 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 7c36f3648e39ace752c67c71867693ce1eee52a3 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- a988e6985849e4f6a561b4a5468d525c25ce74fe ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 55e757928e493ce93056822d510482e4ffcaac2d ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 1090701721888474d34f8a4af28ee1bb1c3fdaaa ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 2054561da184955c4be4a92f0b4fa5c5c1c01350 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- f2c8d26d3b25b864ad48e6de018757266b59f708 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 15941ca090a2c3c987324fc911bbc6f89e941c47 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- f78d4a28f307a9d7943a06be9f919304c25ac2d9 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 3e2ba9c2028f21d11988558f3557905d21e93808 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 772b95631916223e472989b43f3a31f61e237f31 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- be06e87433685b5ea9cfcc131ab89c56cf8292f2 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 898d47d1711accdfded8ee470520fdb96fb12d46 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- e5c0002d069382db1768349bf0c5ff40aafbf140 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 654e54d200135e665e07e9f0097d913a77f169da ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- e825f8b69760e269218b1bf1991018baf3c16b04 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 13dd59ba5b3228820841682b59bad6c22476ff66 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 583cd8807259a69fc01874b798f657c1f9ab7828 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- def0f73989047c4ddf9b11da05ad2c9c8e387331 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 619c11787742ce00a0ee8f841cec075897873c79 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- edd9e23c766cfd51b3a6f6eee5aac0b791ef2fd0 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 53152a824f5186452504f0b68306d10ebebee416 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 8c3c271b0d6b5f56b86e3f177caf3e916b509b52 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 3776f7a766851058f6435b9f606b16766425d7ca ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 619662a9138fd78df02c52cae6dc89db1d70a0e5 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 09c3f39ceb545e1198ad7a3f470d4ec896ce1add ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- a8a448b7864e21db46184eab0f0a21d7725d074f ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 5d996892ac76199886ba3e2754ff9c9fac2456d6 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 6a252661c3bf4202a4d571f9c41d2afa48d9d75f ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 867129e2950458ab75523b920a5e227e3efa8bbc ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- 1b27292936c81637f6b9a7141dafaad1126f268e ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- b3cde0ee162b8f0cb67da981311c8f9c16050a62 ---- -29eb123beb1c55e5db4aa652d843adccbd09ae18 with predicate ----- ec28ad575ce1d7bb6a616ffc404f32bbb1af67b2 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 2845bbecdd2924831d87a9158a7c8ea8e9f90dbd ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- ae9254a26aff973cab94448e6bf337c3aba78aec ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e078e4a18e5a921f899d7e2cf468a5c096f843a4 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 187618a2aa7d5191df7ff6bfc3f8f2c79922cb08 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- cc6fcfa4f7a87cb7aafbf9c04fe5d3899d49356c ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 47cccda8db8d8d12ce5a19459c3abbc34ef4ee56 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 346a2ca7be2134703a02647c37ca1e4188e92f48 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e8ff784c7324e3ec1ec77ac972007a9003aa1eaa ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- a6232db329f3a17752e98cfde6a8d8a0eed16c7d ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e3b49170d592763b8f4c9e5acd82d5dab95d55b5 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- f4bbdbabaaca83e055e91affc49024359b5cfe82 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 757cbad1fa460b57f5269a9e67976c38a13cd7a9 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 32d16ea71dd8394c8010f92baf8b18c4a24890ec ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 02963ce0a9eb32551a3549ccd688d8f480ab6726 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- c9c8c48aba627d80e17b2d3df82ca67ca59708db ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e9f6714d3edeb9f4eeefbba03066f7b04fe8a342 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 2fe80530d8f4c70d25f5cfe398240025e7cb9a6a ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8892b8399b26ae0aade9dd17cc8bfe41e03c69ed ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- f9090fddaded97b77e3e47b58bf88b254066bd9b ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 9b20893a49cf26644926453ef043800e26f568df ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 220156bceced19f38058b357285cf5a304f70865 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- f16498ab51919b0178189839345bd6809325581f ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e3d07194bc64e75ac160947a935cc55b3d57fac9 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 72c7ef62b5e7ebe7dcd2caf64674f2c517e083a2 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 02cb4e81341a9a16f79882fccacce3d70805f827 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 6117be984d247ddc406403eebb8221fd2498669d ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- a6c15950afb8ef11a624a9266ae64cef417f8eff ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8ab45d22c5c66a9a2bb4ebb3c49baa011b4a321c ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- fb7d23c6c480a084d5490fe1d4d3f5ac435b3a37 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8aced94d44c3467f109b348525dc1da236be4401 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 2759698a94a514a3f95ec025390fe83f00eb53cd ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- eb821b54eede052d32016e5dd8f1875995380f4d ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 0607d8e3c96ecb9ea41c21bcc206d7b36963d950 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- ddc5f628f54d4e747faece5c860317323ad8cd0a ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- a3bcfa3cb2785f5e705c7c872c3bd17cfb39e6a9 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 0ec64179e5a5eb6bba932ec632820c00b5bf9309 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 2516f01f8f44e4e51781ce4ffc642a90318eac4f ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e2b3f8fa48c3fcc632ddb06d3ce7e60edfdb7774 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- ffd109b1fd9baf96cd84689069c08e4eb4aafbdd ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- bb1a03845dce61d36bab550c0c27ae213f0d49d0 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 471e9262fa57e94936227db864b4a9910449e7c3 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 897eb98fab4ad5da901acb2a02f1772b124f1367 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 884f96515df45350a2508fe66b61d40ae97a08fd ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 017178f05f5f3888ca4e4a8023b734f835d1e45d ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8657fb633aa019e7fa7da6c5d75a2a7a20f16d48 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 339a53b8c60292999788f807a2702267f987d844 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- cb6efbe9b6f2f1026584d7e41d9d48f715b421f9 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8d7bbde33a825f266e319d6427b10ab8dbacb068 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e1433def74488e198080455ac6200145994e0b4d ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- ded8b1f7c1bc6cfe941e8304bacfd7edfea9e65e ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- cc83859080755a9fb28d22041325affc8960c065 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- f850ba24c5a13054e0d2b1756113ff15f5147020 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8a9b0487329888d6ef011e4ce9bbea81af398d7b ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 0164e110c8627e46b593df435f5e10b48ff6d965 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 64a6591aa585a5a4022f6ef52cfb29f52d364155 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 4d84239e7ae4518001ff227cc00e0f61010b93bd ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 5619aa6924478084344bb0e5e9f085014512c29b ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 52727504bfd2a737f54c9d3829262bd243fff6e7 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e96b62e0ff7761af2396c4c9d7c97a1adb181fe5 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 5480e62826238ee672da7751ecc743ad90cfbdad ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 1551ce455aca2c2059a1adbffe7eb0a7d351af36 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 3412786d165cd33021de828311c023d563d12c67 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 86f877579dd4cf7453c44b7f436218c83a1e67ad ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 4617b052cbe046772fa1ff1bad1d8431b3f5abd6 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 8bd614f28843fb581afdf119a5882e53b0775f04 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- edf32c915f627a2d75fe7b23ba35e1af30b42afc ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 82df59b0d5221a40b1ea99416a05782de0bb1a75 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 6d413ee926d49e1a00414bd20364d88db1466790 ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- 0af48710062adb0db7b6c02917d69a156a8fad1f ---- -b14ffd45c69f707956df12a00f45d6aa9290b5fd with predicate ----- b4796b300b291228dcef8ff7fc7af7d0a7eae045 ---- From 3ce319f1296a5402079e9280500e96cc1d12fd04 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 14:06:59 +0100 Subject: [PATCH 0544/2375] Add types to submodule.update() --- git/objects/submodule/base.py | 58 +++++++++++++++++++++-------------- git/remote.py | 11 ++++--- git/repo/base.py | 9 ++++-- git/util.py | 6 ++-- 4 files changed, 52 insertions(+), 32 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 7cd4356e6..c975c0f5b 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -49,10 +49,10 @@ # typing ---------------------------------------------------------------------- -from typing import Callable, Dict, TYPE_CHECKING +from typing import Callable, Dict, Mapping, Sequence, TYPE_CHECKING from typing import Any, Iterator, Union -from git.types import Commit_ish, PathLike +from git.types import Commit_ish, PathLike, TBD if TYPE_CHECKING: from git.repo import Repo @@ -227,7 +227,7 @@ def _config_parser(cls, repo: 'Repo', return SubmoduleConfigParser(fp_module, read_only=read_only) - def _clear_cache(self): + def _clear_cache(self) -> None: # clear the possibly changed values for name in self._cache_attrs: try: @@ -247,7 +247,7 @@ def _sio_modules(cls, parent_commit: Commit_ish) -> BytesIO: def _config_parser_constrained(self, read_only: bool) -> SectionConstraint: """:return: Config Parser constrained to our submodule in read or write mode""" try: - pc = self.parent_commit + pc: Union['Commit_ish', None] = self.parent_commit except ValueError: pc = None # end handle empty parent repository @@ -256,10 +256,12 @@ def _config_parser_constrained(self, read_only: bool) -> SectionConstraint: return SectionConstraint(parser, sm_section(self.name)) @classmethod - def _module_abspath(cls, parent_repo, path, name): + def _module_abspath(cls, parent_repo: 'Repo', path: PathLike, name: str) -> PathLike: if cls._need_gitfile_submodules(parent_repo.git): return osp.join(parent_repo.git_dir, 'modules', name) - return osp.join(parent_repo.working_tree_dir, path) + if parent_repo.working_tree_dir: + return osp.join(parent_repo.working_tree_dir, path) + raise NotADirectoryError() # end @classmethod @@ -287,7 +289,7 @@ def _clone_repo(cls, repo, url, path, name, **kwargs): return clone @classmethod - def _to_relative_path(cls, parent_repo, path): + def _to_relative_path(cls, parent_repo: 'Repo', path: PathLike) -> PathLike: """:return: a path guaranteed to be relative to the given parent - repository :raise ValueError: if path is not contained in the parent repository's working tree""" path = to_native_path_linux(path) @@ -295,7 +297,7 @@ def _to_relative_path(cls, parent_repo, path): path = path[:-1] # END handle trailing slash - if osp.isabs(path): + if osp.isabs(path) and parent_repo.working_tree_dir: working_tree_linux = to_native_path_linux(parent_repo.working_tree_dir) if not path.startswith(working_tree_linux): raise ValueError("Submodule checkout path '%s' needs to be within the parents repository at '%s'" @@ -309,7 +311,7 @@ def _to_relative_path(cls, parent_repo, path): return path @classmethod - def _write_git_file_and_module_config(cls, working_tree_dir, module_abspath): + def _write_git_file_and_module_config(cls, working_tree_dir: PathLike, module_abspath: PathLike) -> None: """Writes a .git file containing a(preferably) relative path to the actual git module repository. It is an error if the module_abspath cannot be made into a relative path, relative to the working_tree_dir :note: will overwrite existing files ! @@ -336,7 +338,8 @@ def _write_git_file_and_module_config(cls, working_tree_dir, module_abspath): @classmethod def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = None, - branch=None, no_checkout: bool = False, depth=None, env=None, clone_multi_options=None + branch: Union[str, None] = None, no_checkout: bool = False, depth: Union[int, None] = None, + env: Mapping[str, str] = None, clone_multi_options: Union[Sequence[TBD], None] = None ) -> 'Submodule': """Add a new submodule to the given repository. This will alter the index as well as the .gitmodules file, but will not create a new commit. @@ -415,7 +418,8 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No # END check url # END verify urls match - mrepo = None + # mrepo: Union[Repo, None] = None + if url is None: if not has_module: raise ValueError("A URL was not given and a repository did not exist at %s" % path) @@ -428,7 +432,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No url = urls[0] else: # clone new repo - kwargs: Dict[str, Union[bool, int]] = {'n': no_checkout} + kwargs: Dict[str, Union[bool, int, Sequence[TBD]]] = {'n': no_checkout} if not branch_is_default: kwargs['b'] = br.name # END setup checkout-branch @@ -452,6 +456,8 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No # otherwise there is a '-' character in front of the submodule listing # a38efa84daef914e4de58d1905a500d8d14aaf45 mymodule (v0.9.0-1-ga38efa8) # -a38efa84daef914e4de58d1905a500d8d14aaf45 submodules/intermediate/one + writer: Union[GitConfigParser, SectionConstraint] + with sm.repo.config_writer() as writer: writer.set_value(sm_section(name), 'url', url) @@ -473,8 +479,10 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No return sm - def update(self, recursive=False, init=True, to_latest_revision=False, progress=None, dry_run=False, - force=False, keep_going=False, env=None, clone_multi_options=None): + def update(self, recursive: bool = False, init: bool = True, to_latest_revision: bool = False, + progress: Union['UpdateProgress', None] = None, dry_run: bool = False, + force: bool = False, keep_going: bool = False, env: Mapping[str, str] = None, + clone_multi_options: Union[Sequence[TBD], None] = None): """Update the repository of this submodule to point to the checkout we point at with the binsha of this instance. @@ -581,6 +589,7 @@ def update(self, recursive=False, init=True, to_latest_revision=False, progress= if not dry_run: # see whether we have a valid branch to checkout try: + assert isinstance(mrepo, Repo) # find a remote which has our branch - we try to be flexible remote_branch = find_first_remote_branch(mrepo.remotes, self.branch_name) local_branch = mkhead(mrepo, self.branch_path) @@ -641,7 +650,7 @@ def update(self, recursive=False, init=True, to_latest_revision=False, progress= may_reset = True if mrepo.head.commit.binsha != self.NULL_BIN_SHA: base_commit = mrepo.merge_base(mrepo.head.commit, hexsha) - if len(base_commit) == 0 or base_commit[0].hexsha == hexsha: + if len(base_commit) == 0 or (base_commit[0] is not None and base_commit[0].hexsha == hexsha): if force: msg = "Will force checkout or reset on local branch that is possibly in the future of" msg += "the commit it will be checked out to, effectively 'forgetting' new commits" @@ -916,7 +925,7 @@ def remove(self, module: bool = True, force: bool = False, import gc gc.collect() try: - rmtree(wtd) + rmtree(str(wtd)) except Exception as ex: if HIDE_WINDOWS_KNOWN_ERRORS: raise SkipTest("FIXME: fails with: PermissionError\n {}".format(ex)) from ex @@ -954,6 +963,8 @@ def remove(self, module: bool = True, force: bool = False, # now git config - need the config intact, otherwise we can't query # information anymore + writer: Union[GitConfigParser, SectionConstraint] + with self.repo.config_writer() as writer: writer.remove_section(sm_section(self.name)) @@ -1067,13 +1078,14 @@ def rename(self, new_name: str) -> 'Submodule': destination_module_abspath = self._module_abspath(self.repo, self.path, new_name) source_dir = mod.git_dir # Let's be sure the submodule name is not so obviously tied to a directory - if destination_module_abspath.startswith(mod.git_dir): + if str(destination_module_abspath).startswith(str(mod.git_dir)): tmp_dir = self._module_abspath(self.repo, self.path, str(uuid.uuid4())) os.renames(source_dir, tmp_dir) source_dir = tmp_dir # end handle self-containment os.renames(source_dir, destination_module_abspath) - self._write_git_file_and_module_config(mod.working_tree_dir, destination_module_abspath) + if mod.working_tree_dir: + self._write_git_file_and_module_config(mod.working_tree_dir, destination_module_abspath) # end move separate git repository return self @@ -1150,26 +1162,26 @@ def branch(self): return mkhead(self.module(), self._branch_path) @property - def branch_path(self): + def branch_path(self) -> PathLike: """ :return: full(relative) path as string to the branch we would checkout from the remote and track""" return self._branch_path @property - def branch_name(self): + def branch_name(self) -> str: """:return: the name of the branch, which is the shortest possible branch name""" # use an instance method, for this we create a temporary Head instance # which uses a repository that is available at least ( it makes no difference ) return git.Head(self.repo, self._branch_path).name @property - def url(self): + def url(self) -> str: """:return: The url to the repository which our module - repository refers to""" return self._url @property - def parent_commit(self): + def parent_commit(self) -> 'Commit_ish': """:return: Commit instance with the tree containing the .gitmodules file :note: will always point to the current head's commit if it was not set explicitly""" if self._parent_commit is None: @@ -1177,7 +1189,7 @@ def parent_commit(self): return self._parent_commit @property - def name(self): + def name(self) -> str: """:return: The name of this submodule. It is used to identify it within the .gitmodules file. :note: by default, the name is the path at which to find the submodule, but diff --git a/git/remote.py b/git/remote.py index 0ef54ea7e..739424ee8 100644 --- a/git/remote.py +++ b/git/remote.py @@ -42,6 +42,7 @@ if TYPE_CHECKING: from git.repo.base import Repo + from git.objects.submodule.base import UpdateProgress # from git.objects.commit import Commit # from git.objects import Blob, Tree, TagObject @@ -64,7 +65,9 @@ def is_flagKeyLiteral(inp: str) -> TypeGuard[flagKeyLiteral]: #{ Utilities -def add_progress(kwargs: Any, git: Git, progress: Union[Callable[..., Any], None]) -> Any: +def add_progress(kwargs: Any, git: Git, + progress: Union[RemoteProgress, 'UpdateProgress', Callable[..., RemoteProgress], None] + ) -> Any: """Add the --progress flag to the given kwargs dict if supported by the git command. If the actual progress in the given progress instance is not given, we do not request any progress @@ -794,7 +797,7 @@ def _assert_refspec(self) -> None: config.release() def fetch(self, refspec: Union[str, List[str], None] = None, - progress: Union[Callable[..., Any], None] = None, + progress: Union[RemoteProgress, None, 'UpdateProgress'] = None, verbose: bool = True, **kwargs: Any) -> IterableList[FetchInfo]: """Fetch the latest changes for this remote @@ -841,7 +844,7 @@ def fetch(self, refspec: Union[str, List[str], None] = None, return res def pull(self, refspec: Union[str, List[str], None] = None, - progress: Union[Callable[..., Any], None] = None, + progress: Union[RemoteProgress, 'UpdateProgress', None] = None, **kwargs: Any) -> IterableList[FetchInfo]: """Pull changes from the given branch, being the same as a fetch followed by a merge of branch with your local branch. @@ -862,7 +865,7 @@ def pull(self, refspec: Union[str, List[str], None] = None, return res def push(self, refspec: Union[str, List[str], None] = None, - progress: Union[Callable[..., Any], None] = None, + progress: Union[RemoteProgress, 'UpdateProgress', Callable[..., RemoteProgress], None] = None, **kwargs: Any) -> IterableList[PushInfo]: """Push changes from source branch in refspec to target branch in refspec. diff --git a/git/repo/base.py b/git/repo/base.py index e1b1fc765..ea86139b7 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -48,6 +48,8 @@ from git.util import IterableList from git.refs.symbolic import SymbolicReference from git.objects import Tree + from git.objects.submodule.base import UpdateProgress + from git.remote import RemoteProgress # ----------------------------------------------------------- @@ -575,7 +577,7 @@ def iter_commits(self, rev: Optional[TBD] = None, paths: Union[PathLike, Sequenc return Commit.iter_items(self, rev, paths, **kwargs) def merge_base(self, *rev: TBD, **kwargs: Any - ) -> List[Union['SymbolicReference', Commit_ish, None]]: + ) -> List[Union[Commit_ish, None]]: """Find the closest common ancestor for the given revision (e.g. Commits, Tags, References, etc) :param rev: At least two revs to find the common ancestor for. @@ -588,7 +590,7 @@ def merge_base(self, *rev: TBD, **kwargs: Any raise ValueError("Please specify at least two revs, got only %i" % len(rev)) # end handle input - res = [] # type: List[Union['SymbolicReference', Commit_ish, None]] + res = [] # type: List[Union[Commit_ish, None]] try: lines = self.git.merge_base(*rev, **kwargs).splitlines() # List[str] except GitCommandError as err: @@ -1014,7 +1016,8 @@ def init(cls, path: PathLike = None, mkdir: bool = True, odbt: Type[GitCmdObject @classmethod def _clone(cls, git: 'Git', url: PathLike, path: PathLike, odb_default_type: Type[GitCmdObjectDB], - progress: Optional[Callable], multi_options: Optional[List[str]] = None, **kwargs: Any + progress: Union['RemoteProgress', 'UpdateProgress', Callable[..., 'RemoteProgress'], None], + multi_options: Optional[List[str]] = None, **kwargs: Any ) -> 'Repo': odbt = kwargs.pop('odbt', odb_default_type) diff --git a/git/util.py b/git/util.py index abc82bd35..b13af358f 100644 --- a/git/util.py +++ b/git/util.py @@ -82,13 +82,15 @@ #{ Utility Methods +T = TypeVar('T') -def unbare_repo(func: Callable) -> Callable: + +def unbare_repo(func: Callable[..., T]) -> Callable[..., T]: """Methods with this decorator raise InvalidGitRepositoryError if they encounter a bare repository""" @wraps(func) - def wrapper(self: 'Remote', *args: Any, **kwargs: Any) -> Callable: + def wrapper(self: 'Remote', *args: Any, **kwargs: Any) -> T: if self.repo.bare: raise InvalidGitRepositoryError("Method '%s' cannot operate on bare repositories" % func.__name__) # END bare method From 647101833ae276f3b923583e202faa3f7d78e218 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 14:25:23 +0100 Subject: [PATCH 0545/2375] Improve types of @unbare_repo and @git_working_dir decorators --- git/index/base.py | 6 +++--- git/index/util.py | 6 +++--- git/types.py | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/git/index/base.py b/git/index/base.py index f4ffba7b9..8346d24a4 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -410,7 +410,7 @@ def raise_exc(e): # whose name contains wildcard characters. if abs_path not in resolved_paths: for f in self._iter_expand_paths(glob.glob(abs_path)): - yield f.replace(rs, '') + yield str(f).replace(rs, '') continue # END glob handling try: @@ -635,7 +635,7 @@ def _store_path(self, filepath: PathLike, fprogress: Callable) -> BaseIndexEntry @git_working_dir def _entries_for_paths(self, paths: List[str], path_rewriter: Callable, fprogress: Callable, entries: List[BaseIndexEntry]) -> List[BaseIndexEntry]: - entries_added = [] # type: List[BaseIndexEntry] + entries_added: List[BaseIndexEntry] = [] if path_rewriter: for path in paths: if osp.isabs(path): @@ -769,7 +769,7 @@ def add(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, Submodule]], # automatically # paths can be git-added, for everything else we use git-update-index paths, entries = self._preprocess_add_items(items) - entries_added = [] + entries_added: List[BaseIndexEntry] = [] # This code needs a working tree, therefore we try not to run it unless required. # That way, we are OK on a bare repository as well. # If there are no paths, the rewriter has nothing to do either diff --git a/git/index/util.py b/git/index/util.py index 471e9262f..e0daef0cf 100644 --- a/git/index/util.py +++ b/git/index/util.py @@ -13,7 +13,7 @@ from typing import (Any, Callable) -from git.types import PathLike +from git.types import PathLike, _T # --------------------------------------------------------------------------------- @@ -88,12 +88,12 @@ def check_default_index(self, *args: Any, **kwargs: Any) -> Any: return check_default_index -def git_working_dir(func: Callable[..., Any]) -> Callable[..., None]: +def git_working_dir(func: Callable[..., _T]) -> Callable[..., _T]: """Decorator which changes the current working dir to the one of the git repository in order to assure relative paths are handled correctly""" @wraps(func) - def set_git_working_dir(self, *args: Any, **kwargs: Any) -> None: + def set_git_working_dir(self, *args: Any, **kwargs: Any) -> _T: cur_wd = os.getcwd() os.chdir(self.repo.working_tree_dir) try: diff --git a/git/types.py b/git/types.py index f20221b9f..7b87dd18c 100644 --- a/git/types.py +++ b/git/types.py @@ -30,6 +30,7 @@ # from git.refs import SymbolicReference TBD = Any +_T = TypeVar('_T') Tree_ish = Union['Commit', 'Tree'] Commit_ish = Union['Commit', 'TagObject', 'Blob', 'Tree'] From fb09bfacd449ac7b5d2f20b9dbe123d61d004cde Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 14:39:28 +0100 Subject: [PATCH 0546/2375] Improve types of diff.py --- git/diff.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/git/diff.py b/git/diff.py index 346a2ca7b..21b66640b 100644 --- a/git/diff.py +++ b/git/diff.py @@ -16,7 +16,7 @@ # typing ------------------------------------------------------------------ from typing import Any, Iterator, List, Match, Optional, Tuple, Type, Union, TYPE_CHECKING -from git.types import PathLike, TBD, Literal +from git.types import PathLike, TBD, Literal, TypeGuard if TYPE_CHECKING: from .objects.tree import Tree @@ -200,7 +200,8 @@ def iter_change_type(self, change_type: Lit_change_type) -> Iterator['Diff']: if change_type not in self.change_type: raise ValueError("Invalid change type: %s" % change_type) - for diff in self: # type: 'Diff' + # diff: 'Diff' + for diff in self: if diff.change_type == change_type: yield diff elif change_type == "A" and diff.new_file: @@ -281,7 +282,8 @@ def __init__(self, repo: 'Repo', a_mode: Union[bytes, str, None], b_mode: Union[bytes, str, None], new_file: bool, deleted_file: bool, copied_file: bool, raw_rename_from: Optional[bytes], raw_rename_to: Optional[bytes], - diff: Union[str, bytes, None], change_type: Optional[str], score: Optional[int]) -> None: + diff: Union[str, bytes, None], change_type: Union[Lit_change_type, None], + score: Optional[int]) -> None: assert a_rawpath is None or isinstance(a_rawpath, bytes) assert b_rawpath is None or isinstance(b_rawpath, bytes) @@ -498,12 +500,18 @@ def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> Non for line in lines.split(':')[1:]: meta, _, path = line.partition('\x00') path = path.rstrip('\x00') - a_blob_id, b_blob_id = None, None # Type: Optional[str] + a_blob_id: Union[str, None] + b_blob_id: Union[str, None] old_mode, new_mode, a_blob_id, b_blob_id, _change_type = meta.split(None, 4) # Change type can be R100 # R: status letter # 100: score (in case of copy and rename) - change_type = _change_type[0] + + def is_change_type(inp: str) -> TypeGuard[Lit_change_type]: + return inp in Lit_change_type.__args__ # type: ignore + + assert is_change_type(_change_type[0]) + change_type: Lit_change_type = _change_type[0] score_str = ''.join(_change_type[1:]) score = int(score_str) if score_str.isdigit() else None path = path.strip() @@ -518,7 +526,7 @@ def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> Non # NOTE: We cannot conclude from the existence of a blob to change type # as diffs with the working do not have blobs yet if change_type == 'D': - b_blob_id = None # Optional[str] + b_blob_id = None deleted_file = True elif change_type == 'A': a_blob_id = None From 2a6a2e2e44b6220f4cbc7d1672e0cfb1c13926c2 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 14:45:30 +0100 Subject: [PATCH 0547/2375] Improve types of diff.py --- git/diff.py | 10 ++++++---- git/objects/submodule/base.py | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/git/diff.py b/git/diff.py index 21b66640b..f07bd93a0 100644 --- a/git/diff.py +++ b/git/diff.py @@ -26,8 +26,13 @@ Lit_change_type = Literal['A', 'D', 'M', 'R', 'T'] + +def is_change_type(inp: str) -> TypeGuard[Lit_change_type]: + return inp in Lit_change_type.__args__ # type: ignore + # ------------------------------------------------------------------------ + __all__ = ('Diffable', 'DiffIndex', 'Diff', 'NULL_TREE') # Special object to compare against the empty tree in diffs @@ -503,13 +508,10 @@ def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> Non a_blob_id: Union[str, None] b_blob_id: Union[str, None] old_mode, new_mode, a_blob_id, b_blob_id, _change_type = meta.split(None, 4) - # Change type can be R100 + # _Change_type can be R100 # R: status letter # 100: score (in case of copy and rename) - def is_change_type(inp: str) -> TypeGuard[Lit_change_type]: - return inp in Lit_change_type.__args__ # type: ignore - assert is_change_type(_change_type[0]) change_type: Lit_change_type = _change_type[0] score_str = ''.join(_change_type[1:]) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index c975c0f5b..401ef54ed 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -47,6 +47,7 @@ find_first_remote_branch ) +from git.repo import Repo # typing ---------------------------------------------------------------------- from typing import Callable, Dict, Mapping, Sequence, TYPE_CHECKING @@ -55,7 +56,6 @@ from git.types import Commit_ish, PathLike, TBD if TYPE_CHECKING: - from git.repo import Repo from git.index import IndexFile From 35783557c418921641be47f95e12c80d50b20d22 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 14:55:44 +0100 Subject: [PATCH 0548/2375] Add cast(Repo, mrepo) in try block --- git/objects/submodule/base.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 401ef54ed..2ace1f031 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -47,15 +47,15 @@ find_first_remote_branch ) -from git.repo import Repo # typing ---------------------------------------------------------------------- -from typing import Callable, Dict, Mapping, Sequence, TYPE_CHECKING +from typing import Callable, Dict, Mapping, Sequence, TYPE_CHECKING, cast from typing import Any, Iterator, Union from git.types import Commit_ish, PathLike, TBD if TYPE_CHECKING: + from git.repo import Repo from git.index import IndexFile @@ -589,7 +589,8 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: if not dry_run: # see whether we have a valid branch to checkout try: - assert isinstance(mrepo, Repo) + # assert isinstance(mrepo, Repo) # cant do this cos of circular import + mrepo = cast('Repo', mrepo) # Try TypeGuard wirh hasattr? # find a remote which has our branch - we try to be flexible remote_branch = find_first_remote_branch(mrepo.remotes, self.branch_name) local_branch = mkhead(mrepo, self.branch_path) From 1bcccd55e78d1412903c2af59ccc895cca85e153 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 15:01:15 +0100 Subject: [PATCH 0549/2375] Fix Literal Typeguards --- git/diff.py | 2 +- git/types.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/git/diff.py b/git/diff.py index f07bd93a0..611194a8c 100644 --- a/git/diff.py +++ b/git/diff.py @@ -28,7 +28,7 @@ def is_change_type(inp: str) -> TypeGuard[Lit_change_type]: - return inp in Lit_change_type.__args__ # type: ignore + return inp in ('A', 'D', 'M', 'R', 'T') # ------------------------------------------------------------------------ diff --git a/git/types.py b/git/types.py index 7b87dd18c..b2a555b06 100644 --- a/git/types.py +++ b/git/types.py @@ -38,6 +38,10 @@ Lit_config_levels = Literal['system', 'global', 'user', 'repository'] +def is_config_level(inp: str) -> TypeGuard[Lit_config_levels]: + return inp in ('system', 'global', 'user', 'repository') + + class ConfigLevels_NT(NamedTuple): """NamedTuple of allowed CONFIG_LEVELS""" # works for pylance, but not mypy @@ -51,10 +55,6 @@ class ConfigLevels_NT(NamedTuple): # Typing this as specific literals breaks for mypy -def is_config_level(inp: str) -> TypeGuard[Lit_config_levels]: - return inp in Lit_config_levels.__args__ # type: ignore # mypy lies about __args__ - - def assert_never(inp: NoReturn, exc: Union[Exception, None] = None) -> NoReturn: if exc is None: assert False, f"An unhandled Literal ({inp}) in an if else chain was found" From 278a3713a0a560cbc5b1515c86f8852cd3119e6b Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 15:09:36 +0100 Subject: [PATCH 0550/2375] Fix for mrepo --- git/objects/submodule/base.py | 9 +++++---- git/types.py | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 2ace1f031..53e89dbad 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -418,7 +418,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No # END check url # END verify urls match - # mrepo: Union[Repo, None] = None + mrepo: Union[Repo, None] = None if url is None: if not has_module: @@ -474,7 +474,8 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No sm._branch_path = br.path # we deliberately assume that our head matches our index ! - sm.binsha = mrepo.head.commit.binsha + if mrepo is not None: + sm.binsha = mrepo.head.commit.binsha index.add([sm], write=True) return sm @@ -589,8 +590,8 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: if not dry_run: # see whether we have a valid branch to checkout try: - # assert isinstance(mrepo, Repo) # cant do this cos of circular import - mrepo = cast('Repo', mrepo) # Try TypeGuard wirh hasattr? + # assert isinstance(mrepo, Repo) # cant do this cos of circular import + mrepo = cast('Repo', mrepo) # Try TypeGuard wirh hasattr, or has_remotes&_head protocol? # find a remote which has our branch - we try to be flexible remote_branch = find_first_remote_branch(mrepo.remotes, self.branch_name) local_branch = mkhead(mrepo, self.branch_path) diff --git a/git/types.py b/git/types.py index b2a555b06..36ebbb31c 100644 --- a/git/types.py +++ b/git/types.py @@ -57,7 +57,7 @@ class ConfigLevels_NT(NamedTuple): def assert_never(inp: NoReturn, exc: Union[Exception, None] = None) -> NoReturn: if exc is None: - assert False, f"An unhandled Literal ({inp}) in an if else chain was found" + assert False, f"An unhandled Literal ({inp}) in an if/else chain was found" else: raise exc From deafa6a0ab837dffb8f78177f7c22d21ac65bf62 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 15:40:06 +0100 Subject: [PATCH 0551/2375] Fix for mrepo2 --- git/diff.py | 2 +- git/objects/submodule/base.py | 12 ++++++------ git/repo/base.py | 2 +- git/types.py | 10 +++++++++- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/git/diff.py b/git/diff.py index 611194a8c..c5e231b20 100644 --- a/git/diff.py +++ b/git/diff.py @@ -512,7 +512,7 @@ def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> Non # R: status letter # 100: score (in case of copy and rename) - assert is_change_type(_change_type[0]) + assert is_change_type(_change_type[0]), "Unexpected _change_type recieved in Diff" change_type: Lit_change_type = _change_type[0] score_str = ''.join(_change_type[1:]) score = int(score_str) if score_str.isdigit() else None diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 53e89dbad..3df2b41a5 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -474,8 +474,8 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No sm._branch_path = br.path # we deliberately assume that our head matches our index ! - if mrepo is not None: - sm.binsha = mrepo.head.commit.binsha + mrepo = cast('Repo', mrepo) + sm.binsha = mrepo.head.commit.binsha index.add([sm], write=True) return sm @@ -652,7 +652,7 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: may_reset = True if mrepo.head.commit.binsha != self.NULL_BIN_SHA: base_commit = mrepo.merge_base(mrepo.head.commit, hexsha) - if len(base_commit) == 0 or (base_commit[0] is not None and base_commit[0].hexsha == hexsha): + if len(base_commit) == 0 or base_commit[0].hexsha == hexsha: # type: ignore if force: msg = "Will force checkout or reset on local branch that is possibly in the future of" msg += "the commit it will be checked out to, effectively 'forgetting' new commits" @@ -927,7 +927,7 @@ def remove(self, module: bool = True, force: bool = False, import gc gc.collect() try: - rmtree(str(wtd)) + rmtree(wtd) # type: ignore ## str()? except Exception as ex: if HIDE_WINDOWS_KNOWN_ERRORS: raise SkipTest("FIXME: fails with: PermissionError\n {}".format(ex)) from ex @@ -1015,7 +1015,7 @@ def set_parent_commit(self, commit: Union[Commit_ish, None], check: bool = True) # If check is False, we might see a parent-commit that doesn't even contain the submodule anymore. # in that case, mark our sha as being NULL try: - self.binsha = pctree[str(self.path)].binsha + self.binsha = pctree[self.path].binsha # type: ignore # str()? except KeyError: self.binsha = self.NULL_BIN_SHA # end @@ -1080,7 +1080,7 @@ def rename(self, new_name: str) -> 'Submodule': destination_module_abspath = self._module_abspath(self.repo, self.path, new_name) source_dir = mod.git_dir # Let's be sure the submodule name is not so obviously tied to a directory - if str(destination_module_abspath).startswith(str(mod.git_dir)): + if destination_module_abspath.startswith(str(mod.git_dir)): # type: ignore # str()? tmp_dir = self._module_abspath(self.repo, self.path, str(uuid.uuid4())) os.renames(source_dir, tmp_dir) source_dir = tmp_dir diff --git a/git/repo/base.py b/git/repo/base.py index ea86139b7..a6f91aeeb 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -1016,7 +1016,7 @@ def init(cls, path: PathLike = None, mkdir: bool = True, odbt: Type[GitCmdObject @classmethod def _clone(cls, git: 'Git', url: PathLike, path: PathLike, odb_default_type: Type[GitCmdObjectDB], - progress: Union['RemoteProgress', 'UpdateProgress', Callable[..., 'RemoteProgress'], None], + progress: Union['RemoteProgress', 'UpdateProgress', Callable[..., 'RemoteProgress'], None] = None, multi_options: Optional[List[str]] = None, **kwargs: Any ) -> 'Repo': odbt = kwargs.pop('odbt', odb_default_type) diff --git a/git/types.py b/git/types.py index 36ebbb31c..0e0850759 100644 --- a/git/types.py +++ b/git/types.py @@ -5,7 +5,7 @@ import os import sys from typing import (Callable, Dict, NoReturn, Tuple, Union, Any, Iterator, # noqa: F401 - NamedTuple, TYPE_CHECKING, TypeVar) # noqa: F401 + NamedTuple, TYPE_CHECKING, TypeVar, runtime_checkable) # noqa: F401 if sys.version_info[:2] >= (3, 8): @@ -78,3 +78,11 @@ class Total_TD(TypedDict): class HSH_TD(TypedDict): total: Total_TD files: Dict[PathLike, Files_TD] + + +@runtime_checkable +class RepoLike(Protocol): + """Protocol class to allow structural type-checking of Repo + e.g. when cannot import due to circular imports""" + + def remotes(self): ... # NOQA: E704 From e6f340cf8617ceb99f6da5f3db902a69308cdec7 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 15:42:02 +0100 Subject: [PATCH 0552/2375] Rmv runtime_checkable < py3.8 --- git/objects/submodule/base.py | 2 +- git/types.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 3df2b41a5..514fcfea0 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -927,7 +927,7 @@ def remove(self, module: bool = True, force: bool = False, import gc gc.collect() try: - rmtree(wtd) # type: ignore ## str()? + rmtree(str(wtd)) except Exception as ex: if HIDE_WINDOWS_KNOWN_ERRORS: raise SkipTest("FIXME: fails with: PermissionError\n {}".format(ex)) from ex diff --git a/git/types.py b/git/types.py index 0e0850759..0852905b9 100644 --- a/git/types.py +++ b/git/types.py @@ -80,7 +80,7 @@ class HSH_TD(TypedDict): files: Dict[PathLike, Files_TD] -@runtime_checkable +# @runtime_checkable class RepoLike(Protocol): """Protocol class to allow structural type-checking of Repo e.g. when cannot import due to circular imports""" From ed58e2f840749bb4dabd384b812ecb259dc60304 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 15:43:56 +0100 Subject: [PATCH 0553/2375] Rmv runtime_checkable < py3.8 pt2 --- git/objects/submodule/base.py | 2 +- git/types.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 514fcfea0..ca408338b 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -142,7 +142,7 @@ def _set_cache_(self, attr: str) -> None: reader: SectionConstraint = self.config_reader() # default submodule values try: - self.path = reader.get('path') + self.path: PathLike = reader.get('path') except cp.NoSectionError as e: if self.repo.working_tree_dir is not None: raise ValueError("This submodule instance does not exist anymore in '%s' file" diff --git a/git/types.py b/git/types.py index 0852905b9..00f1ae579 100644 --- a/git/types.py +++ b/git/types.py @@ -5,7 +5,7 @@ import os import sys from typing import (Callable, Dict, NoReturn, Tuple, Union, Any, Iterator, # noqa: F401 - NamedTuple, TYPE_CHECKING, TypeVar, runtime_checkable) # noqa: F401 + NamedTuple, TYPE_CHECKING, TypeVar) # noqa: F401 if sys.version_info[:2] >= (3, 8): From eecf1486cf445e2f23585b1bb65097dfebbc9545 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 15:50:37 +0100 Subject: [PATCH 0554/2375] Rmv root.py types --- git/objects/submodule/base.py | 4 ++-- git/objects/submodule/root.py | 34 ++++++++++------------------------ 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index ca408338b..76769cad1 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -1015,7 +1015,7 @@ def set_parent_commit(self, commit: Union[Commit_ish, None], check: bool = True) # If check is False, we might see a parent-commit that doesn't even contain the submodule anymore. # in that case, mark our sha as being NULL try: - self.binsha = pctree[self.path].binsha # type: ignore # str()? + self.binsha = pctree[str(self.path)].binsha except KeyError: self.binsha = self.NULL_BIN_SHA # end @@ -1080,7 +1080,7 @@ def rename(self, new_name: str) -> 'Submodule': destination_module_abspath = self._module_abspath(self.repo, self.path, new_name) source_dir = mod.git_dir # Let's be sure the submodule name is not so obviously tied to a directory - if destination_module_abspath.startswith(str(mod.git_dir)): # type: ignore # str()? + if str(destination_module_abspath).startswith(str(mod.git_dir)): tmp_dir = self._module_abspath(self.repo, self.path, str(uuid.uuid4())) os.renames(source_dir, tmp_dir) source_dir = tmp_dir diff --git a/git/objects/submodule/root.py b/git/objects/submodule/root.py index bcac5419a..0af487100 100644 --- a/git/objects/submodule/root.py +++ b/git/objects/submodule/root.py @@ -10,18 +10,6 @@ import logging -# typing ------------------------------------------------------------------- - -from typing import TYPE_CHECKING, Union - -from git.types import Commit_ish - -if TYPE_CHECKING: - from git.repo import Repo - from git.util import IterableList - -# ---------------------------------------------------------------------------- - __all__ = ["RootModule", "RootUpdateProgress"] log = logging.getLogger('git.objects.submodule.root') @@ -54,7 +42,7 @@ class RootModule(Submodule): k_root_name = '__ROOT__' - def __init__(self, repo: 'Repo'): + def __init__(self, repo): # repo, binsha, mode=None, path=None, name = None, parent_commit=None, url=None, ref=None) super(RootModule, self).__init__( repo, @@ -67,17 +55,15 @@ def __init__(self, repo: 'Repo'): branch_path=git.Head.to_full_path(self.k_head_default) ) - def _clear_cache(self) -> None: + def _clear_cache(self): """May not do anything""" pass #{ Interface - def update(self, previous_commit: Union[Commit_ish, None] = None, # type: ignore[override] - recursive: bool = True, force_remove: bool = False, init: bool = True, - to_latest_revision: bool = False, progress: Union[None, 'RootUpdateProgress'] = None, - dry_run: bool = False, force_reset: bool = False, keep_going: bool = False - ) -> 'RootModule': + def update(self, previous_commit=None, recursive=True, force_remove=False, init=True, + to_latest_revision=False, progress=None, dry_run=False, force_reset=False, + keep_going=False): """Update the submodules of this repository to the current HEAD commit. This method behaves smartly by determining changes of the path of a submodules repository, next to changes to the to-be-checked-out commit or the branch to be @@ -142,8 +128,8 @@ def update(self, previous_commit: Union[Commit_ish, None] = None, previous_commit = repo.commit(previous_commit) # obtain commit object # END handle previous commit - psms: 'IterableList[Submodule]' = self.list_items(repo, parent_commit=previous_commit) - sms: 'IterableList[Submodule]' = self.list_items(repo) + psms = self.list_items(repo, parent_commit=previous_commit) + sms = self.list_items(repo) spsms = set(psms) ssms = set(sms) @@ -176,8 +162,8 @@ def update(self, previous_commit: Union[Commit_ish, None] = None, csms = (spsms & ssms) len_csms = len(csms) for i, csm in enumerate(csms): - psm: 'Submodule' = psms[csm.name] - sm: 'Submodule' = sms[csm.name] + psm = psms[csm.name] + sm = sms[csm.name] # PATH CHANGES ############## @@ -357,7 +343,7 @@ def update(self, previous_commit: Union[Commit_ish, None] = None, return self - def module(self) -> 'Repo': + def module(self): """:return: the actual repository containing the submodules""" return self.repo #} END interface From b78cca1854e24de3558b43880586dbf9632831ad Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 15:56:23 +0100 Subject: [PATCH 0555/2375] Rmv base.py types --- git/objects/submodule/base.py | 101 +++++++++++++--------------------- 1 file changed, 39 insertions(+), 62 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 76769cad1..960ff0454 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -49,14 +49,13 @@ # typing ---------------------------------------------------------------------- -from typing import Callable, Dict, Mapping, Sequence, TYPE_CHECKING, cast +from typing import Dict, TYPE_CHECKING from typing import Any, Iterator, Union -from git.types import Commit_ish, PathLike, TBD +from git.types import Commit_ish, PathLike if TYPE_CHECKING: from git.repo import Repo - from git.index import IndexFile # ----------------------------------------------------------------------------- @@ -132,17 +131,17 @@ def __init__(self, repo: 'Repo', binsha: bytes, if url is not None: self._url = url if branch_path is not None: - # assert isinstance(branch_path, str) + assert isinstance(branch_path, str) self._branch_path = branch_path if name is not None: self._name = name def _set_cache_(self, attr: str) -> None: if attr in ('path', '_url', '_branch_path'): - reader: SectionConstraint = self.config_reader() + reader = self.config_reader() # default submodule values try: - self.path: PathLike = reader.get('path') + self.path = reader.get('path') except cp.NoSectionError as e: if self.repo.working_tree_dir is not None: raise ValueError("This submodule instance does not exist anymore in '%s' file" @@ -227,7 +226,7 @@ def _config_parser(cls, repo: 'Repo', return SubmoduleConfigParser(fp_module, read_only=read_only) - def _clear_cache(self) -> None: + def _clear_cache(self): # clear the possibly changed values for name in self._cache_attrs: try: @@ -247,7 +246,7 @@ def _sio_modules(cls, parent_commit: Commit_ish) -> BytesIO: def _config_parser_constrained(self, read_only: bool) -> SectionConstraint: """:return: Config Parser constrained to our submodule in read or write mode""" try: - pc: Union['Commit_ish', None] = self.parent_commit + pc = self.parent_commit except ValueError: pc = None # end handle empty parent repository @@ -256,12 +255,10 @@ def _config_parser_constrained(self, read_only: bool) -> SectionConstraint: return SectionConstraint(parser, sm_section(self.name)) @classmethod - def _module_abspath(cls, parent_repo: 'Repo', path: PathLike, name: str) -> PathLike: + def _module_abspath(cls, parent_repo, path, name): if cls._need_gitfile_submodules(parent_repo.git): return osp.join(parent_repo.git_dir, 'modules', name) - if parent_repo.working_tree_dir: - return osp.join(parent_repo.working_tree_dir, path) - raise NotADirectoryError() + return osp.join(parent_repo.working_tree_dir, path) # end @classmethod @@ -289,7 +286,7 @@ def _clone_repo(cls, repo, url, path, name, **kwargs): return clone @classmethod - def _to_relative_path(cls, parent_repo: 'Repo', path: PathLike) -> PathLike: + def _to_relative_path(cls, parent_repo, path): """:return: a path guaranteed to be relative to the given parent - repository :raise ValueError: if path is not contained in the parent repository's working tree""" path = to_native_path_linux(path) @@ -297,7 +294,7 @@ def _to_relative_path(cls, parent_repo: 'Repo', path: PathLike) -> PathLike: path = path[:-1] # END handle trailing slash - if osp.isabs(path) and parent_repo.working_tree_dir: + if osp.isabs(path): working_tree_linux = to_native_path_linux(parent_repo.working_tree_dir) if not path.startswith(working_tree_linux): raise ValueError("Submodule checkout path '%s' needs to be within the parents repository at '%s'" @@ -311,7 +308,7 @@ def _to_relative_path(cls, parent_repo: 'Repo', path: PathLike) -> PathLike: return path @classmethod - def _write_git_file_and_module_config(cls, working_tree_dir: PathLike, module_abspath: PathLike) -> None: + def _write_git_file_and_module_config(cls, working_tree_dir, module_abspath): """Writes a .git file containing a(preferably) relative path to the actual git module repository. It is an error if the module_abspath cannot be made into a relative path, relative to the working_tree_dir :note: will overwrite existing files ! @@ -338,8 +335,7 @@ def _write_git_file_and_module_config(cls, working_tree_dir: PathLike, module_ab @classmethod def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = None, - branch: Union[str, None] = None, no_checkout: bool = False, depth: Union[int, None] = None, - env: Mapping[str, str] = None, clone_multi_options: Union[Sequence[TBD], None] = None + branch=None, no_checkout: bool = False, depth=None, env=None ) -> 'Submodule': """Add a new submodule to the given repository. This will alter the index as well as the .gitmodules file, but will not create a new commit. @@ -373,8 +369,6 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No and is defined in `os.environ`, value from `os.environ` will be used. If you want to unset some variable, consider providing empty string as its value. - :param clone_multi_options: A list of Clone options. Please see ``git.repo.base.Repo.clone`` - for details. :return: The newly created submodule instance :note: works atomically, such that no change will be done if the repository update fails for instance""" @@ -387,7 +381,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No # assure we never put backslashes into the url, as some operating systems # like it ... if url is not None: - url = to_native_path_linux(url) + url = to_native_path_linux(url) # to_native_path_linux does nothing?? # END assure url correctness # INSTANTIATE INTERMEDIATE SM @@ -395,7 +389,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No if sm.exists(): # reretrieve submodule from tree try: - sm = repo.head.commit.tree[str(path)] + sm = repo.head.commit.tree[path] # type: ignore sm._name = name return sm except KeyError: @@ -418,8 +412,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No # END check url # END verify urls match - mrepo: Union[Repo, None] = None - + mrepo = None if url is None: if not has_module: raise ValueError("A URL was not given and a repository did not exist at %s" % path) @@ -432,7 +425,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No url = urls[0] else: # clone new repo - kwargs: Dict[str, Union[bool, int, Sequence[TBD]]] = {'n': no_checkout} + kwargs: Dict[str, Union[bool, int]] = {'n': no_checkout} if not branch_is_default: kwargs['b'] = br.name # END setup checkout-branch @@ -442,8 +435,6 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No kwargs['depth'] = depth else: raise ValueError("depth should be an integer") - if clone_multi_options: - kwargs['multi_options'] = clone_multi_options # _clone_repo(cls, repo, url, path, name, **kwargs): mrepo = cls._clone_repo(repo, url, path, name, env=env, **kwargs) @@ -456,8 +447,6 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No # otherwise there is a '-' character in front of the submodule listing # a38efa84daef914e4de58d1905a500d8d14aaf45 mymodule (v0.9.0-1-ga38efa8) # -a38efa84daef914e4de58d1905a500d8d14aaf45 submodules/intermediate/one - writer: Union[GitConfigParser, SectionConstraint] - with sm.repo.config_writer() as writer: writer.set_value(sm_section(name), 'url', url) @@ -474,16 +463,13 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No sm._branch_path = br.path # we deliberately assume that our head matches our index ! - mrepo = cast('Repo', mrepo) sm.binsha = mrepo.head.commit.binsha index.add([sm], write=True) return sm - def update(self, recursive: bool = False, init: bool = True, to_latest_revision: bool = False, - progress: Union['UpdateProgress', None] = None, dry_run: bool = False, - force: bool = False, keep_going: bool = False, env: Mapping[str, str] = None, - clone_multi_options: Union[Sequence[TBD], None] = None): + def update(self, recursive=False, init=True, to_latest_revision=False, progress=None, dry_run=False, + force=False, keep_going=False, env=None): """Update the repository of this submodule to point to the checkout we point at with the binsha of this instance. @@ -514,8 +500,6 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: and is defined in `os.environ`, value from `os.environ` will be used. If you want to unset some variable, consider providing empty string as its value. - :param clone_multi_options: list of Clone options. Please see ``git.repo.base.Repo.clone`` - for details. Only take effect with `init` option. :note: does nothing in bare repositories :note: method is definitely not atomic if recurisve is True :return: self""" @@ -582,16 +566,13 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: progress.update(BEGIN | CLONE, 0, 1, prefix + "Cloning url '%s' to '%s' in submodule %r" % (self.url, checkout_module_abspath, self.name)) if not dry_run: - mrepo = self._clone_repo(self.repo, self.url, self.path, self.name, n=True, env=env, - multi_options=clone_multi_options) + mrepo = self._clone_repo(self.repo, self.url, self.path, self.name, n=True, env=env) # END handle dry-run progress.update(END | CLONE, 0, 1, prefix + "Done cloning to %s" % checkout_module_abspath) if not dry_run: # see whether we have a valid branch to checkout try: - # assert isinstance(mrepo, Repo) # cant do this cos of circular import - mrepo = cast('Repo', mrepo) # Try TypeGuard wirh hasattr, or has_remotes&_head protocol? # find a remote which has our branch - we try to be flexible remote_branch = find_first_remote_branch(mrepo.remotes, self.branch_name) local_branch = mkhead(mrepo, self.branch_path) @@ -652,7 +633,7 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: may_reset = True if mrepo.head.commit.binsha != self.NULL_BIN_SHA: base_commit = mrepo.merge_base(mrepo.head.commit, hexsha) - if len(base_commit) == 0 or base_commit[0].hexsha == hexsha: # type: ignore + if len(base_commit) == 0 or base_commit[0].hexsha == hexsha: if force: msg = "Will force checkout or reset on local branch that is possibly in the future of" msg += "the commit it will be checked out to, effectively 'forgetting' new commits" @@ -819,8 +800,7 @@ def move(self, module_path, configuration=True, module=True): return self @unbare_repo - def remove(self, module: bool = True, force: bool = False, - configuration: bool = True, dry_run: bool = False) -> 'Submodule': + def remove(self, module=True, force=False, configuration=True, dry_run=False): """Remove this submodule from the repository. This will remove our entry from the .gitmodules file and the entry in the .git / config file. @@ -874,7 +854,7 @@ def remove(self, module: bool = True, force: bool = False, # TODO: If we run into permission problems, we have a highly inconsistent # state. Delete the .git folders last, start with the submodules first mp = self.abspath - method: Union[None, Callable[[PathLike], None]] = None + method = None if osp.islink(mp): method = os.remove elif osp.isdir(mp): @@ -927,7 +907,7 @@ def remove(self, module: bool = True, force: bool = False, import gc gc.collect() try: - rmtree(str(wtd)) + rmtree(wtd) except Exception as ex: if HIDE_WINDOWS_KNOWN_ERRORS: raise SkipTest("FIXME: fails with: PermissionError\n {}".format(ex)) from ex @@ -941,7 +921,7 @@ def remove(self, module: bool = True, force: bool = False, rmtree(git_dir) except Exception as ex: if HIDE_WINDOWS_KNOWN_ERRORS: - raise SkipTest(f"FIXME: fails with: PermissionError\n {ex}") from ex + raise SkipTest("FIXME: fails with: PermissionError\n %s", ex) from ex else: raise # end handle separate bare repository @@ -965,8 +945,6 @@ def remove(self, module: bool = True, force: bool = False, # now git config - need the config intact, otherwise we can't query # information anymore - writer: Union[GitConfigParser, SectionConstraint] - with self.repo.config_writer() as writer: writer.remove_section(sm_section(self.name)) @@ -976,7 +954,7 @@ def remove(self, module: bool = True, force: bool = False, return self - def set_parent_commit(self, commit: Union[Commit_ish, None], check: bool = True) -> 'Submodule': + def set_parent_commit(self, commit: Union[Commit_ish, None], check=True): """Set this instance to use the given commit whose tree is supposed to contain the .gitmodules blob. @@ -1015,7 +993,7 @@ def set_parent_commit(self, commit: Union[Commit_ish, None], check: bool = True) # If check is False, we might see a parent-commit that doesn't even contain the submodule anymore. # in that case, mark our sha as being NULL try: - self.binsha = pctree[str(self.path)].binsha + self.binsha = pctree[self.path].binsha # type: ignore except KeyError: self.binsha = self.NULL_BIN_SHA # end @@ -1024,7 +1002,7 @@ def set_parent_commit(self, commit: Union[Commit_ish, None], check: bool = True) return self @unbare_repo - def config_writer(self, index: Union['IndexFile', None] = None, write: bool = True) -> SectionConstraint: + def config_writer(self, index=None, write=True): """:return: a config writer instance allowing you to read and write the data belonging to this submodule into the .gitmodules file. @@ -1045,7 +1023,7 @@ def config_writer(self, index: Union['IndexFile', None] = None, write: bool = Tr return writer @unbare_repo - def rename(self, new_name: str) -> 'Submodule': + def rename(self, new_name): """Rename this submodule :note: This method takes care of renaming the submodule in various places, such as @@ -1080,14 +1058,13 @@ def rename(self, new_name: str) -> 'Submodule': destination_module_abspath = self._module_abspath(self.repo, self.path, new_name) source_dir = mod.git_dir # Let's be sure the submodule name is not so obviously tied to a directory - if str(destination_module_abspath).startswith(str(mod.git_dir)): + if destination_module_abspath.startswith(mod.git_dir): tmp_dir = self._module_abspath(self.repo, self.path, str(uuid.uuid4())) os.renames(source_dir, tmp_dir) source_dir = tmp_dir # end handle self-containment os.renames(source_dir, destination_module_abspath) - if mod.working_tree_dir: - self._write_git_file_and_module_config(mod.working_tree_dir, destination_module_abspath) + self._write_git_file_and_module_config(mod.working_tree_dir, destination_module_abspath) # end move separate git repository return self @@ -1097,7 +1074,7 @@ def rename(self, new_name: str) -> 'Submodule': #{ Query Interface @unbare_repo - def module(self) -> 'Repo': + def module(self): """:return: Repo instance initialized from the repository at our submodule path :raise InvalidGitRepositoryError: if a repository was not available. This could also mean that it was not yet initialized""" @@ -1114,7 +1091,7 @@ def module(self) -> 'Repo': raise InvalidGitRepositoryError("Repository at %r was not yet checked out" % module_checkout_abspath) # END handle exceptions - def module_exists(self) -> bool: + def module_exists(self): """:return: True if our module exists and is a valid git repository. See module() method""" try: self.module() @@ -1123,7 +1100,7 @@ def module_exists(self) -> bool: return False # END handle exception - def exists(self) -> bool: + def exists(self): """ :return: True if the submodule exists, False otherwise. Please note that a submodule may exist ( in the .gitmodules file) even though its module @@ -1164,26 +1141,26 @@ def branch(self): return mkhead(self.module(), self._branch_path) @property - def branch_path(self) -> PathLike: + def branch_path(self): """ :return: full(relative) path as string to the branch we would checkout from the remote and track""" return self._branch_path @property - def branch_name(self) -> str: + def branch_name(self): """:return: the name of the branch, which is the shortest possible branch name""" # use an instance method, for this we create a temporary Head instance # which uses a repository that is available at least ( it makes no difference ) return git.Head(self.repo, self._branch_path).name @property - def url(self) -> str: + def url(self): """:return: The url to the repository which our module - repository refers to""" return self._url @property - def parent_commit(self) -> 'Commit_ish': + def parent_commit(self): """:return: Commit instance with the tree containing the .gitmodules file :note: will always point to the current head's commit if it was not set explicitly""" if self._parent_commit is None: @@ -1191,7 +1168,7 @@ def parent_commit(self) -> 'Commit_ish': return self._parent_commit @property - def name(self) -> str: + def name(self): """:return: The name of this submodule. It is used to identify it within the .gitmodules file. :note: by default, the name is the path at which to find the submodule, but From 6aebb73bb818d91c275b94b6052d8ce4ddc113c6 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 16:01:18 +0100 Subject: [PATCH 0556/2375] Rmv submodule types --- git/objects/submodule/base.py | 19 +++++++++++++------ git/objects/submodule/util.py | 23 +++++++---------------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 960ff0454..c95b66f2e 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -335,7 +335,7 @@ def _write_git_file_and_module_config(cls, working_tree_dir, module_abspath): @classmethod def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = None, - branch=None, no_checkout: bool = False, depth=None, env=None + branch=None, no_checkout: bool = False, depth=None, env=None, clone_multi_options=None ) -> 'Submodule': """Add a new submodule to the given repository. This will alter the index as well as the .gitmodules file, but will not create a new commit. @@ -369,6 +369,8 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No and is defined in `os.environ`, value from `os.environ` will be used. If you want to unset some variable, consider providing empty string as its value. + :param clone_multi_options: A list of Clone options. Please see ``git.repo.base.Repo.clone`` + for details. :return: The newly created submodule instance :note: works atomically, such that no change will be done if the repository update fails for instance""" @@ -381,7 +383,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No # assure we never put backslashes into the url, as some operating systems # like it ... if url is not None: - url = to_native_path_linux(url) # to_native_path_linux does nothing?? + url = to_native_path_linux(url) # END assure url correctness # INSTANTIATE INTERMEDIATE SM @@ -389,7 +391,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No if sm.exists(): # reretrieve submodule from tree try: - sm = repo.head.commit.tree[path] # type: ignore + sm = repo.head.commit.tree[path] sm._name = name return sm except KeyError: @@ -435,6 +437,8 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No kwargs['depth'] = depth else: raise ValueError("depth should be an integer") + if clone_multi_options: + kwargs['multi_options'] = clone_multi_options # _clone_repo(cls, repo, url, path, name, **kwargs): mrepo = cls._clone_repo(repo, url, path, name, env=env, **kwargs) @@ -469,7 +473,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No return sm def update(self, recursive=False, init=True, to_latest_revision=False, progress=None, dry_run=False, - force=False, keep_going=False, env=None): + force=False, keep_going=False, env=None, clone_multi_options=None): """Update the repository of this submodule to point to the checkout we point at with the binsha of this instance. @@ -500,6 +504,8 @@ def update(self, recursive=False, init=True, to_latest_revision=False, progress= and is defined in `os.environ`, value from `os.environ` will be used. If you want to unset some variable, consider providing empty string as its value. + :param clone_multi_options: list of Clone options. Please see ``git.repo.base.Repo.clone`` + for details. Only take effect with `init` option. :note: does nothing in bare repositories :note: method is definitely not atomic if recurisve is True :return: self""" @@ -566,7 +572,8 @@ def update(self, recursive=False, init=True, to_latest_revision=False, progress= progress.update(BEGIN | CLONE, 0, 1, prefix + "Cloning url '%s' to '%s' in submodule %r" % (self.url, checkout_module_abspath, self.name)) if not dry_run: - mrepo = self._clone_repo(self.repo, self.url, self.path, self.name, n=True, env=env) + mrepo = self._clone_repo(self.repo, self.url, self.path, self.name, n=True, env=env, + multi_options=clone_multi_options) # END handle dry-run progress.update(END | CLONE, 0, 1, prefix + "Done cloning to %s" % checkout_module_abspath) @@ -993,7 +1000,7 @@ def set_parent_commit(self, commit: Union[Commit_ish, None], check=True): # If check is False, we might see a parent-commit that doesn't even contain the submodule anymore. # in that case, mark our sha as being NULL try: - self.binsha = pctree[self.path].binsha # type: ignore + self.binsha = pctree[str(self.path)].binsha except KeyError: self.binsha = self.NULL_BIN_SHA # end diff --git a/git/objects/submodule/util.py b/git/objects/submodule/util.py index cde18d083..5290000be 100644 --- a/git/objects/submodule/util.py +++ b/git/objects/submodule/util.py @@ -5,20 +5,11 @@ import weakref -# typing ----------------------------------------------------------------------- - -from typing import Any, Sequence, TYPE_CHECKING, Union - -from git.types import PathLike +from typing import Any, TYPE_CHECKING, Union if TYPE_CHECKING: from .base import Submodule from weakref import ReferenceType - from git.repo import Repo - from git.refs import Head - from git import Remote - from git.refs import RemoteReference - __all__ = ('sm_section', 'sm_name', 'mkhead', 'find_first_remote_branch', 'SubmoduleConfigParser') @@ -26,23 +17,23 @@ #{ Utilities -def sm_section(name: str) -> str: +def sm_section(name): """:return: section title used in .gitmodules configuration file""" - return f'submodule {name}' + return 'submodule "%s"' % name -def sm_name(section: str) -> str: +def sm_name(section): """:return: name of the submodule as parsed from the section name""" section = section.strip() return section[11:-1] -def mkhead(repo: 'Repo', path: PathLike) -> 'Head': +def mkhead(repo, path): """:return: New branch/head instance""" return git.Head(repo, git.Head.to_full_path(path)) -def find_first_remote_branch(remotes: Sequence['Remote'], branch_name: str) -> 'RemoteReference': +def find_first_remote_branch(remotes, branch_name): """Find the remote branch matching the name of the given branch or raise InvalidGitRepositoryError""" for remote in remotes: try: @@ -101,7 +92,7 @@ def flush_to_index(self) -> None: #{ Overridden Methods def write(self) -> None: - rval: None = super(SubmoduleConfigParser, self).write() + rval = super(SubmoduleConfigParser, self).write() self.flush_to_index() return rval # END overridden methods From c0ab23e5d0afce4a85a8af7ec2a360bf6c71c4ac Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 16:04:06 +0100 Subject: [PATCH 0557/2375] Rmv submodule types2 --- git/diff.py | 4 ++-- git/objects/submodule/base.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/git/diff.py b/git/diff.py index c5e231b20..ac7449990 100644 --- a/git/diff.py +++ b/git/diff.py @@ -24,11 +24,11 @@ from subprocess import Popen -Lit_change_type = Literal['A', 'D', 'M', 'R', 'T'] +Lit_change_type = Literal['A', 'C', 'D', 'M', 'R', 'T'] def is_change_type(inp: str) -> TypeGuard[Lit_change_type]: - return inp in ('A', 'D', 'M', 'R', 'T') + return inp in ('A', 'D', 'C', 'M', 'R', 'T') # ------------------------------------------------------------------------ diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index c95b66f2e..499b2b30e 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -391,7 +391,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No if sm.exists(): # reretrieve submodule from tree try: - sm = repo.head.commit.tree[path] + sm = repo.head.commit.tree[path] # type: ignore sm._name = name return sm except KeyError: From 8d2a7703259967f0438a18b5cbc80ee060e15866 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 16:16:35 +0100 Subject: [PATCH 0558/2375] Rmv diff typeguard --- git/diff.py | 28 ++++++++++------------------ git/objects/submodule/base.py | 2 +- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/git/diff.py b/git/diff.py index ac7449990..879d5b55c 100644 --- a/git/diff.py +++ b/git/diff.py @@ -15,8 +15,8 @@ # typing ------------------------------------------------------------------ -from typing import Any, Iterator, List, Match, Optional, Tuple, Type, Union, TYPE_CHECKING -from git.types import PathLike, TBD, Literal, TypeGuard +from typing import Any, Iterator, List, Match, Optional, Tuple, Type, Union, TYPE_CHECKING, cast +from git.types import PathLike, TBD, Literal if TYPE_CHECKING: from .objects.tree import Tree @@ -24,15 +24,10 @@ from subprocess import Popen -Lit_change_type = Literal['A', 'C', 'D', 'M', 'R', 'T'] - - -def is_change_type(inp: str) -> TypeGuard[Lit_change_type]: - return inp in ('A', 'D', 'C', 'M', 'R', 'T') +Lit_change_type = Literal['A', 'D', 'C', 'M', 'R', 'T'] # ------------------------------------------------------------------------ - __all__ = ('Diffable', 'DiffIndex', 'Diff', 'NULL_TREE') # Special object to compare against the empty tree in diffs @@ -205,8 +200,8 @@ def iter_change_type(self, change_type: Lit_change_type) -> Iterator['Diff']: if change_type not in self.change_type: raise ValueError("Invalid change type: %s" % change_type) - # diff: 'Diff' for diff in self: + diff = cast('Diff', diff) if diff.change_type == change_type: yield diff elif change_type == "A" and diff.new_file: @@ -287,8 +282,7 @@ def __init__(self, repo: 'Repo', a_mode: Union[bytes, str, None], b_mode: Union[bytes, str, None], new_file: bool, deleted_file: bool, copied_file: bool, raw_rename_from: Optional[bytes], raw_rename_to: Optional[bytes], - diff: Union[str, bytes, None], change_type: Union[Lit_change_type, None], - score: Optional[int]) -> None: + diff: Union[str, bytes, None], change_type: Optional[str], score: Optional[int]) -> None: assert a_rawpath is None or isinstance(a_rawpath, bytes) assert b_rawpath is None or isinstance(b_rawpath, bytes) @@ -505,15 +499,13 @@ def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> Non for line in lines.split(':')[1:]: meta, _, path = line.partition('\x00') path = path.rstrip('\x00') - a_blob_id: Union[str, None] - b_blob_id: Union[str, None] + a_blob_id: Optional[str] + b_blob_id: Optional[str] old_mode, new_mode, a_blob_id, b_blob_id, _change_type = meta.split(None, 4) - # _Change_type can be R100 + # Change type can be R100 # R: status letter # 100: score (in case of copy and rename) - - assert is_change_type(_change_type[0]), "Unexpected _change_type recieved in Diff" - change_type: Lit_change_type = _change_type[0] + change_type: Lit_change_type = _change_type[0] # type: ignore score_str = ''.join(_change_type[1:]) score = int(score_str) if score_str.isdigit() else None path = path.strip() @@ -528,7 +520,7 @@ def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> Non # NOTE: We cannot conclude from the existence of a blob to change type # as diffs with the working do not have blobs yet if change_type == 'D': - b_blob_id = None + b_blob_id = None # Optional[str] deleted_file = True elif change_type == 'A': a_blob_id = None diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 499b2b30e..60ff11559 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -391,7 +391,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No if sm.exists(): # reretrieve submodule from tree try: - sm = repo.head.commit.tree[path] # type: ignore + sm = repo.head.commit.tree[path] # type: ignore sm._name = name return sm except KeyError: From 1fd9e8c43cadb6459438a9405cd993c005689f53 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 16:20:52 +0100 Subject: [PATCH 0559/2375] Re-add submodule.util.py types --- git/objects/submodule/util.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/git/objects/submodule/util.py b/git/objects/submodule/util.py index 5290000be..cde18d083 100644 --- a/git/objects/submodule/util.py +++ b/git/objects/submodule/util.py @@ -5,11 +5,20 @@ import weakref -from typing import Any, TYPE_CHECKING, Union +# typing ----------------------------------------------------------------------- + +from typing import Any, Sequence, TYPE_CHECKING, Union + +from git.types import PathLike if TYPE_CHECKING: from .base import Submodule from weakref import ReferenceType + from git.repo import Repo + from git.refs import Head + from git import Remote + from git.refs import RemoteReference + __all__ = ('sm_section', 'sm_name', 'mkhead', 'find_first_remote_branch', 'SubmoduleConfigParser') @@ -17,23 +26,23 @@ #{ Utilities -def sm_section(name): +def sm_section(name: str) -> str: """:return: section title used in .gitmodules configuration file""" - return 'submodule "%s"' % name + return f'submodule {name}' -def sm_name(section): +def sm_name(section: str) -> str: """:return: name of the submodule as parsed from the section name""" section = section.strip() return section[11:-1] -def mkhead(repo, path): +def mkhead(repo: 'Repo', path: PathLike) -> 'Head': """:return: New branch/head instance""" return git.Head(repo, git.Head.to_full_path(path)) -def find_first_remote_branch(remotes, branch_name): +def find_first_remote_branch(remotes: Sequence['Remote'], branch_name: str) -> 'RemoteReference': """Find the remote branch matching the name of the given branch or raise InvalidGitRepositoryError""" for remote in remotes: try: @@ -92,7 +101,7 @@ def flush_to_index(self) -> None: #{ Overridden Methods def write(self) -> None: - rval = super(SubmoduleConfigParser, self).write() + rval: None = super(SubmoduleConfigParser, self).write() self.flush_to_index() return rval # END overridden methods From 1eceb8938ec98fad3a3aa2b8ffae5be8b7653976 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 16:29:02 +0100 Subject: [PATCH 0560/2375] Fix submodule.util.py types --- git/objects/submodule/root.py | 34 ++++++++++++++++++++++++---------- git/objects/submodule/util.py | 2 +- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/git/objects/submodule/root.py b/git/objects/submodule/root.py index 0af487100..bcac5419a 100644 --- a/git/objects/submodule/root.py +++ b/git/objects/submodule/root.py @@ -10,6 +10,18 @@ import logging +# typing ------------------------------------------------------------------- + +from typing import TYPE_CHECKING, Union + +from git.types import Commit_ish + +if TYPE_CHECKING: + from git.repo import Repo + from git.util import IterableList + +# ---------------------------------------------------------------------------- + __all__ = ["RootModule", "RootUpdateProgress"] log = logging.getLogger('git.objects.submodule.root') @@ -42,7 +54,7 @@ class RootModule(Submodule): k_root_name = '__ROOT__' - def __init__(self, repo): + def __init__(self, repo: 'Repo'): # repo, binsha, mode=None, path=None, name = None, parent_commit=None, url=None, ref=None) super(RootModule, self).__init__( repo, @@ -55,15 +67,17 @@ def __init__(self, repo): branch_path=git.Head.to_full_path(self.k_head_default) ) - def _clear_cache(self): + def _clear_cache(self) -> None: """May not do anything""" pass #{ Interface - def update(self, previous_commit=None, recursive=True, force_remove=False, init=True, - to_latest_revision=False, progress=None, dry_run=False, force_reset=False, - keep_going=False): + def update(self, previous_commit: Union[Commit_ish, None] = None, # type: ignore[override] + recursive: bool = True, force_remove: bool = False, init: bool = True, + to_latest_revision: bool = False, progress: Union[None, 'RootUpdateProgress'] = None, + dry_run: bool = False, force_reset: bool = False, keep_going: bool = False + ) -> 'RootModule': """Update the submodules of this repository to the current HEAD commit. This method behaves smartly by determining changes of the path of a submodules repository, next to changes to the to-be-checked-out commit or the branch to be @@ -128,8 +142,8 @@ def update(self, previous_commit=None, recursive=True, force_remove=False, init= previous_commit = repo.commit(previous_commit) # obtain commit object # END handle previous commit - psms = self.list_items(repo, parent_commit=previous_commit) - sms = self.list_items(repo) + psms: 'IterableList[Submodule]' = self.list_items(repo, parent_commit=previous_commit) + sms: 'IterableList[Submodule]' = self.list_items(repo) spsms = set(psms) ssms = set(sms) @@ -162,8 +176,8 @@ def update(self, previous_commit=None, recursive=True, force_remove=False, init= csms = (spsms & ssms) len_csms = len(csms) for i, csm in enumerate(csms): - psm = psms[csm.name] - sm = sms[csm.name] + psm: 'Submodule' = psms[csm.name] + sm: 'Submodule' = sms[csm.name] # PATH CHANGES ############## @@ -343,7 +357,7 @@ def update(self, previous_commit=None, recursive=True, force_remove=False, init= return self - def module(self): + def module(self) -> 'Repo': """:return: the actual repository containing the submodules""" return self.repo #} END interface diff --git a/git/objects/submodule/util.py b/git/objects/submodule/util.py index cde18d083..a776af889 100644 --- a/git/objects/submodule/util.py +++ b/git/objects/submodule/util.py @@ -28,7 +28,7 @@ def sm_section(name: str) -> str: """:return: section title used in .gitmodules configuration file""" - return f'submodule {name}' + return f'submodule "{name}"' def sm_name(section: str) -> str: From 215abfda39c34aa125f9405d9bb848eb45ee7ac6 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 16:36:16 +0100 Subject: [PATCH 0561/2375] Readd typeguard to Diff.py --- git/diff.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/git/diff.py b/git/diff.py index 879d5b55c..a90b77580 100644 --- a/git/diff.py +++ b/git/diff.py @@ -16,7 +16,7 @@ # typing ------------------------------------------------------------------ from typing import Any, Iterator, List, Match, Optional, Tuple, Type, Union, TYPE_CHECKING, cast -from git.types import PathLike, TBD, Literal +from git.types import PathLike, TBD, Literal, TypeGuard if TYPE_CHECKING: from .objects.tree import Tree @@ -26,8 +26,13 @@ Lit_change_type = Literal['A', 'D', 'C', 'M', 'R', 'T'] + +def is_change_type(inp: str) -> TypeGuard[Lit_change_type]: + return inp in ['A', 'D', 'C', 'M', 'R', 'T'] + # ------------------------------------------------------------------------ + __all__ = ('Diffable', 'DiffIndex', 'Diff', 'NULL_TREE') # Special object to compare against the empty tree in diffs @@ -202,6 +207,7 @@ def iter_change_type(self, change_type: Lit_change_type) -> Iterator['Diff']: for diff in self: diff = cast('Diff', diff) + if diff.change_type == change_type: yield diff elif change_type == "A" and diff.new_file: @@ -505,7 +511,8 @@ def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> Non # Change type can be R100 # R: status letter # 100: score (in case of copy and rename) - change_type: Lit_change_type = _change_type[0] # type: ignore + assert is_change_type(_change_type[0]) + change_type: Lit_change_type = _change_type[0] score_str = ''.join(_change_type[1:]) score = int(score_str) if score_str.isdigit() else None path = path.strip() From 94c2ae405ba635e801ff7a1ea00300e51f3a70db Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 16:41:14 +0100 Subject: [PATCH 0562/2375] Readd submodule.base.py types --- git/diff.py | 5 +- git/objects/submodule/base.py | 88 ++++++++++++++++++++--------------- 2 files changed, 54 insertions(+), 39 deletions(-) diff --git a/git/diff.py b/git/diff.py index a90b77580..7de4276aa 100644 --- a/git/diff.py +++ b/git/diff.py @@ -28,7 +28,8 @@ def is_change_type(inp: str) -> TypeGuard[Lit_change_type]: - return inp in ['A', 'D', 'C', 'M', 'R', 'T'] + return True + # return inp in ['A', 'D', 'C', 'M', 'R', 'T'] # ------------------------------------------------------------------------ @@ -511,7 +512,7 @@ def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> Non # Change type can be R100 # R: status letter # 100: score (in case of copy and rename) - assert is_change_type(_change_type[0]) + assert is_change_type(_change_type[0]), f"Unexpected value for change_type received: {_change_type[0]}" change_type: Lit_change_type = _change_type[0] score_str = ''.join(_change_type[1:]) score = int(score_str) if score_str.isdigit() else None diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 60ff11559..87a86749e 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -47,15 +47,16 @@ find_first_remote_branch ) +from git.repo import Repo # typing ---------------------------------------------------------------------- -from typing import Dict, TYPE_CHECKING +from typing import Callable, Dict, Mapping, Sequence, TYPE_CHECKING from typing import Any, Iterator, Union -from git.types import Commit_ish, PathLike +from git.types import Commit_ish, PathLike, TBD if TYPE_CHECKING: - from git.repo import Repo + from git.index import IndexFile # ----------------------------------------------------------------------------- @@ -131,14 +132,14 @@ def __init__(self, repo: 'Repo', binsha: bytes, if url is not None: self._url = url if branch_path is not None: - assert isinstance(branch_path, str) + # assert isinstance(branch_path, str) self._branch_path = branch_path if name is not None: self._name = name def _set_cache_(self, attr: str) -> None: if attr in ('path', '_url', '_branch_path'): - reader = self.config_reader() + reader: SectionConstraint = self.config_reader() # default submodule values try: self.path = reader.get('path') @@ -226,7 +227,7 @@ def _config_parser(cls, repo: 'Repo', return SubmoduleConfigParser(fp_module, read_only=read_only) - def _clear_cache(self): + def _clear_cache(self) -> None: # clear the possibly changed values for name in self._cache_attrs: try: @@ -246,7 +247,7 @@ def _sio_modules(cls, parent_commit: Commit_ish) -> BytesIO: def _config_parser_constrained(self, read_only: bool) -> SectionConstraint: """:return: Config Parser constrained to our submodule in read or write mode""" try: - pc = self.parent_commit + pc: Union['Commit_ish', None] = self.parent_commit except ValueError: pc = None # end handle empty parent repository @@ -255,10 +256,12 @@ def _config_parser_constrained(self, read_only: bool) -> SectionConstraint: return SectionConstraint(parser, sm_section(self.name)) @classmethod - def _module_abspath(cls, parent_repo, path, name): + def _module_abspath(cls, parent_repo: 'Repo', path: PathLike, name: str) -> PathLike: if cls._need_gitfile_submodules(parent_repo.git): return osp.join(parent_repo.git_dir, 'modules', name) - return osp.join(parent_repo.working_tree_dir, path) + if parent_repo.working_tree_dir: + return osp.join(parent_repo.working_tree_dir, path) + raise NotADirectoryError() # end @classmethod @@ -286,7 +289,7 @@ def _clone_repo(cls, repo, url, path, name, **kwargs): return clone @classmethod - def _to_relative_path(cls, parent_repo, path): + def _to_relative_path(cls, parent_repo: 'Repo', path: PathLike) -> PathLike: """:return: a path guaranteed to be relative to the given parent - repository :raise ValueError: if path is not contained in the parent repository's working tree""" path = to_native_path_linux(path) @@ -294,7 +297,7 @@ def _to_relative_path(cls, parent_repo, path): path = path[:-1] # END handle trailing slash - if osp.isabs(path): + if osp.isabs(path) and parent_repo.working_tree_dir: working_tree_linux = to_native_path_linux(parent_repo.working_tree_dir) if not path.startswith(working_tree_linux): raise ValueError("Submodule checkout path '%s' needs to be within the parents repository at '%s'" @@ -308,7 +311,7 @@ def _to_relative_path(cls, parent_repo, path): return path @classmethod - def _write_git_file_and_module_config(cls, working_tree_dir, module_abspath): + def _write_git_file_and_module_config(cls, working_tree_dir: PathLike, module_abspath: PathLike) -> None: """Writes a .git file containing a(preferably) relative path to the actual git module repository. It is an error if the module_abspath cannot be made into a relative path, relative to the working_tree_dir :note: will overwrite existing files ! @@ -335,7 +338,8 @@ def _write_git_file_and_module_config(cls, working_tree_dir, module_abspath): @classmethod def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = None, - branch=None, no_checkout: bool = False, depth=None, env=None, clone_multi_options=None + branch: Union[str, None] = None, no_checkout: bool = False, depth: Union[int, None] = None, + env: Mapping[str, str] = None, clone_multi_options: Union[Sequence[TBD], None] = None ) -> 'Submodule': """Add a new submodule to the given repository. This will alter the index as well as the .gitmodules file, but will not create a new commit. @@ -391,7 +395,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No if sm.exists(): # reretrieve submodule from tree try: - sm = repo.head.commit.tree[path] # type: ignore + sm = repo.head.commit.tree[str(path)] sm._name = name return sm except KeyError: @@ -414,7 +418,8 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No # END check url # END verify urls match - mrepo = None + mrepo: Union[Repo, None] = None + if url is None: if not has_module: raise ValueError("A URL was not given and a repository did not exist at %s" % path) @@ -427,7 +432,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No url = urls[0] else: # clone new repo - kwargs: Dict[str, Union[bool, int]] = {'n': no_checkout} + kwargs: Dict[str, Union[bool, int, Sequence[TBD]]] = {'n': no_checkout} if not branch_is_default: kwargs['b'] = br.name # END setup checkout-branch @@ -451,6 +456,8 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No # otherwise there is a '-' character in front of the submodule listing # a38efa84daef914e4de58d1905a500d8d14aaf45 mymodule (v0.9.0-1-ga38efa8) # -a38efa84daef914e4de58d1905a500d8d14aaf45 submodules/intermediate/one + writer: Union[GitConfigParser, SectionConstraint] + with sm.repo.config_writer() as writer: writer.set_value(sm_section(name), 'url', url) @@ -467,13 +474,15 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No sm._branch_path = br.path # we deliberately assume that our head matches our index ! - sm.binsha = mrepo.head.commit.binsha + sm.binsha = mrepo.head.commit.binsha # type: ignore index.add([sm], write=True) return sm - def update(self, recursive=False, init=True, to_latest_revision=False, progress=None, dry_run=False, - force=False, keep_going=False, env=None, clone_multi_options=None): + def update(self, recursive: bool = False, init: bool = True, to_latest_revision: bool = False, + progress: Union['UpdateProgress', None] = None, dry_run: bool = False, + force: bool = False, keep_going: bool = False, env: Mapping[str, str] = None, + clone_multi_options: Union[Sequence[TBD], None] = None): """Update the repository of this submodule to point to the checkout we point at with the binsha of this instance. @@ -580,6 +589,7 @@ def update(self, recursive=False, init=True, to_latest_revision=False, progress= if not dry_run: # see whether we have a valid branch to checkout try: + assert isinstance(mrepo, Repo) # find a remote which has our branch - we try to be flexible remote_branch = find_first_remote_branch(mrepo.remotes, self.branch_name) local_branch = mkhead(mrepo, self.branch_path) @@ -640,7 +650,7 @@ def update(self, recursive=False, init=True, to_latest_revision=False, progress= may_reset = True if mrepo.head.commit.binsha != self.NULL_BIN_SHA: base_commit = mrepo.merge_base(mrepo.head.commit, hexsha) - if len(base_commit) == 0 or base_commit[0].hexsha == hexsha: + if len(base_commit) == 0 or (base_commit[0] is not None and base_commit[0].hexsha == hexsha): if force: msg = "Will force checkout or reset on local branch that is possibly in the future of" msg += "the commit it will be checked out to, effectively 'forgetting' new commits" @@ -807,7 +817,8 @@ def move(self, module_path, configuration=True, module=True): return self @unbare_repo - def remove(self, module=True, force=False, configuration=True, dry_run=False): + def remove(self, module: bool = True, force: bool = False, + configuration: bool = True, dry_run: bool = False) -> 'Submodule': """Remove this submodule from the repository. This will remove our entry from the .gitmodules file and the entry in the .git / config file. @@ -861,7 +872,7 @@ def remove(self, module=True, force=False, configuration=True, dry_run=False): # TODO: If we run into permission problems, we have a highly inconsistent # state. Delete the .git folders last, start with the submodules first mp = self.abspath - method = None + method: Union[None, Callable[[PathLike], None]] = None if osp.islink(mp): method = os.remove elif osp.isdir(mp): @@ -914,7 +925,7 @@ def remove(self, module=True, force=False, configuration=True, dry_run=False): import gc gc.collect() try: - rmtree(wtd) + rmtree(str(wtd)) except Exception as ex: if HIDE_WINDOWS_KNOWN_ERRORS: raise SkipTest("FIXME: fails with: PermissionError\n {}".format(ex)) from ex @@ -928,7 +939,7 @@ def remove(self, module=True, force=False, configuration=True, dry_run=False): rmtree(git_dir) except Exception as ex: if HIDE_WINDOWS_KNOWN_ERRORS: - raise SkipTest("FIXME: fails with: PermissionError\n %s", ex) from ex + raise SkipTest(f"FIXME: fails with: PermissionError\n {ex}") from ex else: raise # end handle separate bare repository @@ -952,6 +963,8 @@ def remove(self, module=True, force=False, configuration=True, dry_run=False): # now git config - need the config intact, otherwise we can't query # information anymore + writer: Union[GitConfigParser, SectionConstraint] + with self.repo.config_writer() as writer: writer.remove_section(sm_section(self.name)) @@ -961,7 +974,7 @@ def remove(self, module=True, force=False, configuration=True, dry_run=False): return self - def set_parent_commit(self, commit: Union[Commit_ish, None], check=True): + def set_parent_commit(self, commit: Union[Commit_ish, None], check: bool = True) -> 'Submodule': """Set this instance to use the given commit whose tree is supposed to contain the .gitmodules blob. @@ -1009,7 +1022,7 @@ def set_parent_commit(self, commit: Union[Commit_ish, None], check=True): return self @unbare_repo - def config_writer(self, index=None, write=True): + def config_writer(self, index: Union['IndexFile', None] = None, write: bool = True) -> SectionConstraint: """:return: a config writer instance allowing you to read and write the data belonging to this submodule into the .gitmodules file. @@ -1030,7 +1043,7 @@ def config_writer(self, index=None, write=True): return writer @unbare_repo - def rename(self, new_name): + def rename(self, new_name: str) -> 'Submodule': """Rename this submodule :note: This method takes care of renaming the submodule in various places, such as @@ -1065,13 +1078,14 @@ def rename(self, new_name): destination_module_abspath = self._module_abspath(self.repo, self.path, new_name) source_dir = mod.git_dir # Let's be sure the submodule name is not so obviously tied to a directory - if destination_module_abspath.startswith(mod.git_dir): + if str(destination_module_abspath).startswith(str(mod.git_dir)): tmp_dir = self._module_abspath(self.repo, self.path, str(uuid.uuid4())) os.renames(source_dir, tmp_dir) source_dir = tmp_dir # end handle self-containment os.renames(source_dir, destination_module_abspath) - self._write_git_file_and_module_config(mod.working_tree_dir, destination_module_abspath) + if mod.working_tree_dir: + self._write_git_file_and_module_config(mod.working_tree_dir, destination_module_abspath) # end move separate git repository return self @@ -1081,7 +1095,7 @@ def rename(self, new_name): #{ Query Interface @unbare_repo - def module(self): + def module(self) -> 'Repo': """:return: Repo instance initialized from the repository at our submodule path :raise InvalidGitRepositoryError: if a repository was not available. This could also mean that it was not yet initialized""" @@ -1098,7 +1112,7 @@ def module(self): raise InvalidGitRepositoryError("Repository at %r was not yet checked out" % module_checkout_abspath) # END handle exceptions - def module_exists(self): + def module_exists(self) -> bool: """:return: True if our module exists and is a valid git repository. See module() method""" try: self.module() @@ -1107,7 +1121,7 @@ def module_exists(self): return False # END handle exception - def exists(self): + def exists(self) -> bool: """ :return: True if the submodule exists, False otherwise. Please note that a submodule may exist ( in the .gitmodules file) even though its module @@ -1148,26 +1162,26 @@ def branch(self): return mkhead(self.module(), self._branch_path) @property - def branch_path(self): + def branch_path(self) -> PathLike: """ :return: full(relative) path as string to the branch we would checkout from the remote and track""" return self._branch_path @property - def branch_name(self): + def branch_name(self) -> str: """:return: the name of the branch, which is the shortest possible branch name""" # use an instance method, for this we create a temporary Head instance # which uses a repository that is available at least ( it makes no difference ) return git.Head(self.repo, self._branch_path).name @property - def url(self): + def url(self) -> str: """:return: The url to the repository which our module - repository refers to""" return self._url @property - def parent_commit(self): + def parent_commit(self) -> 'Commit_ish': """:return: Commit instance with the tree containing the .gitmodules file :note: will always point to the current head's commit if it was not set explicitly""" if self._parent_commit is None: @@ -1175,7 +1189,7 @@ def parent_commit(self): return self._parent_commit @property - def name(self): + def name(self) -> str: """:return: The name of this submodule. It is used to identify it within the .gitmodules file. :note: by default, the name is the path at which to find the submodule, but From 06eca0b84a4538c642c5e1afa2f3441a96bef444 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 16:47:39 +0100 Subject: [PATCH 0563/2375] Make subodule a forward ref in Index.base --- git/index/base.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/git/index/base.py b/git/index/base.py index 8346d24a4..b37883a6f 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -22,7 +22,6 @@ ) from git.objects import ( Blob, - Submodule, Tree, Object, Commit, @@ -76,6 +75,7 @@ from git.repo import Repo from git.refs.reference import Reference from git.util import Actor + from git.objects.submodule.base import Submodule StageType = int @@ -842,7 +842,7 @@ def _items_to_rela_paths(self, items): items = [items] for item in items: - if isinstance(item, (BaseIndexEntry, (Blob, Submodule))): + if isinstance(item, (BaseIndexEntry, (Blob, 'Submodule'))): paths.append(self._to_relative_path(item.path)) elif isinstance(item, str): paths.append(self._to_relative_path(item)) @@ -853,7 +853,7 @@ def _items_to_rela_paths(self, items): @post_clear_cache @default_index - def remove(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, Submodule]], working_tree: bool = False, + def remove(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, 'Submodule']], working_tree: bool = False, **kwargs: Any) -> List[str]: """Remove the given items from the index and optionally from the working tree as well. @@ -905,7 +905,7 @@ def remove(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, Submodule @post_clear_cache @default_index - def move(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, Submodule]], skip_errors: bool = False, + def move(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, 'Submodule']], skip_errors: bool = False, **kwargs: Any) -> List[Tuple[str, str]]: """Rename/move the items, whereas the last item is considered the destination of the move operation. If the destination is a file, the first item ( of two ) From 33ffd0b2ed117d043fe828e5f2eabe5c8f8b0b66 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 16:51:34 +0100 Subject: [PATCH 0564/2375] Make subodule a forward ref in Index.base2 --- git/index/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/index/base.py b/git/index/base.py index b37883a6f..5a564b8cf 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -75,7 +75,7 @@ from git.repo import Repo from git.refs.reference import Reference from git.util import Actor - from git.objects.submodule.base import Submodule + from git.objects import Submodule StageType = int From af7cee514632a4a3825dbb5655a208d2ebd1f67f Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 16:57:12 +0100 Subject: [PATCH 0565/2375] Make Repo a forward ref in Submodule.base --- git/objects/submodule/base.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 87a86749e..847b43256 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -47,16 +47,16 @@ find_first_remote_branch ) -from git.repo import Repo # typing ---------------------------------------------------------------------- -from typing import Callable, Dict, Mapping, Sequence, TYPE_CHECKING +from typing import Callable, Dict, Mapping, Sequence, TYPE_CHECKING, cast from typing import Any, Iterator, Union from git.types import Commit_ish, PathLike, TBD if TYPE_CHECKING: from git.index import IndexFile + from git.repo import Repo # ----------------------------------------------------------------------------- @@ -589,7 +589,7 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: if not dry_run: # see whether we have a valid branch to checkout try: - assert isinstance(mrepo, Repo) + mrepo = cast('Repo', mrepo) # find a remote which has our branch - we try to be flexible remote_branch = find_first_remote_branch(mrepo.remotes, self.branch_name) local_branch = mkhead(mrepo, self.branch_path) From f372187ade056a3069e68ba0a90bf53bd7d7e464 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 17:00:44 +0100 Subject: [PATCH 0566/2375] Make subodule a forward ref in Index.base3 --- git/index/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/index/base.py b/git/index/base.py index 5a564b8cf..edb79edfc 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -593,7 +593,7 @@ def _to_relative_path(self, path: PathLike) -> PathLike: raise ValueError("Absolute path %r is not in git repository at %r" % (path, self.repo.working_tree_dir)) return os.path.relpath(path, self.repo.working_tree_dir) - def _preprocess_add_items(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, Submodule]] + def _preprocess_add_items(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, 'Submodule']] ) -> Tuple[List[PathLike], List[BaseIndexEntry]]: """ Split the items into two lists of path strings and BaseEntries. """ paths = [] @@ -664,7 +664,7 @@ def _entries_for_paths(self, paths: List[str], path_rewriter: Callable, fprogres # END path handling return entries_added - def add(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, Submodule]], force: bool = True, + def add(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, 'Submodule']], force: bool = True, fprogress: Callable = lambda *args: None, path_rewriter: Callable = None, write: bool = True, write_extension_data: bool = False) -> List[BaseIndexEntry]: """Add files from the working tree, specific blobs or BaseIndexEntries From de36cb6f0391fcf4d756909e0cec429599585700 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 17:04:48 +0100 Subject: [PATCH 0567/2375] UnMake subodule a forward ref in Index.base --- git/index/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/index/base.py b/git/index/base.py index edb79edfc..b54a19a7c 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -22,6 +22,7 @@ ) from git.objects import ( Blob, + Submodule, Tree, Object, Commit, @@ -75,7 +76,6 @@ from git.repo import Repo from git.refs.reference import Reference from git.util import Actor - from git.objects import Submodule StageType = int From 3cc0edce2a0deb159cfb3dca10b6044086900ce9 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 17:07:40 +0100 Subject: [PATCH 0568/2375] UnMake subodule a forward ref in Index.base2 --- git/index/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/index/base.py b/git/index/base.py index b54a19a7c..50bcf5042 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -842,7 +842,7 @@ def _items_to_rela_paths(self, items): items = [items] for item in items: - if isinstance(item, (BaseIndexEntry, (Blob, 'Submodule'))): + if isinstance(item, (BaseIndexEntry, (Blob, Submodule))): paths.append(self._to_relative_path(item.path)) elif isinstance(item, str): paths.append(self._to_relative_path(item)) From 28bde3978b4ca18dc97488b88b4424a2d521ac68 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 17:14:43 +0100 Subject: [PATCH 0569/2375] Type index _items_to_rela_paths() --- git/index/base.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/git/index/base.py b/git/index/base.py index 50bcf5042..c6d925261 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -833,12 +833,13 @@ def handle_null_entries(self): return entries_added - def _items_to_rela_paths(self, items): + def _items_to_rela_paths(self, items: Union[PathLike, Sequence[Union[PathLike, BaseIndexEntry, Blob, Submodule]]] + ) -> List[PathLike]: """Returns a list of repo-relative paths from the given items which may be absolute or relative paths, entries or blobs""" paths = [] # if string put in list - if isinstance(items, str): + if isinstance(items, (str, os.PathLike)): items = [items] for item in items: @@ -851,8 +852,8 @@ def _items_to_rela_paths(self, items): # END for each item return paths - @post_clear_cache - @default_index + @ post_clear_cache + @ default_index def remove(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, 'Submodule']], working_tree: bool = False, **kwargs: Any) -> List[str]: """Remove the given items from the index and optionally from @@ -903,8 +904,8 @@ def remove(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, 'Submodul # rm 'path' return [p[4:-1] for p in removed_paths] - @post_clear_cache - @default_index + @ post_clear_cache + @ default_index def move(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, 'Submodule']], skip_errors: bool = False, **kwargs: Any) -> List[Tuple[str, str]]: """Rename/move the items, whereas the last item is considered the destination of @@ -1023,7 +1024,7 @@ def _flush_stdin_and_wait(cls, proc: 'Popen[bytes]', ignore_stdout: bool = False proc.wait() return stdout - @default_index + @ default_index def checkout(self, paths: Union[None, Iterable[PathLike]] = None, force: bool = False, fprogress: Callable = lambda *args: None, **kwargs: Any ) -> Union[None, Iterator[PathLike], Sequence[PathLike]]: @@ -1192,7 +1193,7 @@ def handle_stderr(proc: 'Popen[bytes]', iter_checked_out_files: Iterable[PathLik # END paths handling assert "Should not reach this point" - @default_index + @ default_index def reset(self, commit: Union[Commit, 'Reference', str] = 'HEAD', working_tree: bool = False, paths: Union[None, Iterable[PathLike]] = None, head: bool = False, **kwargs: Any) -> 'IndexFile': @@ -1262,7 +1263,7 @@ def reset(self, commit: Union[Commit, 'Reference', str] = 'HEAD', working_tree: return self - @default_index + @ default_index def diff(self, other: Union[diff.Diffable.Index, 'IndexFile.Index', Treeish, None, object] = diff.Diffable.Index, paths: Union[str, List[PathLike], Tuple[PathLike, ...]] = None, create_patch: bool = False, **kwargs: Any ) -> diff.DiffIndex: From 1d0e666ebfdbe7eeb80b3d859f7e3823d36256e3 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 17:19:02 +0100 Subject: [PATCH 0570/2375] Check change_levels (should fail) --- git/diff.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/diff.py b/git/diff.py index 7de4276aa..14f823a1c 100644 --- a/git/diff.py +++ b/git/diff.py @@ -28,8 +28,8 @@ def is_change_type(inp: str) -> TypeGuard[Lit_change_type]: - return True - # return inp in ['A', 'D', 'C', 'M', 'R', 'T'] + # return True + return inp in ['A', 'D', 'C', 'M', 'R', 'T'] # ------------------------------------------------------------------------ From e9858513addf8a4ee69890d46f58c5ef2528a6ab Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 17:22:37 +0100 Subject: [PATCH 0571/2375] Add 'U' to change_levels (should pass) --- git/diff.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/diff.py b/git/diff.py index 14f823a1c..6c34a871e 100644 --- a/git/diff.py +++ b/git/diff.py @@ -24,12 +24,12 @@ from subprocess import Popen -Lit_change_type = Literal['A', 'D', 'C', 'M', 'R', 'T'] +Lit_change_type = Literal['A', 'D', 'C', 'M', 'R', 'T', 'U'] def is_change_type(inp: str) -> TypeGuard[Lit_change_type]: # return True - return inp in ['A', 'D', 'C', 'M', 'R', 'T'] + return inp in ['A', 'D', 'C', 'M', 'R', 'T', 'U'] # ------------------------------------------------------------------------ From 873ebe61431c50bb39afd5cafff498b3e1879342 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 6 Jul 2021 17:56:24 +0100 Subject: [PATCH 0572/2375] Make diff.DiffIndex generic List['Diff'] --- git/diff.py | 28 ++++++++++++++++------------ git/index/util.py | 8 ++++---- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/git/diff.py b/git/diff.py index 6c34a871e..d3b186525 100644 --- a/git/diff.py +++ b/git/diff.py @@ -15,12 +15,13 @@ # typing ------------------------------------------------------------------ -from typing import Any, Iterator, List, Match, Optional, Tuple, Type, Union, TYPE_CHECKING, cast +from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING from git.types import PathLike, TBD, Literal, TypeGuard if TYPE_CHECKING: from .objects.tree import Tree from git.repo.base import Repo + from git.objects.base import IndexObject from subprocess import Popen @@ -175,7 +176,10 @@ def diff(self, other: Union[Type[Index], Type['Tree'], object, None, str] = Inde return index -class DiffIndex(list): +T_Diff = TypeVar('T_Diff', bound='Diff') + + +class DiffIndex(List[T_Diff]): """Implements an Index for diffs, allowing a list of Diffs to be queried by the diff properties. @@ -189,7 +193,7 @@ class DiffIndex(list): # T = Changed in the type change_type = ("A", "C", "D", "R", "M", "T") - def iter_change_type(self, change_type: Lit_change_type) -> Iterator['Diff']: + def iter_change_type(self, change_type: Lit_change_type) -> Iterator[T_Diff]: """ :return: iterator yielding Diff instances that match the given change_type @@ -207,8 +211,6 @@ def iter_change_type(self, change_type: Lit_change_type) -> Iterator['Diff']: raise ValueError("Invalid change type: %s" % change_type) for diff in self: - diff = cast('Diff', diff) - if diff.change_type == change_type: yield diff elif change_type == "A" and diff.new_file: @@ -289,7 +291,7 @@ def __init__(self, repo: 'Repo', a_mode: Union[bytes, str, None], b_mode: Union[bytes, str, None], new_file: bool, deleted_file: bool, copied_file: bool, raw_rename_from: Optional[bytes], raw_rename_to: Optional[bytes], - diff: Union[str, bytes, None], change_type: Optional[str], score: Optional[int]) -> None: + diff: Union[str, bytes, None], change_type: Optional[Lit_change_type], score: Optional[int]) -> None: assert a_rawpath is None or isinstance(a_rawpath, bytes) assert b_rawpath is None or isinstance(b_rawpath, bytes) @@ -308,19 +310,21 @@ def __init__(self, repo: 'Repo', repo = submodule.module() break + self.a_blob: Union['IndexObject', None] if a_blob_id is None or a_blob_id == self.NULL_HEX_SHA: self.a_blob = None else: self.a_blob = Blob(repo, hex_to_bin(a_blob_id), mode=self.a_mode, path=self.a_path) + self.b_blob: Union['IndexObject', None] if b_blob_id is None or b_blob_id == self.NULL_HEX_SHA: self.b_blob = None else: self.b_blob = Blob(repo, hex_to_bin(b_blob_id), mode=self.b_mode, path=self.b_path) - self.new_file = new_file - self.deleted_file = deleted_file - self.copied_file = copied_file + self.new_file: bool = new_file + self.deleted_file: bool = deleted_file + self.copied_file: bool = copied_file # be clear and use None instead of empty strings assert raw_rename_from is None or isinstance(raw_rename_from, bytes) @@ -329,7 +333,7 @@ def __init__(self, repo: 'Repo', self.raw_rename_to = raw_rename_to or None self.diff = diff - self.change_type = change_type + self.change_type: Union[Lit_change_type, None] = change_type self.score = score def __eq__(self, other: object) -> bool: @@ -449,7 +453,7 @@ def _index_from_patch_format(cls, repo: 'Repo', proc: TBD) -> DiffIndex: # for now, we have to bake the stream text = b''.join(text_list) - index = DiffIndex() + index: 'DiffIndex' = DiffIndex() previous_header = None header = None a_path, b_path = None, None # for mypy @@ -560,7 +564,7 @@ def _index_from_raw_format(cls, repo: 'Repo', proc: 'Popen') -> 'DiffIndex': # handles # :100644 100644 687099101... 37c5e30c8... M .gitignore - index = DiffIndex() + index: 'DiffIndex' = DiffIndex() handle_process_output(proc, lambda byt: cls._handle_diff_line(byt, repo, index), None, finalize_process, decode_streams=False) diff --git a/git/index/util.py b/git/index/util.py index e0daef0cf..3b3d6489b 100644 --- a/git/index/util.py +++ b/git/index/util.py @@ -52,7 +52,7 @@ def __del__(self) -> None: #{ Decorators -def post_clear_cache(func: Callable[..., Any]) -> Callable[..., Any]: +def post_clear_cache(func: Callable[..., _T]) -> Callable[..., _T]: """Decorator for functions that alter the index using the git command. This would invalidate our possibly existing entries dictionary which is why it must be deleted to allow it to be lazily reread later. @@ -63,7 +63,7 @@ def post_clear_cache(func: Callable[..., Any]) -> Callable[..., Any]: """ @wraps(func) - def post_clear_cache_if_not_raised(self, *args: Any, **kwargs: Any) -> Any: + def post_clear_cache_if_not_raised(self, *args: Any, **kwargs: Any) -> _T: rval = func(self, *args, **kwargs) self._delete_entries_cache() return rval @@ -72,13 +72,13 @@ def post_clear_cache_if_not_raised(self, *args: Any, **kwargs: Any) -> Any: return post_clear_cache_if_not_raised -def default_index(func: Callable[..., Any]) -> Callable[..., Any]: +def default_index(func: Callable[..., _T]) -> Callable[..., _T]: """Decorator assuring the wrapped method may only run if we are the default repository index. This is as we rely on git commands that operate on that index only. """ @wraps(func) - def check_default_index(self, *args: Any, **kwargs: Any) -> Any: + def check_default_index(self, *args: Any, **kwargs: Any) -> _T: if self._file_path != self._index_path(): raise AssertionError( "Cannot call %r on indices that do not represent the default git index" % func.__name__) From 2e2fe186d09272c3cb6c96467fff362deb90994f Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 8 Jul 2021 11:30:16 +0100 Subject: [PATCH 0573/2375] Increase mypy strictness (no_implicit_optional & warn_redundant_casts) and fix errors --- git/cmd.py | 2 +- git/config.py | 5 +++-- git/index/base.py | 10 ++++++---- git/objects/commit.py | 2 +- git/objects/submodule/base.py | 6 +++--- git/objects/tree.py | 1 - git/repo/base.py | 8 ++++---- git/types.py | 15 +++------------ mypy.ini | 5 +++++ 9 files changed, 26 insertions(+), 28 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index 7df855817..dd887a18b 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -831,7 +831,7 @@ def execute(self, except cmd_not_found_exception as err: raise GitCommandNotFound(redacted_command, err) from err else: - proc = cast(Popen, proc) + # replace with a typeguard for Popen[bytes]? proc.stdout = cast(BinaryIO, proc.stdout) proc.stderr = cast(BinaryIO, proc.stderr) diff --git a/git/config.py b/git/config.py index 0ce3e8313..19ce1f849 100644 --- a/git/config.py +++ b/git/config.py @@ -34,7 +34,7 @@ from typing import (Any, Callable, IO, List, Dict, Sequence, TYPE_CHECKING, Tuple, Union, cast, overload) -from git.types import Lit_config_levels, ConfigLevels_Tup, PathLike, TBD, assert_never +from git.types import Lit_config_levels, ConfigLevels_Tup, PathLike, TBD, assert_never, is_config_level if TYPE_CHECKING: from git.repo.base import Repo @@ -54,6 +54,7 @@ CONFIG_LEVELS: ConfigLevels_Tup = ("system", "user", "global", "repository") + # Section pattern to detect conditional includes. # https://git-scm.com/docs/git-config#_conditional_includes CONDITIONAL_INCLUDE_REGEXP = re.compile(r"(?<=includeIf )\"(gitdir|gitdir/i|onbranch):(.+)\"") @@ -310,7 +311,7 @@ def __init__(self, file_or_files: Union[None, PathLike, 'BytesIO', Sequence[Unio if read_only: self._file_or_files = [get_config_path(f) for f in CONFIG_LEVELS - if f != 'repository'] + if is_config_level(f) and f != 'repository'] else: raise ValueError("No configuration level or configuration files specified") else: diff --git a/git/index/base.py b/git/index/base.py index c6d925261..d6670b2a6 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -113,7 +113,7 @@ class IndexFile(LazyMixin, diff.Diffable, Serializable): _VERSION = 2 # latest version we support S_IFGITLINK = S_IFGITLINK # a submodule - def __init__(self, repo: 'Repo', file_path: PathLike = None) -> None: + def __init__(self, repo: 'Repo', file_path: Union[PathLike, None] = None) -> None: """Initialize this Index instance, optionally from the given ``file_path``. If no file_path is given, we will be created from the current index file. @@ -665,7 +665,7 @@ def _entries_for_paths(self, paths: List[str], path_rewriter: Callable, fprogres return entries_added def add(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, 'Submodule']], force: bool = True, - fprogress: Callable = lambda *args: None, path_rewriter: Callable = None, + fprogress: Callable = lambda *args: None, path_rewriter: Union[Callable[..., PathLike], None] = None, write: bool = True, write_extension_data: bool = False) -> List[BaseIndexEntry]: """Add files from the working tree, specific blobs or BaseIndexEntries to the index. @@ -970,7 +970,8 @@ def move(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, 'Submodule' return out def commit(self, message: str, parent_commits=None, head: bool = True, author: Union[None, 'Actor'] = None, - committer: Union[None, 'Actor'] = None, author_date: str = None, commit_date: str = None, + committer: Union[None, 'Actor'] = None, author_date: Union[str, None] = None, + commit_date: Union[str, None] = None, skip_hooks: bool = False) -> Commit: """Commit the current default index file, creating a commit object. For more information on the arguments, see tree.commit. @@ -1265,7 +1266,8 @@ def reset(self, commit: Union[Commit, 'Reference', str] = 'HEAD', working_tree: @ default_index def diff(self, other: Union[diff.Diffable.Index, 'IndexFile.Index', Treeish, None, object] = diff.Diffable.Index, - paths: Union[str, List[PathLike], Tuple[PathLike, ...]] = None, create_patch: bool = False, **kwargs: Any + paths: Union[str, List[PathLike], Tuple[PathLike, ...], None] = None, + create_patch: bool = False, **kwargs: Any ) -> diff.DiffIndex: """Diff this index against the working copy or a Tree or Commit object diff --git a/git/objects/commit.py b/git/objects/commit.py index 81978ae8a..65a87591e 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -80,7 +80,7 @@ class Commit(base.Object, TraversableIterableObj, Diffable, Serializable): "message", "parents", "encoding", "gpgsig") _id_attribute_ = "hexsha" - def __init__(self, repo: 'Repo', binsha: bytes, tree: 'Tree' = None, + def __init__(self, repo: 'Repo', binsha: bytes, tree: Union['Tree', None] = None, author: Union[Actor, None] = None, authored_date: Union[int, None] = None, author_tz_offset: Union[None, float] = None, diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 847b43256..5539069c0 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -115,7 +115,7 @@ def __init__(self, repo: 'Repo', binsha: bytes, path: Union[PathLike, None] = None, name: Union[str, None] = None, parent_commit: Union[Commit_ish, None] = None, - url: str = None, + url: Union[str, None] = None, branch_path: Union[PathLike, None] = None ) -> None: """Initialize this instance with its attributes. We only document the ones @@ -339,7 +339,7 @@ def _write_git_file_and_module_config(cls, working_tree_dir: PathLike, module_ab @classmethod def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = None, branch: Union[str, None] = None, no_checkout: bool = False, depth: Union[int, None] = None, - env: Mapping[str, str] = None, clone_multi_options: Union[Sequence[TBD], None] = None + env: Union[Mapping[str, str], None] = None, clone_multi_options: Union[Sequence[TBD], None] = None ) -> 'Submodule': """Add a new submodule to the given repository. This will alter the index as well as the .gitmodules file, but will not create a new commit. @@ -481,7 +481,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No def update(self, recursive: bool = False, init: bool = True, to_latest_revision: bool = False, progress: Union['UpdateProgress', None] = None, dry_run: bool = False, - force: bool = False, keep_going: bool = False, env: Mapping[str, str] = None, + force: bool = False, keep_going: bool = False, env: Union[Mapping[str, str], None] = None, clone_multi_options: Union[Sequence[TBD], None] = None): """Update the repository of this submodule to point to the checkout we point at with the binsha of this instance. diff --git a/git/objects/tree.py b/git/objects/tree.py index 2e8d8a794..34fb93dc2 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -216,7 +216,6 @@ def __init__(self, repo: 'Repo', binsha: bytes, mode: int = tree_id << 12, path: def _get_intermediate_items(cls, index_object: 'Tree', ) -> Union[Tuple['Tree', ...], Tuple[()]]: if index_object.type == "tree": - index_object = cast('Tree', index_object) return tuple(index_object._iter_convert_to_object(index_object._cache)) return () diff --git a/git/repo/base.py b/git/repo/base.py index a6f91aeeb..3214b528e 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -36,7 +36,7 @@ # typing ------------------------------------------------------ -from git.types import TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish +from git.types import TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish, is_config_level from typing import (Any, BinaryIO, Callable, Dict, Iterator, List, Mapping, Optional, Sequence, TextIO, Tuple, Type, Union, @@ -498,7 +498,7 @@ def config_reader(self, config_level: Optional[Lit_config_levels] = None) -> Git unknown, instead the global path will be used.""" files = None if config_level is None: - files = [self._get_config_path(f) for f in self.config_level] + files = [self._get_config_path(f) for f in self.config_level if is_config_level(f)] else: files = [self._get_config_path(config_level)] return GitConfigParser(files, read_only=True, repo=self) @@ -623,7 +623,7 @@ def is_ancestor(self, ancestor_rev: 'Commit', rev: 'Commit') -> bool: raise return True - def is_valid_object(self, sha: str, object_type: str = None) -> bool: + def is_valid_object(self, sha: str, object_type: Union[str, None] = None) -> bool: try: complete_sha = self.odb.partial_to_complete_sha_hex(sha) object_info = self.odb.info(complete_sha) @@ -976,7 +976,7 @@ def blame(self, rev: TBD, file: TBD, incremental: bool = False, **kwargs: Any return blames @classmethod - def init(cls, path: PathLike = None, mkdir: bool = True, odbt: Type[GitCmdObjectDB] = GitCmdObjectDB, + def init(cls, path: Union[PathLike, None] = None, mkdir: bool = True, odbt: Type[GitCmdObjectDB] = GitCmdObjectDB, expand_vars: bool = True, **kwargs: Any) -> 'Repo': """Initialize a git repository at the given path if specified diff --git a/git/types.py b/git/types.py index 00f1ae579..f15db3b4b 100644 --- a/git/types.py +++ b/git/types.py @@ -39,20 +39,11 @@ def is_config_level(inp: str) -> TypeGuard[Lit_config_levels]: - return inp in ('system', 'global', 'user', 'repository') + # return inp in get_args(Lit_config_level) # only py >= 3.8 + return inp in ("system", "user", "global", "repository") -class ConfigLevels_NT(NamedTuple): - """NamedTuple of allowed CONFIG_LEVELS""" - # works for pylance, but not mypy - system: Literal['system'] - user: Literal['user'] - global_: Literal['global'] - repository: Literal['repository'] - - -ConfigLevels_Tup = Tuple[Lit_config_levels, Lit_config_levels, Lit_config_levels, Lit_config_levels] -# Typing this as specific literals breaks for mypy +ConfigLevels_Tup = Tuple[Literal['system'], Literal['user'], Literal['global'], Literal['repository']] def assert_never(inp: NoReturn, exc: Union[Exception, None] = None) -> NoReturn: diff --git a/mypy.ini b/mypy.ini index 8f86a6af7..67397d40f 100644 --- a/mypy.ini +++ b/mypy.ini @@ -3,6 +3,11 @@ # TODO: enable when we've fully annotated everything # disallow_untyped_defs = True +no_implicit_optional = True +warn_redundant_casts = True +# warn_unused_ignores = True +# warn_unreachable = True +pretty = True # TODO: remove when 'gitdb' is fully annotated [mypy-gitdb.*] From 5d3818ed3d51d400517a352b5b62e966164af8cf Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 8 Jul 2021 21:42:30 +0100 Subject: [PATCH 0574/2375] Finish initial typing of index folder --- git/index/base.py | 31 +++++++++++++-------- git/index/fun.py | 62 +++++++++++++++++++++++------------------ git/index/util.py | 13 +++++---- git/objects/fun.py | 68 +++++++++++++++++++++++++++++++-------------- git/objects/tree.py | 20 ++++++------- git/types.py | 10 +++---- 6 files changed, 123 insertions(+), 81 deletions(-) diff --git a/git/index/base.py b/git/index/base.py index d6670b2a6..1812faeeb 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -18,6 +18,7 @@ from git.exc import ( GitCommandError, CheckoutError, + GitError, InvalidGitRepositoryError ) from git.objects import ( @@ -66,10 +67,10 @@ # typing ----------------------------------------------------------------------------- -from typing import (Any, BinaryIO, Callable, Dict, IO, Iterable, Iterator, List, +from typing import (Any, BinaryIO, Callable, Dict, IO, Iterable, Iterator, List, NoReturn, Sequence, TYPE_CHECKING, Tuple, Union) -from git.types import PathLike, TBD +from git.types import Commit_ish, PathLike, TBD if TYPE_CHECKING: from subprocess import Popen @@ -372,13 +373,13 @@ def from_tree(cls, repo: 'Repo', *treeish: Treeish, **kwargs: Any) -> 'IndexFile # UTILITIES @unbare_repo - def _iter_expand_paths(self, paths: Sequence[PathLike]) -> Iterator[PathLike]: + def _iter_expand_paths(self: 'IndexFile', paths: Sequence[PathLike]) -> Iterator[PathLike]: """Expand the directories in list of paths to the corresponding paths accordingly, Note: git will add items multiple times even if a glob overlapped with manually specified paths or if paths where specified multiple times - we respect that and do not prune""" - def raise_exc(e): + def raise_exc(e: Exception) -> NoReturn: raise e r = str(self.repo.working_tree_dir) rs = r + os.sep @@ -426,7 +427,8 @@ def raise_exc(e): # END path exception handling # END for each path - def _write_path_to_stdin(self, proc: 'Popen', filepath: PathLike, item, fmakeexc, fprogress, + def _write_path_to_stdin(self, proc: 'Popen', filepath: PathLike, item: TBD, fmakeexc: Callable[..., GitError], + fprogress: Callable[[PathLike, bool, TBD], None], read_from_stdout: bool = True) -> Union[None, str]: """Write path to proc.stdin and make sure it processes the item, including progress. @@ -498,7 +500,7 @@ def unmerged_blobs(self) -> Dict[PathLike, List[Tuple[StageType, Blob]]]: line.sort() return path_map - @classmethod + @ classmethod def entry_key(cls, *entry: Union[BaseIndexEntry, PathLike, StageType]) -> Tuple[PathLike, StageType]: return entry_key(*entry) @@ -631,8 +633,8 @@ def _store_path(self, filepath: PathLike, fprogress: Callable) -> BaseIndexEntry return BaseIndexEntry((stat_mode_to_index_mode(st.st_mode), istream.binsha, 0, to_native_path_linux(filepath))) - @unbare_repo - @git_working_dir + @ unbare_repo + @ git_working_dir def _entries_for_paths(self, paths: List[str], path_rewriter: Callable, fprogress: Callable, entries: List[BaseIndexEntry]) -> List[BaseIndexEntry]: entries_added: List[BaseIndexEntry] = [] @@ -788,8 +790,8 @@ def add(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, 'Submodule'] # create objects if required, otherwise go with the existing shas null_entries_indices = [i for i, e in enumerate(entries) if e.binsha == Object.NULL_BIN_SHA] if null_entries_indices: - @git_working_dir - def handle_null_entries(self): + @ git_working_dir + def handle_null_entries(self: 'IndexFile') -> None: for ei in null_entries_indices: null_entry = entries[ei] new_entry = self._store_path(null_entry.path, fprogress) @@ -969,8 +971,13 @@ def move(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, 'Submodule' return out - def commit(self, message: str, parent_commits=None, head: bool = True, author: Union[None, 'Actor'] = None, - committer: Union[None, 'Actor'] = None, author_date: Union[str, None] = None, + def commit(self, + message: str, + parent_commits: Union[Commit_ish, None] = None, + head: bool = True, + author: Union[None, 'Actor'] = None, + committer: Union[None, 'Actor'] = None, + author_date: Union[str, None] = None, commit_date: Union[str, None] = None, skip_hooks: bool = False) -> Commit: """Commit the current default index file, creating a commit object. diff --git a/git/index/fun.py b/git/index/fun.py index ffd109b1f..74f6efbf3 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -57,6 +57,7 @@ if TYPE_CHECKING: from .base import IndexFile + from git.objects.fun import EntryTup # ------------------------------------------------------------------------------------ @@ -188,7 +189,7 @@ def entry_key(*entry: Union[BaseIndexEntry, PathLike, int]) -> Tuple[PathLike, i def is_entry_tuple(entry: Tuple) -> TypeGuard[Tuple[PathLike, int]]: return isinstance(entry, tuple) and len(entry) == 2 - + if len(entry) == 1: entry_first = entry[0] assert isinstance(entry_first, BaseIndexEntry) @@ -259,8 +260,8 @@ def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 :param sl: slice indicating the range we should process on the entries list :return: tuple(binsha, list(tree_entry, ...)) a tuple of a sha and a list of tree entries being a tuple of hexsha, mode, name""" - tree_items = [] # type: List[Tuple[Union[bytes, str], int, str]] - tree_items_append = tree_items.append + tree_items: List[Tuple[bytes, int, str]] = [] + ci = sl.start end = sl.stop while ci < end: @@ -272,7 +273,7 @@ def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 rbound = entry.path.find('/', si) if rbound == -1: # its not a tree - tree_items_append((entry.binsha, entry.mode, entry.path[si:])) + tree_items.append((entry.binsha, entry.mode, entry.path[si:])) else: # find common base range base = entry.path[si:rbound] @@ -289,7 +290,7 @@ def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 # enter recursion # ci - 1 as we want to count our current item as well sha, _tree_entry_list = write_tree_from_cache(entries, odb, slice(ci - 1, xi), rbound + 1) - tree_items_append((sha, S_IFDIR, base)) + tree_items.append((sha, S_IFDIR, base)) # skip ahead ci = xi @@ -306,7 +307,7 @@ def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 return (istream.binsha, tree_items_stringified) -def _tree_entry_to_baseindexentry(tree_entry: Tuple[str, int, str], stage: int) -> BaseIndexEntry: +def _tree_entry_to_baseindexentry(tree_entry: Tuple[bytes, int, str], stage: int) -> BaseIndexEntry: return BaseIndexEntry((tree_entry[1], tree_entry[0], stage << CE_STAGESHIFT, tree_entry[2])) @@ -319,14 +320,13 @@ def aggressive_tree_merge(odb, tree_shas: Sequence[bytes]) -> List[BaseIndexEntr :param tree_shas: 1, 2 or 3 trees as identified by their binary 20 byte shas If 1 or two, the entries will effectively correspond to the last given tree If 3 are given, a 3 way merge is performed""" - out = [] # type: List[BaseIndexEntry] - out_append = out.append + out: List[BaseIndexEntry] = [] # one and two way is the same for us, as we don't have to handle an existing # index, instrea if len(tree_shas) in (1, 2): for entry in traverse_tree_recursive(odb, tree_shas[-1], ''): - out_append(_tree_entry_to_baseindexentry(entry, 0)) + out.append(_tree_entry_to_baseindexentry(entry, 0)) # END for each entry return out # END handle single tree @@ -334,8 +334,16 @@ def aggressive_tree_merge(odb, tree_shas: Sequence[bytes]) -> List[BaseIndexEntr if len(tree_shas) > 3: raise ValueError("Cannot handle %i trees at once" % len(tree_shas)) + EntryTupOrNone = Union[EntryTup, None] + + def is_three_entry_list(inp) -> TypeGuard[List[EntryTupOrNone]]: + return isinstance(inp, list) and len(inp) == 3 + # three trees - for base, ours, theirs in traverse_trees_recursive(odb, tree_shas, ''): + for three_entries in traverse_trees_recursive(odb, tree_shas, ''): + + assert is_three_entry_list(three_entries) + base, ours, theirs = three_entries if base is not None: # base version exists if ours is not None: @@ -347,23 +355,23 @@ def aggressive_tree_merge(odb, tree_shas: Sequence[bytes]) -> List[BaseIndexEntr if(base[0] != ours[0] and base[0] != theirs[0] and ours[0] != theirs[0]) or \ (base[1] != ours[1] and base[1] != theirs[1] and ours[1] != theirs[1]): # changed by both - out_append(_tree_entry_to_baseindexentry(base, 1)) - out_append(_tree_entry_to_baseindexentry(ours, 2)) - out_append(_tree_entry_to_baseindexentry(theirs, 3)) + out.append(_tree_entry_to_baseindexentry(base, 1)) + out.append(_tree_entry_to_baseindexentry(ours, 2)) + out.append(_tree_entry_to_baseindexentry(theirs, 3)) elif base[0] != ours[0] or base[1] != ours[1]: # only we changed it - out_append(_tree_entry_to_baseindexentry(ours, 0)) + out.append(_tree_entry_to_baseindexentry(ours, 0)) else: # either nobody changed it, or they did. In either # case, use theirs - out_append(_tree_entry_to_baseindexentry(theirs, 0)) + out.append(_tree_entry_to_baseindexentry(theirs, 0)) # END handle modification else: if ours[0] != base[0] or ours[1] != base[1]: # they deleted it, we changed it, conflict - out_append(_tree_entry_to_baseindexentry(base, 1)) - out_append(_tree_entry_to_baseindexentry(ours, 2)) + out.append(_tree_entry_to_baseindexentry(base, 1)) + out.append(_tree_entry_to_baseindexentry(ours, 2)) # else: # we didn't change it, ignore # pass @@ -376,8 +384,8 @@ def aggressive_tree_merge(odb, tree_shas: Sequence[bytes]) -> List[BaseIndexEntr else: if theirs[0] != base[0] or theirs[1] != base[1]: # deleted in ours, changed theirs, conflict - out_append(_tree_entry_to_baseindexentry(base, 1)) - out_append(_tree_entry_to_baseindexentry(theirs, 3)) + out.append(_tree_entry_to_baseindexentry(base, 1)) + out.append(_tree_entry_to_baseindexentry(theirs, 3)) # END theirs changed # else: # theirs didn't change @@ -386,20 +394,20 @@ def aggressive_tree_merge(odb, tree_shas: Sequence[bytes]) -> List[BaseIndexEntr # END handle ours else: # all three can't be None - if ours is None: + if ours is None and theirs is not None: # added in their branch - out_append(_tree_entry_to_baseindexentry(theirs, 0)) - elif theirs is None: + out.append(_tree_entry_to_baseindexentry(theirs, 0)) + elif theirs is None and ours is not None: # added in our branch - out_append(_tree_entry_to_baseindexentry(ours, 0)) - else: + out.append(_tree_entry_to_baseindexentry(ours, 0)) + elif ours is not None and theirs is not None: # both have it, except for the base, see whether it changed if ours[0] != theirs[0] or ours[1] != theirs[1]: - out_append(_tree_entry_to_baseindexentry(ours, 2)) - out_append(_tree_entry_to_baseindexentry(theirs, 3)) + out.append(_tree_entry_to_baseindexentry(ours, 2)) + out.append(_tree_entry_to_baseindexentry(theirs, 3)) else: # it was added the same in both - out_append(_tree_entry_to_baseindexentry(ours, 0)) + out.append(_tree_entry_to_baseindexentry(ours, 0)) # END handle two items # END handle heads # END handle base exists diff --git a/git/index/util.py b/git/index/util.py index 3b3d6489b..4f8af5531 100644 --- a/git/index/util.py +++ b/git/index/util.py @@ -11,10 +11,13 @@ # typing ---------------------------------------------------------------------- -from typing import (Any, Callable) +from typing import (Any, Callable, TYPE_CHECKING) from git.types import PathLike, _T +if TYPE_CHECKING: + from git.index import IndexFile + # --------------------------------------------------------------------------------- @@ -63,7 +66,7 @@ def post_clear_cache(func: Callable[..., _T]) -> Callable[..., _T]: """ @wraps(func) - def post_clear_cache_if_not_raised(self, *args: Any, **kwargs: Any) -> _T: + def post_clear_cache_if_not_raised(self: 'IndexFile', *args: Any, **kwargs: Any) -> _T: rval = func(self, *args, **kwargs) self._delete_entries_cache() return rval @@ -78,7 +81,7 @@ def default_index(func: Callable[..., _T]) -> Callable[..., _T]: on that index only. """ @wraps(func) - def check_default_index(self, *args: Any, **kwargs: Any) -> _T: + def check_default_index(self: 'IndexFile', *args: Any, **kwargs: Any) -> _T: if self._file_path != self._index_path(): raise AssertionError( "Cannot call %r on indices that do not represent the default git index" % func.__name__) @@ -93,9 +96,9 @@ def git_working_dir(func: Callable[..., _T]) -> Callable[..., _T]: repository in order to assure relative paths are handled correctly""" @wraps(func) - def set_git_working_dir(self, *args: Any, **kwargs: Any) -> _T: + def set_git_working_dir(self: 'IndexFile', *args: Any, **kwargs: Any) -> _T: cur_wd = os.getcwd() - os.chdir(self.repo.working_tree_dir) + os.chdir(str(self.repo.working_tree_dir)) try: return func(self, *args, **kwargs) finally: diff --git a/git/objects/fun.py b/git/objects/fun.py index 339a53b8c..89b02ad4d 100644 --- a/git/objects/fun.py +++ b/git/objects/fun.py @@ -1,6 +1,8 @@ """Module with functions which are supposed to be as fast as possible""" from stat import S_ISDIR +from git import GitCmdObjectDB + from git.compat import ( safe_decode, defenc @@ -8,7 +10,12 @@ # typing ---------------------------------------------- -from typing import List, Tuple +from typing import Callable, List, Sequence, Tuple, TYPE_CHECKING, Union, overload + +if TYPE_CHECKING: + from _typeshed import ReadableBuffer + +EntryTup = Tuple[bytes, int, str] # same as TreeCacheTup in tree.py # --------------------------------------------------- @@ -18,7 +25,7 @@ 'traverse_tree_recursive') -def tree_to_stream(entries, write): +def tree_to_stream(entries: Sequence[EntryTup], write: Callable[['ReadableBuffer'], Union[int, None]]) -> None: """Write the give list of entries into a stream using its write method :param entries: **sorted** list of tuples with (binsha, mode, name) :param write: write method which takes a data string""" @@ -42,12 +49,14 @@ def tree_to_stream(entries, write): # According to my tests, this is exactly what git does, that is it just # takes the input literally, which appears to be utf8 on linux. if isinstance(name, str): - name = name.encode(defenc) - write(b''.join((mode_str, b' ', name, b'\0', binsha))) + name_bytes = name.encode(defenc) + else: + name_bytes = name + write(b''.join((mode_str, b' ', name_bytes, b'\0', binsha))) # END for each item -def tree_entries_from_data(data: bytes) -> List[Tuple[bytes, int, str]]: +def tree_entries_from_data(data: bytes) -> List[EntryTup]: """Reads the binary representation of a tree and returns tuples of Tree items :param data: data block with tree data (as bytes) :return: list(tuple(binsha, mode, tree_relative_path), ...)""" @@ -93,36 +102,49 @@ def tree_entries_from_data(data: bytes) -> List[Tuple[bytes, int, str]]: return out -def _find_by_name(tree_data, name, is_dir, start_at): +def _find_by_name(tree_data: Sequence[Union[EntryTup, None]], name: str, is_dir: bool, start_at: int + ) -> Union[EntryTup, None]: """return data entry matching the given name and tree mode or None. Before the item is returned, the respective data item is set None in the tree_data list to mark it done""" + tree_data_list: List[Union[EntryTup, None]] = list(tree_data) try: - item = tree_data[start_at] + item = tree_data_list[start_at] if item and item[2] == name and S_ISDIR(item[1]) == is_dir: - tree_data[start_at] = None + tree_data_list[start_at] = None return item except IndexError: pass # END exception handling - for index, item in enumerate(tree_data): + for index, item in enumerate(tree_data_list): if item and item[2] == name and S_ISDIR(item[1]) == is_dir: - tree_data[index] = None + tree_data_list[index] = None return item # END if item matches # END for each item return None -def _to_full_path(item, path_prefix): +@ overload +def _to_full_path(item: None, path_prefix: str) -> None: + ... + + +@ overload +def _to_full_path(item: EntryTup, path_prefix: str) -> EntryTup: + ... + + +def _to_full_path(item: Union[EntryTup, None], path_prefix: str) -> Union[EntryTup, None]: """Rebuild entry with given path prefix""" if not item: return item return (item[0], item[1], path_prefix + item[2]) -def traverse_trees_recursive(odb, tree_shas, path_prefix): +def traverse_trees_recursive(odb: GitCmdObjectDB, tree_shas: Sequence[Union[bytes, None]], + path_prefix: str) -> List[Union[EntryTup, None]]: """ :return: list with entries according to the given binary tree-shas. The result is encoded in a list @@ -137,28 +159,29 @@ def traverse_trees_recursive(odb, tree_shas, path_prefix): :param path_prefix: a prefix to be added to the returned paths on this level, set it '' for the first iteration :note: The ordering of the returned items will be partially lost""" - trees_data = [] + trees_data: List[List[Union[EntryTup, None]]] = [] nt = len(tree_shas) for tree_sha in tree_shas: if tree_sha is None: - data = [] + data: List[Union[EntryTup, None]] = [] else: - data = tree_entries_from_data(odb.stream(tree_sha).read()) + data = list(tree_entries_from_data(odb.stream(tree_sha).read())) # make new list for typing as invariant # END handle muted trees trees_data.append(data) # END for each sha to get data for out = [] - out_append = out.append # find all matching entries and recursively process them together if the match # is a tree. If the match is a non-tree item, put it into the result. # Processed items will be set None for ti, tree_data in enumerate(trees_data): + for ii, item in enumerate(tree_data): if not item: continue # END skip already done items + entries: List[Union[EntryTup, None]] entries = [None for _ in range(nt)] entries[ti] = item _sha, mode, name = item @@ -169,17 +192,20 @@ def traverse_trees_recursive(odb, tree_shas, path_prefix): # ti+nt, not ti+1+nt for tio in range(ti + 1, ti + nt): tio = tio % nt - entries[tio] = _find_by_name(trees_data[tio], name, is_dir, ii) - # END for each other item data + td = trees_data[tio] + entries[tio] = _find_by_name(td, name, is_dir, ii) + # END for each other item data +#Revealed type is "builtins.list[Union[Tuple[builtins.bytes, builtins.int, builtins.str], None]]"## # +#Revealed type is "builtins.list[Union[Tuple[builtins.bytes, builtins.int, builtins.str], None]]" # if we are a directory, enter recursion if is_dir: out.extend(traverse_trees_recursive( odb, [((ei and ei[0]) or None) for ei in entries], path_prefix + name + '/')) else: - out_append(tuple(_to_full_path(e, path_prefix) for e in entries)) - # END handle recursion + out.extend([_to_full_path(e, path_prefix) for e in entries]) + # END handle recursion # finally mark it done tree_data[ii] = None # END for each item @@ -190,7 +216,7 @@ def traverse_trees_recursive(odb, tree_shas, path_prefix): return out -def traverse_tree_recursive(odb, tree_sha, path_prefix): +def traverse_tree_recursive(odb: GitCmdObjectDB, tree_sha: bytes, path_prefix: str) -> List[Tuple[bytes, int, str]]: """ :return: list of entries of the tree pointed to by the binary tree_sha. An entry has the following format: diff --git a/git/objects/tree.py b/git/objects/tree.py index 34fb93dc2..528cf5ca7 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -21,8 +21,8 @@ # typing ------------------------------------------------- -from typing import (Callable, Dict, Generic, Iterable, Iterator, List, - Tuple, Type, TypeVar, Union, cast, TYPE_CHECKING) +from typing import (Callable, Dict, Iterable, Iterator, List, + Tuple, Type, Union, cast, TYPE_CHECKING) from git.types import PathLike, TypeGuard @@ -30,7 +30,7 @@ from git.repo import Repo from io import BytesIO -T_Tree_cache = TypeVar('T_Tree_cache', bound=Tuple[bytes, int, str]) +TreeCacheTup = Tuple[bytes, int, str] TraversedTreeTup = Union[Tuple[Union['Tree', None], IndexObjUnion, Tuple['Submodule', 'Submodule']]] @@ -42,7 +42,7 @@ __all__ = ("TreeModifier", "Tree") -def git_cmp(t1: T_Tree_cache, t2: T_Tree_cache) -> int: +def git_cmp(t1: TreeCacheTup, t2: TreeCacheTup) -> int: a, b = t1[2], t2[2] assert isinstance(a, str) and isinstance(b, str) # Need as mypy 9.0 cannot unpack TypeVar properly len_a, len_b = len(a), len(b) @@ -55,8 +55,8 @@ def git_cmp(t1: T_Tree_cache, t2: T_Tree_cache) -> int: return len_a - len_b -def merge_sort(a: List[T_Tree_cache], - cmp: Callable[[T_Tree_cache, T_Tree_cache], int]) -> None: +def merge_sort(a: List[TreeCacheTup], + cmp: Callable[[TreeCacheTup, TreeCacheTup], int]) -> None: if len(a) < 2: return None @@ -91,7 +91,7 @@ def merge_sort(a: List[T_Tree_cache], k = k + 1 -class TreeModifier(Generic[T_Tree_cache], object): +class TreeModifier(object): """A utility class providing methods to alter the underlying cache in a list-like fashion. @@ -99,7 +99,7 @@ class TreeModifier(Generic[T_Tree_cache], object): the cache of a tree, will be sorted. Assuring it will be in a serializable state""" __slots__ = '_cache' - def __init__(self, cache: List[T_Tree_cache]) -> None: + def __init__(self, cache: List[TreeCacheTup]) -> None: self._cache = cache def _index_by_name(self, name: str) -> int: @@ -141,7 +141,7 @@ def add(self, sha: bytes, mode: int, name: str, force: bool = False) -> 'TreeMod sha = to_bin_sha(sha) index = self._index_by_name(name) - def is_tree_cache(inp: Tuple[bytes, int, str]) -> TypeGuard[T_Tree_cache]: + def is_tree_cache(inp: Tuple[bytes, int, str]) -> TypeGuard[TreeCacheTup]: return isinstance(inp[0], bytes) and isinstance(inp[1], int) and isinstance([inp], str) item = (sha, mode, name) @@ -167,7 +167,7 @@ def add_unchecked(self, binsha: bytes, mode: int, name: str) -> None: For more information on the parameters, see ``add`` :param binsha: 20 byte binary sha""" assert isinstance(binsha, bytes) and isinstance(mode, int) and isinstance(name, str) - tree_cache = cast(T_Tree_cache, (binsha, mode, name)) + tree_cache = (binsha, mode, name) self._cache.append(tree_cache) diff --git a/git/types.py b/git/types.py index f15db3b4b..ac1bb2c80 100644 --- a/git/types.py +++ b/git/types.py @@ -7,6 +7,8 @@ from typing import (Callable, Dict, NoReturn, Tuple, Union, Any, Iterator, # noqa: F401 NamedTuple, TYPE_CHECKING, TypeVar) # noqa: F401 +if TYPE_CHECKING: + from git.repo import Repo if sys.version_info[:2] >= (3, 8): from typing import Final, Literal, SupportsIndex, TypedDict, Protocol # noqa: F401 @@ -71,9 +73,5 @@ class HSH_TD(TypedDict): files: Dict[PathLike, Files_TD] -# @runtime_checkable -class RepoLike(Protocol): - """Protocol class to allow structural type-checking of Repo - e.g. when cannot import due to circular imports""" - - def remotes(self): ... # NOQA: E704 +class Has_Repo(Protocol): + repo: 'Repo' From 9f88796704cc9f9826b1a25f322108f8dcc52ce6 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 8 Jul 2021 21:45:37 +0100 Subject: [PATCH 0575/2375] Mak GitCmdObjectDB a froward ref --- git/objects/fun.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/git/objects/fun.py b/git/objects/fun.py index 89b02ad4d..fc49e3897 100644 --- a/git/objects/fun.py +++ b/git/objects/fun.py @@ -1,7 +1,6 @@ """Module with functions which are supposed to be as fast as possible""" from stat import S_ISDIR -from git import GitCmdObjectDB from git.compat import ( safe_decode, @@ -14,6 +13,7 @@ if TYPE_CHECKING: from _typeshed import ReadableBuffer + from git import GitCmdObjectDB EntryTup = Tuple[bytes, int, str] # same as TreeCacheTup in tree.py @@ -143,7 +143,7 @@ def _to_full_path(item: Union[EntryTup, None], path_prefix: str) -> Union[EntryT return (item[0], item[1], path_prefix + item[2]) -def traverse_trees_recursive(odb: GitCmdObjectDB, tree_shas: Sequence[Union[bytes, None]], +def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[bytes, None]], path_prefix: str) -> List[Union[EntryTup, None]]: """ :return: list with entries according to the given binary tree-shas. @@ -216,7 +216,7 @@ def traverse_trees_recursive(odb: GitCmdObjectDB, tree_shas: Sequence[Union[byte return out -def traverse_tree_recursive(odb: GitCmdObjectDB, tree_sha: bytes, path_prefix: str) -> List[Tuple[bytes, int, str]]: +def traverse_tree_recursive(odb: 'GitCmdObjectDB', tree_sha: bytes, path_prefix: str) -> List[Tuple[bytes, int, str]]: """ :return: list of entries of the tree pointed to by the binary tree_sha. An entry has the following format: From 1533596b03ef07b07311821d90de3ef72abba5d6 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 8 Jul 2021 22:20:59 +0100 Subject: [PATCH 0576/2375] Mak EntryTup a froward ref --- git/index/fun.py | 11 +++++------ git/objects/fun.py | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/git/index/fun.py b/git/index/fun.py index 74f6efbf3..382e3d444 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -57,7 +57,11 @@ if TYPE_CHECKING: from .base import IndexFile - from git.objects.fun import EntryTup + from git.objects.fun import EntryTupOrNone + + +def is_three_entry_list(inp) -> TypeGuard[List['EntryTupOrNone']]: + return isinstance(inp, list) and len(inp) == 3 # ------------------------------------------------------------------------------------ @@ -334,11 +338,6 @@ def aggressive_tree_merge(odb, tree_shas: Sequence[bytes]) -> List[BaseIndexEntr if len(tree_shas) > 3: raise ValueError("Cannot handle %i trees at once" % len(tree_shas)) - EntryTupOrNone = Union[EntryTup, None] - - def is_three_entry_list(inp) -> TypeGuard[List[EntryTupOrNone]]: - return isinstance(inp, list) and len(inp) == 3 - # three trees for three_entries in traverse_trees_recursive(odb, tree_shas, ''): diff --git a/git/objects/fun.py b/git/objects/fun.py index fc49e3897..4ff56fdd1 100644 --- a/git/objects/fun.py +++ b/git/objects/fun.py @@ -16,7 +16,7 @@ from git import GitCmdObjectDB EntryTup = Tuple[bytes, int, str] # same as TreeCacheTup in tree.py - +EntryTupOrNone = Union[EntryTup, None] # --------------------------------------------------- From 4333dcb182da3c9f9bd2c358bdf38db278cab557 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 8 Jul 2021 22:49:34 +0100 Subject: [PATCH 0577/2375] Mmmmm --- git/index/fun.py | 9 ++++----- git/objects/fun.py | 18 ++++++++---------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/git/index/fun.py b/git/index/fun.py index 382e3d444..f1b05f16b 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -61,7 +61,7 @@ def is_three_entry_list(inp) -> TypeGuard[List['EntryTupOrNone']]: - return isinstance(inp, list) and len(inp) == 3 + return isinstance(inp, (tuple, list)) and len(inp) == 3 # ------------------------------------------------------------------------------------ @@ -339,10 +339,9 @@ def aggressive_tree_merge(odb, tree_shas: Sequence[bytes]) -> List[BaseIndexEntr raise ValueError("Cannot handle %i trees at once" % len(tree_shas)) # three trees - for three_entries in traverse_trees_recursive(odb, tree_shas, ''): - - assert is_three_entry_list(three_entries) - base, ours, theirs = three_entries + for entryo in traverse_trees_recursive(odb, tree_shas, ''): + assert is_three_entry_list(entryo), f"{type(entryo)=} and {len(entryo)=}" # type:ignore + base, ours, theirs = entryo if base is not None: # base version exists if ours is not None: diff --git a/git/objects/fun.py b/git/objects/fun.py index 4ff56fdd1..e6ad7892f 100644 --- a/git/objects/fun.py +++ b/git/objects/fun.py @@ -102,13 +102,13 @@ def tree_entries_from_data(data: bytes) -> List[EntryTup]: return out -def _find_by_name(tree_data: Sequence[Union[EntryTup, None]], name: str, is_dir: bool, start_at: int - ) -> Union[EntryTup, None]: +def _find_by_name(tree_data: Sequence[EntryTupOrNone], name: str, is_dir: bool, start_at: int + ) -> EntryTupOrNone: """return data entry matching the given name and tree mode or None. Before the item is returned, the respective data item is set None in the tree_data list to mark it done""" - tree_data_list: List[Union[EntryTup, None]] = list(tree_data) + tree_data_list: List[EntryTupOrNone] = list(tree_data) try: item = tree_data_list[start_at] if item and item[2] == name and S_ISDIR(item[1]) == is_dir: @@ -136,7 +136,7 @@ def _to_full_path(item: EntryTup, path_prefix: str) -> EntryTup: ... -def _to_full_path(item: Union[EntryTup, None], path_prefix: str) -> Union[EntryTup, None]: +def _to_full_path(item: EntryTupOrNone, path_prefix: str) -> EntryTupOrNone: """Rebuild entry with given path prefix""" if not item: return item @@ -144,7 +144,7 @@ def _to_full_path(item: Union[EntryTup, None], path_prefix: str) -> Union[EntryT def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[bytes, None]], - path_prefix: str) -> List[Union[EntryTup, None]]: + path_prefix: str) -> List[EntryTupOrNone]: """ :return: list with entries according to the given binary tree-shas. The result is encoded in a list @@ -159,11 +159,11 @@ def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[by :param path_prefix: a prefix to be added to the returned paths on this level, set it '' for the first iteration :note: The ordering of the returned items will be partially lost""" - trees_data: List[List[Union[EntryTup, None]]] = [] + trees_data: List[List[EntryTupOrNone]] = [] nt = len(tree_shas) for tree_sha in tree_shas: if tree_sha is None: - data: List[Union[EntryTup, None]] = [] + data: List[EntryTupOrNone] = [] else: data = list(tree_entries_from_data(odb.stream(tree_sha).read())) # make new list for typing as invariant # END handle muted trees @@ -181,7 +181,7 @@ def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[by if not item: continue # END skip already done items - entries: List[Union[EntryTup, None]] + entries: List[EntryTupOrNone] entries = [None for _ in range(nt)] entries[ti] = item _sha, mode, name = item @@ -196,8 +196,6 @@ def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[by entries[tio] = _find_by_name(td, name, is_dir, ii) # END for each other item data -#Revealed type is "builtins.list[Union[Tuple[builtins.bytes, builtins.int, builtins.str], None]]"## # -#Revealed type is "builtins.list[Union[Tuple[builtins.bytes, builtins.int, builtins.str], None]]" # if we are a directory, enter recursion if is_dir: out.extend(traverse_trees_recursive( From fe5fef9ebd63ff79e57035cacbe647d096f110bc Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 8 Jul 2021 22:57:16 +0100 Subject: [PATCH 0578/2375] Mmmmmm --- git/index/fun.py | 138 ++++++++++++++++++++++++----------------------- 1 file changed, 71 insertions(+), 67 deletions(-) diff --git a/git/index/fun.py b/git/index/fun.py index f1b05f16b..dbe25276c 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -13,6 +13,7 @@ S_IFREG, S_IXUSR, ) + import subprocess from git.cmd import PROC_CREATIONFLAGS, handle_process_output @@ -339,76 +340,79 @@ def aggressive_tree_merge(odb, tree_shas: Sequence[bytes]) -> List[BaseIndexEntr raise ValueError("Cannot handle %i trees at once" % len(tree_shas)) # three trees - for entryo in traverse_trees_recursive(odb, tree_shas, ''): - assert is_three_entry_list(entryo), f"{type(entryo)=} and {len(entryo)=}" # type:ignore - base, ours, theirs = entryo - if base is not None: - # base version exists - if ours is not None: - # ours exists - if theirs is not None: - # it exists in all branches, if it was changed in both - # its a conflict, otherwise we take the changed version - # This should be the most common branch, so it comes first - if(base[0] != ours[0] and base[0] != theirs[0] and ours[0] != theirs[0]) or \ - (base[1] != ours[1] and base[1] != theirs[1] and ours[1] != theirs[1]): - # changed by both - out.append(_tree_entry_to_baseindexentry(base, 1)) - out.append(_tree_entry_to_baseindexentry(ours, 2)) - out.append(_tree_entry_to_baseindexentry(theirs, 3)) - elif base[0] != ours[0] or base[1] != ours[1]: - # only we changed it - out.append(_tree_entry_to_baseindexentry(ours, 0)) - else: - # either nobody changed it, or they did. In either - # case, use theirs - out.append(_tree_entry_to_baseindexentry(theirs, 0)) - # END handle modification + entries = traverse_trees_recursive(odb, tree_shas, '') + base = entries[0] + ours = entries[1] + theirs = entries[2] + assert is_three_entry_list(entries), f"{type(entries)=} and {len(entries)=}" # type:ignore + + if base is not None: + # base version exists + if ours is not None: + # ours exists + if theirs is not None: + # it exists in all branches, if it was changed in both + # its a conflict, otherwise we take the changed version + # This should be the most common branch, so it comes first + if(base[0] != ours[0] and base[0] != theirs[0] and ours[0] != theirs[0]) or \ + (base[1] != ours[1] and base[1] != theirs[1] and ours[1] != theirs[1]): + # changed by both + out.append(_tree_entry_to_baseindexentry(base, 1)) + out.append(_tree_entry_to_baseindexentry(ours, 2)) + out.append(_tree_entry_to_baseindexentry(theirs, 3)) + elif base[0] != ours[0] or base[1] != ours[1]: + # only we changed it + out.append(_tree_entry_to_baseindexentry(ours, 0)) else: - - if ours[0] != base[0] or ours[1] != base[1]: - # they deleted it, we changed it, conflict - out.append(_tree_entry_to_baseindexentry(base, 1)) - out.append(_tree_entry_to_baseindexentry(ours, 2)) - # else: - # we didn't change it, ignore - # pass - # END handle our change - # END handle theirs + # either nobody changed it, or they did. In either + # case, use theirs + out.append(_tree_entry_to_baseindexentry(theirs, 0)) + # END handle modification else: - if theirs is None: - # deleted in both, its fine - its out - pass - else: - if theirs[0] != base[0] or theirs[1] != base[1]: - # deleted in ours, changed theirs, conflict - out.append(_tree_entry_to_baseindexentry(base, 1)) - out.append(_tree_entry_to_baseindexentry(theirs, 3)) - # END theirs changed - # else: - # theirs didn't change - # pass - # END handle theirs - # END handle ours - else: - # all three can't be None - if ours is None and theirs is not None: - # added in their branch - out.append(_tree_entry_to_baseindexentry(theirs, 0)) - elif theirs is None and ours is not None: - # added in our branch - out.append(_tree_entry_to_baseindexentry(ours, 0)) - elif ours is not None and theirs is not None: - # both have it, except for the base, see whether it changed - if ours[0] != theirs[0] or ours[1] != theirs[1]: + + if ours[0] != base[0] or ours[1] != base[1]: + # they deleted it, we changed it, conflict + out.append(_tree_entry_to_baseindexentry(base, 1)) out.append(_tree_entry_to_baseindexentry(ours, 2)) + # else: + # we didn't change it, ignore + # pass + # END handle our change + # END handle theirs + else: + if theirs is None: + # deleted in both, its fine - its out + pass + else: + if theirs[0] != base[0] or theirs[1] != base[1]: + # deleted in ours, changed theirs, conflict + out.append(_tree_entry_to_baseindexentry(base, 1)) out.append(_tree_entry_to_baseindexentry(theirs, 3)) - else: - # it was added the same in both - out.append(_tree_entry_to_baseindexentry(ours, 0)) - # END handle two items - # END handle heads - # END handle base exists - # END for each entries tuple + # END theirs changed + # else: + # theirs didn't change + # pass + # END handle theirs + # END handle ours + else: + # all three can't be None + if ours is None and theirs is not None: + # added in their branch + out.append(_tree_entry_to_baseindexentry(theirs, 0)) + elif theirs is None and ours is not None: + # added in our branch + out.append(_tree_entry_to_baseindexentry(ours, 0)) + elif ours is not None and theirs is not None: + # both have it, except for the base, see whether it changed + if ours[0] != theirs[0] or ours[1] != theirs[1]: + out.append(_tree_entry_to_baseindexentry(ours, 2)) + out.append(_tree_entry_to_baseindexentry(theirs, 3)) + else: + # it was added the same in both + out.append(_tree_entry_to_baseindexentry(ours, 0)) + # END handle two items + # END handle heads + # END handle base exists +# END for each entries tuple return out From d344abf5594bebe0147feaba7e87c0079d28374f Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 8 Jul 2021 23:12:42 +0100 Subject: [PATCH 0579/2375] Fix traverse_trees_recursive() --- git/index/fun.py | 148 +++++++++++++++++++++------------------------ git/objects/fun.py | 8 +-- 2 files changed, 73 insertions(+), 83 deletions(-) diff --git a/git/index/fun.py b/git/index/fun.py index dbe25276c..cd71237dd 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -13,7 +13,6 @@ S_IFREG, S_IXUSR, ) - import subprocess from git.cmd import PROC_CREATIONFLAGS, handle_process_output @@ -58,11 +57,7 @@ if TYPE_CHECKING: from .base import IndexFile - from git.objects.fun import EntryTupOrNone - - -def is_three_entry_list(inp) -> TypeGuard[List['EntryTupOrNone']]: - return isinstance(inp, (tuple, list)) and len(inp) == 3 + # from git.objects.fun import EntryTupOrNone # ------------------------------------------------------------------------------------ @@ -192,8 +187,8 @@ def entry_key(*entry: Union[BaseIndexEntry, PathLike, int]) -> Tuple[PathLike, i """:return: Key suitable to be used for the index.entries dictionary :param entry: One instance of type BaseIndexEntry or the path and the stage""" - def is_entry_tuple(entry: Tuple) -> TypeGuard[Tuple[PathLike, int]]: - return isinstance(entry, tuple) and len(entry) == 2 + def is_entry_key_tup(entry_key: Tuple) -> TypeGuard[Tuple[PathLike, int]]: + return isinstance(entry_key, tuple) and len(entry_key) == 2 if len(entry) == 1: entry_first = entry[0] @@ -201,7 +196,7 @@ def is_entry_tuple(entry: Tuple) -> TypeGuard[Tuple[PathLike, int]]: return (entry_first.path, entry_first.stage) else: # entry = tuple(entry) - assert is_entry_tuple(entry) + assert is_entry_key_tup(entry) return entry # END handle entry @@ -340,79 +335,74 @@ def aggressive_tree_merge(odb, tree_shas: Sequence[bytes]) -> List[BaseIndexEntr raise ValueError("Cannot handle %i trees at once" % len(tree_shas)) # three trees - entries = traverse_trees_recursive(odb, tree_shas, '') - base = entries[0] - ours = entries[1] - theirs = entries[2] - assert is_three_entry_list(entries), f"{type(entries)=} and {len(entries)=}" # type:ignore - - if base is not None: - # base version exists - if ours is not None: - # ours exists - if theirs is not None: - # it exists in all branches, if it was changed in both - # its a conflict, otherwise we take the changed version - # This should be the most common branch, so it comes first - if(base[0] != ours[0] and base[0] != theirs[0] and ours[0] != theirs[0]) or \ - (base[1] != ours[1] and base[1] != theirs[1] and ours[1] != theirs[1]): - # changed by both - out.append(_tree_entry_to_baseindexentry(base, 1)) - out.append(_tree_entry_to_baseindexentry(ours, 2)) - out.append(_tree_entry_to_baseindexentry(theirs, 3)) - elif base[0] != ours[0] or base[1] != ours[1]: - # only we changed it - out.append(_tree_entry_to_baseindexentry(ours, 0)) + for base, ours, theirs in traverse_trees_recursive(odb, tree_shas, ''): + if base is not None: + # base version exists + if ours is not None: + # ours exists + if theirs is not None: + # it exists in all branches, if it was changed in both + # its a conflict, otherwise we take the changed version + # This should be the most common branch, so it comes first + if(base[0] != ours[0] and base[0] != theirs[0] and ours[0] != theirs[0]) or \ + (base[1] != ours[1] and base[1] != theirs[1] and ours[1] != theirs[1]): + # changed by both + out.append(_tree_entry_to_baseindexentry(base, 1)) + out.append(_tree_entry_to_baseindexentry(ours, 2)) + out.append(_tree_entry_to_baseindexentry(theirs, 3)) + elif base[0] != ours[0] or base[1] != ours[1]: + # only we changed it + out.append(_tree_entry_to_baseindexentry(ours, 0)) + else: + # either nobody changed it, or they did. In either + # case, use theirs + out.append(_tree_entry_to_baseindexentry(theirs, 0)) + # END handle modification else: - # either nobody changed it, or they did. In either - # case, use theirs - out.append(_tree_entry_to_baseindexentry(theirs, 0)) - # END handle modification - else: - if ours[0] != base[0] or ours[1] != base[1]: - # they deleted it, we changed it, conflict - out.append(_tree_entry_to_baseindexentry(base, 1)) - out.append(_tree_entry_to_baseindexentry(ours, 2)) - # else: - # we didn't change it, ignore - # pass - # END handle our change - # END handle theirs - else: - if theirs is None: - # deleted in both, its fine - its out - pass + if ours[0] != base[0] or ours[1] != base[1]: + # they deleted it, we changed it, conflict + out.append(_tree_entry_to_baseindexentry(base, 1)) + out.append(_tree_entry_to_baseindexentry(ours, 2)) + # else: + # we didn't change it, ignore + # pass + # END handle our change + # END handle theirs else: - if theirs[0] != base[0] or theirs[1] != base[1]: - # deleted in ours, changed theirs, conflict - out.append(_tree_entry_to_baseindexentry(base, 1)) - out.append(_tree_entry_to_baseindexentry(theirs, 3)) - # END theirs changed - # else: - # theirs didn't change - # pass - # END handle theirs - # END handle ours - else: - # all three can't be None - if ours is None and theirs is not None: - # added in their branch - out.append(_tree_entry_to_baseindexentry(theirs, 0)) - elif theirs is None and ours is not None: - # added in our branch - out.append(_tree_entry_to_baseindexentry(ours, 0)) - elif ours is not None and theirs is not None: - # both have it, except for the base, see whether it changed - if ours[0] != theirs[0] or ours[1] != theirs[1]: - out.append(_tree_entry_to_baseindexentry(ours, 2)) - out.append(_tree_entry_to_baseindexentry(theirs, 3)) - else: - # it was added the same in both + if theirs is None: + # deleted in both, its fine - its out + pass + else: + if theirs[0] != base[0] or theirs[1] != base[1]: + # deleted in ours, changed theirs, conflict + out.append(_tree_entry_to_baseindexentry(base, 1)) + out.append(_tree_entry_to_baseindexentry(theirs, 3)) + # END theirs changed + # else: + # theirs didn't change + # pass + # END handle theirs + # END handle ours + else: + # all three can't be None + if ours is None and theirs is not None: + # added in their branch + out.append(_tree_entry_to_baseindexentry(theirs, 0)) + elif theirs is None and ours is not None: + # added in our branch out.append(_tree_entry_to_baseindexentry(ours, 0)) - # END handle two items - # END handle heads - # END handle base exists -# END for each entries tuple + elif ours is not None and theirs is not None: + # both have it, except for the base, see whether it changed + if ours[0] != theirs[0] or ours[1] != theirs[1]: + out.append(_tree_entry_to_baseindexentry(ours, 2)) + out.append(_tree_entry_to_baseindexentry(theirs, 3)) + else: + # it was added the same in both + out.append(_tree_entry_to_baseindexentry(ours, 0)) + # END handle two items + # END handle heads + # END handle base exists + # END for each entries tuple return out diff --git a/git/objects/fun.py b/git/objects/fun.py index e6ad7892f..2abd7b09e 100644 --- a/git/objects/fun.py +++ b/git/objects/fun.py @@ -144,9 +144,9 @@ def _to_full_path(item: EntryTupOrNone, path_prefix: str) -> EntryTupOrNone: def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[bytes, None]], - path_prefix: str) -> List[EntryTupOrNone]: + path_prefix: str) -> List[List[EntryTupOrNone]]: """ - :return: list with entries according to the given binary tree-shas. + :return: list of list with entries according to the given binary tree-shas. The result is encoded in a list of n tuple|None per blob/commit, (n == len(tree_shas)), where * [0] == 20 byte sha @@ -170,7 +170,7 @@ def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[by trees_data.append(data) # END for each sha to get data for - out = [] + out: List[List[EntryTupOrNone]] = [] # find all matching entries and recursively process them together if the match # is a tree. If the match is a non-tree item, put it into the result. @@ -201,7 +201,7 @@ def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[by out.extend(traverse_trees_recursive( odb, [((ei and ei[0]) or None) for ei in entries], path_prefix + name + '/')) else: - out.extend([_to_full_path(e, path_prefix) for e in entries]) + out.append([_to_full_path(e, path_prefix) for e in entries]) # END handle recursion # finally mark it done From dfbc0f42c7555b7145768774b861029c4283178c Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 8 Jul 2021 23:20:58 +0100 Subject: [PATCH 0580/2375] Fix traverse_trees_recursive() again --- git/objects/fun.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/git/objects/fun.py b/git/objects/fun.py index 2abd7b09e..cb323afbc 100644 --- a/git/objects/fun.py +++ b/git/objects/fun.py @@ -144,7 +144,7 @@ def _to_full_path(item: EntryTupOrNone, path_prefix: str) -> EntryTupOrNone: def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[bytes, None]], - path_prefix: str) -> List[List[EntryTupOrNone]]: + path_prefix: str) -> List[tuple[EntryTupOrNone, ...]]: """ :return: list of list with entries according to the given binary tree-shas. The result is encoded in a list @@ -170,7 +170,7 @@ def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[by trees_data.append(data) # END for each sha to get data for - out: List[List[EntryTupOrNone]] = [] + out: List[Tuple[EntryTupOrNone, ...]] = [] # find all matching entries and recursively process them together if the match # is a tree. If the match is a non-tree item, put it into the result. @@ -201,7 +201,7 @@ def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[by out.extend(traverse_trees_recursive( odb, [((ei and ei[0]) or None) for ei in entries], path_prefix + name + '/')) else: - out.append([_to_full_path(e, path_prefix) for e in entries]) + out.append(tuple(_to_full_path(e, path_prefix) for e in entries)) # END handle recursion # finally mark it done From c27d2b078b515a8321b3f7f7abdcea363d8049df Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 8 Jul 2021 23:25:18 +0100 Subject: [PATCH 0581/2375] Use Tuple not tuple --- git/objects/fun.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/git/objects/fun.py b/git/objects/fun.py index cb323afbc..42954fc26 100644 --- a/git/objects/fun.py +++ b/git/objects/fun.py @@ -144,7 +144,7 @@ def _to_full_path(item: EntryTupOrNone, path_prefix: str) -> EntryTupOrNone: def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[bytes, None]], - path_prefix: str) -> List[tuple[EntryTupOrNone, ...]]: + path_prefix: str) -> List[Tuple[EntryTupOrNone, ...]]: """ :return: list of list with entries according to the given binary tree-shas. The result is encoded in a list @@ -165,7 +165,8 @@ def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[by if tree_sha is None: data: List[EntryTupOrNone] = [] else: - data = list(tree_entries_from_data(odb.stream(tree_sha).read())) # make new list for typing as invariant + # make new list for typing as list invariant + data = [x for x in tree_entries_from_data(odb.stream(tree_sha).read())] # END handle muted trees trees_data.append(data) # END for each sha to get data for From 4f13b4e23526616f307370dc9a869b067e90b276 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 8 Jul 2021 23:49:01 +0100 Subject: [PATCH 0582/2375] fix base,ours,theirs typing --- git/index/fun.py | 8 ++++---- git/objects/fun.py | 8 ++++---- git/objects/tree.py | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/git/index/fun.py b/git/index/fun.py index cd71237dd..774738dbf 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -386,13 +386,13 @@ def aggressive_tree_merge(odb, tree_shas: Sequence[bytes]) -> List[BaseIndexEntr # END handle ours else: # all three can't be None - if ours is None and theirs is not None: + if ours is None: # added in their branch - out.append(_tree_entry_to_baseindexentry(theirs, 0)) - elif theirs is None and ours is not None: + out.append(_tree_entry_to_baseindexentry(theirs, 0)) # type: ignore + elif theirs is None: # ours is not None, theirs is None # added in our branch out.append(_tree_entry_to_baseindexentry(ours, 0)) - elif ours is not None and theirs is not None: + else: # both have it, except for the base, see whether it changed if ours[0] != theirs[0] or ours[1] != theirs[1]: out.append(_tree_entry_to_baseindexentry(ours, 2)) diff --git a/git/objects/fun.py b/git/objects/fun.py index 42954fc26..57cefcf23 100644 --- a/git/objects/fun.py +++ b/git/objects/fun.py @@ -102,13 +102,13 @@ def tree_entries_from_data(data: bytes) -> List[EntryTup]: return out -def _find_by_name(tree_data: Sequence[EntryTupOrNone], name: str, is_dir: bool, start_at: int +def _find_by_name(tree_data: List[EntryTupOrNone], name: str, is_dir: bool, start_at: int ) -> EntryTupOrNone: """return data entry matching the given name and tree mode or None. Before the item is returned, the respective data item is set None in the tree_data list to mark it done""" - tree_data_list: List[EntryTupOrNone] = list(tree_data) + tree_data_list: List[EntryTupOrNone] = tree_data try: item = tree_data_list[start_at] if item and item[2] == name and S_ISDIR(item[1]) == is_dir: @@ -160,6 +160,7 @@ def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[by set it '' for the first iteration :note: The ordering of the returned items will be partially lost""" trees_data: List[List[EntryTupOrNone]] = [] + nt = len(tree_shas) for tree_sha in tree_shas: if tree_sha is None: @@ -193,8 +194,7 @@ def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[by # ti+nt, not ti+1+nt for tio in range(ti + 1, ti + nt): tio = tio % nt - td = trees_data[tio] - entries[tio] = _find_by_name(td, name, is_dir, ii) + entries[tio] = _find_by_name(trees_data[tio], name, is_dir, ii) # END for each other item data # if we are a directory, enter recursion diff --git a/git/objects/tree.py b/git/objects/tree.py index 528cf5ca7..d3681e23e 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -44,7 +44,7 @@ def git_cmp(t1: TreeCacheTup, t2: TreeCacheTup) -> int: a, b = t1[2], t2[2] - assert isinstance(a, str) and isinstance(b, str) # Need as mypy 9.0 cannot unpack TypeVar properly + # assert isinstance(a, str) and isinstance(b, str) len_a, len_b = len(a), len(b) min_len = min(len_a, len_b) min_cmp = cmp(a[:min_len], b[:min_len]) From 627defff96470464884ca81899fd0271e614b3e8 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Thu, 8 Jul 2021 23:55:09 +0100 Subject: [PATCH 0583/2375] Change List to MutableSequence in fun.py _find_by_name() --- git/index/fun.py | 5 +++-- git/objects/fun.py | 14 +++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/git/index/fun.py b/git/index/fun.py index 774738dbf..5c09f2b9c 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -388,8 +388,9 @@ def aggressive_tree_merge(odb, tree_shas: Sequence[bytes]) -> List[BaseIndexEntr # all three can't be None if ours is None: # added in their branch - out.append(_tree_entry_to_baseindexentry(theirs, 0)) # type: ignore - elif theirs is None: # ours is not None, theirs is None + assert theirs is not None + out.append(_tree_entry_to_baseindexentry(theirs, 0)) + elif theirs is None: # added in our branch out.append(_tree_entry_to_baseindexentry(ours, 0)) else: diff --git a/git/objects/fun.py b/git/objects/fun.py index 57cefcf23..be541eb8d 100644 --- a/git/objects/fun.py +++ b/git/objects/fun.py @@ -9,7 +9,7 @@ # typing ---------------------------------------------- -from typing import Callable, List, Sequence, Tuple, TYPE_CHECKING, Union, overload +from typing import Callable, List, MutableSequence, Sequence, Tuple, TYPE_CHECKING, Union, overload if TYPE_CHECKING: from _typeshed import ReadableBuffer @@ -102,24 +102,24 @@ def tree_entries_from_data(data: bytes) -> List[EntryTup]: return out -def _find_by_name(tree_data: List[EntryTupOrNone], name: str, is_dir: bool, start_at: int +def _find_by_name(tree_data: MutableSequence[EntryTupOrNone], name: str, is_dir: bool, start_at: int ) -> EntryTupOrNone: """return data entry matching the given name and tree mode or None. Before the item is returned, the respective data item is set None in the tree_data list to mark it done""" - tree_data_list: List[EntryTupOrNone] = tree_data + try: - item = tree_data_list[start_at] + item = tree_data[start_at] if item and item[2] == name and S_ISDIR(item[1]) == is_dir: - tree_data_list[start_at] = None + tree_data[start_at] = None return item except IndexError: pass # END exception handling - for index, item in enumerate(tree_data_list): + for index, item in enumerate(tree_data): if item and item[2] == name and S_ISDIR(item[1]) == is_dir: - tree_data_list[index] = None + tree_data[index] = None return item # END if item matches # END for each item From f271c58adb36550a02607811e97cc19feae4bafb Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 00:00:19 +0100 Subject: [PATCH 0584/2375] tests TraversableIterableObj typeguard --- git/index/fun.py | 1 - git/objects/util.py | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/git/index/fun.py b/git/index/fun.py index 5c09f2b9c..457856879 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -195,7 +195,6 @@ def is_entry_key_tup(entry_key: Tuple) -> TypeGuard[Tuple[PathLike, int]]: assert isinstance(entry_first, BaseIndexEntry) return (entry_first.path, entry_first.stage) else: - # entry = tuple(entry) assert is_entry_key_tup(entry) return entry # END handle entry diff --git a/git/objects/util.py b/git/objects/util.py index 0b449b7bb..5de9c3e90 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -33,7 +33,7 @@ from .tree import Tree, TraversedTreeTup from subprocess import Popen - + T_TIobj = TypeVar('T_TIobj', bound='TraversableIterableObj') # for TraversableIterableObj.traverse() TraversedTup = Union[Tuple[Union['Traversable', None], 'Traversable'], # for commit, submodule @@ -314,9 +314,9 @@ def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList['TraversableI def is_TraversableIterableObj(inp: 'Traversable') -> TypeGuard['TraversableIterableObj']: # return isinstance(self, TraversableIterableObj) - # Can it be anythin else? - return isinstance(self, Traversable) - + # Can it be anything else? Check this + return isinstance(self, TraversableIterableObj) + assert is_TraversableIterableObj(self), f"{type(self)}" out: IterableList['TraversableIterableObj'] = IterableList(self._id_attribute_) out.extend(self.traverse(*args, **kwargs)) @@ -364,7 +364,7 @@ def traverse(self, Submodule -> Iterator[Submodule, Tuple[Submodule, Submodule]] Tree -> Iterator[Union[Blob, Tree, Submodule, Tuple[Union[Submodule, Tree], Union[Blob, Tree, Submodule]]] - + ignore_self=True is_edge=True -> Iterator[item] ignore_self=True is_edge=False --> Iterator[item] ignore_self=False is_edge=True -> Iterator[item] | Iterator[Tuple[src, item]] From 4802a36bd0fec7e6ae03d6713ceae70de8e1783a Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 00:07:42 +0100 Subject: [PATCH 0585/2375] improve TraversableIterableObj typeguard --- git/objects/util.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index 5de9c3e90..5fb4c58ac 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -317,10 +317,12 @@ def is_TraversableIterableObj(inp: 'Traversable') -> TypeGuard['TraversableItera # Can it be anything else? Check this return isinstance(self, TraversableIterableObj) - assert is_TraversableIterableObj(self), f"{type(self)}" - out: IterableList['TraversableIterableObj'] = IterableList(self._id_attribute_) - out.extend(self.traverse(*args, **kwargs)) - return out + if is_TraversableIterableObj(self): + out: IterableList['TraversableIterableObj'] = IterableList(self._id_attribute_) + out.extend(self.traverse(*args, **kwargs)) + return out + else: + return IterableList("") # Its a Tree, which doesnt have _id_attribute_ def traverse(self, predicate: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: True, From 1faa25fcf828062d2c4ad35a962b4d8d3b05e855 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 00:56:20 +0100 Subject: [PATCH 0586/2375] Rmv typeguard from list_traverse(), was wrong --- git/objects/util.py | 30 +++++++++++++----------------- git/util.py | 8 +++++--- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index 5fb4c58ac..7173bc7ae 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -23,7 +23,7 @@ from typing import (Any, Callable, Deque, Iterator, NamedTuple, overload, Sequence, TYPE_CHECKING, Tuple, Type, TypeVar, Union, cast) -from git.types import Literal, TypeGuard +from git.types import Literal if TYPE_CHECKING: from io import BytesIO, StringIO @@ -306,23 +306,19 @@ class Tree:: (cls, Tree) -> Tuple[Tree, ...] """ raise NotImplementedError("To be implemented in subclass") - def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList['TraversableIterableObj']: + def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList: """ :return: IterableList with the results of the traversal as produced by traverse() - List objects must be IterableObj and Traversable e.g. Commit, Submodule""" - - def is_TraversableIterableObj(inp: 'Traversable') -> TypeGuard['TraversableIterableObj']: - # return isinstance(self, TraversableIterableObj) - # Can it be anything else? Check this - return isinstance(self, TraversableIterableObj) + """ + if isinstance(self, TraversableIterableObj): + id = self._id_attribute_ + else: # Tree + id = "" - if is_TraversableIterableObj(self): - out: IterableList['TraversableIterableObj'] = IterableList(self._id_attribute_) - out.extend(self.traverse(*args, **kwargs)) - return out - else: - return IterableList("") # Its a Tree, which doesnt have _id_attribute_ + out: IterableList = IterableList(id) + out.extend(self.traverse(*args, **kwargs)) + return out def traverse(self, predicate: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: True, @@ -449,7 +445,7 @@ class TraversableIterableObj(Traversable, IterableObj): TIobj_tuple = Tuple[Union[T_TIobj, None], T_TIobj] - @overload # type: ignore + @ overload # type: ignore def traverse(self: T_TIobj, predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], @@ -459,7 +455,7 @@ def traverse(self: T_TIobj, ) -> Iterator[T_TIobj]: ... - @overload + @ overload def traverse(self: T_TIobj, predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], @@ -469,7 +465,7 @@ def traverse(self: T_TIobj, ) -> Iterator[Tuple[Union[T_TIobj, None], T_TIobj]]: ... - @overload + @ overload def traverse(self: T_TIobj, predicate: Callable[[Union[T_TIobj, TIobj_tuple], int], bool], prune: Callable[[Union[T_TIobj, TIobj_tuple], int], bool], diff --git a/git/util.py b/git/util.py index b13af358f..63ac6134d 100644 --- a/git/util.py +++ b/git/util.py @@ -36,11 +36,13 @@ from git.remote import Remote from git.repo.base import Repo from git.config import GitConfigParser, SectionConstraint + from git.objects.base import IndexObject -from .types import (Literal, Protocol, SupportsIndex, # because behind py version guards + +from .types import (Literal, SupportsIndex, # because behind py version guards PathLike, HSH_TD, Total_TD, Files_TD) # aliases -T_IterableObj = TypeVar('T_IterableObj', bound='IterableObj', covariant=True) +T_IterableObj = TypeVar('T_IterableObj', bound=Union['IterableObj', 'IndexObject'], covariant=True) # So IterableList[Head] is subtype of IterableList[IterableObj] # --------------------------------------------------------------------- @@ -1068,7 +1070,7 @@ def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any): raise NotImplementedError("To be implemented by Subclass") -class IterableObj(Protocol): +class IterableObj(): """Defines an interface for iterable items which is to assure a uniform way to retrieve and iterate items within the git repository From f4cb7dbc707ea83f312aa669f3bea4dc10d3a24c Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 10:08:58 +0100 Subject: [PATCH 0587/2375] Change type of list_traverse() again. --- git/objects/util.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index 7173bc7ae..982e7ac7f 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -32,6 +32,7 @@ from .tag import TagObject from .tree import Tree, TraversedTreeTup from subprocess import Popen + from .submodule.base import Submodule T_TIobj = TypeVar('T_TIobj', bound='TraversableIterableObj') # for TraversableIterableObj.traverse() @@ -306,18 +307,28 @@ class Tree:: (cls, Tree) -> Tuple[Tree, ...] """ raise NotImplementedError("To be implemented in subclass") - def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList: + def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']]: """ :return: IterableList with the results of the traversal as produced by traverse() + Commit -> IterableList['Commit'] + Submodule -> IterableList['Submodule'] + Tree -> IterableList[Union['Submodule', 'Tree', 'Blob']] """ - if isinstance(self, TraversableIterableObj): + # Commit and Submodule have id.__attribute__ as IterableObj + # Tree has id.__attribute__ inherited from IndexObject + if isinstance(self, (TraversableIterableObj, Tree)): id = self._id_attribute_ - else: # Tree - id = "" + else: + id = "" # shouldn't reach here, unless Traversable subclass created with no _id_attribute_ + # could add _id_attribute_ to Traversable, or make all Traversable also Iterable? + + out: IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']] = IterableList(id) + # overloads in subclasses (mypy does't allow typing self: subclass) + # Union[IterableList['Commit'], IterableList['Submodule'], IterableList[Union['Submodule', 'Tree', 'Blob']]] - out: IterableList = IterableList(id) - out.extend(self.traverse(*args, **kwargs)) + # NOTE: if is_edge=True, self.traverse returns a Tuple, so should be prevented or flattened? + out.extend(self.traverse(*args, **kwargs)) # type: ignore return out def traverse(self, From 030b1fded8b8e1bcf3855beaf9035b4e3e755f5c Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 10:23:14 +0100 Subject: [PATCH 0588/2375] Add list_traverse() to Tree and TraversableIterableObj. --- git/objects/tree.py | 7 +++++-- git/objects/util.py | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/git/objects/tree.py b/git/objects/tree.py index d3681e23e..804554d83 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -4,7 +4,7 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php -from git.util import join_path +from git.util import IterableList, join_path import git.diff as diff from git.util import to_bin_sha @@ -21,7 +21,7 @@ # typing ------------------------------------------------- -from typing import (Callable, Dict, Iterable, Iterator, List, +from typing import (Any, Callable, Dict, Iterable, Iterator, List, Tuple, Type, Union, cast, TYPE_CHECKING) from git.types import PathLike, TypeGuard @@ -323,6 +323,9 @@ def traverse(self, # type: ignore # overrides super() super(Tree, self).traverse(predicate, prune, depth, # type: ignore branch_first, visit_once, ignore_self)) + def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList[Union['Tree', 'Submodule', 'Blob']]: + return super(Tree, self).list_traverse(* args, **kwargs) + # List protocol def __getslice__(self, i: int, j: int) -> List[IndexObjUnion]: diff --git a/git/objects/util.py b/git/objects/util.py index 982e7ac7f..4dce0aeed 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -19,6 +19,8 @@ import calendar from datetime import datetime, timedelta, tzinfo +from git.objects.base import IndexObject # just for an isinstance check + # typing ------------------------------------------------------------ from typing import (Any, Callable, Deque, Iterator, NamedTuple, overload, Sequence, TYPE_CHECKING, Tuple, Type, TypeVar, Union, cast) @@ -317,7 +319,7 @@ def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList[Union['Commit """ # Commit and Submodule have id.__attribute__ as IterableObj # Tree has id.__attribute__ inherited from IndexObject - if isinstance(self, (TraversableIterableObj, Tree)): + if isinstance(self, (TraversableIterableObj, IndexObject)): id = self._id_attribute_ else: id = "" # shouldn't reach here, unless Traversable subclass created with no _id_attribute_ @@ -456,6 +458,9 @@ class TraversableIterableObj(Traversable, IterableObj): TIobj_tuple = Tuple[Union[T_TIobj, None], T_TIobj] + def list_traverse(self: T_TIobj, *args: Any, **kwargs: Any) -> IterableList[T_TIobj]: # type: ignore[override] + return super(TraversableIterableObj, self).list_traverse(* args, **kwargs) + @ overload # type: ignore def traverse(self: T_TIobj, predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], From 3710e24d6b60213454af10b0dc0ff0c49717169f Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 10:33:12 +0100 Subject: [PATCH 0589/2375] Rmv circular import, create Has_id_attribute Protocol instead --- git/objects/tree.py | 2 +- git/objects/util.py | 6 ++---- git/types.py | 10 ++++++++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/git/objects/tree.py b/git/objects/tree.py index 804554d83..e168c6c42 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -323,7 +323,7 @@ def traverse(self, # type: ignore # overrides super() super(Tree, self).traverse(predicate, prune, depth, # type: ignore branch_first, visit_once, ignore_self)) - def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList[Union['Tree', 'Submodule', 'Blob']]: + def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList[IndexObjUnion]: return super(Tree, self).list_traverse(* args, **kwargs) # List protocol diff --git a/git/objects/util.py b/git/objects/util.py index 4dce0aeed..1c266563b 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -19,13 +19,11 @@ import calendar from datetime import datetime, timedelta, tzinfo -from git.objects.base import IndexObject # just for an isinstance check - # typing ------------------------------------------------------------ from typing import (Any, Callable, Deque, Iterator, NamedTuple, overload, Sequence, TYPE_CHECKING, Tuple, Type, TypeVar, Union, cast) -from git.types import Literal +from git.types import Has_id_attribute, Literal if TYPE_CHECKING: from io import BytesIO, StringIO @@ -319,7 +317,7 @@ def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList[Union['Commit """ # Commit and Submodule have id.__attribute__ as IterableObj # Tree has id.__attribute__ inherited from IndexObject - if isinstance(self, (TraversableIterableObj, IndexObject)): + if isinstance(self, (TraversableIterableObj, Has_id_attribute)): id = self._id_attribute_ else: id = "" # shouldn't reach here, unless Traversable subclass created with no _id_attribute_ diff --git a/git/types.py b/git/types.py index ac1bb2c80..b107c2e13 100644 --- a/git/types.py +++ b/git/types.py @@ -11,9 +11,9 @@ from git.repo import Repo if sys.version_info[:2] >= (3, 8): - from typing import Final, Literal, SupportsIndex, TypedDict, Protocol # noqa: F401 + from typing import Final, Literal, SupportsIndex, TypedDict, Protocol, runtime_checkable # noqa: F401 else: - from typing_extensions import Final, Literal, SupportsIndex, TypedDict, Protocol # noqa: F401 + from typing_extensions import Final, Literal, SupportsIndex, TypedDict, Protocol, runtime_checkable # noqa: F401 if sys.version_info[:2] >= (3, 10): from typing import TypeGuard # noqa: F401 @@ -73,5 +73,11 @@ class HSH_TD(TypedDict): files: Dict[PathLike, Files_TD] +@runtime_checkable class Has_Repo(Protocol): repo: 'Repo' + + +@runtime_checkable +class Has_id_attribute(Protocol): + _id_attribute_: str From 5eea8910b2e07d424a2e33299149d13392a80a54 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 10:37:31 +0100 Subject: [PATCH 0590/2375] Fix list_traverse() docstring for Autodoc --- git/objects/tree.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/git/objects/tree.py b/git/objects/tree.py index e168c6c42..9d2216521 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -324,6 +324,11 @@ def traverse(self, # type: ignore # overrides super() branch_first, visit_once, ignore_self)) def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList[IndexObjUnion]: + """ + :return: IterableList with the results of the traversal as produced by + traverse() + Tree -> IterableList[Union['Submodule', 'Tree', 'Blob']] + """ return super(Tree, self).list_traverse(* args, **kwargs) # List protocol From 937746291cfdaa40938de03db305b1137c391907 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 11:40:32 +0100 Subject: [PATCH 0591/2375] Make has_repo protocol runtime checkable and use in Diffable --- git/config.py | 4 ++-- git/diff.py | 8 +++++--- git/types.py | 25 ++++++++++++++++++++----- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/git/config.py b/git/config.py index 19ce1f849..2c863f938 100644 --- a/git/config.py +++ b/git/config.py @@ -234,8 +234,8 @@ def get_config_path(config_level: Lit_config_levels) -> str: elif config_level == "repository": raise ValueError("No repo to get repository configuration from. Use Repo._get_config_path") else: - # Should not reach here. Will raise ValueError if does. Static typing will warn about extra and missing elifs - assert_never(config_level, ValueError("Invalid configuration level: %r" % config_level)) + # Should not reach here. Will raise ValueError if does. Static typing will warn missing elifs + assert_never(config_level, ValueError(f"Invalid configuration level: {config_level!r}")) class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser, object)): # type: ignore ## mypy does not understand dynamic class creation # noqa: E501 diff --git a/git/diff.py b/git/diff.py index d3b186525..cb216299b 100644 --- a/git/diff.py +++ b/git/diff.py @@ -16,7 +16,7 @@ # typing ------------------------------------------------------------------ from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING -from git.types import PathLike, TBD, Literal, TypeGuard +from git.types import Has_Repo, PathLike, TBD, Literal, TypeGuard if TYPE_CHECKING: from .objects.tree import Tree @@ -141,8 +141,10 @@ def diff(self, other: Union[Type[Index], Type['Tree'], object, None, str] = Inde if paths is not None and not isinstance(paths, (tuple, list)): paths = [paths] - if hasattr(self, 'repo'): # else raise Error? - self.repo = self.repo # type: 'Repo' + if isinstance(self, Has_Repo): + self.repo: Repo = self.repo + else: + raise AttributeError("No repo member found, cannot create DiffIndex") diff_cmd = self.repo.git.diff if other is self.Index: diff --git a/git/types.py b/git/types.py index b107c2e13..9181e0406 100644 --- a/git/types.py +++ b/git/types.py @@ -4,7 +4,7 @@ import os import sys -from typing import (Callable, Dict, NoReturn, Tuple, Union, Any, Iterator, # noqa: F401 +from typing import (Callable, Dict, NoReturn, Sequence, Tuple, Union, Any, Iterator, # noqa: F401 NamedTuple, TYPE_CHECKING, TypeVar) # noqa: F401 if TYPE_CHECKING: @@ -37,6 +37,8 @@ Tree_ish = Union['Commit', 'Tree'] Commit_ish = Union['Commit', 'TagObject', 'Blob', 'Tree'] +# Config_levels --------------------------------------------------------- + Lit_config_levels = Literal['system', 'global', 'user', 'repository'] @@ -47,12 +49,25 @@ def is_config_level(inp: str) -> TypeGuard[Lit_config_levels]: ConfigLevels_Tup = Tuple[Literal['system'], Literal['user'], Literal['global'], Literal['repository']] +#----------------------------------------------------------------------------------- + + +def assert_never(inp: NoReturn, raise_error: bool = True, exc: Union[Exception, None] = None) -> None: + """For use in exhaustive checking of literal or Enum in if/else chain. + Should only be reached if all memebers not handled OR attempt to pass non-members through chain. + + If all members handled, type is Empty. Otherwise, will cause mypy error. + If non-members given, should cause mypy error at variable creation. -def assert_never(inp: NoReturn, exc: Union[Exception, None] = None) -> NoReturn: - if exc is None: - assert False, f"An unhandled Literal ({inp}) in an if/else chain was found" + If raise_error is True, will also raise AssertionError or the Exception passed to exc. + """ + if raise_error: + if exc is None: + raise ValueError(f"An unhandled Literal ({inp}) in an if/else chain was found") + else: + raise exc else: - raise exc + pass class Files_TD(TypedDict): From 3c6deb002c82c852bbd044fc9af2c1ecc9611efb Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 11:56:16 +0100 Subject: [PATCH 0592/2375] Flatten list_traverse() --- git/objects/util.py | 1 + 1 file changed, 1 insertion(+) diff --git a/git/objects/util.py b/git/objects/util.py index 1c266563b..d3f3a622c 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -328,6 +328,7 @@ def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList[Union['Commit # Union[IterableList['Commit'], IterableList['Submodule'], IterableList[Union['Submodule', 'Tree', 'Blob']]] # NOTE: if is_edge=True, self.traverse returns a Tuple, so should be prevented or flattened? + kwargs['as_edge'] = False out.extend(self.traverse(*args, **kwargs)) # type: ignore return out From a024bddd2a36c67967eda4e9f931c648924f0b19 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 14:27:40 +0100 Subject: [PATCH 0593/2375] Move TraverseNT to global, cos mypy complained on testing --- git/objects/submodule/base.py | 1 + git/objects/util.py | 10 ++++++---- git/util.py | 33 +++++++++++++++++---------------- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 5539069c0..f366e44c8 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -425,6 +425,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No raise ValueError("A URL was not given and a repository did not exist at %s" % path) # END check url mrepo = sm.module() + assert isinstance(mrepo, Repo) urls = [r.url for r in mrepo.remotes] if not urls: raise ValueError("Didn't find any remote url in repository at %s" % sm.abspath) diff --git a/git/objects/util.py b/git/objects/util.py index d3f3a622c..fbe3d9def 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -35,6 +35,12 @@ from .submodule.base import Submodule +class TraverseNT(NamedTuple): + depth: int + item: Union['Traversable', 'Blob'] + src: Union['Traversable', None] + + T_TIobj = TypeVar('T_TIobj', bound='TraversableIterableObj') # for TraversableIterableObj.traverse() TraversedTup = Union[Tuple[Union['Traversable', None], 'Traversable'], # for commit, submodule @@ -379,10 +385,6 @@ def traverse(self, ignore_self=True is_edge=False --> Iterator[item] ignore_self=False is_edge=True -> Iterator[item] | Iterator[Tuple[src, item]] ignore_self=False is_edge=False -> Iterator[Tuple[src, item]]""" - class TraverseNT(NamedTuple): - depth: int - item: Union['Traversable', 'Blob'] - src: Union['Traversable', None] visited = set() stack = deque() # type: Deque[TraverseNT] diff --git a/git/util.py b/git/util.py index 63ac6134d..571e261e1 100644 --- a/git/util.py +++ b/git/util.py @@ -36,13 +36,14 @@ from git.remote import Remote from git.repo.base import Repo from git.config import GitConfigParser, SectionConstraint - from git.objects.base import IndexObject + # from git.objects.base import IndexObject from .types import (Literal, SupportsIndex, # because behind py version guards - PathLike, HSH_TD, Total_TD, Files_TD) # aliases + PathLike, HSH_TD, Total_TD, Files_TD, # aliases + Has_id_attribute) -T_IterableObj = TypeVar('T_IterableObj', bound=Union['IterableObj', 'IndexObject'], covariant=True) +T_IterableObj = TypeVar('T_IterableObj', bound=Union['IterableObj', 'Has_id_attribute'], covariant=True) # So IterableList[Head] is subtype of IterableList[IterableObj] # --------------------------------------------------------------------- @@ -82,7 +83,7 @@ HIDE_WINDOWS_KNOWN_ERRORS = is_win and os.environ.get('HIDE_WINDOWS_KNOWN_ERRORS', True) HIDE_WINDOWS_FREEZE_ERRORS = is_win and os.environ.get('HIDE_WINDOWS_FREEZE_ERRORS', True) -#{ Utility Methods +# { Utility Methods T = TypeVar('T') @@ -247,7 +248,7 @@ def is_exec(fpath: str) -> bool: def _cygexpath(drive: Optional[str], path: str) -> str: if osp.isabs(path) and not drive: - ## Invoked from `cygpath()` directly with `D:Apps\123`? + # Invoked from `cygpath()` directly with `D:Apps\123`? # It's an error, leave it alone just slashes) p = path # convert to str if AnyPath given else: @@ -265,8 +266,8 @@ def _cygexpath(drive: Optional[str], path: str) -> str: _cygpath_parsers = ( - ## See: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx - ## and: https://www.cygwin.com/cygwin-ug-net/using.html#unc-paths + # See: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx + # and: https://www.cygwin.com/cygwin-ug-net/using.html#unc-paths (re.compile(r"\\\\\?\\UNC\\([^\\]+)\\([^\\]+)(?:\\(.*))?"), (lambda server, share, rest_path: '//%s/%s/%s' % (server, share, rest_path.replace('\\', '/'))), False @@ -297,7 +298,7 @@ def _cygexpath(drive: Optional[str], path: str) -> str: def cygpath(path: str) -> str: """Use :meth:`git.cmd.Git.polish_url()` instead, that works on any environment.""" path = str(path) # ensure is str and not AnyPath. - #Fix to use Paths when 3.5 dropped. or to be just str if only for urls? + # Fix to use Paths when 3.5 dropped. or to be just str if only for urls? if not path.startswith(('/cygdrive', '//')): for regex, parser, recurse in _cygpath_parsers: match = regex.match(path) @@ -357,7 +358,7 @@ def is_cygwin_git(git_executable: Union[None, PathLike]) -> bool: res = py_where(git_executable) git_dir = osp.dirname(res[0]) if res else "" - ## Just a name given, not a real path. + # Just a name given, not a real path. uname_cmd = osp.join(git_dir, 'uname') process = subprocess.Popen([uname_cmd], stdout=subprocess.PIPE, universal_newlines=True) @@ -378,7 +379,7 @@ def get_user_id() -> str: def finalize_process(proc: subprocess.Popen, **kwargs: Any) -> None: """Wait for the process (clone, fetch, pull or push) and handle its errors accordingly""" - ## TODO: No close proc-streams?? + # TODO: No close proc-streams?? proc.wait(**kwargs) @@ -432,9 +433,9 @@ def remove_password_if_present(cmdline): return new_cmdline -#} END utilities +# } END utilities -#{ Classes +# { Classes class RemoteProgress(object): @@ -984,7 +985,7 @@ def __contains__(self, attr: object) -> bool: return False # END handle membership - def __getattr__(self, attr: str) -> Any: + def __getattr__(self, attr: str) -> T_IterableObj: attr = self._prefix + attr for item in self: if getattr(item, self._id_attr) == attr: @@ -992,7 +993,7 @@ def __getattr__(self, attr: str) -> Any: # END for each item return list.__getattribute__(self, attr) - def __getitem__(self, index: Union[SupportsIndex, int, slice, str]) -> Any: + def __getitem__(self, index: Union[SupportsIndex, int, slice, str]) -> 'T_IterableObj': # type: ignore assert isinstance(index, (int, str, slice)), "Index of IterableList should be an int or str" @@ -1007,7 +1008,7 @@ def __getitem__(self, index: Union[SupportsIndex, int, slice, str]) -> Any: raise IndexError("No item found with id %r" % (self._prefix + index)) from e # END handle getattr - def __delitem__(self, index: Union[SupportsIndex, int, slice, str]) -> Any: + def __delitem__(self, index: Union[SupportsIndex, int, slice, str]) -> None: assert isinstance(index, (int, str)), "Index of IterableList should be an int or str" @@ -1101,7 +1102,7 @@ def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any :return: iterator yielding Items""" raise NotImplementedError("To be implemented by Subclass") -#} END classes +# } END classes class NullHandler(logging.Handler): From 627166094f9280a3e00b755b754a4bd6ed72bb66 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 14:33:15 +0100 Subject: [PATCH 0594/2375] Rmv submodule.base Repo assert --- git/objects/submodule/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index f366e44c8..b485dbf6b 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -425,7 +425,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No raise ValueError("A URL was not given and a repository did not exist at %s" % path) # END check url mrepo = sm.module() - assert isinstance(mrepo, Repo) + # assert isinstance(mrepo, git.Repo) urls = [r.url for r in mrepo.remotes] if not urls: raise ValueError("Didn't find any remote url in repository at %s" % sm.abspath) From 7c6ae2b94cfd1593c12366b6abc0cd5bbb6e07b2 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 15:07:50 +0100 Subject: [PATCH 0595/2375] Try to distinguation git.diff module from diff.Diff.diff and diff.Daffable.diff() --- git/diff.py | 26 +++++++++++++------------- git/index/base.py | 15 ++++++++------- git/objects/tree.py | 4 ++-- git/remote.py | 2 +- 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/git/diff.py b/git/diff.py index cb216299b..71bbdf754 100644 --- a/git/diff.py +++ b/git/diff.py @@ -212,19 +212,19 @@ def iter_change_type(self, change_type: Lit_change_type) -> Iterator[T_Diff]: if change_type not in self.change_type: raise ValueError("Invalid change type: %s" % change_type) - for diff in self: - if diff.change_type == change_type: - yield diff - elif change_type == "A" and diff.new_file: - yield diff - elif change_type == "D" and diff.deleted_file: - yield diff - elif change_type == "C" and diff.copied_file: - yield diff - elif change_type == "R" and diff.renamed: - yield diff - elif change_type == "M" and diff.a_blob and diff.b_blob and diff.a_blob != diff.b_blob: - yield diff + for diffidx in self: + if diffidx.change_type == change_type: + yield diffidx + elif change_type == "A" and diffidx.new_file: + yield diffidx + elif change_type == "D" and diffidx.deleted_file: + yield diffidx + elif change_type == "C" and diffidx.copied_file: + yield diffidx + elif change_type == "R" and diffidx.renamed: + yield diffidx + elif change_type == "M" and diffidx.a_blob and diffidx.b_blob and diffidx.a_blob != diffidx.b_blob: + yield diffidx # END for each diff diff --git a/git/index/base.py b/git/index/base.py index 1812faeeb..bd3dde996 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -41,7 +41,7 @@ from gitdb.base import IStream from gitdb.db import MemoryDB -import git.diff as diff +import git.diff as git_diff import os.path as osp from .fun import ( @@ -88,7 +88,7 @@ __all__ = ('IndexFile', 'CheckoutError') -class IndexFile(LazyMixin, diff.Diffable, Serializable): +class IndexFile(LazyMixin, git_diff.Diffable, Serializable): """ Implements an Index that can be manipulated using a native implementation in @@ -575,8 +575,8 @@ def write_tree(self) -> Tree: root_tree._cache = tree_items # type: ignore return root_tree - def _process_diff_args(self, args: List[Union[str, diff.Diffable, object]] - ) -> List[Union[str, diff.Diffable, object]]: + def _process_diff_args(self, args: List[Union[str, git_diff.Diffable, object]] + ) -> List[Union[str, git_diff.Diffable, object]]: try: args.pop(args.index(self)) except IndexError: @@ -1272,10 +1272,11 @@ def reset(self, commit: Union[Commit, 'Reference', str] = 'HEAD', working_tree: return self @ default_index - def diff(self, other: Union[diff.Diffable.Index, 'IndexFile.Index', Treeish, None, object] = diff.Diffable.Index, + def diff(self, + other: Union[git_diff.Diffable.Index, 'IndexFile.Index', Treeish, None, object] = git_diff.Diffable.Index, paths: Union[str, List[PathLike], Tuple[PathLike, ...], None] = None, create_patch: bool = False, **kwargs: Any - ) -> diff.DiffIndex: + ) -> git_diff.DiffIndex: """Diff this index against the working copy or a Tree or Commit object For a documentation of the parameters and return values, see, @@ -1287,7 +1288,7 @@ def diff(self, other: Union[diff.Diffable.Index, 'IndexFile.Index', Treeish, Non """ # index against index is always empty if other is self.Index: - return diff.DiffIndex() + return git_diff.DiffIndex() # index against anything but None is a reverse diff with the respective # item. Handle existing -R flags properly. Transform strings to the object diff --git a/git/objects/tree.py b/git/objects/tree.py index 9d2216521..4c2a02bfb 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -5,7 +5,7 @@ # the BSD License: http://www.opensource.org/licenses/bsd-license.php from git.util import IterableList, join_path -import git.diff as diff +import git.diff as git_diff from git.util import to_bin_sha from . import util @@ -180,7 +180,7 @@ def __delitem__(self, name: str) -> None: #} END mutators -class Tree(IndexObject, diff.Diffable, util.Traversable, util.Serializable): +class Tree(IndexObject, git_diff.Diffable, util.Traversable, util.Serializable): """Tree objects represent an ordered list of Blobs and other Trees. diff --git a/git/remote.py b/git/remote.py index 739424ee8..2998b9874 100644 --- a/git/remote.py +++ b/git/remote.py @@ -469,7 +469,7 @@ def __getattr__(self, attr: str) -> Any: def _config_section_name(self) -> str: return 'remote "%s"' % self.name - def _set_cache_(self, attr: str) -> Any: + def _set_cache_(self, attr: str) -> None: if attr == "_config_reader": # NOTE: This is cached as __getattr__ is overridden to return remote config values implicitly, such as # in print(r.pushurl) From f916c148ea956655837a98817778abe685bf7ee7 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 15:40:14 +0100 Subject: [PATCH 0596/2375] Improve Diffable method typing --- git/diff.py | 32 ++++++++++++++++---------------- git/index/base.py | 6 +++--- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/git/diff.py b/git/diff.py index 71bbdf754..4024776d7 100644 --- a/git/diff.py +++ b/git/diff.py @@ -16,13 +16,12 @@ # typing ------------------------------------------------------------------ from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING -from git.types import Has_Repo, PathLike, TBD, Literal, TypeGuard +from git.types import PathLike, TBD, Literal, TypeGuard if TYPE_CHECKING: from .objects.tree import Tree from git.repo.base import Repo from git.objects.base import IndexObject - from subprocess import Popen Lit_change_type = Literal['A', 'D', 'C', 'M', 'R', 'T', 'U'] @@ -82,7 +81,8 @@ class Diffable(object): class Index(object): pass - def _process_diff_args(self, args: List[Union[str, 'Diffable', object]]) -> List[Union[str, 'Diffable', object]]: + def _process_diff_args(self, args: List[Union[PathLike, 'Diffable', Type['Diffable.Index']]] + ) -> List[Union[PathLike, 'Diffable', Type['Diffable.Index']]]: """ :return: possibly altered version of the given args list. @@ -90,7 +90,7 @@ def _process_diff_args(self, args: List[Union[str, 'Diffable', object]]) -> List Subclasses can use it to alter the behaviour of the superclass""" return args - def diff(self, other: Union[Type[Index], Type['Tree'], object, None, str] = Index, + def diff(self, other: Union[Type['Index'], 'Tree', None, str] = Index, paths: Union[PathLike, List[PathLike], Tuple[PathLike, ...], None] = None, create_patch: bool = False, **kwargs: Any) -> 'DiffIndex': """Creates diffs between two items being trees, trees and index or an @@ -123,7 +123,7 @@ def diff(self, other: Union[Type[Index], Type['Tree'], object, None, str] = Inde :note: On a bare repository, 'other' needs to be provided as Index or as as Tree/Commit, or a git command error will occur""" - args = [] # type: List[Union[str, Diffable, object]] + args: List[Union[PathLike, Diffable, Type['Diffable.Index']]] = [] args.append("--abbrev=40") # we need full shas args.append("--full-index") # get full index paths, not only filenames @@ -141,7 +141,7 @@ def diff(self, other: Union[Type[Index], Type['Tree'], object, None, str] = Inde if paths is not None and not isinstance(paths, (tuple, list)): paths = [paths] - if isinstance(self, Has_Repo): + if hasattr(self, 'Has_Repo'): self.repo: Repo = self.repo else: raise AttributeError("No repo member found, cannot create DiffIndex") @@ -400,36 +400,36 @@ def __str__(self) -> str: # end return res - @property + @ property def a_path(self) -> Optional[str]: return self.a_rawpath.decode(defenc, 'replace') if self.a_rawpath else None - @property + @ property def b_path(self) -> Optional[str]: return self.b_rawpath.decode(defenc, 'replace') if self.b_rawpath else None - @property + @ property def rename_from(self) -> Optional[str]: return self.raw_rename_from.decode(defenc, 'replace') if self.raw_rename_from else None - @property + @ property def rename_to(self) -> Optional[str]: return self.raw_rename_to.decode(defenc, 'replace') if self.raw_rename_to else None - @property + @ property def renamed(self) -> bool: """:returns: True if the blob of our diff has been renamed :note: This property is deprecated, please use ``renamed_file`` instead. """ return self.renamed_file - @property + @ property def renamed_file(self) -> bool: """:returns: True if the blob of our diff has been renamed """ return self.rename_from != self.rename_to - @classmethod + @ classmethod def _pick_best_path(cls, path_match: bytes, rename_match: bytes, path_fallback_match: bytes) -> Optional[bytes]: if path_match: return decode_path(path_match) @@ -442,7 +442,7 @@ def _pick_best_path(cls, path_match: bytes, rename_match: bytes, path_fallback_m return None - @classmethod + @ classmethod def _index_from_patch_format(cls, repo: 'Repo', proc: TBD) -> DiffIndex: """Create a new DiffIndex from the given text which must be in patch format :param repo: is the repository we are operating on - it is required @@ -505,7 +505,7 @@ def _index_from_patch_format(cls, repo: 'Repo', proc: TBD) -> DiffIndex: return index - @staticmethod + @ staticmethod def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> None: lines = lines_bytes.decode(defenc) @@ -559,7 +559,7 @@ def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> Non '', change_type, score) index.append(diff) - @classmethod + @ classmethod def _index_from_raw_format(cls, repo: 'Repo', proc: 'Popen') -> 'DiffIndex': """Create a new DiffIndex from the given stream which must be in raw format. :return: git.DiffIndex""" diff --git a/git/index/base.py b/git/index/base.py index bd3dde996..6738e223c 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -68,7 +68,7 @@ # typing ----------------------------------------------------------------------------- from typing import (Any, BinaryIO, Callable, Dict, IO, Iterable, Iterator, List, NoReturn, - Sequence, TYPE_CHECKING, Tuple, Union) + Sequence, TYPE_CHECKING, Tuple, Type, Union) from git.types import Commit_ish, PathLike, TBD @@ -575,8 +575,8 @@ def write_tree(self) -> Tree: root_tree._cache = tree_items # type: ignore return root_tree - def _process_diff_args(self, args: List[Union[str, git_diff.Diffable, object]] - ) -> List[Union[str, git_diff.Diffable, object]]: + def _process_diff_args(self, args: List[Union[PathLike, 'git_diff.Diffable', Type['git_diff.Diffable.Index']]] + ) -> List[Union[PathLike, 'git_diff.Diffable', Type['git_diff.Diffable.Index']]]: try: args.pop(args.index(self)) except IndexError: From e7b685db1bf4d9d6aa3f95f4df3fda5992dab14c Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 15:49:32 +0100 Subject: [PATCH 0597/2375] Rmv Diffable assert, add Remoote.url property --- git/diff.py | 2 -- git/remote.py | 8 ++++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/git/diff.py b/git/diff.py index 4024776d7..1e2ee7400 100644 --- a/git/diff.py +++ b/git/diff.py @@ -143,8 +143,6 @@ def diff(self, other: Union[Type['Index'], 'Tree', None, str] = Index, if hasattr(self, 'Has_Repo'): self.repo: Repo = self.repo - else: - raise AttributeError("No repo member found, cannot create DiffIndex") diff_cmd = self.repo.git.diff if other is self.Index: diff --git a/git/remote.py b/git/remote.py index 2998b9874..3c3d3c483 100644 --- a/git/remote.py +++ b/git/remote.py @@ -558,6 +558,14 @@ def delete_url(self, url: str, **kwargs: Any) -> 'Remote': """ return self.set_url(url, delete=True) + @property + def url(self) -> Union[str, List[str]]: + url_list = list(self.urls) + if len(url_list) == 1: + return url_list[0] + else: + return url_list + @property def urls(self) -> Iterator[str]: """:return: Iterator yielding all configured URL targets on a remote as strings""" From 9bb630f03a276a4f1ecc6d6909f82dc90f533026 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 15:53:45 +0100 Subject: [PATCH 0598/2375] Add remote.url type --- git/remote.py | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/git/remote.py b/git/remote.py index 3c3d3c483..f59b3245b 100644 --- a/git/remote.py +++ b/git/remote.py @@ -449,8 +449,9 @@ def __init__(self, repo: 'Repo', name: str) -> None: :param repo: The repository we are a remote of :param name: the name of the remote, i.e. 'origin'""" - self.repo = repo # type: 'Repo' + self.repo = repo self.name = name + self.url: str def __getattr__(self, attr: str) -> Any: """Allows to call this instance like @@ -558,15 +559,7 @@ def delete_url(self, url: str, **kwargs: Any) -> 'Remote': """ return self.set_url(url, delete=True) - @property - def url(self) -> Union[str, List[str]]: - url_list = list(self.urls) - if len(url_list) == 1: - return url_list[0] - else: - return url_list - - @property + @ property def urls(self) -> Iterator[str]: """:return: Iterator yielding all configured URL targets on a remote as strings""" try: @@ -599,7 +592,7 @@ def urls(self) -> Iterator[str]: else: raise ex - @property + @ property def refs(self) -> IterableList[RemoteReference]: """ :return: @@ -610,7 +603,7 @@ def refs(self) -> IterableList[RemoteReference]: out_refs.extend(RemoteReference.list_items(self.repo, remote=self.name)) return out_refs - @property + @ property def stale_refs(self) -> IterableList[Reference]: """ :return: @@ -644,7 +637,7 @@ def stale_refs(self) -> IterableList[Reference]: # END for each line return out_refs - @classmethod + @ classmethod def create(cls, repo: 'Repo', name: str, url: str, **kwargs: Any) -> 'Remote': """Create a new remote to the given repository :param repo: Repository instance that is to receive the new remote @@ -661,7 +654,7 @@ def create(cls, repo: 'Repo', name: str, url: str, **kwargs: Any) -> 'Remote': # add is an alias add = create - @classmethod + @ classmethod def remove(cls, repo: 'Repo', name: str) -> str: """Remove the remote with the given name :return: the passed remote name to remove From b03af0547f5381cf4043a43acf533687d91f0ea1 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 16:12:40 +0100 Subject: [PATCH 0599/2375] Remove defsult_index decorator from diff() and do check within function. Breaks typechecking for some reason --- git/index/base.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/git/index/base.py b/git/index/base.py index 6738e223c..149edf5a4 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -1271,10 +1271,10 @@ def reset(self, commit: Union[Commit, 'Reference', str] = 'HEAD', working_tree: return self - @ default_index + # @ default_index, breaks typing for some reason, copied into function def diff(self, other: Union[git_diff.Diffable.Index, 'IndexFile.Index', Treeish, None, object] = git_diff.Diffable.Index, - paths: Union[str, List[PathLike], Tuple[PathLike, ...], None] = None, + paths: Union[PathLike, List[PathLike], Tuple[PathLike, ...], None] = None, create_patch: bool = False, **kwargs: Any ) -> git_diff.DiffIndex: """Diff this index against the working copy or a Tree or Commit object @@ -1286,6 +1286,11 @@ def diff(self, Will only work with indices that represent the default git index as they have not been initialized with a stream. """ + + # only run if we are the default repository index + if self._file_path != self._index_path(): + raise AssertionError( + "Cannot call %r on indices that do not represent the default git index" % self.diff()) # index against index is always empty if other is self.Index: return git_diff.DiffIndex() From 797e962fc1811ddc5a5a34308bd243953eb77135 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 16:27:34 +0100 Subject: [PATCH 0600/2375] Make IndexFile and Diffable .diff() types agree --- git/diff.py | 3 ++- git/index/base.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/git/diff.py b/git/diff.py index 1e2ee7400..7ca98ec36 100644 --- a/git/diff.py +++ b/git/diff.py @@ -20,6 +20,7 @@ if TYPE_CHECKING: from .objects.tree import Tree + from .objects import Commit from git.repo.base import Repo from git.objects.base import IndexObject from subprocess import Popen @@ -90,7 +91,7 @@ def _process_diff_args(self, args: List[Union[PathLike, 'Diffable', Type['Diffab Subclasses can use it to alter the behaviour of the superclass""" return args - def diff(self, other: Union[Type['Index'], 'Tree', None, str] = Index, + def diff(self, other: Union[Type['Index'], 'Tree', 'Commit', None, str] = Index, # object for git.NULL_TREE paths: Union[PathLike, List[PathLike], Tuple[PathLike, ...], None] = None, create_patch: bool = False, **kwargs: Any) -> 'DiffIndex': """Creates diffs between two items being trees, trees and index or an diff --git a/git/index/base.py b/git/index/base.py index 149edf5a4..75df51845 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -1273,7 +1273,8 @@ def reset(self, commit: Union[Commit, 'Reference', str] = 'HEAD', working_tree: # @ default_index, breaks typing for some reason, copied into function def diff(self, - other: Union[git_diff.Diffable.Index, 'IndexFile.Index', Treeish, None, object] = git_diff.Diffable.Index, + other: Union[Type['git_diff.Diffable.Index'], 'IndexFile.Index', + 'Tree', 'Commit', str, None] = git_diff.Diffable.Index, paths: Union[PathLike, List[PathLike], Tuple[PathLike, ...], None] = None, create_patch: bool = False, **kwargs: Any ) -> git_diff.DiffIndex: From 09053c565915d114384b1c20af8eecfed98c8069 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 22:58:02 +0100 Subject: [PATCH 0601/2375] Improve IndexFile_process_diff_args() to get checks to rerun --- git/diff.py | 8 ++++---- git/index/base.py | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/git/diff.py b/git/diff.py index 7ca98ec36..51dac3909 100644 --- a/git/diff.py +++ b/git/diff.py @@ -82,8 +82,8 @@ class Diffable(object): class Index(object): pass - def _process_diff_args(self, args: List[Union[PathLike, 'Diffable', Type['Diffable.Index']]] - ) -> List[Union[PathLike, 'Diffable', Type['Diffable.Index']]]: + def _process_diff_args(self, args: List[Union[str, 'Diffable', Type['Diffable.Index'], object]] + ) -> List[Union[str, 'Diffable', Type['Diffable.Index'], object]]: """ :return: possibly altered version of the given args list. @@ -91,7 +91,7 @@ def _process_diff_args(self, args: List[Union[PathLike, 'Diffable', Type['Diffab Subclasses can use it to alter the behaviour of the superclass""" return args - def diff(self, other: Union[Type['Index'], 'Tree', 'Commit', None, str] = Index, # object for git.NULL_TREE + def diff(self, other: Union[Type['Index'], 'Tree', 'Commit', None, str, object] = Index, paths: Union[PathLike, List[PathLike], Tuple[PathLike, ...], None] = None, create_patch: bool = False, **kwargs: Any) -> 'DiffIndex': """Creates diffs between two items being trees, trees and index or an @@ -124,7 +124,7 @@ def diff(self, other: Union[Type['Index'], 'Tree', 'Commit', None, str] = Index, :note: On a bare repository, 'other' needs to be provided as Index or as as Tree/Commit, or a git command error will occur""" - args: List[Union[PathLike, Diffable, Type['Diffable.Index']]] = [] + args: List[Union[PathLike, Diffable, Type['Diffable.Index'], object]] = [] args.append("--abbrev=40") # we need full shas args.append("--full-index") # get full index paths, not only filenames diff --git a/git/index/base.py b/git/index/base.py index 75df51845..6f6ea5aa8 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -575,8 +575,9 @@ def write_tree(self) -> Tree: root_tree._cache = tree_items # type: ignore return root_tree - def _process_diff_args(self, args: List[Union[PathLike, 'git_diff.Diffable', Type['git_diff.Diffable.Index']]] - ) -> List[Union[PathLike, 'git_diff.Diffable', Type['git_diff.Diffable.Index']]]: + def _process_diff_args(self, # type: ignore[override] + args: List[Union[str, 'git_diff.Diffable', Type['git_diff.Diffable.Index']]] + ) -> List[Union[str, 'git_diff.Diffable', Type['git_diff.Diffable.Index']]]: try: args.pop(args.index(self)) except IndexError: @@ -1272,9 +1273,8 @@ def reset(self, commit: Union[Commit, 'Reference', str] = 'HEAD', working_tree: return self # @ default_index, breaks typing for some reason, copied into function - def diff(self, - other: Union[Type['git_diff.Diffable.Index'], 'IndexFile.Index', - 'Tree', 'Commit', str, None] = git_diff.Diffable.Index, + def diff(self, # type: ignore[override] + other: Union[Type['git_diff.Diffable.Index'], 'Tree', 'Commit', str, None] = git_diff.Diffable.Index, paths: Union[PathLike, List[PathLike], Tuple[PathLike, ...], None] = None, create_patch: bool = False, **kwargs: Any ) -> git_diff.DiffIndex: From 2ea528e9fbcac850d99ce527ad4a5e4afb3587a8 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 23:21:16 +0100 Subject: [PATCH 0602/2375] Fix typing of index.fun.write_tree_from_cache() --- git/index/base.py | 2 +- git/index/fun.py | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/git/index/base.py b/git/index/base.py index 6f6ea5aa8..3aa06e381 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -572,7 +572,7 @@ def write_tree(self) -> Tree: # note: additional deserialization could be saved if write_tree_from_cache # would return sorted tree entries root_tree = Tree(self.repo, binsha, path='') - root_tree._cache = tree_items # type: ignore + root_tree._cache = tree_items # type: ignore # should this be encoded to [bytes, int, str]? return root_tree def _process_diff_args(self, # type: ignore[override] diff --git a/git/index/fun.py b/git/index/fun.py index 457856879..96833a7a7 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -249,7 +249,7 @@ def read_cache(stream: IO[bytes]) -> Tuple[int, Dict[Tuple[PathLike, int], 'Inde def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 - ) -> Tuple[bytes, List[Tuple[str, int, str]]]: + ) -> Tuple[bytes, List[Tuple[bytes, int, str]]]: """Create a tree from the given sorted list of entries and put the respective trees into the given object database @@ -298,12 +298,11 @@ def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 # finally create the tree sio = BytesIO() - tree_to_stream(tree_items, sio.write) # converts bytes of each item[0] to str - tree_items_stringified = cast(List[Tuple[str, int, str]], tree_items) + tree_to_stream(tree_items, sio.write) # writes to stream as bytes, but doesnt change tree_items sio.seek(0) istream = odb.store(IStream(str_tree_type, len(sio.getvalue()), sio)) - return (istream.binsha, tree_items_stringified) + return (istream.binsha, tree_items) def _tree_entry_to_baseindexentry(tree_entry: Tuple[bytes, int, str], stage: int) -> BaseIndexEntry: From e6a27adb71d21c81628acbdd65bf07037604ff90 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 23:33:53 +0100 Subject: [PATCH 0603/2375] Use TreeCacheTup type alias throughout --- git/index/fun.py | 7 ++++--- git/objects/fun.py | 2 +- git/objects/tree.py | 14 ++++++++------ 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/git/index/fun.py b/git/index/fun.py index 96833a7a7..df74c2c14 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -57,6 +57,7 @@ if TYPE_CHECKING: from .base import IndexFile + from objects.tree import TreeCacheTup # from git.objects.fun import EntryTupOrNone # ------------------------------------------------------------------------------------ @@ -249,7 +250,7 @@ def read_cache(stream: IO[bytes]) -> Tuple[int, Dict[Tuple[PathLike, int], 'Inde def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 - ) -> Tuple[bytes, List[Tuple[bytes, int, str]]]: + ) -> Tuple[bytes, List[TreeCacheTup]]: """Create a tree from the given sorted list of entries and put the respective trees into the given object database @@ -259,7 +260,7 @@ def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 :param sl: slice indicating the range we should process on the entries list :return: tuple(binsha, list(tree_entry, ...)) a tuple of a sha and a list of tree entries being a tuple of hexsha, mode, name""" - tree_items: List[Tuple[bytes, int, str]] = [] + tree_items: List[TreeCacheTup] = [] ci = sl.start end = sl.stop @@ -305,7 +306,7 @@ def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 return (istream.binsha, tree_items) -def _tree_entry_to_baseindexentry(tree_entry: Tuple[bytes, int, str], stage: int) -> BaseIndexEntry: +def _tree_entry_to_baseindexentry(tree_entry: TreeCacheTup, stage: int) -> BaseIndexEntry: return BaseIndexEntry((tree_entry[1], tree_entry[0], stage << CE_STAGESHIFT, tree_entry[2])) diff --git a/git/objects/fun.py b/git/objects/fun.py index be541eb8d..fc2ea1e7e 100644 --- a/git/objects/fun.py +++ b/git/objects/fun.py @@ -215,7 +215,7 @@ def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[by return out -def traverse_tree_recursive(odb: 'GitCmdObjectDB', tree_sha: bytes, path_prefix: str) -> List[Tuple[bytes, int, str]]: +def traverse_tree_recursive(odb: 'GitCmdObjectDB', tree_sha: bytes, path_prefix: str) -> List[EntryTup]: """ :return: list of entries of the tree pointed to by the binary tree_sha. An entry has the following format: diff --git a/git/objects/tree.py b/git/objects/tree.py index 4c2a02bfb..a9656c1d3 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -31,9 +31,14 @@ from io import BytesIO TreeCacheTup = Tuple[bytes, int, str] + TraversedTreeTup = Union[Tuple[Union['Tree', None], IndexObjUnion, Tuple['Submodule', 'Submodule']]] + +def is_tree_cache(inp: Tuple[bytes, int, str]) -> TypeGuard[TreeCacheTup]: + return isinstance(inp[0], bytes) and isinstance(inp[1], int) and isinstance([inp], str) + #-------------------------------------------------------- @@ -141,11 +146,8 @@ def add(self, sha: bytes, mode: int, name: str, force: bool = False) -> 'TreeMod sha = to_bin_sha(sha) index = self._index_by_name(name) - def is_tree_cache(inp: Tuple[bytes, int, str]) -> TypeGuard[TreeCacheTup]: - return isinstance(inp[0], bytes) and isinstance(inp[1], int) and isinstance([inp], str) - item = (sha, mode, name) - assert is_tree_cache(item) + # assert is_tree_cache(item) if index == -1: self._cache.append(item) @@ -223,12 +225,12 @@ def _set_cache_(self, attr: str) -> None: if attr == "_cache": # Set the data when we need it ostream = self.repo.odb.stream(self.binsha) - self._cache: List[Tuple[bytes, int, str]] = tree_entries_from_data(ostream.read()) + self._cache: List[TreeCacheTup] = tree_entries_from_data(ostream.read()) else: super(Tree, self)._set_cache_(attr) # END handle attribute - def _iter_convert_to_object(self, iterable: Iterable[Tuple[bytes, int, str]] + def _iter_convert_to_object(self, iterable: Iterable[TreeCacheTup] ) -> Iterator[IndexObjUnion]: """Iterable yields tuples of (binsha, mode, name), which will be converted to the respective object representation""" From 94c66525a6e7d5c74a9aee65d14630bb674439f7 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Fri, 9 Jul 2021 23:36:35 +0100 Subject: [PATCH 0604/2375] Make TreeCacheTup forward ref --- git/index/fun.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/git/index/fun.py b/git/index/fun.py index df74c2c14..e5e566a05 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -57,7 +57,7 @@ if TYPE_CHECKING: from .base import IndexFile - from objects.tree import TreeCacheTup + from git.objects.tree import TreeCacheTup # from git.objects.fun import EntryTupOrNone # ------------------------------------------------------------------------------------ @@ -250,7 +250,7 @@ def read_cache(stream: IO[bytes]) -> Tuple[int, Dict[Tuple[PathLike, int], 'Inde def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 - ) -> Tuple[bytes, List[TreeCacheTup]]: + ) -> Tuple[bytes, List['TreeCacheTup']]: """Create a tree from the given sorted list of entries and put the respective trees into the given object database @@ -260,7 +260,7 @@ def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 :param sl: slice indicating the range we should process on the entries list :return: tuple(binsha, list(tree_entry, ...)) a tuple of a sha and a list of tree entries being a tuple of hexsha, mode, name""" - tree_items: List[TreeCacheTup] = [] + tree_items: List['TreeCacheTup'] = [] ci = sl.start end = sl.stop @@ -306,7 +306,7 @@ def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 return (istream.binsha, tree_items) -def _tree_entry_to_baseindexentry(tree_entry: TreeCacheTup, stage: int) -> BaseIndexEntry: +def _tree_entry_to_baseindexentry(tree_entry: 'TreeCacheTup', stage: int) -> BaseIndexEntry: return BaseIndexEntry((tree_entry[1], tree_entry[0], stage << CE_STAGESHIFT, tree_entry[2])) From a1b76342be030cfff6f5e2c770e8ee831c63ec3c Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 16:49:49 +0100 Subject: [PATCH 0605/2375] Add files via upload --- dev-requirements.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 dev-requirements.txt diff --git a/dev-requirements.txt b/dev-requirements.txt new file mode 100644 index 000000000..abb677d00 --- /dev/null +++ b/dev-requirements.txt @@ -0,0 +1,10 @@ +ddt>=1.1.1 +coverage +flake8 +flake8-type-checking;python_version>="3.8" +tox +mypy +pytest +pytest-cov +gitdb>=4.0.1,<5 +typing-extensions>=3.7.4.3;python_version<"3.10" From fefda8c962e394bcc922056ce74ee33ae760a69a Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 16:50:29 +0100 Subject: [PATCH 0606/2375] Add files via upload --- .github/workflows/test_pytest.yml | 55 +++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 .github/workflows/test_pytest.yml diff --git a/.github/workflows/test_pytest.yml b/.github/workflows/test_pytest.yml new file mode 100644 index 000000000..55c8e9844 --- /dev/null +++ b/.github/workflows/test_pytest.yml @@ -0,0 +1,55 @@ +# This workflow will install Python dependencies, run tests and lint with a variety of Python versions +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: Python package + +on: + push: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: + [3.6, 3.7, 3.8, 3.9, "3.10.0-beta.3"] + + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 9999 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies and prepare tests + run: | + set -x + python -m pip install --upgrade pip + python --version; git --version + git submodule update --init --recursive + git fetch --tags + + pip install -r dev-requirements.txt + TRAVIS=yes ./init-tests-after-clone.sh + + git config --global user.email "travis@ci.com" + git config --global user.name "Travis Runner" + # If we rewrite the user's config by accident, we will mess it up + # and cause subsequent tests to fail + cat test/fixtures/.gitconfig >> ~/.gitconfig + + - name: Test with pytest + run: | + set -x + pip install -r dev-requirements.txt + pytest --cov --cov-report=term-missing:skip-covered + # --cov-report=html:test/coverage + continue-on-error: true + + + + + From ec365801aecec611ea8984b4e9575d7dcab6ed04 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 16:51:26 +0100 Subject: [PATCH 0607/2375] Update test-requirements.txt --- test-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-requirements.txt b/test-requirements.txt index ab3f86109..a8a3a1527 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -3,6 +3,6 @@ coverage flake8 tox virtualenv -nose +nose;python_version<"3.10" gitdb>=4.0.1,<5 typing-extensions>=3.7.4.3;python_version<"3.10" From d77b3c0794e1b8e24b7917d7d480305b8063e36d Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 16:52:50 +0100 Subject: [PATCH 0608/2375] Update test_pytest.yml --- .github/workflows/test_pytest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_pytest.yml b/.github/workflows/test_pytest.yml index 55c8e9844..627e720f1 100644 --- a/.github/workflows/test_pytest.yml +++ b/.github/workflows/test_pytest.yml @@ -1,7 +1,7 @@ # This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions -name: Python package +name: Future on: push: From 185d847ec7647fd2642a82d9205fb3d07ea71715 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 17:02:21 +0100 Subject: [PATCH 0609/2375] Update and rename test_pytest.yml to Future.yml --- .github/workflows/{test_pytest.yml => Future.yml} | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) rename .github/workflows/{test_pytest.yml => Future.yml} (92%) diff --git a/.github/workflows/test_pytest.yml b/.github/workflows/Future.yml similarity index 92% rename from .github/workflows/test_pytest.yml rename to .github/workflows/Future.yml index 627e720f1..39146533b 100644 --- a/.github/workflows/test_pytest.yml +++ b/.github/workflows/Future.yml @@ -5,7 +5,9 @@ name: Future on: push: - branches: [main] + branches: [ main ] + pull_request: + branches: [ main ] jobs: build: From 882f2a5e93c60e1aad0ab04a6e3eeb09170dee00 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 22:08:40 +0100 Subject: [PATCH 0610/2375] Delete Future.yml Combined pytest into usual workflow --- .github/workflows/Future.yml | 57 ------------------------------------ 1 file changed, 57 deletions(-) delete mode 100644 .github/workflows/Future.yml diff --git a/.github/workflows/Future.yml b/.github/workflows/Future.yml deleted file mode 100644 index 39146533b..000000000 --- a/.github/workflows/Future.yml +++ /dev/null @@ -1,57 +0,0 @@ -# This workflow will install Python dependencies, run tests and lint with a variety of Python versions -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions - -name: Future - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: - [3.6, 3.7, 3.8, 3.9, "3.10.0-beta.3"] - - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 9999 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - - name: Install dependencies and prepare tests - run: | - set -x - python -m pip install --upgrade pip - python --version; git --version - git submodule update --init --recursive - git fetch --tags - - pip install -r dev-requirements.txt - TRAVIS=yes ./init-tests-after-clone.sh - - git config --global user.email "travis@ci.com" - git config --global user.name "Travis Runner" - # If we rewrite the user's config by accident, we will mess it up - # and cause subsequent tests to fail - cat test/fixtures/.gitconfig >> ~/.gitconfig - - - name: Test with pytest - run: | - set -x - pip install -r dev-requirements.txt - pytest --cov --cov-report=term-missing:skip-covered - # --cov-report=html:test/coverage - continue-on-error: true - - - - - From bc48d753c29f776554e1d7ef57f5727fe885d34e Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 22:10:29 +0100 Subject: [PATCH 0611/2375] Update pythonpackage.yml Add pytest step to workflow Add pip install setuptools and wheel Invoke mypy directly, no need for tox --- .github/workflows/pythonpackage.yml | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 53da76149..1560c011c 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -28,37 +28,50 @@ jobs: - name: Install dependencies and prepare tests run: | set -x - python -m pip install --upgrade pip + python -m pip install --upgrade pip setuptools wheel python --version; git --version git submodule update --init --recursive git fetch --tags - + + pip install -r requirements.txt pip install -r test-requirements.txt TRAVIS=yes ./init-tests-after-clone.sh - + git config --global user.email "travis@ci.com" git config --global user.name "Travis Runner" # If we rewrite the user's config by accident, we will mess it up # and cause subsequent tests to fail cat test/fixtures/.gitconfig >> ~/.gitconfig + - name: Lint with flake8 run: | set -x pip install flake8 # stop the build if there are Python syntax errors or undefined names - flake8 --ignore=W293,E265,E266,W503,W504,E731 --count --show-source --statistics + flake8 --ignore=W293,E265,E266,W503,W504,E704,E731 --count --show-source --statistics + - name: Check types with mypy run: | set -x - pip install tox - tox -e type + pip install mypy + mypy -p git + - name: Test with nose run: | set -x pip install nose nosetests -v --with-coverage + - name: Documentation run: | set -x pip install -r doc/requirements.txt make -C doc html + + - name: Test with pytest + run: | + set -x + pip install -r requirements-dev.txt + pytest + # pytest settings in tox.ini[pytest] + continue-on-error: true From 4f9ef1f80c20dc913f707e079847c787a30b7313 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 22:12:03 +0100 Subject: [PATCH 0612/2375] Update dev-requirements.txt Add pytest plugins --- dev-requirements.txt | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index abb677d00..6644bacde 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,10 +1,7 @@ -ddt>=1.1.1 -coverage -flake8 -flake8-type-checking;python_version>="3.8" -tox -mypy +-r requirements.txt +-r test-requirements.txt + pytest pytest-cov -gitdb>=4.0.1,<5 -typing-extensions>=3.7.4.3;python_version<"3.10" +pytest-sugar +pytest-icdiff From 89d7611d39991d96a8c44121a3ea82d10b611446 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 22:16:14 +0100 Subject: [PATCH 0613/2375] Update tox.ini Ignore flake8 E704 (Multiple statements on one line) too make overloads smaller Add [pytest] config section --- tox.ini | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index e3dd84b6b..7231f0459 100644 --- a/tox.ini +++ b/tox.ini @@ -12,7 +12,7 @@ commands = coverage run --omit="git/test/*" -m unittest --buffer {posargs} coverage report [testenv:flake8] -commands = flake8 --ignore=W293,E265,E266,W503,W504,E731 {posargs} +commands = flake8 --ignore=W293,E265,E266,W503,W504,E704,E731 {posargs} [testenv:type] description = type check ourselves @@ -32,6 +32,30 @@ commands = {posargs} # E731 = do not assign a lambda expression, use a def # W293 = Blank line contains whitespace # W504 = Line break after operator -ignore = E265,W293,E266,E731, W504 +# E707 = multiple statements in one line - used for @overloads +ignore = E265,W293,E266,E731,E704, W504 max-line-length = 120 exclude = .tox,.venv,build,dist,doc,git/ext/ + +[pytest] +python_files = + test_*.py + +# space seperated list of paths from root e.g test tests doc/testing +testpaths = test + +# --cov coverage +# --cov-report term # send report to terminal term-missing -> terminal with line numbers html xml +# --cov-report term-missing # to terminal with line numbers +# --cov-report html:path # html file at path +# --maxfail # number of errors before giving up +# -disable-warnings # Disable pytest warnings (not codebase warnings) +#-rf # increased reporting of failures +# -rE # increased reporting of errors +# --ignore-glob=**/gitdb/* # ignore glob paths +addopts = --cov=git --cov-report=term --maxfail=50 -rf --verbosity=0 --disable-warnings + +# ignore::WarningType # ignores those warnings +# error # turn any unignored warning into errors +filterwarnings = + ignore::DeprecationWarning From 6460db1d62ac2d7b7b336b4c3d2b11735aded803 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 22:19:19 +0100 Subject: [PATCH 0614/2375] Update setup.py Change distutils.build_py to its setuptools wrapper. Distutils one deprecated since py3.8, but setuptools one working py3.6-3.10 --- setup.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index 2004be010..e01562e8c 100755 --- a/setup.py +++ b/setup.py @@ -1,13 +1,12 @@ #!/usr/bin/env python -from __future__ import print_function try: from setuptools import setup, find_packages except ImportError: - from ez_setup import use_setuptools + from ez_setup import use_setuptools # type: ignore[Pylance] use_setuptools() from setuptools import setup, find_packages -from distutils.command.build_py import build_py as _build_py +from setuptools.command.build_py import build_py as _build_py from setuptools.command.sdist import sdist as _sdist import fnmatch import os @@ -95,7 +94,6 @@ def build_py_modules(basedir, excludes=[]): license="BSD", url="https://github.com/gitpython-developers/GitPython", packages=find_packages(exclude=("test.*")), - # package_data={'git': ['**/*.pyi', 'py.typed']}, include_package_data=True, py_modules=build_py_modules("./git", excludes=["git.ext.*"]), package_dir={'git': 'git'}, From 07f5680fbf8e108af2a98de5c2fbc9e22a59f310 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 22:54:01 +0100 Subject: [PATCH 0615/2375] Rename dev-requirements.txt to requirements-dev.txt --- dev-requirements.txt => requirements-dev.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dev-requirements.txt => requirements-dev.txt (100%) diff --git a/dev-requirements.txt b/requirements-dev.txt similarity index 100% rename from dev-requirements.txt rename to requirements-dev.txt From b66bfbd1bc4eb45312ed44778c4072ae230cf63a Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 22:56:01 +0100 Subject: [PATCH 0616/2375] Update pythonpackage.yml Remove nose tests --- .github/workflows/pythonpackage.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 53da76149..c9faf0f1b 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -42,21 +42,19 @@ jobs: # and cause subsequent tests to fail cat test/fixtures/.gitconfig >> ~/.gitconfig - name: Lint with flake8 + run: | set -x pip install flake8 # stop the build if there are Python syntax errors or undefined names flake8 --ignore=W293,E265,E266,W503,W504,E731 --count --show-source --statistics + - name: Check types with mypy run: | set -x pip install tox tox -e type - - name: Test with nose - run: | - set -x - pip install nose - nosetests -v --with-coverage + - name: Documentation run: | set -x From 37c7121898b8f8b611a78308b3f0660de031021a Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 22:58:50 +0100 Subject: [PATCH 0617/2375] Update pythonpackage.yml Remove nose --- .github/workflows/pythonpackage.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 1560c011c..c350f78a4 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -56,12 +56,6 @@ jobs: pip install mypy mypy -p git - - name: Test with nose - run: | - set -x - pip install nose - nosetests -v --with-coverage - - name: Documentation run: | set -x From 3b9b1538cb4eb58a35eaa1db60b9ac2900682b37 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 22:59:51 +0100 Subject: [PATCH 0618/2375] Update test-requirements.txt Replace nose with pytest --- test-requirements.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test-requirements.txt b/test-requirements.txt index a8a3a1527..7359ed008 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -3,6 +3,8 @@ coverage flake8 tox virtualenv -nose;python_version<"3.10" +pytest +pytest-cov +pytest-sugar gitdb>=4.0.1,<5 typing-extensions>=3.7.4.3;python_version<"3.10" From dfce27f1e8592162f5c6ce0cecb287c7eac64c6e Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 23:04:29 +0100 Subject: [PATCH 0619/2375] Update pythonpackage.yml Move pytest before Documentation in workflow --- .github/workflows/pythonpackage.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 67832dc3c..4d3652a30 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -62,12 +62,6 @@ pythonpackage.yml pip install mypy mypy -p git - - name: Documentation - run: | - set -x - pip install -r doc/requirements.txt - make -C doc html - - name: Test with pytest run: | set -x @@ -75,3 +69,11 @@ pythonpackage.yml pytest # pytest settings in tox.ini[pytest] continue-on-error: true + + - name: Documentation + run: | + set -x + pip install -r doc/requirements.txt + make -C doc html + + From a8e01c10166815d5ddd8d6ad2cfe3425b509f739 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 23:11:21 +0100 Subject: [PATCH 0620/2375] Add pytests args Not sure it is picking up the tox.ini --- .github/workflows/pythonpackage.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 4d3652a30..9202a49f7 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -29,12 +29,6 @@ jobs: run: | set -x python -m pip install --upgrade pip setuptools wheel -1 conflicting file -pythonpackage.yml -.github/workflows/pythonpackage.yml -.github/workflows/pythonpackage.yml -1 conflict - python --version; git --version git submodule update --init --recursive git fetch --tags @@ -61,19 +55,25 @@ pythonpackage.yml set -x pip install mypy mypy -p git - + - name: Test with pytest run: | set -x pip install -r requirements-dev.txt - pytest + pytest --cov --cov-report=term # pytest settings in tox.ini[pytest] continue-on-error: true - + - name: Documentation run: | set -x pip install -r doc/requirements.txt make -C doc html + # - name: Test with nose + # run: | + # set -x + # pip install nose + # nosetests -v --with-coverage + From 907aae8eb0cd2bf32bf3b55b394b6c7fe1dda658 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 23:18:43 +0100 Subject: [PATCH 0621/2375] Update pythonpackage.yml Add 3.10.0-beta.3 to test matrix. (beta 4 out, but wouldn't install. Need to force cache emptying?) --- .github/workflows/pythonpackage.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 9202a49f7..b9811654c 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.6, 3.7, 3.8, 3.9, "3.10.0-beta.3"] steps: - uses: actions/checkout@v2 @@ -62,7 +62,7 @@ jobs: pip install -r requirements-dev.txt pytest --cov --cov-report=term # pytest settings in tox.ini[pytest] - continue-on-error: true + continue-on-error: false - name: Documentation run: | @@ -75,5 +75,6 @@ jobs: # set -x # pip install nose # nosetests -v --with-coverage + # continue-on-error: false From 3ef208cb9119bd7f8345f55b991ad196bcdffeb4 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 12 Jul 2021 23:23:27 +0100 Subject: [PATCH 0622/2375] Update pythonpackage.yml update to actions/setup-python@v1 --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index b9811654c..e575a0161 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -22,7 +22,7 @@ jobs: with: fetch-depth: 9999 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies and prepare tests From cf9b511ac3386910b695fa6482b7488802f77eb2 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 14 Jul 2021 07:43:41 +0800 Subject: [PATCH 0623/2375] Remove docker and appveyor configuration files These weren't used by CI nor were they regularly tested. If somebody misses something, we can bring them back of course. This cleanup was triggered with the switch to pytest, and I wanted to remove everything that was present just for nosetest. --- .appveyor.yml | 73 ------------------------- .dockerignore | 2 - .github/workflows/pythonpackage.yml | 11 +--- Dockerfile | 84 ----------------------------- Makefile | 18 +------ dockernose.sh | 10 ---- 6 files changed, 3 insertions(+), 195 deletions(-) delete mode 100644 .appveyor.yml delete mode 100644 .dockerignore delete mode 100644 Dockerfile delete mode 100755 dockernose.sh diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index 833f5c7b9..000000000 --- a/.appveyor.yml +++ /dev/null @@ -1,73 +0,0 @@ -# UNUSED, only for reference. If windows testing is needed, please add that to github actions -# CI on Windows via appveyor -environment: - GIT_DAEMON_PATH: "C:\\Program Files\\Git\\mingw64\\libexec\\git-core" - CYGWIN_GIT_PATH: "C:\\cygwin\\bin;%GIT_DAEMON_PATH%" - CYGWIN64_GIT_PATH: "C:\\cygwin64\\bin;%GIT_DAEMON_PATH%" - - matrix: - - PYTHON: "C:\\Python36-x64" - PYTHON_VERSION: "3.6" - GIT_PATH: "%GIT_DAEMON_PATH%" - - PYTHON: "C:\\Python37-x64" - PYTHON_VERSION: "3.7" - GIT_PATH: "%GIT_DAEMON_PATH%" - -matrix: - allow_failures: - - MAYFAIL: "yes" -install: - - set PATH=%PYTHON%;%PYTHON%\Scripts;%GIT_PATH%;%PATH% - - ## Print configuration for debugging. - # - - | - echo %PATH% - uname -a - git --version - where git git-daemon python pip pip3 pip34 sh - python --version - python -c "import struct; print(struct.calcsize('P') * 8)" - - - IF "%IS_CONDA%" == "yes" ( - conda info -a & - conda install --yes --quiet pip - ) - - pip install -r requirements.txt - - pip install -r test-requirements.txt - - pip install codecov - - ## Copied from `init-tests-after-clone.sh`. - # - - | - git submodule update --init --recursive - git fetch --tags - git tag __testing_point__ - git checkout master || git checkout -b master - git reset --hard HEAD~1 - git reset --hard HEAD~1 - git reset --hard HEAD~1 - git reset --hard __testing_point__ - - ## For commits performed with the default user. - - | - git config --global user.email "travis@ci.com" - git config --global user.name "Travis Runner" - - - pip install -e . - -build: false - -test_script: - - nosetests -v - -on_success: - - IF "%PYTHON_VERSION%" == "3.6" IF NOT "%IS_CYGWIN%" == "yes" (codecov) - -# Enable this to be able to login to the build worker. You can use the -# `remmina` program in Ubuntu, use the login information that the line below -# prints into the log. -#on_finish: -# - | -# echo "Running on_finish to establish connection back to the instance" -# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index b59962d21..000000000 --- a/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -.git/ -.tox/ diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index e575a0161..115610f35 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -68,13 +68,4 @@ jobs: run: | set -x pip install -r doc/requirements.txt - make -C doc html - - # - name: Test with nose - # run: | - # set -x - # pip install nose - # nosetests -v --with-coverage - # continue-on-error: false - - + make -C doc html \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index f2d7e22f5..000000000 --- a/Dockerfile +++ /dev/null @@ -1,84 +0,0 @@ -# -# Contributed by: James E. King III (@jeking3) -# -# This Dockerfile creates an Ubuntu Xenial build environment -# that can run the same test suite as Travis CI. -# - -FROM ubuntu:xenial - -# Metadata -LABEL maintainer="jking@apache.org" -LABEL description="CI environment for testing GitPython" - -ENV CONTAINER_USER=user -ENV DEBIAN_FRONTEND noninteractive - -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - add-apt-key \ - apt \ - apt-transport-https \ - apt-utils \ - ca-certificates \ - curl \ - git \ - net-tools \ - openssh-client \ - sudo \ - vim \ - wget - -RUN add-apt-key -v 6A755776 -k keyserver.ubuntu.com && \ - add-apt-key -v E1DF1F24 -k keyserver.ubuntu.com && \ - echo "deb http://ppa.launchpad.net/git-core/ppa/ubuntu xenial main" >> /etc/apt/sources.list && \ - echo "deb http://ppa.launchpad.net/deadsnakes/ppa/ubuntu xenial main" >> /etc/apt/sources.list && \ - apt-get update && \ - apt-get install -y --install-recommends git python2.7 python3.4 python3.5 python3.6 python3.7 && \ - update-alternatives --install /usr/bin/python3 python3 /usr/bin/python2.7 27 && \ - update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.4 34 && \ - update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 35 && \ - update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 36 && \ - update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 37 - -RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \ - python3 get-pip.py && \ - pip3 install tox - -# Clean up -RUN rm -rf /var/cache/apt/* && \ - rm -rf /var/lib/apt/lists/* && \ - rm -rf /tmp/* && \ - rm -rf /var/tmp/* - -################################################################# -# Build as a regular user -# Credit: https://github.com/delcypher/docker-ubuntu-cxx-dev/blob/master/Dockerfile -# License: None specified at time of import -# Add non-root user for container but give it sudo access. -# Password is the same as the username -RUN useradd -m ${CONTAINER_USER} && \ - echo ${CONTAINER_USER}:${CONTAINER_USER} | chpasswd && \ - echo "${CONTAINER_USER} ALL=(root) ALL" >> /etc/sudoers -RUN chsh --shell /bin/bash ${CONTAINER_USER} -USER ${CONTAINER_USER} -################################################################# - -# The test suite will not tolerate running against a branch that isn't "master", so -# check out the project to a well-known location that can be used by the test suite. -# This has the added benefit of protecting the local repo fed into the container -# as a volume from getting destroyed by a bug exposed by the test suite. :) -ENV TRAVIS=ON -RUN git clone --recursive https://github.com/gitpython-developers/GitPython.git /home/${CONTAINER_USER}/testrepo && \ - cd /home/${CONTAINER_USER}/testrepo && \ - ./init-tests-after-clone.sh -ENV GIT_PYTHON_TEST_GIT_REPO_BASE=/home/${CONTAINER_USER}/testrepo -ENV TRAVIS= - -# Ensure any local pip installations get on the path -ENV PATH=/home/${CONTAINER_USER}/.local/bin:${PATH} - -# Set the global default git user to be someone non-descript -RUN git config --global user.email ci@gitpython.org && \ - git config --global user.name "GitPython CI User" - diff --git a/Makefile b/Makefile index f5d8a1089..fe82a694b 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: all clean release force_release docker-build test nose-pdb +.PHONY: all clean release force_release all: @grep -Ee '^[a-z].*:' Makefile | cut -d: -f1 | grep -vF all @@ -17,18 +17,4 @@ release: clean force_release: clean git push --tags origin main python3 setup.py sdist bdist_wheel - twine upload -s -i 27C50E7F590947D7273A741E85194C08421980C9 dist/* - -docker-build: - docker build --quiet -t gitpython:xenial -f Dockerfile . - -test: docker-build - # NOTE!!! - # NOTE!!! If you are not running from main or have local changes then tests will fail - # NOTE!!! - docker run --rm -v ${CURDIR}:/src -w /src -t gitpython:xenial tox - -nose-pdb: docker-build - # run tests under nose and break on error or failure into python debugger - # HINT: set PYVER to "pyXX" to change from the default of py37 to pyXX for nose tests - docker run --rm --env PYVER=${PYVER} -v ${CURDIR}:/src -w /src -it gitpython:xenial /bin/bash dockernose.sh + twine upload -s -i 27C50E7F590947D7273A741E85194C08421980C9 dist/* \ No newline at end of file diff --git a/dockernose.sh b/dockernose.sh deleted file mode 100755 index c9227118a..000000000 --- a/dockernose.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash -set -ex -if [ -z "${PYVER}" ]; then - PYVER=py37 -fi - -# remember to use "-s" if you inject pdb.set_trace() as this disables nosetests capture of streams - -tox -e ${PYVER} --notest -PYTHONPATH=/src/.tox/${PYVER}/lib/python*/site-packages /src/.tox/${PYVER}/bin/nosetests --pdb $* From 0fa5388043e72e49018a30058bc2d1dd6e84ad38 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 14 Jul 2021 07:57:11 +0800 Subject: [PATCH 0624/2375] put badges (also) upfront --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 4725d3aeb..678123eda 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +![Python package](https://github.com/gitpython-developers/GitPython/workflows/Python%20package/badge.svg) +[![Documentation Status](https://readthedocs.org/projects/gitpython/badge/?version=stable)](https://readthedocs.org/projects/gitpython/?badge=stable) +[![Packaging status](https://repology.org/badge/tiny-repos/python:gitpython.svg)](https://repology.org/metapackage/python:gitpython/versions) + ## [Gitoxide](https://github.com/Byron/gitoxide): A peek into the future… I started working on GitPython in 2009, back in the days when Python was 'my thing' and I had great plans with it. From 4879d938ad7f06f0ba5c5a551fdad4d94046cf76 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 14 Jul 2021 07:58:28 +0800 Subject: [PATCH 0625/2375] Make development status clearer --- README.md | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 678123eda..0f7ac5ea4 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,17 @@ The object database implementation is optimized for handling large quantities of which is achieved by using low-level structures and data streaming. +### DEVELOPMENT STATUS + +This project is in **maintenance mode**, which means that + +* …there will be no feature development, unless these are contributed +* …there will be no bug fixes, unless they are relevant to the safety of users, or contributed +* …issues will be responded to with waiting times of up to a month + +The project is open to contributions of all kinds, as well as new maintainers. + + ### REQUIREMENTS GitPython needs the `git` executable to be installed on the system and available @@ -203,18 +214,4 @@ gpg --edit-key 4C08421980C9 New BSD License. See the LICENSE file. -### DEVELOPMENT STATUS - -![Python package](https://github.com/gitpython-developers/GitPython/workflows/Python%20package/badge.svg) -[![Documentation Status](https://readthedocs.org/projects/gitpython/badge/?version=stable)](https://readthedocs.org/projects/gitpython/?badge=stable) -[![Packaging status](https://repology.org/badge/tiny-repos/python:gitpython.svg)](https://repology.org/metapackage/python:gitpython/versions) - -This project is in **maintenance mode**, which means that - -* …there will be no feature development, unless these are contributed -* …there will be no bug fixes, unless they are relevant to the safety of users, or contributed -* …issues will be responded to with waiting times of up to a month - -The project is open to contributions of all kinds, as well as new maintainers. - [contributing]: https://github.com/gitpython-developers/GitPython/blob/master/CONTRIBUTING.md From 1a6dd81d72b3e507c066d2ce31e2d2b003b592f2 Mon Sep 17 00:00:00 2001 From: Dominic Date: Fri, 16 Jul 2021 20:20:38 +0100 Subject: [PATCH 0626/2375] rmv tox from test-requirements.txt --- test-requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/test-requirements.txt b/test-requirements.txt index 7359ed008..c5be39a2d 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,7 +1,6 @@ ddt>=1.1.1 coverage flake8 -tox virtualenv pytest pytest-cov From bce21f1bcc2537563f8c9dc062b3356d1e393586 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 13:59:54 +0100 Subject: [PATCH 0627/2375] Delete tox.ini --- tox.ini | 61 --------------------------------------------------------- 1 file changed, 61 deletions(-) delete mode 100644 tox.ini diff --git a/tox.ini b/tox.ini deleted file mode 100644 index 7231f0459..000000000 --- a/tox.ini +++ /dev/null @@ -1,61 +0,0 @@ -[tox] -envlist = py36,py37,py38,py39,flake8 - -[testenv] -commands = python -m unittest --buffer {posargs} -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt -passenv = HOME - -[testenv:cover] -commands = coverage run --omit="git/test/*" -m unittest --buffer {posargs} - coverage report - -[testenv:flake8] -commands = flake8 --ignore=W293,E265,E266,W503,W504,E704,E731 {posargs} - -[testenv:type] -description = type check ourselves -deps = - {[testenv]deps} - mypy -commands = - mypy -p git - -[testenv:venv] -commands = {posargs} - -[flake8] -#show-source = True -# E265 = comment blocks like @{ section, which it can't handle -# E266 = too many leading '#' for block comment -# E731 = do not assign a lambda expression, use a def -# W293 = Blank line contains whitespace -# W504 = Line break after operator -# E707 = multiple statements in one line - used for @overloads -ignore = E265,W293,E266,E731,E704, W504 -max-line-length = 120 -exclude = .tox,.venv,build,dist,doc,git/ext/ - -[pytest] -python_files = - test_*.py - -# space seperated list of paths from root e.g test tests doc/testing -testpaths = test - -# --cov coverage -# --cov-report term # send report to terminal term-missing -> terminal with line numbers html xml -# --cov-report term-missing # to terminal with line numbers -# --cov-report html:path # html file at path -# --maxfail # number of errors before giving up -# -disable-warnings # Disable pytest warnings (not codebase warnings) -#-rf # increased reporting of failures -# -rE # increased reporting of errors -# --ignore-glob=**/gitdb/* # ignore glob paths -addopts = --cov=git --cov-report=term --maxfail=50 -rf --verbosity=0 --disable-warnings - -# ignore::WarningType # ignores those warnings -# error # turn any unignored warning into errors -filterwarnings = - ignore::DeprecationWarning From e6d1114f5bc3ddc0c05c08d5dcb0a9ce4c330093 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:00:07 +0100 Subject: [PATCH 0628/2375] Delete mypy.ini --- mypy.ini | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 mypy.ini diff --git a/mypy.ini b/mypy.ini deleted file mode 100644 index 67397d40f..000000000 --- a/mypy.ini +++ /dev/null @@ -1,14 +0,0 @@ - -[mypy] - -# TODO: enable when we've fully annotated everything -# disallow_untyped_defs = True -no_implicit_optional = True -warn_redundant_casts = True -# warn_unused_ignores = True -# warn_unreachable = True -pretty = True - -# TODO: remove when 'gitdb' is fully annotated -[mypy-gitdb.*] -ignore_missing_imports = True From ef3622f7ef564a35c2c893a40cec6bc5c2be6ce2 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:00:52 +0100 Subject: [PATCH 0629/2375] Delete .coveragerc --- .coveragerc | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 .coveragerc diff --git a/.coveragerc b/.coveragerc deleted file mode 100644 index e2b6256e9..000000000 --- a/.coveragerc +++ /dev/null @@ -1,7 +0,0 @@ -[run] -source = git - -; to make nosetests happy -[report] -include = */git/* -omit = */git/ext/* From 532268636bebdd21723ad6dbf2f6e970933e547a Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:03:31 +0100 Subject: [PATCH 0630/2375] Create pyproject.toml Add pyproject.toml with sections for pyest, mypy, coverage.py --- pyproject.toml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..0e33da9eb --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,35 @@ +[tool.pytest.ini_options] +python_files = 'test_*.py' +testpaths = 'test' # space seperated list of paths from root e.g test tests doc/testing +addopts = '--cov=git --cov-report=term --maxfail=10 --disable-warnings' +filterwarnings = 'ignore::DeprecationWarning' +# --cov coverage +# --cov-report term # send report to terminal term-missing -> terminal with line numbers html xml +# --cov-report term-missing # to terminal with line numbers +# --cov-report html:path # html file at path +# --maxfail # number of errors before giving up +# -disable-warnings # Disable pytest warnings (not codebase warnings) +# -rf # increased reporting of failures +# -rE # increased reporting of errors +# --ignore-glob=**/gitdb/* # ignore glob paths +# filterwarnings ignore::WarningType # ignores those warnings + +[tool.mypy] +# disallow_untyped_defs = True +no_implicit_optional = true +warn_redundant_casts = true +# warn_unused_ignores = True +# warn_unreachable = True +show_error_codes = true + +# TODO: remove when 'gitdb' is fully annotated +[[tool.mypy.overrides]] +module = "gitdb.*" +ignore_missing_imports = true + +[tool.coverage.run] +source = ["git"] + +[tool.coverage.report] +include = ["*/git/*"] +omit = ["*/git/ext/*"] From 3b86189dd0fdf293708ac918334fd146f43b4021 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:05:14 +0100 Subject: [PATCH 0631/2375] Create .flake8 Add .flake8 file - flake8 wont use pyproject.toml without a wrapper. e.g. flakehell or flake9 --- .flake8 | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .flake8 diff --git a/.flake8 b/.flake8 new file mode 100644 index 000000000..2ae06c05d --- /dev/null +++ b/.flake8 @@ -0,0 +1,30 @@ +[flake8] +#show-source = True +# E265 = comment blocks like @{ section, which it can't handle +# E266 = too many leading '#' for block comment +# E731 = do not assign a lambda expression, use a def +# W293 = Blank line contains whitespace +# W504 = Line break after operator +# E704 = multiple statements in one line - used for @override +# TC002 = +# ANN = flake8-annotations +# TC, TC2 = flake8-type-checking +# D = flake8-docstrings + +# select = C,E,F,W ANN, TC, TC2 # to enable code. Disabled if not listed, including builtin codes +enable-extensions = TC, TC2 # only needed for extensions not enabled by default + +ignore = E265,E266,E731,E704, + W293, W504, + ANN0 ANN1 ANN2, + TC0, TC1, TC2 + # B, + A, + D, + RST, RST3 +max-line-length = 120 + +exclude = .tox,.venv,build,dist,doc,git/ext/,test + +rst-roles = # for flake8-RST-docstrings + attr,class,func,meth,mod,obj,ref,term,var # used by sphinx From 19033e5665a8391b87dab64c6d57079d29ae38f5 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:05:50 +0100 Subject: [PATCH 0632/2375] Delete .codeclimate.yml Not used anymore --- .codeclimate.yml | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 .codeclimate.yml diff --git a/.codeclimate.yml b/.codeclimate.yml deleted file mode 100644 index e658e6785..000000000 --- a/.codeclimate.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- -engines: - duplication: - enabled: true - config: - languages: - - python - pep8: - enabled: true - radon: - enabled: true -ratings: - paths: - - "**.py" -exclude_paths: From 426a7195a98f611a21c079e21de9b280a0b21e39 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:06:17 +0100 Subject: [PATCH 0633/2375] Delete .deepsource.toml Not used anymore --- .deepsource.toml | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 .deepsource.toml diff --git a/.deepsource.toml b/.deepsource.toml deleted file mode 100644 index d55288b87..000000000 --- a/.deepsource.toml +++ /dev/null @@ -1,15 +0,0 @@ -version = 1 - -test_patterns = [ - 'test/**/test_*.py' -] - -exclude_patterns = [ - 'doc/**', - 'etc/sublime-text' -] - -[[analyzers]] -name = 'python' -enabled = true -runtime_version = '3.x.x' From 970cf539f2642ed299c35f5df0434fc187702d13 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:07:21 +0100 Subject: [PATCH 0634/2375] Update pshinx versions in docs/reqs.txt --- doc/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/requirements.txt b/doc/requirements.txt index 98e5c06a0..b0c8f18da 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -1,2 +1,2 @@ -sphinx<2.0 +sphinx==4.1.1 sphinx_rtd_theme From 0a812599385d424a48dde80b56b9978777664550 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:09:22 +0100 Subject: [PATCH 0635/2375] Update conf.py rmv unicode prefixes - sphinx 4+ wont accept py2 code --- doc/source/conf.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 0ec64179e..286058fdc 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -14,7 +14,8 @@ # All configuration values have a default; values that are commented out # serve to show the default. -import sys, os +import sys +import os # If your extensions are in another directory, add it here. If the directory # is relative to the documentation root, use os.path.abspath to make it @@ -50,7 +51,7 @@ # built documents. # # The short X.Y version. -with open(os.path.join(os.path.dirname(__file__),"..", "..", 'VERSION')) as fd: +with open(os.path.join(os.path.dirname(__file__), "..", "..", 'VERSION')) as fd: VERSION = fd.readline().strip() version = VERSION # The full version, including alpha/beta/rc tags. @@ -170,8 +171,8 @@ # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, document class [howto/manual]). latex_documents = [ - ('index', 'GitPython.tex', ur'GitPython Documentation', - ur'Michael Trier', 'manual'), + ('index', 'GitPython.tex', r'GitPython Documentation', + r'Michael Trier', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of From 83af8e84767eca95e96f37d7c26d834cedf1286d Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:15:33 +0100 Subject: [PATCH 0636/2375] Update requirements-dev.txt Add comment and more local libs --- requirements-dev.txt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 6644bacde..0ece0a659 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,7 +1,17 @@ -r requirements.txt -r test-requirements.txt -pytest -pytest-cov +# libraries for additional local testing/linting - to be added to test-requirements.txt when all pass + +flake8-bugbear +flake8-comprehensions +flake8-type-checking;python_version>="3.8" # checks for TYPE_CHECKING only imports +# flake8-annotations # checks for presence of type annotations +# flake8-rst-docstrings # checks docstrings are valid RST +# flake8-builtins # warns about shadowing builtin names +# flake8-pytest-style + +# pytest-flake8 pytest-sugar pytest-icdiff +# pytest-profiling From ae75712a18f8209ed12756ceaee6cc549c05da40 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:17:55 +0100 Subject: [PATCH 0637/2375] Update pythonpackage.yml Rmv unneeded installs and testing flags (will use the flage from the config files) --- .github/workflows/pythonpackage.yml | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 115610f35..bf712b2d8 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.6, 3.7, 3.8, 3.9, "3.10.0-beta.3"] + python-version: [3.6, 3.7, 3.8, 3.9, "3.10.0-beta.4"] steps: - uses: actions/checkout@v2 @@ -46,26 +46,21 @@ jobs: - name: Lint with flake8 run: | set -x - pip install flake8 - # stop the build if there are Python syntax errors or undefined names - flake8 --ignore=W293,E265,E266,W503,W504,E704,E731 --count --show-source --statistics + flake8 - name: Check types with mypy run: | set -x - pip install mypy mypy -p git - name: Test with pytest run: | set -x - pip install -r requirements-dev.txt - pytest --cov --cov-report=term - # pytest settings in tox.ini[pytest] + pytest continue-on-error: false - name: Documentation run: | set -x pip install -r doc/requirements.txt - make -C doc html \ No newline at end of file + make -C doc html From c16c438f484ac6b70c3ceb536e6b2e448496e74e Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:19:19 +0100 Subject: [PATCH 0638/2375] Update .flake8 Add flags from pythonpackage.yaml --- .flake8 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.flake8 b/.flake8 index 2ae06c05d..ffa60483d 100644 --- a/.flake8 +++ b/.flake8 @@ -1,5 +1,7 @@ [flake8] -#show-source = True +show-source = True +count= True +statistics = True # E265 = comment blocks like @{ section, which it can't handle # E266 = too many leading '#' for block comment # E731 = do not assign a lambda expression, use a def From 1159b7ebcfd293a1df75d792f415be755f11daec Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:20:21 +0100 Subject: [PATCH 0639/2375] Update pyproject.toml Add --force sugar flag --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0e33da9eb..79e628404 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [tool.pytest.ini_options] python_files = 'test_*.py' testpaths = 'test' # space seperated list of paths from root e.g test tests doc/testing -addopts = '--cov=git --cov-report=term --maxfail=10 --disable-warnings' +addopts = '--cov=git --cov-report=term --maxfail=10 --force-sugar --disable-warnings' filterwarnings = 'ignore::DeprecationWarning' # --cov coverage # --cov-report term # send report to terminal term-missing -> terminal with line numbers html xml From 06c219929a427737b43c5dfd5359019f2c110d41 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:30:10 +0100 Subject: [PATCH 0640/2375] Add mypy to test-requirements.txt also rmv coverage, as pytest-cov brings that --- test-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-requirements.txt b/test-requirements.txt index c5be39a2d..7397c3732 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,5 +1,5 @@ ddt>=1.1.1 -coverage +mypy flake8 virtualenv pytest From a087d62ddcfbcb9111129d58f1eee3976789e97e Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:31:36 +0100 Subject: [PATCH 0641/2375] Add mypy to test-requirements.txt --- test-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-requirements.txt b/test-requirements.txt index c5be39a2d..7397c3732 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,5 +1,5 @@ ddt>=1.1.1 -coverage +mypy flake8 virtualenv pytest From 9f906b36533f041df80e2bdf3e40a644574f20ff Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:40:10 +0100 Subject: [PATCH 0642/2375] Add sphinx-autodoc-typehints --- doc/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/requirements.txt b/doc/requirements.txt index b0c8f18da..20598a39c 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -1,2 +1,3 @@ sphinx==4.1.1 sphinx_rtd_theme +sphinx-autodoc-typehints From f587b21a98e7c26986db87d991af42cafcfebb07 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 14:53:39 +0100 Subject: [PATCH 0643/2375] Update README.md Update testing section --- README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 0f7ac5ea4..ad7aae516 100644 --- a/README.md +++ b/README.md @@ -106,18 +106,20 @@ On *Windows*, make sure you have `git-daemon` in your PATH. For MINGW-git, the exists in `Git\mingw64\libexec\git-core\`; CYGWIN has no daemon, but should get along fine with MINGW's. -The easiest way to run tests is by using [tox](https://pypi.python.org/pypi/tox) -a wrapper around virtualenv. It will take care of setting up environments with the proper -dependencies installed and execute test commands. To install it simply: +Ensure testing libraries are installed. In the root directory, run: `pip install test-requirements.txt` +Then, - pip install tox +To lint, run `flake8` +To typecheck, run `mypy -p git` +To test, `pytest` -Then run: +Configuration for flake8 is in root/.flake8 file. +Configuration for mypy, pytest, coverage is in root/pyproject.toml. - tox +The same linting and testing will also be performed against different supported python versions +upon submitting a pull request (or on each push if you have a fork with a "main" branch). -For more fine-grained control, you can use `unittest`. ### Contributions From 2fa9fb1ac11b53859959ea9bd37c0ae6c17ccdb5 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 16:50:47 +0100 Subject: [PATCH 0644/2375] update types in types.py --- git/index/base.py | 7 ++++--- git/types.py | 5 ++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/git/index/base.py b/git/index/base.py index 3aa06e381..220bdc85d 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -572,7 +572,7 @@ def write_tree(self) -> Tree: # note: additional deserialization could be saved if write_tree_from_cache # would return sorted tree entries root_tree = Tree(self.repo, binsha, path='') - root_tree._cache = tree_items # type: ignore # should this be encoded to [bytes, int, str]? + root_tree._cache = tree_items return root_tree def _process_diff_args(self, # type: ignore[override] @@ -586,8 +586,9 @@ def _process_diff_args(self, # type: ignore[override] return args def _to_relative_path(self, path: PathLike) -> PathLike: - """:return: Version of path relative to our git directory or raise ValueError - if it is not within our git direcotory""" + """ + :return: Version of path relative to our git directory or raise ValueError + if it is not within our git direcotory""" if not osp.isabs(path): return path if self.repo.bare: diff --git a/git/types.py b/git/types.py index 9181e0406..53f0f1e4e 100644 --- a/git/types.py +++ b/git/types.py @@ -7,9 +7,6 @@ from typing import (Callable, Dict, NoReturn, Sequence, Tuple, Union, Any, Iterator, # noqa: F401 NamedTuple, TYPE_CHECKING, TypeVar) # noqa: F401 -if TYPE_CHECKING: - from git.repo import Repo - if sys.version_info[:2] >= (3, 8): from typing import Final, Literal, SupportsIndex, TypedDict, Protocol, runtime_checkable # noqa: F401 else: @@ -28,6 +25,7 @@ PathLike = Union[str, 'os.PathLike[str]'] # forward ref as pylance complains unless editing with py3.9+ if TYPE_CHECKING: + from git.repo import Repo from git.objects import Commit, Tree, TagObject, Blob # from git.refs import SymbolicReference @@ -36,6 +34,7 @@ Tree_ish = Union['Commit', 'Tree'] Commit_ish = Union['Commit', 'TagObject', 'Blob', 'Tree'] +Lit_commit_ish = Literal['commit', 'tag', 'blob', 'tree'] # Config_levels --------------------------------------------------------- From cc63210d122ac7a113990e27b48e1bdbd07ceb4c Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 16:52:00 +0100 Subject: [PATCH 0645/2375] Add types to refs/tag.py --- git/refs/tag.py | 46 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/git/refs/tag.py b/git/refs/tag.py index 4d84239e7..aa3b82a2e 100644 --- a/git/refs/tag.py +++ b/git/refs/tag.py @@ -2,6 +2,19 @@ __all__ = ["TagReference", "Tag"] +# typing ------------------------------------------------------------------ + +from typing import Any, Union, TYPE_CHECKING +from git.types import Commit_ish, PathLike + +if TYPE_CHECKING: + from git.repo import Repo + from git.objects import Commit + from git.objects import TagObject + + +# ------------------------------------------------------------------------------ + class TagReference(Reference): @@ -22,9 +35,9 @@ class TagReference(Reference): _common_path_default = Reference._common_path_default + "/" + _common_default @property - def commit(self): + def commit(self) -> 'Commit': # type: ignore[override] # LazyMixin has unrelated """:return: Commit object the tag ref points to - + :raise ValueError: if the tag points to a tree or blob""" obj = self.object while obj.type != 'commit': @@ -37,7 +50,7 @@ def commit(self): return obj @property - def tag(self): + def tag(self) -> Union['TagObject', None]: """ :return: Tag object this tag ref points to or None in case we are a light weight tag""" @@ -48,10 +61,16 @@ def tag(self): # make object read-only # It should be reasonably hard to adjust an existing tag - object = property(Reference._get_object) + + # object = property(Reference._get_object) + @property + def object(self) -> Commit_ish: # type: ignore[override] + return Reference._get_object(self) @classmethod - def create(cls, repo, path, ref='HEAD', message=None, force=False, **kwargs): + def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'HEAD', + logmsg: Union[str, None] = None, + force: bool = False, **kwargs: Any) -> 'TagReference': """Create a new tag reference. :param path: @@ -62,12 +81,16 @@ def create(cls, repo, path, ref='HEAD', message=None, force=False, **kwargs): A reference to the object you want to tag. It can be a commit, tree or blob. - :param message: + :param logmsg: If not None, the message will be used in your tag object. This will also create an additional tag object that allows to obtain that information, i.e.:: tagref.tag.message + :param message: + Synonym for :param logmsg: + Included for backwards compatability. :param logmsg is used in preference if both given. + :param force: If True, to force creation of a tag even though that tag already exists. @@ -75,9 +98,12 @@ def create(cls, repo, path, ref='HEAD', message=None, force=False, **kwargs): Additional keyword arguments to be passed to git-tag :return: A new TagReference""" - args = (path, ref) - if message: - kwargs['m'] = message + args = (path, reference) + if logmsg: + kwargs['m'] = logmsg + elif 'message' in kwargs and kwargs['message']: + kwargs['m'] = kwargs['message'] + if force: kwargs['f'] = True @@ -85,7 +111,7 @@ def create(cls, repo, path, ref='HEAD', message=None, force=False, **kwargs): return TagReference(repo, "%s/%s" % (cls._common_path_default, path)) @classmethod - def delete(cls, repo, *tags): + def delete(cls, repo: 'Repo', *tags: 'TagReference') -> None: """Delete the given existing tag or tags""" repo.git.tag("-d", *tags) From 8dd3d0d6308f97249d69d43b6636d13fd3813d44 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 16:52:27 +0100 Subject: [PATCH 0646/2375] Add types to refs/symbolic.py --- git/refs/symbolic.py | 674 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 674 insertions(+) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index f0bd9316f..48b94cfa6 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -21,6 +21,680 @@ from .log import RefLog +# typing ------------------------------------------------------------------ + +from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING # NOQA +from git.types import Commit_ish, PathLike, TBD, Literal, TypeGuard # NOQA + +if TYPE_CHECKING: + from git.repo import Repo + +T_References = TypeVar('T_References', bound='SymbolicReference') + +# ------------------------------------------------------------------------------ + + +__all__ = ["SymbolicReference"] + + +def _git_dir(repo, path): + """ Find the git dir that's appropriate for the path""" + name = "%s" % (path,) + if name in ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'index', 'logs']: + return repo.git_dir + return repo.common_dir + + +class SymbolicReference(object): + + """Represents a special case of a reference such that this reference is symbolic. + It does not point to a specific commit, but to another Head, which itself + specifies a commit. + + A typical example for a symbolic reference is HEAD.""" + __slots__ = ("repo", "path") + _resolve_ref_on_create = False + _points_to_commits_only = True + _common_path_default = "" + _remote_common_path_default = "refs/remotes" + _id_attribute_ = "name" + + def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False): + self.repo = repo + self.path = str(path) + + def __str__(self) -> str: + return self.path + + def __repr__(self): + return '' % (self.__class__.__name__, self.path) + + def __eq__(self, other): + if hasattr(other, 'path'): + return self.path == other.path + return False + + def __ne__(self, other): + return not (self == other) + + def __hash__(self): + return hash(self.path) + + @property + def name(self): + """ + :return: + In case of symbolic references, the shortest assumable name + is the path itself.""" + return self.path + + @property + def abspath(self): + return join_path_native(_git_dir(self.repo, self.path), self.path) + + @classmethod + def _get_packed_refs_path(cls, repo): + return osp.join(repo.common_dir, 'packed-refs') + + @classmethod + def _iter_packed_refs(cls, repo): + """Returns an iterator yielding pairs of sha1/path pairs (as bytes) for the corresponding refs. + :note: The packed refs file will be kept open as long as we iterate""" + try: + with open(cls._get_packed_refs_path(repo), 'rt', encoding='UTF-8') as fp: + for line in fp: + line = line.strip() + if not line: + continue + if line.startswith('#'): + # "# pack-refs with: peeled fully-peeled sorted" + # the git source code shows "peeled", + # "fully-peeled" and "sorted" as the keywords + # that can go on this line, as per comments in git file + # refs/packed-backend.c + # I looked at master on 2017-10-11, + # commit 111ef79afe, after tag v2.15.0-rc1 + # from repo https://github.com/git/git.git + if line.startswith('# pack-refs with:') and 'peeled' not in line: + raise TypeError("PackingType of packed-Refs not understood: %r" % line) + # END abort if we do not understand the packing scheme + continue + # END parse comment + + # skip dereferenced tag object entries - previous line was actual + # tag reference for it + if line[0] == '^': + continue + + yield tuple(line.split(' ', 1)) + # END for each line + except OSError: + return None + # END no packed-refs file handling + # NOTE: Had try-finally block around here to close the fp, + # but some python version wouldn't allow yields within that. + # I believe files are closing themselves on destruction, so it is + # alright. + + @classmethod + def dereference_recursive(cls, repo, ref_path): + """ + :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all + intermediate references as required + :param repo: the repository containing the reference at ref_path""" + while True: + hexsha, ref_path = cls._get_ref_info(repo, ref_path) + if hexsha is not None: + return hexsha + # END recursive dereferencing + + @classmethod + def _get_ref_info_helper(cls, repo, ref_path): + """Return: (str(sha), str(target_ref_path)) if available, the sha the file at + rela_path points to, or None. target_ref_path is the reference we + point to, or None""" + tokens = None + repodir = _git_dir(repo, ref_path) + try: + with open(osp.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: + value = fp.read().rstrip() + # Don't only split on spaces, but on whitespace, which allows to parse lines like + # 60b64ef992065e2600bfef6187a97f92398a9144 branch 'master' of git-server:/path/to/repo + tokens = value.split() + assert(len(tokens) != 0) + except OSError: + # Probably we are just packed, find our entry in the packed refs file + # NOTE: We are not a symbolic ref if we are in a packed file, as these + # are excluded explicitly + for sha, path in cls._iter_packed_refs(repo): + if path != ref_path: + continue + # sha will be used + tokens = sha, path + break + # END for each packed ref + # END handle packed refs + if tokens is None: + raise ValueError("Reference at %r does not exist" % ref_path) + + # is it a reference ? + if tokens[0] == 'ref:': + return (None, tokens[1]) + + # its a commit + if repo.re_hexsha_only.match(tokens[0]): + return (tokens[0], None) + + raise ValueError("Failed to parse reference information from %r" % ref_path) + + @classmethod + def _get_ref_info(cls, repo, ref_path): + """Return: (str(sha), str(target_ref_path)) if available, the sha the file at + rela_path points to, or None. target_ref_path is the reference we + point to, or None""" + return cls._get_ref_info_helper(repo, ref_path) + + def _get_object(self): + """ + :return: + The object our ref currently refers to. Refs can be cached, they will + always point to the actual object as it gets re-created on each query""" + # have to be dynamic here as we may be a tag which can point to anything + # Our path will be resolved to the hexsha which will be used accordingly + return Object.new_from_sha(self.repo, hex_to_bin(self.dereference_recursive(self.repo, self.path))) + + def _get_commit(self): + """ + :return: + Commit object we point to, works for detached and non-detached + SymbolicReferences. The symbolic reference will be dereferenced recursively.""" + obj = self._get_object() + if obj.type == 'tag': + obj = obj.object + # END dereference tag + + if obj.type != Commit.type: + raise TypeError("Symbolic Reference pointed to object %r, commit was required" % obj) + # END handle type + return obj + + def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=None): + """As set_object, but restricts the type of object to be a Commit + + :raise ValueError: If commit is not a Commit object or doesn't point to + a commit + :return: self""" + # check the type - assume the best if it is a base-string + invalid_type = False + if isinstance(commit, Object): + invalid_type = commit.type != Commit.type + elif isinstance(commit, SymbolicReference): + invalid_type = commit.object.type != Commit.type + else: + try: + invalid_type = self.repo.rev_parse(commit).type != Commit.type + except (BadObject, BadName) as e: + raise ValueError("Invalid object: %s" % commit) from e + # END handle exception + # END verify type + + if invalid_type: + raise ValueError("Need commit, got %r" % commit) + # END handle raise + + # we leave strings to the rev-parse method below + self.set_object(commit, logmsg) + + return self + + def set_object(self, object, logmsg=None): # @ReservedAssignment + """Set the object we point to, possibly dereference our symbolic reference first. + If the reference does not exist, it will be created + + :param object: a refspec, a SymbolicReference or an Object instance. SymbolicReferences + will be dereferenced beforehand to obtain the object they point to + :param logmsg: If not None, the message will be used in the reflog entry to be + written. Otherwise the reflog is not altered + :note: plain SymbolicReferences may not actually point to objects by convention + :return: self""" + if isinstance(object, SymbolicReference): + object = object.object # @ReservedAssignment + # END resolve references + + is_detached = True + try: + is_detached = self.is_detached + except ValueError: + pass + # END handle non-existing ones + + if is_detached: + return self.set_reference(object, logmsg) + + # set the commit on our reference + return self._get_reference().set_object(object, logmsg) + + commit = property(_get_commit, set_commit, doc="Query or set commits directly") + object = property(_get_object, set_object, doc="Return the object our ref currently refers to") + + def _get_reference(self): + """:return: Reference Object we point to + :raise TypeError: If this symbolic reference is detached, hence it doesn't point + to a reference, but to a commit""" + sha, target_ref_path = self._get_ref_info(self.repo, self.path) + if target_ref_path is None: + raise TypeError("%s is a detached symbolic reference as it points to %r" % (self, sha)) + return self.from_path(self.repo, target_ref_path) + + def set_reference(self, ref, logmsg=None): + """Set ourselves to the given ref. It will stay a symbol if the ref is a Reference. + Otherwise an Object, given as Object instance or refspec, is assumed and if valid, + will be set which effectively detaches the refererence if it was a purely + symbolic one. + + :param ref: SymbolicReference instance, Object instance or refspec string + Only if the ref is a SymbolicRef instance, we will point to it. Everything + else is dereferenced to obtain the actual object. + :param logmsg: If set to a string, the message will be used in the reflog. + Otherwise, a reflog entry is not written for the changed reference. + The previous commit of the entry will be the commit we point to now. + + See also: log_append() + + :return: self + :note: This symbolic reference will not be dereferenced. For that, see + ``set_object(...)``""" + write_value = None + obj = None + if isinstance(ref, SymbolicReference): + write_value = "ref: %s" % ref.path + elif isinstance(ref, Object): + obj = ref + write_value = ref.hexsha + elif isinstance(ref, str): + try: + obj = self.repo.rev_parse(ref + "^{}") # optionally deref tags + write_value = obj.hexsha + except (BadObject, BadName) as e: + raise ValueError("Could not extract object from %s" % ref) from e + # END end try string + else: + raise ValueError("Unrecognized Value: %r" % ref) + # END try commit attribute + + # typecheck + if obj is not None and self._points_to_commits_only and obj.type != Commit.type: + raise TypeError("Require commit, got %r" % obj) + # END verify type + + oldbinsha = None + if logmsg is not None: + try: + oldbinsha = self.commit.binsha + except ValueError: + oldbinsha = Commit.NULL_BIN_SHA + # END handle non-existing + # END retrieve old hexsha + + fpath = self.abspath + assure_directory_exists(fpath, is_file=True) + + lfd = LockedFD(fpath) + fd = lfd.open(write=True, stream=True) + ok = True + try: + fd.write(write_value.encode('ascii') + b'\n') + lfd.commit() + ok = True + finally: + if not ok: + lfd.rollback() + # Adjust the reflog + if logmsg is not None: + self.log_append(oldbinsha, logmsg) + + return self + + # aliased reference + reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") + ref: Union[Commit_ish] = reference # type: ignore # Union[str, Commit_ish, SymbolicReference] + + def is_valid(self): + """ + :return: + True if the reference is valid, hence it can be read and points to + a valid object or reference.""" + try: + self.object + except (OSError, ValueError): + return False + else: + return True + + @property + def is_detached(self): + """ + :return: + True if we are a detached reference, hence we point to a specific commit + instead to another reference""" + try: + self.ref + return False + except TypeError: + return True + + def log(self): + """ + :return: RefLog for this reference. Its last entry reflects the latest change + applied to this reference + + .. note:: As the log is parsed every time, its recommended to cache it for use + instead of calling this method repeatedly. It should be considered read-only.""" + return RefLog.from_file(RefLog.path(self)) + + def log_append(self, oldbinsha, message, newbinsha=None): + """Append a logentry to the logfile of this ref + + :param oldbinsha: binary sha this ref used to point to + :param message: A message describing the change + :param newbinsha: The sha the ref points to now. If None, our current commit sha + will be used + :return: added RefLogEntry instance""" + # NOTE: we use the committer of the currently active commit - this should be + # correct to allow overriding the committer on a per-commit level. + # See https://github.com/gitpython-developers/GitPython/pull/146 + try: + committer_or_reader = self.commit.committer + except ValueError: + committer_or_reader = self.repo.config_reader() + # end handle newly cloned repositories + return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, + (newbinsha is None and self.commit.binsha) or newbinsha, + message) + + def log_entry(self, index): + """:return: RefLogEntry at the given index + :param index: python list compatible positive or negative index + + .. note:: This method must read part of the reflog during execution, hence + it should be used sparringly, or only if you need just one index. + In that case, it will be faster than the ``log()`` method""" + return RefLog.entry_at(RefLog.path(self), index) + + @classmethod + def to_full_path(cls, path) -> PathLike: + """ + :return: string with a full repository-relative path which can be used to initialize + a Reference instance, for instance by using ``Reference.from_path``""" + if isinstance(path, SymbolicReference): + path = path.path + full_ref_path = path + if not cls._common_path_default: + return full_ref_path + if not path.startswith(cls._common_path_default + "/"): + full_ref_path = '%s/%s' % (cls._common_path_default, path) + return full_ref_path + + @classmethod + def delete(cls, repo, path): + """Delete the reference at the given path + + :param repo: + Repository to delete the reference from + + :param path: + Short or full path pointing to the reference, i.e. refs/myreference + or just "myreference", hence 'refs/' is implied. + Alternatively the symbolic reference to be deleted""" + full_ref_path = cls.to_full_path(path) + abs_path = osp.join(repo.common_dir, full_ref_path) + if osp.exists(abs_path): + os.remove(abs_path) + else: + # check packed refs + pack_file_path = cls._get_packed_refs_path(repo) + try: + with open(pack_file_path, 'rb') as reader: + new_lines = [] + made_change = False + dropped_last_line = False + for line in reader: + line = line.decode(defenc) + _, _, line_ref = line.partition(' ') + line_ref = line_ref.strip() + # keep line if it is a comment or if the ref to delete is not + # in the line + # If we deleted the last line and this one is a tag-reference object, + # we drop it as well + if (line.startswith('#') or full_ref_path != line_ref) and \ + (not dropped_last_line or dropped_last_line and not line.startswith('^')): + new_lines.append(line) + dropped_last_line = False + continue + # END skip comments and lines without our path + + # drop this line + made_change = True + dropped_last_line = True + + # write the new lines + if made_change: + # write-binary is required, otherwise windows will + # open the file in text mode and change LF to CRLF ! + with open(pack_file_path, 'wb') as fd: + fd.writelines(line.encode(defenc) for line in new_lines) + + except OSError: + pass # it didn't exist at all + + # delete the reflog + reflog_path = RefLog.path(cls(repo, full_ref_path)) + if osp.isfile(reflog_path): + os.remove(reflog_path) + # END remove reflog + + @classmethod + def _create(cls, repo, path, resolve, reference, force, logmsg=None): + """internal method used to create a new symbolic reference. + If resolve is False, the reference will be taken as is, creating + a proper symbolic reference. Otherwise it will be resolved to the + corresponding object and a detached symbolic reference will be created + instead""" + git_dir = _git_dir(repo, path) + full_ref_path = cls.to_full_path(path) + abs_ref_path = osp.join(git_dir, full_ref_path) + + # figure out target data + target = reference + if resolve: + target = repo.rev_parse(str(reference)) + + if not force and osp.isfile(abs_ref_path): + target_data = str(target) + if isinstance(target, SymbolicReference): + target_data = target.path + if not resolve: + target_data = "ref: " + target_data + with open(abs_ref_path, 'rb') as fd: + existing_data = fd.read().decode(defenc).strip() + if existing_data != target_data: + raise OSError("Reference at %r does already exist, pointing to %r, requested was %r" % + (full_ref_path, existing_data, target_data)) + # END no force handling + + ref = cls(repo, full_ref_path) + ref.set_reference(target, logmsg) + return ref + + @classmethod + def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'HEAD', + logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any): + """Create a new symbolic reference, hence a reference pointing , to another reference. + + :param repo: + Repository to create the reference in + + :param path: + full path at which the new symbolic reference is supposed to be + created at, i.e. "NEW_HEAD" or "symrefs/my_new_symref" + + :param reference: + The reference to which the new symbolic reference should point to. + If it is a commit'ish, the symbolic ref will be detached. + + :param force: + if True, force creation even if a symbolic reference with that name already exists. + Raise OSError otherwise + + :param logmsg: + If not None, the message to append to the reflog. Otherwise no reflog + entry is written. + + :return: Newly created symbolic Reference + + :raise OSError: + If a (Symbolic)Reference with the same name but different contents + already exists. + + :note: This does not alter the current HEAD, index or Working Tree""" + return cls._create(repo, path, cls._resolve_ref_on_create, reference, force, logmsg) + + def rename(self, new_path, force=False): + """Rename self to a new path + + :param new_path: + Either a simple name or a full path, i.e. new_name or features/new_name. + The prefix refs/ is implied for references and will be set as needed. + In case this is a symbolic ref, there is no implied prefix + + :param force: + If True, the rename will succeed even if a head with the target name + already exists. It will be overwritten in that case + + :return: self + :raise OSError: In case a file at path but a different contents already exists """ + new_path = self.to_full_path(new_path) + if self.path == new_path: + return self + + new_abs_path = osp.join(_git_dir(self.repo, new_path), new_path) + cur_abs_path = osp.join(_git_dir(self.repo, self.path), self.path) + if osp.isfile(new_abs_path): + if not force: + # if they point to the same file, its not an error + with open(new_abs_path, 'rb') as fd1: + f1 = fd1.read().strip() + with open(cur_abs_path, 'rb') as fd2: + f2 = fd2.read().strip() + if f1 != f2: + raise OSError("File at path %r already exists" % new_abs_path) + # else: we could remove ourselves and use the otherone, but + # but clarity we just continue as usual + # END not force handling + os.remove(new_abs_path) + # END handle existing target file + + dname = osp.dirname(new_abs_path) + if not osp.isdir(dname): + os.makedirs(dname) + # END create directory + + os.rename(cur_abs_path, new_abs_path) + self.path = new_path + + return self + + @classmethod + def _iter_items(cls: Type[T_References], repo: 'Repo', common_path: Union[PathLike, None] = None + ) -> Iterator[T_References]: + if common_path is None: + common_path = cls._common_path_default + rela_paths = set() + + # walk loose refs + # Currently we do not follow links + for root, dirs, files in os.walk(join_path_native(repo.common_dir, common_path)): + if 'refs' not in root.split(os.sep): # skip non-refs subfolders + refs_id = [d for d in dirs if d == 'refs'] + if refs_id: + dirs[0:] = ['refs'] + # END prune non-refs folders + + for f in files: + if f == 'packed-refs': + continue + abs_path = to_native_path_linux(join_path(root, f)) + rela_paths.add(abs_path.replace(to_native_path_linux(repo.common_dir) + '/', "")) + # END for each file in root directory + # END for each directory to walk + + # read packed refs + for _sha, rela_path in cls._iter_packed_refs(repo): + if rela_path.startswith(common_path): + rela_paths.add(rela_path) + # END relative path matches common path + # END packed refs reading + + # return paths in sorted order + for path in sorted(rela_paths): + try: + yield cls.from_path(repo, path) + except ValueError: + continue + # END for each sorted relative refpath + + @classmethod + # type: ignore[override] + def iter_items(cls, repo: 'Repo', common_path: Union[PathLike, None] = None, *args, **kwargs): + """Find all refs in the repository + + :param repo: is the Repo + + :param common_path: + Optional keyword argument to the path which is to be shared by all + returned Ref objects. + Defaults to class specific portion if None assuring that only + refs suitable for the actual class are returned. + + :return: + git.SymbolicReference[], each of them is guaranteed to be a symbolic + ref which is not detached and pointing to a valid ref + + List is lexicographically sorted + The returned objects represent actual subclasses, such as Head or TagReference""" + return (r for r in cls._iter_items(repo, common_path) if r.__class__ == SymbolicReference or not r.is_detached) + + @classmethod + def from_path(cls, repo, path): + """ + :param path: full .git-directory-relative path name to the Reference to instantiate + :note: use to_full_path() if you only have a partial path of a known Reference Type + :return: + Instance of type Reference, Head, or Tag + depending on the given path""" + if not path: + raise ValueError("Cannot create Reference from %r" % path) + + # Names like HEAD are inserted after the refs module is imported - we have an import dependency + # cycle and don't want to import these names in-function + from . import HEAD, Head, RemoteReference, TagReference, Reference + for ref_type in (HEAD, Head, RemoteReference, TagReference, Reference, SymbolicReference): + try: + instance = ref_type(repo, path) + if instance.__class__ == SymbolicReference and instance.is_detached: + raise ValueError("SymbolRef was detached, we drop it") + return instance + except ValueError: + pass + # END exception handling + # END for each type to try + raise ValueError("Could not find reference type suitable to handle path %r" % path) + + def is_remote(self): + """:return: True if this symbolic reference points to a remote branch""" + return self.path.startswith(self._remote_common_path_default + "/") + + __all__ = ["SymbolicReference"] From 4b9ca921e8722f4e7359bea174b2c823059c5542 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 16:53:14 +0100 Subject: [PATCH 0647/2375] Add types to refs/remote.py --- git/refs/remote.py | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/git/refs/remote.py b/git/refs/remote.py index 0164e110c..8a680a4a1 100644 --- a/git/refs/remote.py +++ b/git/refs/remote.py @@ -2,13 +2,23 @@ from git.util import join_path -import os.path as osp - from .head import Head __all__ = ["RemoteReference"] +# typing ------------------------------------------------------------------ + +from typing import Any, NoReturn, Union, TYPE_CHECKING +from git.types import PathLike + + +if TYPE_CHECKING: + from git.repo import Repo + from git import Remote + +# ------------------------------------------------------------------------------ + class RemoteReference(Head): @@ -16,16 +26,19 @@ class RemoteReference(Head): _common_path_default = Head._remote_common_path_default @classmethod - def iter_items(cls, repo, common_path=None, remote=None): + def iter_items(cls, repo: 'Repo', common_path: Union[PathLike, None] = None, + remote: Union['Remote', None] = None, *args: Any, **kwargs: Any + ) -> 'RemoteReference': """Iterate remote references, and if given, constrain them to the given remote""" common_path = common_path or cls._common_path_default if remote is not None: common_path = join_path(common_path, str(remote)) # END handle remote constraint + # super is Reference return super(RemoteReference, cls).iter_items(repo, common_path) - @classmethod - def delete(cls, repo, *refs, **kwargs): + @ classmethod + def delete(cls, repo: 'Repo', *refs: 'RemoteReference', **kwargs: Any) -> None: """Delete the given remote references :note: @@ -37,16 +50,16 @@ def delete(cls, repo, *refs, **kwargs): # and delete remainders manually for ref in refs: try: - os.remove(osp.join(repo.common_dir, ref.path)) + os.remove(os.path.join(repo.common_dir, ref.path)) except OSError: pass try: - os.remove(osp.join(repo.git_dir, ref.path)) + os.remove(os.path.join(repo.git_dir, ref.path)) except OSError: pass # END for each ref - @classmethod - def create(cls, *args, **kwargs): + @ classmethod + def create(cls, *args: Any, **kwargs: Any) -> NoReturn: """Used to disable this method""" raise TypeError("Cannot explicitly create remote references") From 1dd4596294d2302cc091a337ff6f89761795efe7 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 16:53:28 +0100 Subject: [PATCH 0648/2375] Add types to refs/reference.py --- git/refs/reference.py | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/git/refs/reference.py b/git/refs/reference.py index 8a9b04873..f584bb54d 100644 --- a/git/refs/reference.py +++ b/git/refs/reference.py @@ -2,7 +2,18 @@ LazyMixin, IterableObj, ) -from .symbolic import SymbolicReference +from .symbolic import SymbolicReference, T_References + + +# typing ------------------------------------------------------------------ + +from typing import Any, Callable, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING # NOQA +from git.types import Commit_ish, PathLike, TBD, Literal, TypeGuard, _T # NOQA + +if TYPE_CHECKING: + from git.repo import Repo + +# ------------------------------------------------------------------------------ __all__ = ["Reference"] @@ -10,10 +21,10 @@ #{ Utilities -def require_remote_ref_path(func): +def require_remote_ref_path(func: Callable[..., _T]) -> Callable[..., _T]: """A decorator raising a TypeError if we are not a valid remote, based on the path""" - def wrapper(self, *args): + def wrapper(self: T_References, *args: Any) -> _T: if not self.is_remote(): raise ValueError("ref path does not point to a remote reference: %s" % self.path) return func(self, *args) @@ -32,7 +43,7 @@ class Reference(SymbolicReference, LazyMixin, IterableObj): _resolve_ref_on_create = True _common_path_default = "refs" - def __init__(self, repo, path, check_path=True): + def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = True) -> None: """Initialize this instance :param repo: Our parent repository @@ -41,16 +52,17 @@ def __init__(self, repo, path, check_path=True): refs/heads/master :param check_path: if False, you can provide any path. Otherwise the path must start with the default path prefix of this type.""" - if check_path and not path.startswith(self._common_path_default + '/'): - raise ValueError("Cannot instantiate %r from path %s" % (self.__class__.__name__, path)) + if check_path and not str(path).startswith(self._common_path_default + '/'): + raise ValueError(f"Cannot instantiate {self.__class__.__name__!r} from path {path}") + self.path: str # SymbolicReference converts to string atm super(Reference, self).__init__(repo, path) - def __str__(self): + def __str__(self) -> str: return self.name #{ Interface - def set_object(self, object, logmsg=None): # @ReservedAssignment + def set_object(self, object: Commit_ish, logmsg: Union[str, None] = None) -> 'Reference': # @ReservedAssignment """Special version which checks if the head-log needs an update as well :return: self""" oldbinsha = None @@ -84,7 +96,7 @@ def set_object(self, object, logmsg=None): # @ReservedAssignment # NOTE: Don't have to overwrite properties as the will only work without a the log @property - def name(self): + def name(self) -> str: """:return: (shortest) Name of this reference - it may contain path components""" # first two path tokens are can be removed as they are # refs/heads or refs/tags or refs/remotes @@ -94,7 +106,8 @@ def name(self): return '/'.join(tokens[2:]) @classmethod - def iter_items(cls, repo, common_path=None): + def iter_items(cls: Type[T_References], repo: 'Repo', common_path: Union[PathLike, None] = None, + *args: Any, **kwargs: Any) -> Iterator[T_References]: """Equivalent to SymbolicReference.iter_items, but will return non-detached references as well.""" return cls._iter_items(repo, common_path) @@ -105,7 +118,7 @@ def iter_items(cls, repo, common_path=None): @property # type: ignore ## mypy cannot deal with properties with an extra decorator (2021-04-21) @require_remote_ref_path - def remote_name(self): + def remote_name(self) -> str: """ :return: Name of the remote we are a reference of, such as 'origin' for a reference @@ -116,7 +129,7 @@ def remote_name(self): @property # type: ignore ## mypy cannot deal with properties with an extra decorator (2021-04-21) @require_remote_ref_path - def remote_head(self): + def remote_head(self) -> str: """:return: Name of the remote head itself, i.e. master. :note: The returned name is usually not qualified enough to uniquely identify a branch""" From ae13c6dfd6124604c30de1841dfd669195568608 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 16:53:47 +0100 Subject: [PATCH 0649/2375] Add types to refs/log.py --- git/refs/log.py | 140 +++++++++++++++++++++++++++++------------------- 1 file changed, 86 insertions(+), 54 deletions(-) diff --git a/git/refs/log.py b/git/refs/log.py index f850ba24c..643b41140 100644 --- a/git/refs/log.py +++ b/git/refs/log.py @@ -1,5 +1,7 @@ + +from mmap import mmap import re -import time +import time as _time from git.compat import defenc from git.objects.util import ( @@ -20,20 +22,33 @@ import os.path as osp +# typing ------------------------------------------------------------------ + +from typing import Iterator, List, Tuple, Union, TYPE_CHECKING + +from git.types import PathLike + +if TYPE_CHECKING: + from git.refs import SymbolicReference + from io import BytesIO + from git.config import GitConfigParser, SectionConstraint # NOQA + +# ------------------------------------------------------------------------------ + __all__ = ["RefLog", "RefLogEntry"] -class RefLogEntry(tuple): +class RefLogEntry(Tuple[str, str, Actor, Tuple[int, int], str]): """Named tuple allowing easy access to the revlog data fields""" _re_hexsha_only = re.compile('^[0-9A-Fa-f]{40}$') __slots__ = () - def __repr__(self): + def __repr__(self) -> str: """Representation of ourselves in git reflog format""" return self.format() - def format(self): + def format(self) -> str: """:return: a string suitable to be placed in a reflog file""" act = self.actor time = self.time @@ -46,22 +61,22 @@ def format(self): self.message) @property - def oldhexsha(self): + def oldhexsha(self) -> str: """The hexsha to the commit the ref pointed to before the change""" return self[0] @property - def newhexsha(self): + def newhexsha(self) -> str: """The hexsha to the commit the ref now points to, after the change""" return self[1] @property - def actor(self): + def actor(self) -> Actor: """Actor instance, providing access""" return self[2] @property - def time(self): + def time(self) -> Tuple[int, int]: """time as tuple: * [0] = int(time) @@ -69,12 +84,13 @@ def time(self): return self[3] @property - def message(self): + def message(self) -> str: """Message describing the operation that acted on the reference""" return self[4] @classmethod - def new(cls, oldhexsha, newhexsha, actor, time, tz_offset, message): # skipcq: PYL-W0621 + def new(cls, oldhexsha: str, newhexsha: str, actor: Actor, time: int, tz_offset: int, message: str + ) -> 'RefLogEntry': # skipcq: PYL-W0621 """:return: New instance of a RefLogEntry""" if not isinstance(actor, Actor): raise ValueError("Need actor instance, got %s" % actor) @@ -111,14 +127,15 @@ def from_line(cls, line: bytes) -> 'RefLogEntry': # END handle missing end brace actor = Actor._from_string(info[82:email_end + 1]) - time, tz_offset = parse_date(info[email_end + 2:]) # skipcq: PYL-W0621 + time, tz_offset = parse_date( + info[email_end + 2:]) # skipcq: PYL-W0621 return RefLogEntry((oldhexsha, newhexsha, actor, (time, tz_offset), msg)) -class RefLog(list, Serializable): +class RefLog(List[RefLogEntry], Serializable): - """A reflog contains reflog entries, each of which defines a certain state + """A reflog contains RefLogEntrys, each of which defines a certain state of the head in question. Custom query methods allow to retrieve log entries by date or by other criteria. @@ -127,11 +144,11 @@ class RefLog(list, Serializable): __slots__ = ('_path', ) - def __new__(cls, filepath=None): + def __new__(cls, filepath: Union[PathLike, None] = None) -> 'RefLog': inst = super(RefLog, cls).__new__(cls) return inst - def __init__(self, filepath=None): + def __init__(self, filepath: Union[PathLike, None] = None): """Initialize this instance with an optional filepath, from which we will initialize our data. The path is also used to write changes back using the write() method""" @@ -142,7 +159,8 @@ def __init__(self, filepath=None): def _read_from_file(self): try: - fmap = file_contents_ro_filepath(self._path, stream=True, allow_mmap=True) + fmap = file_contents_ro_filepath( + self._path, stream=True, allow_mmap=True) except OSError: # it is possible and allowed that the file doesn't exist ! return @@ -154,10 +172,10 @@ def _read_from_file(self): fmap.close() # END handle closing of handle - #{ Interface + # { Interface @classmethod - def from_file(cls, filepath): + def from_file(cls, filepath: PathLike) -> 'RefLog': """ :return: a new RefLog instance containing all entries from the reflog at the given filepath @@ -166,7 +184,7 @@ def from_file(cls, filepath): return cls(filepath) @classmethod - def path(cls, ref): + def path(cls, ref: 'SymbolicReference') -> str: """ :return: string to absolute path at which the reflog of the given ref instance would be found. The path is not guaranteed to point to a valid @@ -175,28 +193,34 @@ def path(cls, ref): return osp.join(ref.repo.git_dir, "logs", to_native_path(ref.path)) @classmethod - def iter_entries(cls, stream): + def iter_entries(cls, stream: Union[str, 'BytesIO', mmap]) -> Iterator[RefLogEntry]: """ :return: Iterator yielding RefLogEntry instances, one for each line read sfrom the given stream. :param stream: file-like object containing the revlog in its native format - or basestring instance pointing to a file to read""" + or string instance pointing to a file to read""" new_entry = RefLogEntry.from_line if isinstance(stream, str): - stream = file_contents_ro_filepath(stream) + # default args return mmap on py>3 + _stream = file_contents_ro_filepath(stream) + assert isinstance(_stream, mmap) + else: + _stream = stream # END handle stream type while True: - line = stream.readline() + line = _stream.readline() if not line: return yield new_entry(line.strip()) # END endless loop - stream.close() @classmethod - def entry_at(cls, filepath, index): - """:return: RefLogEntry at the given index + def entry_at(cls, filepath: PathLike, index: int) -> 'RefLogEntry': + """ + :return: RefLogEntry at the given index + :param filepath: full path to the index file from which to read the entry + :param index: python list compatible index, i.e. it may be negative to specify an entry counted from the end of the list @@ -210,21 +234,19 @@ def entry_at(cls, filepath, index): if index < 0: return RefLogEntry.from_line(fp.readlines()[index].strip()) # read until index is reached + for i in range(index + 1): line = fp.readline() if not line: - break + raise IndexError( + f"Index file ended at line {i+1}, before given index was reached") # END abort on eof # END handle runup - if i != index or not line: # skipcq:PYL-W0631 - raise IndexError - # END handle exception - return RefLogEntry.from_line(line.strip()) # END handle index - def to_file(self, filepath): + def to_file(self, filepath: PathLike) -> None: """Write the contents of the reflog instance to a file at the given filepath. :param filepath: path to file, parent directories are assumed to exist""" lfd = LockedFD(filepath) @@ -241,65 +263,75 @@ def to_file(self, filepath): # END handle change @classmethod - def append_entry(cls, config_reader, filepath, oldbinsha, newbinsha, message): + def append_entry(cls, config_reader: Union[Actor, 'GitConfigParser', 'SectionConstraint', None], + filepath: PathLike, oldbinsha: bytes, newbinsha: bytes, message: str, + write: bool = True) -> 'RefLogEntry': """Append a new log entry to the revlog at filepath. :param config_reader: configuration reader of the repository - used to obtain - user information. May also be an Actor instance identifying the committer directly. - May also be None + user information. May also be an Actor instance identifying the committer directly or None. :param filepath: full path to the log file :param oldbinsha: binary sha of the previous commit :param newbinsha: binary sha of the current commit :param message: message describing the change to the reference :param write: If True, the changes will be written right away. Otherwise the change will not be written + :return: RefLogEntry objects which was appended to the log + :note: As we are append-only, concurrent access is not a problem as we do not interfere with readers.""" + if len(oldbinsha) != 20 or len(newbinsha) != 20: raise ValueError("Shas need to be given in binary format") # END handle sha type assure_directory_exists(filepath, is_file=True) first_line = message.split('\n')[0] - committer = isinstance(config_reader, Actor) and config_reader or Actor.committer(config_reader) + if isinstance(config_reader, Actor): + committer = config_reader # mypy thinks this is Actor | Gitconfigparser, but why? + else: + committer = Actor.committer(config_reader) entry = RefLogEntry(( bin_to_hex(oldbinsha).decode('ascii'), bin_to_hex(newbinsha).decode('ascii'), - committer, (int(time.time()), time.altzone), first_line + committer, (int(_time.time()), _time.altzone), first_line )) - lf = LockFile(filepath) - lf._obtain_lock_or_raise() - fd = open(filepath, 'ab') - try: - fd.write(entry.format().encode(defenc)) - finally: - fd.close() - lf._release_lock() - # END handle write operation - + if write: + lf = LockFile(filepath) + lf._obtain_lock_or_raise() + fd = open(filepath, 'ab') + try: + fd.write(entry.format().encode(defenc)) + finally: + fd.close() + lf._release_lock() + # END handle write operation return entry - def write(self): + def write(self) -> 'RefLog': """Write this instance's data to the file we are originating from :return: self""" if self._path is None: - raise ValueError("Instance was not initialized with a path, use to_file(...) instead") + raise ValueError( + "Instance was not initialized with a path, use to_file(...) instead") # END assert path self.to_file(self._path) return self - #} END interface + # } END interface - #{ Serializable Interface - def _serialize(self, stream): + # { Serializable Interface + def _serialize(self, stream: 'BytesIO') -> 'RefLog': write = stream.write # write all entries for e in self: write(e.format().encode(defenc)) # END for each entry + return self - def _deserialize(self, stream): + def _deserialize(self, stream: 'BytesIO') -> 'RefLog': self.extend(self.iter_entries(stream)) - #} END serializable interface + # } END serializable interface + return self From 8fc25c63d9282ddc6b3162c2d92679a89e934ec5 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 16:54:05 +0100 Subject: [PATCH 0650/2375] Add types to refs/head.py --- git/refs/head.py | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/git/refs/head.py b/git/refs/head.py index 97c8e6a1f..338efce9f 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -5,12 +5,18 @@ from .symbolic import SymbolicReference from .reference import Reference -from typing import Union, TYPE_CHECKING +# typinng --------------------------------------------------- -from git.types import Commit_ish +from typing import Any, Sequence, Union, TYPE_CHECKING + +from git.types import PathLike, Commit_ish if TYPE_CHECKING: from git.repo import Repo + from git.objects import Commit + from git.refs import RemoteReference + +# ------------------------------------------------------------------- __all__ = ["HEAD", "Head"] @@ -29,20 +35,21 @@ class HEAD(SymbolicReference): _ORIG_HEAD_NAME = 'ORIG_HEAD' __slots__ = () - def __init__(self, repo: 'Repo', path=_HEAD_NAME): + def __init__(self, repo: 'Repo', path: PathLike = _HEAD_NAME): if path != self._HEAD_NAME: raise ValueError("HEAD instance must point to %r, got %r" % (self._HEAD_NAME, path)) super(HEAD, self).__init__(repo, path) - self.commit: 'Commit_ish' + self.commit: 'Commit' - def orig_head(self) -> 'SymbolicReference': + def orig_head(self) -> SymbolicReference: """ :return: SymbolicReference pointing at the ORIG_HEAD, which is maintained to contain the previous value of HEAD""" return SymbolicReference(self.repo, self._ORIG_HEAD_NAME) - def reset(self, commit: Union[Commit_ish, SymbolicReference, str] = 'HEAD', index=True, working_tree=False, - paths=None, **kwargs): + def reset(self, commit: Union[Commit_ish, SymbolicReference, str] = 'HEAD', + index: bool = True, working_tree: bool = False, + paths: Union[PathLike, Sequence[PathLike], None] = None, **kwargs: Any) -> 'HEAD': """Reset our HEAD to the given commit optionally synchronizing the index and working tree. The reference we refer to will be set to commit as well. @@ -122,7 +129,7 @@ class Head(Reference): k_config_remote_ref = "merge" # branch to merge from remote @classmethod - def delete(cls, repo, *heads, **kwargs): + def delete(cls, repo: 'Repo', *heads: 'Head', **kwargs: Any): """Delete the given heads :param force: @@ -135,7 +142,7 @@ def delete(cls, repo, *heads, **kwargs): flag = "-D" repo.git.branch(flag, *heads) - def set_tracking_branch(self, remote_reference): + def set_tracking_branch(self, remote_reference: 'RemoteReference') -> 'Head': """ Configure this branch to track the given remote reference. This will alter this branch's configuration accordingly. @@ -160,7 +167,7 @@ def set_tracking_branch(self, remote_reference): return self - def tracking_branch(self): + def tracking_branch(self) -> Union['RemoteReference', None]: """ :return: The remote_reference we are tracking, or None if we are not a tracking branch""" @@ -175,7 +182,7 @@ def tracking_branch(self): # we are not a tracking branch return None - def rename(self, new_path, force=False): + def rename(self, new_path: PathLike, force: bool = False) -> 'Head': """Rename self to a new path :param new_path: @@ -196,7 +203,7 @@ def rename(self, new_path, force=False): self.path = "%s/%s" % (self._common_path_default, new_path) return self - def checkout(self, force=False, **kwargs): + def checkout(self, force: bool = False, **kwargs: Any): """Checkout this head by setting the HEAD to this reference, by updating the index to reflect the tree we point to and by updating the working tree to reflect the latest index. @@ -231,7 +238,7 @@ def checkout(self, force=False, **kwargs): return self.repo.active_branch #{ Configuration - def _config_parser(self, read_only): + def _config_parser(self, read_only: bool) -> SectionConstraint: if read_only: parser = self.repo.config_reader() else: @@ -240,13 +247,13 @@ def _config_parser(self, read_only): return SectionConstraint(parser, 'branch "%s"' % self.name) - def config_reader(self): + def config_reader(self) -> SectionConstraint: """ :return: A configuration parser instance constrained to only read this instance's values""" return self._config_parser(read_only=True) - def config_writer(self): + def config_writer(self) -> SectionConstraint: """ :return: A configuration writer instance with read-and write access to options of this head""" From ac39679ce170c5eb21f98ac23ac0358850e8974f Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 16:55:03 +0100 Subject: [PATCH 0651/2375] Make types in refs compatible with previous --- git/cmd.py | 12 ++++------- git/config.py | 2 +- git/db.py | 2 +- git/diff.py | 2 +- git/remote.py | 57 +++++++++++++++++++++++++++++++-------------------- git/util.py | 29 +++++++++++++++----------- 6 files changed, 59 insertions(+), 45 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index dd887a18b..11c02afe8 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -15,7 +15,6 @@ PIPE ) import subprocess -import sys import threading from textwrap import dedent @@ -539,7 +538,7 @@ def __iter__(self) -> 'Git.CatFileContentStream': return self def __next__(self) -> bytes: - return self.next() + return next(self) def next(self) -> bytes: line = self.readline() @@ -799,10 +798,7 @@ def execute(self, if kill_after_timeout: raise GitCommandError(redacted_command, '"kill_after_timeout" feature is not supported on Windows.') else: - if sys.version_info[0] > 2: - cmd_not_found_exception = FileNotFoundError # NOQA # exists, flake8 unknown @UndefinedVariable - else: - cmd_not_found_exception = OSError + cmd_not_found_exception = FileNotFoundError # NOQA # exists, flake8 unknown @UndefinedVariable # end handle stdout_sink = (PIPE @@ -1070,8 +1066,8 @@ def _call_process(self, method: str, *args: Any, **kwargs: Any It contains key-values for the following: - the :meth:`execute()` kwds, as listed in :var:`execute_kwargs`; - "command options" to be converted by :meth:`transform_kwargs()`; - - the `'insert_kwargs_after'` key which its value must match one of ``*args``, - and any cmd-options will be appended after the matched arg. + - the `'insert_kwargs_after'` key which its value must match one of ``*args`` + and any cmd-options will be appended after the matched arg. Examples:: diff --git a/git/config.py b/git/config.py index 2c863f938..e0a18ec8e 100644 --- a/git/config.py +++ b/git/config.py @@ -238,7 +238,7 @@ def get_config_path(config_level: Lit_config_levels) -> str: assert_never(config_level, ValueError(f"Invalid configuration level: {config_level!r}")) -class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser, object)): # type: ignore ## mypy does not understand dynamic class creation # noqa: E501 +class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser)): # type: ignore ## mypy does not understand dynamic class creation # noqa: E501 """Implements specifics required to read git style configuration files. diff --git a/git/db.py b/git/db.py index 47cccda8d..3a7adc7d5 100644 --- a/git/db.py +++ b/git/db.py @@ -17,7 +17,7 @@ if TYPE_CHECKING: from git.cmd import Git - + # -------------------------------------------------------- diff --git a/git/diff.py b/git/diff.py index 51dac3909..f8c0c25f3 100644 --- a/git/diff.py +++ b/git/diff.py @@ -143,7 +143,7 @@ def diff(self, other: Union[Type['Index'], 'Tree', 'Commit', None, str, object] paths = [paths] if hasattr(self, 'Has_Repo'): - self.repo: Repo = self.repo + self.repo: 'Repo' = self.repo diff_cmd = self.repo.git.diff if other is self.Index: diff --git a/git/remote.py b/git/remote.py index f59b3245b..0fcd49b57 100644 --- a/git/remote.py +++ b/git/remote.py @@ -36,9 +36,10 @@ # typing------------------------------------------------------- -from typing import Any, Callable, Dict, Iterator, List, Optional, Sequence, TYPE_CHECKING, Union, overload +from typing import (Any, Callable, Dict, Iterator, List, NoReturn, Optional, Sequence, # NOQA[TC002] + TYPE_CHECKING, Type, Union, overload) -from git.types import PathLike, Literal, TBD, TypeGuard, Commit_ish +from git.types import PathLike, Literal, TBD, TypeGuard, Commit_ish # NOQA[TC002] if TYPE_CHECKING: from git.repo.base import Repo @@ -83,17 +84,17 @@ def add_progress(kwargs: Any, git: Git, #} END utilities -@overload +@ overload def to_progress_instance(progress: None) -> RemoteProgress: ... -@overload +@ overload def to_progress_instance(progress: Callable[..., Any]) -> CallableRemoteProgress: ... -@overload +@ overload def to_progress_instance(progress: RemoteProgress) -> RemoteProgress: ... @@ -155,11 +156,11 @@ def __init__(self, flags: int, local_ref: Union[SymbolicReference, None], remote self._old_commit_sha = old_commit self.summary = summary - @property - def old_commit(self) -> Union[str, SymbolicReference, 'Commit_ish', None]: + @ property + def old_commit(self) -> Union[str, SymbolicReference, Commit_ish, None]: return self._old_commit_sha and self._remote.repo.commit(self._old_commit_sha) or None - @property + @ property def remote_ref(self) -> Union[RemoteReference, TagReference]: """ :return: @@ -175,7 +176,7 @@ def remote_ref(self) -> Union[RemoteReference, TagReference]: raise ValueError("Could not handle remote ref: %r" % self.remote_ref_string) # END - @classmethod + @ classmethod def _from_line(cls, remote: 'Remote', line: str) -> 'PushInfo': """Create a new PushInfo instance as parsed from line which is expected to be like refs/heads/master:refs/heads/master 05d2687..1d0568e as bytes""" @@ -228,6 +229,11 @@ def _from_line(cls, remote: 'Remote', line: str) -> 'PushInfo': return PushInfo(flags, from_ref, to_ref_string, remote, old_commit, summary) + @ classmethod + def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any + ) -> NoReturn: # -> Iterator['PushInfo']: + raise NotImplementedError + class FetchInfo(IterableObj, object): @@ -262,7 +268,7 @@ class FetchInfo(IterableObj, object): '-': TAG_UPDATE, } # type: Dict[flagKeyLiteral, int] - @classmethod + @ classmethod def refresh(cls) -> Literal[True]: """This gets called by the refresh function (see the top level __init__). @@ -301,25 +307,25 @@ def __init__(self, ref: SymbolicReference, flags: int, note: str = '', def __str__(self) -> str: return self.name - @property + @ property def name(self) -> str: """:return: Name of our remote ref""" return self.ref.name - @property + @ property def commit(self) -> Commit_ish: """:return: Commit of our remote ref""" return self.ref.commit - @classmethod + @ classmethod def _from_line(cls, repo: 'Repo', line: str, fetch_line: str) -> 'FetchInfo': """Parse information from the given line as returned by git-fetch -v and return a new FetchInfo object representing this information. - We can handle a line as follows - "%c %-*s %-*s -> %s%s" + We can handle a line as follows: + "%c %-\\*s %-\\*s -> %s%s" - Where c is either ' ', !, +, -, *, or = + Where c is either ' ', !, +, -, \\*, or = ! means error + means success forcing update - means a tag was updated @@ -334,6 +340,7 @@ def _from_line(cls, repo: 'Repo', line: str, fetch_line: str) -> 'FetchInfo': raise ValueError("Failed to parse line: %r" % line) # parse lines + remote_local_ref_str: str control_character, operation, local_remote_ref, remote_local_ref_str, note = match.groups() assert is_flagKeyLiteral(control_character), f"{control_character}" @@ -375,7 +382,7 @@ def _from_line(cls, repo: 'Repo', line: str, fetch_line: str) -> 'FetchInfo': # If we do not specify a target branch like master:refs/remotes/origin/master, # the fetch result is stored in FETCH_HEAD which destroys the rule we usually # have. In that case we use a symbolic reference which is detached - ref_type = None + ref_type: Optional[Type[SymbolicReference]] = None if remote_local_ref_str == "FETCH_HEAD": ref_type = SymbolicReference elif ref_type_name == "tag" or is_tag_operation: @@ -404,14 +411,15 @@ def _from_line(cls, repo: 'Repo', line: str, fetch_line: str) -> 'FetchInfo': # by the 'ref/' prefix. Otherwise even a tag could be in refs/remotes, which is when it will have the # 'tags/' subdirectory in its path. # We don't want to test for actual existence, but try to figure everything out analytically. - ref_path = None # type: Optional[PathLike] + ref_path: Optional[PathLike] = None remote_local_ref_str = remote_local_ref_str.strip() + if remote_local_ref_str.startswith(Reference._common_path_default + "/"): # always use actual type if we get absolute paths # Will always be the case if something is fetched outside of refs/remotes (if its not a tag) ref_path = remote_local_ref_str if ref_type is not TagReference and not \ - remote_local_ref_str.startswith(RemoteReference._common_path_default + "/"): + remote_local_ref_str.startswith(RemoteReference._common_path_default + "/"): ref_type = Reference # END downgrade remote reference elif ref_type is TagReference and 'tags/' in remote_local_ref_str: @@ -430,6 +438,11 @@ def _from_line(cls, repo: 'Repo', line: str, fetch_line: str) -> 'FetchInfo': return cls(remote_local_ref, flags, note, old_commit, local_remote_ref) + @ classmethod + def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any + ) -> NoReturn: # -> Iterator['FetchInfo']: + raise NotImplementedError + class Remote(LazyMixin, IterableObj): @@ -507,7 +520,7 @@ def exists(self) -> bool: return False # end - @classmethod + @ classmethod def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> Iterator['Remote']: """:return: Iterator yielding Remote objects of the given repository""" for section in repo.config_reader("repository").sections(): @@ -897,7 +910,7 @@ def push(self, refspec: Union[str, List[str], None] = None, universal_newlines=True, **kwargs) return self._get_push_info(proc, progress) - @property + @ property def config_reader(self) -> SectionConstraint: """ :return: @@ -912,7 +925,7 @@ def _clear_cache(self) -> None: pass # END handle exception - @property + @ property def config_writer(self) -> SectionConstraint: """ :return: GitConfigParser compatible object able to write options for this remote. diff --git a/git/util.py b/git/util.py index 571e261e1..c04e29276 100644 --- a/git/util.py +++ b/git/util.py @@ -4,6 +4,7 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php +from abc import abstractmethod from .exc import InvalidGitRepositoryError import os.path as osp from .compat import is_win @@ -28,7 +29,8 @@ # typing --------------------------------------------------------- from typing import (Any, AnyStr, BinaryIO, Callable, Dict, Generator, IO, Iterator, List, - Optional, Pattern, Sequence, Tuple, TypeVar, Union, cast, TYPE_CHECKING, overload) + Optional, Pattern, Sequence, Tuple, TypeVar, Union, cast, + TYPE_CHECKING, overload, ) import pathlib @@ -39,8 +41,8 @@ # from git.objects.base import IndexObject -from .types import (Literal, SupportsIndex, # because behind py version guards - PathLike, HSH_TD, Total_TD, Files_TD, # aliases +from .types import (Literal, SupportsIndex, Protocol, runtime_checkable, # because behind py version guards + PathLike, HSH_TD, Total_TD, Files_TD, # aliases Has_id_attribute) T_IterableObj = TypeVar('T_IterableObj', bound=Union['IterableObj', 'Has_id_attribute'], covariant=True) @@ -471,7 +473,7 @@ def _parse_progress_line(self, line: AnyStr) -> None: - Lines that do not contain progress info are stored in :attr:`other_lines`. - Lines that seem to contain an error (i.e. start with error: or fatal:) are stored - in :attr:`error_lines`.""" + in :attr:`error_lines`.""" # handle # Counting objects: 4, done. # Compressing objects: 50% (1/2) @@ -993,7 +995,7 @@ def __getattr__(self, attr: str) -> T_IterableObj: # END for each item return list.__getattribute__(self, attr) - def __getitem__(self, index: Union[SupportsIndex, int, slice, str]) -> 'T_IterableObj': # type: ignore + def __getitem__(self, index: Union[SupportsIndex, int, slice, str]) -> T_IterableObj: # type: ignore assert isinstance(index, (int, str, slice)), "Index of IterableList should be an int or str" @@ -1030,23 +1032,24 @@ def __delitem__(self, index: Union[SupportsIndex, int, slice, str]) -> None: class IterableClassWatcher(type): + """ Metaclass that watches """ def __init__(cls, name, bases, clsdict): for base in bases: if type(base) == IterableClassWatcher: warnings.warn(f"GitPython Iterable subclassed by {name}. " - "Iterable is deprecated due to naming clash, " + "Iterable is deprecated due to naming clash since v3.1.18" + " and will be removed in 3.1.20, " "Use IterableObj instead \n", DeprecationWarning, stacklevel=2) -class Iterable(object): +class Iterable(metaclass=IterableClassWatcher): """Defines an interface for iterable items which is to assure a uniform way to retrieve and iterate items within the git repository""" __slots__ = () _id_attribute_ = "attribute that most suitably identifies your instance" - __metaclass__ = IterableClassWatcher @classmethod def list_items(cls, repo, *args, **kwargs): @@ -1064,14 +1067,15 @@ def list_items(cls, repo, *args, **kwargs): return out_list @classmethod - def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any): + def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> Any: # return typed to be compatible with subtypes e.g. Remote """For more information about the arguments, see list_items :return: iterator yielding Items""" raise NotImplementedError("To be implemented by Subclass") -class IterableObj(): +@runtime_checkable +class IterableObj(Protocol): """Defines an interface for iterable items which is to assure a uniform way to retrieve and iterate items within the git repository @@ -1095,11 +1099,12 @@ def list_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> IterableList[T_I return out_list @classmethod + @abstractmethod def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any - ) -> Iterator[T_IterableObj]: + ) -> Iterator[T_IterableObj]: # Iterator[T_IterableObj]: # return typed to be compatible with subtypes e.g. Remote """For more information about the arguments, see list_items - :return: iterator yielding Items""" + :return: iterator yielding Items""" raise NotImplementedError("To be implemented by Subclass") # } END classes From 44f0578f841c48bba6473e0890b8a3daae94c58e Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 16:55:23 +0100 Subject: [PATCH 0652/2375] Make types in refs compatible with repo --- git/repo/base.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index 3214b528e..29d085024 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -426,7 +426,7 @@ def create_head(self, path: PathLike, commit: str = 'HEAD', For more documentation, please see the Head.create method. :return: newly created Head Reference""" - return Head.create(self, path, commit, force, logmsg) + return Head.create(self, path, commit, logmsg, force) def delete_head(self, *heads: 'SymbolicReference', **kwargs: Any) -> None: """Delete the given heads @@ -518,7 +518,7 @@ def config_writer(self, config_level: Lit_config_levels = "repository") -> GitCo repository = configuration file for this repository only""" return GitConfigParser(self._get_config_path(config_level), read_only=False, repo=self) - def commit(self, rev: Optional[str] = None + def commit(self, rev: Union[str, Commit_ish, None] = None ) -> Commit: """The Commit object for the specified revision @@ -551,7 +551,8 @@ def tree(self, rev: Union[Tree_ish, str, None] = None) -> 'Tree': return self.head.commit.tree return self.rev_parse(str(rev) + "^{tree}") - def iter_commits(self, rev: Optional[TBD] = None, paths: Union[PathLike, Sequence[PathLike]] = '', + def iter_commits(self, rev: Union[str, Commit, 'SymbolicReference', None] = None, + paths: Union[PathLike, Sequence[PathLike]] = '', **kwargs: Any) -> Iterator[Commit]: """A list of Commit objects representing the history of a given ref/commit From 29e12e9ceee59a87984c9049ac84e030a4dd0ed2 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 16:56:38 +0100 Subject: [PATCH 0653/2375] Make traversable and serilizable into protocols --- git/objects/util.py | 78 +++++++++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 24 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index fbe3d9def..04af3b833 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -5,6 +5,8 @@ # the BSD License: http://www.opensource.org/licenses/bsd-license.php """Module for general utility functions""" +from abc import abstractmethod +import warnings from git.util import ( IterableList, IterableObj, @@ -23,7 +25,7 @@ from typing import (Any, Callable, Deque, Iterator, NamedTuple, overload, Sequence, TYPE_CHECKING, Tuple, Type, TypeVar, Union, cast) -from git.types import Has_id_attribute, Literal +from git.types import Has_id_attribute, Literal, Protocol, runtime_checkable if TYPE_CHECKING: from io import BytesIO, StringIO @@ -289,7 +291,8 @@ def __getattr__(self, attr: str) -> Any: return getattr(self._stream, attr) -class Traversable(object): +@runtime_checkable +class Traversable(Protocol): """Simple interface to perform depth-first or breadth-first traversals into one direction. @@ -301,6 +304,7 @@ class Traversable(object): __slots__ = () @classmethod + @abstractmethod def _get_intermediate_items(cls, item) -> Sequence['Traversable']: """ Returns: @@ -313,7 +317,18 @@ class Tree:: (cls, Tree) -> Tuple[Tree, ...] """ raise NotImplementedError("To be implemented in subclass") - def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']]: + @abstractmethod + def list_traverse(self, *args: Any, **kwargs: Any) -> Any: + """ """ + warnings.warn("list_traverse() method should only be called from subclasses." + "Calling from Traversable abstract class will raise NotImplementedError in 3.1.20" + "Builtin sublclasses are 'Submodule', 'Tree' and 'Commit", + DeprecationWarning, + stacklevel=2) + return self._list_traverse(*args, **kwargs) + + def _list_traverse(self, as_edge=False, *args: Any, **kwargs: Any + ) -> IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']]: """ :return: IterableList with the results of the traversal as produced by traverse() @@ -329,22 +344,34 @@ def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList[Union['Commit id = "" # shouldn't reach here, unless Traversable subclass created with no _id_attribute_ # could add _id_attribute_ to Traversable, or make all Traversable also Iterable? - out: IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']] = IterableList(id) - # overloads in subclasses (mypy does't allow typing self: subclass) - # Union[IterableList['Commit'], IterableList['Submodule'], IterableList[Union['Submodule', 'Tree', 'Blob']]] - - # NOTE: if is_edge=True, self.traverse returns a Tuple, so should be prevented or flattened? - kwargs['as_edge'] = False - out.extend(self.traverse(*args, **kwargs)) # type: ignore - return out - - def traverse(self, - predicate: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: True, - prune: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: False, - depth: int = -1, branch_first: bool = True, visit_once: bool = True, - ignore_self: int = 1, as_edge: bool = False - ) -> Union[Iterator[Union['Traversable', 'Blob']], - Iterator[TraversedTup]]: + if not as_edge: + out: IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']] = IterableList(id) + out.extend(self.traverse(as_edge=as_edge, *args, **kwargs)) # type: ignore + return out + # overloads in subclasses (mypy does't allow typing self: subclass) + # Union[IterableList['Commit'], IterableList['Submodule'], IterableList[Union['Submodule', 'Tree', 'Blob']]] + else: + # Raise deprecationwarning, doesn't make sense to use this + out_list: IterableList = IterableList(self.traverse(*args, **kwargs)) + return out_list + + @ abstractmethod + def traverse(self, *args: Any, **kwargs) -> Any: + """ """ + warnings.warn("traverse() method should only be called from subclasses." + "Calling from Traversable abstract class will raise NotImplementedError in 3.1.20" + "Builtin sublclasses are 'Submodule', 'Tree' and 'Commit", + DeprecationWarning, + stacklevel=2) + return self._traverse(*args, **kwargs) + + def _traverse(self, + predicate: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: True, + prune: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: False, + depth: int = -1, branch_first: bool = True, visit_once: bool = True, + ignore_self: int = 1, as_edge: bool = False + ) -> Union[Iterator[Union['Traversable', 'Blob']], + Iterator[TraversedTup]]: """:return: iterator yielding of items found when traversing self :param predicate: f(i,d) returns False if item i at depth d should not be included in the result @@ -435,11 +462,13 @@ def addToStack(stack: Deque[TraverseNT], # END for each item on work stack -class Serializable(object): +@ runtime_checkable +class Serializable(Protocol): """Defines methods to serialize and deserialize objects from and into a data stream""" __slots__ = () + # @abstractmethod def _serialize(self, stream: 'BytesIO') -> 'Serializable': """Serialize the data of this object into the given data stream :note: a serialized object would ``_deserialize`` into the same object @@ -447,6 +476,7 @@ def _serialize(self, stream: 'BytesIO') -> 'Serializable': :return: self""" raise NotImplementedError("To be implemented in subclass") + # @abstractmethod def _deserialize(self, stream: 'BytesIO') -> 'Serializable': """Deserialize all information regarding this object from the stream :param stream: a file-like object @@ -454,13 +484,13 @@ def _deserialize(self, stream: 'BytesIO') -> 'Serializable': raise NotImplementedError("To be implemented in subclass") -class TraversableIterableObj(Traversable, IterableObj): +class TraversableIterableObj(IterableObj, Traversable): __slots__ = () TIobj_tuple = Tuple[Union[T_TIobj, None], T_TIobj] - def list_traverse(self: T_TIobj, *args: Any, **kwargs: Any) -> IterableList[T_TIobj]: # type: ignore[override] - return super(TraversableIterableObj, self).list_traverse(* args, **kwargs) + def list_traverse(self: T_TIobj, *args: Any, **kwargs: Any) -> IterableList[T_TIobj]: + return super(TraversableIterableObj, self)._list_traverse(* args, **kwargs) @ overload # type: ignore def traverse(self: T_TIobj, @@ -522,6 +552,6 @@ def is_commit_traversed(inp: Tuple) -> TypeGuard[Tuple[Iterator[Tuple['Commit', """ return cast(Union[Iterator[T_TIobj], Iterator[Tuple[Union[None, T_TIobj], T_TIobj]]], - super(TraversableIterableObj, self).traverse( + super(TraversableIterableObj, self)._traverse( predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge # type: ignore )) From 6609ef7c3b5bb840dba8d0a5362e67746761a437 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 16:57:04 +0100 Subject: [PATCH 0654/2375] Make types in refs compatible with objects --- git/objects/base.py | 6 +++--- git/objects/blob.py | 4 +++- git/objects/commit.py | 21 ++++++++++++--------- git/objects/fun.py | 2 +- git/objects/submodule/base.py | 4 ++-- git/objects/tag.py | 4 +++- git/objects/tree.py | 12 ++++++------ 7 files changed, 30 insertions(+), 23 deletions(-) diff --git a/git/objects/base.py b/git/objects/base.py index 4e2ed4938..64f105ca5 100644 --- a/git/objects/base.py +++ b/git/objects/base.py @@ -15,9 +15,9 @@ # typing ------------------------------------------------------------------ -from typing import Any, TYPE_CHECKING, Optional, Union +from typing import Any, TYPE_CHECKING, Union -from git.types import PathLike, Commit_ish +from git.types import PathLike, Commit_ish, Lit_commit_ish if TYPE_CHECKING: from git.repo import Repo @@ -44,7 +44,7 @@ class Object(LazyMixin): TYPES = (dbtyp.str_blob_type, dbtyp.str_tree_type, dbtyp.str_commit_type, dbtyp.str_tag_type) __slots__ = ("repo", "binsha", "size") - type = None # type: Optional[str] # to be set by subclass + type: Union[Lit_commit_ish, None] = None def __init__(self, repo: 'Repo', binsha: bytes): """Initialize an object by identifying it by its binary sha. diff --git a/git/objects/blob.py b/git/objects/blob.py index 017178f05..99b5c636c 100644 --- a/git/objects/blob.py +++ b/git/objects/blob.py @@ -6,6 +6,8 @@ from mimetypes import guess_type from . import base +from git.types import Literal + __all__ = ('Blob', ) @@ -13,7 +15,7 @@ class Blob(base.IndexObject): """A Blob encapsulates a git blob object""" DEFAULT_MIME_TYPE = "text/plain" - type = "blob" + type: Literal['blob'] = "blob" # valid blob modes executable_mode = 0o100755 diff --git a/git/objects/commit.py b/git/objects/commit.py index 65a87591e..11cf52a5e 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -41,10 +41,11 @@ from typing import Any, IO, Iterator, List, Sequence, Tuple, Union, TYPE_CHECKING -from git.types import PathLike, TypeGuard +from git.types import PathLike, TypeGuard, Literal if TYPE_CHECKING: from git.repo import Repo + from git.refs import SymbolicReference # ------------------------------------------------------------------------ @@ -73,14 +74,14 @@ class Commit(base.Object, TraversableIterableObj, Diffable, Serializable): default_encoding = "UTF-8" # object configuration - type = "commit" + type: Literal['commit'] = "commit" __slots__ = ("tree", "author", "authored_date", "author_tz_offset", "committer", "committed_date", "committer_tz_offset", "message", "parents", "encoding", "gpgsig") _id_attribute_ = "hexsha" - def __init__(self, repo: 'Repo', binsha: bytes, tree: Union['Tree', None] = None, + def __init__(self, repo: 'Repo', binsha: bytes, tree: Union[Tree, None] = None, author: Union[Actor, None] = None, authored_date: Union[int, None] = None, author_tz_offset: Union[None, float] = None, @@ -201,11 +202,11 @@ def _set_cache_(self, attr: str) -> None: # END handle attrs @property - def authored_datetime(self) -> 'datetime.datetime': + def authored_datetime(self) -> datetime.datetime: return from_timestamp(self.authored_date, self.author_tz_offset) @property - def committed_datetime(self) -> 'datetime.datetime': + def committed_datetime(self) -> datetime.datetime: return from_timestamp(self.committed_date, self.committer_tz_offset) @property @@ -242,7 +243,7 @@ def name_rev(self) -> str: return self.repo.git.name_rev(self) @classmethod - def iter_items(cls, repo: 'Repo', rev: str, # type: ignore + def iter_items(cls, repo: 'Repo', rev: Union[str, 'Commit', 'SymbolicReference'], # type: ignore paths: Union[PathLike, Sequence[PathLike]] = '', **kwargs: Any ) -> Iterator['Commit']: """Find all commits matching the given criteria. @@ -354,7 +355,7 @@ def is_stream(inp) -> TypeGuard[IO]: finalize_process(proc_or_stream) @ classmethod - def create_from_tree(cls, repo: 'Repo', tree: Union['Tree', str], message: str, + def create_from_tree(cls, repo: 'Repo', tree: Union[Tree, str], message: str, parent_commits: Union[None, List['Commit']] = None, head: bool = False, author: Union[None, Actor] = None, committer: Union[None, Actor] = None, author_date: Union[None, str] = None, commit_date: Union[None, str] = None): @@ -516,8 +517,10 @@ def _serialize(self, stream: BytesIO) -> 'Commit': return self def _deserialize(self, stream: BytesIO) -> 'Commit': - """:param from_rev_list: if true, the stream format is coming from the rev-list command - Otherwise it is assumed to be a plain data stream from our object""" + """ + :param from_rev_list: if true, the stream format is coming from the rev-list command + Otherwise it is assumed to be a plain data stream from our object + """ readline = stream.readline self.tree = Tree(self.repo, hex_to_bin(readline().split()[1]), Tree.tree_id << 12, '') diff --git a/git/objects/fun.py b/git/objects/fun.py index fc2ea1e7e..d6cdafe1e 100644 --- a/git/objects/fun.py +++ b/git/objects/fun.py @@ -167,7 +167,7 @@ def traverse_trees_recursive(odb: 'GitCmdObjectDB', tree_shas: Sequence[Union[by data: List[EntryTupOrNone] = [] else: # make new list for typing as list invariant - data = [x for x in tree_entries_from_data(odb.stream(tree_sha).read())] + data = list(tree_entries_from_data(odb.stream(tree_sha).read())) # END handle muted trees trees_data.append(data) # END for each sha to get data for diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index b485dbf6b..21cfcd5a3 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -52,7 +52,7 @@ from typing import Callable, Dict, Mapping, Sequence, TYPE_CHECKING, cast from typing import Any, Iterator, Union -from git.types import Commit_ish, PathLike, TBD +from git.types import Commit_ish, Literal, PathLike, TBD if TYPE_CHECKING: from git.index import IndexFile @@ -105,7 +105,7 @@ class Submodule(IndexObject, TraversableIterableObj): k_default_mode = stat.S_IFDIR | stat.S_IFLNK # submodules are directories with link-status # this is a bogus type for base class compatibility - type = 'submodule' + type: Literal['submodule'] = 'submodule' # type: ignore __slots__ = ('_parent_commit', '_url', '_branch_path', '_name', '__weakref__') _cache_attrs = ('path', '_url', '_branch_path') diff --git a/git/objects/tag.py b/git/objects/tag.py index cb6efbe9b..4a2fcb0d0 100644 --- a/git/objects/tag.py +++ b/git/objects/tag.py @@ -11,6 +11,8 @@ from typing import List, TYPE_CHECKING, Union +from git.types import Literal + if TYPE_CHECKING: from git.repo import Repo from git.util import Actor @@ -24,7 +26,7 @@ class TagObject(base.Object): """Non-Lightweight tag carrying additional information about an object we are pointing to.""" - type = "tag" + type: Literal['tag'] = "tag" __slots__ = ("object", "tag", "tagger", "tagged_date", "tagger_tz_offset", "message") def __init__(self, repo: 'Repo', binsha: bytes, diff --git a/git/objects/tree.py b/git/objects/tree.py index a9656c1d3..0e3f44b90 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -24,7 +24,7 @@ from typing import (Any, Callable, Dict, Iterable, Iterator, List, Tuple, Type, Union, cast, TYPE_CHECKING) -from git.types import PathLike, TypeGuard +from git.types import PathLike, TypeGuard, Literal if TYPE_CHECKING: from git.repo import Repo @@ -195,7 +195,7 @@ class Tree(IndexObject, git_diff.Diffable, util.Traversable, util.Serializable): blob = tree[0] """ - type = "tree" + type: Literal['tree'] = "tree" __slots__ = "_cache" # actual integer ids for comparison @@ -285,7 +285,7 @@ def trees(self) -> List['Tree']: return [i for i in self if i.type == "tree"] @ property - def blobs(self) -> List['Blob']: + def blobs(self) -> List[Blob]: """:return: list(Blob, ...) list of blobs directly below this tree""" return [i for i in self if i.type == "blob"] @@ -322,8 +322,8 @@ def traverse(self, # type: ignore # overrides super() # assert is_tree_traversed(ret_tup), f"Type is {[type(x) for x in list(ret_tup[0])]}" # return ret_tup[0]""" return cast(Union[Iterator[IndexObjUnion], Iterator[TraversedTreeTup]], - super(Tree, self).traverse(predicate, prune, depth, # type: ignore - branch_first, visit_once, ignore_self)) + super(Tree, self)._traverse(predicate, prune, depth, # type: ignore + branch_first, visit_once, ignore_self)) def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList[IndexObjUnion]: """ @@ -331,7 +331,7 @@ def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList[IndexObjUnion traverse() Tree -> IterableList[Union['Submodule', 'Tree', 'Blob']] """ - return super(Tree, self).list_traverse(* args, **kwargs) + return super(Tree, self)._list_traverse(* args, **kwargs) # List protocol From 454576254b873b7ebc45bb30846e5831dc2d8817 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 16:59:30 +0100 Subject: [PATCH 0655/2375] rmv python 3.5 checks from tests --- test/lib/helper.py | 2 +- test/test_base.py | 12 +++++------- test/test_commit.py | 2 +- test/test_git.py | 7 +------ test/test_refs.py | 4 ++-- test/test_remote.py | 4 ++-- test/test_submodule.py | 3 +-- test/test_tree.py | 5 ++--- 8 files changed, 15 insertions(+), 24 deletions(-) diff --git a/test/lib/helper.py b/test/lib/helper.py index 3412786d1..5dde7b04e 100644 --- a/test/lib/helper.py +++ b/test/lib/helper.py @@ -336,7 +336,7 @@ class TestBase(TestCase): - Class level repository which is considered read-only as it is shared among all test cases in your type. Access it using:: - self.rorepo # 'ro' stands for read-only + self.rorepo # 'ro' stands for read-only The rorepo is in fact your current project's git repo. If you refer to specific shas for your objects, be sure you choose some that are part of the immutable portion diff --git a/test/test_base.py b/test/test_base.py index 02963ce0a..68ce68165 100644 --- a/test/test_base.py +++ b/test/test_base.py @@ -9,7 +9,7 @@ import tempfile from unittest import SkipTest, skipIf -from git import ( +from git.objects import ( Blob, Tree, Commit, @@ -18,17 +18,17 @@ from git.compat import is_win from git.objects.util import get_object_type_by_name from test.lib import ( - TestBase, + TestBase as _TestBase, with_rw_repo, with_rw_and_rw_remote_repo ) -from git.util import hex_to_bin +from git.util import hex_to_bin, HIDE_WINDOWS_FREEZE_ERRORS import git.objects.base as base import os.path as osp -class TestBase(TestBase): +class TestBase(_TestBase): def tearDown(self): import gc @@ -111,15 +111,13 @@ def test_with_rw_repo(self, rw_repo): assert not rw_repo.config_reader("repository").getboolean("core", "bare") assert osp.isdir(osp.join(rw_repo.working_tree_dir, 'lib')) - #@skipIf(HIDE_WINDOWS_FREEZE_ERRORS, "FIXME: Freezes! sometimes...") + @skipIf(HIDE_WINDOWS_FREEZE_ERRORS, "FIXME: Freezes! sometimes...") @with_rw_and_rw_remote_repo('0.1.6') def test_with_rw_remote_and_rw_repo(self, rw_repo, rw_remote_repo): assert not rw_repo.config_reader("repository").getboolean("core", "bare") assert rw_remote_repo.config_reader("repository").getboolean("core", "bare") assert osp.isdir(osp.join(rw_repo.working_tree_dir, 'lib')) - @skipIf(sys.version_info < (3,) and is_win, - "Unicode woes, see https://github.com/gitpython-developers/GitPython/pull/519") @with_rw_repo('0.1.6') def test_add_unicode(self, rw_repo): filename = "שלום.txt" diff --git a/test/test_commit.py b/test/test_commit.py index 34b91ac7b..670068e50 100644 --- a/test/test_commit.py +++ b/test/test_commit.py @@ -265,7 +265,7 @@ def test_rev_list_bisect_all(self): @with_rw_directory def test_ambiguous_arg_iteration(self, rw_dir): rw_repo = Repo.init(osp.join(rw_dir, 'test_ambiguous_arg')) - path = osp.join(rw_repo.working_tree_dir, 'master') + path = osp.join(str(rw_repo.working_tree_dir), 'master') touch(path) rw_repo.index.add([path]) rw_repo.index.commit('initial commit') diff --git a/test/test_git.py b/test/test_git.py index 72c7ef62b..7f52d650f 100644 --- a/test/test_git.py +++ b/test/test_git.py @@ -18,7 +18,6 @@ Repo, cmd ) -from git.compat import is_darwin from test.lib import ( TestBase, fixture_path @@ -248,11 +247,7 @@ def test_environment(self, rw_dir): try: remote.fetch() except GitCommandError as err: - if sys.version_info[0] < 3 and is_darwin: - self.assertIn('ssh-orig', str(err)) - self.assertEqual(err.status, 128) - else: - self.assertIn('FOO', str(err)) + self.assertIn('FOO', str(err)) def test_handle_process_output(self): from git.cmd import handle_process_output diff --git a/test/test_refs.py b/test/test_refs.py index 8ab45d22c..1315f885f 100644 --- a/test/test_refs.py +++ b/test/test_refs.py @@ -119,14 +119,14 @@ def test_heads(self, rwrepo): assert head.tracking_branch() == remote_ref head.set_tracking_branch(None) assert head.tracking_branch() is None - + special_name = 'feature#123' special_name_remote_ref = SymbolicReference.create(rwrepo, 'refs/remotes/origin/%s' % special_name) gp_tracking_branch = rwrepo.create_head('gp_tracking#123') special_name_remote_ref = rwrepo.remotes[0].refs[special_name] # get correct type gp_tracking_branch.set_tracking_branch(special_name_remote_ref) assert gp_tracking_branch.tracking_branch().path == special_name_remote_ref.path - + git_tracking_branch = rwrepo.create_head('git_tracking#123') rwrepo.git.branch('-u', special_name_remote_ref.name, git_tracking_branch.name) assert git_tracking_branch.tracking_branch().name == special_name_remote_ref.name diff --git a/test/test_remote.py b/test/test_remote.py index fb7d23c6c..c29fac65c 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -347,7 +347,7 @@ def _assert_push_and_pull(self, remote, rw_repo, remote_repo): progress = TestRemoteProgress() to_be_updated = "my_tag.1.0RV" new_tag = TagReference.create(rw_repo, to_be_updated) # @UnusedVariable - other_tag = TagReference.create(rw_repo, "my_obj_tag.2.1aRV", message="my message") + other_tag = TagReference.create(rw_repo, "my_obj_tag.2.1aRV", logmsg="my message") res = remote.push(progress=progress, tags=True) self.assertTrue(res[-1].flags & PushInfo.NEW_TAG) progress.make_assertion() @@ -355,7 +355,7 @@ def _assert_push_and_pull(self, remote, rw_repo, remote_repo): # update push new tags # Rejection is default - new_tag = TagReference.create(rw_repo, to_be_updated, ref='HEAD~1', force=True) + new_tag = TagReference.create(rw_repo, to_be_updated, reference='HEAD~1', force=True) res = remote.push(tags=True) self._do_test_push_result(res, remote) self.assertTrue(res[-1].flags & PushInfo.REJECTED) diff --git a/test/test_submodule.py b/test/test_submodule.py index 85191a896..3307bc788 100644 --- a/test/test_submodule.py +++ b/test/test_submodule.py @@ -3,7 +3,6 @@ # the BSD License: http://www.opensource.org/licenses/bsd-license.php import os import shutil -import sys from unittest import skipIf import git @@ -421,7 +420,7 @@ def test_base_rw(self, rwrepo): def test_base_bare(self, rwrepo): self._do_base_tests(rwrepo) - @skipIf(HIDE_WINDOWS_KNOWN_ERRORS and sys.version_info[:2] == (3, 5), """ + @skipIf(HIDE_WINDOWS_KNOWN_ERRORS, """ File "C:\\projects\\gitpython\\git\\cmd.py", line 559, in execute raise GitCommandNotFound(command, err) git.exc.GitCommandNotFound: Cmd('git') not found due to: OSError('[WinError 6] The handle is invalid') diff --git a/test/test_tree.py b/test/test_tree.py index 0607d8e3c..24c401cb6 100644 --- a/test/test_tree.py +++ b/test/test_tree.py @@ -5,7 +5,6 @@ # the BSD License: http://www.opensource.org/licenses/bsd-license.php from io import BytesIO -import sys from unittest import skipIf from git.objects import ( @@ -20,7 +19,7 @@ class TestTree(TestBase): - @skipIf(HIDE_WINDOWS_KNOWN_ERRORS and sys.version_info[:2] == (3, 5), """ + @skipIf(HIDE_WINDOWS_KNOWN_ERRORS, """ File "C:\\projects\\gitpython\\git\\cmd.py", line 559, in execute raise GitCommandNotFound(command, err) git.exc.GitCommandNotFound: Cmd('git') not found due to: OSError('[WinError 6] The handle is invalid') @@ -53,7 +52,7 @@ def test_serializable(self): testtree._deserialize(stream) # END for each item in tree - @skipIf(HIDE_WINDOWS_KNOWN_ERRORS and sys.version_info[:2] == (3, 5), """ + @skipIf(HIDE_WINDOWS_KNOWN_ERRORS, """ File "C:\\projects\\gitpython\\git\\cmd.py", line 559, in execute raise GitCommandNotFound(command, err) git.exc.GitCommandNotFound: Cmd('git') not found due to: OSError('[WinError 6] The handle is invalid') From 795d2b1f75c6c210ebabd81f33c0c9ac8b57729e Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 17:03:50 +0100 Subject: [PATCH 0656/2375] rmv redundant IOerror except --- git/refs/symbolic.py | 658 ------------------------------------------- setup.py | 4 +- 2 files changed, 2 insertions(+), 660 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 48b94cfa6..426d40d44 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -693,661 +693,3 @@ def from_path(cls, repo, path): def is_remote(self): """:return: True if this symbolic reference points to a remote branch""" return self.path.startswith(self._remote_common_path_default + "/") - - -__all__ = ["SymbolicReference"] - - -def _git_dir(repo, path): - """ Find the git dir that's appropriate for the path""" - name = "%s" % (path,) - if name in ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'index', 'logs']: - return repo.git_dir - return repo.common_dir - - -class SymbolicReference(object): - - """Represents a special case of a reference such that this reference is symbolic. - It does not point to a specific commit, but to another Head, which itself - specifies a commit. - - A typical example for a symbolic reference is HEAD.""" - __slots__ = ("repo", "path") - _resolve_ref_on_create = False - _points_to_commits_only = True - _common_path_default = "" - _remote_common_path_default = "refs/remotes" - _id_attribute_ = "name" - - def __init__(self, repo, path, check_path=None): - self.repo = repo - self.path = path - - def __str__(self): - return self.path - - def __repr__(self): - return '' % (self.__class__.__name__, self.path) - - def __eq__(self, other): - if hasattr(other, 'path'): - return self.path == other.path - return False - - def __ne__(self, other): - return not (self == other) - - def __hash__(self): - return hash(self.path) - - @property - def name(self): - """ - :return: - In case of symbolic references, the shortest assumable name - is the path itself.""" - return self.path - - @property - def abspath(self): - return join_path_native(_git_dir(self.repo, self.path), self.path) - - @classmethod - def _get_packed_refs_path(cls, repo): - return osp.join(repo.common_dir, 'packed-refs') - - @classmethod - def _iter_packed_refs(cls, repo): - """Returns an iterator yielding pairs of sha1/path pairs (as bytes) for the corresponding refs. - :note: The packed refs file will be kept open as long as we iterate""" - try: - with open(cls._get_packed_refs_path(repo), 'rt', encoding='UTF-8') as fp: - for line in fp: - line = line.strip() - if not line: - continue - if line.startswith('#'): - # "# pack-refs with: peeled fully-peeled sorted" - # the git source code shows "peeled", - # "fully-peeled" and "sorted" as the keywords - # that can go on this line, as per comments in git file - # refs/packed-backend.c - # I looked at master on 2017-10-11, - # commit 111ef79afe, after tag v2.15.0-rc1 - # from repo https://github.com/git/git.git - if line.startswith('# pack-refs with:') and 'peeled' not in line: - raise TypeError("PackingType of packed-Refs not understood: %r" % line) - # END abort if we do not understand the packing scheme - continue - # END parse comment - - # skip dereferenced tag object entries - previous line was actual - # tag reference for it - if line[0] == '^': - continue - - yield tuple(line.split(' ', 1)) - # END for each line - except (OSError, IOError): - return - # END no packed-refs file handling - # NOTE: Had try-finally block around here to close the fp, - # but some python version wouldn't allow yields within that. - # I believe files are closing themselves on destruction, so it is - # alright. - - @classmethod - def dereference_recursive(cls, repo, ref_path): - """ - :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all - intermediate references as required - :param repo: the repository containing the reference at ref_path""" - while True: - hexsha, ref_path = cls._get_ref_info(repo, ref_path) - if hexsha is not None: - return hexsha - # END recursive dereferencing - - @classmethod - def _get_ref_info_helper(cls, repo, ref_path): - """Return: (str(sha), str(target_ref_path)) if available, the sha the file at - rela_path points to, or None. target_ref_path is the reference we - point to, or None""" - tokens = None - repodir = _git_dir(repo, ref_path) - try: - with open(osp.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: - value = fp.read().rstrip() - # Don't only split on spaces, but on whitespace, which allows to parse lines like - # 60b64ef992065e2600bfef6187a97f92398a9144 branch 'master' of git-server:/path/to/repo - tokens = value.split() - assert(len(tokens) != 0) - except (OSError, IOError): - # Probably we are just packed, find our entry in the packed refs file - # NOTE: We are not a symbolic ref if we are in a packed file, as these - # are excluded explicitly - for sha, path in cls._iter_packed_refs(repo): - if path != ref_path: - continue - # sha will be used - tokens = sha, path - break - # END for each packed ref - # END handle packed refs - if tokens is None: - raise ValueError("Reference at %r does not exist" % ref_path) - - # is it a reference ? - if tokens[0] == 'ref:': - return (None, tokens[1]) - - # its a commit - if repo.re_hexsha_only.match(tokens[0]): - return (tokens[0], None) - - raise ValueError("Failed to parse reference information from %r" % ref_path) - - @classmethod - def _get_ref_info(cls, repo, ref_path): - """Return: (str(sha), str(target_ref_path)) if available, the sha the file at - rela_path points to, or None. target_ref_path is the reference we - point to, or None""" - return cls._get_ref_info_helper(repo, ref_path) - - def _get_object(self): - """ - :return: - The object our ref currently refers to. Refs can be cached, they will - always point to the actual object as it gets re-created on each query""" - # have to be dynamic here as we may be a tag which can point to anything - # Our path will be resolved to the hexsha which will be used accordingly - return Object.new_from_sha(self.repo, hex_to_bin(self.dereference_recursive(self.repo, self.path))) - - def _get_commit(self): - """ - :return: - Commit object we point to, works for detached and non-detached - SymbolicReferences. The symbolic reference will be dereferenced recursively.""" - obj = self._get_object() - if obj.type == 'tag': - obj = obj.object - # END dereference tag - - if obj.type != Commit.type: - raise TypeError("Symbolic Reference pointed to object %r, commit was required" % obj) - # END handle type - return obj - - def set_commit(self, commit, logmsg=None): - """As set_object, but restricts the type of object to be a Commit - - :raise ValueError: If commit is not a Commit object or doesn't point to - a commit - :return: self""" - # check the type - assume the best if it is a base-string - invalid_type = False - if isinstance(commit, Object): - invalid_type = commit.type != Commit.type - elif isinstance(commit, SymbolicReference): - invalid_type = commit.object.type != Commit.type - else: - try: - invalid_type = self.repo.rev_parse(commit).type != Commit.type - except (BadObject, BadName) as e: - raise ValueError("Invalid object: %s" % commit) from e - # END handle exception - # END verify type - - if invalid_type: - raise ValueError("Need commit, got %r" % commit) - # END handle raise - - # we leave strings to the rev-parse method below - self.set_object(commit, logmsg) - - return self - - def set_object(self, object, logmsg=None): # @ReservedAssignment - """Set the object we point to, possibly dereference our symbolic reference first. - If the reference does not exist, it will be created - - :param object: a refspec, a SymbolicReference or an Object instance. SymbolicReferences - will be dereferenced beforehand to obtain the object they point to - :param logmsg: If not None, the message will be used in the reflog entry to be - written. Otherwise the reflog is not altered - :note: plain SymbolicReferences may not actually point to objects by convention - :return: self""" - if isinstance(object, SymbolicReference): - object = object.object # @ReservedAssignment - # END resolve references - - is_detached = True - try: - is_detached = self.is_detached - except ValueError: - pass - # END handle non-existing ones - - if is_detached: - return self.set_reference(object, logmsg) - - # set the commit on our reference - return self._get_reference().set_object(object, logmsg) - - commit = property(_get_commit, set_commit, doc="Query or set commits directly") - object = property(_get_object, set_object, doc="Return the object our ref currently refers to") - - def _get_reference(self): - """:return: Reference Object we point to - :raise TypeError: If this symbolic reference is detached, hence it doesn't point - to a reference, but to a commit""" - sha, target_ref_path = self._get_ref_info(self.repo, self.path) - if target_ref_path is None: - raise TypeError("%s is a detached symbolic reference as it points to %r" % (self, sha)) - return self.from_path(self.repo, target_ref_path) - - def set_reference(self, ref, logmsg=None): - """Set ourselves to the given ref. It will stay a symbol if the ref is a Reference. - Otherwise an Object, given as Object instance or refspec, is assumed and if valid, - will be set which effectively detaches the refererence if it was a purely - symbolic one. - - :param ref: SymbolicReference instance, Object instance or refspec string - Only if the ref is a SymbolicRef instance, we will point to it. Everything - else is dereferenced to obtain the actual object. - :param logmsg: If set to a string, the message will be used in the reflog. - Otherwise, a reflog entry is not written for the changed reference. - The previous commit of the entry will be the commit we point to now. - - See also: log_append() - - :return: self - :note: This symbolic reference will not be dereferenced. For that, see - ``set_object(...)``""" - write_value = None - obj = None - if isinstance(ref, SymbolicReference): - write_value = "ref: %s" % ref.path - elif isinstance(ref, Object): - obj = ref - write_value = ref.hexsha - elif isinstance(ref, str): - try: - obj = self.repo.rev_parse(ref + "^{}") # optionally deref tags - write_value = obj.hexsha - except (BadObject, BadName) as e: - raise ValueError("Could not extract object from %s" % ref) from e - # END end try string - else: - raise ValueError("Unrecognized Value: %r" % ref) - # END try commit attribute - - # typecheck - if obj is not None and self._points_to_commits_only and obj.type != Commit.type: - raise TypeError("Require commit, got %r" % obj) - # END verify type - - oldbinsha = None - if logmsg is not None: - try: - oldbinsha = self.commit.binsha - except ValueError: - oldbinsha = Commit.NULL_BIN_SHA - # END handle non-existing - # END retrieve old hexsha - - fpath = self.abspath - assure_directory_exists(fpath, is_file=True) - - lfd = LockedFD(fpath) - fd = lfd.open(write=True, stream=True) - ok = True - try: - fd.write(write_value.encode('ascii') + b'\n') - lfd.commit() - ok = True - finally: - if not ok: - lfd.rollback() - # Adjust the reflog - if logmsg is not None: - self.log_append(oldbinsha, logmsg) - - return self - - # aliased reference - reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") - ref = reference - - def is_valid(self): - """ - :return: - True if the reference is valid, hence it can be read and points to - a valid object or reference.""" - try: - self.object - except (OSError, ValueError): - return False - else: - return True - - @property - def is_detached(self): - """ - :return: - True if we are a detached reference, hence we point to a specific commit - instead to another reference""" - try: - self.ref - return False - except TypeError: - return True - - def log(self): - """ - :return: RefLog for this reference. Its last entry reflects the latest change - applied to this reference - - .. note:: As the log is parsed every time, its recommended to cache it for use - instead of calling this method repeatedly. It should be considered read-only.""" - return RefLog.from_file(RefLog.path(self)) - - def log_append(self, oldbinsha, message, newbinsha=None): - """Append a logentry to the logfile of this ref - - :param oldbinsha: binary sha this ref used to point to - :param message: A message describing the change - :param newbinsha: The sha the ref points to now. If None, our current commit sha - will be used - :return: added RefLogEntry instance""" - # NOTE: we use the committer of the currently active commit - this should be - # correct to allow overriding the committer on a per-commit level. - # See https://github.com/gitpython-developers/GitPython/pull/146 - try: - committer_or_reader = self.commit.committer - except ValueError: - committer_or_reader = self.repo.config_reader() - # end handle newly cloned repositories - return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, - (newbinsha is None and self.commit.binsha) or newbinsha, - message) - - def log_entry(self, index): - """:return: RefLogEntry at the given index - :param index: python list compatible positive or negative index - - .. note:: This method must read part of the reflog during execution, hence - it should be used sparringly, or only if you need just one index. - In that case, it will be faster than the ``log()`` method""" - return RefLog.entry_at(RefLog.path(self), index) - - @classmethod - def to_full_path(cls, path) -> PathLike: - """ - :return: string with a full repository-relative path which can be used to initialize - a Reference instance, for instance by using ``Reference.from_path``""" - if isinstance(path, SymbolicReference): - path = path.path - full_ref_path = path - if not cls._common_path_default: - return full_ref_path - if not path.startswith(cls._common_path_default + "/"): - full_ref_path = '%s/%s' % (cls._common_path_default, path) - return full_ref_path - - @classmethod - def delete(cls, repo, path): - """Delete the reference at the given path - - :param repo: - Repository to delete the reference from - - :param path: - Short or full path pointing to the reference, i.e. refs/myreference - or just "myreference", hence 'refs/' is implied. - Alternatively the symbolic reference to be deleted""" - full_ref_path = cls.to_full_path(path) - abs_path = osp.join(repo.common_dir, full_ref_path) - if osp.exists(abs_path): - os.remove(abs_path) - else: - # check packed refs - pack_file_path = cls._get_packed_refs_path(repo) - try: - with open(pack_file_path, 'rb') as reader: - new_lines = [] - made_change = False - dropped_last_line = False - for line in reader: - line = line.decode(defenc) - _, _, line_ref = line.partition(' ') - line_ref = line_ref.strip() - # keep line if it is a comment or if the ref to delete is not - # in the line - # If we deleted the last line and this one is a tag-reference object, - # we drop it as well - if (line.startswith('#') or full_ref_path != line_ref) and \ - (not dropped_last_line or dropped_last_line and not line.startswith('^')): - new_lines.append(line) - dropped_last_line = False - continue - # END skip comments and lines without our path - - # drop this line - made_change = True - dropped_last_line = True - - # write the new lines - if made_change: - # write-binary is required, otherwise windows will - # open the file in text mode and change LF to CRLF ! - with open(pack_file_path, 'wb') as fd: - fd.writelines(line.encode(defenc) for line in new_lines) - - except (OSError, IOError): - pass # it didn't exist at all - - # delete the reflog - reflog_path = RefLog.path(cls(repo, full_ref_path)) - if osp.isfile(reflog_path): - os.remove(reflog_path) - # END remove reflog - - @classmethod - def _create(cls, repo, path, resolve, reference, force, logmsg=None): - """internal method used to create a new symbolic reference. - If resolve is False, the reference will be taken as is, creating - a proper symbolic reference. Otherwise it will be resolved to the - corresponding object and a detached symbolic reference will be created - instead""" - git_dir = _git_dir(repo, path) - full_ref_path = cls.to_full_path(path) - abs_ref_path = osp.join(git_dir, full_ref_path) - - # figure out target data - target = reference - if resolve: - target = repo.rev_parse(str(reference)) - - if not force and osp.isfile(abs_ref_path): - target_data = str(target) - if isinstance(target, SymbolicReference): - target_data = target.path - if not resolve: - target_data = "ref: " + target_data - with open(abs_ref_path, 'rb') as fd: - existing_data = fd.read().decode(defenc).strip() - if existing_data != target_data: - raise OSError("Reference at %r does already exist, pointing to %r, requested was %r" % - (full_ref_path, existing_data, target_data)) - # END no force handling - - ref = cls(repo, full_ref_path) - ref.set_reference(target, logmsg) - return ref - - @classmethod - def create(cls, repo, path, reference='HEAD', force=False, logmsg=None, **kwargs): - """Create a new symbolic reference, hence a reference pointing to another reference. - - :param repo: - Repository to create the reference in - - :param path: - full path at which the new symbolic reference is supposed to be - created at, i.e. "NEW_HEAD" or "symrefs/my_new_symref" - - :param reference: - The reference to which the new symbolic reference should point to. - If it is a commit'ish, the symbolic ref will be detached. - - :param force: - if True, force creation even if a symbolic reference with that name already exists. - Raise OSError otherwise - - :param logmsg: - If not None, the message to append to the reflog. Otherwise no reflog - entry is written. - - :return: Newly created symbolic Reference - - :raise OSError: - If a (Symbolic)Reference with the same name but different contents - already exists. - - :note: This does not alter the current HEAD, index or Working Tree""" - return cls._create(repo, path, cls._resolve_ref_on_create, reference, force, logmsg) - - def rename(self, new_path, force=False): - """Rename self to a new path - - :param new_path: - Either a simple name or a full path, i.e. new_name or features/new_name. - The prefix refs/ is implied for references and will be set as needed. - In case this is a symbolic ref, there is no implied prefix - - :param force: - If True, the rename will succeed even if a head with the target name - already exists. It will be overwritten in that case - - :return: self - :raise OSError: In case a file at path but a different contents already exists """ - new_path = self.to_full_path(new_path) - if self.path == new_path: - return self - - new_abs_path = osp.join(_git_dir(self.repo, new_path), new_path) - cur_abs_path = osp.join(_git_dir(self.repo, self.path), self.path) - if osp.isfile(new_abs_path): - if not force: - # if they point to the same file, its not an error - with open(new_abs_path, 'rb') as fd1: - f1 = fd1.read().strip() - with open(cur_abs_path, 'rb') as fd2: - f2 = fd2.read().strip() - if f1 != f2: - raise OSError("File at path %r already exists" % new_abs_path) - # else: we could remove ourselves and use the otherone, but - # but clarity we just continue as usual - # END not force handling - os.remove(new_abs_path) - # END handle existing target file - - dname = osp.dirname(new_abs_path) - if not osp.isdir(dname): - os.makedirs(dname) - # END create directory - - os.rename(cur_abs_path, new_abs_path) - self.path = new_path - - return self - - @classmethod - def _iter_items(cls, repo, common_path=None): - if common_path is None: - common_path = cls._common_path_default - rela_paths = set() - - # walk loose refs - # Currently we do not follow links - for root, dirs, files in os.walk(join_path_native(repo.common_dir, common_path)): - if 'refs' not in root.split(os.sep): # skip non-refs subfolders - refs_id = [d for d in dirs if d == 'refs'] - if refs_id: - dirs[0:] = ['refs'] - # END prune non-refs folders - - for f in files: - if f == 'packed-refs': - continue - abs_path = to_native_path_linux(join_path(root, f)) - rela_paths.add(abs_path.replace(to_native_path_linux(repo.common_dir) + '/', "")) - # END for each file in root directory - # END for each directory to walk - - # read packed refs - for _sha, rela_path in cls._iter_packed_refs(repo): - if rela_path.startswith(common_path): - rela_paths.add(rela_path) - # END relative path matches common path - # END packed refs reading - - # return paths in sorted order - for path in sorted(rela_paths): - try: - yield cls.from_path(repo, path) - except ValueError: - continue - # END for each sorted relative refpath - - @classmethod - def iter_items(cls, repo, common_path=None): - """Find all refs in the repository - - :param repo: is the Repo - - :param common_path: - Optional keyword argument to the path which is to be shared by all - returned Ref objects. - Defaults to class specific portion if None assuring that only - refs suitable for the actual class are returned. - - :return: - git.SymbolicReference[], each of them is guaranteed to be a symbolic - ref which is not detached and pointing to a valid ref - - List is lexicographically sorted - The returned objects represent actual subclasses, such as Head or TagReference""" - return (r for r in cls._iter_items(repo, common_path) if r.__class__ == SymbolicReference or not r.is_detached) - - @classmethod - def from_path(cls, repo, path): - """ - :param path: full .git-directory-relative path name to the Reference to instantiate - :note: use to_full_path() if you only have a partial path of a known Reference Type - :return: - Instance of type Reference, Head, or Tag - depending on the given path""" - if not path: - raise ValueError("Cannot create Reference from %r" % path) - - # Names like HEAD are inserted after the refs module is imported - we have an import dependency - # cycle and don't want to import these names in-function - from . import HEAD, Head, RemoteReference, TagReference, Reference - for ref_type in (HEAD, Head, RemoteReference, TagReference, Reference, SymbolicReference): - try: - instance = ref_type(repo, path) - if instance.__class__ == SymbolicReference and instance.is_detached: - raise ValueError("SymbolRef was detached, we drop it") - return instance - except ValueError: - pass - # END exception handling - # END for each type to try - raise ValueError("Could not find reference type suitable to handle path %r" % path) - - def is_remote(self): - """:return: True if this symbolic reference points to a remote branch""" - return self.path.startswith(self._remote_common_path_default + "/") diff --git a/setup.py b/setup.py index e01562e8c..e8da06dc1 100755 --- a/setup.py +++ b/setup.py @@ -56,7 +56,7 @@ def _stamp_version(filename): line = line.replace("'git'", "'%s'" % VERSION) found = True out.append(line) - except (IOError, OSError): + except OSError: print("Couldn't find file %s to stamp version" % filename, file=sys.stderr) if found: @@ -66,7 +66,7 @@ def _stamp_version(filename): print("WARNING: Couldn't find version line in file %s" % filename, file=sys.stderr) -def build_py_modules(basedir, excludes=[]): +def build_py_modules(basedir, excludes=()): # create list of py_modules from tree res = set() _prefix = os.path.basename(basedir) From 9a587e14d509cc77bf47b9591d1def3e5a1df570 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 17:08:05 +0100 Subject: [PATCH 0657/2375] Add flake8-bugbear and -comprehensions to test-requirements.txt --- requirements-dev.txt | 3 --- test-requirements.txt | 9 ++++++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 0ece0a659..e6d19427e 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -3,8 +3,6 @@ # libraries for additional local testing/linting - to be added to test-requirements.txt when all pass -flake8-bugbear -flake8-comprehensions flake8-type-checking;python_version>="3.8" # checks for TYPE_CHECKING only imports # flake8-annotations # checks for presence of type annotations # flake8-rst-docstrings # checks docstrings are valid RST @@ -12,6 +10,5 @@ flake8-type-checking;python_version>="3.8" # checks for TYPE_CHECKING only # flake8-pytest-style # pytest-flake8 -pytest-sugar pytest-icdiff # pytest-profiling diff --git a/test-requirements.txt b/test-requirements.txt index 7397c3732..eeee18110 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,9 +1,12 @@ ddt>=1.1.1 mypy + flake8 +flake8-bugbear +flake8-comprehensions + virtualenv + pytest pytest-cov -pytest-sugar -gitdb>=4.0.1,<5 -typing-extensions>=3.7.4.3;python_version<"3.10" +pytest-sugar \ No newline at end of file From f0bc672b6056778e358c8f5844b093d2742d00ab Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 17:11:57 +0100 Subject: [PATCH 0658/2375] Update README.md tidy up testing section --- README.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ad7aae516..2cd68d69d 100644 --- a/README.md +++ b/README.md @@ -106,19 +106,20 @@ On *Windows*, make sure you have `git-daemon` in your PATH. For MINGW-git, the exists in `Git\mingw64\libexec\git-core\`; CYGWIN has no daemon, but should get along fine with MINGW's. -Ensure testing libraries are installed. In the root directory, run: `pip install test-requirements.txt` -Then, +Ensure testing libraries are installed. +In the root directory, run: `pip install -r test-requirements.txt` -To lint, run `flake8` -To typecheck, run `mypy -p git` -To test, `pytest` +To lint, run: `flake8` -Configuration for flake8 is in root/.flake8 file. -Configuration for mypy, pytest, coverage is in root/pyproject.toml. +To typecheck, run: `mypy -p git` -The same linting and testing will also be performed against different supported python versions -upon submitting a pull request (or on each push if you have a fork with a "main" branch). +To test, run: `pytest` + +Configuration for flake8 is in the root/.flake8 file. +Configurations for mypy, pytest and coverage.py are in root/pyproject.toml. +The same linting and testing will also be performed against different supported python versions +upon submitting a pull request (or on each push if you have a fork with a "main" branch and actions enabled). ### Contributions From 23066f6fe414ec809434727485136b7cd84aa5b8 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 19 Jul 2021 17:16:43 +0100 Subject: [PATCH 0659/2375] Update README.md Add paragraph space --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2cd68d69d..5087dbccb 100644 --- a/README.md +++ b/README.md @@ -115,8 +115,9 @@ To typecheck, run: `mypy -p git` To test, run: `pytest` -Configuration for flake8 is in the root/.flake8 file. -Configurations for mypy, pytest and coverage.py are in root/pyproject.toml. +Configuration for flake8 is in the ./.flake8 file. + +Configurations for mypy, pytest and coverage.py are in ./pyproject.toml. The same linting and testing will also be performed against different supported python versions upon submitting a pull request (or on each push if you have a fork with a "main" branch and actions enabled). From 9e5e969479ec6018e1ba06b95bcdefca5b0082a4 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 19:10:45 +0100 Subject: [PATCH 0660/2375] Change remaining type comments to py3.6+ types --- .flake8 | 2 +- git/cmd.py | 16 ++++++++-------- git/compat.py | 2 +- git/config.py | 18 ++++++++++-------- git/diff.py | 6 +++--- git/index/base.py | 24 ++++++++++++------------ git/index/fun.py | 10 +++++----- git/objects/submodule/base.py | 3 ++- git/objects/tag.py | 4 ++-- git/objects/tree.py | 2 +- git/objects/util.py | 6 +++--- git/refs/tag.py | 2 +- git/remote.py | 12 ++++++------ git/repo/base.py | 20 ++++++++++---------- git/repo/fun.py | 9 +++++---- git/util.py | 14 +++++++------- 16 files changed, 77 insertions(+), 73 deletions(-) diff --git a/.flake8 b/.flake8 index ffa60483d..9759dc83b 100644 --- a/.flake8 +++ b/.flake8 @@ -19,7 +19,7 @@ enable-extensions = TC, TC2 # only needed for extensions not enabled by default ignore = E265,E266,E731,E704, W293, W504, ANN0 ANN1 ANN2, - TC0, TC1, TC2 + # TC0, TC1, TC2 # B, A, D, diff --git a/git/cmd.py b/git/cmd.py index 11c02afe8..4d0e5cdde 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -565,11 +565,11 @@ def __init__(self, working_dir: Union[None, PathLike] = None): .git directory in case of bare repositories.""" super(Git, self).__init__() self._working_dir = expand_path(working_dir) - self._git_options = () # type: Union[List[str], Tuple[str, ...]] - self._persistent_git_options = [] # type: List[str] + self._git_options: Union[List[str], Tuple[str, ...]] = () + self._persistent_git_options: List[str] = [] # Extra environment variables to pass to git commands - self._environment = {} # type: Dict[str, str] + self._environment: Dict[str, str] = {} # cached command slots self.cat_file_header = None @@ -603,9 +603,9 @@ def _set_cache_(self, attr: str) -> None: process_version = self._call_process('version') # should be as default *args and **kwargs used version_numbers = process_version.split(' ')[2] - self._version_info = tuple( + self._version_info: Tuple[int, int, int, int] = tuple( int(n) for n in version_numbers.split('.')[:4] if n.isdigit() - ) # type: Tuple[int, int, int, int] # type: ignore + ) # type: ignore # use typeguard here else: super(Git, self)._set_cache_(attr) # END handle version info @@ -868,8 +868,8 @@ def _kill_process(pid: int) -> None: # Wait for the process to return status = 0 - stdout_value = b'' # type: Union[str, bytes] - stderr_value = b'' # type: Union[str, bytes] + stdout_value: Union[str, bytes] = b'' + stderr_value: Union[str, bytes] = b'' newline = "\n" if universal_newlines else b"\n" try: if output_stream is None: @@ -1145,7 +1145,7 @@ def _prepare_ref(self, ref: AnyStr) -> bytes: # required for command to separate refs on stdin, as bytes if isinstance(ref, bytes): # Assume 40 bytes hexsha - bin-to-ascii for some reason returns bytes, not text - refstr = ref.decode('ascii') # type: str + refstr: str = ref.decode('ascii') elif not isinstance(ref, str): refstr = str(ref) # could be ref-object else: diff --git a/git/compat.py b/git/compat.py index 187618a2a..7a0a15d23 100644 --- a/git/compat.py +++ b/git/compat.py @@ -34,7 +34,7 @@ # --------------------------------------------------------------------------- -is_win = (os.name == 'nt') # type: bool +is_win: bool = (os.name == 'nt') is_posix = (os.name == 'posix') is_darwin = (os.name == 'darwin') defenc = sys.getfilesystemencoding() diff --git a/git/config.py b/git/config.py index e0a18ec8e..345cb40e6 100644 --- a/git/config.py +++ b/git/config.py @@ -208,7 +208,7 @@ def get(self, key: str, default: Union[Any, None] = None) -> Union[Any, None]: def getall(self, key: str) -> Any: return super(_OMD, self).__getitem__(key) - def items(self) -> List[Tuple[str, Any]]: # type: ignore ## mypy doesn't like overwriting supertype signitures + def items(self) -> List[Tuple[str, Any]]: # type: ignore[override] """List of (key, last value for key).""" return [(k, self[k]) for k in self] @@ -322,7 +322,7 @@ def __init__(self, file_or_files: Union[None, PathLike, 'BytesIO', Sequence[Unio self._is_initialized = False self._merge_includes = merge_includes self._repo = repo - self._lock = None # type: Union['LockFile', None] + self._lock: Union['LockFile', None] = None self._acquire_lock() def _acquire_lock(self) -> None: @@ -545,13 +545,15 @@ def read(self) -> None: return None self._is_initialized = True - files_to_read = [""] # type: List[Union[PathLike, IO]] ## just for types until 3.5 dropped - if isinstance(self._file_or_files, (str)): # replace with PathLike once 3.5 dropped - files_to_read = [self._file_or_files] # for str, as str is a type of Sequence + files_to_read: List[Union[PathLike, IO]] = [""] + if isinstance(self._file_or_files, (str, os.PathLike)): + # for str or Path, as str is a type of Sequence + files_to_read = [self._file_or_files] elif not isinstance(self._file_or_files, (tuple, list, Sequence)): - files_to_read = [self._file_or_files] # for IO or Path - else: - files_to_read = list(self._file_or_files) # for lists or tuples + # could merge with above isinstance once runtime type known + files_to_read = [self._file_or_files] + else: # for lists or tuples + files_to_read = list(self._file_or_files) # end assure we have a copy of the paths to handle seen = set(files_to_read) diff --git a/git/diff.py b/git/diff.py index f8c0c25f3..98a5cfd97 100644 --- a/git/diff.py +++ b/git/diff.py @@ -351,13 +351,13 @@ def __hash__(self) -> int: return hash(tuple(getattr(self, n) for n in self.__slots__)) def __str__(self) -> str: - h = "%s" # type: str + h: str = "%s" if self.a_blob: h %= self.a_blob.path elif self.b_blob: h %= self.b_blob.path - msg = '' # type: str + msg: str = '' line = None # temp line line_length = 0 # line length for b, n in zip((self.a_blob, self.b_blob), ('lhs', 'rhs')): @@ -449,7 +449,7 @@ def _index_from_patch_format(cls, repo: 'Repo', proc: TBD) -> DiffIndex: :return: git.DiffIndex """ ## FIXME: Here SLURPING raw, need to re-phrase header-regexes linewise. - text_list = [] # type: List[bytes] + text_list: List[bytes] = [] handle_process_output(proc, text_list.append, None, finalize_process, decode_streams=False) # for now, we have to bake the stream diff --git a/git/index/base.py b/git/index/base.py index 220bdc85d..6452419c5 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -123,7 +123,7 @@ def __init__(self, repo: 'Repo', file_path: Union[PathLike, None] = None) -> Non self.repo = repo self.version = self._VERSION self._extension_data = b'' - self._file_path = file_path or self._index_path() # type: PathLike + self._file_path: PathLike = file_path or self._index_path() def _set_cache_(self, attr: str) -> None: if attr == "entries": @@ -136,7 +136,7 @@ def _set_cache_(self, attr: str) -> None: ok = True except OSError: # in new repositories, there may be no index, which means we are empty - self.entries = {} # type: Dict[Tuple[PathLike, StageType], IndexEntry] + self.entries: Dict[Tuple[PathLike, StageType], IndexEntry] = {} return None finally: if not ok: @@ -266,7 +266,7 @@ def merge_tree(self, rhs: Treeish, base: Union[None, Treeish] = None) -> 'IndexF # -i : ignore working tree status # --aggressive : handle more merge cases # -m : do an actual merge - args = ["--aggressive", "-i", "-m"] # type: List[Union[Treeish, str]] + args: List[Union[Treeish, str]] = ["--aggressive", "-i", "-m"] if base is not None: args.append(base) args.append(rhs) @@ -288,14 +288,14 @@ def new(cls, repo: 'Repo', *tree_sha: Union[str, Tree]) -> 'IndexFile': New IndexFile instance. Its path will be undefined. If you intend to write such a merged Index, supply an alternate file_path to its 'write' method.""" - tree_sha_bytes = [to_bin_sha(str(t)) for t in tree_sha] # List[bytes] + tree_sha_bytes: List[bytes] = [to_bin_sha(str(t)) for t in tree_sha] base_entries = aggressive_tree_merge(repo.odb, tree_sha_bytes) inst = cls(repo) # convert to entries dict - entries = dict(zip( + entries: Dict[Tuple[PathLike, int], IndexEntry] = dict(zip( ((e.path, e.stage) for e in base_entries), - (IndexEntry.from_base(e) for e in base_entries))) # type: Dict[Tuple[PathLike, int], IndexEntry] + (IndexEntry.from_base(e) for e in base_entries))) inst.entries = entries return inst @@ -338,7 +338,7 @@ def from_tree(cls, repo: 'Repo', *treeish: Treeish, **kwargs: Any) -> 'IndexFile if len(treeish) == 0 or len(treeish) > 3: raise ValueError("Please specify between 1 and 3 treeish, got %i" % len(treeish)) - arg_list = [] # type: List[Union[Treeish, str]] + arg_list: List[Union[Treeish, str]] = [] # ignore that working tree and index possibly are out of date if len(treeish) > 1: # drop unmerged entries when reading our index and merging @@ -445,7 +445,7 @@ def _write_path_to_stdin(self, proc: 'Popen', filepath: PathLike, item: TBD, fma we will close stdin to break the pipe.""" fprogress(filepath, False, item) - rval = None # type: Union[None, str] + rval: Union[None, str] = None if proc.stdin is not None: try: @@ -492,7 +492,7 @@ def unmerged_blobs(self) -> Dict[PathLike, List[Tuple[StageType, Blob]]]: are at stage 3 will not have a stage 3 entry. """ is_unmerged_blob = lambda t: t[0] != 0 - path_map = {} # type: Dict[PathLike, List[Tuple[TBD, Blob]]] + path_map: Dict[PathLike, List[Tuple[TBD, Blob]]] = {} for stage, blob in self.iter_blobs(is_unmerged_blob): path_map.setdefault(blob.path, []).append((stage, blob)) # END for each unmerged blob @@ -624,8 +624,8 @@ def _store_path(self, filepath: PathLike, fprogress: Callable) -> BaseIndexEntry st = os.lstat(filepath) # handles non-symlinks as well if S_ISLNK(st.st_mode): # in PY3, readlink is string, but we need bytes. In PY2, it's just OS encoded bytes, we assume UTF-8 - open_stream = lambda: BytesIO(force_bytes(os.readlink(filepath), - encoding=defenc)) # type: Callable[[], BinaryIO] + open_stream: Callable[[], BinaryIO] = lambda: BytesIO(force_bytes(os.readlink(filepath), + encoding=defenc)) else: open_stream = lambda: open(filepath, 'rb') with open_stream() as stream: @@ -1160,7 +1160,7 @@ def handle_stderr(proc: 'Popen[bytes]', iter_checked_out_files: Iterable[PathLik proc = self.repo.git.checkout_index(args, **kwargs) # FIXME: Reading from GIL! make_exc = lambda: GitCommandError(("git-checkout-index",) + tuple(args), 128, proc.stderr.read()) - checked_out_files = [] # type: List[PathLike] + checked_out_files: List[PathLike] = [] for path in paths: co_path = to_native_path_linux(self._to_relative_path(path)) diff --git a/git/index/fun.py b/git/index/fun.py index e5e566a05..e071e15cf 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -99,8 +99,8 @@ def run_commit_hook(name: str, index: 'IndexFile', *args: str) -> None: except Exception as ex: raise HookExecutionError(hp, ex) from ex else: - stdout_list = [] # type: List[str] - stderr_list = [] # type: List[str] + stdout_list: List[str] = [] + stderr_list: List[str] = [] handle_process_output(cmd, stdout_list.append, stderr_list.append, finalize_process) stdout = ''.join(stdout_list) stderr = ''.join(stderr_list) @@ -151,8 +151,8 @@ def write_cache(entries: Sequence[Union[BaseIndexEntry, 'IndexEntry']], stream: beginoffset = tell() write(entry[4]) # ctime write(entry[5]) # mtime - path_str = entry[3] # type: str - path = force_bytes(path_str, encoding=defenc) + path_str: str = entry[3] + path: bytes = force_bytes(path_str, encoding=defenc) plen = len(path) & CE_NAMEMASK # path length assert plen == len(path), "Path %s too long to fit into index" % entry[3] flags = plen | (entry[2] & CE_NAMEMASK_INV) # clear possible previous values @@ -210,7 +210,7 @@ def read_cache(stream: IO[bytes]) -> Tuple[int, Dict[Tuple[PathLike, int], 'Inde * content_sha is a 20 byte sha on all cache file contents""" version, num_entries = read_header(stream) count = 0 - entries = {} # type: Dict[Tuple[PathLike, int], 'IndexEntry'] + entries: Dict[Tuple[PathLike, int], 'IndexEntry'] = {} read = stream.read tell = stream.tell diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 21cfcd5a3..d5ba118f6 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -475,7 +475,8 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No sm._branch_path = br.path # we deliberately assume that our head matches our index ! - sm.binsha = mrepo.head.commit.binsha # type: ignore + if mrepo: + sm.binsha = mrepo.head.commit.binsha index.add([sm], write=True) return sm diff --git a/git/objects/tag.py b/git/objects/tag.py index 4a2fcb0d0..7048eb403 100644 --- a/git/objects/tag.py +++ b/git/objects/tag.py @@ -51,7 +51,7 @@ def __init__(self, repo: 'Repo', binsha: bytes, authored_date is in, in a format similar to time.altzone""" super(TagObject, self).__init__(repo, binsha) if object is not None: - self.object = object # type: Union['Commit', 'Blob', 'Tree', 'TagObject'] + self.object: Union['Commit', 'Blob', 'Tree', 'TagObject'] = object if tag is not None: self.tag = tag if tagger is not None: @@ -67,7 +67,7 @@ def _set_cache_(self, attr: str) -> None: """Cache all our attributes at once""" if attr in TagObject.__slots__: ostream = self.repo.odb.stream(self.binsha) - lines = ostream.read().decode(defenc, 'replace').splitlines() # type: List[str] + lines: List[str] = ostream.read().decode(defenc, 'replace').splitlines() _obj, hexsha = lines[0].split(" ") _type_token, type_name = lines[1].split(" ") diff --git a/git/objects/tree.py b/git/objects/tree.py index 0e3f44b90..dd1fe7832 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -298,7 +298,7 @@ def cache(self) -> TreeModifier: See the ``TreeModifier`` for more information on how to alter the cache""" return TreeModifier(self._cache) - def traverse(self, # type: ignore # overrides super() + def traverse(self, # type: ignore[override] predicate: Callable[[Union[IndexObjUnion, TraversedTreeTup], int], bool] = lambda i, d: True, prune: Callable[[Union[IndexObjUnion, TraversedTreeTup], int], bool] = lambda i, d: False, depth: int = -1, diff --git a/git/objects/util.py b/git/objects/util.py index 04af3b833..ef1ae77ba 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -285,7 +285,7 @@ class ProcessStreamAdapter(object): def __init__(self, process: 'Popen', stream_name: str) -> None: self._proc = process - self._stream = getattr(process, stream_name) # type: StringIO ## guess + self._stream: StringIO = getattr(process, stream_name) # guessed type def __getattr__(self, attr: str) -> Any: return getattr(self._stream, attr) @@ -356,7 +356,7 @@ def _list_traverse(self, as_edge=False, *args: Any, **kwargs: Any return out_list @ abstractmethod - def traverse(self, *args: Any, **kwargs) -> Any: + def traverse(self, *args: Any, **kwargs: Any) -> Any: """ """ warnings.warn("traverse() method should only be called from subclasses." "Calling from Traversable abstract class will raise NotImplementedError in 3.1.20" @@ -414,7 +414,7 @@ def _traverse(self, ignore_self=False is_edge=False -> Iterator[Tuple[src, item]]""" visited = set() - stack = deque() # type: Deque[TraverseNT] + stack: Deque[TraverseNT] = deque() stack.append(TraverseNT(0, self, None)) # self is always depth level 0 def addToStack(stack: Deque[TraverseNT], diff --git a/git/refs/tag.py b/git/refs/tag.py index aa3b82a2e..281ce09ad 100644 --- a/git/refs/tag.py +++ b/git/refs/tag.py @@ -35,7 +35,7 @@ class TagReference(Reference): _common_path_default = Reference._common_path_default + "/" + _common_default @property - def commit(self) -> 'Commit': # type: ignore[override] # LazyMixin has unrelated + def commit(self) -> 'Commit': # type: ignore[override] # LazyMixin has unrelated comit method """:return: Commit object the tag ref points to :raise ValueError: if the tag points to a tree or blob""" diff --git a/git/remote.py b/git/remote.py index 0fcd49b57..d903552f8 100644 --- a/git/remote.py +++ b/git/remote.py @@ -193,7 +193,7 @@ def _from_line(cls, remote: 'Remote', line: str) -> 'PushInfo': # from_to handling from_ref_string, to_ref_string = from_to.split(':') if flags & cls.DELETED: - from_ref = None # type: Union[SymbolicReference, None] + from_ref: Union[SymbolicReference, None] = None else: if from_ref_string == "(delete)": from_ref = None @@ -201,7 +201,7 @@ def _from_line(cls, remote: 'Remote', line: str) -> 'PushInfo': from_ref = Reference.from_path(remote.repo, from_ref_string) # commit handling, could be message or commit info - old_commit = None # type: Optional[str] + old_commit: Optional[str] = None if summary.startswith('['): if "[rejected]" in summary: flags |= cls.REJECTED @@ -259,14 +259,14 @@ class FetchInfo(IterableObj, object): _re_fetch_result = re.compile(r'^\s*(.) (\[?[\w\s\.$@]+\]?)\s+(.+) -> ([^\s]+)( \(.*\)?$)?') - _flag_map = { + _flag_map: Dict[flagKeyLiteral, int] = { '!': ERROR, '+': FORCED_UPDATE, '*': 0, '=': HEAD_UPTODATE, ' ': FAST_FORWARD, '-': TAG_UPDATE, - } # type: Dict[flagKeyLiteral, int] + } @ classmethod def refresh(cls) -> Literal[True]: @@ -359,7 +359,7 @@ def _from_line(cls, repo: 'Repo', line: str, fetch_line: str) -> 'FetchInfo': # END control char exception handling # parse operation string for more info - makes no sense for symbolic refs, but we parse it anyway - old_commit = None # type: Union[Commit_ish, None] + old_commit: Union[Commit_ish, None] = None is_tag_operation = False if 'rejected' in operation: flags |= cls.REJECTED @@ -846,7 +846,7 @@ def fetch(self, refspec: Union[str, List[str], None] = None, kwargs = add_progress(kwargs, self.repo.git, progress) if isinstance(refspec, list): - args = refspec # type: Sequence[Optional[str]] # should need this - check logic for passing None through + args: Sequence[Optional[str]] = refspec else: args = [refspec] diff --git a/git/repo/base.py b/git/repo/base.py index 29d085024..64f32bd38 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -83,10 +83,10 @@ class Repo(object): DAEMON_EXPORT_FILE = 'git-daemon-export-ok' git = cast('Git', None) # Must exist, or __del__ will fail in case we raise on `__init__()` - working_dir = None # type: Optional[PathLike] - _working_tree_dir = None # type: Optional[PathLike] - git_dir = "" # type: PathLike - _common_dir = "" # type: PathLike + working_dir: Optional[PathLike] = None + _working_tree_dir: Optional[PathLike] = None + git_dir: PathLike = "" + _common_dir: PathLike = "" # precompiled regex re_whitespace = re.compile(r'\s+') @@ -221,7 +221,7 @@ def __init__(self, path: Optional[PathLike] = None, odbt: Type[LooseObjectDB] = self._working_tree_dir = None # END working dir handling - self.working_dir = self._working_tree_dir or self.common_dir # type: Optional[PathLike] + self.working_dir: Optional[PathLike] = self._working_tree_dir or self.common_dir self.git = self.GitCommandWrapperType(self.working_dir) # special handling, in special times @@ -591,7 +591,7 @@ def merge_base(self, *rev: TBD, **kwargs: Any raise ValueError("Please specify at least two revs, got only %i" % len(rev)) # end handle input - res = [] # type: List[Union[Commit_ish, None]] + res: List[Union[Commit_ish, None]] = [] try: lines = self.git.merge_base(*rev, **kwargs).splitlines() # List[str] except GitCommandError as err: @@ -813,7 +813,7 @@ def blame_incremental(self, rev: TBD, file: TBD, **kwargs: Any) -> Optional[Iter line = next(stream) # when exhausted, causes a StopIteration, terminating this function except StopIteration: return - split_line = line.split() # type: Tuple[str, str, str, str] + split_line: Tuple[str, str, str, str] = line.split() hexsha, orig_lineno_str, lineno_str, num_lines_str = split_line lineno = int(lineno_str) num_lines = int(num_lines_str) @@ -879,10 +879,10 @@ def blame(self, rev: TBD, file: TBD, incremental: bool = False, **kwargs: Any return self.blame_incremental(rev, file, **kwargs) data = self.git.blame(rev, '--', file, p=True, stdout_as_string=False, **kwargs) - commits = {} # type: Dict[str, Any] - blames = [] # type: List[List[Union[Optional['Commit'], List[str]]]] + commits: Dict[str, TBD] = {} + blames: List[List[Union[Optional['Commit'], List[str]]]] = [] - info = {} # type: Dict[str, Any] # use Any until TypedDict available + info: Dict[str, TBD] = {} # use Any until TypedDict available keepends = True for line in data.splitlines(keepends): diff --git a/git/repo/fun.py b/git/repo/fun.py index e96b62e0f..a20e2ecba 100644 --- a/git/repo/fun.py +++ b/git/repo/fun.py @@ -1,5 +1,4 @@ """Package with general repository related functions""" -from git.refs.tag import Tag import os import stat from string import digits @@ -19,11 +18,13 @@ # Typing ---------------------------------------------------------------------- from typing import Union, Optional, cast, TYPE_CHECKING -from git.types import PathLike + if TYPE_CHECKING: + from git.types import PathLike from .base import Repo from git.db import GitCmdObjectDB from git.objects import Commit, TagObject, Blob, Tree + from git.refs.tag import Tag # ---------------------------------------------------------------------------- @@ -122,7 +123,7 @@ def name_to_object(repo: 'Repo', name: str, return_ref: bool = False :param return_ref: if name specifies a reference, we will return the reference instead of the object. Otherwise it will raise BadObject or BadName """ - hexsha = None # type: Union[None, str, bytes] + hexsha: Union[None, str, bytes] = None # is it a hexsha ? Try the most common ones, which is 7 to 40 if repo.re_hexsha_shortened.match(name): @@ -162,7 +163,7 @@ def name_to_object(repo: 'Repo', name: str, return_ref: bool = False return Object.new_from_sha(repo, hex_to_bin(hexsha)) -def deref_tag(tag: Tag) -> 'TagObject': +def deref_tag(tag: 'Tag') -> 'TagObject': """Recursively dereference a tag and return the resulting object""" while True: try: diff --git a/git/util.py b/git/util.py index c04e29276..c0c0ecb73 100644 --- a/git/util.py +++ b/git/util.py @@ -267,7 +267,7 @@ def _cygexpath(drive: Optional[str], path: str) -> str: return p_str.replace('\\', '/') -_cygpath_parsers = ( +_cygpath_parsers: Tuple[Tuple[Pattern[str], Callable, bool], ...] = ( # See: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx # and: https://www.cygwin.com/cygwin-ug-net/using.html#unc-paths (re.compile(r"\\\\\?\\UNC\\([^\\]+)\\([^\\]+)(?:\\(.*))?"), @@ -294,7 +294,7 @@ def _cygexpath(drive: Optional[str], path: str) -> str: (lambda url: url), False ), -) # type: Tuple[Tuple[Pattern[str], Callable, bool], ...] +) def cygpath(path: str) -> str: @@ -330,7 +330,7 @@ def decygpath(path: PathLike) -> str: #: Store boolean flags denoting if a specific Git executable #: is from a Cygwin installation (since `cache_lru()` unsupported on PY2). -_is_cygwin_cache = {} # type: Dict[str, Optional[bool]] +_is_cygwin_cache: Dict[str, Optional[bool]] = {} @overload @@ -462,10 +462,10 @@ class RemoteProgress(object): re_op_relative = re.compile(r"(remote: )?([\w\s]+):\s+(\d+)% \((\d+)/(\d+)\)(.*)") def __init__(self) -> None: - self._seen_ops = [] # type: List[int] - self._cur_line = None # type: Optional[str] - self.error_lines = [] # type: List[str] - self.other_lines = [] # type: List[str] + self._seen_ops: List[int] = [] + self._cur_line: Optional[str] = None + self.error_lines: List[str] = [] + self.other_lines: List[str] = [] def _parse_progress_line(self, line: AnyStr) -> None: """Parse progress information from the given line as retrieved by git-push From dcfedb27dc720683bbadb7353d96cfec2a99c476 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 19:49:16 +0100 Subject: [PATCH 0661/2375] update types in types.py --- .flake8 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.flake8 b/.flake8 index 9759dc83b..e22e8de05 100644 --- a/.flake8 +++ b/.flake8 @@ -8,7 +8,7 @@ statistics = True # W293 = Blank line contains whitespace # W504 = Line break after operator # E704 = multiple statements in one line - used for @override -# TC002 = +# TC002 = move third party import to TYPE_CHECKING # ANN = flake8-annotations # TC, TC2 = flake8-type-checking # D = flake8-docstrings @@ -19,7 +19,7 @@ enable-extensions = TC, TC2 # only needed for extensions not enabled by default ignore = E265,E266,E731,E704, W293, W504, ANN0 ANN1 ANN2, - # TC0, TC1, TC2 + TC002, # TC0, TC1, TC2 # B, A, D, From 8900f2a5c6ab349af19960a333ee55718065304b Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 19:57:34 +0100 Subject: [PATCH 0662/2375] Make pathlike a forward ref --- .flake8 | 3 ++- git/repo/fun.py | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.flake8 b/.flake8 index e22e8de05..3cf342f93 100644 --- a/.flake8 +++ b/.flake8 @@ -19,7 +19,8 @@ enable-extensions = TC, TC2 # only needed for extensions not enabled by default ignore = E265,E266,E731,E704, W293, W504, ANN0 ANN1 ANN2, - TC002, # TC0, TC1, TC2 + TC002, + # TC0, TC1, TC2 # B, A, D, diff --git a/git/repo/fun.py b/git/repo/fun.py index a20e2ecba..7d5c78237 100644 --- a/git/repo/fun.py +++ b/git/repo/fun.py @@ -19,6 +19,7 @@ from typing import Union, Optional, cast, TYPE_CHECKING + if TYPE_CHECKING: from git.types import PathLike from .base import Repo @@ -38,7 +39,7 @@ def touch(filename: str) -> str: return filename -def is_git_dir(d: PathLike) -> bool: +def is_git_dir(d: 'PathLike') -> bool: """ This is taken from the git setup.c:is_git_directory function. @@ -60,7 +61,7 @@ def is_git_dir(d: PathLike) -> bool: return False -def find_worktree_git_dir(dotgit: PathLike) -> Optional[str]: +def find_worktree_git_dir(dotgit: 'PathLike') -> Optional[str]: """Search for a gitdir for this worktree.""" try: statbuf = os.stat(dotgit) @@ -79,7 +80,7 @@ def find_worktree_git_dir(dotgit: PathLike) -> Optional[str]: return None -def find_submodule_git_dir(d: PathLike) -> Optional[PathLike]: +def find_submodule_git_dir(d: 'PathLike') -> Optional['PathLike']: """Search for a submodule repo.""" if is_git_dir(d): return d From 017b0d4b19127868ccb8ee616f64734b48f6e620 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 20:08:07 +0100 Subject: [PATCH 0663/2375] Add a cast to git.cmd _version_info --- git/cmd.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index 4d0e5cdde..4404981e0 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -603,19 +603,19 @@ def _set_cache_(self, attr: str) -> None: process_version = self._call_process('version') # should be as default *args and **kwargs used version_numbers = process_version.split(' ')[2] - self._version_info: Tuple[int, int, int, int] = tuple( - int(n) for n in version_numbers.split('.')[:4] if n.isdigit() - ) # type: ignore # use typeguard here + self._version_info = cast(Tuple[int, int, int, int], + tuple(int(n) for n in version_numbers.split('.')[:4] if n.isdigit()) + ) else: super(Git, self)._set_cache_(attr) # END handle version info - @property + @ property def working_dir(self) -> Union[None, PathLike]: """:return: Git directory we are working on""" return self._working_dir - @property + @ property def version_info(self) -> Tuple[int, int, int, int]: """ :return: tuple(int, int, int, int) tuple with integers representing the major, minor @@ -623,7 +623,7 @@ def version_info(self) -> Tuple[int, int, int, int]: This value is generated on demand and is cached""" return self._version_info - @overload + @ overload def execute(self, command: Union[str, Sequence[Any]], *, @@ -631,7 +631,7 @@ def execute(self, ) -> 'AutoInterrupt': ... - @overload + @ overload def execute(self, command: Union[str, Sequence[Any]], *, @@ -640,7 +640,7 @@ def execute(self, ) -> Union[str, Tuple[int, str, str]]: ... - @overload + @ overload def execute(self, command: Union[str, Sequence[Any]], *, @@ -649,7 +649,7 @@ def execute(self, ) -> Union[bytes, Tuple[int, bytes, str]]: ... - @overload + @ overload def execute(self, command: Union[str, Sequence[Any]], *, @@ -659,7 +659,7 @@ def execute(self, ) -> str: ... - @overload + @ overload def execute(self, command: Union[str, Sequence[Any]], *, From 600df043e76924d43a4f9f88f4e3241740f34c77 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 19 Jul 2021 20:26:53 +0100 Subject: [PATCH 0664/2375] Rmv old py2.7 __future__ imports --- git/index/__init__.py | 2 -- git/objects/__init__.py | 2 -- git/refs/__init__.py | 1 - git/repo/__init__.py | 1 - test/lib/helper.py | 2 -- test/performance/test_commit.py | 1 - test/performance/test_odb.py | 2 -- test/performance/test_streams.py | 2 -- test/test_commit.py | 2 -- 9 files changed, 15 deletions(-) diff --git a/git/index/__init__.py b/git/index/__init__.py index 2516f01f8..96b721f07 100644 --- a/git/index/__init__.py +++ b/git/index/__init__.py @@ -1,6 +1,4 @@ """Initialize the index package""" # flake8: noqa -from __future__ import absolute_import - from .base import * from .typ import * diff --git a/git/objects/__init__.py b/git/objects/__init__.py index 897eb98fa..1d0bb7a51 100644 --- a/git/objects/__init__.py +++ b/git/objects/__init__.py @@ -2,8 +2,6 @@ Import all submodules main classes into the package space """ # flake8: noqa -from __future__ import absolute_import - import inspect from .base import * diff --git a/git/refs/__init__.py b/git/refs/__init__.py index ded8b1f7c..1486dffe6 100644 --- a/git/refs/__init__.py +++ b/git/refs/__init__.py @@ -1,5 +1,4 @@ # flake8: noqa -from __future__ import absolute_import # import all modules in order, fix the names they require from .symbolic import * from .reference import * diff --git a/git/repo/__init__.py b/git/repo/__init__.py index 5619aa692..712df60de 100644 --- a/git/repo/__init__.py +++ b/git/repo/__init__.py @@ -1,4 +1,3 @@ """Initialize the Repo package""" # flake8: noqa -from __future__ import absolute_import from .base import * diff --git a/test/lib/helper.py b/test/lib/helper.py index 5dde7b04e..632d6af9f 100644 --- a/test/lib/helper.py +++ b/test/lib/helper.py @@ -3,8 +3,6 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php -from __future__ import print_function - import contextlib from functools import wraps import gc diff --git a/test/performance/test_commit.py b/test/performance/test_commit.py index 4617b052c..8158a1e62 100644 --- a/test/performance/test_commit.py +++ b/test/performance/test_commit.py @@ -3,7 +3,6 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php -from __future__ import print_function from io import BytesIO from time import time import sys diff --git a/test/performance/test_odb.py b/test/performance/test_odb.py index 8bd614f28..c9521c56d 100644 --- a/test/performance/test_odb.py +++ b/test/performance/test_odb.py @@ -1,6 +1,4 @@ """Performance tests for object store""" -from __future__ import print_function - import sys from time import time diff --git a/test/performance/test_streams.py b/test/performance/test_streams.py index edf32c915..28e6b13ed 100644 --- a/test/performance/test_streams.py +++ b/test/performance/test_streams.py @@ -1,6 +1,4 @@ """Performance data streaming performance""" -from __future__ import print_function - import os import subprocess import sys diff --git a/test/test_commit.py b/test/test_commit.py index 670068e50..67dc7d732 100644 --- a/test/test_commit.py +++ b/test/test_commit.py @@ -4,8 +4,6 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php -from __future__ import print_function - from datetime import datetime from io import BytesIO import re From 5b20664aba8e8a2fcae2f7f759122f3c48cec18d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 23 Jul 2021 08:01:09 +0800 Subject: [PATCH 0665/2375] prepare patch release --- VERSION | 2 +- doc/source/changes.rst | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 5762a6ffe..a52a6f1aa 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.18 +3.1.19 diff --git a/doc/source/changes.rst b/doc/source/changes.rst index aabef8023..fd3fc60dd 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,15 @@ Changelog ========= +3.1.19 +====== + +* This is the second typed release with a lot of improvements under the hood. + * Tracking issue: https://github.com/gitpython-developers/GitPython/issues/1095 + +See the following for details: +https://github.com/gitpython-developers/gitpython/milestone/51?closed=1 + 3.1.18 ====== From bc37d1561bfcf1b7971cc8d6d4a6f1ba8fa01fa5 Mon Sep 17 00:00:00 2001 From: Dominic Date: Fri, 23 Jul 2021 10:04:13 +0100 Subject: [PATCH 0666/2375] update typing-extensions to 3.10.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index a20310fb2..80d6b1b44 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ gitdb>=4.0.1,<5 -typing-extensions>=3.7.4.3;python_version<"3.10" +typing-extensions>=3.10.0.0;python_version<"3.10" From 02b4fff9689857f9e0f079caa71891eee0d56f99 Mon Sep 17 00:00:00 2001 From: Dominic Date: Fri, 23 Jul 2021 12:52:36 +0100 Subject: [PATCH 0667/2375] re-add package data for py.typed Need for pypi install? --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index e8da06dc1..5f2d8e4f6 100755 --- a/setup.py +++ b/setup.py @@ -94,6 +94,7 @@ def build_py_modules(basedir, excludes=()): license="BSD", url="https://github.com/gitpython-developers/GitPython", packages=find_packages(exclude=("test.*")), + package_data={'git': ['**/*.pyi', 'py.typed']}, include_package_data=True, py_modules=build_py_modules("./git", excludes=["git.ext.*"]), package_dir={'git': 'git'}, From 28e6aa779bfdd82da9246b9fc7838d5b721d8b67 Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 24 Jul 2021 09:52:52 +0100 Subject: [PATCH 0668/2375] fix find_packages() Make exclude arg a sequence -> find_packages(exclude=["test", "test.*"]) --- setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 5f2d8e4f6..d87f79ec5 100755 --- a/setup.py +++ b/setup.py @@ -93,8 +93,7 @@ def build_py_modules(basedir, excludes=()): author_email="byronimo@gmail.com, mtrier@gmail.com", license="BSD", url="https://github.com/gitpython-developers/GitPython", - packages=find_packages(exclude=("test.*")), - package_data={'git': ['**/*.pyi', 'py.typed']}, + packages=find_packages(exclude=["test", "test.*"]), include_package_data=True, py_modules=build_py_modules("./git", excludes=["git.ext.*"]), package_dir={'git': 'git'}, From 2df0381718a4ba18394e68b40e352fa7528e9018 Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 24 Jul 2021 09:54:12 +0100 Subject: [PATCH 0669/2375] Rmv EZ_setup from setup.py Build tools now specified in pyproject.toml, so can be sure setuptools is installed --- setup.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/setup.py b/setup.py index d87f79ec5..215590710 100755 --- a/setup.py +++ b/setup.py @@ -1,11 +1,4 @@ -#!/usr/bin/env python -try: - from setuptools import setup, find_packages -except ImportError: - from ez_setup import use_setuptools # type: ignore[Pylance] - use_setuptools() - from setuptools import setup, find_packages - +from setuptools import setup, find_packages from setuptools.command.build_py import build_py as _build_py from setuptools.command.sdist import sdist as _sdist import fnmatch From fb21782089dbbb43b2f8cf36ce3e732558032aff Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 24 Jul 2021 09:55:53 +0100 Subject: [PATCH 0670/2375] Add build system to pyproject.toml --- pyproject.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 79e628404..94f74793d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,7 @@ +[build-system] +requires = ["setuptools", "wheel"] +build-backend = "setuptools.build_meta" + [tool.pytest.ini_options] python_files = 'test_*.py' testpaths = 'test' # space seperated list of paths from root e.g test tests doc/testing From e6345d60a7926bd413d3d7238ba06f7c81a7faf9 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 24 Jul 2021 17:10:32 +0100 Subject: [PATCH 0671/2375] Replace all Typeguard with cast, revert update to typing-extensions==3.10.0 --- git/config.py | 6 +++--- git/diff.py | 14 +++++++------- git/index/fun.py | 11 ++++++----- git/objects/commit.py | 21 ++++++++++++--------- git/objects/tree.py | 6 +++--- git/refs/reference.py | 2 +- git/refs/symbolic.py | 2 +- git/remote.py | 12 ++++++------ git/repo/base.py | 5 +++-- git/types.py | 14 +++++++------- 10 files changed, 49 insertions(+), 44 deletions(-) diff --git a/git/config.py b/git/config.py index 345cb40e6..b25707b27 100644 --- a/git/config.py +++ b/git/config.py @@ -34,7 +34,7 @@ from typing import (Any, Callable, IO, List, Dict, Sequence, TYPE_CHECKING, Tuple, Union, cast, overload) -from git.types import Lit_config_levels, ConfigLevels_Tup, PathLike, TBD, assert_never, is_config_level +from git.types import Lit_config_levels, ConfigLevels_Tup, PathLike, TBD, assert_never if TYPE_CHECKING: from git.repo.base import Repo @@ -309,9 +309,9 @@ def __init__(self, file_or_files: Union[None, PathLike, 'BytesIO', Sequence[Unio else: if config_level is None: if read_only: - self._file_or_files = [get_config_path(f) + self._file_or_files = [get_config_path(cast(Lit_config_levels, f)) for f in CONFIG_LEVELS - if is_config_level(f) and f != 'repository'] + if f != 'repository'] else: raise ValueError("No configuration level or configuration files specified") else: diff --git a/git/diff.py b/git/diff.py index 98a5cfd97..74ca0b64d 100644 --- a/git/diff.py +++ b/git/diff.py @@ -15,8 +15,8 @@ # typing ------------------------------------------------------------------ -from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING -from git.types import PathLike, TBD, Literal, TypeGuard +from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING, cast +from git.types import PathLike, TBD, Literal if TYPE_CHECKING: from .objects.tree import Tree @@ -28,9 +28,9 @@ Lit_change_type = Literal['A', 'D', 'C', 'M', 'R', 'T', 'U'] -def is_change_type(inp: str) -> TypeGuard[Lit_change_type]: - # return True - return inp in ['A', 'D', 'C', 'M', 'R', 'T', 'U'] +# def is_change_type(inp: str) -> TypeGuard[Lit_change_type]: +# # return True +# return inp in ['A', 'D', 'C', 'M', 'R', 'T', 'U'] # ------------------------------------------------------------------------ @@ -517,8 +517,8 @@ def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> Non # Change type can be R100 # R: status letter # 100: score (in case of copy and rename) - assert is_change_type(_change_type[0]), f"Unexpected value for change_type received: {_change_type[0]}" - change_type: Lit_change_type = _change_type[0] + # assert is_change_type(_change_type[0]), f"Unexpected value for change_type received: {_change_type[0]}" + change_type: Lit_change_type = cast(Lit_change_type, _change_type[0]) score_str = ''.join(_change_type[1:]) score = int(score_str) if score_str.isdigit() else None path = path.strip() diff --git a/git/index/fun.py b/git/index/fun.py index e071e15cf..3b963a2b9 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -53,7 +53,7 @@ from typing import (Dict, IO, List, Sequence, TYPE_CHECKING, Tuple, Type, Union, cast) -from git.types import PathLike, TypeGuard +from git.types import PathLike if TYPE_CHECKING: from .base import IndexFile @@ -188,15 +188,16 @@ def entry_key(*entry: Union[BaseIndexEntry, PathLike, int]) -> Tuple[PathLike, i """:return: Key suitable to be used for the index.entries dictionary :param entry: One instance of type BaseIndexEntry or the path and the stage""" - def is_entry_key_tup(entry_key: Tuple) -> TypeGuard[Tuple[PathLike, int]]: - return isinstance(entry_key, tuple) and len(entry_key) == 2 + # def is_entry_key_tup(entry_key: Tuple) -> TypeGuard[Tuple[PathLike, int]]: + # return isinstance(entry_key, tuple) and len(entry_key) == 2 if len(entry) == 1: entry_first = entry[0] assert isinstance(entry_first, BaseIndexEntry) return (entry_first.path, entry_first.stage) else: - assert is_entry_key_tup(entry) + # assert is_entry_key_tup(entry) + entry = cast(Tuple[PathLike, int], entry) return entry # END handle entry @@ -244,7 +245,7 @@ def read_cache(stream: IO[bytes]) -> Tuple[int, Dict[Tuple[PathLike, int], 'Inde content_sha = extension_data[-20:] # truncate the sha in the end as we will dynamically create it anyway - extension_data = extension_data[:-20] + extension_data = extension_data[: -20] return (version, entries, extension_data, content_sha) diff --git a/git/objects/commit.py b/git/objects/commit.py index 11cf52a5e..884f65228 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -39,9 +39,9 @@ # typing ------------------------------------------------------------------ -from typing import Any, IO, Iterator, List, Sequence, Tuple, Union, TYPE_CHECKING +from typing import Any, IO, Iterator, List, Sequence, Tuple, Union, TYPE_CHECKING, cast -from git.types import PathLike, TypeGuard, Literal +from git.types import PathLike, Literal if TYPE_CHECKING: from git.repo import Repo @@ -323,16 +323,18 @@ def _iter_from_process_or_stream(cls, repo: 'Repo', proc_or_stream: Union[Popen, :param proc: git-rev-list process instance - one sha per line :return: iterator returning Commit objects""" - def is_proc(inp) -> TypeGuard[Popen]: - return hasattr(proc_or_stream, 'wait') and not hasattr(proc_or_stream, 'readline') + # def is_proc(inp) -> TypeGuard[Popen]: + # return hasattr(proc_or_stream, 'wait') and not hasattr(proc_or_stream, 'readline') - def is_stream(inp) -> TypeGuard[IO]: - return hasattr(proc_or_stream, 'readline') + # def is_stream(inp) -> TypeGuard[IO]: + # return hasattr(proc_or_stream, 'readline') - if is_proc(proc_or_stream): + if hasattr(proc_or_stream, 'wait'): + proc_or_stream = cast(Popen, proc_or_stream) if proc_or_stream.stdout is not None: stream = proc_or_stream.stdout - elif is_stream(proc_or_stream): + elif hasattr(proc_or_stream, 'readline'): + proc_or_stream = cast(IO, proc_or_stream) stream = proc_or_stream readline = stream.readline @@ -351,7 +353,8 @@ def is_stream(inp) -> TypeGuard[IO]: # END for each line in stream # TODO: Review this - it seems process handling got a bit out of control # due to many developers trying to fix the open file handles issue - if is_proc(proc_or_stream): + if hasattr(proc_or_stream, 'wait'): + proc_or_stream = cast(Popen, proc_or_stream) finalize_process(proc_or_stream) @ classmethod diff --git a/git/objects/tree.py b/git/objects/tree.py index dd1fe7832..70f36af5d 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -24,7 +24,7 @@ from typing import (Any, Callable, Dict, Iterable, Iterator, List, Tuple, Type, Union, cast, TYPE_CHECKING) -from git.types import PathLike, TypeGuard, Literal +from git.types import PathLike, Literal if TYPE_CHECKING: from git.repo import Repo @@ -36,8 +36,8 @@ Tuple['Submodule', 'Submodule']]] -def is_tree_cache(inp: Tuple[bytes, int, str]) -> TypeGuard[TreeCacheTup]: - return isinstance(inp[0], bytes) and isinstance(inp[1], int) and isinstance([inp], str) +# def is_tree_cache(inp: Tuple[bytes, int, str]) -> TypeGuard[TreeCacheTup]: +# return isinstance(inp[0], bytes) and isinstance(inp[1], int) and isinstance([inp], str) #-------------------------------------------------------- diff --git a/git/refs/reference.py b/git/refs/reference.py index f584bb54d..646622816 100644 --- a/git/refs/reference.py +++ b/git/refs/reference.py @@ -8,7 +8,7 @@ # typing ------------------------------------------------------------------ from typing import Any, Callable, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING # NOQA -from git.types import Commit_ish, PathLike, TBD, Literal, TypeGuard, _T # NOQA +from git.types import Commit_ish, PathLike, TBD, Literal, _T # NOQA if TYPE_CHECKING: from git.repo import Repo diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 426d40d44..0e9dad5cc 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -24,7 +24,7 @@ # typing ------------------------------------------------------------------ from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING # NOQA -from git.types import Commit_ish, PathLike, TBD, Literal, TypeGuard # NOQA +from git.types import Commit_ish, PathLike, TBD, Literal # NOQA if TYPE_CHECKING: from git.repo import Repo diff --git a/git/remote.py b/git/remote.py index d903552f8..7da466e6d 100644 --- a/git/remote.py +++ b/git/remote.py @@ -37,9 +37,9 @@ # typing------------------------------------------------------- from typing import (Any, Callable, Dict, Iterator, List, NoReturn, Optional, Sequence, # NOQA[TC002] - TYPE_CHECKING, Type, Union, overload) + TYPE_CHECKING, Type, Union, cast, overload) -from git.types import PathLike, Literal, TBD, TypeGuard, Commit_ish # NOQA[TC002] +from git.types import PathLike, Literal, TBD, Commit_ish # NOQA[TC002] if TYPE_CHECKING: from git.repo.base import Repo @@ -50,8 +50,8 @@ flagKeyLiteral = Literal[' ', '!', '+', '-', '*', '=', 't', '?'] -def is_flagKeyLiteral(inp: str) -> TypeGuard[flagKeyLiteral]: - return inp in [' ', '!', '+', '-', '=', '*', 't', '?'] +# def is_flagKeyLiteral(inp: str) -> TypeGuard[flagKeyLiteral]: +# return inp in [' ', '!', '+', '-', '=', '*', 't', '?'] # ------------------------------------------------------------- @@ -342,8 +342,8 @@ def _from_line(cls, repo: 'Repo', line: str, fetch_line: str) -> 'FetchInfo': # parse lines remote_local_ref_str: str control_character, operation, local_remote_ref, remote_local_ref_str, note = match.groups() - assert is_flagKeyLiteral(control_character), f"{control_character}" - + # assert is_flagKeyLiteral(control_character), f"{control_character}" + control_character = cast(flagKeyLiteral, control_character) try: _new_hex_sha, _fetch_operation, fetch_note = fetch_line.split("\t") ref_type_name, fetch_note = fetch_note.split(' ', 1) diff --git a/git/repo/base.py b/git/repo/base.py index 64f32bd38..038517562 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -36,7 +36,7 @@ # typing ------------------------------------------------------ -from git.types import TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish, is_config_level +from git.types import TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish from typing import (Any, BinaryIO, Callable, Dict, Iterator, List, Mapping, Optional, Sequence, TextIO, Tuple, Type, Union, @@ -498,7 +498,8 @@ def config_reader(self, config_level: Optional[Lit_config_levels] = None) -> Git unknown, instead the global path will be used.""" files = None if config_level is None: - files = [self._get_config_path(f) for f in self.config_level if is_config_level(f)] + files = [self._get_config_path(cast(Lit_config_levels, f)) + for f in self.config_level if cast(Lit_config_levels, f)] else: files = [self._get_config_path(config_level)] return GitConfigParser(files, read_only=True, repo=self) diff --git a/git/types.py b/git/types.py index 53f0f1e4e..05c5b3453 100644 --- a/git/types.py +++ b/git/types.py @@ -12,10 +12,10 @@ else: from typing_extensions import Final, Literal, SupportsIndex, TypedDict, Protocol, runtime_checkable # noqa: F401 -if sys.version_info[:2] >= (3, 10): - from typing import TypeGuard # noqa: F401 -else: - from typing_extensions import TypeGuard # noqa: F401 +# if sys.version_info[:2] >= (3, 10): +# from typing import TypeGuard # noqa: F401 +# else: +# from typing_extensions import TypeGuard # noqa: F401 if sys.version_info[:2] < (3, 9): @@ -41,9 +41,9 @@ Lit_config_levels = Literal['system', 'global', 'user', 'repository'] -def is_config_level(inp: str) -> TypeGuard[Lit_config_levels]: - # return inp in get_args(Lit_config_level) # only py >= 3.8 - return inp in ("system", "user", "global", "repository") +# def is_config_level(inp: str) -> TypeGuard[Lit_config_levels]: +# # return inp in get_args(Lit_config_level) # only py >= 3.8 +# return inp in ("system", "user", "global", "repository") ConfigLevels_Tup = Tuple[Literal['system'], Literal['user'], Literal['global'], Literal['repository']] From 4b6430bad60ff491239fe06c41a43b498e0c883f Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 24 Jul 2021 17:11:22 +0100 Subject: [PATCH 0672/2375] Update requirements.txt --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 80d6b1b44..a20310fb2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ gitdb>=4.0.1,<5 -typing-extensions>=3.10.0.0;python_version<"3.10" +typing-extensions>=3.7.4.3;python_version<"3.10" From 2bc2ac02e270404fcb609eeacc4feea6146b9d2e Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 24 Jul 2021 19:46:52 +0100 Subject: [PATCH 0673/2375] Use BaseIndexEntry named access in index/fun.py --- git/index/fun.py | 17 +++++----- git/index/typ.py | 81 +++++++++++++++++------------------------------- 2 files changed, 38 insertions(+), 60 deletions(-) diff --git a/git/index/fun.py b/git/index/fun.py index 3b963a2b9..49e3f2c52 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -57,6 +57,7 @@ if TYPE_CHECKING: from .base import IndexFile + from git.db import GitCmdObjectDB from git.objects.tree import TreeCacheTup # from git.objects.fun import EntryTupOrNone @@ -149,15 +150,15 @@ def write_cache(entries: Sequence[Union[BaseIndexEntry, 'IndexEntry']], stream: # body for entry in entries: beginoffset = tell() - write(entry[4]) # ctime - write(entry[5]) # mtime - path_str: str = entry[3] + write(entry.ctime_bytes) # ctime + write(entry.mtime_bytes) # mtime + path_str = str(entry.path) path: bytes = force_bytes(path_str, encoding=defenc) plen = len(path) & CE_NAMEMASK # path length - assert plen == len(path), "Path %s too long to fit into index" % entry[3] - flags = plen | (entry[2] & CE_NAMEMASK_INV) # clear possible previous values - write(pack(">LLLLLL20sH", entry[6], entry[7], entry[0], - entry[8], entry[9], entry[10], entry[1], flags)) + assert plen == len(path), "Path %s too long to fit into index" % entry.path + flags = plen | (entry.flags & CE_NAMEMASK_INV) # clear possible previous values + write(pack(">LLLLLL20sH", entry.dev, entry.inode, entry.mode, + entry.uid, entry.gid, entry.size, entry.binsha, flags)) write(path) real_size = ((tell() - beginoffset + 8) & ~7) write(b"\0" * ((beginoffset + real_size) - tell())) @@ -311,7 +312,7 @@ def _tree_entry_to_baseindexentry(tree_entry: 'TreeCacheTup', stage: int) -> Bas return BaseIndexEntry((tree_entry[1], tree_entry[0], stage << CE_STAGESHIFT, tree_entry[2])) -def aggressive_tree_merge(odb, tree_shas: Sequence[bytes]) -> List[BaseIndexEntry]: +def aggressive_tree_merge(odb: 'GitCmdObjectDB', tree_shas: Sequence[bytes]) -> List[BaseIndexEntry]: """ :return: list of BaseIndexEntries representing the aggressive merge of the given trees. All valid entries are on stage 0, whereas the conflicting ones are left diff --git a/git/index/typ.py b/git/index/typ.py index bb1a03845..5b2ad5f6f 100644 --- a/git/index/typ.py +++ b/git/index/typ.py @@ -11,7 +11,7 @@ # typing ---------------------------------------------------------------------- -from typing import (List, Sequence, TYPE_CHECKING, Tuple, cast) +from typing import (NamedTuple, Sequence, TYPE_CHECKING, Tuple, Union, cast) from git.types import PathLike @@ -59,7 +59,23 @@ def __call__(self, stage_blob: Blob) -> bool: return False -class BaseIndexEntry(tuple): +class BaseIndexEntryHelper(NamedTuple): + """Typed namedtuple to provide named attribute access for BaseIndexEntry. + Needed to allow overriding __new__ in child class to preserve backwards compat.""" + mode: int + binsha: bytes + flags: int + path: PathLike + ctime_bytes: bytes = pack(">LL", 0, 0) + mtime_bytes: bytes = pack(">LL", 0, 0) + dev: int = 0 + inode: int = 0 + uid: int = 0 + gid: int = 0 + size: int = 0 + + +class BaseIndexEntry(BaseIndexEntryHelper): """Small Brother of an index entry which can be created to describe changes done to the index in which case plenty of additional information is not required. @@ -68,26 +84,22 @@ class BaseIndexEntry(tuple): expecting a BaseIndexEntry can also handle full IndexEntries even if they use numeric indices for performance reasons. """ + def __new__(cls, inp_tuple: Union[Tuple[int, bytes, int, PathLike], + Tuple[int, bytes, int, PathLike, bytes, bytes, int, int, int, int, int]] + ) -> 'BaseIndexEntry': + """Override __new__ to allow construction from a tuple for backwards compatibility """ + return super().__new__(cls, *inp_tuple) + def __str__(self) -> str: return "%o %s %i\t%s" % (self.mode, self.hexsha, self.stage, self.path) def __repr__(self) -> str: return "(%o, %s, %i, %s)" % (self.mode, self.hexsha, self.stage, self.path) - @property - def mode(self) -> int: - """ File Mode, compatible to stat module constants """ - return self[0] - - @property - def binsha(self) -> bytes: - """binary sha of the blob """ - return self[1] - @property def hexsha(self) -> str: """hex version of our sha""" - return b2a_hex(self[1]).decode('ascii') + return b2a_hex(self.binsha).decode('ascii') @property def stage(self) -> int: @@ -100,17 +112,7 @@ def stage(self) -> int: :note: For more information, see http://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html """ - return (self[2] & CE_STAGEMASK) >> CE_STAGESHIFT - - @property - def path(self) -> str: - """:return: our path relative to the repository working tree root""" - return self[3] - - @property - def flags(self) -> List[str]: - """:return: flags stored with this entry""" - return self[2] + return (self.flags & CE_STAGEMASK) >> CE_STAGESHIFT @classmethod def from_blob(cls, blob: Blob, stage: int = 0) -> 'BaseIndexEntry': @@ -136,40 +138,15 @@ def ctime(self) -> Tuple[int, int]: :return: Tuple(int_time_seconds_since_epoch, int_nano_seconds) of the file's creation time""" - return cast(Tuple[int, int], unpack(">LL", self[4])) + return cast(Tuple[int, int], unpack(">LL", self.ctime_bytes)) @property def mtime(self) -> Tuple[int, int]: """See ctime property, but returns modification time """ - return cast(Tuple[int, int], unpack(">LL", self[5])) - - @property - def dev(self) -> int: - """ Device ID """ - return self[6] - - @property - def inode(self) -> int: - """ Inode ID """ - return self[7] - - @property - def uid(self) -> int: - """ User ID """ - return self[8] - - @property - def gid(self) -> int: - """ Group ID """ - return self[9] - - @property - def size(self) -> int: - """:return: Uncompressed size of the blob """ - return self[10] + return cast(Tuple[int, int], unpack(">LL", self.mtime_bytes)) @classmethod - def from_base(cls, base): + def from_base(cls, base: 'BaseIndexEntry') -> 'IndexEntry': """ :return: Minimal entry as created from the given BaseIndexEntry instance. From d812818cb20c39e0bb5609186214ea4bcc18c047 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 24 Jul 2021 22:05:06 +0100 Subject: [PATCH 0674/2375] Rmv with_metaclass shim, make section constraint generic wrt its configparser type --- .flake8 | 2 +- git/compat.py | 16 ---------- git/config.py | 55 +++++++++++++++-------------------- git/index/typ.py | 3 +- git/objects/submodule/base.py | 14 ++++----- git/objects/submodule/util.py | 2 +- git/remote.py | 3 +- git/repo/base.py | 6 ++-- 8 files changed, 41 insertions(+), 60 deletions(-) diff --git a/.flake8 b/.flake8 index 3cf342f93..2f9e6ed27 100644 --- a/.flake8 +++ b/.flake8 @@ -20,7 +20,7 @@ ignore = E265,E266,E731,E704, W293, W504, ANN0 ANN1 ANN2, TC002, - # TC0, TC1, TC2 + TC0, TC1, TC2 # B, A, D, diff --git a/git/compat.py b/git/compat.py index 7a0a15d23..b3b6ab813 100644 --- a/git/compat.py +++ b/git/compat.py @@ -97,19 +97,3 @@ def win_encode(s: Optional[AnyStr]) -> Optional[bytes]: elif s is not None: raise TypeError('Expected bytes or text, but got %r' % (s,)) return None - - -# type: ignore ## mypy cannot understand dynamic class creation -def with_metaclass(meta: Type[Any], *bases: Any) -> TBD: - """copied from https://github.com/Byron/bcore/blob/master/src/python/butility/future.py#L15""" - - class metaclass(meta): # type: ignore - __call__ = type.__call__ - __init__ = type.__init__ # type: ignore - - def __new__(cls, name: str, nbases: Optional[Tuple[int, ...]], d: Dict[str, Any]) -> TBD: - if nbases is None: - return type.__new__(cls, name, (), d) - return meta(name, bases, d) - - return metaclass(meta.__name__ + 'Helper', None, {}) # type: ignore diff --git a/git/config.py b/git/config.py index b25707b27..76200f310 100644 --- a/git/config.py +++ b/git/config.py @@ -14,12 +14,10 @@ import os import re import fnmatch -from collections import OrderedDict from git.compat import ( defenc, force_text, - with_metaclass, is_win, ) @@ -31,15 +29,16 @@ # typing------------------------------------------------------- -from typing import (Any, Callable, IO, List, Dict, Sequence, - TYPE_CHECKING, Tuple, Union, cast, overload) +from typing import (Any, Callable, Generic, IO, List, Dict, Sequence, + TYPE_CHECKING, Tuple, TypeVar, Union, cast, overload) -from git.types import Lit_config_levels, ConfigLevels_Tup, PathLike, TBD, assert_never +from git.types import Lit_config_levels, ConfigLevels_Tup, PathLike, TBD, assert_never, _T if TYPE_CHECKING: from git.repo.base import Repo from io import BytesIO +T_ConfigParser = TypeVar('T_ConfigParser', bound='GitConfigParser') # ------------------------------------------------------------- __all__ = ('GitConfigParser', 'SectionConstraint') @@ -61,7 +60,6 @@ class MetaParserBuilder(abc.ABCMeta): - """Utlity class wrapping base-class methods into decorators that assure read-only properties""" def __new__(cls, name: str, bases: TBD, clsdict: Dict[str, Any]) -> TBD: """ @@ -115,7 +113,7 @@ def flush_changes(self, *args: Any, **kwargs: Any) -> Any: return flush_changes -class SectionConstraint(object): +class SectionConstraint(Generic[T_ConfigParser]): """Constrains a ConfigParser to only option commands which are constrained to always use the section we have been initialized with. @@ -128,7 +126,7 @@ class SectionConstraint(object): _valid_attrs_ = ("get_value", "set_value", "get", "set", "getint", "getfloat", "getboolean", "has_option", "remove_section", "remove_option", "options") - def __init__(self, config: 'GitConfigParser', section: str) -> None: + def __init__(self, config: T_ConfigParser, section: str) -> None: self._config = config self._section_name = section @@ -149,7 +147,7 @@ def _call_config(self, method: str, *args: Any, **kwargs: Any) -> Any: return getattr(self._config, method)(self._section_name, *args, **kwargs) @property - def config(self) -> 'GitConfigParser': + def config(self) -> T_ConfigParser: """return: Configparser instance we constrain""" return self._config @@ -157,7 +155,7 @@ def release(self) -> None: """Equivalent to GitConfigParser.release(), which is called on our underlying parser instance""" return self._config.release() - def __enter__(self) -> 'SectionConstraint': + def __enter__(self) -> 'SectionConstraint[T_ConfigParser]': self._config.__enter__() return self @@ -165,10 +163,10 @@ def __exit__(self, exception_type: str, exception_value: str, traceback: str) -> self._config.__exit__(exception_type, exception_value, traceback) -class _OMD(OrderedDict): +class _OMD(Dict[str, List[_T]]): """Ordered multi-dict.""" - def __setitem__(self, key: str, value: Any) -> None: + def __setitem__(self, key: str, value: _T) -> None: # type: ignore[override] super(_OMD, self).__setitem__(key, [value]) def add(self, key: str, value: Any) -> None: @@ -177,7 +175,7 @@ def add(self, key: str, value: Any) -> None: return None super(_OMD, self).__getitem__(key).append(value) - def setall(self, key: str, values: Any) -> None: + def setall(self, key: str, values: List[_T]) -> None: super(_OMD, self).__setitem__(key, values) def __getitem__(self, key: str) -> Any: @@ -194,25 +192,17 @@ def setlast(self, key: str, value: Any) -> None: prior = super(_OMD, self).__getitem__(key) prior[-1] = value - @overload - def get(self, key: str, default: None = ...) -> None: - ... - - @overload - def get(self, key: str, default: Any = ...) -> Any: - ... - - def get(self, key: str, default: Union[Any, None] = None) -> Union[Any, None]: - return super(_OMD, self).get(key, [default])[-1] + def get(self, key: str, default: Union[_T, None] = None) -> Union[_T, None]: # type: ignore + return super(_OMD, self).get(key, [default])[-1] # type: ignore - def getall(self, key: str) -> Any: + def getall(self, key: str) -> List[_T]: return super(_OMD, self).__getitem__(key) - def items(self) -> List[Tuple[str, Any]]: # type: ignore[override] + def items(self) -> List[Tuple[str, _T]]: # type: ignore[override] """List of (key, last value for key).""" return [(k, self[k]) for k in self] - def items_all(self) -> List[Tuple[str, List[Any]]]: + def items_all(self) -> List[Tuple[str, List[_T]]]: """List of (key, list of values for key).""" return [(k, self.getall(k)) for k in self] @@ -238,7 +228,7 @@ def get_config_path(config_level: Lit_config_levels) -> str: assert_never(config_level, ValueError(f"Invalid configuration level: {config_level!r}")) -class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser)): # type: ignore ## mypy does not understand dynamic class creation # noqa: E501 +class GitConfigParser(cp.RawConfigParser, metaclass=MetaParserBuilder): """Implements specifics required to read git style configuration files. @@ -298,7 +288,10 @@ def __init__(self, file_or_files: Union[None, PathLike, 'BytesIO', Sequence[Unio :param repo: Reference to repository to use if [includeIf] sections are found in configuration files. """ - cp.RawConfigParser.__init__(self, dict_type=_OMD) + cp.RawConfigParser.__init__(self, dict_type=_OMD) # type: ignore[arg-type] + self._dict: Callable[..., _OMD] # type: ignore[assignment] # mypy/typeshed bug + self._defaults: _OMD # type: ignore[assignment] # mypy/typeshed bug + self._sections: _OMD # type: ignore[assignment] # mypy/typeshed bug # Used in python 3, needs to stay in sync with sections for underlying implementation to work if not hasattr(self, '_proxies'): @@ -424,7 +417,7 @@ def string_decode(v: str) -> str: # is it a section header? mo = self.SECTCRE.match(line.strip()) if not is_multi_line and mo: - sectname = mo.group('header').strip() + sectname: str = mo.group('header').strip() if sectname in self._sections: cursect = self._sections[sectname] elif sectname == cp.DEFAULTSECT: @@ -535,7 +528,7 @@ def _included_paths(self) -> List[Tuple[str, str]]: return paths - def read(self) -> None: + def read(self) -> None: # type: ignore[override] """Reads the data stored in the files we have been initialized with. It will ignore files that cannot be read, possibly leaving an empty configuration @@ -626,7 +619,7 @@ def write_section(name, section_dict): for name, value in self._sections.items(): write_section(name, value) - def items(self, section_name: str) -> List[Tuple[str, str]]: + def items(self, section_name: str) -> List[Tuple[str, str]]: # type: ignore[override] """:return: list((option, value), ...) pairs of all items in the given section""" return [(k, v) for k, v in super(GitConfigParser, self).items(section_name) if k != '__name__'] diff --git a/git/index/typ.py b/git/index/typ.py index 5b2ad5f6f..46f1b0779 100644 --- a/git/index/typ.py +++ b/git/index/typ.py @@ -82,7 +82,8 @@ class BaseIndexEntry(BaseIndexEntryHelper): As the first 4 data members match exactly to the IndexEntry type, methods expecting a BaseIndexEntry can also handle full IndexEntries even if they - use numeric indices for performance reasons. """ + use numeric indices for performance reasons. + """ def __new__(cls, inp_tuple: Union[Tuple[int, bytes, int, PathLike], Tuple[int, bytes, int, PathLike, bytes, bytes, int, int, int, int, int]] diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index d5ba118f6..29212167c 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -965,13 +965,12 @@ def remove(self, module: bool = True, force: bool = False, # now git config - need the config intact, otherwise we can't query # information anymore - writer: Union[GitConfigParser, SectionConstraint] - with self.repo.config_writer() as writer: - writer.remove_section(sm_section(self.name)) + with self.repo.config_writer() as gcp_writer: + gcp_writer.remove_section(sm_section(self.name)) - with self.config_writer() as writer: - writer.remove_section() + with self.config_writer() as sc_writer: + sc_writer.remove_section() # END delete configuration return self @@ -1024,7 +1023,8 @@ def set_parent_commit(self, commit: Union[Commit_ish, None], check: bool = True) return self @unbare_repo - def config_writer(self, index: Union['IndexFile', None] = None, write: bool = True) -> SectionConstraint: + def config_writer(self, index: Union['IndexFile', None] = None, write: bool = True + ) -> SectionConstraint['SubmoduleConfigParser']: """:return: a config writer instance allowing you to read and write the data belonging to this submodule into the .gitmodules file. @@ -1201,7 +1201,7 @@ def name(self) -> str: """ return self._name - def config_reader(self) -> SectionConstraint: + def config_reader(self) -> SectionConstraint[SubmoduleConfigParser]: """ :return: ConfigReader instance which allows you to qurey the configuration values of this submodule, as provided by the .gitmodules file diff --git a/git/objects/submodule/util.py b/git/objects/submodule/util.py index a776af889..cc1cd60a2 100644 --- a/git/objects/submodule/util.py +++ b/git/objects/submodule/util.py @@ -100,7 +100,7 @@ def flush_to_index(self) -> None: #} END interface #{ Overridden Methods - def write(self) -> None: + def write(self) -> None: # type: ignore[override] rval: None = super(SubmoduleConfigParser, self).write() self.flush_to_index() return rval diff --git a/git/remote.py b/git/remote.py index 7da466e6d..11007cb68 100644 --- a/git/remote.py +++ b/git/remote.py @@ -23,6 +23,7 @@ ) from .config import ( + GitConfigParser, SectionConstraint, cp, ) @@ -911,7 +912,7 @@ def push(self, refspec: Union[str, List[str], None] = None, return self._get_push_info(proc, progress) @ property - def config_reader(self) -> SectionConstraint: + def config_reader(self) -> SectionConstraint[GitConfigParser]: """ :return: GitConfigParser compatible object able to read options for only our remote. diff --git a/git/repo/base.py b/git/repo/base.py index 038517562..a57172c6c 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -482,7 +482,8 @@ def _get_config_path(self, config_level: Lit_config_levels) -> str: raise ValueError("Invalid configuration level: %r" % config_level) - def config_reader(self, config_level: Optional[Lit_config_levels] = None) -> GitConfigParser: + def config_reader(self, config_level: Optional[Lit_config_levels] = None + ) -> GitConfigParser: """ :return: GitConfigParser allowing to read the full git configuration, but not to write it @@ -504,7 +505,8 @@ def config_reader(self, config_level: Optional[Lit_config_levels] = None) -> Git files = [self._get_config_path(config_level)] return GitConfigParser(files, read_only=True, repo=self) - def config_writer(self, config_level: Lit_config_levels = "repository") -> GitConfigParser: + def config_writer(self, config_level: Lit_config_levels = "repository" + ) -> GitConfigParser: """ :return: GitConfigParser allowing to write values of the specified configuration file level. From cb5688d65f4f7bc5735e5403e71094745e9a2a0b Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 24 Jul 2021 22:15:42 +0100 Subject: [PATCH 0675/2375] Readd with_metaclass shim --- git/compat.py | 16 ++++++++++++++++ git/config.py | 3 ++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/git/compat.py b/git/compat.py index b3b6ab813..7a0a15d23 100644 --- a/git/compat.py +++ b/git/compat.py @@ -97,3 +97,19 @@ def win_encode(s: Optional[AnyStr]) -> Optional[bytes]: elif s is not None: raise TypeError('Expected bytes or text, but got %r' % (s,)) return None + + +# type: ignore ## mypy cannot understand dynamic class creation +def with_metaclass(meta: Type[Any], *bases: Any) -> TBD: + """copied from https://github.com/Byron/bcore/blob/master/src/python/butility/future.py#L15""" + + class metaclass(meta): # type: ignore + __call__ = type.__call__ + __init__ = type.__init__ # type: ignore + + def __new__(cls, name: str, nbases: Optional[Tuple[int, ...]], d: Dict[str, Any]) -> TBD: + if nbases is None: + return type.__new__(cls, name, (), d) + return meta(name, bases, d) + + return metaclass(meta.__name__ + 'Helper', None, {}) # type: ignore diff --git a/git/config.py b/git/config.py index 76200f310..b0ac8ff52 100644 --- a/git/config.py +++ b/git/config.py @@ -19,6 +19,7 @@ defenc, force_text, is_win, + with_metaclass, ) from git.util import LockFile @@ -228,7 +229,7 @@ def get_config_path(config_level: Lit_config_levels) -> str: assert_never(config_level, ValueError(f"Invalid configuration level: {config_level!r}")) -class GitConfigParser(cp.RawConfigParser, metaclass=MetaParserBuilder): +class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser)): # type: ignore ## mypy does not understand dynamic class creation # noqa: E501 """Implements specifics required to read git style configuration files. From 77ee247a9018c6964642cf31a2690f3a4367649c Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 24 Jul 2021 22:19:57 +0100 Subject: [PATCH 0676/2375] change ordereddict to typing.ordereddict --- git/config.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/git/config.py b/git/config.py index b0ac8ff52..17696fc5c 100644 --- a/git/config.py +++ b/git/config.py @@ -7,6 +7,7 @@ configuration files""" import abc +from typing import OrderedDict from functools import wraps import inspect from io import BufferedReader, IOBase @@ -164,7 +165,7 @@ def __exit__(self, exception_type: str, exception_value: str, traceback: str) -> self._config.__exit__(exception_type, exception_value, traceback) -class _OMD(Dict[str, List[_T]]): +class _OMD(OrderedDict[str, List[_T]]): """Ordered multi-dict.""" def __setitem__(self, key: str, value: _T) -> None: # type: ignore[override] From 04e181f0a41180370d65d46aad417fb59e1c1c7b Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 24 Jul 2021 22:24:24 +0100 Subject: [PATCH 0677/2375] put ordereddict behind py version guard --- git/types.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/git/types.py b/git/types.py index 05c5b3453..25608006b 100644 --- a/git/types.py +++ b/git/types.py @@ -8,9 +8,10 @@ NamedTuple, TYPE_CHECKING, TypeVar) # noqa: F401 if sys.version_info[:2] >= (3, 8): - from typing import Final, Literal, SupportsIndex, TypedDict, Protocol, runtime_checkable # noqa: F401 + from typing import Final, Literal, SupportsIndex, TypedDict, Protocol, runtime_checkable, OrderedDict # noqa: F401 else: - from typing_extensions import Final, Literal, SupportsIndex, TypedDict, Protocol, runtime_checkable # noqa: F401 + from typing_extensions import (Final, Literal, SupportsIndex, # noqa: F401 + TypedDict, Protocol, runtime_checkable, OrderedDict) # noqa: F401 # if sys.version_info[:2] >= (3, 10): # from typing import TypeGuard # noqa: F401 From 981cfa8d6161d83383610733cf86487ced7a4e6c Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 24 Jul 2021 22:25:22 +0100 Subject: [PATCH 0678/2375] import ordereddict from types --- git/config.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/git/config.py b/git/config.py index 17696fc5c..c43032700 100644 --- a/git/config.py +++ b/git/config.py @@ -7,7 +7,6 @@ configuration files""" import abc -from typing import OrderedDict from functools import wraps import inspect from io import BufferedReader, IOBase @@ -34,7 +33,7 @@ from typing import (Any, Callable, Generic, IO, List, Dict, Sequence, TYPE_CHECKING, Tuple, TypeVar, Union, cast, overload) -from git.types import Lit_config_levels, ConfigLevels_Tup, PathLike, TBD, assert_never, _T +from git.types import Lit_config_levels, ConfigLevels_Tup, OrderedDict, PathLike, TBD, assert_never, _T if TYPE_CHECKING: from git.repo.base import Repo From 6d6aae11af2f1acc6aa384ed43e6897da8fe7057 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 24 Jul 2021 22:34:20 +0100 Subject: [PATCH 0679/2375] fix rdereddict, cannot subclass typing-extensiosn version --- git/config.py | 14 ++++++++++++-- git/types.py | 4 ++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/git/config.py b/git/config.py index c43032700..51744bfe6 100644 --- a/git/config.py +++ b/git/config.py @@ -6,6 +6,7 @@ """Module containing module parser implementation able to properly read and write configuration files""" +import sys import abc from functools import wraps import inspect @@ -33,13 +34,21 @@ from typing import (Any, Callable, Generic, IO, List, Dict, Sequence, TYPE_CHECKING, Tuple, TypeVar, Union, cast, overload) -from git.types import Lit_config_levels, ConfigLevels_Tup, OrderedDict, PathLike, TBD, assert_never, _T +from git.types import Lit_config_levels, ConfigLevels_Tup, PathLike, TBD, assert_never, _T if TYPE_CHECKING: from git.repo.base import Repo from io import BytesIO T_ConfigParser = TypeVar('T_ConfigParser', bound='GitConfigParser') + +if sys.version_info[:2] < (3, 7): + from collections import OrderedDict + OrderedDict_OMD = OrderedDict +else: + from typing import OrderedDict + OrderedDict_OMD = OrderedDict[str, List[_T]] + # ------------------------------------------------------------- __all__ = ('GitConfigParser', 'SectionConstraint') @@ -164,7 +173,7 @@ def __exit__(self, exception_type: str, exception_value: str, traceback: str) -> self._config.__exit__(exception_type, exception_value, traceback) -class _OMD(OrderedDict[str, List[_T]]): +class _OMD(OrderedDict_OMD): """Ordered multi-dict.""" def __setitem__(self, key: str, value: _T) -> None: # type: ignore[override] @@ -617,6 +626,7 @@ def write_section(name, section_dict): if self._defaults: write_section(cp.DEFAULTSECT, self._defaults) + value: TBD for name, value in self._sections.items(): write_section(name, value) diff --git a/git/types.py b/git/types.py index 25608006b..ccaffef3e 100644 --- a/git/types.py +++ b/git/types.py @@ -8,10 +8,10 @@ NamedTuple, TYPE_CHECKING, TypeVar) # noqa: F401 if sys.version_info[:2] >= (3, 8): - from typing import Final, Literal, SupportsIndex, TypedDict, Protocol, runtime_checkable, OrderedDict # noqa: F401 + from typing import Final, Literal, SupportsIndex, TypedDict, Protocol, runtime_checkable # noqa: F401 else: from typing_extensions import (Final, Literal, SupportsIndex, # noqa: F401 - TypedDict, Protocol, runtime_checkable, OrderedDict) # noqa: F401 + TypedDict, Protocol, runtime_checkable) # noqa: F401 # if sys.version_info[:2] >= (3, 10): # from typing import TypeGuard # noqa: F401 From be7bb868279f61d55594059690904baabe30503c Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 24 Jul 2021 22:38:25 +0100 Subject: [PATCH 0680/2375] Rmv with_metclass() shim again --- git/config.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/git/config.py b/git/config.py index 51744bfe6..c4b26ba63 100644 --- a/git/config.py +++ b/git/config.py @@ -20,7 +20,6 @@ defenc, force_text, is_win, - with_metaclass, ) from git.util import LockFile @@ -238,7 +237,7 @@ def get_config_path(config_level: Lit_config_levels) -> str: assert_never(config_level, ValueError(f"Invalid configuration level: {config_level!r}")) -class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser)): # type: ignore ## mypy does not understand dynamic class creation # noqa: E501 +class GitConfigParser(cp.RawConfigParser, metaclass=MetaParserBuilder): """Implements specifics required to read git style configuration files. From 717bfe9f7aa9c64e585e1202da03b1d72dededb8 Mon Sep 17 00:00:00 2001 From: Igor Lakhtenkov Date: Tue, 27 Jul 2021 11:41:16 +0300 Subject: [PATCH 0681/2375] Added support of spaces for clone multi_options --- git/repo/base.py | 3 ++- test/test_repo.py | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index a57172c6c..f8a1689a1 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -6,6 +6,7 @@ import logging import os import re +import shlex import warnings from gitdb.db.loose import LooseObjectDB @@ -1043,7 +1044,7 @@ def _clone(cls, git: 'Git', url: PathLike, path: PathLike, odb_default_type: Typ kwargs['separate_git_dir'] = Git.polish_url(sep_dir) multi = None if multi_options: - multi = ' '.join(multi_options).split(' ') + multi = shlex.split(' '.join(multi_options)) proc = git.clone(multi, Git.polish_url(str(url)), clone_path, with_extended_output=True, as_process=True, v=True, universal_newlines=True, **add_progress(kwargs, git, progress)) if progress: diff --git a/test/test_repo.py b/test/test_repo.py index 8aced94d4..6d6176090 100644 --- a/test/test_repo.py +++ b/test/test_repo.py @@ -218,11 +218,13 @@ def test_clone_from_pathlib_withConfig(self, rw_dir): cloned = Repo.clone_from(original_repo.git_dir, pathlib.Path(rw_dir) / "clone_pathlib_withConfig", multi_options=["--recurse-submodules=repo", "--config core.filemode=false", - "--config submodule.repo.update=checkout"]) + "--config submodule.repo.update=checkout", + "--config filter.lfs.clean='git-lfs clean -- %f'"]) self.assertEqual(cloned.config_reader().get_value('submodule', 'active'), 'repo') self.assertEqual(cloned.config_reader().get_value('core', 'filemode'), False) self.assertEqual(cloned.config_reader().get_value('submodule "repo"', 'update'), 'checkout') + self.assertEqual(cloned.config_reader().get_value('filter "lfs"', 'clean'), 'git-lfs clean -- %f') def test_clone_from_with_path_contains_unicode(self): with tempfile.TemporaryDirectory() as tmpdir: From 8530a8b895d47d234ccaffeca0b866d75fa528b0 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 28 Jul 2021 09:54:50 +0800 Subject: [PATCH 0682/2375] prepare next patch release --- VERSION | 2 +- doc/source/changes.rst | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index a52a6f1aa..589ccc9b9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.19 +3.1.20 diff --git a/doc/source/changes.rst b/doc/source/changes.rst index fd3fc60dd..1d87554cf 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,7 +2,17 @@ Changelog ========= -3.1.19 +3.1.20 +====== + +* This is the second typed release with a lot of improvements under the hood. + * Tracking issue: https://github.com/gitpython-developers/GitPython/issues/1095 + +See the following for details: +https://github.com/gitpython-developers/gitpython/milestone/52?closed=1 + + +3.1.19 (YANKED) ====== * This is the second typed release with a lot of improvements under the hood. From 3825cb781ec13db9d4251bb9b0f24d62eecfd0cc Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 28 Jul 2021 10:00:07 +0800 Subject: [PATCH 0683/2375] fix docs RST!!!! --- doc/source/changes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 1d87554cf..09da1eb27 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -13,7 +13,7 @@ https://github.com/gitpython-developers/gitpython/milestone/52?closed=1 3.1.19 (YANKED) -====== +=============== * This is the second typed release with a lot of improvements under the hood. * Tracking issue: https://github.com/gitpython-developers/GitPython/issues/1095 From 005f81ae3daeef3575cba0fd9deb84d15eca5835 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 28 Jul 2021 14:12:11 +0800 Subject: [PATCH 0684/2375] More specific version check for ordered dict type Related to https://github.com/gitpython-developers/GitPython/issues/1095#issuecomment-888032424 --- git/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/config.py b/git/config.py index c4b26ba63..78b93c6f9 100644 --- a/git/config.py +++ b/git/config.py @@ -41,7 +41,7 @@ T_ConfigParser = TypeVar('T_ConfigParser', bound='GitConfigParser') -if sys.version_info[:2] < (3, 7): +if sys.version_info[:3] < (3, 7, 2): from collections import OrderedDict OrderedDict_OMD = OrderedDict else: From 76c1c8dd13806d88231c110c47468c71d4b370f1 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 28 Jul 2021 14:14:58 +0800 Subject: [PATCH 0685/2375] Revert "More specific version check for ordered dict type" This reverts commit 005f81ae3daeef3575cba0fd9deb84d15eca5835. --- git/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/config.py b/git/config.py index 78b93c6f9..c4b26ba63 100644 --- a/git/config.py +++ b/git/config.py @@ -41,7 +41,7 @@ T_ConfigParser = TypeVar('T_ConfigParser', bound='GitConfigParser') -if sys.version_info[:3] < (3, 7, 2): +if sys.version_info[:2] < (3, 7): from collections import OrderedDict OrderedDict_OMD = OrderedDict else: From 3347c00137e45a8b8b512afab242703892a1a1d2 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 15:57:22 +0100 Subject: [PATCH 0686/2375] change ordereddict guard, add type: ignore --- git/config.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/git/config.py b/git/config.py index c4b26ba63..77fa3045c 100644 --- a/git/config.py +++ b/git/config.py @@ -41,12 +41,17 @@ T_ConfigParser = TypeVar('T_ConfigParser', bound='GitConfigParser') -if sys.version_info[:2] < (3, 7): +if sys.version_info[:2] < (3, 7, 2): + # typing.Ordereddict not added until py 3.7.2 from collections import OrderedDict OrderedDict_OMD = OrderedDict +elif sys.version_info[:2] >= (3, 10): + # then deprecated from 3.10 as collections.OrderedDict was made generic + from collections import OrderedDict + OrderedDict_OMD = OrderedDict[str, List[_T]] else: from typing import OrderedDict - OrderedDict_OMD = OrderedDict[str, List[_T]] + OrderedDict_OMD = OrderedDict[str, List[_T]] # type: ignore[assignment, misc] # ------------------------------------------------------------- From 28fdd30a579362a1121fa7e81d8051098b31f2d1 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 16:26:35 +0100 Subject: [PATCH 0687/2375] Fix SymbolicReference reference typing --- git/refs/head.py | 2 +- git/refs/symbolic.py | 6 ++++-- git/repo/base.py | 5 ++--- test/test_refs.py | 9 +++++++-- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/git/refs/head.py b/git/refs/head.py index 338efce9f..4b9bf33cc 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -142,7 +142,7 @@ def delete(cls, repo: 'Repo', *heads: 'Head', **kwargs: Any): flag = "-D" repo.git.branch(flag, *heads) - def set_tracking_branch(self, remote_reference: 'RemoteReference') -> 'Head': + def set_tracking_branch(self, remote_reference: Union['RemoteReference', None]) -> 'Head': """ Configure this branch to track the given remote reference. This will alter this branch's configuration accordingly. diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 0e9dad5cc..9a5a44794 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -28,6 +28,7 @@ if TYPE_CHECKING: from git.repo import Repo + from git.refs import Reference T_References = TypeVar('T_References', bound='SymbolicReference') @@ -356,8 +357,9 @@ def set_reference(self, ref, logmsg=None): return self # aliased reference - reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") - ref: Union[Commit_ish] = reference # type: ignore # Union[str, Commit_ish, SymbolicReference] + reference: Union[Commit_ish, 'Reference'] = property( # type: ignore + _get_reference, set_reference, doc="Returns the Reference we point to") + ref = reference def is_valid(self): """ diff --git a/git/repo/base.py b/git/repo/base.py index f8a1689a1..74f27b2e1 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -422,7 +422,7 @@ def _to_full_tag_path(path): def create_head(self, path: PathLike, commit: str = 'HEAD', force: bool = False, logmsg: Optional[str] = None - ) -> 'SymbolicReference': + ) -> 'Head': """Create a new head within the repository. For more documentation, please see the Head.create method. @@ -788,9 +788,8 @@ def ignored(self, *paths: PathLike) -> List[PathLike]: return proc.replace("\\\\", "\\").replace('"', "").split("\n") @property - def active_branch(self) -> 'SymbolicReference': + def active_branch(self) -> 'HEAD': """The name of the currently active branch. - :return: Head to the active branch""" return self.head.reference diff --git a/test/test_refs.py b/test/test_refs.py index 1315f885f..6f158bee2 100644 --- a/test/test_refs.py +++ b/test/test_refs.py @@ -4,6 +4,7 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php +from git.repo.base import Repo from itertools import chain from git import ( @@ -125,11 +126,15 @@ def test_heads(self, rwrepo): gp_tracking_branch = rwrepo.create_head('gp_tracking#123') special_name_remote_ref = rwrepo.remotes[0].refs[special_name] # get correct type gp_tracking_branch.set_tracking_branch(special_name_remote_ref) - assert gp_tracking_branch.tracking_branch().path == special_name_remote_ref.path + TBranch = gp_tracking_branch.tracking_branch() + if TBranch is not None: + assert TBranch.path == special_name_remote_ref.path git_tracking_branch = rwrepo.create_head('git_tracking#123') rwrepo.git.branch('-u', special_name_remote_ref.name, git_tracking_branch.name) - assert git_tracking_branch.tracking_branch().name == special_name_remote_ref.name + TBranch = gp_tracking_branch.tracking_branch() + if TBranch is not None: + assert TBranch.name == special_name_remote_ref.name # END for each head # verify REFLOG gets altered From 3abc837c7c1f3241524d788933c287ec1a804b7e Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 16:35:38 +0100 Subject: [PATCH 0688/2375] Add another type ignore for Ordereddict --- git/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/config.py b/git/config.py index 77fa3045c..def8ab8c4 100644 --- a/git/config.py +++ b/git/config.py @@ -41,7 +41,7 @@ T_ConfigParser = TypeVar('T_ConfigParser', bound='GitConfigParser') -if sys.version_info[:2] < (3, 7, 2): +if sys.version_info[:3] < (3, 7, 2): # typing.Ordereddict not added until py 3.7.2 from collections import OrderedDict OrderedDict_OMD = OrderedDict @@ -50,7 +50,7 @@ from collections import OrderedDict OrderedDict_OMD = OrderedDict[str, List[_T]] else: - from typing import OrderedDict + from typing import OrderedDict # type: ignore # until 3.6 dropped OrderedDict_OMD = OrderedDict[str, List[_T]] # type: ignore[assignment, misc] # ------------------------------------------------------------- From 679142481d94c779d46f1e347604ec9ab24b05f3 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 16:41:14 +0100 Subject: [PATCH 0689/2375] Rmv py 3.10 check for typing.Ordereddict - its deprecated then, but will still work until 3.12 --- git/config.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/git/config.py b/git/config.py index def8ab8c4..ad02b4373 100644 --- a/git/config.py +++ b/git/config.py @@ -43,12 +43,8 @@ if sys.version_info[:3] < (3, 7, 2): # typing.Ordereddict not added until py 3.7.2 - from collections import OrderedDict - OrderedDict_OMD = OrderedDict -elif sys.version_info[:2] >= (3, 10): - # then deprecated from 3.10 as collections.OrderedDict was made generic - from collections import OrderedDict - OrderedDict_OMD = OrderedDict[str, List[_T]] + from collections import OrderedDict # type: ignore # until 3.6 dropped + OrderedDict_OMD = OrderedDict # type: ignore # until 3.6 dropped else: from typing import OrderedDict # type: ignore # until 3.6 dropped OrderedDict_OMD = OrderedDict[str, List[_T]] # type: ignore[assignment, misc] From c464e33793d0839666233883212018dbbcdf1e09 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 17:19:10 +0100 Subject: [PATCH 0690/2375] Fix some SymbolicReference types --- git/refs/symbolic.py | 80 +++++++++++++++++++++----------------------- git/refs/tag.py | 2 +- git/repo/base.py | 2 +- test/test_refs.py | 1 - 4 files changed, 41 insertions(+), 44 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 9a5a44794..86dc04e10 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -1,4 +1,3 @@ -from git.types import PathLike import os from git.compat import defenc @@ -17,13 +16,11 @@ BadName ) -import os.path as osp - from .log import RefLog # typing ------------------------------------------------------------------ -from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING # NOQA +from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING, cast # NOQA from git.types import Commit_ish, PathLike, TBD, Literal # NOQA if TYPE_CHECKING: @@ -38,9 +35,9 @@ __all__ = ["SymbolicReference"] -def _git_dir(repo, path): +def _git_dir(repo: 'Repo', path: PathLike) -> PathLike: """ Find the git dir that's appropriate for the path""" - name = "%s" % (path,) + name = f"{path}" if name in ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'index', 'logs']: return repo.git_dir return repo.common_dir @@ -60,46 +57,46 @@ class SymbolicReference(object): _remote_common_path_default = "refs/remotes" _id_attribute_ = "name" - def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False): + def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False) -> None: self.repo = repo self.path = str(path) def __str__(self) -> str: return self.path - def __repr__(self): + def __repr__(self) -> str: return '' % (self.__class__.__name__, self.path) - def __eq__(self, other): + def __eq__(self, other) -> bool: if hasattr(other, 'path'): return self.path == other.path return False - def __ne__(self, other): + def __ne__(self, other) -> bool: return not (self == other) def __hash__(self): return hash(self.path) @property - def name(self): + def name(self) -> str: """ :return: In case of symbolic references, the shortest assumable name is the path itself.""" - return self.path + return str(self.path) @property - def abspath(self): + def abspath(self) -> PathLike: return join_path_native(_git_dir(self.repo, self.path), self.path) @classmethod - def _get_packed_refs_path(cls, repo): - return osp.join(repo.common_dir, 'packed-refs') + def _get_packed_refs_path(cls, repo: 'Repo') -> str: + return os.path.join(repo.common_dir, 'packed-refs') @classmethod - def _iter_packed_refs(cls, repo): - """Returns an iterator yielding pairs of sha1/path pairs (as bytes) for the corresponding refs. + def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: + """Returns an iterator yielding pairs of sha1/path pairs for the corresponding refs. :note: The packed refs file will be kept open as long as we iterate""" try: with open(cls._get_packed_refs_path(repo), 'rt', encoding='UTF-8') as fp: @@ -127,7 +124,7 @@ def _iter_packed_refs(cls, repo): if line[0] == '^': continue - yield tuple(line.split(' ', 1)) + yield cast(Tuple[str, str], tuple(line.split(' ', 1))) # END for each line except OSError: return None @@ -138,7 +135,7 @@ def _iter_packed_refs(cls, repo): # alright. @classmethod - def dereference_recursive(cls, repo, ref_path): + def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: """ :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all intermediate references as required @@ -150,14 +147,14 @@ def dereference_recursive(cls, repo, ref_path): # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo, ref_path): + def _get_ref_info_helper(cls, repo: Repo, ref_path: PathLike): """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" - tokens = None + tokens: Union[List[str], Tuple[str, str], None] = None repodir = _git_dir(repo, ref_path) try: - with open(osp.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: + with open(os.path.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: value = fp.read().rstrip() # Don't only split on spaces, but on whitespace, which allows to parse lines like # 60b64ef992065e2600bfef6187a97f92398a9144 branch 'master' of git-server:/path/to/repo @@ -189,7 +186,7 @@ def _get_ref_info_helper(cls, repo, ref_path): raise ValueError("Failed to parse reference information from %r" % ref_path) @classmethod - def _get_ref_info(cls, repo, ref_path): + def _get_ref_info(cls, repo: 'Repo', ref_path: PathLike): """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" @@ -424,21 +421,22 @@ def log_entry(self, index): return RefLog.entry_at(RefLog.path(self), index) @classmethod - def to_full_path(cls, path) -> PathLike: + def to_full_path(cls, path: Union[PathLike, 'SymbolicReference']) -> str: """ :return: string with a full repository-relative path which can be used to initialize a Reference instance, for instance by using ``Reference.from_path``""" if isinstance(path, SymbolicReference): path = path.path - full_ref_path = path + full_ref_path = str(path) if not cls._common_path_default: return full_ref_path - if not path.startswith(cls._common_path_default + "/"): + + if not str(path).startswith(cls._common_path_default + "/"): full_ref_path = '%s/%s' % (cls._common_path_default, path) return full_ref_path @classmethod - def delete(cls, repo, path): + def delete(cls, repo: 'Repo', path: PathLike) -> None: """Delete the reference at the given path :param repo: @@ -449,8 +447,8 @@ def delete(cls, repo, path): or just "myreference", hence 'refs/' is implied. Alternatively the symbolic reference to be deleted""" full_ref_path = cls.to_full_path(path) - abs_path = osp.join(repo.common_dir, full_ref_path) - if osp.exists(abs_path): + abs_path = os.path.join(repo.common_dir, full_ref_path) + if os.path.exists(abs_path): os.remove(abs_path) else: # check packed refs @@ -460,8 +458,8 @@ def delete(cls, repo, path): new_lines = [] made_change = False dropped_last_line = False - for line in reader: - line = line.decode(defenc) + for line_bytes in reader: + line = line_bytes.decode(defenc) _, _, line_ref = line.partition(' ') line_ref = line_ref.strip() # keep line if it is a comment or if the ref to delete is not @@ -491,7 +489,7 @@ def delete(cls, repo, path): # delete the reflog reflog_path = RefLog.path(cls(repo, full_ref_path)) - if osp.isfile(reflog_path): + if os.path.isfile(reflog_path): os.remove(reflog_path) # END remove reflog @@ -504,14 +502,14 @@ def _create(cls, repo, path, resolve, reference, force, logmsg=None): instead""" git_dir = _git_dir(repo, path) full_ref_path = cls.to_full_path(path) - abs_ref_path = osp.join(git_dir, full_ref_path) + abs_ref_path = os.path.join(git_dir, full_ref_path) # figure out target data target = reference if resolve: target = repo.rev_parse(str(reference)) - if not force and osp.isfile(abs_ref_path): + if not force and os.path.isfile(abs_ref_path): target_data = str(target) if isinstance(target, SymbolicReference): target_data = target.path @@ -561,7 +559,7 @@ def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] :note: This does not alter the current HEAD, index or Working Tree""" return cls._create(repo, path, cls._resolve_ref_on_create, reference, force, logmsg) - def rename(self, new_path, force=False): + def rename(self, new_path: str, force: bool = False) -> 'SymbolicReference': """Rename self to a new path :param new_path: @@ -579,9 +577,9 @@ def rename(self, new_path, force=False): if self.path == new_path: return self - new_abs_path = osp.join(_git_dir(self.repo, new_path), new_path) - cur_abs_path = osp.join(_git_dir(self.repo, self.path), self.path) - if osp.isfile(new_abs_path): + new_abs_path = os.path.join(_git_dir(self.repo, new_path), new_path) + cur_abs_path = os.path.join(_git_dir(self.repo, self.path), self.path) + if os.path.isfile(new_abs_path): if not force: # if they point to the same file, its not an error with open(new_abs_path, 'rb') as fd1: @@ -596,8 +594,8 @@ def rename(self, new_path, force=False): os.remove(new_abs_path) # END handle existing target file - dname = osp.dirname(new_abs_path) - if not osp.isdir(dname): + dname = os.path.dirname(new_abs_path) + if not os.path.isdir(dname): os.makedirs(dname) # END create directory @@ -632,7 +630,7 @@ def _iter_items(cls: Type[T_References], repo: 'Repo', common_path: Union[PathLi # read packed refs for _sha, rela_path in cls._iter_packed_refs(repo): - if rela_path.startswith(common_path): + if rela_path.startswith(str(common_path)): rela_paths.add(rela_path) # END relative path matches common path # END packed refs reading diff --git a/git/refs/tag.py b/git/refs/tag.py index 281ce09ad..3aec99fed 100644 --- a/git/refs/tag.py +++ b/git/refs/tag.py @@ -111,7 +111,7 @@ def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] return TagReference(repo, "%s/%s" % (cls._common_path_default, path)) @classmethod - def delete(cls, repo: 'Repo', *tags: 'TagReference') -> None: + def delete(cls, repo: 'Repo', *tags: 'TagReference') -> None: # type: ignore[override] """Delete the given existing tag or tags""" repo.git.tag("-d", *tags) diff --git a/git/repo/base.py b/git/repo/base.py index 74f27b2e1..12efe9c66 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -429,7 +429,7 @@ def create_head(self, path: PathLike, commit: str = 'HEAD', :return: newly created Head Reference""" return Head.create(self, path, commit, logmsg, force) - def delete_head(self, *heads: 'SymbolicReference', **kwargs: Any) -> None: + def delete_head(self, *heads: 'Head', **kwargs: Any) -> None: """Delete the given heads :param kwargs: Additional keyword arguments to be passed to git-branch""" diff --git a/test/test_refs.py b/test/test_refs.py index 6f158bee2..f30d4bdaf 100644 --- a/test/test_refs.py +++ b/test/test_refs.py @@ -4,7 +4,6 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php -from git.repo.base import Repo from itertools import chain from git import ( From 7cf30c1cf4a6494916a162983bdb439388d59ff3 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 17:22:09 +0100 Subject: [PATCH 0691/2375] Fix forwardref --- git/refs/symbolic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 86dc04e10..4919ea835 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -147,7 +147,7 @@ def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo: Repo, ref_path: PathLike): + def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike): """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" From 5b880c0e98e41276de9fc498b25727c149cfcc40 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 17:39:01 +0100 Subject: [PATCH 0692/2375] Fix more missing types in Symbolic.py --- git/refs/symbolic.py | 22 +++++++++++++--------- pyproject.toml | 6 +++--- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 4919ea835..2e8544d39 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -25,7 +25,7 @@ if TYPE_CHECKING: from git.repo import Repo - from git.refs import Reference + from git.refs import Reference, Head, HEAD, TagReference, RemoteReference T_References = TypeVar('T_References', bound='SymbolicReference') @@ -141,13 +141,13 @@ def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: intermediate references as required :param repo: the repository containing the reference at ref_path""" while True: - hexsha, ref_path = cls._get_ref_info(repo, ref_path) + hexsha, _ref_path_out = cls._get_ref_info(repo, ref_path) if hexsha is not None: return hexsha # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike): + def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, PathLike]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" @@ -186,13 +186,14 @@ def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike): raise ValueError("Failed to parse reference information from %r" % ref_path) @classmethod - def _get_ref_info(cls, repo: 'Repo', ref_path: PathLike): + def _get_ref_info(cls, repo: 'Repo', ref_path: PathLike + ) -> Union[Tuple[str, None], Tuple[None, PathLike]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" return cls._get_ref_info_helper(repo, ref_path) - def _get_object(self): + def _get_object(self) -> Commit_ish: """ :return: The object our ref currently refers to. Refs can be cached, they will @@ -201,7 +202,7 @@ def _get_object(self): # Our path will be resolved to the hexsha which will be used accordingly return Object.new_from_sha(self.repo, hex_to_bin(self.dereference_recursive(self.repo, self.path))) - def _get_commit(self): + def _get_commit(self) -> 'Commit': """ :return: Commit object we point to, works for detached and non-detached @@ -216,7 +217,8 @@ def _get_commit(self): # END handle type return obj - def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=None): + def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], + logmsg: Union[str, None] = None) -> None: """As set_object, but restricts the type of object to be a Commit :raise ValueError: If commit is not a Commit object or doesn't point to @@ -243,7 +245,8 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=Non # we leave strings to the rev-parse method below self.set_object(commit, logmsg) - return self + # return self + return None def set_object(self, object, logmsg=None): # @ReservedAssignment """Set the object we point to, possibly dereference our symbolic reference first. @@ -275,7 +278,8 @@ def set_object(self, object, logmsg=None): # @ReservedAssignment commit = property(_get_commit, set_commit, doc="Query or set commits directly") object = property(_get_object, set_object, doc="Return the object our ref currently refers to") - def _get_reference(self): + def _get_reference(self + ) -> Union['HEAD', 'Head', 'RemoteReference', 'TagReference', 'Reference', 'SymbolicReference']: """:return: Reference Object we point to :raise TypeError: If this symbolic reference is detached, hence it doesn't point to a reference, but to a commit""" diff --git a/pyproject.toml b/pyproject.toml index 94f74793d..de5bc4eaf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,11 +19,11 @@ filterwarnings = 'ignore::DeprecationWarning' # filterwarnings ignore::WarningType # ignores those warnings [tool.mypy] -# disallow_untyped_defs = True +# disallow_untyped_defs = true no_implicit_optional = true warn_redundant_casts = true -# warn_unused_ignores = True -# warn_unreachable = True +# warn_unused_ignores = true +# warn_unreachable = true show_error_codes = true # TODO: remove when 'gitdb' is fully annotated From 07d71e57c422e8df943fe14f5e2a1b4856d5077c Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 17:58:23 +0100 Subject: [PATCH 0693/2375] Fix more missing types in Symbolic.py --- git/refs/symbolic.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 2e8544d39..d5dc87c6e 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -358,11 +358,11 @@ def set_reference(self, ref, logmsg=None): return self # aliased reference - reference: Union[Commit_ish, 'Reference'] = property( # type: ignore + reference: Union[Commit_ish, 'Head', 'Reference'] = property( # type: ignore _get_reference, set_reference, doc="Returns the Reference we point to") ref = reference - def is_valid(self): + def is_valid(self) -> bool: """ :return: True if the reference is valid, hence it can be read and points to @@ -531,7 +531,7 @@ def _create(cls, repo, path, resolve, reference, force, logmsg=None): return ref @classmethod - def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'HEAD', + def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'SymbolicReference', logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any): """Create a new symbolic reference, hence a reference pointing , to another reference. From b8b07b9ff5fe478b872d3da767e549841da02205 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 18:03:29 +0100 Subject: [PATCH 0694/2375] Fix more missing types in Symbolic.py. --- git/refs/tag.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/git/refs/tag.py b/git/refs/tag.py index 3aec99fed..4cbea5ea0 100644 --- a/git/refs/tag.py +++ b/git/refs/tag.py @@ -98,7 +98,9 @@ def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] Additional keyword arguments to be passed to git-tag :return: A new TagReference""" - args = (path, reference) + if 'ref' in kwargs and kwargs['ref']: + reference = kwargs['ref'] + if logmsg: kwargs['m'] = logmsg elif 'message' in kwargs and kwargs['message']: @@ -107,6 +109,8 @@ def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] if force: kwargs['f'] = True + args = (path, reference) + repo.git.tag(*args, **kwargs) return TagReference(repo, "%s/%s" % (cls._common_path_default, path)) From 390efbf521d62d9cb188c7688288878ef1b1b45d Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 20:40:29 +0100 Subject: [PATCH 0695/2375] Fix more missing types in Symbolic.py, cos GuthubActions pytest stuck --- git/objects/submodule/base.py | 8 ++++--- git/refs/symbolic.py | 41 +++++++++++++++++++++-------------- git/refs/tag.py | 6 +++-- git/repo/base.py | 3 ++- pyproject.toml | 6 ++--- t.py | 9 ++++++++ 6 files changed, 48 insertions(+), 25 deletions(-) create mode 100644 t.py diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 29212167c..143511909 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -563,6 +563,7 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: progress.update(op, i, len_rmts, prefix + "Done fetching remote of submodule %r" % self.name) # END fetch new data except InvalidGitRepositoryError: + mrepo = None if not init: return self # END early abort if init is not allowed @@ -603,7 +604,7 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: # make sure HEAD is not detached mrepo.head.set_reference(local_branch, logmsg="submodule: attaching head to %s" % local_branch) - mrepo.head.ref.set_tracking_branch(remote_branch) + mrepo.head.reference.set_tracking_branch(remote_branch) except (IndexError, InvalidGitRepositoryError): log.warning("Failed to checkout tracking branch %s", self.branch_path) # END handle tracking branch @@ -629,13 +630,14 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: if mrepo is not None and to_latest_revision: msg_base = "Cannot update to latest revision in repository at %r as " % mrepo.working_dir if not is_detached: - rref = mrepo.head.ref.tracking_branch() + rref = mrepo.head.reference.tracking_branch() if rref is not None: rcommit = rref.commit binsha = rcommit.binsha hexsha = rcommit.hexsha else: - log.error("%s a tracking branch was not set for local branch '%s'", msg_base, mrepo.head.ref) + log.error("%s a tracking branch was not set for local branch '%s'", + msg_base, mrepo.head.reference) # END handle remote ref else: log.error("%s there was no local tracking branch", msg_base) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index d5dc87c6e..4ae7a9d11 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -25,7 +25,7 @@ if TYPE_CHECKING: from git.repo import Repo - from git.refs import Reference, Head, HEAD, TagReference, RemoteReference + from git.refs import Reference, Head, TagReference, RemoteReference T_References = TypeVar('T_References', bound='SymbolicReference') @@ -60,6 +60,7 @@ class SymbolicReference(object): def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False) -> None: self.repo = repo self.path = str(path) + self.ref = self._get_reference() def __str__(self) -> str: return self.path @@ -279,7 +280,7 @@ def set_object(self, object, logmsg=None): # @ReservedAssignment object = property(_get_object, set_object, doc="Return the object our ref currently refers to") def _get_reference(self - ) -> Union['HEAD', 'Head', 'RemoteReference', 'TagReference', 'Reference', 'SymbolicReference']: + ) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: """:return: Reference Object we point to :raise TypeError: If this symbolic reference is detached, hence it doesn't point to a reference, but to a commit""" @@ -288,7 +289,8 @@ def _get_reference(self raise TypeError("%s is a detached symbolic reference as it points to %r" % (self, sha)) return self.from_path(self.repo, target_ref_path) - def set_reference(self, ref, logmsg=None): + def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None + ) -> None: """Set ourselves to the given ref. It will stay a symbol if the ref is a Reference. Otherwise an Object, given as Object instance or refspec, is assumed and if valid, will be set which effectively detaches the refererence if it was a purely @@ -355,12 +357,16 @@ def set_reference(self, ref, logmsg=None): if logmsg is not None: self.log_append(oldbinsha, logmsg) - return self + return None - # aliased reference - reference: Union[Commit_ish, 'Head', 'Reference'] = property( # type: ignore - _get_reference, set_reference, doc="Returns the Reference we point to") - ref = reference + @ property + def reference(self) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: + return self._get_reference() + + @ reference.setter + def reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None + ) -> None: + return self.set_reference(ref=ref, logmsg=logmsg) def is_valid(self) -> bool: """ @@ -374,7 +380,7 @@ def is_valid(self) -> bool: else: return True - @property + @ property def is_detached(self): """ :return: @@ -424,7 +430,7 @@ def log_entry(self, index): In that case, it will be faster than the ``log()`` method""" return RefLog.entry_at(RefLog.path(self), index) - @classmethod + @ classmethod def to_full_path(cls, path: Union[PathLike, 'SymbolicReference']) -> str: """ :return: string with a full repository-relative path which can be used to initialize @@ -439,7 +445,7 @@ def to_full_path(cls, path: Union[PathLike, 'SymbolicReference']) -> str: full_ref_path = '%s/%s' % (cls._common_path_default, path) return full_ref_path - @classmethod + @ classmethod def delete(cls, repo: 'Repo', path: PathLike) -> None: """Delete the reference at the given path @@ -497,8 +503,10 @@ def delete(cls, repo: 'Repo', path: PathLike) -> None: os.remove(reflog_path) # END remove reflog - @classmethod - def _create(cls, repo, path, resolve, reference, force, logmsg=None): + @ classmethod + def _create(cls: Type[T_References], repo: 'Repo', path: PathLike, resolve: bool, + reference: Union[str, 'SymbolicReference'], + force: bool, logmsg: Union[str, None] = None) -> T_References: """internal method used to create a new symbolic reference. If resolve is False, the reference will be taken as is, creating a proper symbolic reference. Otherwise it will be resolved to the @@ -531,8 +539,9 @@ def _create(cls, repo, path, resolve, reference, force, logmsg=None): return ref @classmethod - def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'SymbolicReference', - logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any): + def create(cls: Type[T_References], repo: 'Repo', path: PathLike, + reference: Union[Commit_ish, str, 'SymbolicReference'] = 'SymbolicReference', + logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any) -> T_References: """Create a new symbolic reference, hence a reference pointing , to another reference. :param repo: @@ -669,7 +678,7 @@ def iter_items(cls, repo: 'Repo', common_path: Union[PathLike, None] = None, *ar return (r for r in cls._iter_items(repo, common_path) if r.__class__ == SymbolicReference or not r.is_detached) @classmethod - def from_path(cls, repo, path): + def from_path(cls, repo: 'Repo', path: PathLike) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: """ :param path: full .git-directory-relative path name to the Reference to instantiate :note: use to_full_path() if you only have a partial path of a known Reference Type diff --git a/git/refs/tag.py b/git/refs/tag.py index 4cbea5ea0..ce2a58a05 100644 --- a/git/refs/tag.py +++ b/git/refs/tag.py @@ -4,13 +4,14 @@ # typing ------------------------------------------------------------------ -from typing import Any, Union, TYPE_CHECKING +from typing import Any, Type, Union, TYPE_CHECKING from git.types import Commit_ish, PathLike if TYPE_CHECKING: from git.repo import Repo from git.objects import Commit from git.objects import TagObject + from git.refs import SymbolicReference # ------------------------------------------------------------------------------ @@ -68,7 +69,8 @@ def object(self) -> Commit_ish: # type: ignore[override] return Reference._get_object(self) @classmethod - def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'HEAD', + def create(cls: Type['TagReference'], repo: 'Repo', path: PathLike, + reference: Union[Commit_ish, str, 'SymbolicReference'] = 'HEAD', logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any) -> 'TagReference': """Create a new tag reference. diff --git a/git/repo/base.py b/git/repo/base.py index 12efe9c66..355f93999 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -788,9 +788,10 @@ def ignored(self, *paths: PathLike) -> List[PathLike]: return proc.replace("\\\\", "\\").replace('"', "").split("\n") @property - def active_branch(self) -> 'HEAD': + def active_branch(self) -> Head: """The name of the currently active branch. :return: Head to the active branch""" + # reveal_type(self.head.reference) # => Reference return self.head.reference def blame_incremental(self, rev: TBD, file: TBD, **kwargs: Any) -> Optional[Iterator['BlameEntry']]: diff --git a/pyproject.toml b/pyproject.toml index de5bc4eaf..94f74793d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,11 +19,11 @@ filterwarnings = 'ignore::DeprecationWarning' # filterwarnings ignore::WarningType # ignores those warnings [tool.mypy] -# disallow_untyped_defs = true +# disallow_untyped_defs = True no_implicit_optional = true warn_redundant_casts = true -# warn_unused_ignores = true -# warn_unreachable = true +# warn_unused_ignores = True +# warn_unreachable = True show_error_codes = true # TODO: remove when 'gitdb' is fully annotated diff --git a/t.py b/t.py new file mode 100644 index 000000000..560e420ea --- /dev/null +++ b/t.py @@ -0,0 +1,9 @@ +from git import Repo + + +def get_active_branch(gitobj: Repo) -> str: + return gitobj.active_branch.name + + +gitobj = Repo(".") +print(get_active_branch(gitobj)) From 070f5c0d1f06d3e15ec5aa841b96fa2a1fdb7bf4 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 20:41:16 +0100 Subject: [PATCH 0696/2375] Rmv test file --- t.py | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 t.py diff --git a/t.py b/t.py deleted file mode 100644 index 560e420ea..000000000 --- a/t.py +++ /dev/null @@ -1,9 +0,0 @@ -from git import Repo - - -def get_active_branch(gitobj: Repo) -> str: - return gitobj.active_branch.name - - -gitobj = Repo(".") -print(get_active_branch(gitobj)) From adc00dd1773ee1b532803b2272cc989f11e09f8a Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 21:50:49 +0100 Subject: [PATCH 0697/2375] Fix more missing types in Symbolic.py, cos GuthubActions pytest stuck --- git/objects/commit.py | 1 + git/objects/util.py | 5 +++++ git/refs/head.py | 13 ++++++------ git/refs/reference.py | 4 +++- git/refs/symbolic.py | 47 ++++++++++++++++++++++++++----------------- git/refs/tag.py | 4 ++-- 6 files changed, 47 insertions(+), 27 deletions(-) diff --git a/git/objects/commit.py b/git/objects/commit.py index 884f65228..9d7096563 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -128,6 +128,7 @@ def __init__(self, repo: 'Repo', binsha: bytes, tree: Union[Tree, None] = None, as what time.altzone returns. The sign is inverted compared to git's UTC timezone.""" super(Commit, self).__init__(repo, binsha) + self.binsha = binsha if tree is not None: assert isinstance(tree, Tree), "Tree needs to be a Tree instance, was %s" % type(tree) if tree is not None: diff --git a/git/objects/util.py b/git/objects/util.py index ef1ae77ba..db7807c26 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -493,6 +493,11 @@ def list_traverse(self: T_TIobj, *args: Any, **kwargs: Any) -> IterableList[T_TI return super(TraversableIterableObj, self)._list_traverse(* args, **kwargs) @ overload # type: ignore + def traverse(self: T_TIobj + ) -> Iterator[T_TIobj]: + ... + + @ overload def traverse(self: T_TIobj, predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], diff --git a/git/refs/head.py b/git/refs/head.py index 4b9bf33cc..260bf5e7e 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -1,4 +1,4 @@ -from git.config import SectionConstraint +from git.config import GitConfigParser, SectionConstraint from git.util import join_path from git.exc import GitCommandError @@ -203,7 +203,7 @@ def rename(self, new_path: PathLike, force: bool = False) -> 'Head': self.path = "%s/%s" % (self._common_path_default, new_path) return self - def checkout(self, force: bool = False, **kwargs: Any): + def checkout(self, force: bool = False, **kwargs: Any) -> Union['HEAD', 'Head']: """Checkout this head by setting the HEAD to this reference, by updating the index to reflect the tree we point to and by updating the working tree to reflect the latest index. @@ -235,10 +235,11 @@ def checkout(self, force: bool = False, **kwargs: Any): self.repo.git.checkout(self, **kwargs) if self.repo.head.is_detached: return self.repo.head - return self.repo.active_branch + else: + return self.repo.active_branch #{ Configuration - def _config_parser(self, read_only: bool) -> SectionConstraint: + def _config_parser(self, read_only: bool) -> SectionConstraint[GitConfigParser]: if read_only: parser = self.repo.config_reader() else: @@ -247,13 +248,13 @@ def _config_parser(self, read_only: bool) -> SectionConstraint: return SectionConstraint(parser, 'branch "%s"' % self.name) - def config_reader(self) -> SectionConstraint: + def config_reader(self) -> SectionConstraint[GitConfigParser]: """ :return: A configuration parser instance constrained to only read this instance's values""" return self._config_parser(read_only=True) - def config_writer(self) -> SectionConstraint: + def config_writer(self) -> SectionConstraint[GitConfigParser]: """ :return: A configuration writer instance with read-and write access to options of this head""" diff --git a/git/refs/reference.py b/git/refs/reference.py index 646622816..bc2c6e807 100644 --- a/git/refs/reference.py +++ b/git/refs/reference.py @@ -62,7 +62,9 @@ def __str__(self) -> str: #{ Interface - def set_object(self, object: Commit_ish, logmsg: Union[str, None] = None) -> 'Reference': # @ReservedAssignment + # @ReservedAssignment + def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None + ) -> 'SymbolicReference': """Special version which checks if the head-log needs an update as well :return: self""" oldbinsha = None diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 4ae7a9d11..4171fe234 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -16,7 +16,7 @@ BadName ) -from .log import RefLog +from .log import RefLog, RefLogEntry # typing ------------------------------------------------------------------ @@ -26,6 +26,8 @@ if TYPE_CHECKING: from git.repo import Repo from git.refs import Reference, Head, TagReference, RemoteReference + from git.config import GitConfigParser + from git.objects.commit import Actor T_References = TypeVar('T_References', bound='SymbolicReference') @@ -229,11 +231,13 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], invalid_type = False if isinstance(commit, Object): invalid_type = commit.type != Commit.type + commit = cast('Commit', commit) elif isinstance(commit, SymbolicReference): invalid_type = commit.object.type != Commit.type else: try: - invalid_type = self.repo.rev_parse(commit).type != Commit.type + commit = self.repo.rev_parse(commit) + invalid_type = commit.type != Commit.type except (BadObject, BadName) as e: raise ValueError("Invalid object: %s" % commit) from e # END handle exception @@ -249,7 +253,9 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], # return self return None - def set_object(self, object, logmsg=None): # @ReservedAssignment + def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], + logmsg: Union[str, None] = None + ) -> 'SymbolicReference': # @ReservedAssignment """Set the object we point to, possibly dereference our symbolic reference first. If the reference does not exist, it will be created @@ -276,8 +282,8 @@ def set_object(self, object, logmsg=None): # @ReservedAssignment # set the commit on our reference return self._get_reference().set_object(object, logmsg) - commit = property(_get_commit, set_commit, doc="Query or set commits directly") - object = property(_get_object, set_object, doc="Return the object our ref currently refers to") + commit = cast('Commit', property(_get_commit, set_commit, doc="Query or set commits directly")) + object = property(_get_object, set_object, doc="Return the object our ref currently refers to") # type: ignore def _get_reference(self ) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: @@ -290,7 +296,7 @@ def _get_reference(self return self.from_path(self.repo, target_ref_path) def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None - ) -> None: + ) -> 'SymbolicReference': """Set ourselves to the given ref. It will stay a symbol if the ref is a Reference. Otherwise an Object, given as Object instance or refspec, is assumed and if valid, will be set which effectively detaches the refererence if it was a purely @@ -331,7 +337,7 @@ def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg raise TypeError("Require commit, got %r" % obj) # END verify type - oldbinsha = None + oldbinsha: bytes = b'' if logmsg is not None: try: oldbinsha = self.commit.binsha @@ -357,7 +363,7 @@ def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg if logmsg is not None: self.log_append(oldbinsha, logmsg) - return None + return self @ property def reference(self) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: @@ -365,7 +371,7 @@ def reference(self) -> Union['Head', 'RemoteReference', 'TagReference', 'Referen @ reference.setter def reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None - ) -> None: + ) -> 'SymbolicReference': return self.set_reference(ref=ref, logmsg=logmsg) def is_valid(self) -> bool: @@ -392,7 +398,7 @@ def is_detached(self): except TypeError: return True - def log(self): + def log(self) -> 'RefLog': """ :return: RefLog for this reference. Its last entry reflects the latest change applied to this reference @@ -401,7 +407,8 @@ def log(self): instead of calling this method repeatedly. It should be considered read-only.""" return RefLog.from_file(RefLog.path(self)) - def log_append(self, oldbinsha, message, newbinsha=None): + def log_append(self, oldbinsha: bytes, message: Union[str, None], + newbinsha: Union[bytes, None] = None) -> 'RefLogEntry': """Append a logentry to the logfile of this ref :param oldbinsha: binary sha this ref used to point to @@ -413,15 +420,19 @@ def log_append(self, oldbinsha, message, newbinsha=None): # correct to allow overriding the committer on a per-commit level. # See https://github.com/gitpython-developers/GitPython/pull/146 try: - committer_or_reader = self.commit.committer + committer_or_reader: Union['Actor', 'GitConfigParser'] = self.commit.committer except ValueError: committer_or_reader = self.repo.config_reader() # end handle newly cloned repositories - return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, - (newbinsha is None and self.commit.binsha) or newbinsha, - message) + if newbinsha is None: + newbinsha = self.commit.binsha + + if message is None: + message = '' + + return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, newbinsha, message) - def log_entry(self, index): + def log_entry(self, index: int) -> RefLogEntry: """:return: RefLogEntry at the given index :param index: python list compatible positive or negative index @@ -540,7 +551,7 @@ def _create(cls: Type[T_References], repo: 'Repo', path: PathLike, resolve: bool @classmethod def create(cls: Type[T_References], repo: 'Repo', path: PathLike, - reference: Union[Commit_ish, str, 'SymbolicReference'] = 'SymbolicReference', + reference: Union[str, 'SymbolicReference'] = 'SymbolicReference', logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any) -> T_References: """Create a new symbolic reference, hence a reference pointing , to another reference. @@ -553,7 +564,7 @@ def create(cls: Type[T_References], repo: 'Repo', path: PathLike, :param reference: The reference to which the new symbolic reference should point to. - If it is a commit'ish, the symbolic ref will be detached. + If it is a ref to a commit'ish, the symbolic ref will be detached. :param force: if True, force creation even if a symbolic reference with that name already exists. diff --git a/git/refs/tag.py b/git/refs/tag.py index ce2a58a05..edfab33d8 100644 --- a/git/refs/tag.py +++ b/git/refs/tag.py @@ -70,7 +70,7 @@ def object(self) -> Commit_ish: # type: ignore[override] @classmethod def create(cls: Type['TagReference'], repo: 'Repo', path: PathLike, - reference: Union[Commit_ish, str, 'SymbolicReference'] = 'HEAD', + reference: Union[str, 'SymbolicReference'] = 'HEAD', logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any) -> 'TagReference': """Create a new tag reference. @@ -80,7 +80,7 @@ def create(cls: Type['TagReference'], repo: 'Repo', path: PathLike, The prefix refs/tags is implied :param ref: - A reference to the object you want to tag. It can be a commit, tree or + A reference to the Object you want to tag. The Object can be a commit, tree or blob. :param logmsg: From 28251c3858fd9fb528bde0ef77a2de9a3995a20f Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 21:57:19 +0100 Subject: [PATCH 0698/2375] Try downgrading pip --- .github/workflows/pythonpackage.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index bf712b2d8..d293bc9a8 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -28,7 +28,8 @@ jobs: - name: Install dependencies and prepare tests run: | set -x - python -m pip install --upgrade pip setuptools wheel + python -m pip install pip==21.1.3 + python -m pip install --upgrade setuptools wheel python --version; git --version git submodule update --init --recursive git fetch --tags From dbb689b19891ab3151e406cdf9751becfa1b31fa Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 22:15:54 +0100 Subject: [PATCH 0699/2375] its not pip... --- .github/workflows/pythonpackage.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index d293bc9a8..bf712b2d8 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -28,8 +28,7 @@ jobs: - name: Install dependencies and prepare tests run: | set -x - python -m pip install pip==21.1.3 - python -m pip install --upgrade setuptools wheel + python -m pip install --upgrade pip setuptools wheel python --version; git --version git submodule update --init --recursive git fetch --tags From cf295145c510575d4b1ec4d1b086bcc013281dd0 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Wed, 28 Jul 2021 22:49:31 +0100 Subject: [PATCH 0700/2375] try https://github.com/actions/virtual-environments/issues/709 workaround --- .github/workflows/pythonpackage.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index bf712b2d8..8cb8041d0 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -28,6 +28,9 @@ jobs: - name: Install dependencies and prepare tests run: | set -x + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + python -m pip install --upgrade pip setuptools wheel python --version; git --version git submodule update --init --recursive From 217ba50d150c1ee85b8b7dcb8fbedd93ed5ebd60 Mon Sep 17 00:00:00 2001 From: David Hotham Date: Fri, 30 Jul 2021 12:14:26 +0100 Subject: [PATCH 0701/2375] Fix typing of Head.create_head --- git/repo/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/repo/base.py b/git/repo/base.py index f8a1689a1..bb8ddf135 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -422,7 +422,7 @@ def _to_full_tag_path(path): def create_head(self, path: PathLike, commit: str = 'HEAD', force: bool = False, logmsg: Optional[str] = None - ) -> 'SymbolicReference': + ) -> Head: """Create a new head within the repository. For more documentation, please see the Head.create method. From ee2704b463cc7592df2be295150824260e83e491 Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 11:45:14 +0100 Subject: [PATCH 0702/2375] Update util.py --- git/objects/util.py | 634 +++++++------------------------------------- 1 file changed, 94 insertions(+), 540 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index ef1ae77ba..4f8af5531 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -1,557 +1,111 @@ -# util.py -# Copyright (C) 2008, 2009 Michael Trier (mtrier@gmail.com) and contributors -# -# This module is part of GitPython and is released under -# the BSD License: http://www.opensource.org/licenses/bsd-license.php -"""Module for general utility functions""" - -from abc import abstractmethod -import warnings -from git.util import ( - IterableList, - IterableObj, - Actor -) - -import re -from collections import deque - -from string import digits -import time -import calendar -from datetime import datetime, timedelta, tzinfo - -# typing ------------------------------------------------------------ -from typing import (Any, Callable, Deque, Iterator, NamedTuple, overload, Sequence, - TYPE_CHECKING, Tuple, Type, TypeVar, Union, cast) - -from git.types import Has_id_attribute, Literal, Protocol, runtime_checkable +"""Module containing index utilities""" +from functools import wraps +import os +import struct +import tempfile + +from git.compat import is_win + +import os.path as osp + + +# typing ---------------------------------------------------------------------- + +from typing import (Any, Callable, TYPE_CHECKING) + +from git.types import PathLike, _T if TYPE_CHECKING: - from io import BytesIO, StringIO - from .commit import Commit - from .blob import Blob - from .tag import TagObject - from .tree import Tree, TraversedTreeTup - from subprocess import Popen - from .submodule.base import Submodule + from git.index import IndexFile +# --------------------------------------------------------------------------------- -class TraverseNT(NamedTuple): - depth: int - item: Union['Traversable', 'Blob'] - src: Union['Traversable', None] +__all__ = ('TemporaryFileSwap', 'post_clear_cache', 'default_index', 'git_working_dir') -T_TIobj = TypeVar('T_TIobj', bound='TraversableIterableObj') # for TraversableIterableObj.traverse() +#{ Aliases +pack = struct.pack +unpack = struct.unpack -TraversedTup = Union[Tuple[Union['Traversable', None], 'Traversable'], # for commit, submodule - 'TraversedTreeTup'] # for tree.traverse() -# -------------------------------------------------------------------- +#} END aliases -__all__ = ('get_object_type_by_name', 'parse_date', 'parse_actor_and_date', - 'ProcessStreamAdapter', 'Traversable', 'altz_to_utctz_str', 'utctz_to_altz', - 'verify_utctz', 'Actor', 'tzoffset', 'utc') +class TemporaryFileSwap(object): -ZERO = timedelta(0) + """Utility class moving a file to a temporary location within the same directory + and moving it back on to where on object deletion.""" + __slots__ = ("file_path", "tmp_file_path") -#{ Functions + def __init__(self, file_path: PathLike) -> None: + self.file_path = file_path + self.tmp_file_path = str(self.file_path) + tempfile.mktemp('', '', '') + # it may be that the source does not exist + try: + os.rename(self.file_path, self.tmp_file_path) + except OSError: + pass + def __del__(self) -> None: + if osp.isfile(self.tmp_file_path): + if is_win and osp.exists(self.file_path): + os.remove(self.file_path) + os.rename(self.tmp_file_path, self.file_path) + # END temp file exists -def mode_str_to_int(modestr: Union[bytes, str]) -> int: - """ - :param modestr: string like 755 or 644 or 100644 - only the last 6 chars will be used - :return: - String identifying a mode compatible to the mode methods ids of the - stat module regarding the rwx permissions for user, group and other, - special flags and file system flags, i.e. whether it is a symlink - for example.""" - mode = 0 - for iteration, char in enumerate(reversed(modestr[-6:])): - char = cast(Union[str, int], char) - mode += int(char) << iteration * 3 - # END for each char - return mode - - -def get_object_type_by_name(object_type_name: bytes - ) -> Union[Type['Commit'], Type['TagObject'], Type['Tree'], Type['Blob']]: - """ - :return: type suitable to handle the given object type name. - Use the type to create new instances. - - :param object_type_name: Member of TYPES - - :raise ValueError: In case object_type_name is unknown""" - if object_type_name == b"commit": - from . import commit - return commit.Commit - elif object_type_name == b"tag": - from . import tag - return tag.TagObject - elif object_type_name == b"blob": - from . import blob - return blob.Blob - elif object_type_name == b"tree": - from . import tree - return tree.Tree - else: - raise ValueError("Cannot handle unknown object type: %s" % object_type_name.decode()) - - -def utctz_to_altz(utctz: str) -> int: - """we convert utctz to the timezone in seconds, it is the format time.altzone - returns. Git stores it as UTC timezone which has the opposite sign as well, - which explains the -1 * ( that was made explicit here ) - :param utctz: git utc timezone string, i.e. +0200""" - return -1 * int(float(utctz) / 100 * 3600) - - -def altz_to_utctz_str(altz: float) -> str: - """As above, but inverses the operation, returning a string that can be used - in commit objects""" - utci = -1 * int((float(altz) / 3600) * 100) - utcs = str(abs(utci)) - utcs = "0" * (4 - len(utcs)) + utcs - prefix = (utci < 0 and '-') or '+' - return prefix + utcs - - -def verify_utctz(offset: str) -> str: - """:raise ValueError: if offset is incorrect - :return: offset""" - fmt_exc = ValueError("Invalid timezone offset format: %s" % offset) - if len(offset) != 5: - raise fmt_exc - if offset[0] not in "+-": - raise fmt_exc - if offset[1] not in digits or\ - offset[2] not in digits or\ - offset[3] not in digits or\ - offset[4] not in digits: - raise fmt_exc - # END for each char - return offset - - -class tzoffset(tzinfo): - - def __init__(self, secs_west_of_utc: float, name: Union[None, str] = None) -> None: - self._offset = timedelta(seconds=-secs_west_of_utc) - self._name = name or 'fixed' - - def __reduce__(self) -> Tuple[Type['tzoffset'], Tuple[float, str]]: - return tzoffset, (-self._offset.total_seconds(), self._name) - - def utcoffset(self, dt) -> timedelta: - return self._offset - - def tzname(self, dt) -> str: - return self._name - - def dst(self, dt) -> timedelta: - return ZERO - - -utc = tzoffset(0, 'UTC') - - -def from_timestamp(timestamp, tz_offset: float) -> datetime: - """Converts a timestamp + tz_offset into an aware datetime instance.""" - utc_dt = datetime.fromtimestamp(timestamp, utc) - try: - local_dt = utc_dt.astimezone(tzoffset(tz_offset)) - return local_dt - except ValueError: - return utc_dt - - -def parse_date(string_date: str) -> Tuple[int, int]: - """ - Parse the given date as one of the following - * aware datetime instance - * Git internal format: timestamp offset - * RFC 2822: Thu, 07 Apr 2005 22:13:13 +0200. - * ISO 8601 2005-04-07T22:13:13 - The T can be a space as well +#{ Decorators - :return: Tuple(int(timestamp_UTC), int(offset)), both in seconds since epoch - :raise ValueError: If the format could not be understood - :note: Date can also be YYYY.MM.DD, MM/DD/YYYY and DD.MM.YYYY. - """ - if isinstance(string_date, datetime) and string_date.tzinfo: - offset = -int(string_date.utcoffset().total_seconds()) - return int(string_date.astimezone(utc).timestamp()), offset - - # git time - try: - if string_date.count(' ') == 1 and string_date.rfind(':') == -1: - timestamp, offset_str = string_date.split() - if timestamp.startswith('@'): - timestamp = timestamp[1:] - timestamp_int = int(timestamp) - return timestamp_int, utctz_to_altz(verify_utctz(offset_str)) - else: - offset_str = "+0000" # local time by default - if string_date[-5] in '-+': - offset_str = verify_utctz(string_date[-5:]) - string_date = string_date[:-6] # skip space as well - # END split timezone info - offset = utctz_to_altz(offset_str) - - # now figure out the date and time portion - split time - date_formats = [] - splitter = -1 - if ',' in string_date: - date_formats.append("%a, %d %b %Y") - splitter = string_date.rfind(' ') - else: - # iso plus additional - date_formats.append("%Y-%m-%d") - date_formats.append("%Y.%m.%d") - date_formats.append("%m/%d/%Y") - date_formats.append("%d.%m.%Y") - - splitter = string_date.rfind('T') - if splitter == -1: - splitter = string_date.rfind(' ') - # END handle 'T' and ' ' - # END handle rfc or iso - - assert splitter > -1 - - # split date and time - time_part = string_date[splitter + 1:] # skip space - date_part = string_date[:splitter] - - # parse time - tstruct = time.strptime(time_part, "%H:%M:%S") - - for fmt in date_formats: - try: - dtstruct = time.strptime(date_part, fmt) - utctime = calendar.timegm((dtstruct.tm_year, dtstruct.tm_mon, dtstruct.tm_mday, - tstruct.tm_hour, tstruct.tm_min, tstruct.tm_sec, - dtstruct.tm_wday, dtstruct.tm_yday, tstruct.tm_isdst)) - return int(utctime), offset - except ValueError: - continue - # END exception handling - # END for each fmt - - # still here ? fail - raise ValueError("no format matched") - # END handle format - except Exception as e: - raise ValueError("Unsupported date format: %s" % string_date) from e - # END handle exceptions - - -# precompiled regex -_re_actor_epoch = re.compile(r'^.+? (.*) (\d+) ([+-]\d+).*$') -_re_only_actor = re.compile(r'^.+? (.*)$') - - -def parse_actor_and_date(line: str) -> Tuple[Actor, int, int]: - """Parse out the actor (author or committer) info from a line like:: - - author Tom Preston-Werner 1191999972 -0700 - - :return: [Actor, int_seconds_since_epoch, int_timezone_offset]""" - actor, epoch, offset = '', '0', '0' - m = _re_actor_epoch.search(line) - if m: - actor, epoch, offset = m.groups() - else: - m = _re_only_actor.search(line) - actor = m.group(1) if m else line or '' - return (Actor._from_string(actor), int(epoch), utctz_to_altz(offset)) - -#} END functions - - -#{ Classes - -class ProcessStreamAdapter(object): - - """Class wireing all calls to the contained Process instance. - - Use this type to hide the underlying process to provide access only to a specified - stream. The process is usually wrapped into an AutoInterrupt class to kill - it if the instance goes out of scope.""" - __slots__ = ("_proc", "_stream") - - def __init__(self, process: 'Popen', stream_name: str) -> None: - self._proc = process - self._stream: StringIO = getattr(process, stream_name) # guessed type - - def __getattr__(self, attr: str) -> Any: - return getattr(self._stream, attr) - - -@runtime_checkable -class Traversable(Protocol): - - """Simple interface to perform depth-first or breadth-first traversals - into one direction. - Subclasses only need to implement one function. - Instances of the Subclass must be hashable +def post_clear_cache(func: Callable[..., _T]) -> Callable[..., _T]: + """Decorator for functions that alter the index using the git command. This would + invalidate our possibly existing entries dictionary which is why it must be + deleted to allow it to be lazily reread later. - Defined subclasses = [Commit, Tree, SubModule] + :note: + This decorator will not be required once all functions are implemented + natively which in fact is possible, but probably not feasible performance wise. """ - __slots__ = () - - @classmethod - @abstractmethod - def _get_intermediate_items(cls, item) -> Sequence['Traversable']: - """ - Returns: - Tuple of items connected to the given item. - Must be implemented in subclass - - class Commit:: (cls, Commit) -> Tuple[Commit, ...] - class Submodule:: (cls, Submodule) -> Iterablelist[Submodule] - class Tree:: (cls, Tree) -> Tuple[Tree, ...] - """ - raise NotImplementedError("To be implemented in subclass") - - @abstractmethod - def list_traverse(self, *args: Any, **kwargs: Any) -> Any: - """ """ - warnings.warn("list_traverse() method should only be called from subclasses." - "Calling from Traversable abstract class will raise NotImplementedError in 3.1.20" - "Builtin sublclasses are 'Submodule', 'Tree' and 'Commit", - DeprecationWarning, - stacklevel=2) - return self._list_traverse(*args, **kwargs) - - def _list_traverse(self, as_edge=False, *args: Any, **kwargs: Any - ) -> IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']]: - """ - :return: IterableList with the results of the traversal as produced by - traverse() - Commit -> IterableList['Commit'] - Submodule -> IterableList['Submodule'] - Tree -> IterableList[Union['Submodule', 'Tree', 'Blob']] - """ - # Commit and Submodule have id.__attribute__ as IterableObj - # Tree has id.__attribute__ inherited from IndexObject - if isinstance(self, (TraversableIterableObj, Has_id_attribute)): - id = self._id_attribute_ - else: - id = "" # shouldn't reach here, unless Traversable subclass created with no _id_attribute_ - # could add _id_attribute_ to Traversable, or make all Traversable also Iterable? - - if not as_edge: - out: IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']] = IterableList(id) - out.extend(self.traverse(as_edge=as_edge, *args, **kwargs)) # type: ignore - return out - # overloads in subclasses (mypy does't allow typing self: subclass) - # Union[IterableList['Commit'], IterableList['Submodule'], IterableList[Union['Submodule', 'Tree', 'Blob']]] - else: - # Raise deprecationwarning, doesn't make sense to use this - out_list: IterableList = IterableList(self.traverse(*args, **kwargs)) - return out_list - - @ abstractmethod - def traverse(self, *args: Any, **kwargs: Any) -> Any: - """ """ - warnings.warn("traverse() method should only be called from subclasses." - "Calling from Traversable abstract class will raise NotImplementedError in 3.1.20" - "Builtin sublclasses are 'Submodule', 'Tree' and 'Commit", - DeprecationWarning, - stacklevel=2) - return self._traverse(*args, **kwargs) - - def _traverse(self, - predicate: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: True, - prune: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: False, - depth: int = -1, branch_first: bool = True, visit_once: bool = True, - ignore_self: int = 1, as_edge: bool = False - ) -> Union[Iterator[Union['Traversable', 'Blob']], - Iterator[TraversedTup]]: - """:return: iterator yielding of items found when traversing self - :param predicate: f(i,d) returns False if item i at depth d should not be included in the result - - :param prune: - f(i,d) return True if the search should stop at item i at depth d. - Item i will not be returned. - - :param depth: - define at which level the iteration should not go deeper - if -1, there is no limit - if 0, you would effectively only get self, the root of the iteration - i.e. if 1, you would only get the first level of predecessors/successors - - :param branch_first: - if True, items will be returned branch first, otherwise depth first - - :param visit_once: - if True, items will only be returned once, although they might be encountered - several times. Loops are prevented that way. - - :param ignore_self: - if True, self will be ignored and automatically pruned from - the result. Otherwise it will be the first item to be returned. - If as_edge is True, the source of the first edge is None - - :param as_edge: - if True, return a pair of items, first being the source, second the - destination, i.e. tuple(src, dest) with the edge spanning from - source to destination""" - - """ - Commit -> Iterator[Union[Commit, Tuple[Commit, Commit]] - Submodule -> Iterator[Submodule, Tuple[Submodule, Submodule]] - Tree -> Iterator[Union[Blob, Tree, Submodule, - Tuple[Union[Submodule, Tree], Union[Blob, Tree, Submodule]]] - - ignore_self=True is_edge=True -> Iterator[item] - ignore_self=True is_edge=False --> Iterator[item] - ignore_self=False is_edge=True -> Iterator[item] | Iterator[Tuple[src, item]] - ignore_self=False is_edge=False -> Iterator[Tuple[src, item]]""" - - visited = set() - stack: Deque[TraverseNT] = deque() - stack.append(TraverseNT(0, self, None)) # self is always depth level 0 - - def addToStack(stack: Deque[TraverseNT], - src_item: 'Traversable', - branch_first: bool, - depth: int) -> None: - lst = self._get_intermediate_items(item) - if not lst: # empty list - return None - if branch_first: - stack.extendleft(TraverseNT(depth, i, src_item) for i in lst) - else: - reviter = (TraverseNT(depth, lst[i], src_item) for i in range(len(lst) - 1, -1, -1)) - stack.extend(reviter) - # END addToStack local method - - while stack: - d, item, src = stack.pop() # depth of item, item, item_source - - if visit_once and item in visited: - continue - - if visit_once: - visited.add(item) - - rval: Union[TraversedTup, 'Traversable', 'Blob'] - if as_edge: # if as_edge return (src, item) unless rrc is None (e.g. for first item) - rval = (src, item) - else: - rval = item - - if prune(rval, d): - continue - - skipStartItem = ignore_self and (item is self) - if not skipStartItem and predicate(rval, d): - yield rval - - # only continue to next level if this is appropriate ! - nd = d + 1 - if depth > -1 and nd > depth: - continue - - addToStack(stack, item, branch_first, nd) - # END for each item on work stack - - -@ runtime_checkable -class Serializable(Protocol): - - """Defines methods to serialize and deserialize objects from and into a data stream""" - __slots__ = () - - # @abstractmethod - def _serialize(self, stream: 'BytesIO') -> 'Serializable': - """Serialize the data of this object into the given data stream - :note: a serialized object would ``_deserialize`` into the same object - :param stream: a file-like object - :return: self""" - raise NotImplementedError("To be implemented in subclass") - - # @abstractmethod - def _deserialize(self, stream: 'BytesIO') -> 'Serializable': - """Deserialize all information regarding this object from the stream - :param stream: a file-like object - :return: self""" - raise NotImplementedError("To be implemented in subclass") - - -class TraversableIterableObj(IterableObj, Traversable): - __slots__ = () - - TIobj_tuple = Tuple[Union[T_TIobj, None], T_TIobj] - - def list_traverse(self: T_TIobj, *args: Any, **kwargs: Any) -> IterableList[T_TIobj]: - return super(TraversableIterableObj, self)._list_traverse(* args, **kwargs) - - @ overload # type: ignore - def traverse(self: T_TIobj, - predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], - prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], - depth: int, branch_first: bool, visit_once: bool, - ignore_self: Literal[True], - as_edge: Literal[False], - ) -> Iterator[T_TIobj]: - ... - - @ overload - def traverse(self: T_TIobj, - predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], - prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], - depth: int, branch_first: bool, visit_once: bool, - ignore_self: Literal[False], - as_edge: Literal[True], - ) -> Iterator[Tuple[Union[T_TIobj, None], T_TIobj]]: - ... - - @ overload - def traverse(self: T_TIobj, - predicate: Callable[[Union[T_TIobj, TIobj_tuple], int], bool], - prune: Callable[[Union[T_TIobj, TIobj_tuple], int], bool], - depth: int, branch_first: bool, visit_once: bool, - ignore_self: Literal[True], - as_edge: Literal[True], - ) -> Iterator[Tuple[T_TIobj, T_TIobj]]: - ... - - def traverse(self: T_TIobj, - predicate: Callable[[Union[T_TIobj, TIobj_tuple], int], - bool] = lambda i, d: True, - prune: Callable[[Union[T_TIobj, TIobj_tuple], int], - bool] = lambda i, d: False, - depth: int = -1, branch_first: bool = True, visit_once: bool = True, - ignore_self: int = 1, as_edge: bool = False - ) -> Union[Iterator[T_TIobj], - Iterator[Tuple[T_TIobj, T_TIobj]], - Iterator[TIobj_tuple]]: - """For documentation, see util.Traversable._traverse()""" - - """ - # To typecheck instead of using cast. - import itertools - from git.types import TypeGuard - def is_commit_traversed(inp: Tuple) -> TypeGuard[Tuple[Iterator[Tuple['Commit', 'Commit']]]]: - for x in inp[1]: - if not isinstance(x, tuple) and len(x) != 2: - if all(isinstance(inner, Commit) for inner in x): - continue - return True - - ret = super(Commit, self).traverse(predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge) - ret_tup = itertools.tee(ret, 2) - assert is_commit_traversed(ret_tup), f"{[type(x) for x in list(ret_tup[0])]}" - return ret_tup[0] - """ - return cast(Union[Iterator[T_TIobj], - Iterator[Tuple[Union[None, T_TIobj], T_TIobj]]], - super(TraversableIterableObj, self)._traverse( - predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge # type: ignore - )) + + @wraps(func) + def post_clear_cache_if_not_raised(self: 'IndexFile', *args: Any, **kwargs: Any) -> _T: + rval = func(self, *args, **kwargs) + self._delete_entries_cache() + return rval + # END wrapper method + + return post_clear_cache_if_not_raised + + +def default_index(func: Callable[..., _T]) -> Callable[..., _T]: + """Decorator assuring the wrapped method may only run if we are the default + repository index. This is as we rely on git commands that operate + on that index only. """ + + @wraps(func) + def check_default_index(self: 'IndexFile', *args: Any, **kwargs: Any) -> _T: + if self._file_path != self._index_path(): + raise AssertionError( + "Cannot call %r on indices that do not represent the default git index" % func.__name__) + return func(self, *args, **kwargs) + # END wrapper method + + return check_default_index + + +def git_working_dir(func: Callable[..., _T]) -> Callable[..., _T]: + """Decorator which changes the current working dir to the one of the git + repository in order to assure relative paths are handled correctly""" + + @wraps(func) + def set_git_working_dir(self: 'IndexFile', *args: Any, **kwargs: Any) -> _T: + cur_wd = os.getcwd() + os.chdir(str(self.repo.working_tree_dir)) + try: + return func(self, *args, **kwargs) + finally: + os.chdir(cur_wd) + # END handle working dir + # END wrapper + + return set_git_working_dir + +#} END decorators From 9b9bfc2af1be03f5c006c2c79ec2d21e4f66f468 Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 11:45:50 +0100 Subject: [PATCH 0703/2375] Update util.py --- git/objects/util.py | 639 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 545 insertions(+), 94 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index 4f8af5531..db7807c26 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -1,111 +1,562 @@ -"""Module containing index utilities""" -from functools import wraps -import os -import struct -import tempfile - -from git.compat import is_win - -import os.path as osp - - -# typing ---------------------------------------------------------------------- - -from typing import (Any, Callable, TYPE_CHECKING) - -from git.types import PathLike, _T +# util.py +# Copyright (C) 2008, 2009 Michael Trier (mtrier@gmail.com) and contributors +# +# This module is part of GitPython and is released under +# the BSD License: http://www.opensource.org/licenses/bsd-license.php +"""Module for general utility functions""" + +from abc import abstractmethod +import warnings +from git.util import ( + IterableList, + IterableObj, + Actor +) + +import re +from collections import deque + +from string import digits +import time +import calendar +from datetime import datetime, timedelta, tzinfo + +# typing ------------------------------------------------------------ +from typing import (Any, Callable, Deque, Iterator, NamedTuple, overload, Sequence, + TYPE_CHECKING, Tuple, Type, TypeVar, Union, cast) + +from git.types import Has_id_attribute, Literal, Protocol, runtime_checkable if TYPE_CHECKING: - from git.index import IndexFile + from io import BytesIO, StringIO + from .commit import Commit + from .blob import Blob + from .tag import TagObject + from .tree import Tree, TraversedTreeTup + from subprocess import Popen + from .submodule.base import Submodule -# --------------------------------------------------------------------------------- +class TraverseNT(NamedTuple): + depth: int + item: Union['Traversable', 'Blob'] + src: Union['Traversable', None] -__all__ = ('TemporaryFileSwap', 'post_clear_cache', 'default_index', 'git_working_dir') -#{ Aliases -pack = struct.pack -unpack = struct.unpack +T_TIobj = TypeVar('T_TIobj', bound='TraversableIterableObj') # for TraversableIterableObj.traverse() +TraversedTup = Union[Tuple[Union['Traversable', None], 'Traversable'], # for commit, submodule + 'TraversedTreeTup'] # for tree.traverse() -#} END aliases +# -------------------------------------------------------------------- -class TemporaryFileSwap(object): +__all__ = ('get_object_type_by_name', 'parse_date', 'parse_actor_and_date', + 'ProcessStreamAdapter', 'Traversable', 'altz_to_utctz_str', 'utctz_to_altz', + 'verify_utctz', 'Actor', 'tzoffset', 'utc') - """Utility class moving a file to a temporary location within the same directory - and moving it back on to where on object deletion.""" - __slots__ = ("file_path", "tmp_file_path") +ZERO = timedelta(0) - def __init__(self, file_path: PathLike) -> None: - self.file_path = file_path - self.tmp_file_path = str(self.file_path) + tempfile.mktemp('', '', '') - # it may be that the source does not exist - try: - os.rename(self.file_path, self.tmp_file_path) - except OSError: - pass +#{ Functions - def __del__(self) -> None: - if osp.isfile(self.tmp_file_path): - if is_win and osp.exists(self.file_path): - os.remove(self.file_path) - os.rename(self.tmp_file_path, self.file_path) - # END temp file exists - -#{ Decorators - -def post_clear_cache(func: Callable[..., _T]) -> Callable[..., _T]: - """Decorator for functions that alter the index using the git command. This would - invalidate our possibly existing entries dictionary which is why it must be - deleted to allow it to be lazily reread later. - - :note: - This decorator will not be required once all functions are implemented - natively which in fact is possible, but probably not feasible performance wise. +def mode_str_to_int(modestr: Union[bytes, str]) -> int: """ + :param modestr: string like 755 or 644 or 100644 - only the last 6 chars will be used + :return: + String identifying a mode compatible to the mode methods ids of the + stat module regarding the rwx permissions for user, group and other, + special flags and file system flags, i.e. whether it is a symlink + for example.""" + mode = 0 + for iteration, char in enumerate(reversed(modestr[-6:])): + char = cast(Union[str, int], char) + mode += int(char) << iteration * 3 + # END for each char + return mode + + +def get_object_type_by_name(object_type_name: bytes + ) -> Union[Type['Commit'], Type['TagObject'], Type['Tree'], Type['Blob']]: + """ + :return: type suitable to handle the given object type name. + Use the type to create new instances. + + :param object_type_name: Member of TYPES + + :raise ValueError: In case object_type_name is unknown""" + if object_type_name == b"commit": + from . import commit + return commit.Commit + elif object_type_name == b"tag": + from . import tag + return tag.TagObject + elif object_type_name == b"blob": + from . import blob + return blob.Blob + elif object_type_name == b"tree": + from . import tree + return tree.Tree + else: + raise ValueError("Cannot handle unknown object type: %s" % object_type_name.decode()) + + +def utctz_to_altz(utctz: str) -> int: + """we convert utctz to the timezone in seconds, it is the format time.altzone + returns. Git stores it as UTC timezone which has the opposite sign as well, + which explains the -1 * ( that was made explicit here ) + :param utctz: git utc timezone string, i.e. +0200""" + return -1 * int(float(utctz) / 100 * 3600) + + +def altz_to_utctz_str(altz: float) -> str: + """As above, but inverses the operation, returning a string that can be used + in commit objects""" + utci = -1 * int((float(altz) / 3600) * 100) + utcs = str(abs(utci)) + utcs = "0" * (4 - len(utcs)) + utcs + prefix = (utci < 0 and '-') or '+' + return prefix + utcs + + +def verify_utctz(offset: str) -> str: + """:raise ValueError: if offset is incorrect + :return: offset""" + fmt_exc = ValueError("Invalid timezone offset format: %s" % offset) + if len(offset) != 5: + raise fmt_exc + if offset[0] not in "+-": + raise fmt_exc + if offset[1] not in digits or\ + offset[2] not in digits or\ + offset[3] not in digits or\ + offset[4] not in digits: + raise fmt_exc + # END for each char + return offset + + +class tzoffset(tzinfo): + + def __init__(self, secs_west_of_utc: float, name: Union[None, str] = None) -> None: + self._offset = timedelta(seconds=-secs_west_of_utc) + self._name = name or 'fixed' + + def __reduce__(self) -> Tuple[Type['tzoffset'], Tuple[float, str]]: + return tzoffset, (-self._offset.total_seconds(), self._name) + + def utcoffset(self, dt) -> timedelta: + return self._offset + + def tzname(self, dt) -> str: + return self._name + + def dst(self, dt) -> timedelta: + return ZERO + + +utc = tzoffset(0, 'UTC') + + +def from_timestamp(timestamp, tz_offset: float) -> datetime: + """Converts a timestamp + tz_offset into an aware datetime instance.""" + utc_dt = datetime.fromtimestamp(timestamp, utc) + try: + local_dt = utc_dt.astimezone(tzoffset(tz_offset)) + return local_dt + except ValueError: + return utc_dt + + +def parse_date(string_date: str) -> Tuple[int, int]: + """ + Parse the given date as one of the following - @wraps(func) - def post_clear_cache_if_not_raised(self: 'IndexFile', *args: Any, **kwargs: Any) -> _T: - rval = func(self, *args, **kwargs) - self._delete_entries_cache() - return rval - # END wrapper method - - return post_clear_cache_if_not_raised - - -def default_index(func: Callable[..., _T]) -> Callable[..., _T]: - """Decorator assuring the wrapped method may only run if we are the default - repository index. This is as we rely on git commands that operate - on that index only. """ - - @wraps(func) - def check_default_index(self: 'IndexFile', *args: Any, **kwargs: Any) -> _T: - if self._file_path != self._index_path(): - raise AssertionError( - "Cannot call %r on indices that do not represent the default git index" % func.__name__) - return func(self, *args, **kwargs) - # END wrapper method - - return check_default_index - - -def git_working_dir(func: Callable[..., _T]) -> Callable[..., _T]: - """Decorator which changes the current working dir to the one of the git - repository in order to assure relative paths are handled correctly""" - - @wraps(func) - def set_git_working_dir(self: 'IndexFile', *args: Any, **kwargs: Any) -> _T: - cur_wd = os.getcwd() - os.chdir(str(self.repo.working_tree_dir)) - try: - return func(self, *args, **kwargs) - finally: - os.chdir(cur_wd) - # END handle working dir - # END wrapper + * aware datetime instance + * Git internal format: timestamp offset + * RFC 2822: Thu, 07 Apr 2005 22:13:13 +0200. + * ISO 8601 2005-04-07T22:13:13 + The T can be a space as well - return set_git_working_dir + :return: Tuple(int(timestamp_UTC), int(offset)), both in seconds since epoch + :raise ValueError: If the format could not be understood + :note: Date can also be YYYY.MM.DD, MM/DD/YYYY and DD.MM.YYYY. + """ + if isinstance(string_date, datetime) and string_date.tzinfo: + offset = -int(string_date.utcoffset().total_seconds()) + return int(string_date.astimezone(utc).timestamp()), offset + + # git time + try: + if string_date.count(' ') == 1 and string_date.rfind(':') == -1: + timestamp, offset_str = string_date.split() + if timestamp.startswith('@'): + timestamp = timestamp[1:] + timestamp_int = int(timestamp) + return timestamp_int, utctz_to_altz(verify_utctz(offset_str)) + else: + offset_str = "+0000" # local time by default + if string_date[-5] in '-+': + offset_str = verify_utctz(string_date[-5:]) + string_date = string_date[:-6] # skip space as well + # END split timezone info + offset = utctz_to_altz(offset_str) + + # now figure out the date and time portion - split time + date_formats = [] + splitter = -1 + if ',' in string_date: + date_formats.append("%a, %d %b %Y") + splitter = string_date.rfind(' ') + else: + # iso plus additional + date_formats.append("%Y-%m-%d") + date_formats.append("%Y.%m.%d") + date_formats.append("%m/%d/%Y") + date_formats.append("%d.%m.%Y") + + splitter = string_date.rfind('T') + if splitter == -1: + splitter = string_date.rfind(' ') + # END handle 'T' and ' ' + # END handle rfc or iso + + assert splitter > -1 + + # split date and time + time_part = string_date[splitter + 1:] # skip space + date_part = string_date[:splitter] + + # parse time + tstruct = time.strptime(time_part, "%H:%M:%S") + + for fmt in date_formats: + try: + dtstruct = time.strptime(date_part, fmt) + utctime = calendar.timegm((dtstruct.tm_year, dtstruct.tm_mon, dtstruct.tm_mday, + tstruct.tm_hour, tstruct.tm_min, tstruct.tm_sec, + dtstruct.tm_wday, dtstruct.tm_yday, tstruct.tm_isdst)) + return int(utctime), offset + except ValueError: + continue + # END exception handling + # END for each fmt + + # still here ? fail + raise ValueError("no format matched") + # END handle format + except Exception as e: + raise ValueError("Unsupported date format: %s" % string_date) from e + # END handle exceptions + + +# precompiled regex +_re_actor_epoch = re.compile(r'^.+? (.*) (\d+) ([+-]\d+).*$') +_re_only_actor = re.compile(r'^.+? (.*)$') + + +def parse_actor_and_date(line: str) -> Tuple[Actor, int, int]: + """Parse out the actor (author or committer) info from a line like:: + + author Tom Preston-Werner 1191999972 -0700 + + :return: [Actor, int_seconds_since_epoch, int_timezone_offset]""" + actor, epoch, offset = '', '0', '0' + m = _re_actor_epoch.search(line) + if m: + actor, epoch, offset = m.groups() + else: + m = _re_only_actor.search(line) + actor = m.group(1) if m else line or '' + return (Actor._from_string(actor), int(epoch), utctz_to_altz(offset)) + +#} END functions + + +#{ Classes + +class ProcessStreamAdapter(object): + + """Class wireing all calls to the contained Process instance. + + Use this type to hide the underlying process to provide access only to a specified + stream. The process is usually wrapped into an AutoInterrupt class to kill + it if the instance goes out of scope.""" + __slots__ = ("_proc", "_stream") + + def __init__(self, process: 'Popen', stream_name: str) -> None: + self._proc = process + self._stream: StringIO = getattr(process, stream_name) # guessed type + + def __getattr__(self, attr: str) -> Any: + return getattr(self._stream, attr) + + +@runtime_checkable +class Traversable(Protocol): + + """Simple interface to perform depth-first or breadth-first traversals + into one direction. + Subclasses only need to implement one function. + Instances of the Subclass must be hashable -#} END decorators + Defined subclasses = [Commit, Tree, SubModule] + """ + __slots__ = () + + @classmethod + @abstractmethod + def _get_intermediate_items(cls, item) -> Sequence['Traversable']: + """ + Returns: + Tuple of items connected to the given item. + Must be implemented in subclass + + class Commit:: (cls, Commit) -> Tuple[Commit, ...] + class Submodule:: (cls, Submodule) -> Iterablelist[Submodule] + class Tree:: (cls, Tree) -> Tuple[Tree, ...] + """ + raise NotImplementedError("To be implemented in subclass") + + @abstractmethod + def list_traverse(self, *args: Any, **kwargs: Any) -> Any: + """ """ + warnings.warn("list_traverse() method should only be called from subclasses." + "Calling from Traversable abstract class will raise NotImplementedError in 3.1.20" + "Builtin sublclasses are 'Submodule', 'Tree' and 'Commit", + DeprecationWarning, + stacklevel=2) + return self._list_traverse(*args, **kwargs) + + def _list_traverse(self, as_edge=False, *args: Any, **kwargs: Any + ) -> IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']]: + """ + :return: IterableList with the results of the traversal as produced by + traverse() + Commit -> IterableList['Commit'] + Submodule -> IterableList['Submodule'] + Tree -> IterableList[Union['Submodule', 'Tree', 'Blob']] + """ + # Commit and Submodule have id.__attribute__ as IterableObj + # Tree has id.__attribute__ inherited from IndexObject + if isinstance(self, (TraversableIterableObj, Has_id_attribute)): + id = self._id_attribute_ + else: + id = "" # shouldn't reach here, unless Traversable subclass created with no _id_attribute_ + # could add _id_attribute_ to Traversable, or make all Traversable also Iterable? + + if not as_edge: + out: IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']] = IterableList(id) + out.extend(self.traverse(as_edge=as_edge, *args, **kwargs)) # type: ignore + return out + # overloads in subclasses (mypy does't allow typing self: subclass) + # Union[IterableList['Commit'], IterableList['Submodule'], IterableList[Union['Submodule', 'Tree', 'Blob']]] + else: + # Raise deprecationwarning, doesn't make sense to use this + out_list: IterableList = IterableList(self.traverse(*args, **kwargs)) + return out_list + + @ abstractmethod + def traverse(self, *args: Any, **kwargs: Any) -> Any: + """ """ + warnings.warn("traverse() method should only be called from subclasses." + "Calling from Traversable abstract class will raise NotImplementedError in 3.1.20" + "Builtin sublclasses are 'Submodule', 'Tree' and 'Commit", + DeprecationWarning, + stacklevel=2) + return self._traverse(*args, **kwargs) + + def _traverse(self, + predicate: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: True, + prune: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: False, + depth: int = -1, branch_first: bool = True, visit_once: bool = True, + ignore_self: int = 1, as_edge: bool = False + ) -> Union[Iterator[Union['Traversable', 'Blob']], + Iterator[TraversedTup]]: + """:return: iterator yielding of items found when traversing self + :param predicate: f(i,d) returns False if item i at depth d should not be included in the result + + :param prune: + f(i,d) return True if the search should stop at item i at depth d. + Item i will not be returned. + + :param depth: + define at which level the iteration should not go deeper + if -1, there is no limit + if 0, you would effectively only get self, the root of the iteration + i.e. if 1, you would only get the first level of predecessors/successors + + :param branch_first: + if True, items will be returned branch first, otherwise depth first + + :param visit_once: + if True, items will only be returned once, although they might be encountered + several times. Loops are prevented that way. + + :param ignore_self: + if True, self will be ignored and automatically pruned from + the result. Otherwise it will be the first item to be returned. + If as_edge is True, the source of the first edge is None + + :param as_edge: + if True, return a pair of items, first being the source, second the + destination, i.e. tuple(src, dest) with the edge spanning from + source to destination""" + + """ + Commit -> Iterator[Union[Commit, Tuple[Commit, Commit]] + Submodule -> Iterator[Submodule, Tuple[Submodule, Submodule]] + Tree -> Iterator[Union[Blob, Tree, Submodule, + Tuple[Union[Submodule, Tree], Union[Blob, Tree, Submodule]]] + + ignore_self=True is_edge=True -> Iterator[item] + ignore_self=True is_edge=False --> Iterator[item] + ignore_self=False is_edge=True -> Iterator[item] | Iterator[Tuple[src, item]] + ignore_self=False is_edge=False -> Iterator[Tuple[src, item]]""" + + visited = set() + stack: Deque[TraverseNT] = deque() + stack.append(TraverseNT(0, self, None)) # self is always depth level 0 + + def addToStack(stack: Deque[TraverseNT], + src_item: 'Traversable', + branch_first: bool, + depth: int) -> None: + lst = self._get_intermediate_items(item) + if not lst: # empty list + return None + if branch_first: + stack.extendleft(TraverseNT(depth, i, src_item) for i in lst) + else: + reviter = (TraverseNT(depth, lst[i], src_item) for i in range(len(lst) - 1, -1, -1)) + stack.extend(reviter) + # END addToStack local method + + while stack: + d, item, src = stack.pop() # depth of item, item, item_source + + if visit_once and item in visited: + continue + + if visit_once: + visited.add(item) + + rval: Union[TraversedTup, 'Traversable', 'Blob'] + if as_edge: # if as_edge return (src, item) unless rrc is None (e.g. for first item) + rval = (src, item) + else: + rval = item + + if prune(rval, d): + continue + + skipStartItem = ignore_self and (item is self) + if not skipStartItem and predicate(rval, d): + yield rval + + # only continue to next level if this is appropriate ! + nd = d + 1 + if depth > -1 and nd > depth: + continue + + addToStack(stack, item, branch_first, nd) + # END for each item on work stack + + +@ runtime_checkable +class Serializable(Protocol): + + """Defines methods to serialize and deserialize objects from and into a data stream""" + __slots__ = () + + # @abstractmethod + def _serialize(self, stream: 'BytesIO') -> 'Serializable': + """Serialize the data of this object into the given data stream + :note: a serialized object would ``_deserialize`` into the same object + :param stream: a file-like object + :return: self""" + raise NotImplementedError("To be implemented in subclass") + + # @abstractmethod + def _deserialize(self, stream: 'BytesIO') -> 'Serializable': + """Deserialize all information regarding this object from the stream + :param stream: a file-like object + :return: self""" + raise NotImplementedError("To be implemented in subclass") + + +class TraversableIterableObj(IterableObj, Traversable): + __slots__ = () + + TIobj_tuple = Tuple[Union[T_TIobj, None], T_TIobj] + + def list_traverse(self: T_TIobj, *args: Any, **kwargs: Any) -> IterableList[T_TIobj]: + return super(TraversableIterableObj, self)._list_traverse(* args, **kwargs) + + @ overload # type: ignore + def traverse(self: T_TIobj + ) -> Iterator[T_TIobj]: + ... + + @ overload + def traverse(self: T_TIobj, + predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], + prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], + depth: int, branch_first: bool, visit_once: bool, + ignore_self: Literal[True], + as_edge: Literal[False], + ) -> Iterator[T_TIobj]: + ... + + @ overload + def traverse(self: T_TIobj, + predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], + prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], + depth: int, branch_first: bool, visit_once: bool, + ignore_self: Literal[False], + as_edge: Literal[True], + ) -> Iterator[Tuple[Union[T_TIobj, None], T_TIobj]]: + ... + + @ overload + def traverse(self: T_TIobj, + predicate: Callable[[Union[T_TIobj, TIobj_tuple], int], bool], + prune: Callable[[Union[T_TIobj, TIobj_tuple], int], bool], + depth: int, branch_first: bool, visit_once: bool, + ignore_self: Literal[True], + as_edge: Literal[True], + ) -> Iterator[Tuple[T_TIobj, T_TIobj]]: + ... + + def traverse(self: T_TIobj, + predicate: Callable[[Union[T_TIobj, TIobj_tuple], int], + bool] = lambda i, d: True, + prune: Callable[[Union[T_TIobj, TIobj_tuple], int], + bool] = lambda i, d: False, + depth: int = -1, branch_first: bool = True, visit_once: bool = True, + ignore_self: int = 1, as_edge: bool = False + ) -> Union[Iterator[T_TIobj], + Iterator[Tuple[T_TIobj, T_TIobj]], + Iterator[TIobj_tuple]]: + """For documentation, see util.Traversable._traverse()""" + + """ + # To typecheck instead of using cast. + import itertools + from git.types import TypeGuard + def is_commit_traversed(inp: Tuple) -> TypeGuard[Tuple[Iterator[Tuple['Commit', 'Commit']]]]: + for x in inp[1]: + if not isinstance(x, tuple) and len(x) != 2: + if all(isinstance(inner, Commit) for inner in x): + continue + return True + + ret = super(Commit, self).traverse(predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge) + ret_tup = itertools.tee(ret, 2) + assert is_commit_traversed(ret_tup), f"{[type(x) for x in list(ret_tup[0])]}" + return ret_tup[0] + """ + return cast(Union[Iterator[T_TIobj], + Iterator[Tuple[Union[None, T_TIobj], T_TIobj]]], + super(TraversableIterableObj, self)._traverse( + predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge # type: ignore + )) From b76b99184e8f0e16ba66a730846f3d61c72061fe Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:02:02 +0100 Subject: [PATCH 0704/2375] Update base.py --- git/repo/base.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index bb8ddf135..355f93999 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -422,14 +422,14 @@ def _to_full_tag_path(path): def create_head(self, path: PathLike, commit: str = 'HEAD', force: bool = False, logmsg: Optional[str] = None - ) -> Head: + ) -> 'Head': """Create a new head within the repository. For more documentation, please see the Head.create method. :return: newly created Head Reference""" return Head.create(self, path, commit, logmsg, force) - def delete_head(self, *heads: 'SymbolicReference', **kwargs: Any) -> None: + def delete_head(self, *heads: 'Head', **kwargs: Any) -> None: """Delete the given heads :param kwargs: Additional keyword arguments to be passed to git-branch""" @@ -788,10 +788,10 @@ def ignored(self, *paths: PathLike) -> List[PathLike]: return proc.replace("\\\\", "\\").replace('"', "").split("\n") @property - def active_branch(self) -> 'SymbolicReference': + def active_branch(self) -> Head: """The name of the currently active branch. - :return: Head to the active branch""" + # reveal_type(self.head.reference) # => Reference return self.head.reference def blame_incremental(self, rev: TBD, file: TBD, **kwargs: Any) -> Optional[Iterator['BlameEntry']]: From 1a360c8c1aa552e9674e1a6d6b1b1e4aacac3c2e Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:05:19 +0100 Subject: [PATCH 0705/2375] Update test_refs.py --- test/test_refs.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/test/test_refs.py b/test/test_refs.py index 1315f885f..ab760a6f5 100644 --- a/test/test_refs.py +++ b/test/test_refs.py @@ -125,11 +125,15 @@ def test_heads(self, rwrepo): gp_tracking_branch = rwrepo.create_head('gp_tracking#123') special_name_remote_ref = rwrepo.remotes[0].refs[special_name] # get correct type gp_tracking_branch.set_tracking_branch(special_name_remote_ref) - assert gp_tracking_branch.tracking_branch().path == special_name_remote_ref.path + TBranch = gp_tracking_branch.tracking_branch() + if TBranch is not None: + assert TBranch.path == special_name_remote_ref.path git_tracking_branch = rwrepo.create_head('git_tracking#123') rwrepo.git.branch('-u', special_name_remote_ref.name, git_tracking_branch.name) - assert git_tracking_branch.tracking_branch().name == special_name_remote_ref.name + TBranch = gp_tracking_branch.tracking_branch() + if TBranch is not None: + assert TBranch.name == special_name_remote_ref.name # END for each head # verify REFLOG gets altered @@ -453,7 +457,7 @@ def test_head_reset(self, rw_repo): self.assertRaises(OSError, SymbolicReference.create, rw_repo, symref_path, cur_head.reference.commit) # it works if the new ref points to the same reference - SymbolicReference.create(rw_repo, symref.path, symref.reference).path == symref.path # @NoEffect + assert SymbolicReference.create(rw_repo, symref.path, symref.reference).path == symref.path # @NoEffect SymbolicReference.delete(rw_repo, symref) # would raise if the symref wouldn't have been deletedpbl symref = SymbolicReference.create(rw_repo, symref_path, cur_head.reference) From d9f140a529901b5e07cda3665494104f23a380be Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:06:52 +0100 Subject: [PATCH 0706/2375] Update test_refs.py --- test/test_refs.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/test/test_refs.py b/test/test_refs.py index 1315f885f..ab760a6f5 100644 --- a/test/test_refs.py +++ b/test/test_refs.py @@ -125,11 +125,15 @@ def test_heads(self, rwrepo): gp_tracking_branch = rwrepo.create_head('gp_tracking#123') special_name_remote_ref = rwrepo.remotes[0].refs[special_name] # get correct type gp_tracking_branch.set_tracking_branch(special_name_remote_ref) - assert gp_tracking_branch.tracking_branch().path == special_name_remote_ref.path + TBranch = gp_tracking_branch.tracking_branch() + if TBranch is not None: + assert TBranch.path == special_name_remote_ref.path git_tracking_branch = rwrepo.create_head('git_tracking#123') rwrepo.git.branch('-u', special_name_remote_ref.name, git_tracking_branch.name) - assert git_tracking_branch.tracking_branch().name == special_name_remote_ref.name + TBranch = gp_tracking_branch.tracking_branch() + if TBranch is not None: + assert TBranch.name == special_name_remote_ref.name # END for each head # verify REFLOG gets altered @@ -453,7 +457,7 @@ def test_head_reset(self, rw_repo): self.assertRaises(OSError, SymbolicReference.create, rw_repo, symref_path, cur_head.reference.commit) # it works if the new ref points to the same reference - SymbolicReference.create(rw_repo, symref.path, symref.reference).path == symref.path # @NoEffect + assert SymbolicReference.create(rw_repo, symref.path, symref.reference).path == symref.path # @NoEffect SymbolicReference.delete(rw_repo, symref) # would raise if the symref wouldn't have been deletedpbl symref = SymbolicReference.create(rw_repo, symref_path, cur_head.reference) From 464848e3c5961a2840533c6de58cb3a5d253711b Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:08:02 +0100 Subject: [PATCH 0707/2375] Update config.py --- git/config.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/git/config.py b/git/config.py index c4b26ba63..ad02b4373 100644 --- a/git/config.py +++ b/git/config.py @@ -41,12 +41,13 @@ T_ConfigParser = TypeVar('T_ConfigParser', bound='GitConfigParser') -if sys.version_info[:2] < (3, 7): - from collections import OrderedDict - OrderedDict_OMD = OrderedDict +if sys.version_info[:3] < (3, 7, 2): + # typing.Ordereddict not added until py 3.7.2 + from collections import OrderedDict # type: ignore # until 3.6 dropped + OrderedDict_OMD = OrderedDict # type: ignore # until 3.6 dropped else: - from typing import OrderedDict - OrderedDict_OMD = OrderedDict[str, List[_T]] + from typing import OrderedDict # type: ignore # until 3.6 dropped + OrderedDict_OMD = OrderedDict[str, List[_T]] # type: ignore[assignment, misc] # ------------------------------------------------------------- From b833eebece8d0c6cb1c79bc06e8ff9f26b994bb6 Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:10:21 +0100 Subject: [PATCH 0708/2375] Update tag.py --- git/refs/tag.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/git/refs/tag.py b/git/refs/tag.py index 281ce09ad..edfab33d8 100644 --- a/git/refs/tag.py +++ b/git/refs/tag.py @@ -4,13 +4,14 @@ # typing ------------------------------------------------------------------ -from typing import Any, Union, TYPE_CHECKING +from typing import Any, Type, Union, TYPE_CHECKING from git.types import Commit_ish, PathLike if TYPE_CHECKING: from git.repo import Repo from git.objects import Commit from git.objects import TagObject + from git.refs import SymbolicReference # ------------------------------------------------------------------------------ @@ -68,7 +69,8 @@ def object(self) -> Commit_ish: # type: ignore[override] return Reference._get_object(self) @classmethod - def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'HEAD', + def create(cls: Type['TagReference'], repo: 'Repo', path: PathLike, + reference: Union[str, 'SymbolicReference'] = 'HEAD', logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any) -> 'TagReference': """Create a new tag reference. @@ -78,7 +80,7 @@ def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] The prefix refs/tags is implied :param ref: - A reference to the object you want to tag. It can be a commit, tree or + A reference to the Object you want to tag. The Object can be a commit, tree or blob. :param logmsg: @@ -98,7 +100,9 @@ def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] Additional keyword arguments to be passed to git-tag :return: A new TagReference""" - args = (path, reference) + if 'ref' in kwargs and kwargs['ref']: + reference = kwargs['ref'] + if logmsg: kwargs['m'] = logmsg elif 'message' in kwargs and kwargs['message']: @@ -107,11 +111,13 @@ def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] if force: kwargs['f'] = True + args = (path, reference) + repo.git.tag(*args, **kwargs) return TagReference(repo, "%s/%s" % (cls._common_path_default, path)) @classmethod - def delete(cls, repo: 'Repo', *tags: 'TagReference') -> None: + def delete(cls, repo: 'Repo', *tags: 'TagReference') -> None: # type: ignore[override] """Delete the given existing tag or tags""" repo.git.tag("-d", *tags) From eaaa546d8aade3501676a3b017b0f8a778eeb9ab Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:13:38 +0100 Subject: [PATCH 0709/2375] Update head.py --- git/refs/head.py | 263 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 263 insertions(+) diff --git a/git/refs/head.py b/git/refs/head.py index 338efce9f..cdce31460 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -11,6 +11,21 @@ from git.types import PathLike, Commit_ish +if TYPE_CHECKING: + from git.repo import Repo + from git.objects import Commitfrom git.config import GitConfigParser, SectionConstraint +from git.util import join_path +from git.exc import GitCommandError + +from .symbolic import SymbolicReference +from .reference import Reference + +# typinng --------------------------------------------------- + +from typing import Any, Sequence, Union, TYPE_CHECKING + +from git.types import PathLike, Commit_ish + if TYPE_CHECKING: from git.repo import Repo from git.objects import Commit @@ -106,6 +121,254 @@ def reset(self, commit: Union[Commit_ish, SymbolicReference, str] = 'HEAD', return self +class Head(Reference): + + """A Head is a named reference to a Commit. Every Head instance contains a name + and a Commit object. + + Examples:: + + >>> repo = Repo("/path/to/repo") + >>> head = repo.heads[0] + + >>> head.name + 'master' + + >>> head.commit + + + >>> head.commit.hexsha + '1c09f116cbc2cb4100fb6935bb162daa4723f455'""" + _common_path_default = "refs/heads" + k_config_remote = "remote" + k_config_remote_ref = "merge" # branch to merge from remote + + @classmethod + def delete(cls, repo: 'Repo', *heads: 'Head', **kwargs: Any): + """Delete the given heads + + :param force: + If True, the heads will be deleted even if they are not yet merged into + the main development stream. + Default False""" + force = kwargs.get("force", False) + flag = "-d" + if force: + flag = "-D" + repo.git.branch(flag, *heads) + + def set_tracking_branch(self, remote_reference: Union['RemoteReference', None]) -> 'Head': + """ + Configure this branch to track the given remote reference. This will alter + this branch's configuration accordingly. + + :param remote_reference: The remote reference to track or None to untrack + any references + :return: self""" + from .remote import RemoteReference + if remote_reference is not None and not isinstance(remote_reference, RemoteReference): + raise ValueError("Incorrect parameter type: %r" % remote_reference) + # END handle type + + with self.config_writer() as writer: + if remote_reference is None: + writer.remove_option(self.k_config_remote) + writer.remove_option(self.k_config_remote_ref) + if len(writer.options()) == 0: + writer.remove_section() + else: + writer.set_value(self.k_config_remote, remote_reference.remote_name) + writer.set_value(self.k_config_remote_ref, Head.to_full_path(remote_reference.remote_head)) + + return self + + def tracking_branch(self) -> Union['RemoteReference', None]: + """ + :return: The remote_reference we are tracking, or None if we are + not a tracking branch""" + from .remote import RemoteReference + reader = self.config_reader() + if reader.has_option(self.k_config_remote) and reader.has_option(self.k_config_remote_ref): + ref = Head(self.repo, Head.to_full_path(strip_quotes(reader.get_value(self.k_config_remote_ref)))) + remote_refpath = RemoteReference.to_full_path(join_path(reader.get_value(self.k_config_remote), ref.name)) + return RemoteReference(self.repo, remote_refpath) + # END handle have tracking branch + + # we are not a tracking branch + return None + + def rename(self, new_path: PathLike, force: bool = False) -> 'Head': + """Rename self to a new path + + :param new_path: + Either a simple name or a path, i.e. new_name or features/new_name. + The prefix refs/heads is implied + + :param force: + If True, the rename will succeed even if a head with the target name + already exists. + + :return: self + :note: respects the ref log as git commands are used""" + flag = "-m" + if force: + flag = "-M" + + self.repo.git.branch(flag, self, new_path) + self.path = "%s/%s" % (self._common_path_default, new_path) + return self + + def checkout(self, force: bool = False, **kwargs: Any) -> Union['HEAD', 'Head']: + """Checkout this head by setting the HEAD to this reference, by updating the index + to reflect the tree we point to and by updating the working tree to reflect + the latest index. + + The command will fail if changed working tree files would be overwritten. + + :param force: + If True, changes to the index and the working tree will be discarded. + If False, GitCommandError will be raised in that situation. + + :param kwargs: + Additional keyword arguments to be passed to git checkout, i.e. + b='new_branch' to create a new branch at the given spot. + + :return: + The active branch after the checkout operation, usually self unless + a new branch has been created. + If there is no active branch, as the HEAD is now detached, the HEAD + reference will be returned instead. + + :note: + By default it is only allowed to checkout heads - everything else + will leave the HEAD detached which is allowed and possible, but remains + a special state that some tools might not be able to handle.""" + kwargs['f'] = force + if kwargs['f'] is False: + kwargs.pop('f') + + self.repo.git.checkout(self, **kwargs) + if self.repo.head.is_detached: + return self.repo.head + else: + return self.repo.active_branch + + #{ Configuration + def _config_parser(self, read_only: bool) -> SectionConstraint[GitConfigParser]: + if read_only: + parser = self.repo.config_reader() + else: + parser = self.repo.config_writer() + # END handle parser instance + + return SectionConstraint(parser, 'branch "%s"' % self.name) + + def config_reader(self) -> SectionConstraint[GitConfigParser]: + """ + :return: A configuration parser instance constrained to only read + this instance's values""" + return self._config_parser(read_only=True) + + def config_writer(self) -> SectionConstraint[GitConfigParser]: + """ + :return: A configuration writer instance with read-and write access + to options of this head""" + return self._config_parser(read_only=False) + + #} END configuration + + from git.refs import RemoteReference + +# ------------------------------------------------------------------- + +__all__ = ["HEAD", "Head"] + + +def strip_quotes(string): + if string.startswith('"') and string.endswith('"'): + return string[1:-1] + return string + + +class HEAD(SymbolicReference): + + """Special case of a Symbolic Reference as it represents the repository's + HEAD reference.""" + _HEAD_NAME = 'HEAD' + _ORIG_HEAD_NAME = 'ORIG_HEAD' + __slots__ = () + + def __init__(self, repo: 'Repo', path: PathLike = _HEAD_NAME): + if path != self._HEAD_NAME: + raise ValueError("HEAD instance must point to %r, got %r" % (self._HEAD_NAME, path)) + super(HEAD, self).__init__(repo, path) + self.commit: 'Commit' + + def orig_head(self) -> SymbolicReference: + """ + :return: SymbolicReference pointing at the ORIG_HEAD, which is maintained + to contain the previous value of HEAD""" + return SymbolicReference(self.repo, self._ORIG_HEAD_NAME) + + def reset(self, commit: Union[Commit_ish, SymbolicReference, str] = 'HEAD', + index: bool = True, working_tree: bool = False, + paths: Union[PathLike, Sequence[PathLike], None] = None, **kwargs: Any) -> 'HEAD': + """Reset our HEAD to the given commit optionally synchronizing + the index and working tree. The reference we refer to will be set to + commit as well. + + :param commit: + Commit object, Reference Object or string identifying a revision we + should reset HEAD to. + + :param index: + If True, the index will be set to match the given commit. Otherwise + it will not be touched. + + :param working_tree: + If True, the working tree will be forcefully adjusted to match the given + commit, possibly overwriting uncommitted changes without warning. + If working_tree is True, index must be true as well + + :param paths: + Single path or list of paths relative to the git root directory + that are to be reset. This allows to partially reset individual files. + + :param kwargs: + Additional arguments passed to git-reset. + + :return: self""" + mode: Union[str, None] + mode = "--soft" + if index: + mode = "--mixed" + + # it appears, some git-versions declare mixed and paths deprecated + # see http://github.com/Byron/GitPython/issues#issue/2 + if paths: + mode = None + # END special case + # END handle index + + if working_tree: + mode = "--hard" + if not index: + raise ValueError("Cannot reset the working tree if the index is not reset as well") + + # END working tree handling + + try: + self.repo.git.reset(mode, commit, '--', paths, **kwargs) + except GitCommandError as e: + # git nowadays may use 1 as status to indicate there are still unstaged + # modifications after the reset + if e.status != 1: + raise + # END handle exception + + return self + + class Head(Reference): """A Head is a named reference to a Commit. Every Head instance contains a name From e2d5e0e42a7bb664560133d1c3efeb7b4686f7c7 Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:15:02 +0100 Subject: [PATCH 0710/2375] Update head.py --- git/refs/head.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/git/refs/head.py b/git/refs/head.py index 338efce9f..260bf5e7e 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -1,4 +1,4 @@ -from git.config import SectionConstraint +from git.config import GitConfigParser, SectionConstraint from git.util import join_path from git.exc import GitCommandError @@ -142,7 +142,7 @@ def delete(cls, repo: 'Repo', *heads: 'Head', **kwargs: Any): flag = "-D" repo.git.branch(flag, *heads) - def set_tracking_branch(self, remote_reference: 'RemoteReference') -> 'Head': + def set_tracking_branch(self, remote_reference: Union['RemoteReference', None]) -> 'Head': """ Configure this branch to track the given remote reference. This will alter this branch's configuration accordingly. @@ -203,7 +203,7 @@ def rename(self, new_path: PathLike, force: bool = False) -> 'Head': self.path = "%s/%s" % (self._common_path_default, new_path) return self - def checkout(self, force: bool = False, **kwargs: Any): + def checkout(self, force: bool = False, **kwargs: Any) -> Union['HEAD', 'Head']: """Checkout this head by setting the HEAD to this reference, by updating the index to reflect the tree we point to and by updating the working tree to reflect the latest index. @@ -235,10 +235,11 @@ def checkout(self, force: bool = False, **kwargs: Any): self.repo.git.checkout(self, **kwargs) if self.repo.head.is_detached: return self.repo.head - return self.repo.active_branch + else: + return self.repo.active_branch #{ Configuration - def _config_parser(self, read_only: bool) -> SectionConstraint: + def _config_parser(self, read_only: bool) -> SectionConstraint[GitConfigParser]: if read_only: parser = self.repo.config_reader() else: @@ -247,13 +248,13 @@ def _config_parser(self, read_only: bool) -> SectionConstraint: return SectionConstraint(parser, 'branch "%s"' % self.name) - def config_reader(self) -> SectionConstraint: + def config_reader(self) -> SectionConstraint[GitConfigParser]: """ :return: A configuration parser instance constrained to only read this instance's values""" return self._config_parser(read_only=True) - def config_writer(self) -> SectionConstraint: + def config_writer(self) -> SectionConstraint[GitConfigParser]: """ :return: A configuration writer instance with read-and write access to options of this head""" From e766919411a976fb001cf089625d92a00400b8af Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:17:27 +0100 Subject: [PATCH 0711/2375] Update head.py --- git/refs/head.py | 264 +---------------------------------------------- 1 file changed, 1 insertion(+), 263 deletions(-) diff --git a/git/refs/head.py b/git/refs/head.py index cdce31460..260bf5e7e 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -1,19 +1,4 @@ -from git.config import SectionConstraint -from git.util import join_path -from git.exc import GitCommandError - -from .symbolic import SymbolicReference -from .reference import Reference - -# typinng --------------------------------------------------- - -from typing import Any, Sequence, Union, TYPE_CHECKING - -from git.types import PathLike, Commit_ish - -if TYPE_CHECKING: - from git.repo import Repo - from git.objects import Commitfrom git.config import GitConfigParser, SectionConstraint +from git.config import GitConfigParser, SectionConstraint from git.util import join_path from git.exc import GitCommandError @@ -276,250 +261,3 @@ def config_writer(self) -> SectionConstraint[GitConfigParser]: return self._config_parser(read_only=False) #} END configuration - - from git.refs import RemoteReference - -# ------------------------------------------------------------------- - -__all__ = ["HEAD", "Head"] - - -def strip_quotes(string): - if string.startswith('"') and string.endswith('"'): - return string[1:-1] - return string - - -class HEAD(SymbolicReference): - - """Special case of a Symbolic Reference as it represents the repository's - HEAD reference.""" - _HEAD_NAME = 'HEAD' - _ORIG_HEAD_NAME = 'ORIG_HEAD' - __slots__ = () - - def __init__(self, repo: 'Repo', path: PathLike = _HEAD_NAME): - if path != self._HEAD_NAME: - raise ValueError("HEAD instance must point to %r, got %r" % (self._HEAD_NAME, path)) - super(HEAD, self).__init__(repo, path) - self.commit: 'Commit' - - def orig_head(self) -> SymbolicReference: - """ - :return: SymbolicReference pointing at the ORIG_HEAD, which is maintained - to contain the previous value of HEAD""" - return SymbolicReference(self.repo, self._ORIG_HEAD_NAME) - - def reset(self, commit: Union[Commit_ish, SymbolicReference, str] = 'HEAD', - index: bool = True, working_tree: bool = False, - paths: Union[PathLike, Sequence[PathLike], None] = None, **kwargs: Any) -> 'HEAD': - """Reset our HEAD to the given commit optionally synchronizing - the index and working tree. The reference we refer to will be set to - commit as well. - - :param commit: - Commit object, Reference Object or string identifying a revision we - should reset HEAD to. - - :param index: - If True, the index will be set to match the given commit. Otherwise - it will not be touched. - - :param working_tree: - If True, the working tree will be forcefully adjusted to match the given - commit, possibly overwriting uncommitted changes without warning. - If working_tree is True, index must be true as well - - :param paths: - Single path or list of paths relative to the git root directory - that are to be reset. This allows to partially reset individual files. - - :param kwargs: - Additional arguments passed to git-reset. - - :return: self""" - mode: Union[str, None] - mode = "--soft" - if index: - mode = "--mixed" - - # it appears, some git-versions declare mixed and paths deprecated - # see http://github.com/Byron/GitPython/issues#issue/2 - if paths: - mode = None - # END special case - # END handle index - - if working_tree: - mode = "--hard" - if not index: - raise ValueError("Cannot reset the working tree if the index is not reset as well") - - # END working tree handling - - try: - self.repo.git.reset(mode, commit, '--', paths, **kwargs) - except GitCommandError as e: - # git nowadays may use 1 as status to indicate there are still unstaged - # modifications after the reset - if e.status != 1: - raise - # END handle exception - - return self - - -class Head(Reference): - - """A Head is a named reference to a Commit. Every Head instance contains a name - and a Commit object. - - Examples:: - - >>> repo = Repo("/path/to/repo") - >>> head = repo.heads[0] - - >>> head.name - 'master' - - >>> head.commit - - - >>> head.commit.hexsha - '1c09f116cbc2cb4100fb6935bb162daa4723f455'""" - _common_path_default = "refs/heads" - k_config_remote = "remote" - k_config_remote_ref = "merge" # branch to merge from remote - - @classmethod - def delete(cls, repo: 'Repo', *heads: 'Head', **kwargs: Any): - """Delete the given heads - - :param force: - If True, the heads will be deleted even if they are not yet merged into - the main development stream. - Default False""" - force = kwargs.get("force", False) - flag = "-d" - if force: - flag = "-D" - repo.git.branch(flag, *heads) - - def set_tracking_branch(self, remote_reference: 'RemoteReference') -> 'Head': - """ - Configure this branch to track the given remote reference. This will alter - this branch's configuration accordingly. - - :param remote_reference: The remote reference to track or None to untrack - any references - :return: self""" - from .remote import RemoteReference - if remote_reference is not None and not isinstance(remote_reference, RemoteReference): - raise ValueError("Incorrect parameter type: %r" % remote_reference) - # END handle type - - with self.config_writer() as writer: - if remote_reference is None: - writer.remove_option(self.k_config_remote) - writer.remove_option(self.k_config_remote_ref) - if len(writer.options()) == 0: - writer.remove_section() - else: - writer.set_value(self.k_config_remote, remote_reference.remote_name) - writer.set_value(self.k_config_remote_ref, Head.to_full_path(remote_reference.remote_head)) - - return self - - def tracking_branch(self) -> Union['RemoteReference', None]: - """ - :return: The remote_reference we are tracking, or None if we are - not a tracking branch""" - from .remote import RemoteReference - reader = self.config_reader() - if reader.has_option(self.k_config_remote) and reader.has_option(self.k_config_remote_ref): - ref = Head(self.repo, Head.to_full_path(strip_quotes(reader.get_value(self.k_config_remote_ref)))) - remote_refpath = RemoteReference.to_full_path(join_path(reader.get_value(self.k_config_remote), ref.name)) - return RemoteReference(self.repo, remote_refpath) - # END handle have tracking branch - - # we are not a tracking branch - return None - - def rename(self, new_path: PathLike, force: bool = False) -> 'Head': - """Rename self to a new path - - :param new_path: - Either a simple name or a path, i.e. new_name or features/new_name. - The prefix refs/heads is implied - - :param force: - If True, the rename will succeed even if a head with the target name - already exists. - - :return: self - :note: respects the ref log as git commands are used""" - flag = "-m" - if force: - flag = "-M" - - self.repo.git.branch(flag, self, new_path) - self.path = "%s/%s" % (self._common_path_default, new_path) - return self - - def checkout(self, force: bool = False, **kwargs: Any): - """Checkout this head by setting the HEAD to this reference, by updating the index - to reflect the tree we point to and by updating the working tree to reflect - the latest index. - - The command will fail if changed working tree files would be overwritten. - - :param force: - If True, changes to the index and the working tree will be discarded. - If False, GitCommandError will be raised in that situation. - - :param kwargs: - Additional keyword arguments to be passed to git checkout, i.e. - b='new_branch' to create a new branch at the given spot. - - :return: - The active branch after the checkout operation, usually self unless - a new branch has been created. - If there is no active branch, as the HEAD is now detached, the HEAD - reference will be returned instead. - - :note: - By default it is only allowed to checkout heads - everything else - will leave the HEAD detached which is allowed and possible, but remains - a special state that some tools might not be able to handle.""" - kwargs['f'] = force - if kwargs['f'] is False: - kwargs.pop('f') - - self.repo.git.checkout(self, **kwargs) - if self.repo.head.is_detached: - return self.repo.head - return self.repo.active_branch - - #{ Configuration - def _config_parser(self, read_only: bool) -> SectionConstraint: - if read_only: - parser = self.repo.config_reader() - else: - parser = self.repo.config_writer() - # END handle parser instance - - return SectionConstraint(parser, 'branch "%s"' % self.name) - - def config_reader(self) -> SectionConstraint: - """ - :return: A configuration parser instance constrained to only read - this instance's values""" - return self._config_parser(read_only=True) - - def config_writer(self) -> SectionConstraint: - """ - :return: A configuration writer instance with read-and write access - to options of this head""" - return self._config_parser(read_only=False) - - #} END configuration From 995547aa9b2ca1f1d7795d91a916f83c5d1a96f9 Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:18:32 +0100 Subject: [PATCH 0712/2375] Update reference.py --- git/refs/reference.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/git/refs/reference.py b/git/refs/reference.py index 646622816..bc2c6e807 100644 --- a/git/refs/reference.py +++ b/git/refs/reference.py @@ -62,7 +62,9 @@ def __str__(self) -> str: #{ Interface - def set_object(self, object: Commit_ish, logmsg: Union[str, None] = None) -> 'Reference': # @ReservedAssignment + # @ReservedAssignment + def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None + ) -> 'SymbolicReference': """Special version which checks if the head-log needs an update as well :return: self""" oldbinsha = None From c081f51b6d4ea6020a411e4ec5c2f90a48e10cad Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:27:55 +0100 Subject: [PATCH 0713/2375] update types commit.py --- git/objects/commit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/git/objects/commit.py b/git/objects/commit.py index 884f65228..9d7096563 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -128,6 +128,7 @@ def __init__(self, repo: 'Repo', binsha: bytes, tree: Union[Tree, None] = None, as what time.altzone returns. The sign is inverted compared to git's UTC timezone.""" super(Commit, self).__init__(repo, binsha) + self.binsha = binsha if tree is not None: assert isinstance(tree, Tree), "Tree needs to be a Tree instance, was %s" % type(tree) if tree is not None: From 0affa33e449db5ba3e00e4c606e6d0c78ce228cf Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:28:39 +0100 Subject: [PATCH 0714/2375] update types submodule/base.py --- git/objects/submodule/base.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 29212167c..143511909 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -563,6 +563,7 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: progress.update(op, i, len_rmts, prefix + "Done fetching remote of submodule %r" % self.name) # END fetch new data except InvalidGitRepositoryError: + mrepo = None if not init: return self # END early abort if init is not allowed @@ -603,7 +604,7 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: # make sure HEAD is not detached mrepo.head.set_reference(local_branch, logmsg="submodule: attaching head to %s" % local_branch) - mrepo.head.ref.set_tracking_branch(remote_branch) + mrepo.head.reference.set_tracking_branch(remote_branch) except (IndexError, InvalidGitRepositoryError): log.warning("Failed to checkout tracking branch %s", self.branch_path) # END handle tracking branch @@ -629,13 +630,14 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: if mrepo is not None and to_latest_revision: msg_base = "Cannot update to latest revision in repository at %r as " % mrepo.working_dir if not is_detached: - rref = mrepo.head.ref.tracking_branch() + rref = mrepo.head.reference.tracking_branch() if rref is not None: rcommit = rref.commit binsha = rcommit.binsha hexsha = rcommit.hexsha else: - log.error("%s a tracking branch was not set for local branch '%s'", msg_base, mrepo.head.ref) + log.error("%s a tracking branch was not set for local branch '%s'", + msg_base, mrepo.head.reference) # END handle remote ref else: log.error("%s there was no local tracking branch", msg_base) From a3cd08a402f9517583b263152dddfa0005934015 Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:29:15 +0100 Subject: [PATCH 0715/2375] update types submodule/root.py --- git/objects/submodule/root.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/git/objects/submodule/root.py b/git/objects/submodule/root.py index bcac5419a..5e84d1616 100644 --- a/git/objects/submodule/root.py +++ b/git/objects/submodule/root.py @@ -2,9 +2,7 @@ Submodule, UpdateProgress ) -from .util import ( - find_first_remote_branch -) +from .util import find_first_remote_branch from git.exc import InvalidGitRepositoryError import git From 03190098bdf0f4c0cbb90e39f464c3dd67b0ee1d Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:34:22 +0100 Subject: [PATCH 0716/2375] update types sybmbolic.py --- git/refs/symbolic.py | 172 ++++++++++++++++++++++++------------------- 1 file changed, 98 insertions(+), 74 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 0e9dad5cc..4171fe234 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -1,4 +1,3 @@ -from git.types import PathLike import os from git.compat import defenc @@ -17,17 +16,18 @@ BadName ) -import os.path as osp - -from .log import RefLog +from .log import RefLog, RefLogEntry # typing ------------------------------------------------------------------ -from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING # NOQA +from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING, cast # NOQA from git.types import Commit_ish, PathLike, TBD, Literal # NOQA if TYPE_CHECKING: from git.repo import Repo + from git.refs import Reference, Head, TagReference, RemoteReference + from git.config import GitConfigParser + from git.objects.commit import Actor T_References = TypeVar('T_References', bound='SymbolicReference') @@ -37,9 +37,9 @@ __all__ = ["SymbolicReference"] -def _git_dir(repo, path): +def _git_dir(repo: 'Repo', path: PathLike) -> PathLike: """ Find the git dir that's appropriate for the path""" - name = "%s" % (path,) + name = f"{path}" if name in ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'index', 'logs']: return repo.git_dir return repo.common_dir @@ -59,46 +59,47 @@ class SymbolicReference(object): _remote_common_path_default = "refs/remotes" _id_attribute_ = "name" - def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False): + def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False) -> None: self.repo = repo self.path = str(path) + self.ref = self._get_reference() def __str__(self) -> str: return self.path - def __repr__(self): + def __repr__(self) -> str: return '' % (self.__class__.__name__, self.path) - def __eq__(self, other): + def __eq__(self, other) -> bool: if hasattr(other, 'path'): return self.path == other.path return False - def __ne__(self, other): + def __ne__(self, other) -> bool: return not (self == other) def __hash__(self): return hash(self.path) @property - def name(self): + def name(self) -> str: """ :return: In case of symbolic references, the shortest assumable name is the path itself.""" - return self.path + return str(self.path) @property - def abspath(self): + def abspath(self) -> PathLike: return join_path_native(_git_dir(self.repo, self.path), self.path) @classmethod - def _get_packed_refs_path(cls, repo): - return osp.join(repo.common_dir, 'packed-refs') + def _get_packed_refs_path(cls, repo: 'Repo') -> str: + return os.path.join(repo.common_dir, 'packed-refs') @classmethod - def _iter_packed_refs(cls, repo): - """Returns an iterator yielding pairs of sha1/path pairs (as bytes) for the corresponding refs. + def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: + """Returns an iterator yielding pairs of sha1/path pairs for the corresponding refs. :note: The packed refs file will be kept open as long as we iterate""" try: with open(cls._get_packed_refs_path(repo), 'rt', encoding='UTF-8') as fp: @@ -126,7 +127,7 @@ def _iter_packed_refs(cls, repo): if line[0] == '^': continue - yield tuple(line.split(' ', 1)) + yield cast(Tuple[str, str], tuple(line.split(' ', 1))) # END for each line except OSError: return None @@ -137,26 +138,26 @@ def _iter_packed_refs(cls, repo): # alright. @classmethod - def dereference_recursive(cls, repo, ref_path): + def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: """ :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all intermediate references as required :param repo: the repository containing the reference at ref_path""" while True: - hexsha, ref_path = cls._get_ref_info(repo, ref_path) + hexsha, _ref_path_out = cls._get_ref_info(repo, ref_path) if hexsha is not None: return hexsha # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo, ref_path): + def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, PathLike]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" - tokens = None + tokens: Union[List[str], Tuple[str, str], None] = None repodir = _git_dir(repo, ref_path) try: - with open(osp.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: + with open(os.path.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: value = fp.read().rstrip() # Don't only split on spaces, but on whitespace, which allows to parse lines like # 60b64ef992065e2600bfef6187a97f92398a9144 branch 'master' of git-server:/path/to/repo @@ -188,13 +189,14 @@ def _get_ref_info_helper(cls, repo, ref_path): raise ValueError("Failed to parse reference information from %r" % ref_path) @classmethod - def _get_ref_info(cls, repo, ref_path): + def _get_ref_info(cls, repo: 'Repo', ref_path: PathLike + ) -> Union[Tuple[str, None], Tuple[None, PathLike]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" return cls._get_ref_info_helper(repo, ref_path) - def _get_object(self): + def _get_object(self) -> Commit_ish: """ :return: The object our ref currently refers to. Refs can be cached, they will @@ -203,7 +205,7 @@ def _get_object(self): # Our path will be resolved to the hexsha which will be used accordingly return Object.new_from_sha(self.repo, hex_to_bin(self.dereference_recursive(self.repo, self.path))) - def _get_commit(self): + def _get_commit(self) -> 'Commit': """ :return: Commit object we point to, works for detached and non-detached @@ -218,7 +220,8 @@ def _get_commit(self): # END handle type return obj - def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=None): + def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], + logmsg: Union[str, None] = None) -> None: """As set_object, but restricts the type of object to be a Commit :raise ValueError: If commit is not a Commit object or doesn't point to @@ -228,11 +231,13 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=Non invalid_type = False if isinstance(commit, Object): invalid_type = commit.type != Commit.type + commit = cast('Commit', commit) elif isinstance(commit, SymbolicReference): invalid_type = commit.object.type != Commit.type else: try: - invalid_type = self.repo.rev_parse(commit).type != Commit.type + commit = self.repo.rev_parse(commit) + invalid_type = commit.type != Commit.type except (BadObject, BadName) as e: raise ValueError("Invalid object: %s" % commit) from e # END handle exception @@ -245,9 +250,12 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=Non # we leave strings to the rev-parse method below self.set_object(commit, logmsg) - return self + # return self + return None - def set_object(self, object, logmsg=None): # @ReservedAssignment + def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], + logmsg: Union[str, None] = None + ) -> 'SymbolicReference': # @ReservedAssignment """Set the object we point to, possibly dereference our symbolic reference first. If the reference does not exist, it will be created @@ -274,10 +282,11 @@ def set_object(self, object, logmsg=None): # @ReservedAssignment # set the commit on our reference return self._get_reference().set_object(object, logmsg) - commit = property(_get_commit, set_commit, doc="Query or set commits directly") - object = property(_get_object, set_object, doc="Return the object our ref currently refers to") + commit = cast('Commit', property(_get_commit, set_commit, doc="Query or set commits directly")) + object = property(_get_object, set_object, doc="Return the object our ref currently refers to") # type: ignore - def _get_reference(self): + def _get_reference(self + ) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: """:return: Reference Object we point to :raise TypeError: If this symbolic reference is detached, hence it doesn't point to a reference, but to a commit""" @@ -286,7 +295,8 @@ def _get_reference(self): raise TypeError("%s is a detached symbolic reference as it points to %r" % (self, sha)) return self.from_path(self.repo, target_ref_path) - def set_reference(self, ref, logmsg=None): + def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None + ) -> 'SymbolicReference': """Set ourselves to the given ref. It will stay a symbol if the ref is a Reference. Otherwise an Object, given as Object instance or refspec, is assumed and if valid, will be set which effectively detaches the refererence if it was a purely @@ -327,7 +337,7 @@ def set_reference(self, ref, logmsg=None): raise TypeError("Require commit, got %r" % obj) # END verify type - oldbinsha = None + oldbinsha: bytes = b'' if logmsg is not None: try: oldbinsha = self.commit.binsha @@ -355,11 +365,16 @@ def set_reference(self, ref, logmsg=None): return self - # aliased reference - reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") - ref: Union[Commit_ish] = reference # type: ignore # Union[str, Commit_ish, SymbolicReference] + @ property + def reference(self) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: + return self._get_reference() - def is_valid(self): + @ reference.setter + def reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None + ) -> 'SymbolicReference': + return self.set_reference(ref=ref, logmsg=logmsg) + + def is_valid(self) -> bool: """ :return: True if the reference is valid, hence it can be read and points to @@ -371,7 +386,7 @@ def is_valid(self): else: return True - @property + @ property def is_detached(self): """ :return: @@ -383,7 +398,7 @@ def is_detached(self): except TypeError: return True - def log(self): + def log(self) -> 'RefLog': """ :return: RefLog for this reference. Its last entry reflects the latest change applied to this reference @@ -392,7 +407,8 @@ def log(self): instead of calling this method repeatedly. It should be considered read-only.""" return RefLog.from_file(RefLog.path(self)) - def log_append(self, oldbinsha, message, newbinsha=None): + def log_append(self, oldbinsha: bytes, message: Union[str, None], + newbinsha: Union[bytes, None] = None) -> 'RefLogEntry': """Append a logentry to the logfile of this ref :param oldbinsha: binary sha this ref used to point to @@ -404,15 +420,19 @@ def log_append(self, oldbinsha, message, newbinsha=None): # correct to allow overriding the committer on a per-commit level. # See https://github.com/gitpython-developers/GitPython/pull/146 try: - committer_or_reader = self.commit.committer + committer_or_reader: Union['Actor', 'GitConfigParser'] = self.commit.committer except ValueError: committer_or_reader = self.repo.config_reader() # end handle newly cloned repositories - return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, - (newbinsha is None and self.commit.binsha) or newbinsha, - message) + if newbinsha is None: + newbinsha = self.commit.binsha + + if message is None: + message = '' - def log_entry(self, index): + return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, newbinsha, message) + + def log_entry(self, index: int) -> RefLogEntry: """:return: RefLogEntry at the given index :param index: python list compatible positive or negative index @@ -421,22 +441,23 @@ def log_entry(self, index): In that case, it will be faster than the ``log()`` method""" return RefLog.entry_at(RefLog.path(self), index) - @classmethod - def to_full_path(cls, path) -> PathLike: + @ classmethod + def to_full_path(cls, path: Union[PathLike, 'SymbolicReference']) -> str: """ :return: string with a full repository-relative path which can be used to initialize a Reference instance, for instance by using ``Reference.from_path``""" if isinstance(path, SymbolicReference): path = path.path - full_ref_path = path + full_ref_path = str(path) if not cls._common_path_default: return full_ref_path - if not path.startswith(cls._common_path_default + "/"): + + if not str(path).startswith(cls._common_path_default + "/"): full_ref_path = '%s/%s' % (cls._common_path_default, path) return full_ref_path - @classmethod - def delete(cls, repo, path): + @ classmethod + def delete(cls, repo: 'Repo', path: PathLike) -> None: """Delete the reference at the given path :param repo: @@ -447,8 +468,8 @@ def delete(cls, repo, path): or just "myreference", hence 'refs/' is implied. Alternatively the symbolic reference to be deleted""" full_ref_path = cls.to_full_path(path) - abs_path = osp.join(repo.common_dir, full_ref_path) - if osp.exists(abs_path): + abs_path = os.path.join(repo.common_dir, full_ref_path) + if os.path.exists(abs_path): os.remove(abs_path) else: # check packed refs @@ -458,8 +479,8 @@ def delete(cls, repo, path): new_lines = [] made_change = False dropped_last_line = False - for line in reader: - line = line.decode(defenc) + for line_bytes in reader: + line = line_bytes.decode(defenc) _, _, line_ref = line.partition(' ') line_ref = line_ref.strip() # keep line if it is a comment or if the ref to delete is not @@ -489,12 +510,14 @@ def delete(cls, repo, path): # delete the reflog reflog_path = RefLog.path(cls(repo, full_ref_path)) - if osp.isfile(reflog_path): + if os.path.isfile(reflog_path): os.remove(reflog_path) # END remove reflog - @classmethod - def _create(cls, repo, path, resolve, reference, force, logmsg=None): + @ classmethod + def _create(cls: Type[T_References], repo: 'Repo', path: PathLike, resolve: bool, + reference: Union[str, 'SymbolicReference'], + force: bool, logmsg: Union[str, None] = None) -> T_References: """internal method used to create a new symbolic reference. If resolve is False, the reference will be taken as is, creating a proper symbolic reference. Otherwise it will be resolved to the @@ -502,14 +525,14 @@ def _create(cls, repo, path, resolve, reference, force, logmsg=None): instead""" git_dir = _git_dir(repo, path) full_ref_path = cls.to_full_path(path) - abs_ref_path = osp.join(git_dir, full_ref_path) + abs_ref_path = os.path.join(git_dir, full_ref_path) # figure out target data target = reference if resolve: target = repo.rev_parse(str(reference)) - if not force and osp.isfile(abs_ref_path): + if not force and os.path.isfile(abs_ref_path): target_data = str(target) if isinstance(target, SymbolicReference): target_data = target.path @@ -527,8 +550,9 @@ def _create(cls, repo, path, resolve, reference, force, logmsg=None): return ref @classmethod - def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'HEAD', - logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any): + def create(cls: Type[T_References], repo: 'Repo', path: PathLike, + reference: Union[str, 'SymbolicReference'] = 'SymbolicReference', + logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any) -> T_References: """Create a new symbolic reference, hence a reference pointing , to another reference. :param repo: @@ -540,7 +564,7 @@ def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] :param reference: The reference to which the new symbolic reference should point to. - If it is a commit'ish, the symbolic ref will be detached. + If it is a ref to a commit'ish, the symbolic ref will be detached. :param force: if True, force creation even if a symbolic reference with that name already exists. @@ -559,7 +583,7 @@ def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] :note: This does not alter the current HEAD, index or Working Tree""" return cls._create(repo, path, cls._resolve_ref_on_create, reference, force, logmsg) - def rename(self, new_path, force=False): + def rename(self, new_path: str, force: bool = False) -> 'SymbolicReference': """Rename self to a new path :param new_path: @@ -577,9 +601,9 @@ def rename(self, new_path, force=False): if self.path == new_path: return self - new_abs_path = osp.join(_git_dir(self.repo, new_path), new_path) - cur_abs_path = osp.join(_git_dir(self.repo, self.path), self.path) - if osp.isfile(new_abs_path): + new_abs_path = os.path.join(_git_dir(self.repo, new_path), new_path) + cur_abs_path = os.path.join(_git_dir(self.repo, self.path), self.path) + if os.path.isfile(new_abs_path): if not force: # if they point to the same file, its not an error with open(new_abs_path, 'rb') as fd1: @@ -594,8 +618,8 @@ def rename(self, new_path, force=False): os.remove(new_abs_path) # END handle existing target file - dname = osp.dirname(new_abs_path) - if not osp.isdir(dname): + dname = os.path.dirname(new_abs_path) + if not os.path.isdir(dname): os.makedirs(dname) # END create directory @@ -630,7 +654,7 @@ def _iter_items(cls: Type[T_References], repo: 'Repo', common_path: Union[PathLi # read packed refs for _sha, rela_path in cls._iter_packed_refs(repo): - if rela_path.startswith(common_path): + if rela_path.startswith(str(common_path)): rela_paths.add(rela_path) # END relative path matches common path # END packed refs reading @@ -665,7 +689,7 @@ def iter_items(cls, repo: 'Repo', common_path: Union[PathLike, None] = None, *ar return (r for r in cls._iter_items(repo, common_path) if r.__class__ == SymbolicReference or not r.is_detached) @classmethod - def from_path(cls, repo, path): + def from_path(cls, repo: 'Repo', path: PathLike) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: """ :param path: full .git-directory-relative path name to the Reference to instantiate :note: use to_full_path() if you only have a partial path of a known Reference Type From a5a05d153ecdbd9b9bdb285a77f5b14d9c0344b0 Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 13:50:39 +0100 Subject: [PATCH 0717/2375] rvrt symbolic.py types --- git/refs/symbolic.py | 172 +++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 98 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 4171fe234..0e9dad5cc 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -1,3 +1,4 @@ +from git.types import PathLike import os from git.compat import defenc @@ -16,18 +17,17 @@ BadName ) -from .log import RefLog, RefLogEntry +import os.path as osp + +from .log import RefLog # typing ------------------------------------------------------------------ -from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING, cast # NOQA +from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING # NOQA from git.types import Commit_ish, PathLike, TBD, Literal # NOQA if TYPE_CHECKING: from git.repo import Repo - from git.refs import Reference, Head, TagReference, RemoteReference - from git.config import GitConfigParser - from git.objects.commit import Actor T_References = TypeVar('T_References', bound='SymbolicReference') @@ -37,9 +37,9 @@ __all__ = ["SymbolicReference"] -def _git_dir(repo: 'Repo', path: PathLike) -> PathLike: +def _git_dir(repo, path): """ Find the git dir that's appropriate for the path""" - name = f"{path}" + name = "%s" % (path,) if name in ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'index', 'logs']: return repo.git_dir return repo.common_dir @@ -59,47 +59,46 @@ class SymbolicReference(object): _remote_common_path_default = "refs/remotes" _id_attribute_ = "name" - def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False) -> None: + def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False): self.repo = repo self.path = str(path) - self.ref = self._get_reference() def __str__(self) -> str: return self.path - def __repr__(self) -> str: + def __repr__(self): return '' % (self.__class__.__name__, self.path) - def __eq__(self, other) -> bool: + def __eq__(self, other): if hasattr(other, 'path'): return self.path == other.path return False - def __ne__(self, other) -> bool: + def __ne__(self, other): return not (self == other) def __hash__(self): return hash(self.path) @property - def name(self) -> str: + def name(self): """ :return: In case of symbolic references, the shortest assumable name is the path itself.""" - return str(self.path) + return self.path @property - def abspath(self) -> PathLike: + def abspath(self): return join_path_native(_git_dir(self.repo, self.path), self.path) @classmethod - def _get_packed_refs_path(cls, repo: 'Repo') -> str: - return os.path.join(repo.common_dir, 'packed-refs') + def _get_packed_refs_path(cls, repo): + return osp.join(repo.common_dir, 'packed-refs') @classmethod - def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: - """Returns an iterator yielding pairs of sha1/path pairs for the corresponding refs. + def _iter_packed_refs(cls, repo): + """Returns an iterator yielding pairs of sha1/path pairs (as bytes) for the corresponding refs. :note: The packed refs file will be kept open as long as we iterate""" try: with open(cls._get_packed_refs_path(repo), 'rt', encoding='UTF-8') as fp: @@ -127,7 +126,7 @@ def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: if line[0] == '^': continue - yield cast(Tuple[str, str], tuple(line.split(' ', 1))) + yield tuple(line.split(' ', 1)) # END for each line except OSError: return None @@ -138,26 +137,26 @@ def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: # alright. @classmethod - def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: + def dereference_recursive(cls, repo, ref_path): """ :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all intermediate references as required :param repo: the repository containing the reference at ref_path""" while True: - hexsha, _ref_path_out = cls._get_ref_info(repo, ref_path) + hexsha, ref_path = cls._get_ref_info(repo, ref_path) if hexsha is not None: return hexsha # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, PathLike]]: + def _get_ref_info_helper(cls, repo, ref_path): """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" - tokens: Union[List[str], Tuple[str, str], None] = None + tokens = None repodir = _git_dir(repo, ref_path) try: - with open(os.path.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: + with open(osp.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: value = fp.read().rstrip() # Don't only split on spaces, but on whitespace, which allows to parse lines like # 60b64ef992065e2600bfef6187a97f92398a9144 branch 'master' of git-server:/path/to/repo @@ -189,14 +188,13 @@ def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[s raise ValueError("Failed to parse reference information from %r" % ref_path) @classmethod - def _get_ref_info(cls, repo: 'Repo', ref_path: PathLike - ) -> Union[Tuple[str, None], Tuple[None, PathLike]]: + def _get_ref_info(cls, repo, ref_path): """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" return cls._get_ref_info_helper(repo, ref_path) - def _get_object(self) -> Commit_ish: + def _get_object(self): """ :return: The object our ref currently refers to. Refs can be cached, they will @@ -205,7 +203,7 @@ def _get_object(self) -> Commit_ish: # Our path will be resolved to the hexsha which will be used accordingly return Object.new_from_sha(self.repo, hex_to_bin(self.dereference_recursive(self.repo, self.path))) - def _get_commit(self) -> 'Commit': + def _get_commit(self): """ :return: Commit object we point to, works for detached and non-detached @@ -220,8 +218,7 @@ def _get_commit(self) -> 'Commit': # END handle type return obj - def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], - logmsg: Union[str, None] = None) -> None: + def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=None): """As set_object, but restricts the type of object to be a Commit :raise ValueError: If commit is not a Commit object or doesn't point to @@ -231,13 +228,11 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], invalid_type = False if isinstance(commit, Object): invalid_type = commit.type != Commit.type - commit = cast('Commit', commit) elif isinstance(commit, SymbolicReference): invalid_type = commit.object.type != Commit.type else: try: - commit = self.repo.rev_parse(commit) - invalid_type = commit.type != Commit.type + invalid_type = self.repo.rev_parse(commit).type != Commit.type except (BadObject, BadName) as e: raise ValueError("Invalid object: %s" % commit) from e # END handle exception @@ -250,12 +245,9 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], # we leave strings to the rev-parse method below self.set_object(commit, logmsg) - # return self - return None + return self - def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], - logmsg: Union[str, None] = None - ) -> 'SymbolicReference': # @ReservedAssignment + def set_object(self, object, logmsg=None): # @ReservedAssignment """Set the object we point to, possibly dereference our symbolic reference first. If the reference does not exist, it will be created @@ -282,11 +274,10 @@ def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], # set the commit on our reference return self._get_reference().set_object(object, logmsg) - commit = cast('Commit', property(_get_commit, set_commit, doc="Query or set commits directly")) - object = property(_get_object, set_object, doc="Return the object our ref currently refers to") # type: ignore + commit = property(_get_commit, set_commit, doc="Query or set commits directly") + object = property(_get_object, set_object, doc="Return the object our ref currently refers to") - def _get_reference(self - ) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: + def _get_reference(self): """:return: Reference Object we point to :raise TypeError: If this symbolic reference is detached, hence it doesn't point to a reference, but to a commit""" @@ -295,8 +286,7 @@ def _get_reference(self raise TypeError("%s is a detached symbolic reference as it points to %r" % (self, sha)) return self.from_path(self.repo, target_ref_path) - def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None - ) -> 'SymbolicReference': + def set_reference(self, ref, logmsg=None): """Set ourselves to the given ref. It will stay a symbol if the ref is a Reference. Otherwise an Object, given as Object instance or refspec, is assumed and if valid, will be set which effectively detaches the refererence if it was a purely @@ -337,7 +327,7 @@ def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg raise TypeError("Require commit, got %r" % obj) # END verify type - oldbinsha: bytes = b'' + oldbinsha = None if logmsg is not None: try: oldbinsha = self.commit.binsha @@ -365,16 +355,11 @@ def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg return self - @ property - def reference(self) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: - return self._get_reference() + # aliased reference + reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") + ref: Union[Commit_ish] = reference # type: ignore # Union[str, Commit_ish, SymbolicReference] - @ reference.setter - def reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None - ) -> 'SymbolicReference': - return self.set_reference(ref=ref, logmsg=logmsg) - - def is_valid(self) -> bool: + def is_valid(self): """ :return: True if the reference is valid, hence it can be read and points to @@ -386,7 +371,7 @@ def is_valid(self) -> bool: else: return True - @ property + @property def is_detached(self): """ :return: @@ -398,7 +383,7 @@ def is_detached(self): except TypeError: return True - def log(self) -> 'RefLog': + def log(self): """ :return: RefLog for this reference. Its last entry reflects the latest change applied to this reference @@ -407,8 +392,7 @@ def log(self) -> 'RefLog': instead of calling this method repeatedly. It should be considered read-only.""" return RefLog.from_file(RefLog.path(self)) - def log_append(self, oldbinsha: bytes, message: Union[str, None], - newbinsha: Union[bytes, None] = None) -> 'RefLogEntry': + def log_append(self, oldbinsha, message, newbinsha=None): """Append a logentry to the logfile of this ref :param oldbinsha: binary sha this ref used to point to @@ -420,19 +404,15 @@ def log_append(self, oldbinsha: bytes, message: Union[str, None], # correct to allow overriding the committer on a per-commit level. # See https://github.com/gitpython-developers/GitPython/pull/146 try: - committer_or_reader: Union['Actor', 'GitConfigParser'] = self.commit.committer + committer_or_reader = self.commit.committer except ValueError: committer_or_reader = self.repo.config_reader() # end handle newly cloned repositories - if newbinsha is None: - newbinsha = self.commit.binsha - - if message is None: - message = '' + return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, + (newbinsha is None and self.commit.binsha) or newbinsha, + message) - return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, newbinsha, message) - - def log_entry(self, index: int) -> RefLogEntry: + def log_entry(self, index): """:return: RefLogEntry at the given index :param index: python list compatible positive or negative index @@ -441,23 +421,22 @@ def log_entry(self, index: int) -> RefLogEntry: In that case, it will be faster than the ``log()`` method""" return RefLog.entry_at(RefLog.path(self), index) - @ classmethod - def to_full_path(cls, path: Union[PathLike, 'SymbolicReference']) -> str: + @classmethod + def to_full_path(cls, path) -> PathLike: """ :return: string with a full repository-relative path which can be used to initialize a Reference instance, for instance by using ``Reference.from_path``""" if isinstance(path, SymbolicReference): path = path.path - full_ref_path = str(path) + full_ref_path = path if not cls._common_path_default: return full_ref_path - - if not str(path).startswith(cls._common_path_default + "/"): + if not path.startswith(cls._common_path_default + "/"): full_ref_path = '%s/%s' % (cls._common_path_default, path) return full_ref_path - @ classmethod - def delete(cls, repo: 'Repo', path: PathLike) -> None: + @classmethod + def delete(cls, repo, path): """Delete the reference at the given path :param repo: @@ -468,8 +447,8 @@ def delete(cls, repo: 'Repo', path: PathLike) -> None: or just "myreference", hence 'refs/' is implied. Alternatively the symbolic reference to be deleted""" full_ref_path = cls.to_full_path(path) - abs_path = os.path.join(repo.common_dir, full_ref_path) - if os.path.exists(abs_path): + abs_path = osp.join(repo.common_dir, full_ref_path) + if osp.exists(abs_path): os.remove(abs_path) else: # check packed refs @@ -479,8 +458,8 @@ def delete(cls, repo: 'Repo', path: PathLike) -> None: new_lines = [] made_change = False dropped_last_line = False - for line_bytes in reader: - line = line_bytes.decode(defenc) + for line in reader: + line = line.decode(defenc) _, _, line_ref = line.partition(' ') line_ref = line_ref.strip() # keep line if it is a comment or if the ref to delete is not @@ -510,14 +489,12 @@ def delete(cls, repo: 'Repo', path: PathLike) -> None: # delete the reflog reflog_path = RefLog.path(cls(repo, full_ref_path)) - if os.path.isfile(reflog_path): + if osp.isfile(reflog_path): os.remove(reflog_path) # END remove reflog - @ classmethod - def _create(cls: Type[T_References], repo: 'Repo', path: PathLike, resolve: bool, - reference: Union[str, 'SymbolicReference'], - force: bool, logmsg: Union[str, None] = None) -> T_References: + @classmethod + def _create(cls, repo, path, resolve, reference, force, logmsg=None): """internal method used to create a new symbolic reference. If resolve is False, the reference will be taken as is, creating a proper symbolic reference. Otherwise it will be resolved to the @@ -525,14 +502,14 @@ def _create(cls: Type[T_References], repo: 'Repo', path: PathLike, resolve: bool instead""" git_dir = _git_dir(repo, path) full_ref_path = cls.to_full_path(path) - abs_ref_path = os.path.join(git_dir, full_ref_path) + abs_ref_path = osp.join(git_dir, full_ref_path) # figure out target data target = reference if resolve: target = repo.rev_parse(str(reference)) - if not force and os.path.isfile(abs_ref_path): + if not force and osp.isfile(abs_ref_path): target_data = str(target) if isinstance(target, SymbolicReference): target_data = target.path @@ -550,9 +527,8 @@ def _create(cls: Type[T_References], repo: 'Repo', path: PathLike, resolve: bool return ref @classmethod - def create(cls: Type[T_References], repo: 'Repo', path: PathLike, - reference: Union[str, 'SymbolicReference'] = 'SymbolicReference', - logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any) -> T_References: + def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'HEAD', + logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any): """Create a new symbolic reference, hence a reference pointing , to another reference. :param repo: @@ -564,7 +540,7 @@ def create(cls: Type[T_References], repo: 'Repo', path: PathLike, :param reference: The reference to which the new symbolic reference should point to. - If it is a ref to a commit'ish, the symbolic ref will be detached. + If it is a commit'ish, the symbolic ref will be detached. :param force: if True, force creation even if a symbolic reference with that name already exists. @@ -583,7 +559,7 @@ def create(cls: Type[T_References], repo: 'Repo', path: PathLike, :note: This does not alter the current HEAD, index or Working Tree""" return cls._create(repo, path, cls._resolve_ref_on_create, reference, force, logmsg) - def rename(self, new_path: str, force: bool = False) -> 'SymbolicReference': + def rename(self, new_path, force=False): """Rename self to a new path :param new_path: @@ -601,9 +577,9 @@ def rename(self, new_path: str, force: bool = False) -> 'SymbolicReference': if self.path == new_path: return self - new_abs_path = os.path.join(_git_dir(self.repo, new_path), new_path) - cur_abs_path = os.path.join(_git_dir(self.repo, self.path), self.path) - if os.path.isfile(new_abs_path): + new_abs_path = osp.join(_git_dir(self.repo, new_path), new_path) + cur_abs_path = osp.join(_git_dir(self.repo, self.path), self.path) + if osp.isfile(new_abs_path): if not force: # if they point to the same file, its not an error with open(new_abs_path, 'rb') as fd1: @@ -618,8 +594,8 @@ def rename(self, new_path: str, force: bool = False) -> 'SymbolicReference': os.remove(new_abs_path) # END handle existing target file - dname = os.path.dirname(new_abs_path) - if not os.path.isdir(dname): + dname = osp.dirname(new_abs_path) + if not osp.isdir(dname): os.makedirs(dname) # END create directory @@ -654,7 +630,7 @@ def _iter_items(cls: Type[T_References], repo: 'Repo', common_path: Union[PathLi # read packed refs for _sha, rela_path in cls._iter_packed_refs(repo): - if rela_path.startswith(str(common_path)): + if rela_path.startswith(common_path): rela_paths.add(rela_path) # END relative path matches common path # END packed refs reading @@ -689,7 +665,7 @@ def iter_items(cls, repo: 'Repo', common_path: Union[PathLike, None] = None, *ar return (r for r in cls._iter_items(repo, common_path) if r.__class__ == SymbolicReference or not r.is_detached) @classmethod - def from_path(cls, repo: 'Repo', path: PathLike) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: + def from_path(cls, repo, path): """ :param path: full .git-directory-relative path name to the Reference to instantiate :note: use to_full_path() if you only have a partial path of a known Reference Type From 879324b36eef1690b382fb3bd118cf83276a30b7 Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 14:21:55 +0100 Subject: [PATCH 0718/2375] Update symbolic.py --- git/refs/symbolic.py | 184 +++++++++++++++++++++++-------------------- 1 file changed, 98 insertions(+), 86 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 0e9dad5cc..4637133b8 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -1,6 +1,4 @@ -from git.types import PathLike import os - from git.compat import defenc from git.objects import Object from git.objects.commit import Commit @@ -17,17 +15,18 @@ BadName ) -import os.path as osp - -from .log import RefLog +from .log import RefLog, RefLogEntry # typing ------------------------------------------------------------------ -from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING # NOQA +from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING, cast # NOQA from git.types import Commit_ish, PathLike, TBD, Literal # NOQA if TYPE_CHECKING: from git.repo import Repo + from git.refs import Reference, Head, TagReference, RemoteReference + from git.config import GitConfigParser + from git.objects.commit import Actor T_References = TypeVar('T_References', bound='SymbolicReference') @@ -37,9 +36,9 @@ __all__ = ["SymbolicReference"] -def _git_dir(repo, path): +def _git_dir(repo: 'Repo', path: PathLike) -> PathLike: """ Find the git dir that's appropriate for the path""" - name = "%s" % (path,) + name = f"{path}" if name in ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'index', 'logs']: return repo.git_dir return repo.common_dir @@ -59,46 +58,47 @@ class SymbolicReference(object): _remote_common_path_default = "refs/remotes" _id_attribute_ = "name" - def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False): + def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False) -> None: self.repo = repo self.path = str(path) + self.ref = self._get_reference def __str__(self) -> str: return self.path - def __repr__(self): + def __repr__(self) -> str: return '' % (self.__class__.__name__, self.path) - def __eq__(self, other): + def __eq__(self, other) -> bool: if hasattr(other, 'path'): return self.path == other.path return False - def __ne__(self, other): + def __ne__(self, other) -> bool: return not (self == other) def __hash__(self): return hash(self.path) @property - def name(self): + def name(self) -> str: """ :return: In case of symbolic references, the shortest assumable name is the path itself.""" - return self.path + return str(self.path) @property - def abspath(self): + def abspath(self) -> PathLike: return join_path_native(_git_dir(self.repo, self.path), self.path) @classmethod - def _get_packed_refs_path(cls, repo): - return osp.join(repo.common_dir, 'packed-refs') + def _get_packed_refs_path(cls, repo: 'Repo') -> str: + return os.path.join(repo.common_dir, 'packed-refs') @classmethod - def _iter_packed_refs(cls, repo): - """Returns an iterator yielding pairs of sha1/path pairs (as bytes) for the corresponding refs. + def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: + """Returns an iterator yielding pairs of sha1/path pairs for the corresponding refs. :note: The packed refs file will be kept open as long as we iterate""" try: with open(cls._get_packed_refs_path(repo), 'rt', encoding='UTF-8') as fp: @@ -126,7 +126,7 @@ def _iter_packed_refs(cls, repo): if line[0] == '^': continue - yield tuple(line.split(' ', 1)) + yield cast(Tuple[str, str], tuple(line.split(' ', 1))) # END for each line except OSError: return None @@ -137,26 +137,26 @@ def _iter_packed_refs(cls, repo): # alright. @classmethod - def dereference_recursive(cls, repo, ref_path): + def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: """ :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all intermediate references as required :param repo: the repository containing the reference at ref_path""" while True: - hexsha, ref_path = cls._get_ref_info(repo, ref_path) + hexsha, _ref_path_out = cls._get_ref_info(repo, ref_path) if hexsha is not None: return hexsha # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo, ref_path): + def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, PathLike]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" - tokens = None + tokens: Union[List[str], Tuple[str, str], None] = None repodir = _git_dir(repo, ref_path) try: - with open(osp.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: + with open(os.path.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: value = fp.read().rstrip() # Don't only split on spaces, but on whitespace, which allows to parse lines like # 60b64ef992065e2600bfef6187a97f92398a9144 branch 'master' of git-server:/path/to/repo @@ -188,13 +188,14 @@ def _get_ref_info_helper(cls, repo, ref_path): raise ValueError("Failed to parse reference information from %r" % ref_path) @classmethod - def _get_ref_info(cls, repo, ref_path): + def _get_ref_info(cls, repo: 'Repo', ref_path: PathLike + ) -> Union[Tuple[str, None], Tuple[None, PathLike]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" return cls._get_ref_info_helper(repo, ref_path) - def _get_object(self): + def _get_object(self) -> Commit_ish: """ :return: The object our ref currently refers to. Refs can be cached, they will @@ -203,7 +204,7 @@ def _get_object(self): # Our path will be resolved to the hexsha which will be used accordingly return Object.new_from_sha(self.repo, hex_to_bin(self.dereference_recursive(self.repo, self.path))) - def _get_commit(self): + def _get_commit(self) -> 'Commit': """ :return: Commit object we point to, works for detached and non-detached @@ -218,7 +219,8 @@ def _get_commit(self): # END handle type return obj - def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=None): + def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], + logmsg: Union[str, None] = None) -> None: """As set_object, but restricts the type of object to be a Commit :raise ValueError: If commit is not a Commit object or doesn't point to @@ -228,11 +230,13 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=Non invalid_type = False if isinstance(commit, Object): invalid_type = commit.type != Commit.type + commit = cast('Commit', commit) elif isinstance(commit, SymbolicReference): invalid_type = commit.object.type != Commit.type else: try: - invalid_type = self.repo.rev_parse(commit).type != Commit.type + commit = self.repo.rev_parse(commit) + invalid_type = commit.type != Commit.type except (BadObject, BadName) as e: raise ValueError("Invalid object: %s" % commit) from e # END handle exception @@ -245,9 +249,12 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=Non # we leave strings to the rev-parse method below self.set_object(commit, logmsg) - return self + # return self + return None - def set_object(self, object, logmsg=None): # @ReservedAssignment + def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], + logmsg: Union[str, None] = None + ) -> 'SymbolicReference': # @ReservedAssignment """Set the object we point to, possibly dereference our symbolic reference first. If the reference does not exist, it will be created @@ -274,10 +281,12 @@ def set_object(self, object, logmsg=None): # @ReservedAssignment # set the commit on our reference return self._get_reference().set_object(object, logmsg) - commit = property(_get_commit, set_commit, doc="Query or set commits directly") - object = property(_get_object, set_object, doc="Return the object our ref currently refers to") + commit = cast('Commit', property(_get_commit, set_commit, doc="Query or set commits directly")) + object = property(_get_object, set_object, doc="Return the object our ref currently refers to") # type: ignore + # reference = property(_get_reference, set_reference, doc="Return the object our ref currently refers to") # type: ignore - def _get_reference(self): + def _get_reference(self + ) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: """:return: Reference Object we point to :raise TypeError: If this symbolic reference is detached, hence it doesn't point to a reference, but to a commit""" @@ -286,7 +295,8 @@ def _get_reference(self): raise TypeError("%s is a detached symbolic reference as it points to %r" % (self, sha)) return self.from_path(self.repo, target_ref_path) - def set_reference(self, ref, logmsg=None): + def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None + ) -> 'SymbolicReference': """Set ourselves to the given ref. It will stay a symbol if the ref is a Reference. Otherwise an Object, given as Object instance or refspec, is assumed and if valid, will be set which effectively detaches the refererence if it was a purely @@ -327,7 +337,7 @@ def set_reference(self, ref, logmsg=None): raise TypeError("Require commit, got %r" % obj) # END verify type - oldbinsha = None + oldbinsha: bytes = b'' if logmsg is not None: try: oldbinsha = self.commit.binsha @@ -355,23 +365,16 @@ def set_reference(self, ref, logmsg=None): return self - # aliased reference - reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") - ref: Union[Commit_ish] = reference # type: ignore # Union[str, Commit_ish, SymbolicReference] - - def is_valid(self): - """ - :return: - True if the reference is valid, hence it can be read and points to - a valid object or reference.""" - try: - self.object - except (OSError, ValueError): - return False - else: - return True + @ property + def reference(self) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: + return self._get_reference() - @property + @ reference.setter + def reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None + ) -> 'SymbolicReference': + return self.set_reference(ref=ref, logmsg=logmsg) + + @ property def is_detached(self): """ :return: @@ -383,7 +386,7 @@ def is_detached(self): except TypeError: return True - def log(self): + def log(self) -> 'RefLog': """ :return: RefLog for this reference. Its last entry reflects the latest change applied to this reference @@ -392,7 +395,8 @@ def log(self): instead of calling this method repeatedly. It should be considered read-only.""" return RefLog.from_file(RefLog.path(self)) - def log_append(self, oldbinsha, message, newbinsha=None): + def log_append(self, oldbinsha: bytes, message: Union[str, None], + newbinsha: Union[bytes, None] = None) -> 'RefLogEntry': """Append a logentry to the logfile of this ref :param oldbinsha: binary sha this ref used to point to @@ -404,15 +408,19 @@ def log_append(self, oldbinsha, message, newbinsha=None): # correct to allow overriding the committer on a per-commit level. # See https://github.com/gitpython-developers/GitPython/pull/146 try: - committer_or_reader = self.commit.committer + committer_or_reader: Union['Actor', 'GitConfigParser'] = self.commit.committer except ValueError: committer_or_reader = self.repo.config_reader() # end handle newly cloned repositories - return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, - (newbinsha is None and self.commit.binsha) or newbinsha, - message) + if newbinsha is None: + newbinsha = self.commit.binsha + + if message is None: + message = '' + + return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, newbinsha, message) - def log_entry(self, index): + def log_entry(self, index: int) -> RefLogEntry: """:return: RefLogEntry at the given index :param index: python list compatible positive or negative index @@ -421,22 +429,23 @@ def log_entry(self, index): In that case, it will be faster than the ``log()`` method""" return RefLog.entry_at(RefLog.path(self), index) - @classmethod - def to_full_path(cls, path) -> PathLike: + @ classmethod + def to_full_path(cls, path: Union[PathLike, 'SymbolicReference']) -> str: """ :return: string with a full repository-relative path which can be used to initialize a Reference instance, for instance by using ``Reference.from_path``""" if isinstance(path, SymbolicReference): path = path.path - full_ref_path = path + full_ref_path = str(path) if not cls._common_path_default: return full_ref_path - if not path.startswith(cls._common_path_default + "/"): + + if not str(path).startswith(cls._common_path_default + "/"): full_ref_path = '%s/%s' % (cls._common_path_default, path) return full_ref_path - @classmethod - def delete(cls, repo, path): + @ classmethod + def delete(cls, repo: 'Repo', path: PathLike) -> None: """Delete the reference at the given path :param repo: @@ -447,8 +456,8 @@ def delete(cls, repo, path): or just "myreference", hence 'refs/' is implied. Alternatively the symbolic reference to be deleted""" full_ref_path = cls.to_full_path(path) - abs_path = osp.join(repo.common_dir, full_ref_path) - if osp.exists(abs_path): + abs_path = os.path.join(repo.common_dir, full_ref_path) + if os.path.exists(abs_path): os.remove(abs_path) else: # check packed refs @@ -458,8 +467,8 @@ def delete(cls, repo, path): new_lines = [] made_change = False dropped_last_line = False - for line in reader: - line = line.decode(defenc) + for line_bytes in reader: + line = line_bytes.decode(defenc) _, _, line_ref = line.partition(' ') line_ref = line_ref.strip() # keep line if it is a comment or if the ref to delete is not @@ -489,12 +498,14 @@ def delete(cls, repo, path): # delete the reflog reflog_path = RefLog.path(cls(repo, full_ref_path)) - if osp.isfile(reflog_path): + if os.path.isfile(reflog_path): os.remove(reflog_path) # END remove reflog - @classmethod - def _create(cls, repo, path, resolve, reference, force, logmsg=None): + @ classmethod + def _create(cls: Type[T_References], repo: 'Repo', path: PathLike, resolve: bool, + reference: Union[str, 'SymbolicReference'], + force: bool, logmsg: Union[str, None] = None) -> T_References: """internal method used to create a new symbolic reference. If resolve is False, the reference will be taken as is, creating a proper symbolic reference. Otherwise it will be resolved to the @@ -502,14 +513,14 @@ def _create(cls, repo, path, resolve, reference, force, logmsg=None): instead""" git_dir = _git_dir(repo, path) full_ref_path = cls.to_full_path(path) - abs_ref_path = osp.join(git_dir, full_ref_path) + abs_ref_path = os.path.join(git_dir, full_ref_path) # figure out target data target = reference if resolve: target = repo.rev_parse(str(reference)) - if not force and osp.isfile(abs_ref_path): + if not force and os.path.isfile(abs_ref_path): target_data = str(target) if isinstance(target, SymbolicReference): target_data = target.path @@ -527,8 +538,9 @@ def _create(cls, repo, path, resolve, reference, force, logmsg=None): return ref @classmethod - def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'HEAD', - logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any): + def create(cls: Type[T_References], repo: 'Repo', path: PathLike, + reference: Union[str, 'SymbolicReference'] = 'SymbolicReference', + logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any) -> T_References: """Create a new symbolic reference, hence a reference pointing , to another reference. :param repo: @@ -540,7 +552,7 @@ def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] :param reference: The reference to which the new symbolic reference should point to. - If it is a commit'ish, the symbolic ref will be detached. + If it is a ref to a commit'ish, the symbolic ref will be detached. :param force: if True, force creation even if a symbolic reference with that name already exists. @@ -559,7 +571,7 @@ def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] :note: This does not alter the current HEAD, index or Working Tree""" return cls._create(repo, path, cls._resolve_ref_on_create, reference, force, logmsg) - def rename(self, new_path, force=False): + def rename(self, new_path: str, force: bool = False) -> 'SymbolicReference': """Rename self to a new path :param new_path: @@ -577,9 +589,9 @@ def rename(self, new_path, force=False): if self.path == new_path: return self - new_abs_path = osp.join(_git_dir(self.repo, new_path), new_path) - cur_abs_path = osp.join(_git_dir(self.repo, self.path), self.path) - if osp.isfile(new_abs_path): + new_abs_path = os.path.join(_git_dir(self.repo, new_path), new_path) + cur_abs_path = os.path.join(_git_dir(self.repo, self.path), self.path) + if os.path.isfile(new_abs_path): if not force: # if they point to the same file, its not an error with open(new_abs_path, 'rb') as fd1: @@ -594,8 +606,8 @@ def rename(self, new_path, force=False): os.remove(new_abs_path) # END handle existing target file - dname = osp.dirname(new_abs_path) - if not osp.isdir(dname): + dname = os.path.dirname(new_abs_path) + if not os.path.isdir(dname): os.makedirs(dname) # END create directory @@ -630,7 +642,7 @@ def _iter_items(cls: Type[T_References], repo: 'Repo', common_path: Union[PathLi # read packed refs for _sha, rela_path in cls._iter_packed_refs(repo): - if rela_path.startswith(common_path): + if rela_path.startswith(str(common_path)): rela_paths.add(rela_path) # END relative path matches common path # END packed refs reading @@ -665,7 +677,7 @@ def iter_items(cls, repo: 'Repo', common_path: Union[PathLike, None] = None, *ar return (r for r in cls._iter_items(repo, common_path) if r.__class__ == SymbolicReference or not r.is_detached) @classmethod - def from_path(cls, repo, path): + def from_path(cls, repo: 'Repo', path: PathLike) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: """ :param path: full .git-directory-relative path name to the Reference to instantiate :note: use to_full_path() if you only have a partial path of a known Reference Type From 38ef31f5537de073a72dc4594b9b6374577b6842 Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 14:23:09 +0100 Subject: [PATCH 0719/2375] Update symbolic.py --- git/refs/symbolic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 4637133b8..9829415cd 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -283,7 +283,7 @@ def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], commit = cast('Commit', property(_get_commit, set_commit, doc="Query or set commits directly")) object = property(_get_object, set_object, doc="Return the object our ref currently refers to") # type: ignore - # reference = property(_get_reference, set_reference, doc="Return the object our ref currently refers to") # type: ignore + # reference = property(_get_reference, set_reference, doc="Return the object our ref currently refers to") def _get_reference(self ) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: From d858916ce254287b70f2b3cc675ff7860171bfba Mon Sep 17 00:00:00 2001 From: Dominic Date: Sat, 31 Jul 2021 15:38:02 +0100 Subject: [PATCH 0720/2375] Rvrt types of symbolic.py that were breaking pytest --- git/refs/symbolic.py | 184 ++++++++++++++++++++----------------------- 1 file changed, 86 insertions(+), 98 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 9829415cd..0e9dad5cc 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -1,4 +1,6 @@ +from git.types import PathLike import os + from git.compat import defenc from git.objects import Object from git.objects.commit import Commit @@ -15,18 +17,17 @@ BadName ) -from .log import RefLog, RefLogEntry +import os.path as osp + +from .log import RefLog # typing ------------------------------------------------------------------ -from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING, cast # NOQA +from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING # NOQA from git.types import Commit_ish, PathLike, TBD, Literal # NOQA if TYPE_CHECKING: from git.repo import Repo - from git.refs import Reference, Head, TagReference, RemoteReference - from git.config import GitConfigParser - from git.objects.commit import Actor T_References = TypeVar('T_References', bound='SymbolicReference') @@ -36,9 +37,9 @@ __all__ = ["SymbolicReference"] -def _git_dir(repo: 'Repo', path: PathLike) -> PathLike: +def _git_dir(repo, path): """ Find the git dir that's appropriate for the path""" - name = f"{path}" + name = "%s" % (path,) if name in ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'index', 'logs']: return repo.git_dir return repo.common_dir @@ -58,47 +59,46 @@ class SymbolicReference(object): _remote_common_path_default = "refs/remotes" _id_attribute_ = "name" - def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False) -> None: + def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False): self.repo = repo self.path = str(path) - self.ref = self._get_reference def __str__(self) -> str: return self.path - def __repr__(self) -> str: + def __repr__(self): return '' % (self.__class__.__name__, self.path) - def __eq__(self, other) -> bool: + def __eq__(self, other): if hasattr(other, 'path'): return self.path == other.path return False - def __ne__(self, other) -> bool: + def __ne__(self, other): return not (self == other) def __hash__(self): return hash(self.path) @property - def name(self) -> str: + def name(self): """ :return: In case of symbolic references, the shortest assumable name is the path itself.""" - return str(self.path) + return self.path @property - def abspath(self) -> PathLike: + def abspath(self): return join_path_native(_git_dir(self.repo, self.path), self.path) @classmethod - def _get_packed_refs_path(cls, repo: 'Repo') -> str: - return os.path.join(repo.common_dir, 'packed-refs') + def _get_packed_refs_path(cls, repo): + return osp.join(repo.common_dir, 'packed-refs') @classmethod - def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: - """Returns an iterator yielding pairs of sha1/path pairs for the corresponding refs. + def _iter_packed_refs(cls, repo): + """Returns an iterator yielding pairs of sha1/path pairs (as bytes) for the corresponding refs. :note: The packed refs file will be kept open as long as we iterate""" try: with open(cls._get_packed_refs_path(repo), 'rt', encoding='UTF-8') as fp: @@ -126,7 +126,7 @@ def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: if line[0] == '^': continue - yield cast(Tuple[str, str], tuple(line.split(' ', 1))) + yield tuple(line.split(' ', 1)) # END for each line except OSError: return None @@ -137,26 +137,26 @@ def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: # alright. @classmethod - def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: + def dereference_recursive(cls, repo, ref_path): """ :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all intermediate references as required :param repo: the repository containing the reference at ref_path""" while True: - hexsha, _ref_path_out = cls._get_ref_info(repo, ref_path) + hexsha, ref_path = cls._get_ref_info(repo, ref_path) if hexsha is not None: return hexsha # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, PathLike]]: + def _get_ref_info_helper(cls, repo, ref_path): """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" - tokens: Union[List[str], Tuple[str, str], None] = None + tokens = None repodir = _git_dir(repo, ref_path) try: - with open(os.path.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: + with open(osp.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: value = fp.read().rstrip() # Don't only split on spaces, but on whitespace, which allows to parse lines like # 60b64ef992065e2600bfef6187a97f92398a9144 branch 'master' of git-server:/path/to/repo @@ -188,14 +188,13 @@ def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[s raise ValueError("Failed to parse reference information from %r" % ref_path) @classmethod - def _get_ref_info(cls, repo: 'Repo', ref_path: PathLike - ) -> Union[Tuple[str, None], Tuple[None, PathLike]]: + def _get_ref_info(cls, repo, ref_path): """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" return cls._get_ref_info_helper(repo, ref_path) - def _get_object(self) -> Commit_ish: + def _get_object(self): """ :return: The object our ref currently refers to. Refs can be cached, they will @@ -204,7 +203,7 @@ def _get_object(self) -> Commit_ish: # Our path will be resolved to the hexsha which will be used accordingly return Object.new_from_sha(self.repo, hex_to_bin(self.dereference_recursive(self.repo, self.path))) - def _get_commit(self) -> 'Commit': + def _get_commit(self): """ :return: Commit object we point to, works for detached and non-detached @@ -219,8 +218,7 @@ def _get_commit(self) -> 'Commit': # END handle type return obj - def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], - logmsg: Union[str, None] = None) -> None: + def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=None): """As set_object, but restricts the type of object to be a Commit :raise ValueError: If commit is not a Commit object or doesn't point to @@ -230,13 +228,11 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], invalid_type = False if isinstance(commit, Object): invalid_type = commit.type != Commit.type - commit = cast('Commit', commit) elif isinstance(commit, SymbolicReference): invalid_type = commit.object.type != Commit.type else: try: - commit = self.repo.rev_parse(commit) - invalid_type = commit.type != Commit.type + invalid_type = self.repo.rev_parse(commit).type != Commit.type except (BadObject, BadName) as e: raise ValueError("Invalid object: %s" % commit) from e # END handle exception @@ -249,12 +245,9 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], # we leave strings to the rev-parse method below self.set_object(commit, logmsg) - # return self - return None + return self - def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], - logmsg: Union[str, None] = None - ) -> 'SymbolicReference': # @ReservedAssignment + def set_object(self, object, logmsg=None): # @ReservedAssignment """Set the object we point to, possibly dereference our symbolic reference first. If the reference does not exist, it will be created @@ -281,12 +274,10 @@ def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], # set the commit on our reference return self._get_reference().set_object(object, logmsg) - commit = cast('Commit', property(_get_commit, set_commit, doc="Query or set commits directly")) - object = property(_get_object, set_object, doc="Return the object our ref currently refers to") # type: ignore - # reference = property(_get_reference, set_reference, doc="Return the object our ref currently refers to") + commit = property(_get_commit, set_commit, doc="Query or set commits directly") + object = property(_get_object, set_object, doc="Return the object our ref currently refers to") - def _get_reference(self - ) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: + def _get_reference(self): """:return: Reference Object we point to :raise TypeError: If this symbolic reference is detached, hence it doesn't point to a reference, but to a commit""" @@ -295,8 +286,7 @@ def _get_reference(self raise TypeError("%s is a detached symbolic reference as it points to %r" % (self, sha)) return self.from_path(self.repo, target_ref_path) - def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None - ) -> 'SymbolicReference': + def set_reference(self, ref, logmsg=None): """Set ourselves to the given ref. It will stay a symbol if the ref is a Reference. Otherwise an Object, given as Object instance or refspec, is assumed and if valid, will be set which effectively detaches the refererence if it was a purely @@ -337,7 +327,7 @@ def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg raise TypeError("Require commit, got %r" % obj) # END verify type - oldbinsha: bytes = b'' + oldbinsha = None if logmsg is not None: try: oldbinsha = self.commit.binsha @@ -365,16 +355,23 @@ def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg return self - @ property - def reference(self) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: - return self._get_reference() + # aliased reference + reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") + ref: Union[Commit_ish] = reference # type: ignore # Union[str, Commit_ish, SymbolicReference] + + def is_valid(self): + """ + :return: + True if the reference is valid, hence it can be read and points to + a valid object or reference.""" + try: + self.object + except (OSError, ValueError): + return False + else: + return True - @ reference.setter - def reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None - ) -> 'SymbolicReference': - return self.set_reference(ref=ref, logmsg=logmsg) - - @ property + @property def is_detached(self): """ :return: @@ -386,7 +383,7 @@ def is_detached(self): except TypeError: return True - def log(self) -> 'RefLog': + def log(self): """ :return: RefLog for this reference. Its last entry reflects the latest change applied to this reference @@ -395,8 +392,7 @@ def log(self) -> 'RefLog': instead of calling this method repeatedly. It should be considered read-only.""" return RefLog.from_file(RefLog.path(self)) - def log_append(self, oldbinsha: bytes, message: Union[str, None], - newbinsha: Union[bytes, None] = None) -> 'RefLogEntry': + def log_append(self, oldbinsha, message, newbinsha=None): """Append a logentry to the logfile of this ref :param oldbinsha: binary sha this ref used to point to @@ -408,19 +404,15 @@ def log_append(self, oldbinsha: bytes, message: Union[str, None], # correct to allow overriding the committer on a per-commit level. # See https://github.com/gitpython-developers/GitPython/pull/146 try: - committer_or_reader: Union['Actor', 'GitConfigParser'] = self.commit.committer + committer_or_reader = self.commit.committer except ValueError: committer_or_reader = self.repo.config_reader() # end handle newly cloned repositories - if newbinsha is None: - newbinsha = self.commit.binsha - - if message is None: - message = '' - - return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, newbinsha, message) + return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, + (newbinsha is None and self.commit.binsha) or newbinsha, + message) - def log_entry(self, index: int) -> RefLogEntry: + def log_entry(self, index): """:return: RefLogEntry at the given index :param index: python list compatible positive or negative index @@ -429,23 +421,22 @@ def log_entry(self, index: int) -> RefLogEntry: In that case, it will be faster than the ``log()`` method""" return RefLog.entry_at(RefLog.path(self), index) - @ classmethod - def to_full_path(cls, path: Union[PathLike, 'SymbolicReference']) -> str: + @classmethod + def to_full_path(cls, path) -> PathLike: """ :return: string with a full repository-relative path which can be used to initialize a Reference instance, for instance by using ``Reference.from_path``""" if isinstance(path, SymbolicReference): path = path.path - full_ref_path = str(path) + full_ref_path = path if not cls._common_path_default: return full_ref_path - - if not str(path).startswith(cls._common_path_default + "/"): + if not path.startswith(cls._common_path_default + "/"): full_ref_path = '%s/%s' % (cls._common_path_default, path) return full_ref_path - @ classmethod - def delete(cls, repo: 'Repo', path: PathLike) -> None: + @classmethod + def delete(cls, repo, path): """Delete the reference at the given path :param repo: @@ -456,8 +447,8 @@ def delete(cls, repo: 'Repo', path: PathLike) -> None: or just "myreference", hence 'refs/' is implied. Alternatively the symbolic reference to be deleted""" full_ref_path = cls.to_full_path(path) - abs_path = os.path.join(repo.common_dir, full_ref_path) - if os.path.exists(abs_path): + abs_path = osp.join(repo.common_dir, full_ref_path) + if osp.exists(abs_path): os.remove(abs_path) else: # check packed refs @@ -467,8 +458,8 @@ def delete(cls, repo: 'Repo', path: PathLike) -> None: new_lines = [] made_change = False dropped_last_line = False - for line_bytes in reader: - line = line_bytes.decode(defenc) + for line in reader: + line = line.decode(defenc) _, _, line_ref = line.partition(' ') line_ref = line_ref.strip() # keep line if it is a comment or if the ref to delete is not @@ -498,14 +489,12 @@ def delete(cls, repo: 'Repo', path: PathLike) -> None: # delete the reflog reflog_path = RefLog.path(cls(repo, full_ref_path)) - if os.path.isfile(reflog_path): + if osp.isfile(reflog_path): os.remove(reflog_path) # END remove reflog - @ classmethod - def _create(cls: Type[T_References], repo: 'Repo', path: PathLike, resolve: bool, - reference: Union[str, 'SymbolicReference'], - force: bool, logmsg: Union[str, None] = None) -> T_References: + @classmethod + def _create(cls, repo, path, resolve, reference, force, logmsg=None): """internal method used to create a new symbolic reference. If resolve is False, the reference will be taken as is, creating a proper symbolic reference. Otherwise it will be resolved to the @@ -513,14 +502,14 @@ def _create(cls: Type[T_References], repo: 'Repo', path: PathLike, resolve: bool instead""" git_dir = _git_dir(repo, path) full_ref_path = cls.to_full_path(path) - abs_ref_path = os.path.join(git_dir, full_ref_path) + abs_ref_path = osp.join(git_dir, full_ref_path) # figure out target data target = reference if resolve: target = repo.rev_parse(str(reference)) - if not force and os.path.isfile(abs_ref_path): + if not force and osp.isfile(abs_ref_path): target_data = str(target) if isinstance(target, SymbolicReference): target_data = target.path @@ -538,9 +527,8 @@ def _create(cls: Type[T_References], repo: 'Repo', path: PathLike, resolve: bool return ref @classmethod - def create(cls: Type[T_References], repo: 'Repo', path: PathLike, - reference: Union[str, 'SymbolicReference'] = 'SymbolicReference', - logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any) -> T_References: + def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'HEAD', + logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any): """Create a new symbolic reference, hence a reference pointing , to another reference. :param repo: @@ -552,7 +540,7 @@ def create(cls: Type[T_References], repo: 'Repo', path: PathLike, :param reference: The reference to which the new symbolic reference should point to. - If it is a ref to a commit'ish, the symbolic ref will be detached. + If it is a commit'ish, the symbolic ref will be detached. :param force: if True, force creation even if a symbolic reference with that name already exists. @@ -571,7 +559,7 @@ def create(cls: Type[T_References], repo: 'Repo', path: PathLike, :note: This does not alter the current HEAD, index or Working Tree""" return cls._create(repo, path, cls._resolve_ref_on_create, reference, force, logmsg) - def rename(self, new_path: str, force: bool = False) -> 'SymbolicReference': + def rename(self, new_path, force=False): """Rename self to a new path :param new_path: @@ -589,9 +577,9 @@ def rename(self, new_path: str, force: bool = False) -> 'SymbolicReference': if self.path == new_path: return self - new_abs_path = os.path.join(_git_dir(self.repo, new_path), new_path) - cur_abs_path = os.path.join(_git_dir(self.repo, self.path), self.path) - if os.path.isfile(new_abs_path): + new_abs_path = osp.join(_git_dir(self.repo, new_path), new_path) + cur_abs_path = osp.join(_git_dir(self.repo, self.path), self.path) + if osp.isfile(new_abs_path): if not force: # if they point to the same file, its not an error with open(new_abs_path, 'rb') as fd1: @@ -606,8 +594,8 @@ def rename(self, new_path: str, force: bool = False) -> 'SymbolicReference': os.remove(new_abs_path) # END handle existing target file - dname = os.path.dirname(new_abs_path) - if not os.path.isdir(dname): + dname = osp.dirname(new_abs_path) + if not osp.isdir(dname): os.makedirs(dname) # END create directory @@ -642,7 +630,7 @@ def _iter_items(cls: Type[T_References], repo: 'Repo', common_path: Union[PathLi # read packed refs for _sha, rela_path in cls._iter_packed_refs(repo): - if rela_path.startswith(str(common_path)): + if rela_path.startswith(common_path): rela_paths.add(rela_path) # END relative path matches common path # END packed refs reading @@ -677,7 +665,7 @@ def iter_items(cls, repo: 'Repo', common_path: Union[PathLike, None] = None, *ar return (r for r in cls._iter_items(repo, common_path) if r.__class__ == SymbolicReference or not r.is_detached) @classmethod - def from_path(cls, repo: 'Repo', path: PathLike) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: + def from_path(cls, repo, path): """ :param path: full .git-directory-relative path name to the Reference to instantiate :note: use to_full_path() if you only have a partial path of a known Reference Type From 15d1c01c132bc6fbdb21146578df35a8f7e2195e Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 15:51:34 +0100 Subject: [PATCH 0721/2375] Add type to symbolicreference.name() --- .github/workflows/pythonpackage.yml | 2 - git/refs/remote.py | 4 +- git/refs/symbolic.py | 134 +++++++++++----------------- 3 files changed, 56 insertions(+), 84 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 8cb8041d0..8581c0bfc 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -28,8 +28,6 @@ jobs: - name: Install dependencies and prepare tests run: | set -x - sudo rm -rf "/usr/local/share/boost" - sudo rm -rf "$AGENT_TOOLSDIRECTORY" python -m pip install --upgrade pip setuptools wheel python --version; git --version diff --git a/git/refs/remote.py b/git/refs/remote.py index 8a680a4a1..9b74d87fb 100644 --- a/git/refs/remote.py +++ b/git/refs/remote.py @@ -9,7 +9,7 @@ # typing ------------------------------------------------------------------ -from typing import Any, NoReturn, Union, TYPE_CHECKING +from typing import Any, Iterator, NoReturn, Union, TYPE_CHECKING from git.types import PathLike @@ -28,7 +28,7 @@ class RemoteReference(Head): @classmethod def iter_items(cls, repo: 'Repo', common_path: Union[PathLike, None] = None, remote: Union['Remote', None] = None, *args: Any, **kwargs: Any - ) -> 'RemoteReference': + ) -> Iterator['RemoteReference']: """Iterate remote references, and if given, constrain them to the given remote""" common_path = common_path or cls._common_path_default if remote is not None: diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 4171fe234..779fe5a5e 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -1,3 +1,4 @@ +from git.types import PathLike import os from git.compat import defenc @@ -16,7 +17,7 @@ BadName ) -from .log import RefLog, RefLogEntry +from .log import RefLog # typing ------------------------------------------------------------------ @@ -25,9 +26,6 @@ if TYPE_CHECKING: from git.repo import Repo - from git.refs import Reference, Head, TagReference, RemoteReference - from git.config import GitConfigParser - from git.objects.commit import Actor T_References = TypeVar('T_References', bound='SymbolicReference') @@ -37,9 +35,9 @@ __all__ = ["SymbolicReference"] -def _git_dir(repo: 'Repo', path: PathLike) -> PathLike: +def _git_dir(repo, path): """ Find the git dir that's appropriate for the path""" - name = f"{path}" + name = "%s" % (path,) if name in ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'index', 'logs']: return repo.git_dir return repo.common_dir @@ -59,23 +57,22 @@ class SymbolicReference(object): _remote_common_path_default = "refs/remotes" _id_attribute_ = "name" - def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False) -> None: + def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False): self.repo = repo self.path = str(path) - self.ref = self._get_reference() def __str__(self) -> str: return self.path - def __repr__(self) -> str: + def __repr__(self): return '' % (self.__class__.__name__, self.path) - def __eq__(self, other) -> bool: + def __eq__(self, other): if hasattr(other, 'path'): return self.path == other.path return False - def __ne__(self, other) -> bool: + def __ne__(self, other): return not (self == other) def __hash__(self): @@ -87,7 +84,7 @@ def name(self) -> str: :return: In case of symbolic references, the shortest assumable name is the path itself.""" - return str(self.path) + return self.path @property def abspath(self) -> PathLike: @@ -99,7 +96,7 @@ def _get_packed_refs_path(cls, repo: 'Repo') -> str: @classmethod def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: - """Returns an iterator yielding pairs of sha1/path pairs for the corresponding refs. + """Returns an iterator yielding pairs of sha1/path pairs (as strings) for the corresponding refs. :note: The packed refs file will be kept open as long as we iterate""" try: with open(cls._get_packed_refs_path(repo), 'rt', encoding='UTF-8') as fp: @@ -138,23 +135,23 @@ def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: # alright. @classmethod - def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: + def dereference_recursive(cls, repo, ref_path): """ :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all intermediate references as required :param repo: the repository containing the reference at ref_path""" while True: - hexsha, _ref_path_out = cls._get_ref_info(repo, ref_path) + hexsha, ref_path = cls._get_ref_info(repo, ref_path) if hexsha is not None: return hexsha # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, PathLike]]: + def _get_ref_info_helper(cls, repo, ref_path): """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" - tokens: Union[List[str], Tuple[str, str], None] = None + tokens = None repodir = _git_dir(repo, ref_path) try: with open(os.path.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: @@ -189,14 +186,13 @@ def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[s raise ValueError("Failed to parse reference information from %r" % ref_path) @classmethod - def _get_ref_info(cls, repo: 'Repo', ref_path: PathLike - ) -> Union[Tuple[str, None], Tuple[None, PathLike]]: + def _get_ref_info(cls, repo, ref_path): """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" return cls._get_ref_info_helper(repo, ref_path) - def _get_object(self) -> Commit_ish: + def _get_object(self): """ :return: The object our ref currently refers to. Refs can be cached, they will @@ -205,7 +201,7 @@ def _get_object(self) -> Commit_ish: # Our path will be resolved to the hexsha which will be used accordingly return Object.new_from_sha(self.repo, hex_to_bin(self.dereference_recursive(self.repo, self.path))) - def _get_commit(self) -> 'Commit': + def _get_commit(self): """ :return: Commit object we point to, works for detached and non-detached @@ -220,8 +216,7 @@ def _get_commit(self) -> 'Commit': # END handle type return obj - def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], - logmsg: Union[str, None] = None) -> None: + def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=None): """As set_object, but restricts the type of object to be a Commit :raise ValueError: If commit is not a Commit object or doesn't point to @@ -231,13 +226,11 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], invalid_type = False if isinstance(commit, Object): invalid_type = commit.type != Commit.type - commit = cast('Commit', commit) elif isinstance(commit, SymbolicReference): invalid_type = commit.object.type != Commit.type else: try: - commit = self.repo.rev_parse(commit) - invalid_type = commit.type != Commit.type + invalid_type = self.repo.rev_parse(commit).type != Commit.type except (BadObject, BadName) as e: raise ValueError("Invalid object: %s" % commit) from e # END handle exception @@ -250,12 +243,9 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], # we leave strings to the rev-parse method below self.set_object(commit, logmsg) - # return self - return None + return self - def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], - logmsg: Union[str, None] = None - ) -> 'SymbolicReference': # @ReservedAssignment + def set_object(self, object, logmsg=None): # @ReservedAssignment """Set the object we point to, possibly dereference our symbolic reference first. If the reference does not exist, it will be created @@ -282,11 +272,10 @@ def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], # set the commit on our reference return self._get_reference().set_object(object, logmsg) - commit = cast('Commit', property(_get_commit, set_commit, doc="Query or set commits directly")) - object = property(_get_object, set_object, doc="Return the object our ref currently refers to") # type: ignore + commit = property(_get_commit, set_commit, doc="Query or set commits directly") + object = property(_get_object, set_object, doc="Return the object our ref currently refers to") - def _get_reference(self - ) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: + def _get_reference(self): """:return: Reference Object we point to :raise TypeError: If this symbolic reference is detached, hence it doesn't point to a reference, but to a commit""" @@ -295,8 +284,7 @@ def _get_reference(self raise TypeError("%s is a detached symbolic reference as it points to %r" % (self, sha)) return self.from_path(self.repo, target_ref_path) - def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None - ) -> 'SymbolicReference': + def set_reference(self, ref, logmsg=None): """Set ourselves to the given ref. It will stay a symbol if the ref is a Reference. Otherwise an Object, given as Object instance or refspec, is assumed and if valid, will be set which effectively detaches the refererence if it was a purely @@ -337,7 +325,7 @@ def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg raise TypeError("Require commit, got %r" % obj) # END verify type - oldbinsha: bytes = b'' + oldbinsha = None if logmsg is not None: try: oldbinsha = self.commit.binsha @@ -365,16 +353,11 @@ def set_reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg return self - @ property - def reference(self) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: - return self._get_reference() - - @ reference.setter - def reference(self, ref: Union[str, Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None - ) -> 'SymbolicReference': - return self.set_reference(ref=ref, logmsg=logmsg) + # aliased reference + reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") + ref: Union[Commit_ish] = reference # type: ignore # Union[str, Commit_ish, SymbolicReference] - def is_valid(self) -> bool: + def is_valid(self): """ :return: True if the reference is valid, hence it can be read and points to @@ -386,7 +369,7 @@ def is_valid(self) -> bool: else: return True - @ property + @property def is_detached(self): """ :return: @@ -398,7 +381,7 @@ def is_detached(self): except TypeError: return True - def log(self) -> 'RefLog': + def log(self): """ :return: RefLog for this reference. Its last entry reflects the latest change applied to this reference @@ -407,8 +390,7 @@ def log(self) -> 'RefLog': instead of calling this method repeatedly. It should be considered read-only.""" return RefLog.from_file(RefLog.path(self)) - def log_append(self, oldbinsha: bytes, message: Union[str, None], - newbinsha: Union[bytes, None] = None) -> 'RefLogEntry': + def log_append(self, oldbinsha, message, newbinsha=None): """Append a logentry to the logfile of this ref :param oldbinsha: binary sha this ref used to point to @@ -420,19 +402,15 @@ def log_append(self, oldbinsha: bytes, message: Union[str, None], # correct to allow overriding the committer on a per-commit level. # See https://github.com/gitpython-developers/GitPython/pull/146 try: - committer_or_reader: Union['Actor', 'GitConfigParser'] = self.commit.committer + committer_or_reader = self.commit.committer except ValueError: committer_or_reader = self.repo.config_reader() # end handle newly cloned repositories - if newbinsha is None: - newbinsha = self.commit.binsha - - if message is None: - message = '' + return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, + (newbinsha is None and self.commit.binsha) or newbinsha, + message) - return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, newbinsha, message) - - def log_entry(self, index: int) -> RefLogEntry: + def log_entry(self, index): """:return: RefLogEntry at the given index :param index: python list compatible positive or negative index @@ -441,23 +419,22 @@ def log_entry(self, index: int) -> RefLogEntry: In that case, it will be faster than the ``log()`` method""" return RefLog.entry_at(RefLog.path(self), index) - @ classmethod - def to_full_path(cls, path: Union[PathLike, 'SymbolicReference']) -> str: + @classmethod + def to_full_path(cls, path) -> PathLike: """ :return: string with a full repository-relative path which can be used to initialize a Reference instance, for instance by using ``Reference.from_path``""" if isinstance(path, SymbolicReference): path = path.path - full_ref_path = str(path) + full_ref_path = path if not cls._common_path_default: return full_ref_path - - if not str(path).startswith(cls._common_path_default + "/"): + if not path.startswith(cls._common_path_default + "/"): full_ref_path = '%s/%s' % (cls._common_path_default, path) return full_ref_path - @ classmethod - def delete(cls, repo: 'Repo', path: PathLike) -> None: + @classmethod + def delete(cls, repo, path): """Delete the reference at the given path :param repo: @@ -479,8 +456,8 @@ def delete(cls, repo: 'Repo', path: PathLike) -> None: new_lines = [] made_change = False dropped_last_line = False - for line_bytes in reader: - line = line_bytes.decode(defenc) + for line in reader: + line = line.decode(defenc) _, _, line_ref = line.partition(' ') line_ref = line_ref.strip() # keep line if it is a comment or if the ref to delete is not @@ -514,10 +491,8 @@ def delete(cls, repo: 'Repo', path: PathLike) -> None: os.remove(reflog_path) # END remove reflog - @ classmethod - def _create(cls: Type[T_References], repo: 'Repo', path: PathLike, resolve: bool, - reference: Union[str, 'SymbolicReference'], - force: bool, logmsg: Union[str, None] = None) -> T_References: + @classmethod + def _create(cls, repo, path, resolve, reference, force, logmsg=None): """internal method used to create a new symbolic reference. If resolve is False, the reference will be taken as is, creating a proper symbolic reference. Otherwise it will be resolved to the @@ -550,9 +525,8 @@ def _create(cls: Type[T_References], repo: 'Repo', path: PathLike, resolve: bool return ref @classmethod - def create(cls: Type[T_References], repo: 'Repo', path: PathLike, - reference: Union[str, 'SymbolicReference'] = 'SymbolicReference', - logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any) -> T_References: + def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'HEAD', + logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any): """Create a new symbolic reference, hence a reference pointing , to another reference. :param repo: @@ -564,7 +538,7 @@ def create(cls: Type[T_References], repo: 'Repo', path: PathLike, :param reference: The reference to which the new symbolic reference should point to. - If it is a ref to a commit'ish, the symbolic ref will be detached. + If it is a commit'ish, the symbolic ref will be detached. :param force: if True, force creation even if a symbolic reference with that name already exists. @@ -583,7 +557,7 @@ def create(cls: Type[T_References], repo: 'Repo', path: PathLike, :note: This does not alter the current HEAD, index or Working Tree""" return cls._create(repo, path, cls._resolve_ref_on_create, reference, force, logmsg) - def rename(self, new_path: str, force: bool = False) -> 'SymbolicReference': + def rename(self, new_path, force=False): """Rename self to a new path :param new_path: @@ -603,7 +577,7 @@ def rename(self, new_path: str, force: bool = False) -> 'SymbolicReference': new_abs_path = os.path.join(_git_dir(self.repo, new_path), new_path) cur_abs_path = os.path.join(_git_dir(self.repo, self.path), self.path) - if os.path.isfile(new_abs_path): + if os.path.path.isfile(new_abs_path): if not force: # if they point to the same file, its not an error with open(new_abs_path, 'rb') as fd1: @@ -689,7 +663,7 @@ def iter_items(cls, repo: 'Repo', common_path: Union[PathLike, None] = None, *ar return (r for r in cls._iter_items(repo, common_path) if r.__class__ == SymbolicReference or not r.is_detached) @classmethod - def from_path(cls, repo: 'Repo', path: PathLike) -> Union['Head', 'RemoteReference', 'TagReference', 'Reference']: + def from_path(cls, repo, path): """ :param path: full .git-directory-relative path name to the Reference to instantiate :note: use to_full_path() if you only have a partial path of a known Reference Type From 34e9850989e9748e94609925a754de4b2ba38216 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 15:56:42 +0100 Subject: [PATCH 0722/2375] Add type to symbolicreference.iter_items() --- git/refs/symbolic.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 779fe5a5e..081cd74dc 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -642,8 +642,8 @@ def _iter_items(cls: Type[T_References], repo: 'Repo', common_path: Union[PathLi # END for each sorted relative refpath @classmethod - # type: ignore[override] - def iter_items(cls, repo: 'Repo', common_path: Union[PathLike, None] = None, *args, **kwargs): + def iter_items(cls: Type[T_References], repo: 'Repo', common_path: Union[PathLike, None] = None, + *args: Any, **kwargs: Any) -> Iterator[T_References]: """Find all refs in the repository :param repo: is the Repo From 265d40be3cf0e6f16d7ffd22f5fbd4a503f09219 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 16:03:23 +0100 Subject: [PATCH 0723/2375] Add type to symbolicreference.rename() --- git/refs/symbolic.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 081cd74dc..80b4fef63 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -26,6 +26,7 @@ if TYPE_CHECKING: from git.repo import Repo + from git.refs import Head, TagReference, Reference T_References = TypeVar('T_References', bound='SymbolicReference') @@ -59,10 +60,10 @@ class SymbolicReference(object): def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False): self.repo = repo - self.path = str(path) + self.path = path def __str__(self) -> str: - return self.path + return str(self.path) def __repr__(self): return '' % (self.__class__.__name__, self.path) @@ -84,7 +85,7 @@ def name(self) -> str: :return: In case of symbolic references, the shortest assumable name is the path itself.""" - return self.path + return str(self.path) @property def abspath(self) -> PathLike: @@ -557,7 +558,7 @@ def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] :note: This does not alter the current HEAD, index or Working Tree""" return cls._create(repo, path, cls._resolve_ref_on_create, reference, force, logmsg) - def rename(self, new_path, force=False): + def rename(self, new_path: PathLike, force: bool = False) -> 'SymbolicReference': """Rename self to a new path :param new_path: @@ -577,7 +578,7 @@ def rename(self, new_path, force=False): new_abs_path = os.path.join(_git_dir(self.repo, new_path), new_path) cur_abs_path = os.path.join(_git_dir(self.repo, self.path), self.path) - if os.path.path.isfile(new_abs_path): + if os.path.isfile(new_abs_path): if not force: # if they point to the same file, its not an error with open(new_abs_path, 'rb') as fd1: @@ -663,7 +664,7 @@ def iter_items(cls: Type[T_References], repo: 'Repo', common_path: Union[PathLik return (r for r in cls._iter_items(repo, common_path) if r.__class__ == SymbolicReference or not r.is_detached) @classmethod - def from_path(cls, repo, path): + def from_path(cls, repo: 'Repo', path: PathLike) -> Union['Head', 'TagReference', 'Reference']: """ :param path: full .git-directory-relative path name to the Reference to instantiate :note: use to_full_path() if you only have a partial path of a known Reference Type From bdd6a4345f224c7a208fec7dd42014b3ff13defa Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 16:09:22 +0100 Subject: [PATCH 0724/2375] Add type to symbolicreference.__repr__() --- git/refs/symbolic.py | 12 ++++++------ pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 80b4fef63..74bc0a39c 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -36,9 +36,9 @@ __all__ = ["SymbolicReference"] -def _git_dir(repo, path): +def _git_dir(repo: 'Repo', path: PathLike) -> PathLike: """ Find the git dir that's appropriate for the path""" - name = "%s" % (path,) + name = f"{path}" if name in ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'index', 'logs']: return repo.git_dir return repo.common_dir @@ -65,18 +65,18 @@ def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False): def __str__(self) -> str: return str(self.path) - def __repr__(self): + def __repr__(self) -> str: return '' % (self.__class__.__name__, self.path) - def __eq__(self, other): + def __eq__(self, other: Any) -> bool: if hasattr(other, 'path'): return self.path == other.path return False - def __ne__(self, other): + def __ne__(self, other: Any) -> bool: return not (self == other) - def __hash__(self): + def __hash__(self) -> int: return hash(self.path) @property diff --git a/pyproject.toml b/pyproject.toml index 94f74793d..6437a7199 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,7 @@ filterwarnings = 'ignore::DeprecationWarning' # filterwarnings ignore::WarningType # ignores those warnings [tool.mypy] -# disallow_untyped_defs = True +# disallow_untyped_defs = true no_implicit_optional = true warn_redundant_casts = true # warn_unused_ignores = True From 1f922671be65261538314f8759e473084c5ed865 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 16:19:28 +0100 Subject: [PATCH 0725/2375] Add type to symbolicreference._get_ref_info() --- git/refs/symbolic.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 74bc0a39c..4b04add51 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -136,23 +136,23 @@ def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: # alright. @classmethod - def dereference_recursive(cls, repo, ref_path): + def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: """ :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all intermediate references as required :param repo: the repository containing the reference at ref_path""" while True: - hexsha, ref_path = cls._get_ref_info(repo, ref_path) + hexsha, _ref_path = cls._get_ref_info(repo, ref_path) if hexsha is not None: return hexsha # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo, ref_path): + def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, str]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" - tokens = None + tokens: Union[Tuple[str, str], List[str], None] = None repodir = _git_dir(repo, ref_path) try: with open(os.path.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: @@ -169,7 +169,7 @@ def _get_ref_info_helper(cls, repo, ref_path): if path != ref_path: continue # sha will be used - tokens = sha, path + tokens = (sha, path) break # END for each packed ref # END handle packed refs @@ -186,8 +186,8 @@ def _get_ref_info_helper(cls, repo, ref_path): raise ValueError("Failed to parse reference information from %r" % ref_path) - @classmethod - def _get_ref_info(cls, repo, ref_path): + @ classmethod + def _get_ref_info(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, str]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" @@ -370,7 +370,7 @@ def is_valid(self): else: return True - @property + @ property def is_detached(self): """ :return: @@ -420,7 +420,7 @@ def log_entry(self, index): In that case, it will be faster than the ``log()`` method""" return RefLog.entry_at(RefLog.path(self), index) - @classmethod + @ classmethod def to_full_path(cls, path) -> PathLike: """ :return: string with a full repository-relative path which can be used to initialize @@ -434,7 +434,7 @@ def to_full_path(cls, path) -> PathLike: full_ref_path = '%s/%s' % (cls._common_path_default, path) return full_ref_path - @classmethod + @ classmethod def delete(cls, repo, path): """Delete the reference at the given path @@ -492,7 +492,7 @@ def delete(cls, repo, path): os.remove(reflog_path) # END remove reflog - @classmethod + @ classmethod def _create(cls, repo, path, resolve, reference, force, logmsg=None): """internal method used to create a new symbolic reference. If resolve is False, the reference will be taken as is, creating From ad4517ff7c6bb629097a1adae204c27a7af4ba4b Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 16:23:11 +0100 Subject: [PATCH 0726/2375] Add type to symbolicreference._get_packed_refs_path() --- git/refs/symbolic.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 4b04add51..74bc0a39c 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -136,23 +136,23 @@ def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: # alright. @classmethod - def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: + def dereference_recursive(cls, repo, ref_path): """ :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all intermediate references as required :param repo: the repository containing the reference at ref_path""" while True: - hexsha, _ref_path = cls._get_ref_info(repo, ref_path) + hexsha, ref_path = cls._get_ref_info(repo, ref_path) if hexsha is not None: return hexsha # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, str]]: + def _get_ref_info_helper(cls, repo, ref_path): """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" - tokens: Union[Tuple[str, str], List[str], None] = None + tokens = None repodir = _git_dir(repo, ref_path) try: with open(os.path.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: @@ -169,7 +169,7 @@ def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[s if path != ref_path: continue # sha will be used - tokens = (sha, path) + tokens = sha, path break # END for each packed ref # END handle packed refs @@ -186,8 +186,8 @@ def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[s raise ValueError("Failed to parse reference information from %r" % ref_path) - @ classmethod - def _get_ref_info(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, str]]: + @classmethod + def _get_ref_info(cls, repo, ref_path): """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" @@ -370,7 +370,7 @@ def is_valid(self): else: return True - @ property + @property def is_detached(self): """ :return: @@ -420,7 +420,7 @@ def log_entry(self, index): In that case, it will be faster than the ``log()`` method""" return RefLog.entry_at(RefLog.path(self), index) - @ classmethod + @classmethod def to_full_path(cls, path) -> PathLike: """ :return: string with a full repository-relative path which can be used to initialize @@ -434,7 +434,7 @@ def to_full_path(cls, path) -> PathLike: full_ref_path = '%s/%s' % (cls._common_path_default, path) return full_ref_path - @ classmethod + @classmethod def delete(cls, repo, path): """Delete the reference at the given path @@ -492,7 +492,7 @@ def delete(cls, repo, path): os.remove(reflog_path) # END remove reflog - @ classmethod + @classmethod def _create(cls, repo, path, resolve, reference, force, logmsg=None): """internal method used to create a new symbolic reference. If resolve is False, the reference will be taken as is, creating From 6b0faba783d8f93bdd23ef52f50619a61b0ed815 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 16:25:23 +0100 Subject: [PATCH 0727/2375] Add type to symbolicreference.dereference_recursive() --- git/refs/symbolic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 74bc0a39c..30a23e66b 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -136,7 +136,7 @@ def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: # alright. @classmethod - def dereference_recursive(cls, repo, ref_path): + def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: """ :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all intermediate references as required From 7e972b982cea094b84df27a7b0be5a4dd13b8469 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 16:28:10 +0100 Subject: [PATCH 0728/2375] Add type to symbolicreference.dereference_recursive() --- git/refs/symbolic.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 30a23e66b..d712e5a23 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -148,11 +148,11 @@ def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo, ref_path): + def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, str]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" - tokens = None + tokens: Union[None, List[str], Tuple[str, str]] = None repodir = _git_dir(repo, ref_path) try: with open(os.path.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: From 24c124208a870c6c041a304a12a7b91968225ac7 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 16:37:56 +0100 Subject: [PATCH 0729/2375] Add type to symbolicreference() --- git/refs/symbolic.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index d712e5a23..7da10cb29 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -36,7 +36,7 @@ __all__ = ["SymbolicReference"] -def _git_dir(repo: 'Repo', path: PathLike) -> PathLike: +def _git_dir(repo: 'Repo', path: Union[PathLike, None]) -> PathLike: """ Find the git dir that's appropriate for the path""" name = f"{path}" if name in ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'index', 'logs']: @@ -136,26 +136,27 @@ def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: # alright. @classmethod - def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: + def dereference_recursive(cls, repo: 'Repo', ref_path: Union[None, PathLike]) -> str: """ :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all intermediate references as required :param repo: the repository containing the reference at ref_path""" - while True: + while True: # loop that overwrites ref_path each loop hexsha, ref_path = cls._get_ref_info(repo, ref_path) if hexsha is not None: return hexsha # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, str]]: + def _get_ref_info_helper(cls, repo: 'Repo', ref_path: Union[PathLike, None] + ) -> Union[Tuple[str, None], Tuple[None, str]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" tokens: Union[None, List[str], Tuple[str, str]] = None repodir = _git_dir(repo, ref_path) try: - with open(os.path.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: + with open(os.path.join(repodir, cast(str, ref_path)), 'rt', encoding='UTF-8') as fp: value = fp.read().rstrip() # Don't only split on spaces, but on whitespace, which allows to parse lines like # 60b64ef992065e2600bfef6187a97f92398a9144 branch 'master' of git-server:/path/to/repo @@ -187,7 +188,7 @@ def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[s raise ValueError("Failed to parse reference information from %r" % ref_path) @classmethod - def _get_ref_info(cls, repo, ref_path): + def _get_ref_info(cls, repo: 'Repo', ref_path: Union[PathLike, None]) -> Union[Tuple[str, None], Tuple[None, str]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" From 8eedc9d002da9bb085be4a82ffb5372f8f8ff7a2 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 16:43:19 +0100 Subject: [PATCH 0730/2375] Add type to symbolicreference.get_() --- git/refs/symbolic.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 7da10cb29..bffcfea5f 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -36,7 +36,7 @@ __all__ = ["SymbolicReference"] -def _git_dir(repo: 'Repo', path: Union[PathLike, None]) -> PathLike: +def _git_dir(repo: 'Repo', path: PathLike) -> PathLike: """ Find the git dir that's appropriate for the path""" name = f"{path}" if name in ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'index', 'logs']: @@ -136,27 +136,26 @@ def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: # alright. @classmethod - def dereference_recursive(cls, repo: 'Repo', ref_path: Union[None, PathLike]) -> str: + def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: """ :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all intermediate references as required :param repo: the repository containing the reference at ref_path""" - while True: # loop that overwrites ref_path each loop + while True: hexsha, ref_path = cls._get_ref_info(repo, ref_path) if hexsha is not None: return hexsha # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo: 'Repo', ref_path: Union[PathLike, None] - ) -> Union[Tuple[str, None], Tuple[None, str]]: + def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike): """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" tokens: Union[None, List[str], Tuple[str, str]] = None repodir = _git_dir(repo, ref_path) try: - with open(os.path.join(repodir, cast(str, ref_path)), 'rt', encoding='UTF-8') as fp: + with open(os.path.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: value = fp.read().rstrip() # Don't only split on spaces, but on whitespace, which allows to parse lines like # 60b64ef992065e2600bfef6187a97f92398a9144 branch 'master' of git-server:/path/to/repo @@ -188,7 +187,7 @@ def _get_ref_info_helper(cls, repo: 'Repo', ref_path: Union[PathLike, None] raise ValueError("Failed to parse reference information from %r" % ref_path) @classmethod - def _get_ref_info(cls, repo: 'Repo', ref_path: Union[PathLike, None]) -> Union[Tuple[str, None], Tuple[None, str]]: + def _get_ref_info(cls, repo, ref_path): """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" From f066c7adb5f5773dc1d0dd986c786bc0c5094e31 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 16:52:42 +0100 Subject: [PATCH 0731/2375] Add type to symbolicreference.is_remote() --- git/refs/symbolic.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index bffcfea5f..b072f142c 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -526,8 +526,9 @@ def _create(cls, repo, path, resolve, reference, force, logmsg=None): return ref @classmethod - def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'HEAD', - logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any): + def create(cls: Type[T_References], repo: 'Repo', path: PathLike, + reference: Union['SymbolicReference', str] = 'HEAD', + logmsg: Union[str, None] = None, force: bool = False, **kwargs: Any) -> T_References: """Create a new symbolic reference, hence a reference pointing , to another reference. :param repo: @@ -689,6 +690,6 @@ def from_path(cls, repo: 'Repo', path: PathLike) -> Union['Head', 'TagReference' # END for each type to try raise ValueError("Could not find reference type suitable to handle path %r" % path) - def is_remote(self): + def is_remote(self) -> bool: """:return: True if this symbolic reference points to a remote branch""" - return self.path.startswith(self._remote_common_path_default + "/") + return str(self.path).startswith(self._remote_common_path_default + "/") From a8ee94b1998589085ae2b8a6de310d0a5dfd0ffd Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 16:57:56 +0100 Subject: [PATCH 0732/2375] Add type to symbolicreference._create() --- git/refs/symbolic.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index b072f142c..1000204fb 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -493,7 +493,9 @@ def delete(cls, repo, path): # END remove reflog @classmethod - def _create(cls, repo, path, resolve, reference, force, logmsg=None): + def _create(cls: Type[T_References], repo: 'Repo', path: PathLike, resolve: bool, + reference: Union['SymbolicReference', str], force: bool, + logmsg: Union[str, None] = None) -> T_References: """internal method used to create a new symbolic reference. If resolve is False, the reference will be taken as is, creating a proper symbolic reference. Otherwise it will be resolved to the @@ -511,7 +513,7 @@ def _create(cls, repo, path, resolve, reference, force, logmsg=None): if not force and os.path.isfile(abs_ref_path): target_data = str(target) if isinstance(target, SymbolicReference): - target_data = target.path + target_data = str(target.path) if not resolve: target_data = "ref: " + target_data with open(abs_ref_path, 'rb') as fd: From afd2ec5251479f48044408c7fcb7dab0494cd4c1 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 17:02:53 +0100 Subject: [PATCH 0733/2375] Add type to symbolicreference.delete() --- git/refs/symbolic.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 1000204fb..89999eda6 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -421,7 +421,7 @@ def log_entry(self, index): return RefLog.entry_at(RefLog.path(self), index) @classmethod - def to_full_path(cls, path) -> PathLike: + def to_full_path(cls, path: Union[PathLike, 'SymbolicReference']) -> PathLike: """ :return: string with a full repository-relative path which can be used to initialize a Reference instance, for instance by using ``Reference.from_path``""" @@ -430,12 +430,12 @@ def to_full_path(cls, path) -> PathLike: full_ref_path = path if not cls._common_path_default: return full_ref_path - if not path.startswith(cls._common_path_default + "/"): + if not str(path).startswith(cls._common_path_default + "/"): full_ref_path = '%s/%s' % (cls._common_path_default, path) return full_ref_path @classmethod - def delete(cls, repo, path): + def delete(cls, repo: 'Repo', path: PathLike) -> None: """Delete the reference at the given path :param repo: @@ -457,8 +457,8 @@ def delete(cls, repo, path): new_lines = [] made_change = False dropped_last_line = False - for line in reader: - line = line.decode(defenc) + for line_bytes in reader: + line = line_bytes.decode(defenc) _, _, line_ref = line.partition(' ') line_ref = line_ref.strip() # keep line if it is a comment or if the ref to delete is not From 581d40d957fd3d7ee85c28c4dde4d6f28e104433 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 17:06:22 +0100 Subject: [PATCH 0734/2375] Add type to symbolicreference.log_append() --- git/refs/symbolic.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 89999eda6..5d3a6a0da 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -27,6 +27,10 @@ if TYPE_CHECKING: from git.repo import Repo from git.refs import Head, TagReference, Reference + from .log import RefLogEntry + from git.config import GitConfigParser + from git.objects.commit import Actor + T_References = TypeVar('T_References', bound='SymbolicReference') @@ -391,7 +395,8 @@ def log(self): instead of calling this method repeatedly. It should be considered read-only.""" return RefLog.from_file(RefLog.path(self)) - def log_append(self, oldbinsha, message, newbinsha=None): + def log_append(self, oldbinsha: bytes, message: Union[str, None], + newbinsha: Union[bytes, None] = None) -> 'RefLogEntry': """Append a logentry to the logfile of this ref :param oldbinsha: binary sha this ref used to point to @@ -403,15 +408,19 @@ def log_append(self, oldbinsha, message, newbinsha=None): # correct to allow overriding the committer on a per-commit level. # See https://github.com/gitpython-developers/GitPython/pull/146 try: - committer_or_reader = self.commit.committer + committer_or_reader: Union['Actor', 'GitConfigParser'] = self.commit.committer except ValueError: committer_or_reader = self.repo.config_reader() # end handle newly cloned repositories - return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, - (newbinsha is None and self.commit.binsha) or newbinsha, - message) + if newbinsha is None: + newbinsha = self.commit.binsha + + if message is None: + message = '' + + return RefLog.append_entry(committer_or_reader, RefLog.path(self), oldbinsha, newbinsha, message) - def log_entry(self, index): + def log_entry(self, index: int) -> 'RefLogEntry': """:return: RefLogEntry at the given index :param index: python list compatible positive or negative index From 7f401fc659a7f9c84a9c88675aba498357a2916d Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 17:09:54 +0100 Subject: [PATCH 0735/2375] Add type to symbolicreference.is_valid() --- git/refs/symbolic.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 5d3a6a0da..65bad6e48 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -360,9 +360,9 @@ def set_reference(self, ref, logmsg=None): # aliased reference reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") - ref: Union[Commit_ish] = reference # type: ignore # Union[str, Commit_ish, SymbolicReference] + ref: Union['Reference'] = reference # type: ignore - def is_valid(self): + def is_valid(self) -> bool: """ :return: True if the reference is valid, hence it can be read and points to @@ -375,7 +375,7 @@ def is_valid(self): return True @property - def is_detached(self): + def is_detached(self) -> bool: """ :return: True if we are a detached reference, hence we point to a specific commit @@ -386,7 +386,7 @@ def is_detached(self): except TypeError: return True - def log(self): + def log(self) -> 'RefLog': """ :return: RefLog for this reference. Its last entry reflects the latest change applied to this reference From e8442eead72bfc2a547234d0289d0f90642167fd Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 17:15:33 +0100 Subject: [PATCH 0736/2375] Add type to symbolicreference.set_reference() --- git/refs/symbolic.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 65bad6e48..4713e0c42 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -289,7 +289,8 @@ def _get_reference(self): raise TypeError("%s is a detached symbolic reference as it points to %r" % (self, sha)) return self.from_path(self.repo, target_ref_path) - def set_reference(self, ref, logmsg=None): + def set_reference(self, ref: Union[Commit_ish, 'SymbolicReference', str], + logmsg: Union[str, None] = None) -> Union[Commit_ish, 'SymbolicReference']: """Set ourselves to the given ref. It will stay a symbol if the ref is a Reference. Otherwise an Object, given as Object instance or refspec, is assumed and if valid, will be set which effectively detaches the refererence if it was a purely @@ -330,7 +331,7 @@ def set_reference(self, ref, logmsg=None): raise TypeError("Require commit, got %r" % obj) # END verify type - oldbinsha = None + oldbinsha: bytes = b'' if logmsg is not None: try: oldbinsha = self.commit.binsha @@ -359,8 +360,8 @@ def set_reference(self, ref, logmsg=None): return self # aliased reference - reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") - ref: Union['Reference'] = reference # type: ignore + reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") # type: ignore + ref: Union['Reference'] = reference # type: ignore def is_valid(self) -> bool: """ From f2012e599e388580bf8823a23ff63a201e0bf4c4 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 17:25:46 +0100 Subject: [PATCH 0737/2375] Add type to symbolicreference.set_object() --- git/refs/reference.py | 4 ++-- git/refs/symbolic.py | 14 ++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/git/refs/reference.py b/git/refs/reference.py index bc2c6e807..539691e72 100644 --- a/git/refs/reference.py +++ b/git/refs/reference.py @@ -63,8 +63,8 @@ def __str__(self) -> str: #{ Interface # @ReservedAssignment - def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None - ) -> 'SymbolicReference': + def set_object(self, object: Union[Commit_ish, 'SymbolicReference', str], logmsg: Union[str, None] = None + ) -> 'Reference': """Special version which checks if the head-log needs an update as well :return: self""" oldbinsha = None diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 4713e0c42..0d2c98297 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -221,7 +221,8 @@ def _get_commit(self): # END handle type return obj - def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=None): + def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg: Union[str, None] = None + ) -> 'SymbolicReference': """As set_object, but restricts the type of object to be a Commit :raise ValueError: If commit is not a Commit object or doesn't point to @@ -250,7 +251,8 @@ def set_commit(self, commit: Union[Commit, 'SymbolicReference', str], logmsg=Non return self - def set_object(self, object, logmsg=None): # @ReservedAssignment + def set_object(self, object: Union[Commit_ish, 'SymbolicReference', str], logmsg: Union[str, None] = None + ) -> 'SymbolicReference': """Set the object we point to, possibly dereference our symbolic reference first. If the reference does not exist, it will be created @@ -277,10 +279,10 @@ def set_object(self, object, logmsg=None): # @ReservedAssignment # set the commit on our reference return self._get_reference().set_object(object, logmsg) - commit = property(_get_commit, set_commit, doc="Query or set commits directly") - object = property(_get_object, set_object, doc="Return the object our ref currently refers to") + commit = property(_get_commit, set_commit, doc="Query or set commits directly") # type: ignore + object = property(_get_object, set_object, doc="Return the object our ref currently refers to") # type: ignore - def _get_reference(self): + def _get_reference(self) -> 'SymbolicReference': """:return: Reference Object we point to :raise TypeError: If this symbolic reference is detached, hence it doesn't point to a reference, but to a commit""" @@ -290,7 +292,7 @@ def _get_reference(self): return self.from_path(self.repo, target_ref_path) def set_reference(self, ref: Union[Commit_ish, 'SymbolicReference', str], - logmsg: Union[str, None] = None) -> Union[Commit_ish, 'SymbolicReference']: + logmsg: Union[str, None] = None) -> 'SymbolicReference': """Set ourselves to the given ref. It will stay a symbol if the ref is a Reference. Otherwise an Object, given as Object instance or refspec, is assumed and if valid, will be set which effectively detaches the refererence if it was a purely From d4d46697a6ce23edba8e22030916dad28d42abc2 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 17:29:06 +0100 Subject: [PATCH 0738/2375] cleanup --- git/refs/reference.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/refs/reference.py b/git/refs/reference.py index 539691e72..a3647fb3b 100644 --- a/git/refs/reference.py +++ b/git/refs/reference.py @@ -7,7 +7,7 @@ # typing ------------------------------------------------------------------ -from typing import Any, Callable, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING # NOQA +from typing import Any, Callable, Iterator, Type, Union, TYPE_CHECKING # NOQA from git.types import Commit_ish, PathLike, TBD, Literal, _T # NOQA if TYPE_CHECKING: From 13b38ce012dc1bf84d9dca8d141dcab86c0d4e09 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 17:49:18 +0100 Subject: [PATCH 0739/2375] Add type to symbolicreference.reference() --- git/refs/head.py | 1 + git/refs/symbolic.py | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/git/refs/head.py b/git/refs/head.py index 260bf5e7e..160272049 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -40,6 +40,7 @@ def __init__(self, repo: 'Repo', path: PathLike = _HEAD_NAME): raise ValueError("HEAD instance must point to %r, got %r" % (self._HEAD_NAME, path)) super(HEAD, self).__init__(repo, path) self.commit: 'Commit' + self.ref: 'Head' def orig_head(self) -> SymbolicReference: """ diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 0d2c98297..5ce74938c 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -65,6 +65,7 @@ class SymbolicReference(object): def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False): self.repo = repo self.path = path + self.ref = self.reference def __str__(self) -> str: return str(self.path) @@ -282,7 +283,7 @@ def set_object(self, object: Union[Commit_ish, 'SymbolicReference', str], logmsg commit = property(_get_commit, set_commit, doc="Query or set commits directly") # type: ignore object = property(_get_object, set_object, doc="Return the object our ref currently refers to") # type: ignore - def _get_reference(self) -> 'SymbolicReference': + def _get_reference(self) -> 'Reference': """:return: Reference Object we point to :raise TypeError: If this symbolic reference is detached, hence it doesn't point to a reference, but to a commit""" @@ -362,8 +363,15 @@ def set_reference(self, ref: Union[Commit_ish, 'SymbolicReference', str], return self # aliased reference - reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") # type: ignore - ref: Union['Reference'] = reference # type: ignore + # reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") # type: ignore + + @property + def reference(self) -> 'Reference': + return self._get_reference() + + @reference.setter + def reference(self, *args, **kwargs): + return self.set_reference(*args, **kwargs) def is_valid(self) -> bool: """ From 3be955e5adc09d20a7e2e919ee1e95a7a0f5fb0e Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 17:53:44 +0100 Subject: [PATCH 0740/2375] Add type to symbolicreference.references() --- git/refs/head.py | 1 - git/refs/symbolic.py | 14 +++----------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/git/refs/head.py b/git/refs/head.py index 160272049..260bf5e7e 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -40,7 +40,6 @@ def __init__(self, repo: 'Repo', path: PathLike = _HEAD_NAME): raise ValueError("HEAD instance must point to %r, got %r" % (self._HEAD_NAME, path)) super(HEAD, self).__init__(repo, path) self.commit: 'Commit' - self.ref: 'Head' def orig_head(self) -> SymbolicReference: """ diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 5ce74938c..ae391c1e2 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -26,7 +26,7 @@ if TYPE_CHECKING: from git.repo import Repo - from git.refs import Head, TagReference, Reference + from git.refs import Head, TagReference, RemoteReference, Reference from .log import RefLogEntry from git.config import GitConfigParser from git.objects.commit import Actor @@ -65,7 +65,6 @@ class SymbolicReference(object): def __init__(self, repo: 'Repo', path: PathLike, check_path: bool = False): self.repo = repo self.path = path - self.ref = self.reference def __str__(self) -> str: return str(self.path) @@ -363,15 +362,8 @@ def set_reference(self, ref: Union[Commit_ish, 'SymbolicReference', str], return self # aliased reference - # reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") # type: ignore - - @property - def reference(self) -> 'Reference': - return self._get_reference() - - @reference.setter - def reference(self, *args, **kwargs): - return self.set_reference(*args, **kwargs) + reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") # type: ignore + ref: Union['Head', 'TagReference', 'RemoteReference', 'Reference'] = reference # type: ignore def is_valid(self) -> bool: """ From 62f78814206a99fafeedab1d4f2ee6f4c6b70ef1 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 17:59:14 +0100 Subject: [PATCH 0741/2375] Add type to repo.base._to_full_tag_path --- git/repo/base.py | 13 +++++++------ pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index 355f93999..5581233ba 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -412,13 +412,14 @@ def tag(self, path: PathLike) -> TagReference: return TagReference(self, full_path) @staticmethod - def _to_full_tag_path(path): - if path.startswith(TagReference._common_path_default + '/'): - return path - if path.startswith(TagReference._common_default + '/'): - return Reference._common_path_default + '/' + path + def _to_full_tag_path(path: PathLike) -> str: + path_str = str(path) + if path_str.startswith(TagReference._common_path_default + '/'): + return path_str + if path_str.startswith(TagReference._common_default + '/'): + return Reference._common_path_default + '/' + path_str else: - return TagReference._common_path_default + '/' + path + return TagReference._common_path_default + '/' + path_str def create_head(self, path: PathLike, commit: str = 'HEAD', force: bool = False, logmsg: Optional[str] = None diff --git a/pyproject.toml b/pyproject.toml index 6437a7199..4751ffcb9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,7 @@ filterwarnings = 'ignore::DeprecationWarning' # filterwarnings ignore::WarningType # ignores those warnings [tool.mypy] -# disallow_untyped_defs = true +disallow_untyped_defs = true no_implicit_optional = true warn_redundant_casts = true # warn_unused_ignores = True From ef48a3513d7a9456fd57f4da248a9c73f9e668bd Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 18:01:01 +0100 Subject: [PATCH 0742/2375] Add type to refs.head.delete() --- git/refs/head.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/git/refs/head.py b/git/refs/head.py index 260bf5e7e..56a87182f 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -21,7 +21,7 @@ __all__ = ["HEAD", "Head"] -def strip_quotes(string): +def strip_quotes(string: str) -> str: if string.startswith('"') and string.endswith('"'): return string[1:-1] return string @@ -129,14 +129,13 @@ class Head(Reference): k_config_remote_ref = "merge" # branch to merge from remote @classmethod - def delete(cls, repo: 'Repo', *heads: 'Head', **kwargs: Any): + def delete(cls, repo: 'Repo', *heads: 'Head', force: bool = False, **kwargs: Any) -> None: """Delete the given heads :param force: If True, the heads will be deleted even if they are not yet merged into the main development stream. Default False""" - force = kwargs.get("force", False) flag = "-d" if force: flag = "-D" From e364c5e327f916366e5936aa2c9f3f4065aec034 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 18:02:06 +0100 Subject: [PATCH 0743/2375] Add type to refs.log._read_from_file() --- git/refs/log.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/refs/log.py b/git/refs/log.py index 643b41140..ddd78bc76 100644 --- a/git/refs/log.py +++ b/git/refs/log.py @@ -157,7 +157,7 @@ def __init__(self, filepath: Union[PathLike, None] = None): self._read_from_file() # END handle filepath - def _read_from_file(self): + def _read_from_file(self) -> None: try: fmap = file_contents_ro_filepath( self._path, stream=True, allow_mmap=True) From 35231dba2f12ef4d19eabc409e72f773a19a3c43 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 18:04:28 +0100 Subject: [PATCH 0744/2375] Add type to objects.base.new() --- git/objects/base.py | 3 ++- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/git/objects/base.py b/git/objects/base.py index 64f105ca5..a3b0f230a 100644 --- a/git/objects/base.py +++ b/git/objects/base.py @@ -25,6 +25,7 @@ from .tree import Tree from .blob import Blob from .submodule.base import Submodule + from git.refs.reference import Reference IndexObjUnion = Union['Tree', 'Blob', 'Submodule'] @@ -59,7 +60,7 @@ def __init__(self, repo: 'Repo', binsha: bytes): assert len(binsha) == 20, "Require 20 byte binary sha, got %r, len = %i" % (binsha, len(binsha)) @classmethod - def new(cls, repo: 'Repo', id): # @ReservedAssignment + def new(cls, repo: 'Repo', id: Union[str, 'Reference']) -> Commit_ish: """ :return: New Object instance of a type appropriate to the object type behind id. The id of the newly created object will be a binsha even though diff --git a/pyproject.toml b/pyproject.toml index 4751ffcb9..ccf5c165d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,7 @@ filterwarnings = 'ignore::DeprecationWarning' # filterwarnings ignore::WarningType # ignores those warnings [tool.mypy] -disallow_untyped_defs = true +#disallow_untyped_defs = true no_implicit_optional = true warn_redundant_casts = true # warn_unused_ignores = True From d6e736922cb69cc87dd6595ef93f247ce99a960a Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 18:56:09 +0100 Subject: [PATCH 0745/2375] Add final types to config.py --- git/config.py | 18 +++++++++++------- git/util.py | 8 ++++---- pyproject.toml | 2 +- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/git/config.py b/git/config.py index ad02b4373..a3f41c60f 100644 --- a/git/config.py +++ b/git/config.py @@ -40,6 +40,7 @@ from io import BytesIO T_ConfigParser = TypeVar('T_ConfigParser', bound='GitConfigParser') +T_OMD_value = TypeVar('T_OMD_value', str, bytes, int, float, bool) if sys.version_info[:3] < (3, 7, 2): # typing.Ordereddict not added until py 3.7.2 @@ -47,7 +48,7 @@ OrderedDict_OMD = OrderedDict # type: ignore # until 3.6 dropped else: from typing import OrderedDict # type: ignore # until 3.6 dropped - OrderedDict_OMD = OrderedDict[str, List[_T]] # type: ignore[assignment, misc] + OrderedDict_OMD = OrderedDict[str, List[T_OMD_value]] # type: ignore[assignment, misc] # ------------------------------------------------------------- @@ -97,23 +98,23 @@ def __new__(cls, name: str, bases: TBD, clsdict: Dict[str, Any]) -> TBD: return new_type -def needs_values(func: Callable) -> Callable: +def needs_values(func: Callable[..., _T]) -> Callable[..., _T]: """Returns method assuring we read values (on demand) before we try to access them""" @wraps(func) - def assure_data_present(self, *args: Any, **kwargs: Any) -> Any: + def assure_data_present(self: GitConfigParser, *args: Any, **kwargs: Any) -> _T: self.read() return func(self, *args, **kwargs) # END wrapper method return assure_data_present -def set_dirty_and_flush_changes(non_const_func: Callable) -> Callable: +def set_dirty_and_flush_changes(non_const_func: Callable[..., _T]) -> Callable[..., _T]: """Return method that checks whether given non constant function may be called. If so, the instance will be set dirty. Additionally, we flush the changes right to disk""" - def flush_changes(self, *args: Any, **kwargs: Any) -> Any: + def flush_changes(self: GitConfigParser, *args: Any, **kwargs: Any) -> _T: rval = non_const_func(self, *args, **kwargs) self._dirty = True self.write() @@ -356,7 +357,7 @@ def __enter__(self) -> 'GitConfigParser': self._acquire_lock() return self - def __exit__(self, exception_type, exception_value, traceback) -> None: + def __exit__(self, *args: Any) -> None: self.release() def release(self) -> None: @@ -613,12 +614,15 @@ def read(self) -> None: # type: ignore[override] def _write(self, fp: IO) -> None: """Write an .ini-format representation of the configuration state in git compatible format""" - def write_section(name, section_dict): + def write_section(name: str, section_dict: _OMD) -> None: fp.write(("[%s]\n" % name).encode(defenc)) + + values: Sequence[Union[str, bytes, int, float, bool]] for (key, values) in section_dict.items_all(): if key == "__name__": continue + v: Union[str, bytes, int, float, bool] for v in values: fp.write(("\t%s = %s\n" % (key, self._value_to_string(v).replace('\n', '\n\t'))).encode(defenc)) # END if key is not __name__ diff --git a/git/util.py b/git/util.py index c0c0ecb73..92d95379e 100644 --- a/git/util.py +++ b/git/util.py @@ -408,7 +408,7 @@ def expand_path(p: Union[None, PathLike], expand_vars: bool = True) -> Optional[ return None -def remove_password_if_present(cmdline): +def remove_password_if_present(cmdline: Sequence[str]) -> List[str]: """ Parse any command line argument and if on of the element is an URL with a password, replace it by stars (in-place). @@ -1033,7 +1033,7 @@ def __delitem__(self, index: Union[SupportsIndex, int, slice, str]) -> None: class IterableClassWatcher(type): """ Metaclass that watches """ - def __init__(cls, name, bases, clsdict): + def __init__(cls, name: str, bases: List, clsdict: Dict) -> None: for base in bases: if type(base) == IterableClassWatcher: warnings.warn(f"GitPython Iterable subclassed by {name}. " @@ -1052,7 +1052,7 @@ class Iterable(metaclass=IterableClassWatcher): _id_attribute_ = "attribute that most suitably identifies your instance" @classmethod - def list_items(cls, repo, *args, **kwargs): + def list_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> Any: """ Deprecated, use IterableObj instead. Find all items of this type - subclasses can specify args and kwargs differently. @@ -1062,7 +1062,7 @@ def list_items(cls, repo, *args, **kwargs): :note: Favor the iter_items method as it will :return:list(Item,...) list of item instances""" - out_list = IterableList(cls._id_attribute_) + out_list: Any = IterableList(cls._id_attribute_) out_list.extend(cls.iter_items(repo, *args, **kwargs)) return out_list diff --git a/pyproject.toml b/pyproject.toml index ccf5c165d..6437a7199 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,7 @@ filterwarnings = 'ignore::DeprecationWarning' # filterwarnings ignore::WarningType # ignores those warnings [tool.mypy] -#disallow_untyped_defs = true +# disallow_untyped_defs = true no_implicit_optional = true warn_redundant_casts = true # warn_unused_ignores = True From 476f4de6aa893bc0289c345a7d06b85256ab98bc Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 19:00:23 +0100 Subject: [PATCH 0746/2375] Add set_dirty_and_flush_changes() types to config.py --- git/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/config.py b/git/config.py index a3f41c60f..011d0e0b1 100644 --- a/git/config.py +++ b/git/config.py @@ -102,7 +102,7 @@ def needs_values(func: Callable[..., _T]) -> Callable[..., _T]: """Returns method assuring we read values (on demand) before we try to access them""" @wraps(func) - def assure_data_present(self: GitConfigParser, *args: Any, **kwargs: Any) -> _T: + def assure_data_present(self: 'GitConfigParser', *args: Any, **kwargs: Any) -> _T: self.read() return func(self, *args, **kwargs) # END wrapper method @@ -114,7 +114,7 @@ def set_dirty_and_flush_changes(non_const_func: Callable[..., _T]) -> Callable[. If so, the instance will be set dirty. Additionally, we flush the changes right to disk""" - def flush_changes(self: GitConfigParser, *args: Any, **kwargs: Any) -> _T: + def flush_changes(self: 'GitConfigParser', *args: Any, **kwargs: Any) -> _T: rval = non_const_func(self, *args, **kwargs) self._dirty = True self.write() From e6bee43b97862182d6c30bc8200f6abd1ff759e5 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 19:08:29 +0100 Subject: [PATCH 0747/2375] Add final types to commit.py --- git/objects/commit.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/git/objects/commit.py b/git/objects/commit.py index 9d7096563..b689167f5 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -282,7 +282,7 @@ def iter_items(cls, repo: 'Repo', rev: Union[str, 'Commit', 'SymbolicReference'] proc = repo.git.rev_list(rev, args_list, as_process=True, **kwargs) return cls._iter_from_process_or_stream(repo, proc) - def iter_parents(self, paths: Union[PathLike, Sequence[PathLike]] = '', **kwargs) -> Iterator['Commit']: + def iter_parents(self, paths: Union[PathLike, Sequence[PathLike]] = '', **kwargs: Any) -> Iterator['Commit']: """Iterate _all_ parents of this commit. :param paths: @@ -362,7 +362,7 @@ def _iter_from_process_or_stream(cls, repo: 'Repo', proc_or_stream: Union[Popen, def create_from_tree(cls, repo: 'Repo', tree: Union[Tree, str], message: str, parent_commits: Union[None, List['Commit']] = None, head: bool = False, author: Union[None, Actor] = None, committer: Union[None, Actor] = None, - author_date: Union[None, str] = None, commit_date: Union[None, str] = None): + author_date: Union[None, str] = None, commit_date: Union[None, str] = None) -> 'Commit': """Commit the given tree, creating a commit object. :param repo: Repo object the commit should be part of @@ -403,7 +403,7 @@ def create_from_tree(cls, repo: 'Repo', tree: Union[Tree, str], message: str, else: for p in parent_commits: if not isinstance(p, cls): - raise ValueError("Parent commit '%r' must be of type %s" % (p, cls)) + raise ValueError(f"Parent commit '{p!r}' must be of type {cls}") # end check parent commit types # END if parent commits are unset From 2fc8a461017db70051e12746468585479c081bec Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 19:12:14 +0100 Subject: [PATCH 0748/2375] Add final types to tree.py --- git/objects/tree.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/objects/tree.py b/git/objects/tree.py index 70f36af5d..0cceb59ac 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -375,8 +375,8 @@ def __contains__(self, item: Union[IndexObjUnion, PathLike]) -> bool: # END for each item return False - def __reversed__(self): - return reversed(self._iter_convert_to_object(self._cache)) + def __reversed__(self) -> Iterator[IndexObjUnion]: + return reversed(self._iter_convert_to_object(self._cache)) # type: ignore def _serialize(self, stream: 'BytesIO') -> 'Tree': """Serialize this tree into the stream. Please note that we will assume From 9e5574ca26b30a9b5ec1e4763a590093e3dcfc97 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 19:25:38 +0100 Subject: [PATCH 0749/2375] Add final types to submodule.py --- git/objects/submodule/base.py | 13 +++++++------ git/objects/util.py | 12 ++++++------ pyproject.toml | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 143511909..559d2585e 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -57,6 +57,7 @@ if TYPE_CHECKING: from git.index import IndexFile from git.repo import Repo + from git.refs import Head # ----------------------------------------------------------------------------- @@ -265,7 +266,7 @@ def _module_abspath(cls, parent_repo: 'Repo', path: PathLike, name: str) -> Path # end @classmethod - def _clone_repo(cls, repo, url, path, name, **kwargs): + def _clone_repo(cls, repo: 'Repo', url: str, path: PathLike, name: str, **kwargs: Any) -> 'Repo': """:return: Repo instance of newly cloned repository :param repo: our parent repository :param url: url to clone from @@ -279,7 +280,7 @@ def _clone_repo(cls, repo, url, path, name, **kwargs): module_abspath_dir = osp.dirname(module_abspath) if not osp.isdir(module_abspath_dir): os.makedirs(module_abspath_dir) - module_checkout_path = osp.join(repo.working_tree_dir, path) + module_checkout_path = osp.join(str(repo.working_tree_dir), path) # end clone = git.Repo.clone_from(url, module_checkout_path, **kwargs) @@ -484,7 +485,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No def update(self, recursive: bool = False, init: bool = True, to_latest_revision: bool = False, progress: Union['UpdateProgress', None] = None, dry_run: bool = False, force: bool = False, keep_going: bool = False, env: Union[Mapping[str, str], None] = None, - clone_multi_options: Union[Sequence[TBD], None] = None): + clone_multi_options: Union[Sequence[TBD], None] = None) -> 'Submodule': """Update the repository of this submodule to point to the checkout we point at with the binsha of this instance. @@ -712,7 +713,7 @@ def update(self, recursive: bool = False, init: bool = True, to_latest_revision: return self @unbare_repo - def move(self, module_path, configuration=True, module=True): + def move(self, module_path: PathLike, configuration: bool = True, module: bool = True) -> 'Submodule': """Move the submodule to a another module path. This involves physically moving the repository at our current path, changing the configuration, as well as adjusting our index entry accordingly. @@ -742,7 +743,7 @@ def move(self, module_path, configuration=True, module=True): return self # END handle no change - module_checkout_abspath = join_path_native(self.repo.working_tree_dir, module_checkout_path) + module_checkout_abspath = join_path_native(str(self.repo.working_tree_dir), module_checkout_path) if osp.isfile(module_checkout_abspath): raise ValueError("Cannot move repository onto a file: %s" % module_checkout_abspath) # END handle target files @@ -1160,7 +1161,7 @@ def exists(self) -> bool: # END handle object state consistency @property - def branch(self): + def branch(self) -> 'Head': """:return: The branch instance that we are to checkout :raise InvalidGitRepositoryError: if our module is not yet checked out""" return mkhead(self.module(), self._branch_path) diff --git a/git/objects/util.py b/git/objects/util.py index db7807c26..f627211ec 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -144,20 +144,20 @@ def __init__(self, secs_west_of_utc: float, name: Union[None, str] = None) -> No def __reduce__(self) -> Tuple[Type['tzoffset'], Tuple[float, str]]: return tzoffset, (-self._offset.total_seconds(), self._name) - def utcoffset(self, dt) -> timedelta: + def utcoffset(self, dt: Union[datetime, None]) -> timedelta: return self._offset - def tzname(self, dt) -> str: + def tzname(self, dt: Union[datetime, None]) -> str: return self._name - def dst(self, dt) -> timedelta: + def dst(self, dt: Union[datetime, None]) -> timedelta: return ZERO utc = tzoffset(0, 'UTC') -def from_timestamp(timestamp, tz_offset: float) -> datetime: +def from_timestamp(timestamp: float, tz_offset: float) -> datetime: """Converts a timestamp + tz_offset into an aware datetime instance.""" utc_dt = datetime.fromtimestamp(timestamp, utc) try: @@ -305,7 +305,7 @@ class Traversable(Protocol): @classmethod @abstractmethod - def _get_intermediate_items(cls, item) -> Sequence['Traversable']: + def _get_intermediate_items(cls, item: Any) -> Sequence['Traversable']: """ Returns: Tuple of items connected to the given item. @@ -327,7 +327,7 @@ def list_traverse(self, *args: Any, **kwargs: Any) -> Any: stacklevel=2) return self._list_traverse(*args, **kwargs) - def _list_traverse(self, as_edge=False, *args: Any, **kwargs: Any + def _list_traverse(self, as_edge: bool = False, *args: Any, **kwargs: Any ) -> IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']]: """ :return: IterableList with the results of the traversal as produced by diff --git a/pyproject.toml b/pyproject.toml index 6437a7199..4751ffcb9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,7 @@ filterwarnings = 'ignore::DeprecationWarning' # filterwarnings ignore::WarningType # ignores those warnings [tool.mypy] -# disallow_untyped_defs = true +disallow_untyped_defs = true no_implicit_optional = true warn_redundant_casts = true # warn_unused_ignores = True From 56f8dd6a902736cb6b87329542ea6dcbf380884e Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 20:05:53 +0100 Subject: [PATCH 0750/2375] Add final types to cmd.py --- git/cmd.py | 53 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index 4404981e0..f82127453 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -39,10 +39,10 @@ # typing --------------------------------------------------------------------------- -from typing import (Any, AnyStr, BinaryIO, Callable, Dict, IO, List, Mapping, +from typing import (Any, AnyStr, BinaryIO, Callable, Dict, IO, Iterator, List, Mapping, Sequence, TYPE_CHECKING, TextIO, Tuple, Union, cast, overload) -from git.types import PathLike, Literal, TBD +from git.types import PathLike, Literal if TYPE_CHECKING: from git.repo.base import Repo @@ -146,11 +146,11 @@ def dashify(string: str) -> str: return string.replace('_', '-') -def slots_to_dict(self, exclude: Sequence[str] = ()) -> Dict[str, Any]: +def slots_to_dict(self: object, exclude: Sequence[str] = ()) -> Dict[str, Any]: return {s: getattr(self, s) for s in self.__slots__ if s not in exclude} -def dict_to_slots_and__excluded_are_none(self, d: Mapping[str, Any], excluded: Sequence[str] = ()) -> None: +def dict_to_slots_and__excluded_are_none(self: object, d: Mapping[str, Any], excluded: Sequence[str] = ()) -> None: for k, v in d.items(): setattr(self, k, v) for k in excluded: @@ -192,7 +192,7 @@ class Git(LazyMixin): def __getstate__(self) -> Dict[str, Any]: return slots_to_dict(self, exclude=self._excluded_) - def __setstate__(self, d) -> None: + def __setstate__(self, d: Dict[str, Any]) -> None: dict_to_slots_and__excluded_are_none(self, d, excluded=self._excluded_) # CONFIGURATION @@ -434,10 +434,13 @@ def wait(self, stderr: Union[None, bytes] = b'') -> int: if self.proc is not None: status = self.proc.wait() - def read_all_from_possibly_closed_stream(stream): - try: - return stderr + force_bytes(stream.read()) - except ValueError: + def read_all_from_possibly_closed_stream(stream: Union[IO[bytes], None]) -> bytes: + if stream: + try: + return stderr + force_bytes(stream.read()) + except ValueError: + return stderr or b'' + else: return stderr or b'' if status != 0: @@ -907,7 +910,7 @@ def _kill_process(pid: int) -> None: if self.GIT_PYTHON_TRACE == 'full': cmdstr = " ".join(redacted_command) - def as_text(stdout_value): + def as_text(stdout_value: Union[bytes, str]) -> str: return not output_stream and safe_decode(stdout_value) or '' # end @@ -932,10 +935,10 @@ def as_text(stdout_value): else: return stdout_value - def environment(self): + def environment(self) -> Dict[str, str]: return self._environment - def update_environment(self, **kwargs): + def update_environment(self, **kwargs: Any) -> Dict[str, Union[str, None]]: """ Set environment variables for future git invocations. Return all changed values in a format that can be passed back into this function to revert @@ -962,7 +965,7 @@ def update_environment(self, **kwargs): return old_env @contextmanager - def custom_environment(self, **kwargs): + def custom_environment(self, **kwargs: Any) -> Iterator[None]: """ A context manager around the above ``update_environment`` method to restore the environment back to its previous state after operation. @@ -1043,6 +1046,13 @@ def _call_process(self, method: str, *args: None, **kwargs: None ) -> str: ... # if no args given, execute called with all defaults + @overload + def _call_process(self, method: str, + istream: int, + as_process: Literal[True], + *args: Any, **kwargs: Any + ) -> 'Git.AutoInterrupt': ... + @overload def _call_process(self, method: str, *args: Any, **kwargs: Any ) -> Union[str, bytes, Tuple[int, Union[str, bytes], str], 'Git.AutoInterrupt']: @@ -1156,7 +1166,7 @@ def _prepare_ref(self, ref: AnyStr) -> bytes: return refstr.encode(defenc) def _get_persistent_cmd(self, attr_name: str, cmd_name: str, *args: Any, **kwargs: Any - ) -> Union['Git.AutoInterrupt', TBD]: + ) -> 'Git.AutoInterrupt': cur_val = getattr(self, attr_name) if cur_val is not None: return cur_val @@ -1166,12 +1176,16 @@ def _get_persistent_cmd(self, attr_name: str, cmd_name: str, *args: Any, **kwarg cmd = self._call_process(cmd_name, *args, **options) setattr(self, attr_name, cmd) + cmd = cast('Git.AutoInterrupt', cmd) return cmd - def __get_object_header(self, cmd, ref: AnyStr) -> Tuple[str, str, int]: - cmd.stdin.write(self._prepare_ref(ref)) - cmd.stdin.flush() - return self._parse_object_header(cmd.stdout.readline()) + def __get_object_header(self, cmd: 'Git.AutoInterrupt', ref: AnyStr) -> Tuple[str, str, int]: + if cmd.stdin and cmd.stdout: + cmd.stdin.write(self._prepare_ref(ref)) + cmd.stdin.flush() + return self._parse_object_header(cmd.stdout.readline()) + else: + raise ValueError("cmd stdin was empty") def get_object_header(self, ref: str) -> Tuple[str, str, int]: """ Use this method to quickly examine the type and size of the object behind @@ -1200,7 +1214,8 @@ def stream_object_data(self, ref: str) -> Tuple[str, str, int, 'Git.CatFileConte :note: This method is not threadsafe, you need one independent Command instance per thread to be safe !""" cmd = self._get_persistent_cmd("cat_file_all", "cat_file", batch=True) hexsha, typename, size = self.__get_object_header(cmd, ref) - return (hexsha, typename, size, self.CatFileContentStream(size, cmd.stdout)) + cmd_stdout = cmd.stdout if cmd.stdout is not None else io.BytesIO() + return (hexsha, typename, size, self.CatFileContentStream(size, cmd_stdout)) def clear_cache(self) -> 'Git': """Clear all kinds of internal caches to release resources. From 48f64bbdea658fd9e0bd5d3d51c54ee6be8c05bd Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 20:06:59 +0100 Subject: [PATCH 0751/2375] Add final types to index/fun.py --- git/index/fun.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/index/fun.py b/git/index/fun.py index 49e3f2c52..16ec744e2 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -251,7 +251,7 @@ def read_cache(stream: IO[bytes]) -> Tuple[int, Dict[Tuple[PathLike, int], 'Inde return (version, entries, extension_data, content_sha) -def write_tree_from_cache(entries: List[IndexEntry], odb, sl: slice, si: int = 0 +def write_tree_from_cache(entries: List[IndexEntry], odb: 'GitCmdObjectDB', sl: slice, si: int = 0 ) -> Tuple[bytes, List['TreeCacheTup']]: """Create a tree from the given sorted list of entries and put the respective trees into the given object database From 3c2454d20ba60e3350f3da103d5c1570ccc41c6f Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 20:10:29 +0100 Subject: [PATCH 0752/2375] Add final types to symbolic.py --- git/refs/symbolic.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index ae391c1e2..bcd3d261c 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -146,13 +146,13 @@ def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: intermediate references as required :param repo: the repository containing the reference at ref_path""" while True: - hexsha, ref_path = cls._get_ref_info(repo, ref_path) + hexsha, ref_path = cls._get_ref_info(repo, ref_path) # type: ignore if hexsha is not None: return hexsha # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike): + def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, str]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" @@ -191,13 +191,13 @@ def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike): raise ValueError("Failed to parse reference information from %r" % ref_path) @classmethod - def _get_ref_info(cls, repo, ref_path): + def _get_ref_info(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, str]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" return cls._get_ref_info_helper(repo, ref_path) - def _get_object(self): + def _get_object(self) -> Commit_ish: """ :return: The object our ref currently refers to. Refs can be cached, they will @@ -206,7 +206,7 @@ def _get_object(self): # Our path will be resolved to the hexsha which will be used accordingly return Object.new_from_sha(self.repo, hex_to_bin(self.dereference_recursive(self.repo, self.path))) - def _get_commit(self): + def _get_commit(self) -> 'Commit': """ :return: Commit object we point to, works for detached and non-detached From 2a350b57ce79a0e1b71623d1146c52918232e074 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 20:18:20 +0100 Subject: [PATCH 0753/2375] Add final final types to symbolic.py --- git/refs/symbolic.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index bcd3d261c..b4a933aa7 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -40,7 +40,7 @@ __all__ = ["SymbolicReference"] -def _git_dir(repo: 'Repo', path: PathLike) -> PathLike: +def _git_dir(repo: 'Repo', path: Union[PathLike, None]) -> PathLike: """ Find the git dir that's appropriate for the path""" name = f"{path}" if name in ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'index', 'logs']: @@ -140,26 +140,28 @@ def _iter_packed_refs(cls, repo: 'Repo') -> Iterator[Tuple[str, str]]: # alright. @classmethod - def dereference_recursive(cls, repo: 'Repo', ref_path: PathLike) -> str: + def dereference_recursive(cls, repo: 'Repo', ref_path: Union[PathLike, None]) -> str: """ :return: hexsha stored in the reference at the given ref_path, recursively dereferencing all intermediate references as required :param repo: the repository containing the reference at ref_path""" + while True: - hexsha, ref_path = cls._get_ref_info(repo, ref_path) # type: ignore + hexsha, ref_path = cls._get_ref_info(repo, ref_path) if hexsha is not None: return hexsha # END recursive dereferencing @classmethod - def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, str]]: + def _get_ref_info_helper(cls, repo: 'Repo', ref_path: Union[PathLike, None] + ) -> Union[Tuple[str, None], Tuple[None, str]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" tokens: Union[None, List[str], Tuple[str, str]] = None repodir = _git_dir(repo, ref_path) try: - with open(os.path.join(repodir, ref_path), 'rt', encoding='UTF-8') as fp: + with open(os.path.join(repodir, str(ref_path)), 'rt', encoding='UTF-8') as fp: value = fp.read().rstrip() # Don't only split on spaces, but on whitespace, which allows to parse lines like # 60b64ef992065e2600bfef6187a97f92398a9144 branch 'master' of git-server:/path/to/repo @@ -191,7 +193,7 @@ def _get_ref_info_helper(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[s raise ValueError("Failed to parse reference information from %r" % ref_path) @classmethod - def _get_ref_info(cls, repo: 'Repo', ref_path: PathLike) -> Union[Tuple[str, None], Tuple[None, str]]: + def _get_ref_info(cls, repo: 'Repo', ref_path: Union[PathLike, None]) -> Union[Tuple[str, None], Tuple[None, str]]: """Return: (str(sha), str(target_ref_path)) if available, the sha the file at rela_path points to, or None. target_ref_path is the reference we point to, or None""" From 39d37d550963a6a64e66ba3d6b9f4b077270a3ad Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 22:26:20 +0100 Subject: [PATCH 0754/2375] replace some TBDs wiht runtime types --- git/cmd.py | 4 ++-- git/compat.py | 18 ------------------ git/diff.py | 5 +++-- git/index/base.py | 11 ++++++----- git/objects/submodule/base.py | 3 ++- git/refs/reference.py | 2 +- git/refs/symbolic.py | 4 ++-- git/util.py | 5 +++-- 8 files changed, 19 insertions(+), 33 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index f82127453..cbfde74c2 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -68,7 +68,7 @@ # Documentation ## @{ -def handle_process_output(process: subprocess.Popen, +def handle_process_output(process: Union[subprocess.Popen, 'Git.AutoInterrupt'], stdout_handler: Union[None, Callable[[AnyStr], None], Callable[[List[AnyStr]], None], @@ -77,7 +77,7 @@ def handle_process_output(process: subprocess.Popen, Callable[[AnyStr], None], Callable[[List[AnyStr]], None]], finalizer: Union[None, - Callable[[subprocess.Popen], None]] = None, + Callable[[Union[subprocess.Popen, 'Git.AutoInterrupt']], None]] = None, decode_streams: bool = True) -> None: """Registers for notifications to learn that process output is ready to read, and dispatches lines to the respective line handlers. diff --git a/git/compat.py b/git/compat.py index 7a0a15d23..988c04eff 100644 --- a/git/compat.py +++ b/git/compat.py @@ -29,8 +29,6 @@ Union, overload, ) -from git.types import TBD - # --------------------------------------------------------------------------- @@ -97,19 +95,3 @@ def win_encode(s: Optional[AnyStr]) -> Optional[bytes]: elif s is not None: raise TypeError('Expected bytes or text, but got %r' % (s,)) return None - - -# type: ignore ## mypy cannot understand dynamic class creation -def with_metaclass(meta: Type[Any], *bases: Any) -> TBD: - """copied from https://github.com/Byron/bcore/blob/master/src/python/butility/future.py#L15""" - - class metaclass(meta): # type: ignore - __call__ = type.__call__ - __init__ = type.__init__ # type: ignore - - def __new__(cls, name: str, nbases: Optional[Tuple[int, ...]], d: Dict[str, Any]) -> TBD: - if nbases is None: - return type.__new__(cls, name, (), d) - return meta(name, bases, d) - - return metaclass(meta.__name__ + 'Helper', None, {}) # type: ignore diff --git a/git/diff.py b/git/diff.py index 74ca0b64d..fc16b73e2 100644 --- a/git/diff.py +++ b/git/diff.py @@ -16,7 +16,7 @@ # typing ------------------------------------------------------------------ from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING, cast -from git.types import PathLike, TBD, Literal +from git.types import PathLike, Literal if TYPE_CHECKING: from .objects.tree import Tree @@ -24,6 +24,7 @@ from git.repo.base import Repo from git.objects.base import IndexObject from subprocess import Popen + from git import Git Lit_change_type = Literal['A', 'D', 'C', 'M', 'R', 'T', 'U'] @@ -442,7 +443,7 @@ def _pick_best_path(cls, path_match: bytes, rename_match: bytes, path_fallback_m return None @ classmethod - def _index_from_patch_format(cls, repo: 'Repo', proc: TBD) -> DiffIndex: + def _index_from_patch_format(cls, repo: 'Repo', proc: Union['Popen', 'Git.AutoInterrupt']) -> DiffIndex: """Create a new DiffIndex from the given text which must be in patch format :param repo: is the repository we are operating on - it is required :param stream: result of 'git diff' as a stream (supporting file protocol) diff --git a/git/index/base.py b/git/index/base.py index 6452419c5..4c8b923a5 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -70,7 +70,7 @@ from typing import (Any, BinaryIO, Callable, Dict, IO, Iterable, Iterator, List, NoReturn, Sequence, TYPE_CHECKING, Tuple, Type, Union) -from git.types import Commit_ish, PathLike, TBD +from git.types import Commit_ish, PathLike if TYPE_CHECKING: from subprocess import Popen @@ -181,7 +181,7 @@ def _deserialize(self, stream: IO) -> 'IndexFile': self.version, self.entries, self._extension_data, _conten_sha = read_cache(stream) return self - def _entries_sorted(self) -> List[TBD]: + def _entries_sorted(self) -> List[IndexEntry]: """:return: list of entries, in a sorted fashion, first by path, then by stage""" return sorted(self.entries.values(), key=lambda e: (e.path, e.stage)) @@ -427,8 +427,8 @@ def raise_exc(e: Exception) -> NoReturn: # END path exception handling # END for each path - def _write_path_to_stdin(self, proc: 'Popen', filepath: PathLike, item: TBD, fmakeexc: Callable[..., GitError], - fprogress: Callable[[PathLike, bool, TBD], None], + def _write_path_to_stdin(self, proc: 'Popen', filepath: PathLike, item: PathLike, fmakeexc: Callable[..., GitError], + fprogress: Callable[[PathLike, bool, PathLike], None], read_from_stdout: bool = True) -> Union[None, str]: """Write path to proc.stdin and make sure it processes the item, including progress. @@ -492,12 +492,13 @@ def unmerged_blobs(self) -> Dict[PathLike, List[Tuple[StageType, Blob]]]: are at stage 3 will not have a stage 3 entry. """ is_unmerged_blob = lambda t: t[0] != 0 - path_map: Dict[PathLike, List[Tuple[TBD, Blob]]] = {} + path_map: Dict[PathLike, List[Tuple[StageType, Blob]]] = {} for stage, blob in self.iter_blobs(is_unmerged_blob): path_map.setdefault(blob.path, []).append((stage, blob)) # END for each unmerged blob for line in path_map.values(): line.sort() + return path_map @ classmethod diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index 559d2585e..d306c91d4 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -379,6 +379,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No :return: The newly created submodule instance :note: works atomically, such that no change will be done if the repository update fails for instance""" + if repo.bare: raise InvalidGitRepositoryError("Cannot add submodules to bare repositories") # END handle bare repos @@ -434,7 +435,7 @@ def add(cls, repo: 'Repo', name: str, path: PathLike, url: Union[str, None] = No url = urls[0] else: # clone new repo - kwargs: Dict[str, Union[bool, int, Sequence[TBD]]] = {'n': no_checkout} + kwargs: Dict[str, Union[bool, int, str, Sequence[TBD]]] = {'n': no_checkout} if not branch_is_default: kwargs['b'] = br.name # END setup checkout-branch diff --git a/git/refs/reference.py b/git/refs/reference.py index a3647fb3b..2a33fbff0 100644 --- a/git/refs/reference.py +++ b/git/refs/reference.py @@ -8,7 +8,7 @@ # typing ------------------------------------------------------------------ from typing import Any, Callable, Iterator, Type, Union, TYPE_CHECKING # NOQA -from git.types import Commit_ish, PathLike, TBD, Literal, _T # NOQA +from git.types import Commit_ish, PathLike, _T # NOQA if TYPE_CHECKING: from git.repo import Repo diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index b4a933aa7..1c56c043b 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -21,8 +21,8 @@ # typing ------------------------------------------------------------------ -from typing import Any, Iterator, List, Match, Optional, Tuple, Type, TypeVar, Union, TYPE_CHECKING, cast # NOQA -from git.types import Commit_ish, PathLike, TBD, Literal # NOQA +from typing import Any, Iterator, List, Tuple, Type, TypeVar, Union, TYPE_CHECKING, cast # NOQA +from git.types import Commit_ish, PathLike # NOQA if TYPE_CHECKING: from git.repo import Repo diff --git a/git/util.py b/git/util.py index 92d95379e..8056804a8 100644 --- a/git/util.py +++ b/git/util.py @@ -38,6 +38,7 @@ from git.remote import Remote from git.repo.base import Repo from git.config import GitConfigParser, SectionConstraint + from git import Git # from git.objects.base import IndexObject @@ -379,7 +380,7 @@ def get_user_id() -> str: return "%s@%s" % (getpass.getuser(), platform.node()) -def finalize_process(proc: subprocess.Popen, **kwargs: Any) -> None: +def finalize_process(proc: Union[subprocess.Popen, 'Git.AutoInterrupt'], **kwargs: Any) -> None: """Wait for the process (clone, fetch, pull or push) and handle its errors accordingly""" # TODO: No close proc-streams?? proc.wait(**kwargs) @@ -1033,7 +1034,7 @@ def __delitem__(self, index: Union[SupportsIndex, int, slice, str]) -> None: class IterableClassWatcher(type): """ Metaclass that watches """ - def __init__(cls, name: str, bases: List, clsdict: Dict) -> None: + def __init__(cls, name: str, bases: Tuple, clsdict: Dict) -> None: for base in bases: if type(base) == IterableClassWatcher: warnings.warn(f"GitPython Iterable subclassed by {name}. " From c878771e3a31c983a0c3468396ed33a532f87e98 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 22:59:11 +0100 Subject: [PATCH 0755/2375] replace more TBDs wiht runtime types --- git/cmd.py | 12 ++++++------ git/config.py | 11 ++++++----- git/remote.py | 10 +++++----- git/repo/base.py | 9 +++++---- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index cbfde74c2..85a5fbe95 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -421,15 +421,15 @@ def __getattr__(self, attr: str) -> Any: return getattr(self.proc, attr) # TODO: Bad choice to mimic `proc.wait()` but with different args. - def wait(self, stderr: Union[None, bytes] = b'') -> int: + def wait(self, stderr: Union[None, str, bytes] = b'') -> int: """Wait for the process and return its status code. :param stderr: Previously read value of stderr, in case stderr is already closed. :warn: may deadlock if output or error pipes are used and not handled separately. :raise GitCommandError: if the return status is not 0""" if stderr is None: - stderr = b'' - stderr = force_bytes(data=stderr, encoding='utf-8') + stderr_b = b'' + stderr_b = force_bytes(data=stderr, encoding='utf-8') if self.proc is not None: status = self.proc.wait() @@ -437,11 +437,11 @@ def wait(self, stderr: Union[None, bytes] = b'') -> int: def read_all_from_possibly_closed_stream(stream: Union[IO[bytes], None]) -> bytes: if stream: try: - return stderr + force_bytes(stream.read()) + return stderr_b + force_bytes(stream.read()) except ValueError: - return stderr or b'' + return stderr_b or b'' else: - return stderr or b'' + return stderr_b or b'' if status != 0: errstr = read_all_from_possibly_closed_stream(self.proc.stderr) diff --git a/git/config.py b/git/config.py index 011d0e0b1..3565eeced 100644 --- a/git/config.py +++ b/git/config.py @@ -33,7 +33,7 @@ from typing import (Any, Callable, Generic, IO, List, Dict, Sequence, TYPE_CHECKING, Tuple, TypeVar, Union, cast, overload) -from git.types import Lit_config_levels, ConfigLevels_Tup, PathLike, TBD, assert_never, _T +from git.types import Lit_config_levels, ConfigLevels_Tup, PathLike, assert_never, _T if TYPE_CHECKING: from git.repo.base import Repo @@ -72,7 +72,7 @@ class MetaParserBuilder(abc.ABCMeta): """Utlity class wrapping base-class methods into decorators that assure read-only properties""" - def __new__(cls, name: str, bases: TBD, clsdict: Dict[str, Any]) -> TBD: + def __new__(cls, name: str, bases: Tuple, clsdict: Dict[str, Any]) -> 'MetaParserBuilder': """ Equip all base-class methods with a needs_values decorator, and all non-const methods with a set_dirty_and_flush_changes decorator in addition to that.""" @@ -617,12 +617,12 @@ def _write(self, fp: IO) -> None: def write_section(name: str, section_dict: _OMD) -> None: fp.write(("[%s]\n" % name).encode(defenc)) - values: Sequence[Union[str, bytes, int, float, bool]] + values: Sequence[str] # runtime only gets str in tests, but should be whatever _OMD stores + v: str for (key, values) in section_dict.items_all(): if key == "__name__": continue - v: Union[str, bytes, int, float, bool] for v in values: fp.write(("\t%s = %s\n" % (key, self._value_to_string(v).replace('\n', '\n\t'))).encode(defenc)) # END if key is not __name__ @@ -630,7 +630,8 @@ def write_section(name: str, section_dict: _OMD) -> None: if self._defaults: write_section(cp.DEFAULTSECT, self._defaults) - value: TBD + value: _OMD + for name, value in self._sections.items(): write_section(name, value) diff --git a/git/remote.py b/git/remote.py index 11007cb68..c141519a0 100644 --- a/git/remote.py +++ b/git/remote.py @@ -37,10 +37,10 @@ # typing------------------------------------------------------- -from typing import (Any, Callable, Dict, Iterator, List, NoReturn, Optional, Sequence, # NOQA[TC002] +from typing import (Any, Callable, Dict, Iterator, List, NoReturn, Optional, Sequence, TYPE_CHECKING, Type, Union, cast, overload) -from git.types import PathLike, Literal, TBD, Commit_ish # NOQA[TC002] +from git.types import PathLike, Literal, Commit_ish if TYPE_CHECKING: from git.repo.base import Repo @@ -50,7 +50,6 @@ flagKeyLiteral = Literal[' ', '!', '+', '-', '*', '=', 't', '?'] - # def is_flagKeyLiteral(inp: str) -> TypeGuard[flagKeyLiteral]: # return inp in [' ', '!', '+', '-', '=', '*', 't', '?'] @@ -707,9 +706,10 @@ def update(self, **kwargs: Any) -> 'Remote': self.repo.git.remote(scmd, self.name, **kwargs) return self - def _get_fetch_info_from_stderr(self, proc: TBD, + def _get_fetch_info_from_stderr(self, proc: 'Git.AutoInterrupt', progress: Union[Callable[..., Any], RemoteProgress, None] ) -> IterableList['FetchInfo']: + progress = to_progress_instance(progress) # skip first line as it is some remote info we are not interested in @@ -768,7 +768,7 @@ def _get_fetch_info_from_stderr(self, proc: TBD, log.warning("Git informed while fetching: %s", err_line.strip()) return output - def _get_push_info(self, proc: TBD, + def _get_push_info(self, proc: 'Git.AutoInterrupt', progress: Union[Callable[..., Any], RemoteProgress, None]) -> IterableList[PushInfo]: progress = to_progress_instance(progress) diff --git a/git/repo/base.py b/git/repo/base.py index 5581233ba..07cf7adf2 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -235,7 +235,7 @@ def __init__(self, path: Optional[PathLike] = None, odbt: Type[LooseObjectDB] = def __enter__(self) -> 'Repo': return self - def __exit__(self, exc_type: TBD, exc_value: TBD, traceback: TBD) -> None: + def __exit__(self, *args: Any) -> None: self.close() def __del__(self) -> None: @@ -445,7 +445,7 @@ def create_tag(self, path: PathLike, ref: str = 'HEAD', :return: TagReference object """ return TagReference.create(self, path, ref, message, force, **kwargs) - def delete_tag(self, *tags: TBD) -> None: + def delete_tag(self, *tags: TagReference) -> None: """Delete the given tag references""" return TagReference.delete(self, *tags) @@ -795,7 +795,7 @@ def active_branch(self) -> Head: # reveal_type(self.head.reference) # => Reference return self.head.reference - def blame_incremental(self, rev: TBD, file: TBD, **kwargs: Any) -> Optional[Iterator['BlameEntry']]: + def blame_incremental(self, rev: Union[str, HEAD], file: str, **kwargs: Any) -> Iterator['BlameEntry']: """Iterator for blame information for the given file at the given revision. Unlike .blame(), this does not return the actual file's contents, only @@ -809,6 +809,7 @@ def blame_incremental(self, rev: TBD, file: TBD, **kwargs: Any) -> Optional[Iter If you combine all line number ranges outputted by this command, you should get a continuous range spanning all line numbers in the file. """ + data = self.git.blame(rev, '--', file, p=True, incremental=True, stdout_as_string=False, **kwargs) commits: Dict[str, Commit] = {} @@ -870,7 +871,7 @@ def blame_incremental(self, rev: TBD, file: TBD, **kwargs: Any) -> Optional[Iter safe_decode(orig_filename), range(orig_lineno, orig_lineno + num_lines)) - def blame(self, rev: TBD, file: TBD, incremental: bool = False, **kwargs: Any + def blame(self, rev: Union[str, HEAD], file: str, incremental: bool = False, **kwargs: Any ) -> Union[List[List[Union[Optional['Commit'], List[str]]]], Optional[Iterator[BlameEntry]]]: """The blame information for the given file at the given revision. From 2163322ef62fa97573ac94298261161fd9721993 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 14:00:33 +0100 Subject: [PATCH 0756/2375] increase mypy strictness (warn unused ignored) --- git/cmd.py | 2 +- git/config.py | 16 ++++++++-------- git/objects/util.py | 2 +- git/util.py | 4 ++-- pyproject.toml | 3 ++- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index 85a5fbe95..9d0703678 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -164,7 +164,7 @@ def dict_to_slots_and__excluded_are_none(self: object, d: Mapping[str, Any], exc ## CREATE_NEW_PROCESS_GROUP is needed to allow killing it afterwards, # see https://docs.python.org/3/library/subprocess.html#subprocess.Popen.send_signal -PROC_CREATIONFLAGS = (CREATE_NO_WINDOW | subprocess.CREATE_NEW_PROCESS_GROUP # type: ignore[attr-defined] +PROC_CREATIONFLAGS = (CREATE_NO_WINDOW | subprocess.CREATE_NEW_PROCESS_GROUP if is_win else 0) diff --git a/git/config.py b/git/config.py index 3565eeced..91bf65d39 100644 --- a/git/config.py +++ b/git/config.py @@ -44,10 +44,10 @@ if sys.version_info[:3] < (3, 7, 2): # typing.Ordereddict not added until py 3.7.2 - from collections import OrderedDict # type: ignore # until 3.6 dropped - OrderedDict_OMD = OrderedDict # type: ignore # until 3.6 dropped + from collections import OrderedDict + OrderedDict_OMD = OrderedDict else: - from typing import OrderedDict # type: ignore # until 3.6 dropped + from typing import OrderedDict OrderedDict_OMD = OrderedDict[str, List[T_OMD_value]] # type: ignore[assignment, misc] # ------------------------------------------------------------- @@ -177,7 +177,7 @@ def __exit__(self, exception_type: str, exception_value: str, traceback: str) -> class _OMD(OrderedDict_OMD): """Ordered multi-dict.""" - def __setitem__(self, key: str, value: _T) -> None: # type: ignore[override] + def __setitem__(self, key: str, value: _T) -> None: super(_OMD, self).__setitem__(key, [value]) def add(self, key: str, value: Any) -> None: @@ -203,8 +203,8 @@ def setlast(self, key: str, value: Any) -> None: prior = super(_OMD, self).__getitem__(key) prior[-1] = value - def get(self, key: str, default: Union[_T, None] = None) -> Union[_T, None]: # type: ignore - return super(_OMD, self).get(key, [default])[-1] # type: ignore + def get(self, key: str, default: Union[_T, None] = None) -> Union[_T, None]: + return super(_OMD, self).get(key, [default])[-1] def getall(self, key: str) -> List[_T]: return super(_OMD, self).__getitem__(key) @@ -299,9 +299,9 @@ def __init__(self, file_or_files: Union[None, PathLike, 'BytesIO', Sequence[Unio :param repo: Reference to repository to use if [includeIf] sections are found in configuration files. """ - cp.RawConfigParser.__init__(self, dict_type=_OMD) # type: ignore[arg-type] + cp.RawConfigParser.__init__(self, dict_type=_OMD) self._dict: Callable[..., _OMD] # type: ignore[assignment] # mypy/typeshed bug - self._defaults: _OMD # type: ignore[assignment] # mypy/typeshed bug + self._defaults: _OMD self._sections: _OMD # type: ignore[assignment] # mypy/typeshed bug # Used in python 3, needs to stay in sync with sections for underlying implementation to work diff --git a/git/objects/util.py b/git/objects/util.py index f627211ec..d3842cfb8 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -346,7 +346,7 @@ def _list_traverse(self, as_edge: bool = False, *args: Any, **kwargs: Any if not as_edge: out: IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']] = IterableList(id) - out.extend(self.traverse(as_edge=as_edge, *args, **kwargs)) # type: ignore + out.extend(self.traverse(as_edge=as_edge, *args, **kwargs)) return out # overloads in subclasses (mypy does't allow typing self: subclass) # Union[IterableList['Commit'], IterableList['Submodule'], IterableList[Union['Submodule', 'Tree', 'Blob']]] diff --git a/git/util.py b/git/util.py index 8056804a8..630605301 100644 --- a/git/util.py +++ b/git/util.py @@ -403,8 +403,8 @@ def expand_path(p: Union[None, PathLike], expand_vars: bool = True) -> Optional[ try: p = osp.expanduser(p) # type: ignore if expand_vars: - p = osp.expandvars(p) # type: ignore - return osp.normpath(osp.abspath(p)) # type: ignore + p = osp.expandvars(p) + return osp.normpath(osp.abspath(p)) except Exception: return None diff --git a/pyproject.toml b/pyproject.toml index 4751ffcb9..12c5d9615 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,8 @@ filterwarnings = 'ignore::DeprecationWarning' disallow_untyped_defs = true no_implicit_optional = true warn_redundant_casts = true -# warn_unused_ignores = True +implicit_reexport = true +warn_unused_ignores = true # warn_unreachable = True show_error_codes = true From 36dedddd5efdd162fbbd036a7ac5cbe6541322a1 Mon Sep 17 00:00:00 2001 From: Kai Mueller <15907922+kasium@users.noreply.github.com> Date: Mon, 2 Aug 2021 13:43:46 +0000 Subject: [PATCH 0757/2375] Add flake8-typing-imports --- .flake8 | 2 ++ test-requirements.txt | 1 + 2 files changed, 3 insertions(+) diff --git a/.flake8 b/.flake8 index 2f9e6ed27..c55fe35d4 100644 --- a/.flake8 +++ b/.flake8 @@ -31,3 +31,5 @@ exclude = .tox,.venv,build,dist,doc,git/ext/,test rst-roles = # for flake8-RST-docstrings attr,class,func,meth,mod,obj,ref,term,var # used by sphinx + +min-python-version = 3.7.0 diff --git a/test-requirements.txt b/test-requirements.txt index eeee18110..deaafe214 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -4,6 +4,7 @@ mypy flake8 flake8-bugbear flake8-comprehensions +flake8-typing-imports virtualenv From 91fce331de16de6039c94cd4d7314184a5763e61 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 14:56:03 +0100 Subject: [PATCH 0758/2375] increase mypy strictness (warn unused ignored and warn unreachable) --- git/cmd.py | 8 +++----- git/config.py | 3 ++- git/diff.py | 4 ++-- git/index/base.py | 1 - git/objects/fun.py | 2 +- git/objects/tree.py | 2 +- git/objects/util.py | 8 +++++--- git/repo/base.py | 1 - git/repo/fun.py | 21 ++++++++++++++------- pyproject.toml | 2 +- 10 files changed, 29 insertions(+), 23 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index 9d0703678..e690dc125 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -42,7 +42,7 @@ from typing import (Any, AnyStr, BinaryIO, Callable, Dict, IO, Iterator, List, Mapping, Sequence, TYPE_CHECKING, TextIO, Tuple, Union, cast, overload) -from git.types import PathLike, Literal +from git.types import PathLike, Literal, TBD if TYPE_CHECKING: from git.repo.base import Repo @@ -575,8 +575,8 @@ def __init__(self, working_dir: Union[None, PathLike] = None): self._environment: Dict[str, str] = {} # cached command slots - self.cat_file_header = None - self.cat_file_all = None + self.cat_file_header: Union[None, TBD] = None + self.cat_file_all: Union[None, TBD] = None def __getattr__(self, name: str) -> Any: """A convenience method as it allows to call the command as if it was @@ -1012,8 +1012,6 @@ def transform_kwargs(self, split_single_char_options: bool = True, **kwargs: Any @classmethod def __unpack_args(cls, arg_list: Sequence[str]) -> List[str]: - if not isinstance(arg_list, (list, tuple)): - return [str(arg_list)] outlist = [] for arg in arg_list: diff --git a/git/config.py b/git/config.py index 91bf65d39..2a5aa1422 100644 --- a/git/config.py +++ b/git/config.py @@ -236,7 +236,8 @@ def get_config_path(config_level: Lit_config_levels) -> str: raise ValueError("No repo to get repository configuration from. Use Repo._get_config_path") else: # Should not reach here. Will raise ValueError if does. Static typing will warn missing elifs - assert_never(config_level, ValueError(f"Invalid configuration level: {config_level!r}")) + assert_never(config_level, # type: ignore[unreachable] + ValueError(f"Invalid configuration level: {config_level!r}")) class GitConfigParser(cp.RawConfigParser, metaclass=MetaParserBuilder): diff --git a/git/diff.py b/git/diff.py index fc16b73e2..cea66d7ee 100644 --- a/git/diff.py +++ b/git/diff.py @@ -456,8 +456,8 @@ def _index_from_patch_format(cls, repo: 'Repo', proc: Union['Popen', 'Git.AutoIn # for now, we have to bake the stream text = b''.join(text_list) index: 'DiffIndex' = DiffIndex() - previous_header = None - header = None + previous_header: Union[Match[bytes], None] = None + header: Union[Match[bytes], None] = None a_path, b_path = None, None # for mypy a_mode, b_mode = None, None # for mypy for _header in cls.re_header.finditer(text): diff --git a/git/index/base.py b/git/index/base.py index 4c8b923a5..102703e6d 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -1202,7 +1202,6 @@ def handle_stderr(proc: 'Popen[bytes]', iter_checked_out_files: Iterable[PathLik handle_stderr(proc, checked_out_files) return checked_out_files # END paths handling - assert "Should not reach this point" @ default_index def reset(self, commit: Union[Commit, 'Reference', str] = 'HEAD', working_tree: bool = False, diff --git a/git/objects/fun.py b/git/objects/fun.py index d6cdafe1e..19b4e525a 100644 --- a/git/objects/fun.py +++ b/git/objects/fun.py @@ -51,7 +51,7 @@ def tree_to_stream(entries: Sequence[EntryTup], write: Callable[['ReadableBuffer if isinstance(name, str): name_bytes = name.encode(defenc) else: - name_bytes = name + name_bytes = name # type: ignore[unreachable] # check runtime types - is always str? write(b''.join((mode_str, b' ', name_bytes, b'\0', binsha))) # END for each item diff --git a/git/objects/tree.py b/git/objects/tree.py index 0cceb59ac..22531895e 100644 --- a/git/objects/tree.py +++ b/git/objects/tree.py @@ -215,7 +215,7 @@ def __init__(self, repo: 'Repo', binsha: bytes, mode: int = tree_id << 12, path: super(Tree, self).__init__(repo, binsha, mode, path) @ classmethod - def _get_intermediate_items(cls, index_object: 'Tree', + def _get_intermediate_items(cls, index_object: IndexObjUnion, ) -> Union[Tuple['Tree', ...], Tuple[()]]: if index_object.type == "tree": return tuple(index_object._iter_convert_to_object(index_object._cache)) diff --git a/git/objects/util.py b/git/objects/util.py index d3842cfb8..9c9ce7732 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -167,7 +167,7 @@ def from_timestamp(timestamp: float, tz_offset: float) -> datetime: return utc_dt -def parse_date(string_date: str) -> Tuple[int, int]: +def parse_date(string_date: Union[str, datetime]) -> Tuple[int, int]: """ Parse the given date as one of the following @@ -182,8 +182,10 @@ def parse_date(string_date: str) -> Tuple[int, int]: :note: Date can also be YYYY.MM.DD, MM/DD/YYYY and DD.MM.YYYY. """ if isinstance(string_date, datetime) and string_date.tzinfo: - offset = -int(string_date.utcoffset().total_seconds()) + offset = -int(string_date.utcoffset().total_seconds()) # type: ignore[union-attr] return int(string_date.astimezone(utc).timestamp()), offset + else: + assert isinstance(string_date, str) # for mypy # git time try: @@ -338,7 +340,7 @@ def _list_traverse(self, as_edge: bool = False, *args: Any, **kwargs: Any """ # Commit and Submodule have id.__attribute__ as IterableObj # Tree has id.__attribute__ inherited from IndexObject - if isinstance(self, (TraversableIterableObj, Has_id_attribute)): + if isinstance(self, Has_id_attribute): id = self._id_attribute_ else: id = "" # shouldn't reach here, unless Traversable subclass created with no _id_attribute_ diff --git a/git/repo/base.py b/git/repo/base.py index 07cf7adf2..2609bf557 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -200,7 +200,6 @@ def __init__(self, path: Optional[PathLike] = None, odbt: Type[LooseObjectDB] = # END while curpath if self.git_dir is None: - self.git_dir = cast(PathLike, self.git_dir) raise InvalidGitRepositoryError(epath) self._bare = False diff --git a/git/repo/fun.py b/git/repo/fun.py index 7d5c78237..b1b330c45 100644 --- a/git/repo/fun.py +++ b/git/repo/fun.py @@ -1,4 +1,6 @@ """Package with general repository related functions""" +from git.refs.reference import Reference +from git.types import Commit_ish import os import stat from string import digits @@ -202,7 +204,7 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: raise NotImplementedError("commit by message search ( regex )") # END handle search - obj = cast(Object, None) # not ideal. Should use guards + obj: Union[Commit_ish, Reference, None] = None ref = None output_type = "commit" start = 0 @@ -222,14 +224,16 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: ref = repo.head.ref else: if token == '@': - ref = name_to_object(repo, rev[:start], return_ref=True) + ref = cast(Reference, name_to_object(repo, rev[:start], return_ref=True)) else: - obj = name_to_object(repo, rev[:start]) + obj = cast(Commit_ish, name_to_object(repo, rev[:start])) # END handle token # END handle refname + else: + assert obj is not None if ref is not None: - obj = ref.commit + obj = cast(Commit, ref.commit) # END handle ref # END initialize obj on first token @@ -247,11 +251,13 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: pass # default elif output_type == 'tree': try: + obj = cast(Object, obj) obj = to_commit(obj).tree except (AttributeError, ValueError): pass # error raised later # END exception handling elif output_type in ('', 'blob'): + obj = cast(TagObject, obj) if obj and obj.type == 'tag': obj = deref_tag(obj) else: @@ -280,13 +286,13 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: obj = Object.new_from_sha(repo, hex_to_bin(entry.newhexsha)) # make it pass the following checks - output_type = None + output_type = '' else: raise ValueError("Invalid output type: %s ( in %s )" % (output_type, rev)) # END handle output type # empty output types don't require any specific type, its just about dereferencing tags - if output_type and obj.type != output_type: + if output_type and obj and obj.type != output_type: raise ValueError("Could not accommodate requested object type %r, got %s" % (output_type, obj.type)) # END verify output type @@ -319,6 +325,7 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: parsed_to = start # handle hierarchy walk try: + obj = cast(Commit_ish, obj) if token == "~": obj = to_commit(obj) for _ in range(num): @@ -347,7 +354,7 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: # still no obj ? Its probably a simple name if obj is None: - obj = name_to_object(repo, rev) + obj = cast(Commit_ish, name_to_object(repo, rev)) parsed_to = lr # END handle simple name diff --git a/pyproject.toml b/pyproject.toml index 12c5d9615..daf45f160 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ no_implicit_optional = true warn_redundant_casts = true implicit_reexport = true warn_unused_ignores = true -# warn_unreachable = True +warn_unreachable = true show_error_codes = true # TODO: remove when 'gitdb' is fully annotated From 15ace876d98d70c48a354ec8f526d6c8ad6b8d97 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 15:30:15 +0100 Subject: [PATCH 0759/2375] rmv 3.6 from CI matrix --- .github/workflows/pythonpackage.yml | 2 +- git/cmd.py | 3 +-- git/config.py | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 8581c0bfc..dd94ab9d5 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.6, 3.7, 3.8, 3.9, "3.10.0-beta.4"] + python-version: [3.7, 3.8, 3.9, "3.10.0-beta.4"] steps: - uses: actions/checkout@v2 diff --git a/git/cmd.py b/git/cmd.py index e690dc125..78fa3c9d4 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -164,8 +164,7 @@ def dict_to_slots_and__excluded_are_none(self: object, d: Mapping[str, Any], exc ## CREATE_NEW_PROCESS_GROUP is needed to allow killing it afterwards, # see https://docs.python.org/3/library/subprocess.html#subprocess.Popen.send_signal -PROC_CREATIONFLAGS = (CREATE_NO_WINDOW | subprocess.CREATE_NEW_PROCESS_GROUP - if is_win else 0) +PROC_CREATIONFLAGS = (CREATE_NO_WINDOW | subprocess.CREATE_NEW_PROCESS_GROUP if is_win else 0) class Git(LazyMixin): diff --git a/git/config.py b/git/config.py index 2a5aa1422..293281d21 100644 --- a/git/config.py +++ b/git/config.py @@ -301,9 +301,9 @@ def __init__(self, file_or_files: Union[None, PathLike, 'BytesIO', Sequence[Unio """ cp.RawConfigParser.__init__(self, dict_type=_OMD) - self._dict: Callable[..., _OMD] # type: ignore[assignment] # mypy/typeshed bug + self._dict: Callable[..., _OMD] # type: ignore # mypy/typeshed bug? self._defaults: _OMD - self._sections: _OMD # type: ignore[assignment] # mypy/typeshed bug + self._sections: _OMD # type: ignore # mypy/typeshed bug? # Used in python 3, needs to stay in sync with sections for underlying implementation to work if not hasattr(self, '_proxies'): From bef218246c9935f0c31b23a17d1a02ac3810301d Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 15:41:17 +0100 Subject: [PATCH 0760/2375] rmv 3.6 from setup.py --- git/cmd.py | 3 ++- git/util.py | 4 ++-- pyproject.toml | 2 +- setup.py | 13 +++++++------ 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index 78fa3c9d4..18a2bec1c 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -164,7 +164,8 @@ def dict_to_slots_and__excluded_are_none(self: object, d: Mapping[str, Any], exc ## CREATE_NEW_PROCESS_GROUP is needed to allow killing it afterwards, # see https://docs.python.org/3/library/subprocess.html#subprocess.Popen.send_signal -PROC_CREATIONFLAGS = (CREATE_NO_WINDOW | subprocess.CREATE_NEW_PROCESS_GROUP if is_win else 0) +PROC_CREATIONFLAGS = (CREATE_NO_WINDOW | subprocess.CREATE_NEW_PROCESS_GROUP # type: ignore[attr-defined] + if is_win else 0) # mypy error if not windows class Git(LazyMixin): diff --git a/git/util.py b/git/util.py index 630605301..c20be6eb6 100644 --- a/git/util.py +++ b/git/util.py @@ -403,8 +403,8 @@ def expand_path(p: Union[None, PathLike], expand_vars: bool = True) -> Optional[ try: p = osp.expanduser(p) # type: ignore if expand_vars: - p = osp.expandvars(p) - return osp.normpath(osp.abspath(p)) + p = osp.expandvars(p) # type: ignore + return osp.normpath(osp.abspath(p)) # type: ignore except Exception: return None diff --git a/pyproject.toml b/pyproject.toml index daf45f160..434880c79 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ disallow_untyped_defs = true no_implicit_optional = true warn_redundant_casts = true implicit_reexport = true -warn_unused_ignores = true +# warn_unused_ignores = true warn_unreachable = true show_error_codes = true diff --git a/setup.py b/setup.py index 215590710..f11132068 100755 --- a/setup.py +++ b/setup.py @@ -1,3 +1,4 @@ +from typing import Sequence from setuptools import setup, find_packages from setuptools.command.build_py import build_py as _build_py from setuptools.command.sdist import sdist as _sdist @@ -18,7 +19,7 @@ class build_py(_build_py): - def run(self): + def run(self) -> None: init = path.join(self.build_lib, 'git', '__init__.py') if path.exists(init): os.unlink(init) @@ -29,7 +30,7 @@ def run(self): class sdist(_sdist): - def make_release_tree(self, base_dir, files): + def make_release_tree(self, base_dir: str, files: Sequence) -> None: _sdist.make_release_tree(self, base_dir, files) orig = path.join('git', '__init__.py') assert path.exists(orig), orig @@ -40,7 +41,7 @@ def make_release_tree(self, base_dir, files): _stamp_version(dest) -def _stamp_version(filename): +def _stamp_version(filename: str) -> None: found, out = False, [] try: with open(filename, 'r') as f: @@ -59,7 +60,7 @@ def _stamp_version(filename): print("WARNING: Couldn't find version line in file %s" % filename, file=sys.stderr) -def build_py_modules(basedir, excludes=()): +def build_py_modules(basedir: str, excludes: Sequence = ()) -> Sequence: # create list of py_modules from tree res = set() _prefix = os.path.basename(basedir) @@ -90,7 +91,7 @@ def build_py_modules(basedir, excludes=()): include_package_data=True, py_modules=build_py_modules("./git", excludes=["git.ext.*"]), package_dir={'git': 'git'}, - python_requires='>=3.6', + python_requires='>=3.7', install_requires=requirements, tests_require=requirements + test_requirements, zip_safe=False, @@ -114,9 +115,9 @@ def build_py_modules(basedir, excludes=()): "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9" + "Programming Language :: Python :: 3.10" ] ) From 270c3d7d4bbe4c606049bfd8af53da1bc3df4ad4 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 15:48:17 +0100 Subject: [PATCH 0761/2375] rmv 3.6 README --- README.md | 87 +++++++++++++++++++++----------------------- doc/source/intro.rst | 6 ++- git/cmd.py | 11 +++--- 3 files changed, 51 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index 5087dbccb..dd449d32f 100644 --- a/README.md +++ b/README.md @@ -24,23 +24,21 @@ or low-level like git-plumbing. It provides abstractions of git objects for easy access of repository data, and additionally allows you to access the git repository more directly using either a pure python implementation, -or the faster, but more resource intensive *git command* implementation. +or the faster, but more resource intensive _git command_ implementation. The object database implementation is optimized for handling large quantities of objects and large datasets, which is achieved by using low-level structures and data streaming. - ### DEVELOPMENT STATUS This project is in **maintenance mode**, which means that -* …there will be no feature development, unless these are contributed -* …there will be no bug fixes, unless they are relevant to the safety of users, or contributed -* …issues will be responded to with waiting times of up to a month +- …there will be no feature development, unless these are contributed +- …there will be no bug fixes, unless they are relevant to the safety of users, or contributed +- …issues will be responded to with waiting times of up to a month The project is open to contributions of all kinds, as well as new maintainers. - ### REQUIREMENTS GitPython needs the `git` executable to be installed on the system and available @@ -48,8 +46,8 @@ in your `PATH` for most operations. If it is not in your `PATH`, you can help GitPython find it by setting the `GIT_PYTHON_GIT_EXECUTABLE=` environment variable. -* Git (1.7.x or newer) -* Python >= 3.6 +- Git (1.7.x or newer) +- Python >= 3.7 The list of dependencies are listed in `./requirements.txt` and `./test-requirements.txt`. The installer takes care of installing them for you. @@ -98,20 +96,20 @@ See [Issue #525](https://github.com/gitpython-developers/GitPython/issues/525). ### RUNNING TESTS -*Important*: Right after cloning this repository, please be sure to have executed +_Important_: Right after cloning this repository, please be sure to have executed the `./init-tests-after-clone.sh` script in the repository root. Otherwise you will encounter test failures. -On *Windows*, make sure you have `git-daemon` in your PATH. For MINGW-git, the `git-daemon.exe` +On _Windows_, make sure you have `git-daemon` in your PATH. For MINGW-git, the `git-daemon.exe` exists in `Git\mingw64\libexec\git-core\`; CYGWIN has no daemon, but should get along fine with MINGW's. -Ensure testing libraries are installed. -In the root directory, run: `pip install -r test-requirements.txt` +Ensure testing libraries are installed. +In the root directory, run: `pip install -r test-requirements.txt` To lint, run: `flake8` -To typecheck, run: `mypy -p git` +To typecheck, run: `mypy -p git` To test, run: `pytest` @@ -119,36 +117,35 @@ Configuration for flake8 is in the ./.flake8 file. Configurations for mypy, pytest and coverage.py are in ./pyproject.toml. -The same linting and testing will also be performed against different supported python versions +The same linting and testing will also be performed against different supported python versions upon submitting a pull request (or on each push if you have a fork with a "main" branch and actions enabled). - ### Contributions Please have a look at the [contributions file][contributing]. ### INFRASTRUCTURE -* [User Documentation](http://gitpython.readthedocs.org) -* [Questions and Answers](http://stackexchange.com/filters/167317/gitpython) - * Please post on stackoverflow and use the `gitpython` tag -* [Issue Tracker](https://github.com/gitpython-developers/GitPython/issues) - * Post reproducible bugs and feature requests as a new issue. +- [User Documentation](http://gitpython.readthedocs.org) +- [Questions and Answers](http://stackexchange.com/filters/167317/gitpython) +- Please post on stackoverflow and use the `gitpython` tag +- [Issue Tracker](https://github.com/gitpython-developers/GitPython/issues) + - Post reproducible bugs and feature requests as a new issue. Please be sure to provide the following information if posting bugs: - * GitPython version (e.g. `import git; git.__version__`) - * Python version (e.g. `python --version`) - * The encountered stack-trace, if applicable - * Enough information to allow reproducing the issue + - GitPython version (e.g. `import git; git.__version__`) + - Python version (e.g. `python --version`) + - The encountered stack-trace, if applicable + - Enough information to allow reproducing the issue ### How to make a new release -* Update/verify the **version** in the `VERSION` file -* Update/verify that the `doc/source/changes.rst` changelog file was updated -* Commit everything -* Run `git tag -s ` to tag the version in Git -* Run `make release` -* Close the milestone mentioned in the _changelog_ and create a new one. _Do not reuse milestones by renaming them_. -* set the upcoming version in the `VERSION` file, usually be +- Update/verify the **version** in the `VERSION` file +- Update/verify that the `doc/source/changes.rst` changelog file was updated +- Commit everything +- Run `git tag -s ` to tag the version in Git +- Run `make release` +- Close the milestone mentioned in the _changelog_ and create a new one. _Do not reuse milestones by renaming them_. +- set the upcoming version in the `VERSION` file, usually be incrementing the patch level, and possibly by appending `-dev`. Probably you want to `git push` once more. @@ -200,22 +197,22 @@ gpg --edit-key 4C08421980C9 ### Projects using GitPython -* [PyDriller](https://github.com/ishepard/pydriller) -* [Kivy Designer](https://github.com/kivy/kivy-designer) -* [Prowl](https://github.com/nettitude/Prowl) -* [Python Taint](https://github.com/python-security/pyt) -* [Buster](https://github.com/axitkhurana/buster) -* [git-ftp](https://github.com/ezyang/git-ftp) -* [Git-Pandas](https://github.com/wdm0006/git-pandas) -* [PyGitUp](https://github.com/msiemens/PyGitUp) -* [PyJFuzz](https://github.com/mseclab/PyJFuzz) -* [Loki](https://github.com/Neo23x0/Loki) -* [Omniwallet](https://github.com/OmniLayer/omniwallet) -* [GitViper](https://github.com/BeayemX/GitViper) -* [Git Gud](https://github.com/bthayer2365/git-gud) +- [PyDriller](https://github.com/ishepard/pydriller) +- [Kivy Designer](https://github.com/kivy/kivy-designer) +- [Prowl](https://github.com/nettitude/Prowl) +- [Python Taint](https://github.com/python-security/pyt) +- [Buster](https://github.com/axitkhurana/buster) +- [git-ftp](https://github.com/ezyang/git-ftp) +- [Git-Pandas](https://github.com/wdm0006/git-pandas) +- [PyGitUp](https://github.com/msiemens/PyGitUp) +- [PyJFuzz](https://github.com/mseclab/PyJFuzz) +- [Loki](https://github.com/Neo23x0/Loki) +- [Omniwallet](https://github.com/OmniLayer/omniwallet) +- [GitViper](https://github.com/BeayemX/GitViper) +- [Git Gud](https://github.com/bthayer2365/git-gud) ### LICENSE -New BSD License. See the LICENSE file. +New BSD License. See the LICENSE file. [contributing]: https://github.com/gitpython-developers/GitPython/blob/master/CONTRIBUTING.md diff --git a/doc/source/intro.rst b/doc/source/intro.rst index 956a36073..d7a18412c 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -13,15 +13,17 @@ The object database implementation is optimized for handling large quantities of Requirements ============ -* `Python`_ >= 3.6 +* `Python`_ >= 3.7 * `Git`_ 1.7.0 or newer It should also work with older versions, but it may be that some operations involving remotes will not work as expected. * `GitDB`_ - a pure python git database implementation +* `typing_extensions`_ >= 3.10.0 .. _Python: https://www.python.org .. _Git: https://git-scm.com/ .. _GitDB: https://pypi.python.org/pypi/gitdb +.. _typing_extensions: https://pypi.org/project/typing-extensions/ Installing GitPython ==================== @@ -60,7 +62,7 @@ Leakage of System Resources --------------------------- GitPython is not suited for long-running processes (like daemons) as it tends to -leak system resources. It was written in a time where destructors (as implemented +leak system resources. It was written in a time where destructors (as implemented in the `__del__` method) still ran deterministically. In case you still want to use it in such a context, you will want to search the diff --git a/git/cmd.py b/git/cmd.py index 18a2bec1c..b84c43df3 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -1014,13 +1014,12 @@ def transform_kwargs(self, split_single_char_options: bool = True, **kwargs: Any def __unpack_args(cls, arg_list: Sequence[str]) -> List[str]: outlist = [] - for arg in arg_list: - if isinstance(arg_list, (list, tuple)): + if isinstance(arg_list, (list, tuple)): + for arg in arg_list: outlist.extend(cls.__unpack_args(arg)) - # END recursion - else: - outlist.append(str(arg)) - # END for each arg + else: + outlist.append(str(arg_list)) + return outlist def __call__(self, **kwargs: Any) -> 'Git': From c3f3501f0fe00572d2692948ebb5ce25da8bb418 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 15:53:22 +0100 Subject: [PATCH 0762/2375] Add __future__.annotations to cmd.py --- git/repo/fun.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/git/repo/fun.py b/git/repo/fun.py index b1b330c45..36c8b797b 100644 --- a/git/repo/fun.py +++ b/git/repo/fun.py @@ -1,6 +1,5 @@ """Package with general repository related functions""" -from git.refs.reference import Reference -from git.types import Commit_ish +from __future__ import annotations import os import stat from string import digits @@ -20,12 +19,13 @@ # Typing ---------------------------------------------------------------------- from typing import Union, Optional, cast, TYPE_CHECKING - +from git.types import Commit_ish if TYPE_CHECKING: from git.types import PathLike from .base import Repo from git.db import GitCmdObjectDB + from git.refs.reference import Reference from git.objects import Commit, TagObject, Blob, Tree from git.refs.tag import Tag @@ -204,7 +204,7 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: raise NotImplementedError("commit by message search ( regex )") # END handle search - obj: Union[Commit_ish, Reference, None] = None + obj: Union[Commit_ish, 'Reference', None] = None ref = None output_type = "commit" start = 0 @@ -224,7 +224,7 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: ref = repo.head.ref else: if token == '@': - ref = cast(Reference, name_to_object(repo, rev[:start], return_ref=True)) + ref = cast('Reference', name_to_object(repo, rev[:start], return_ref=True)) else: obj = cast(Commit_ish, name_to_object(repo, rev[:start])) # END handle token @@ -251,13 +251,13 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: pass # default elif output_type == 'tree': try: - obj = cast(Object, obj) + obj = cast(Commit_ish, obj) obj = to_commit(obj).tree except (AttributeError, ValueError): pass # error raised later # END exception handling elif output_type in ('', 'blob'): - obj = cast(TagObject, obj) + obj = cast('TagObject', obj) if obj and obj.type == 'tag': obj = deref_tag(obj) else: From 829142d4c30886db2a2622605092072e979afcc9 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 16:04:08 +0100 Subject: [PATCH 0763/2375] Add __future__.annotations to cmd.py2 --- git/repo/fun.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/git/repo/fun.py b/git/repo/fun.py index 36c8b797b..1a83dd3dc 100644 --- a/git/repo/fun.py +++ b/git/repo/fun.py @@ -233,7 +233,7 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: assert obj is not None if ref is not None: - obj = cast(Commit, ref.commit) + obj = cast('Commit', ref.commit) # END handle ref # END initialize obj on first token @@ -347,8 +347,8 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: # END end handle tag except (IndexError, AttributeError) as e: raise BadName( - "Invalid revision spec '%s' - not enough " - "parent commits to reach '%s%i'" % (rev, token, num)) from e + f"Invalid revision spec '{rev}' - not enough " + f"parent commits to reach '{token}{int(num)}'") from e # END exception handling # END parse loop From 13e0730b449e8ace2c7aa691d588febb4bed510c Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 16:16:11 +0100 Subject: [PATCH 0764/2375] Fix parse_date typing --- git/objects/util.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index 9c9ce7732..d7472b5d2 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -181,11 +181,13 @@ def parse_date(string_date: Union[str, datetime]) -> Tuple[int, int]: :raise ValueError: If the format could not be understood :note: Date can also be YYYY.MM.DD, MM/DD/YYYY and DD.MM.YYYY. """ - if isinstance(string_date, datetime) and string_date.tzinfo: - offset = -int(string_date.utcoffset().total_seconds()) # type: ignore[union-attr] + if isinstance(string_date, datetime): + if string_date.tzinfo: + utcoffset = string_date.utcoffset() + offset = -int(utcoffset.total_seconds()) if utcoffset else 0 return int(string_date.astimezone(utc).timestamp()), offset else: - assert isinstance(string_date, str) # for mypy + assert isinstance(string_date, str), f"string_date={string_date}, type={type(string_date)}" # for mypy # git time try: From 730f11936364314b76738ed06bdd9222dc9de2ac Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 16:30:32 +0100 Subject: [PATCH 0765/2375] Fix parse_date typing 2 --- git/objects/util.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/git/objects/util.py b/git/objects/util.py index d7472b5d2..e3e7d3bad 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -182,9 +182,11 @@ def parse_date(string_date: Union[str, datetime]) -> Tuple[int, int]: :note: Date can also be YYYY.MM.DD, MM/DD/YYYY and DD.MM.YYYY. """ if isinstance(string_date, datetime): - if string_date.tzinfo: + if string_date.tzinfo and string_date.utcoffset(): utcoffset = string_date.utcoffset() offset = -int(utcoffset.total_seconds()) if utcoffset else 0 + else: + offset = 0 return int(string_date.astimezone(utc).timestamp()), offset else: assert isinstance(string_date, str), f"string_date={string_date}, type={type(string_date)}" # for mypy From 2fe13cad9c889b8628119ab5ee139038b0c164fd Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 16:54:31 +0100 Subject: [PATCH 0766/2375] Fix parse_date typing 3 --- git/objects/util.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index e3e7d3bad..6e3f688eb 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -181,13 +181,11 @@ def parse_date(string_date: Union[str, datetime]) -> Tuple[int, int]: :raise ValueError: If the format could not be understood :note: Date can also be YYYY.MM.DD, MM/DD/YYYY and DD.MM.YYYY. """ - if isinstance(string_date, datetime): - if string_date.tzinfo and string_date.utcoffset(): - utcoffset = string_date.utcoffset() - offset = -int(utcoffset.total_seconds()) if utcoffset else 0 - else: - offset = 0 + if isinstance(string_date, datetime) and string_date.tzinfo: + utcoffset = string_date.utcoffset() + offset = -int(utcoffset.total_seconds()) if utcoffset else 0 return int(string_date.astimezone(utc).timestamp()), offset + else: assert isinstance(string_date, str), f"string_date={string_date}, type={type(string_date)}" # for mypy From 024b69669811dc3aa5a018eb3df5535202edf5f9 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 17:09:03 +0100 Subject: [PATCH 0767/2375] Fix parse_date typing 4 --- git/objects/util.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index 6e3f688eb..1ca6f0504 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -181,16 +181,15 @@ def parse_date(string_date: Union[str, datetime]) -> Tuple[int, int]: :raise ValueError: If the format could not be understood :note: Date can also be YYYY.MM.DD, MM/DD/YYYY and DD.MM.YYYY. """ - if isinstance(string_date, datetime) and string_date.tzinfo: - utcoffset = string_date.utcoffset() - offset = -int(utcoffset.total_seconds()) if utcoffset else 0 - return int(string_date.astimezone(utc).timestamp()), offset + if isinstance(string_date, datetime): + if string_date.tzinfo: + utcoffset = cast(timedelta, string_date.utcoffset()) # typeguard, if tzinfoand is not None + offset = -int(utcoffset.total_seconds()) + return int(string_date.astimezone(utc).timestamp()), offset + else: + raise ValueError(f"Unsupported date format or type: {string_date}" % string_date) else: - assert isinstance(string_date, str), f"string_date={string_date}, type={type(string_date)}" # for mypy - - # git time - try: if string_date.count(' ') == 1 and string_date.rfind(':') == -1: timestamp, offset_str = string_date.split() if timestamp.startswith('@'): @@ -244,13 +243,9 @@ def parse_date(string_date: Union[str, datetime]) -> Tuple[int, int]: continue # END exception handling # END for each fmt - # still here ? fail raise ValueError("no format matched") # END handle format - except Exception as e: - raise ValueError("Unsupported date format: %s" % string_date) from e - # END handle exceptions # precompiled regex From e2f8367b53b14acb8e1a86f33334f92a5a306878 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 17:15:06 +0100 Subject: [PATCH 0768/2375] Fix parse_date typing 5 --- git/objects/util.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index 1ca6f0504..d3d8d38bd 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -187,9 +187,10 @@ def parse_date(string_date: Union[str, datetime]) -> Tuple[int, int]: offset = -int(utcoffset.total_seconds()) return int(string_date.astimezone(utc).timestamp()), offset else: - raise ValueError(f"Unsupported date format or type: {string_date}" % string_date) + raise ValueError(f"string_date datetime object without tzinfo, {string_date}") - else: + # git time + try: if string_date.count(' ') == 1 and string_date.rfind(':') == -1: timestamp, offset_str = string_date.split() if timestamp.startswith('@'): @@ -243,9 +244,13 @@ def parse_date(string_date: Union[str, datetime]) -> Tuple[int, int]: continue # END exception handling # END for each fmt + # still here ? fail raise ValueError("no format matched") # END handle format + except Exception as e: + raise ValueError(f"Unsupported date format or type: {string_date}" % string_date) from e + # END handle exceptions # precompiled regex From d30bc0722ee32c501c021bde511640ff6620a203 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 17:19:33 +0100 Subject: [PATCH 0769/2375] Fix parse_date typing 6 --- git/objects/util.py | 2 +- ...il.py.97f6472e9bbb12cad7bbab8f367a99fe.tmp | 566 ++++++++++++++++++ 2 files changed, 567 insertions(+), 1 deletion(-) create mode 100644 git/objects/util.py.97f6472e9bbb12cad7bbab8f367a99fe.tmp diff --git a/git/objects/util.py b/git/objects/util.py index d3d8d38bd..16d4c0ac8 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -249,7 +249,7 @@ def parse_date(string_date: Union[str, datetime]) -> Tuple[int, int]: raise ValueError("no format matched") # END handle format except Exception as e: - raise ValueError(f"Unsupported date format or type: {string_date}" % string_date) from e + raise ValueError(f"Unsupported date format or type: {string_date}, type={type(string_date)}") from e # END handle exceptions diff --git a/git/objects/util.py.97f6472e9bbb12cad7bbab8f367a99fe.tmp b/git/objects/util.py.97f6472e9bbb12cad7bbab8f367a99fe.tmp new file mode 100644 index 000000000..16d4c0ac8 --- /dev/null +++ b/git/objects/util.py.97f6472e9bbb12cad7bbab8f367a99fe.tmp @@ -0,0 +1,566 @@ +# util.py +# Copyright (C) 2008, 2009 Michael Trier (mtrier@gmail.com) and contributors +# +# This module is part of GitPython and is released under +# the BSD License: http://www.opensource.org/licenses/bsd-license.php +"""Module for general utility functions""" + +from abc import abstractmethod +import warnings +from git.util import ( + IterableList, + IterableObj, + Actor +) + +import re +from collections import deque + +from string import digits +import time +import calendar +from datetime import datetime, timedelta, tzinfo + +# typing ------------------------------------------------------------ +from typing import (Any, Callable, Deque, Iterator, NamedTuple, overload, Sequence, + TYPE_CHECKING, Tuple, Type, TypeVar, Union, cast) + +from git.types import Has_id_attribute, Literal, Protocol, runtime_checkable + +if TYPE_CHECKING: + from io import BytesIO, StringIO + from .commit import Commit + from .blob import Blob + from .tag import TagObject + from .tree import Tree, TraversedTreeTup + from subprocess import Popen + from .submodule.base import Submodule + + +class TraverseNT(NamedTuple): + depth: int + item: Union['Traversable', 'Blob'] + src: Union['Traversable', None] + + +T_TIobj = TypeVar('T_TIobj', bound='TraversableIterableObj') # for TraversableIterableObj.traverse() + +TraversedTup = Union[Tuple[Union['Traversable', None], 'Traversable'], # for commit, submodule + 'TraversedTreeTup'] # for tree.traverse() + +# -------------------------------------------------------------------- + +__all__ = ('get_object_type_by_name', 'parse_date', 'parse_actor_and_date', + 'ProcessStreamAdapter', 'Traversable', 'altz_to_utctz_str', 'utctz_to_altz', + 'verify_utctz', 'Actor', 'tzoffset', 'utc') + +ZERO = timedelta(0) + +#{ Functions + + +def mode_str_to_int(modestr: Union[bytes, str]) -> int: + """ + :param modestr: string like 755 or 644 or 100644 - only the last 6 chars will be used + :return: + String identifying a mode compatible to the mode methods ids of the + stat module regarding the rwx permissions for user, group and other, + special flags and file system flags, i.e. whether it is a symlink + for example.""" + mode = 0 + for iteration, char in enumerate(reversed(modestr[-6:])): + char = cast(Union[str, int], char) + mode += int(char) << iteration * 3 + # END for each char + return mode + + +def get_object_type_by_name(object_type_name: bytes + ) -> Union[Type['Commit'], Type['TagObject'], Type['Tree'], Type['Blob']]: + """ + :return: type suitable to handle the given object type name. + Use the type to create new instances. + + :param object_type_name: Member of TYPES + + :raise ValueError: In case object_type_name is unknown""" + if object_type_name == b"commit": + from . import commit + return commit.Commit + elif object_type_name == b"tag": + from . import tag + return tag.TagObject + elif object_type_name == b"blob": + from . import blob + return blob.Blob + elif object_type_name == b"tree": + from . import tree + return tree.Tree + else: + raise ValueError("Cannot handle unknown object type: %s" % object_type_name.decode()) + + +def utctz_to_altz(utctz: str) -> int: + """we convert utctz to the timezone in seconds, it is the format time.altzone + returns. Git stores it as UTC timezone which has the opposite sign as well, + which explains the -1 * ( that was made explicit here ) + :param utctz: git utc timezone string, i.e. +0200""" + return -1 * int(float(utctz) / 100 * 3600) + + +def altz_to_utctz_str(altz: float) -> str: + """As above, but inverses the operation, returning a string that can be used + in commit objects""" + utci = -1 * int((float(altz) / 3600) * 100) + utcs = str(abs(utci)) + utcs = "0" * (4 - len(utcs)) + utcs + prefix = (utci < 0 and '-') or '+' + return prefix + utcs + + +def verify_utctz(offset: str) -> str: + """:raise ValueError: if offset is incorrect + :return: offset""" + fmt_exc = ValueError("Invalid timezone offset format: %s" % offset) + if len(offset) != 5: + raise fmt_exc + if offset[0] not in "+-": + raise fmt_exc + if offset[1] not in digits or\ + offset[2] not in digits or\ + offset[3] not in digits or\ + offset[4] not in digits: + raise fmt_exc + # END for each char + return offset + + +class tzoffset(tzinfo): + + def __init__(self, secs_west_of_utc: float, name: Union[None, str] = None) -> None: + self._offset = timedelta(seconds=-secs_west_of_utc) + self._name = name or 'fixed' + + def __reduce__(self) -> Tuple[Type['tzoffset'], Tuple[float, str]]: + return tzoffset, (-self._offset.total_seconds(), self._name) + + def utcoffset(self, dt: Union[datetime, None]) -> timedelta: + return self._offset + + def tzname(self, dt: Union[datetime, None]) -> str: + return self._name + + def dst(self, dt: Union[datetime, None]) -> timedelta: + return ZERO + + +utc = tzoffset(0, 'UTC') + + +def from_timestamp(timestamp: float, tz_offset: float) -> datetime: + """Converts a timestamp + tz_offset into an aware datetime instance.""" + utc_dt = datetime.fromtimestamp(timestamp, utc) + try: + local_dt = utc_dt.astimezone(tzoffset(tz_offset)) + return local_dt + except ValueError: + return utc_dt + + +def parse_date(string_date: Union[str, datetime]) -> Tuple[int, int]: + """ + Parse the given date as one of the following + + * aware datetime instance + * Git internal format: timestamp offset + * RFC 2822: Thu, 07 Apr 2005 22:13:13 +0200. + * ISO 8601 2005-04-07T22:13:13 + The T can be a space as well + + :return: Tuple(int(timestamp_UTC), int(offset)), both in seconds since epoch + :raise ValueError: If the format could not be understood + :note: Date can also be YYYY.MM.DD, MM/DD/YYYY and DD.MM.YYYY. + """ + if isinstance(string_date, datetime): + if string_date.tzinfo: + utcoffset = cast(timedelta, string_date.utcoffset()) # typeguard, if tzinfoand is not None + offset = -int(utcoffset.total_seconds()) + return int(string_date.astimezone(utc).timestamp()), offset + else: + raise ValueError(f"string_date datetime object without tzinfo, {string_date}") + + # git time + try: + if string_date.count(' ') == 1 and string_date.rfind(':') == -1: + timestamp, offset_str = string_date.split() + if timestamp.startswith('@'): + timestamp = timestamp[1:] + timestamp_int = int(timestamp) + return timestamp_int, utctz_to_altz(verify_utctz(offset_str)) + else: + offset_str = "+0000" # local time by default + if string_date[-5] in '-+': + offset_str = verify_utctz(string_date[-5:]) + string_date = string_date[:-6] # skip space as well + # END split timezone info + offset = utctz_to_altz(offset_str) + + # now figure out the date and time portion - split time + date_formats = [] + splitter = -1 + if ',' in string_date: + date_formats.append("%a, %d %b %Y") + splitter = string_date.rfind(' ') + else: + # iso plus additional + date_formats.append("%Y-%m-%d") + date_formats.append("%Y.%m.%d") + date_formats.append("%m/%d/%Y") + date_formats.append("%d.%m.%Y") + + splitter = string_date.rfind('T') + if splitter == -1: + splitter = string_date.rfind(' ') + # END handle 'T' and ' ' + # END handle rfc or iso + + assert splitter > -1 + + # split date and time + time_part = string_date[splitter + 1:] # skip space + date_part = string_date[:splitter] + + # parse time + tstruct = time.strptime(time_part, "%H:%M:%S") + + for fmt in date_formats: + try: + dtstruct = time.strptime(date_part, fmt) + utctime = calendar.timegm((dtstruct.tm_year, dtstruct.tm_mon, dtstruct.tm_mday, + tstruct.tm_hour, tstruct.tm_min, tstruct.tm_sec, + dtstruct.tm_wday, dtstruct.tm_yday, tstruct.tm_isdst)) + return int(utctime), offset + except ValueError: + continue + # END exception handling + # END for each fmt + + # still here ? fail + raise ValueError("no format matched") + # END handle format + except Exception as e: + raise ValueError(f"Unsupported date format or type: {string_date}, type={type(string_date)}") from e + # END handle exceptions + + +# precompiled regex +_re_actor_epoch = re.compile(r'^.+? (.*) (\d+) ([+-]\d+).*$') +_re_only_actor = re.compile(r'^.+? (.*)$') + + +def parse_actor_and_date(line: str) -> Tuple[Actor, int, int]: + """Parse out the actor (author or committer) info from a line like:: + + author Tom Preston-Werner 1191999972 -0700 + + :return: [Actor, int_seconds_since_epoch, int_timezone_offset]""" + actor, epoch, offset = '', '0', '0' + m = _re_actor_epoch.search(line) + if m: + actor, epoch, offset = m.groups() + else: + m = _re_only_actor.search(line) + actor = m.group(1) if m else line or '' + return (Actor._from_string(actor), int(epoch), utctz_to_altz(offset)) + +#} END functions + + +#{ Classes + +class ProcessStreamAdapter(object): + + """Class wireing all calls to the contained Process instance. + + Use this type to hide the underlying process to provide access only to a specified + stream. The process is usually wrapped into an AutoInterrupt class to kill + it if the instance goes out of scope.""" + __slots__ = ("_proc", "_stream") + + def __init__(self, process: 'Popen', stream_name: str) -> None: + self._proc = process + self._stream: StringIO = getattr(process, stream_name) # guessed type + + def __getattr__(self, attr: str) -> Any: + return getattr(self._stream, attr) + + +@runtime_checkable +class Traversable(Protocol): + + """Simple interface to perform depth-first or breadth-first traversals + into one direction. + Subclasses only need to implement one function. + Instances of the Subclass must be hashable + + Defined subclasses = [Commit, Tree, SubModule] + """ + __slots__ = () + + @classmethod + @abstractmethod + def _get_intermediate_items(cls, item: Any) -> Sequence['Traversable']: + """ + Returns: + Tuple of items connected to the given item. + Must be implemented in subclass + + class Commit:: (cls, Commit) -> Tuple[Commit, ...] + class Submodule:: (cls, Submodule) -> Iterablelist[Submodule] + class Tree:: (cls, Tree) -> Tuple[Tree, ...] + """ + raise NotImplementedError("To be implemented in subclass") + + @abstractmethod + def list_traverse(self, *args: Any, **kwargs: Any) -> Any: + """ """ + warnings.warn("list_traverse() method should only be called from subclasses." + "Calling from Traversable abstract class will raise NotImplementedError in 3.1.20" + "Builtin sublclasses are 'Submodule', 'Tree' and 'Commit", + DeprecationWarning, + stacklevel=2) + return self._list_traverse(*args, **kwargs) + + def _list_traverse(self, as_edge: bool = False, *args: Any, **kwargs: Any + ) -> IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']]: + """ + :return: IterableList with the results of the traversal as produced by + traverse() + Commit -> IterableList['Commit'] + Submodule -> IterableList['Submodule'] + Tree -> IterableList[Union['Submodule', 'Tree', 'Blob']] + """ + # Commit and Submodule have id.__attribute__ as IterableObj + # Tree has id.__attribute__ inherited from IndexObject + if isinstance(self, Has_id_attribute): + id = self._id_attribute_ + else: + id = "" # shouldn't reach here, unless Traversable subclass created with no _id_attribute_ + # could add _id_attribute_ to Traversable, or make all Traversable also Iterable? + + if not as_edge: + out: IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']] = IterableList(id) + out.extend(self.traverse(as_edge=as_edge, *args, **kwargs)) + return out + # overloads in subclasses (mypy does't allow typing self: subclass) + # Union[IterableList['Commit'], IterableList['Submodule'], IterableList[Union['Submodule', 'Tree', 'Blob']]] + else: + # Raise deprecationwarning, doesn't make sense to use this + out_list: IterableList = IterableList(self.traverse(*args, **kwargs)) + return out_list + + @ abstractmethod + def traverse(self, *args: Any, **kwargs: Any) -> Any: + """ """ + warnings.warn("traverse() method should only be called from subclasses." + "Calling from Traversable abstract class will raise NotImplementedError in 3.1.20" + "Builtin sublclasses are 'Submodule', 'Tree' and 'Commit", + DeprecationWarning, + stacklevel=2) + return self._traverse(*args, **kwargs) + + def _traverse(self, + predicate: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: True, + prune: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: False, + depth: int = -1, branch_first: bool = True, visit_once: bool = True, + ignore_self: int = 1, as_edge: bool = False + ) -> Union[Iterator[Union['Traversable', 'Blob']], + Iterator[TraversedTup]]: + """:return: iterator yielding of items found when traversing self + :param predicate: f(i,d) returns False if item i at depth d should not be included in the result + + :param prune: + f(i,d) return True if the search should stop at item i at depth d. + Item i will not be returned. + + :param depth: + define at which level the iteration should not go deeper + if -1, there is no limit + if 0, you would effectively only get self, the root of the iteration + i.e. if 1, you would only get the first level of predecessors/successors + + :param branch_first: + if True, items will be returned branch first, otherwise depth first + + :param visit_once: + if True, items will only be returned once, although they might be encountered + several times. Loops are prevented that way. + + :param ignore_self: + if True, self will be ignored and automatically pruned from + the result. Otherwise it will be the first item to be returned. + If as_edge is True, the source of the first edge is None + + :param as_edge: + if True, return a pair of items, first being the source, second the + destination, i.e. tuple(src, dest) with the edge spanning from + source to destination""" + + """ + Commit -> Iterator[Union[Commit, Tuple[Commit, Commit]] + Submodule -> Iterator[Submodule, Tuple[Submodule, Submodule]] + Tree -> Iterator[Union[Blob, Tree, Submodule, + Tuple[Union[Submodule, Tree], Union[Blob, Tree, Submodule]]] + + ignore_self=True is_edge=True -> Iterator[item] + ignore_self=True is_edge=False --> Iterator[item] + ignore_self=False is_edge=True -> Iterator[item] | Iterator[Tuple[src, item]] + ignore_self=False is_edge=False -> Iterator[Tuple[src, item]]""" + + visited = set() + stack: Deque[TraverseNT] = deque() + stack.append(TraverseNT(0, self, None)) # self is always depth level 0 + + def addToStack(stack: Deque[TraverseNT], + src_item: 'Traversable', + branch_first: bool, + depth: int) -> None: + lst = self._get_intermediate_items(item) + if not lst: # empty list + return None + if branch_first: + stack.extendleft(TraverseNT(depth, i, src_item) for i in lst) + else: + reviter = (TraverseNT(depth, lst[i], src_item) for i in range(len(lst) - 1, -1, -1)) + stack.extend(reviter) + # END addToStack local method + + while stack: + d, item, src = stack.pop() # depth of item, item, item_source + + if visit_once and item in visited: + continue + + if visit_once: + visited.add(item) + + rval: Union[TraversedTup, 'Traversable', 'Blob'] + if as_edge: # if as_edge return (src, item) unless rrc is None (e.g. for first item) + rval = (src, item) + else: + rval = item + + if prune(rval, d): + continue + + skipStartItem = ignore_self and (item is self) + if not skipStartItem and predicate(rval, d): + yield rval + + # only continue to next level if this is appropriate ! + nd = d + 1 + if depth > -1 and nd > depth: + continue + + addToStack(stack, item, branch_first, nd) + # END for each item on work stack + + +@ runtime_checkable +class Serializable(Protocol): + + """Defines methods to serialize and deserialize objects from and into a data stream""" + __slots__ = () + + # @abstractmethod + def _serialize(self, stream: 'BytesIO') -> 'Serializable': + """Serialize the data of this object into the given data stream + :note: a serialized object would ``_deserialize`` into the same object + :param stream: a file-like object + :return: self""" + raise NotImplementedError("To be implemented in subclass") + + # @abstractmethod + def _deserialize(self, stream: 'BytesIO') -> 'Serializable': + """Deserialize all information regarding this object from the stream + :param stream: a file-like object + :return: self""" + raise NotImplementedError("To be implemented in subclass") + + +class TraversableIterableObj(IterableObj, Traversable): + __slots__ = () + + TIobj_tuple = Tuple[Union[T_TIobj, None], T_TIobj] + + def list_traverse(self: T_TIobj, *args: Any, **kwargs: Any) -> IterableList[T_TIobj]: + return super(TraversableIterableObj, self)._list_traverse(* args, **kwargs) + + @ overload # type: ignore + def traverse(self: T_TIobj + ) -> Iterator[T_TIobj]: + ... + + @ overload + def traverse(self: T_TIobj, + predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], + prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], + depth: int, branch_first: bool, visit_once: bool, + ignore_self: Literal[True], + as_edge: Literal[False], + ) -> Iterator[T_TIobj]: + ... + + @ overload + def traverse(self: T_TIobj, + predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], + prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], + depth: int, branch_first: bool, visit_once: bool, + ignore_self: Literal[False], + as_edge: Literal[True], + ) -> Iterator[Tuple[Union[T_TIobj, None], T_TIobj]]: + ... + + @ overload + def traverse(self: T_TIobj, + predicate: Callable[[Union[T_TIobj, TIobj_tuple], int], bool], + prune: Callable[[Union[T_TIobj, TIobj_tuple], int], bool], + depth: int, branch_first: bool, visit_once: bool, + ignore_self: Literal[True], + as_edge: Literal[True], + ) -> Iterator[Tuple[T_TIobj, T_TIobj]]: + ... + + def traverse(self: T_TIobj, + predicate: Callable[[Union[T_TIobj, TIobj_tuple], int], + bool] = lambda i, d: True, + prune: Callable[[Union[T_TIobj, TIobj_tuple], int], + bool] = lambda i, d: False, + depth: int = -1, branch_first: bool = True, visit_once: bool = True, + ignore_self: int = 1, as_edge: bool = False + ) -> Union[Iterator[T_TIobj], + Iterator[Tuple[T_TIobj, T_TIobj]], + Iterator[TIobj_tuple]]: + """For documentation, see util.Traversable._traverse()""" + + """ + # To typecheck instead of using cast. + import itertools + from git.types import TypeGuard + def is_commit_traversed(inp: Tuple) -> TypeGuard[Tuple[Iterator[Tuple['Commit', 'Commit']]]]: + for x in inp[1]: + if not isinstance(x, tuple) and len(x) != 2: + if all(isinstance(inner, Commit) for inner in x): + continue + return True + + ret = super(Commit, self).traverse(predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge) + ret_tup = itertools.tee(ret, 2) + assert is_commit_traversed(ret_tup), f"{[type(x) for x in list(ret_tup[0])]}" + return ret_tup[0] + """ + return cast(Union[Iterator[T_TIobj], + Iterator[Tuple[Union[None, T_TIobj], T_TIobj]]], + super(TraversableIterableObj, self)._traverse( + predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge # type: ignore + )) From 6470ad4a413fb7fbd9f2d3b9da1720c13ffc92bb Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 17:24:18 +0100 Subject: [PATCH 0770/2375] Fix parse_date typing 7 --- git/objects/util.py | 4 +- ...il.py.97f6472e9bbb12cad7bbab8f367a99fe.tmp | 566 ------------------ 2 files changed, 3 insertions(+), 567 deletions(-) delete mode 100644 git/objects/util.py.97f6472e9bbb12cad7bbab8f367a99fe.tmp diff --git a/git/objects/util.py b/git/objects/util.py index 16d4c0ac8..0b843301a 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -187,7 +187,9 @@ def parse_date(string_date: Union[str, datetime]) -> Tuple[int, int]: offset = -int(utcoffset.total_seconds()) return int(string_date.astimezone(utc).timestamp()), offset else: - raise ValueError(f"string_date datetime object without tzinfo, {string_date}") + # should just return timestamp, 0? + return int(string_date.astimezone(utc).timestamp()), 0 + # raise ValueError(f"string_date datetime object without tzinfo, {string_date}") # git time try: diff --git a/git/objects/util.py.97f6472e9bbb12cad7bbab8f367a99fe.tmp b/git/objects/util.py.97f6472e9bbb12cad7bbab8f367a99fe.tmp deleted file mode 100644 index 16d4c0ac8..000000000 --- a/git/objects/util.py.97f6472e9bbb12cad7bbab8f367a99fe.tmp +++ /dev/null @@ -1,566 +0,0 @@ -# util.py -# Copyright (C) 2008, 2009 Michael Trier (mtrier@gmail.com) and contributors -# -# This module is part of GitPython and is released under -# the BSD License: http://www.opensource.org/licenses/bsd-license.php -"""Module for general utility functions""" - -from abc import abstractmethod -import warnings -from git.util import ( - IterableList, - IterableObj, - Actor -) - -import re -from collections import deque - -from string import digits -import time -import calendar -from datetime import datetime, timedelta, tzinfo - -# typing ------------------------------------------------------------ -from typing import (Any, Callable, Deque, Iterator, NamedTuple, overload, Sequence, - TYPE_CHECKING, Tuple, Type, TypeVar, Union, cast) - -from git.types import Has_id_attribute, Literal, Protocol, runtime_checkable - -if TYPE_CHECKING: - from io import BytesIO, StringIO - from .commit import Commit - from .blob import Blob - from .tag import TagObject - from .tree import Tree, TraversedTreeTup - from subprocess import Popen - from .submodule.base import Submodule - - -class TraverseNT(NamedTuple): - depth: int - item: Union['Traversable', 'Blob'] - src: Union['Traversable', None] - - -T_TIobj = TypeVar('T_TIobj', bound='TraversableIterableObj') # for TraversableIterableObj.traverse() - -TraversedTup = Union[Tuple[Union['Traversable', None], 'Traversable'], # for commit, submodule - 'TraversedTreeTup'] # for tree.traverse() - -# -------------------------------------------------------------------- - -__all__ = ('get_object_type_by_name', 'parse_date', 'parse_actor_and_date', - 'ProcessStreamAdapter', 'Traversable', 'altz_to_utctz_str', 'utctz_to_altz', - 'verify_utctz', 'Actor', 'tzoffset', 'utc') - -ZERO = timedelta(0) - -#{ Functions - - -def mode_str_to_int(modestr: Union[bytes, str]) -> int: - """ - :param modestr: string like 755 or 644 or 100644 - only the last 6 chars will be used - :return: - String identifying a mode compatible to the mode methods ids of the - stat module regarding the rwx permissions for user, group and other, - special flags and file system flags, i.e. whether it is a symlink - for example.""" - mode = 0 - for iteration, char in enumerate(reversed(modestr[-6:])): - char = cast(Union[str, int], char) - mode += int(char) << iteration * 3 - # END for each char - return mode - - -def get_object_type_by_name(object_type_name: bytes - ) -> Union[Type['Commit'], Type['TagObject'], Type['Tree'], Type['Blob']]: - """ - :return: type suitable to handle the given object type name. - Use the type to create new instances. - - :param object_type_name: Member of TYPES - - :raise ValueError: In case object_type_name is unknown""" - if object_type_name == b"commit": - from . import commit - return commit.Commit - elif object_type_name == b"tag": - from . import tag - return tag.TagObject - elif object_type_name == b"blob": - from . import blob - return blob.Blob - elif object_type_name == b"tree": - from . import tree - return tree.Tree - else: - raise ValueError("Cannot handle unknown object type: %s" % object_type_name.decode()) - - -def utctz_to_altz(utctz: str) -> int: - """we convert utctz to the timezone in seconds, it is the format time.altzone - returns. Git stores it as UTC timezone which has the opposite sign as well, - which explains the -1 * ( that was made explicit here ) - :param utctz: git utc timezone string, i.e. +0200""" - return -1 * int(float(utctz) / 100 * 3600) - - -def altz_to_utctz_str(altz: float) -> str: - """As above, but inverses the operation, returning a string that can be used - in commit objects""" - utci = -1 * int((float(altz) / 3600) * 100) - utcs = str(abs(utci)) - utcs = "0" * (4 - len(utcs)) + utcs - prefix = (utci < 0 and '-') or '+' - return prefix + utcs - - -def verify_utctz(offset: str) -> str: - """:raise ValueError: if offset is incorrect - :return: offset""" - fmt_exc = ValueError("Invalid timezone offset format: %s" % offset) - if len(offset) != 5: - raise fmt_exc - if offset[0] not in "+-": - raise fmt_exc - if offset[1] not in digits or\ - offset[2] not in digits or\ - offset[3] not in digits or\ - offset[4] not in digits: - raise fmt_exc - # END for each char - return offset - - -class tzoffset(tzinfo): - - def __init__(self, secs_west_of_utc: float, name: Union[None, str] = None) -> None: - self._offset = timedelta(seconds=-secs_west_of_utc) - self._name = name or 'fixed' - - def __reduce__(self) -> Tuple[Type['tzoffset'], Tuple[float, str]]: - return tzoffset, (-self._offset.total_seconds(), self._name) - - def utcoffset(self, dt: Union[datetime, None]) -> timedelta: - return self._offset - - def tzname(self, dt: Union[datetime, None]) -> str: - return self._name - - def dst(self, dt: Union[datetime, None]) -> timedelta: - return ZERO - - -utc = tzoffset(0, 'UTC') - - -def from_timestamp(timestamp: float, tz_offset: float) -> datetime: - """Converts a timestamp + tz_offset into an aware datetime instance.""" - utc_dt = datetime.fromtimestamp(timestamp, utc) - try: - local_dt = utc_dt.astimezone(tzoffset(tz_offset)) - return local_dt - except ValueError: - return utc_dt - - -def parse_date(string_date: Union[str, datetime]) -> Tuple[int, int]: - """ - Parse the given date as one of the following - - * aware datetime instance - * Git internal format: timestamp offset - * RFC 2822: Thu, 07 Apr 2005 22:13:13 +0200. - * ISO 8601 2005-04-07T22:13:13 - The T can be a space as well - - :return: Tuple(int(timestamp_UTC), int(offset)), both in seconds since epoch - :raise ValueError: If the format could not be understood - :note: Date can also be YYYY.MM.DD, MM/DD/YYYY and DD.MM.YYYY. - """ - if isinstance(string_date, datetime): - if string_date.tzinfo: - utcoffset = cast(timedelta, string_date.utcoffset()) # typeguard, if tzinfoand is not None - offset = -int(utcoffset.total_seconds()) - return int(string_date.astimezone(utc).timestamp()), offset - else: - raise ValueError(f"string_date datetime object without tzinfo, {string_date}") - - # git time - try: - if string_date.count(' ') == 1 and string_date.rfind(':') == -1: - timestamp, offset_str = string_date.split() - if timestamp.startswith('@'): - timestamp = timestamp[1:] - timestamp_int = int(timestamp) - return timestamp_int, utctz_to_altz(verify_utctz(offset_str)) - else: - offset_str = "+0000" # local time by default - if string_date[-5] in '-+': - offset_str = verify_utctz(string_date[-5:]) - string_date = string_date[:-6] # skip space as well - # END split timezone info - offset = utctz_to_altz(offset_str) - - # now figure out the date and time portion - split time - date_formats = [] - splitter = -1 - if ',' in string_date: - date_formats.append("%a, %d %b %Y") - splitter = string_date.rfind(' ') - else: - # iso plus additional - date_formats.append("%Y-%m-%d") - date_formats.append("%Y.%m.%d") - date_formats.append("%m/%d/%Y") - date_formats.append("%d.%m.%Y") - - splitter = string_date.rfind('T') - if splitter == -1: - splitter = string_date.rfind(' ') - # END handle 'T' and ' ' - # END handle rfc or iso - - assert splitter > -1 - - # split date and time - time_part = string_date[splitter + 1:] # skip space - date_part = string_date[:splitter] - - # parse time - tstruct = time.strptime(time_part, "%H:%M:%S") - - for fmt in date_formats: - try: - dtstruct = time.strptime(date_part, fmt) - utctime = calendar.timegm((dtstruct.tm_year, dtstruct.tm_mon, dtstruct.tm_mday, - tstruct.tm_hour, tstruct.tm_min, tstruct.tm_sec, - dtstruct.tm_wday, dtstruct.tm_yday, tstruct.tm_isdst)) - return int(utctime), offset - except ValueError: - continue - # END exception handling - # END for each fmt - - # still here ? fail - raise ValueError("no format matched") - # END handle format - except Exception as e: - raise ValueError(f"Unsupported date format or type: {string_date}, type={type(string_date)}") from e - # END handle exceptions - - -# precompiled regex -_re_actor_epoch = re.compile(r'^.+? (.*) (\d+) ([+-]\d+).*$') -_re_only_actor = re.compile(r'^.+? (.*)$') - - -def parse_actor_and_date(line: str) -> Tuple[Actor, int, int]: - """Parse out the actor (author or committer) info from a line like:: - - author Tom Preston-Werner 1191999972 -0700 - - :return: [Actor, int_seconds_since_epoch, int_timezone_offset]""" - actor, epoch, offset = '', '0', '0' - m = _re_actor_epoch.search(line) - if m: - actor, epoch, offset = m.groups() - else: - m = _re_only_actor.search(line) - actor = m.group(1) if m else line or '' - return (Actor._from_string(actor), int(epoch), utctz_to_altz(offset)) - -#} END functions - - -#{ Classes - -class ProcessStreamAdapter(object): - - """Class wireing all calls to the contained Process instance. - - Use this type to hide the underlying process to provide access only to a specified - stream. The process is usually wrapped into an AutoInterrupt class to kill - it if the instance goes out of scope.""" - __slots__ = ("_proc", "_stream") - - def __init__(self, process: 'Popen', stream_name: str) -> None: - self._proc = process - self._stream: StringIO = getattr(process, stream_name) # guessed type - - def __getattr__(self, attr: str) -> Any: - return getattr(self._stream, attr) - - -@runtime_checkable -class Traversable(Protocol): - - """Simple interface to perform depth-first or breadth-first traversals - into one direction. - Subclasses only need to implement one function. - Instances of the Subclass must be hashable - - Defined subclasses = [Commit, Tree, SubModule] - """ - __slots__ = () - - @classmethod - @abstractmethod - def _get_intermediate_items(cls, item: Any) -> Sequence['Traversable']: - """ - Returns: - Tuple of items connected to the given item. - Must be implemented in subclass - - class Commit:: (cls, Commit) -> Tuple[Commit, ...] - class Submodule:: (cls, Submodule) -> Iterablelist[Submodule] - class Tree:: (cls, Tree) -> Tuple[Tree, ...] - """ - raise NotImplementedError("To be implemented in subclass") - - @abstractmethod - def list_traverse(self, *args: Any, **kwargs: Any) -> Any: - """ """ - warnings.warn("list_traverse() method should only be called from subclasses." - "Calling from Traversable abstract class will raise NotImplementedError in 3.1.20" - "Builtin sublclasses are 'Submodule', 'Tree' and 'Commit", - DeprecationWarning, - stacklevel=2) - return self._list_traverse(*args, **kwargs) - - def _list_traverse(self, as_edge: bool = False, *args: Any, **kwargs: Any - ) -> IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']]: - """ - :return: IterableList with the results of the traversal as produced by - traverse() - Commit -> IterableList['Commit'] - Submodule -> IterableList['Submodule'] - Tree -> IterableList[Union['Submodule', 'Tree', 'Blob']] - """ - # Commit and Submodule have id.__attribute__ as IterableObj - # Tree has id.__attribute__ inherited from IndexObject - if isinstance(self, Has_id_attribute): - id = self._id_attribute_ - else: - id = "" # shouldn't reach here, unless Traversable subclass created with no _id_attribute_ - # could add _id_attribute_ to Traversable, or make all Traversable also Iterable? - - if not as_edge: - out: IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']] = IterableList(id) - out.extend(self.traverse(as_edge=as_edge, *args, **kwargs)) - return out - # overloads in subclasses (mypy does't allow typing self: subclass) - # Union[IterableList['Commit'], IterableList['Submodule'], IterableList[Union['Submodule', 'Tree', 'Blob']]] - else: - # Raise deprecationwarning, doesn't make sense to use this - out_list: IterableList = IterableList(self.traverse(*args, **kwargs)) - return out_list - - @ abstractmethod - def traverse(self, *args: Any, **kwargs: Any) -> Any: - """ """ - warnings.warn("traverse() method should only be called from subclasses." - "Calling from Traversable abstract class will raise NotImplementedError in 3.1.20" - "Builtin sublclasses are 'Submodule', 'Tree' and 'Commit", - DeprecationWarning, - stacklevel=2) - return self._traverse(*args, **kwargs) - - def _traverse(self, - predicate: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: True, - prune: Callable[[Union['Traversable', 'Blob', TraversedTup], int], bool] = lambda i, d: False, - depth: int = -1, branch_first: bool = True, visit_once: bool = True, - ignore_self: int = 1, as_edge: bool = False - ) -> Union[Iterator[Union['Traversable', 'Blob']], - Iterator[TraversedTup]]: - """:return: iterator yielding of items found when traversing self - :param predicate: f(i,d) returns False if item i at depth d should not be included in the result - - :param prune: - f(i,d) return True if the search should stop at item i at depth d. - Item i will not be returned. - - :param depth: - define at which level the iteration should not go deeper - if -1, there is no limit - if 0, you would effectively only get self, the root of the iteration - i.e. if 1, you would only get the first level of predecessors/successors - - :param branch_first: - if True, items will be returned branch first, otherwise depth first - - :param visit_once: - if True, items will only be returned once, although they might be encountered - several times. Loops are prevented that way. - - :param ignore_self: - if True, self will be ignored and automatically pruned from - the result. Otherwise it will be the first item to be returned. - If as_edge is True, the source of the first edge is None - - :param as_edge: - if True, return a pair of items, first being the source, second the - destination, i.e. tuple(src, dest) with the edge spanning from - source to destination""" - - """ - Commit -> Iterator[Union[Commit, Tuple[Commit, Commit]] - Submodule -> Iterator[Submodule, Tuple[Submodule, Submodule]] - Tree -> Iterator[Union[Blob, Tree, Submodule, - Tuple[Union[Submodule, Tree], Union[Blob, Tree, Submodule]]] - - ignore_self=True is_edge=True -> Iterator[item] - ignore_self=True is_edge=False --> Iterator[item] - ignore_self=False is_edge=True -> Iterator[item] | Iterator[Tuple[src, item]] - ignore_self=False is_edge=False -> Iterator[Tuple[src, item]]""" - - visited = set() - stack: Deque[TraverseNT] = deque() - stack.append(TraverseNT(0, self, None)) # self is always depth level 0 - - def addToStack(stack: Deque[TraverseNT], - src_item: 'Traversable', - branch_first: bool, - depth: int) -> None: - lst = self._get_intermediate_items(item) - if not lst: # empty list - return None - if branch_first: - stack.extendleft(TraverseNT(depth, i, src_item) for i in lst) - else: - reviter = (TraverseNT(depth, lst[i], src_item) for i in range(len(lst) - 1, -1, -1)) - stack.extend(reviter) - # END addToStack local method - - while stack: - d, item, src = stack.pop() # depth of item, item, item_source - - if visit_once and item in visited: - continue - - if visit_once: - visited.add(item) - - rval: Union[TraversedTup, 'Traversable', 'Blob'] - if as_edge: # if as_edge return (src, item) unless rrc is None (e.g. for first item) - rval = (src, item) - else: - rval = item - - if prune(rval, d): - continue - - skipStartItem = ignore_self and (item is self) - if not skipStartItem and predicate(rval, d): - yield rval - - # only continue to next level if this is appropriate ! - nd = d + 1 - if depth > -1 and nd > depth: - continue - - addToStack(stack, item, branch_first, nd) - # END for each item on work stack - - -@ runtime_checkable -class Serializable(Protocol): - - """Defines methods to serialize and deserialize objects from and into a data stream""" - __slots__ = () - - # @abstractmethod - def _serialize(self, stream: 'BytesIO') -> 'Serializable': - """Serialize the data of this object into the given data stream - :note: a serialized object would ``_deserialize`` into the same object - :param stream: a file-like object - :return: self""" - raise NotImplementedError("To be implemented in subclass") - - # @abstractmethod - def _deserialize(self, stream: 'BytesIO') -> 'Serializable': - """Deserialize all information regarding this object from the stream - :param stream: a file-like object - :return: self""" - raise NotImplementedError("To be implemented in subclass") - - -class TraversableIterableObj(IterableObj, Traversable): - __slots__ = () - - TIobj_tuple = Tuple[Union[T_TIobj, None], T_TIobj] - - def list_traverse(self: T_TIobj, *args: Any, **kwargs: Any) -> IterableList[T_TIobj]: - return super(TraversableIterableObj, self)._list_traverse(* args, **kwargs) - - @ overload # type: ignore - def traverse(self: T_TIobj - ) -> Iterator[T_TIobj]: - ... - - @ overload - def traverse(self: T_TIobj, - predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], - prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], - depth: int, branch_first: bool, visit_once: bool, - ignore_self: Literal[True], - as_edge: Literal[False], - ) -> Iterator[T_TIobj]: - ... - - @ overload - def traverse(self: T_TIobj, - predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], - prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool], - depth: int, branch_first: bool, visit_once: bool, - ignore_self: Literal[False], - as_edge: Literal[True], - ) -> Iterator[Tuple[Union[T_TIobj, None], T_TIobj]]: - ... - - @ overload - def traverse(self: T_TIobj, - predicate: Callable[[Union[T_TIobj, TIobj_tuple], int], bool], - prune: Callable[[Union[T_TIobj, TIobj_tuple], int], bool], - depth: int, branch_first: bool, visit_once: bool, - ignore_self: Literal[True], - as_edge: Literal[True], - ) -> Iterator[Tuple[T_TIobj, T_TIobj]]: - ... - - def traverse(self: T_TIobj, - predicate: Callable[[Union[T_TIobj, TIobj_tuple], int], - bool] = lambda i, d: True, - prune: Callable[[Union[T_TIobj, TIobj_tuple], int], - bool] = lambda i, d: False, - depth: int = -1, branch_first: bool = True, visit_once: bool = True, - ignore_self: int = 1, as_edge: bool = False - ) -> Union[Iterator[T_TIobj], - Iterator[Tuple[T_TIobj, T_TIobj]], - Iterator[TIobj_tuple]]: - """For documentation, see util.Traversable._traverse()""" - - """ - # To typecheck instead of using cast. - import itertools - from git.types import TypeGuard - def is_commit_traversed(inp: Tuple) -> TypeGuard[Tuple[Iterator[Tuple['Commit', 'Commit']]]]: - for x in inp[1]: - if not isinstance(x, tuple) and len(x) != 2: - if all(isinstance(inner, Commit) for inner in x): - continue - return True - - ret = super(Commit, self).traverse(predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge) - ret_tup = itertools.tee(ret, 2) - assert is_commit_traversed(ret_tup), f"{[type(x) for x in list(ret_tup[0])]}" - return ret_tup[0] - """ - return cast(Union[Iterator[T_TIobj], - Iterator[Tuple[Union[None, T_TIobj], T_TIobj]]], - super(TraversableIterableObj, self)._traverse( - predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge # type: ignore - )) From 481f672baab666d6e2f81e9288a5f3c42c884a8e Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 17:56:06 +0100 Subject: [PATCH 0771/2375] Add __future__.annotations to repo/base.py --- git/objects/util.py | 4 +--- git/refs/symbolic.py | 12 ++++++++---- git/repo/__init__.py | 2 +- git/repo/base.py | 9 +++++---- git/util.py | 2 +- pyproject.toml | 3 ++- 6 files changed, 18 insertions(+), 14 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index 0b843301a..16d4c0ac8 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -187,9 +187,7 @@ def parse_date(string_date: Union[str, datetime]) -> Tuple[int, int]: offset = -int(utcoffset.total_seconds()) return int(string_date.astimezone(utc).timestamp()), offset else: - # should just return timestamp, 0? - return int(string_date.astimezone(utc).timestamp()), 0 - # raise ValueError(f"string_date datetime object without tzinfo, {string_date}") + raise ValueError(f"string_date datetime object without tzinfo, {string_date}") # git time try: diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 1c56c043b..238be8394 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -72,12 +72,13 @@ def __str__(self) -> str: def __repr__(self) -> str: return '' % (self.__class__.__name__, self.path) - def __eq__(self, other: Any) -> bool: + def __eq__(self, other: object) -> bool: if hasattr(other, 'path'): + other = cast(SymbolicReference, other) return self.path == other.path return False - def __ne__(self, other: Any) -> bool: + def __ne__(self, other: object) -> bool: return not (self == other) def __hash__(self) -> int: @@ -364,8 +365,9 @@ def set_reference(self, ref: Union[Commit_ish, 'SymbolicReference', str], return self # aliased reference + reference: Union['Head', 'TagReference', 'RemoteReference', 'Reference'] reference = property(_get_reference, set_reference, doc="Returns the Reference we point to") # type: ignore - ref: Union['Head', 'TagReference', 'RemoteReference', 'Reference'] = reference # type: ignore + ref = reference def is_valid(self) -> bool: """ @@ -699,7 +701,9 @@ def from_path(cls, repo: 'Repo', path: PathLike) -> Union['Head', 'TagReference' instance = ref_type(repo, path) if instance.__class__ == SymbolicReference and instance.is_detached: raise ValueError("SymbolRef was detached, we drop it") - return instance + else: + assert isinstance(instance, Reference), "instance should be Reference or subtype" + return instance except ValueError: pass # END exception handling diff --git a/git/repo/__init__.py b/git/repo/__init__.py index 712df60de..23c18db85 100644 --- a/git/repo/__init__.py +++ b/git/repo/__init__.py @@ -1,3 +1,3 @@ """Initialize the Repo package""" # flake8: noqa -from .base import * +from .base import Repo as Repo diff --git a/git/repo/base.py b/git/repo/base.py index 2609bf557..6708872ed 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -3,6 +3,7 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php +from __future__ import annotations import logging import os import re @@ -384,13 +385,13 @@ def create_submodule(self, *args: Any, **kwargs: Any) -> Submodule: :return: created submodules""" return Submodule.add(self, *args, **kwargs) - def iter_submodules(self, *args: Any, **kwargs: Any) -> Iterator: + def iter_submodules(self, *args: Any, **kwargs: Any) -> Iterator[Submodule]: """An iterator yielding Submodule instances, see Traversable interface for a description of args and kwargs :return: Iterator""" return RootModule(self).traverse(*args, **kwargs) - def submodule_update(self, *args: Any, **kwargs: Any) -> Iterator: + def submodule_update(self, *args: Any, **kwargs: Any) -> Iterator[Submodule]: """Update the submodules, keeping the repository consistent as it will take the previous state into consideration. For more information, please see the documentation of RootModule.update""" @@ -774,7 +775,7 @@ def _get_untracked_files(self, *args: Any, **kwargs: Any) -> List[str]: finalize_process(proc) return untracked_files - def ignored(self, *paths: PathLike) -> List[PathLike]: + def ignored(self, *paths: PathLike) -> List[str]: """Checks if paths are ignored via .gitignore Doing so using the "git check-ignore" method. @@ -782,7 +783,7 @@ def ignored(self, *paths: PathLike) -> List[PathLike]: :return: subset of those paths which are ignored """ try: - proc = self.git.check_ignore(*paths) + proc: str = self.git.check_ignore(*paths) except GitCommandError: return [] return proc.replace("\\\\", "\\").replace('"', "").split("\n") diff --git a/git/util.py b/git/util.py index c20be6eb6..4f82219e6 100644 --- a/git/util.py +++ b/git/util.py @@ -70,7 +70,7 @@ # Most of these are unused here, but are for use by git-python modules so these # don't see gitdb all the time. Flake of course doesn't like it. __all__ = ["stream_copy", "join_path", "to_native_path_linux", - "join_path_native", "Stats", "IndexFileSHA1Writer", "Iterable", "IterableList", + "join_path_native", "Stats", "IndexFileSHA1Writer", "IterableObj", "IterableList", "BlockingLockFile", "LockFile", 'Actor', 'get_user_id', 'assure_directory_exists', 'RemoteProgress', 'CallableRemoteProgress', 'rmtree', 'unbare_repo', 'HIDE_WINDOWS_KNOWN_ERRORS'] diff --git a/pyproject.toml b/pyproject.toml index 434880c79..102b6fdc4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,10 +22,11 @@ filterwarnings = 'ignore::DeprecationWarning' disallow_untyped_defs = true no_implicit_optional = true warn_redundant_casts = true -implicit_reexport = true # warn_unused_ignores = true warn_unreachable = true show_error_codes = true +implicit_reexport = true +# strict = true # TODO: remove when 'gitdb' is fully annotated [[tool.mypy.overrides]] From 9de7310f1a2bfcb90ca5c119321037d5ea97b24e Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 18:14:40 +0100 Subject: [PATCH 0772/2375] Minor type fixes --- git/refs/symbolic.py | 7 ++++--- git/remote.py | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 238be8394..0c0fa4045 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -285,7 +285,7 @@ def set_object(self, object: Union[Commit_ish, 'SymbolicReference', str], logmsg commit = property(_get_commit, set_commit, doc="Query or set commits directly") # type: ignore object = property(_get_object, set_object, doc="Return the object our ref currently refers to") # type: ignore - def _get_reference(self) -> 'Reference': + def _get_reference(self) -> 'SymbolicReference': """:return: Reference Object we point to :raise TypeError: If this symbolic reference is detached, hence it doesn't point to a reference, but to a commit""" @@ -683,7 +683,7 @@ def iter_items(cls: Type[T_References], repo: 'Repo', common_path: Union[PathLik return (r for r in cls._iter_items(repo, common_path) if r.__class__ == SymbolicReference or not r.is_detached) @classmethod - def from_path(cls, repo: 'Repo', path: PathLike) -> Union['Head', 'TagReference', 'Reference']: + def from_path(cls: Type[T_References], repo: 'Repo', path: PathLike) -> T_References: """ :param path: full .git-directory-relative path name to the Reference to instantiate :note: use to_full_path() if you only have a partial path of a known Reference Type @@ -698,12 +698,13 @@ def from_path(cls, repo: 'Repo', path: PathLike) -> Union['Head', 'TagReference' from . import HEAD, Head, RemoteReference, TagReference, Reference for ref_type in (HEAD, Head, RemoteReference, TagReference, Reference, SymbolicReference): try: + instance: T_References instance = ref_type(repo, path) if instance.__class__ == SymbolicReference and instance.is_detached: raise ValueError("SymbolRef was detached, we drop it") else: - assert isinstance(instance, Reference), "instance should be Reference or subtype" return instance + except ValueError: pass # END exception handling diff --git a/git/remote.py b/git/remote.py index c141519a0..3888506fd 100644 --- a/git/remote.py +++ b/git/remote.py @@ -632,7 +632,7 @@ def stale_refs(self) -> IterableList[Reference]: as well. This is a fix for the issue described here: https://github.com/gitpython-developers/GitPython/issues/260 """ - out_refs: IterableList[RemoteReference] = IterableList(RemoteReference._id_attribute_, "%s/" % self.name) + out_refs: IterableList[Reference] = IterableList(RemoteReference._id_attribute_, "%s/" % self.name) for line in self.repo.git.remote("prune", "--dry-run", self).splitlines()[2:]: # expecting # * [would prune] origin/new_branch @@ -642,7 +642,7 @@ def stale_refs(self) -> IterableList[Reference]: ref_name = line.replace(token, "") # sometimes, paths start with a full ref name, like refs/tags/foo, see #260 if ref_name.startswith(Reference._common_path_default + '/'): - out_refs.append(SymbolicReference.from_path(self.repo, ref_name)) + out_refs.append(Reference.from_path(self.repo, ref_name)) else: fqhn = "%s/%s" % (RemoteReference._common_path_default, ref_name) out_refs.append(RemoteReference(self.repo, fqhn)) From f34a39f206b5e2d408d4d47b0cc2012775d00917 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 18:25:20 +0100 Subject: [PATCH 0773/2375] Test new union syntax (Pep604) --- git/repo/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/repo/base.py b/git/repo/base.py index 6708872ed..b7eecbc38 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -795,7 +795,7 @@ def active_branch(self) -> Head: # reveal_type(self.head.reference) # => Reference return self.head.reference - def blame_incremental(self, rev: Union[str, HEAD], file: str, **kwargs: Any) -> Iterator['BlameEntry']: + def blame_incremental(self, rev: str | HEAD, file: str, **kwargs: Any) -> Iterator['BlameEntry']: """Iterator for blame information for the given file at the given revision. Unlike .blame(), this does not return the actual file's contents, only From 4dd06c3e43bf3ccaf592ffa30120501ab4e8b58c Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 18:33:26 +0100 Subject: [PATCH 0774/2375] Test trailing comma in args (>py3.6?) --- git/repo/base.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index b7eecbc38..b9399f623 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -38,7 +38,7 @@ # typing ------------------------------------------------------ -from git.types import TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish +from git.types import TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish, assert_never from typing import (Any, BinaryIO, Callable, Dict, Iterator, List, Mapping, Optional, Sequence, TextIO, Tuple, Type, Union, @@ -481,10 +481,12 @@ def _get_config_path(self, config_level: Lit_config_levels) -> str: raise NotADirectoryError else: return osp.normpath(osp.join(repo_dir, "config")) + else: - raise ValueError("Invalid configuration level: %r" % config_level) + assert_never(config_level, # type:ignore[unreachable] + ValueError(f"Invalid configuration level: {config_level!r}")) - def config_reader(self, config_level: Optional[Lit_config_levels] = None + def config_reader(self, config_level: Optional[Lit_config_levels] = None, ) -> GitConfigParser: """ :return: From 94ae0c5839cf8de3b67c8dfd449ad9cef696aefb Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 22:15:18 +0100 Subject: [PATCH 0775/2375] Test Dataclass in repo.base.blame() --- git/repo/base.py | 103 ++++++++++++++++++++++++++++++----------------- git/types.py | 2 +- 2 files changed, 67 insertions(+), 38 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index b9399f623..bedd6a088 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -7,6 +7,7 @@ import logging import os import re +from dataclasses import dataclass import shlex import warnings from gitdb.db.loose import LooseObjectDB @@ -41,7 +42,7 @@ from git.types import TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish, assert_never from typing import (Any, BinaryIO, Callable, Dict, Iterator, List, Mapping, Optional, Sequence, - TextIO, Tuple, Type, Union, + TextIO, Tuple, Type, TypedDict, Union, NamedTuple, cast, TYPE_CHECKING) from git.types import ConfigLevels_Tup @@ -53,7 +54,6 @@ from git.objects.submodule.base import UpdateProgress from git.remote import RemoteProgress - # ----------------------------------------------------------- log = logging.getLogger(__name__) @@ -874,7 +874,7 @@ def blame_incremental(self, rev: str | HEAD, file: str, **kwargs: Any) -> Iterat range(orig_lineno, orig_lineno + num_lines)) def blame(self, rev: Union[str, HEAD], file: str, incremental: bool = False, **kwargs: Any - ) -> Union[List[List[Union[Optional['Commit'], List[str]]]], Optional[Iterator[BlameEntry]]]: + ) -> List[List[Commit | List[str | bytes] | None]] | Iterator[BlameEntry] | None: """The blame information for the given file at the given revision. :param rev: revision specifier, see git-rev-parse for viable options. @@ -886,25 +886,52 @@ def blame(self, rev: Union[str, HEAD], file: str, incremental: bool = False, **k if incremental: return self.blame_incremental(rev, file, **kwargs) - data = self.git.blame(rev, '--', file, p=True, stdout_as_string=False, **kwargs) - commits: Dict[str, TBD] = {} - blames: List[List[Union[Optional['Commit'], List[str]]]] = [] - - info: Dict[str, TBD] = {} # use Any until TypedDict available + data: bytes = self.git.blame(rev, '--', file, p=True, stdout_as_string=False, **kwargs) + commits: Dict[str, Commit] = {} + blames: List[List[Commit | List[str | bytes] | None]] = [] + + class InfoTC(TypedDict, total=False): + sha: str + id: str + filename: str + summary: str + author: str + author_email: str + author_date: int + committer: str + committer_email: str + committer_date: int + + @dataclass + class InfoDC(Dict[str, Union[str, int]]): + sha: str = '' + id: str = '' + filename: str = '' + summary: str = '' + author: str = '' + author_email: str = '' + author_date: int = 0 + committer: str = '' + committer_email: str = '' + committer_date: int = 0 + + # info: InfoTD = {} + info = InfoDC() keepends = True - for line in data.splitlines(keepends): + for line_bytes in data.splitlines(keepends): try: - line = line.rstrip().decode(defenc) + line_str = line_bytes.rstrip().decode(defenc) except UnicodeDecodeError: firstpart = '' + parts = [''] is_binary = True else: # As we don't have an idea when the binary data ends, as it could contain multiple newlines # in the process. So we rely on being able to decode to tell us what is is. # This can absolutely fail even on text files, but even if it does, we should be fine treating it # as binary instead - parts = self.re_whitespace.split(line, 1) + parts = self.re_whitespace.split(line_str, 1) firstpart = parts[0] is_binary = False # end handle decode of line @@ -916,10 +943,10 @@ def blame(self, rev: Union[str, HEAD], file: str, incremental: bool = False, **k # another line of blame with the same data digits = parts[-1].split(" ") if len(digits) == 3: - info = {'id': firstpart} + info.id = firstpart blames.append([None, []]) - elif info['id'] != firstpart: - info = {'id': firstpart} + elif info.id != firstpart: + info.id = firstpart blames.append([commits.get(firstpart), []]) # END blame data initialization else: @@ -936,9 +963,9 @@ def blame(self, rev: Union[str, HEAD], file: str, incremental: bool = False, **k # committer-tz -0700 - IGNORED BY US role = m.group(0) if firstpart.endswith('-mail'): - info["%s_email" % role] = parts[-1] + info[f"{role}_email"] = parts[-1] elif firstpart.endswith('-time'): - info["%s_date" % role] = int(parts[-1]) + info[f"{role}_date"] = int(parts[-1]) elif role == firstpart: info[role] = parts[-1] # END distinguish mail,time,name @@ -953,38 +980,40 @@ def blame(self, rev: Union[str, HEAD], file: str, incremental: bool = False, **k info['summary'] = parts[-1] elif firstpart == '': if info: - sha = info['id'] + sha = info.id c = commits.get(sha) if c is None: c = Commit(self, hex_to_bin(sha), - author=Actor._from_string(info['author'] + ' ' + info['author_email']), - authored_date=info['author_date'], + author=Actor._from_string(info.author + ' ' + info.author_email), + authored_date=info.author_date, committer=Actor._from_string( - info['committer'] + ' ' + info['committer_email']), - committed_date=info['committer_date']) + info.committer + ' ' + info.committer_email), + committed_date=info.committer_date) commits[sha] = c + blames[-1][0] = c # END if commit objects needs initial creation - if not is_binary: - if line and line[0] == '\t': - line = line[1:] - else: - # NOTE: We are actually parsing lines out of binary data, which can lead to the - # binary being split up along the newline separator. We will append this to the blame - # we are currently looking at, even though it should be concatenated with the last line - # we have seen. - pass - # end handle line contents - blames[-1][0] = c if blames[-1][1] is not None: - blames[-1][1].append(line) - info = {'id': sha} + if not is_binary: + if line_str and line_str[0] == '\t': + line_str = line_str[1:] + + blames[-1][1].append(line_str) + else: + # NOTE: We are actually parsing lines out of binary data, which can lead to the + # binary being split up along the newline separator. We will append this to the + # blame we are currently looking at, even though it should be concatenated with + # the last line we have seen. + blames[-1][1].append(line_bytes) + # end handle line contents + + info.id = sha # END if we collected commit info # END distinguish filename,summary,rest # END distinguish author|committer vs filename,summary,rest # END distinguish hexsha vs other information return blames - @classmethod + @ classmethod def init(cls, path: Union[PathLike, None] = None, mkdir: bool = True, odbt: Type[GitCmdObjectDB] = GitCmdObjectDB, expand_vars: bool = True, **kwargs: Any) -> 'Repo': """Initialize a git repository at the given path if specified @@ -1023,7 +1052,7 @@ def init(cls, path: Union[PathLike, None] = None, mkdir: bool = True, odbt: Type git.init(**kwargs) return cls(path, odbt=odbt) - @classmethod + @ classmethod def _clone(cls, git: 'Git', url: PathLike, path: PathLike, odb_default_type: Type[GitCmdObjectDB], progress: Union['RemoteProgress', 'UpdateProgress', Callable[..., 'RemoteProgress'], None] = None, multi_options: Optional[List[str]] = None, **kwargs: Any @@ -1101,7 +1130,7 @@ def clone(self, path: PathLike, progress: Optional[Callable] = None, :return: ``git.Repo`` (the newly cloned repo)""" return self._clone(self.git, self.common_dir, path, type(self.odb), progress, multi_options, **kwargs) - @classmethod + @ classmethod def clone_from(cls, url: PathLike, to_path: PathLike, progress: Optional[Callable] = None, env: Optional[Mapping[str, Any]] = None, multi_options: Optional[List[str]] = None, **kwargs: Any) -> 'Repo': diff --git a/git/types.py b/git/types.py index ccaffef3e..64bf3d96d 100644 --- a/git/types.py +++ b/git/types.py @@ -23,7 +23,7 @@ PathLike = Union[str, os.PathLike] elif sys.version_info[:2] >= (3, 9): # os.PathLike only becomes subscriptable from Python 3.9 onwards - PathLike = Union[str, 'os.PathLike[str]'] # forward ref as pylance complains unless editing with py3.9+ + PathLike = Union[str, os.PathLike] if TYPE_CHECKING: from git.repo import Repo From a3f5b1308f3340375832f1f2254b41c1ecbbc17e Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 22:18:28 +0100 Subject: [PATCH 0776/2375] Test Dataclass in repo.base.blame() 2 --- git/repo/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index bedd6a088..a9d2e5bef 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -42,10 +42,10 @@ from git.types import TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish, assert_never from typing import (Any, BinaryIO, Callable, Dict, Iterator, List, Mapping, Optional, Sequence, - TextIO, Tuple, Type, TypedDict, Union, + TextIO, Tuple, Type, Union, NamedTuple, cast, TYPE_CHECKING) -from git.types import ConfigLevels_Tup +from git.types import ConfigLevels_Tup, TypedDict if TYPE_CHECKING: from git.util import IterableList From a2a36e06942d7a146d6640f275d4a4ec84e187c0 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 22:26:14 +0100 Subject: [PATCH 0777/2375] Test Dataclass in repo.base.blame() 3 --- git/repo/base.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index a9d2e5bef..0f231e5f2 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -890,7 +890,7 @@ def blame(self, rev: Union[str, HEAD], file: str, incremental: bool = False, **k commits: Dict[str, Commit] = {} blames: List[List[Commit | List[str | bytes] | None]] = [] - class InfoTC(TypedDict, total=False): + class InfoTD(TypedDict, total=False): sha: str id: str filename: str @@ -992,19 +992,20 @@ class InfoDC(Dict[str, Union[str, int]]): commits[sha] = c blames[-1][0] = c # END if commit objects needs initial creation - if blames[-1][1] is not None: - if not is_binary: - if line_str and line_str[0] == '\t': - line_str = line_str[1:] - - blames[-1][1].append(line_str) - else: - # NOTE: We are actually parsing lines out of binary data, which can lead to the - # binary being split up along the newline separator. We will append this to the - # blame we are currently looking at, even though it should be concatenated with - # the last line we have seen. - blames[-1][1].append(line_bytes) + if not is_binary: + if line_str and line_str[0] == '\t': + line_str = line_str[1:] + line_AnyStr: str | bytes = line_str + else: + line_AnyStr = line_bytes + # NOTE: We are actually parsing lines out of binary data, which can lead to the + # binary being split up along the newline separator. We will append this to the + # blame we are currently looking at, even though it should be concatenated with + # the last line we have seen. + # end handle line contents + if blames[-1][1] is not None: + blames[-1][1].append(line_AnyStr) info.id = sha # END if we collected commit info From ed137cbddf69ae11e5287a9e96e1df1a6e71250d Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 22:35:03 +0100 Subject: [PATCH 0778/2375] Test TypedDict in repo.base.blame() 2 --- git/repo/base.py | 80 ++++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 44 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index 0f231e5f2..0a12d9594 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -7,7 +7,6 @@ import logging import os import re -from dataclasses import dataclass import shlex import warnings from gitdb.db.loose import LooseObjectDB @@ -902,21 +901,7 @@ class InfoTD(TypedDict, total=False): committer_email: str committer_date: int - @dataclass - class InfoDC(Dict[str, Union[str, int]]): - sha: str = '' - id: str = '' - filename: str = '' - summary: str = '' - author: str = '' - author_email: str = '' - author_date: int = 0 - committer: str = '' - committer_email: str = '' - committer_date: int = 0 - - # info: InfoTD = {} - info = InfoDC() + info: InfoTD = {} keepends = True for line_bytes in data.splitlines(keepends): @@ -943,10 +928,10 @@ class InfoDC(Dict[str, Union[str, int]]): # another line of blame with the same data digits = parts[-1].split(" ") if len(digits) == 3: - info.id = firstpart + info = {'id': firstpart} blames.append([None, []]) - elif info.id != firstpart: - info.id = firstpart + elif info['id'] != firstpart: + info = {'id': firstpart} blames.append([commits.get(firstpart), []]) # END blame data initialization else: @@ -962,12 +947,20 @@ class InfoDC(Dict[str, Union[str, int]]): # committer-time 1192271832 # committer-tz -0700 - IGNORED BY US role = m.group(0) - if firstpart.endswith('-mail'): - info[f"{role}_email"] = parts[-1] - elif firstpart.endswith('-time'): - info[f"{role}_date"] = int(parts[-1]) - elif role == firstpart: - info[role] = parts[-1] + if role == 'author': + if firstpart.endswith('-mail'): + info["author_email"] = parts[-1] + elif firstpart.endswith('-time'): + info["author_date"] = int(parts[-1]) + elif role == firstpart: + info["author"] = parts[-1] + elif role == 'committer': + if firstpart.endswith('-mail'): + info["committer_email"] = parts[-1] + elif firstpart.endswith('-time'): + info["committer_date"] = int(parts[-1]) + elif role == firstpart: + info["committer"] = parts[-1] # END distinguish mail,time,name else: # handle @@ -980,34 +973,33 @@ class InfoDC(Dict[str, Union[str, int]]): info['summary'] = parts[-1] elif firstpart == '': if info: - sha = info.id + sha = info['id'] c = commits.get(sha) if c is None: c = Commit(self, hex_to_bin(sha), - author=Actor._from_string(info.author + ' ' + info.author_email), - authored_date=info.author_date, + author=Actor._from_string(info['author'] + ' ' + info['author_email']), + authored_date=info['author_date'], committer=Actor._from_string( - info.committer + ' ' + info.committer_email), - committed_date=info.committer_date) + info['committer'] + ' ' + info['committer_email']), + committed_date=info['committer_date']) commits[sha] = c blames[-1][0] = c # END if commit objects needs initial creation - if not is_binary: - if line_str and line_str[0] == '\t': - line_str = line_str[1:] - line_AnyStr: str | bytes = line_str - else: - line_AnyStr = line_bytes - # NOTE: We are actually parsing lines out of binary data, which can lead to the - # binary being split up along the newline separator. We will append this to the - # blame we are currently looking at, even though it should be concatenated with - # the last line we have seen. - - # end handle line contents if blames[-1][1] is not None: - blames[-1][1].append(line_AnyStr) + if not is_binary: + if line_str and line_str[0] == '\t': + line_str = line_str[1:] + + blames[-1][1].append(line_str) + else: + # NOTE: We are actually parsing lines out of binary data, which can lead to the + # binary being split up along the newline separator. We will append this to the + # blame we are currently looking at, even though it should be concatenated with + # the last line we have seen. + blames[-1][1].append(line_bytes) + # end handle line contents - info.id = sha + info = {'id': sha} # END if we collected commit info # END distinguish filename,summary,rest # END distinguish author|committer vs filename,summary,rest From e4761ff67ef14df27026bbe9e215b9ddf5e5b3a5 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 22:45:19 +0100 Subject: [PATCH 0779/2375] Test TypedDict in repo.base.blame() 1 --- git/repo/base.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index 0a12d9594..58b9d5c2c 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -909,7 +909,7 @@ class InfoTD(TypedDict, total=False): line_str = line_bytes.rstrip().decode(defenc) except UnicodeDecodeError: firstpart = '' - parts = [''] + parts = [] is_binary = True else: # As we don't have an idea when the binary data ends, as it could contain multiple newlines @@ -983,20 +983,21 @@ class InfoTD(TypedDict, total=False): info['committer'] + ' ' + info['committer_email']), committed_date=info['committer_date']) commits[sha] = c - blames[-1][0] = c + blames[-1][0] = c # END if commit objects needs initial creation + if not is_binary: + if line_str and line_str[0] == '\t': + line_str = line_str[1:] + else: + pass + # NOTE: We are actually parsing lines out of binary data, which can lead to the + # binary being split up along the newline separator. We will append this to the + # blame we are currently looking at, even though it should be concatenated with + # the last line we have seen. + if blames[-1][1] is not None: - if not is_binary: - if line_str and line_str[0] == '\t': - line_str = line_str[1:] - - blames[-1][1].append(line_str) - else: - # NOTE: We are actually parsing lines out of binary data, which can lead to the - # binary being split up along the newline separator. We will append this to the - # blame we are currently looking at, even though it should be concatenated with - # the last line we have seen. - blames[-1][1].append(line_bytes) + blames[-1][1].append(line_str) + info = {'id': sha} # end handle line contents info = {'id': sha} From 1aaa7048ddecb4509e1c279e28de5ef71477e71f Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 22:50:11 +0100 Subject: [PATCH 0780/2375] Test Dataclass in repo.base.blame() 4 --- git/repo/base.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index 58b9d5c2c..2bfc46774 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -985,22 +985,21 @@ class InfoTD(TypedDict, total=False): commits[sha] = c blames[-1][0] = c # END if commit objects needs initial creation - if not is_binary: - if line_str and line_str[0] == '\t': - line_str = line_str[1:] - else: - pass - # NOTE: We are actually parsing lines out of binary data, which can lead to the - # binary being split up along the newline separator. We will append this to the - # blame we are currently looking at, even though it should be concatenated with - # the last line we have seen. if blames[-1][1] is not None: - blames[-1][1].append(line_str) + if not is_binary: + if line_str and line_str[0] == '\t': + line_str = line_str[1:] + blames[-1][1].append(line_str) + else: + blames[-1][1].append(line_bytes) + # NOTE: We are actually parsing lines out of binary data, which can lead to the + # binary being split up along the newline separator. We will append this to the + # blame we are currently looking at, even though it should be concatenated with + # the last line we have seen. info = {'id': sha} # end handle line contents - info = {'id': sha} # END if we collected commit info # END distinguish filename,summary,rest # END distinguish author|committer vs filename,summary,rest From bc9bcf51ef68385895d8cdbc76098d6b493cd1b6 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 22:52:10 +0100 Subject: [PATCH 0781/2375] Test Dataclass in repo.base.blame() 5 --- git/repo/base.py | 67 ++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index 2bfc46774..a0aee3229 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -7,6 +7,7 @@ import logging import os import re +from dataclasses import dataclass import shlex import warnings from gitdb.db.loose import LooseObjectDB @@ -41,10 +42,10 @@ from git.types import TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish, assert_never from typing import (Any, BinaryIO, Callable, Dict, Iterator, List, Mapping, Optional, Sequence, - TextIO, Tuple, Type, Union, + TextIO, Tuple, Type, TypedDict, Union, NamedTuple, cast, TYPE_CHECKING) -from git.types import ConfigLevels_Tup, TypedDict +from git.types import ConfigLevels_Tup if TYPE_CHECKING: from git.util import IterableList @@ -889,7 +890,7 @@ def blame(self, rev: Union[str, HEAD], file: str, incremental: bool = False, **k commits: Dict[str, Commit] = {} blames: List[List[Commit | List[str | bytes] | None]] = [] - class InfoTD(TypedDict, total=False): + class InfoTC(TypedDict, total=False): sha: str id: str filename: str @@ -901,7 +902,21 @@ class InfoTD(TypedDict, total=False): committer_email: str committer_date: int - info: InfoTD = {} + @dataclass + class InfoDC(Dict[str, Union[str, int]]): + sha: str = '' + id: str = '' + filename: str = '' + summary: str = '' + author: str = '' + author_email: str = '' + author_date: int = 0 + committer: str = '' + committer_email: str = '' + committer_date: int = 0 + + # info: InfoTD = {} + info = InfoDC() keepends = True for line_bytes in data.splitlines(keepends): @@ -909,7 +924,7 @@ class InfoTD(TypedDict, total=False): line_str = line_bytes.rstrip().decode(defenc) except UnicodeDecodeError: firstpart = '' - parts = [] + parts = [''] is_binary = True else: # As we don't have an idea when the binary data ends, as it could contain multiple newlines @@ -928,10 +943,10 @@ class InfoTD(TypedDict, total=False): # another line of blame with the same data digits = parts[-1].split(" ") if len(digits) == 3: - info = {'id': firstpart} + info.id = firstpart blames.append([None, []]) - elif info['id'] != firstpart: - info = {'id': firstpart} + elif info.id != firstpart: + info.id = firstpart blames.append([commits.get(firstpart), []]) # END blame data initialization else: @@ -947,20 +962,12 @@ class InfoTD(TypedDict, total=False): # committer-time 1192271832 # committer-tz -0700 - IGNORED BY US role = m.group(0) - if role == 'author': - if firstpart.endswith('-mail'): - info["author_email"] = parts[-1] - elif firstpart.endswith('-time'): - info["author_date"] = int(parts[-1]) - elif role == firstpart: - info["author"] = parts[-1] - elif role == 'committer': - if firstpart.endswith('-mail'): - info["committer_email"] = parts[-1] - elif firstpart.endswith('-time'): - info["committer_date"] = int(parts[-1]) - elif role == firstpart: - info["committer"] = parts[-1] + if firstpart.endswith('-mail'): + info[f"{role}_email"] = parts[-1] + elif firstpart.endswith('-time'): + info[f"{role}_date"] = int(parts[-1]) + elif role == firstpart: + info[role] = parts[-1] # END distinguish mail,time,name else: # handle @@ -973,33 +980,33 @@ class InfoTD(TypedDict, total=False): info['summary'] = parts[-1] elif firstpart == '': if info: - sha = info['id'] + sha = info.id c = commits.get(sha) if c is None: c = Commit(self, hex_to_bin(sha), - author=Actor._from_string(info['author'] + ' ' + info['author_email']), - authored_date=info['author_date'], + author=Actor._from_string(info.author + ' ' + info.author_email), + authored_date=info.author_date, committer=Actor._from_string( - info['committer'] + ' ' + info['committer_email']), - committed_date=info['committer_date']) + info.committer + ' ' + info.committer_email), + committed_date=info.committer_date) commits[sha] = c blames[-1][0] = c # END if commit objects needs initial creation - if blames[-1][1] is not None: if not is_binary: if line_str and line_str[0] == '\t': line_str = line_str[1:] + blames[-1][1].append(line_str) else: - blames[-1][1].append(line_bytes) # NOTE: We are actually parsing lines out of binary data, which can lead to the # binary being split up along the newline separator. We will append this to the # blame we are currently looking at, even though it should be concatenated with # the last line we have seen. - info = {'id': sha} + blames[-1][1].append(line_bytes) # end handle line contents + info.id = sha # END if we collected commit info # END distinguish filename,summary,rest # END distinguish author|committer vs filename,summary,rest From ad417ba77c98a39c2d5b3b3a74eb0a1ca17f0ccc Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 22:54:31 +0100 Subject: [PATCH 0782/2375] Test Dataclass in repo.base.blame() 6 --- git/repo/base.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index a0aee3229..54409b6ae 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -42,10 +42,10 @@ from git.types import TBD, PathLike, Lit_config_levels, Commit_ish, Tree_ish, assert_never from typing import (Any, BinaryIO, Callable, Dict, Iterator, List, Mapping, Optional, Sequence, - TextIO, Tuple, Type, TypedDict, Union, + TextIO, Tuple, Type, Union, NamedTuple, cast, TYPE_CHECKING) -from git.types import ConfigLevels_Tup +from git.types import ConfigLevels_Tup, TypedDict if TYPE_CHECKING: from git.util import IterableList @@ -984,11 +984,10 @@ class InfoDC(Dict[str, Union[str, int]]): c = commits.get(sha) if c is None: c = Commit(self, hex_to_bin(sha), - author=Actor._from_string(info.author + ' ' + info.author_email), + author=Actor._from_string(f"{info.author} {info.author_email}"), authored_date=info.author_date, - committer=Actor._from_string( - info.committer + ' ' + info.committer_email), - committed_date=info.committer_date) + committer=Actor._from_string(f"{info.committer} {info.committer_email}"), + committed_date=info.committer_date) commits[sha] = c blames[-1][0] = c # END if commit objects needs initial creation From ecb1f79cdb5198a10e099c2b7cd27aff69105ea9 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 23:04:43 +0100 Subject: [PATCH 0783/2375] Choose TypedDict! --- git/repo/base.py | 69 ++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index 54409b6ae..e06e4eac4 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -7,7 +7,6 @@ import logging import os import re -from dataclasses import dataclass import shlex import warnings from gitdb.db.loose import LooseObjectDB @@ -890,7 +889,7 @@ def blame(self, rev: Union[str, HEAD], file: str, incremental: bool = False, **k commits: Dict[str, Commit] = {} blames: List[List[Commit | List[str | bytes] | None]] = [] - class InfoTC(TypedDict, total=False): + class InfoTD(TypedDict, total=False): sha: str id: str filename: str @@ -902,21 +901,7 @@ class InfoTC(TypedDict, total=False): committer_email: str committer_date: int - @dataclass - class InfoDC(Dict[str, Union[str, int]]): - sha: str = '' - id: str = '' - filename: str = '' - summary: str = '' - author: str = '' - author_email: str = '' - author_date: int = 0 - committer: str = '' - committer_email: str = '' - committer_date: int = 0 - - # info: InfoTD = {} - info = InfoDC() + info: InfoTD = {} keepends = True for line_bytes in data.splitlines(keepends): @@ -924,7 +909,7 @@ class InfoDC(Dict[str, Union[str, int]]): line_str = line_bytes.rstrip().decode(defenc) except UnicodeDecodeError: firstpart = '' - parts = [''] + parts = [] is_binary = True else: # As we don't have an idea when the binary data ends, as it could contain multiple newlines @@ -943,10 +928,10 @@ class InfoDC(Dict[str, Union[str, int]]): # another line of blame with the same data digits = parts[-1].split(" ") if len(digits) == 3: - info.id = firstpart + info = {'id': firstpart} blames.append([None, []]) - elif info.id != firstpart: - info.id = firstpart + elif info['id'] != firstpart: + info = {'id': firstpart} blames.append([commits.get(firstpart), []]) # END blame data initialization else: @@ -962,12 +947,20 @@ class InfoDC(Dict[str, Union[str, int]]): # committer-time 1192271832 # committer-tz -0700 - IGNORED BY US role = m.group(0) - if firstpart.endswith('-mail'): - info[f"{role}_email"] = parts[-1] - elif firstpart.endswith('-time'): - info[f"{role}_date"] = int(parts[-1]) - elif role == firstpart: - info[role] = parts[-1] + if role == 'author': + if firstpart.endswith('-mail'): + info["author_email"] = parts[-1] + elif firstpart.endswith('-time'): + info["author_date"] = int(parts[-1]) + elif role == firstpart: + info["author"] = parts[-1] + elif role == 'committer': + if firstpart.endswith('-mail'): + info["committer_email"] = parts[-1] + elif firstpart.endswith('-time'): + info["committer_date"] = int(parts[-1]) + elif role == firstpart: + info["committer"] = parts[-1] # END distinguish mail,time,name else: # handle @@ -980,32 +973,34 @@ class InfoDC(Dict[str, Union[str, int]]): info['summary'] = parts[-1] elif firstpart == '': if info: - sha = info.id + sha = info['id'] c = commits.get(sha) if c is None: c = Commit(self, hex_to_bin(sha), - author=Actor._from_string(f"{info.author} {info.author_email}"), - authored_date=info.author_date, - committer=Actor._from_string(f"{info.committer} {info.committer_email}"), - committed_date=info.committer_date) + author=Actor._from_string(f"{info['author']} {info['author_email']}"), + authored_date=info['author_date'], + committer=Actor._from_string( + f"{info['committer']} {info['committer_email']}"), + committed_date=info['committer_date']) commits[sha] = c blames[-1][0] = c # END if commit objects needs initial creation + if blames[-1][1] is not None: + line: str | bytes if not is_binary: if line_str and line_str[0] == '\t': line_str = line_str[1:] - - blames[-1][1].append(line_str) + line = line_str else: + line = line_bytes # NOTE: We are actually parsing lines out of binary data, which can lead to the # binary being split up along the newline separator. We will append this to the # blame we are currently looking at, even though it should be concatenated with # the last line we have seen. - blames[-1][1].append(line_bytes) - # end handle line contents + blames[-1][1].append(line) - info.id = sha + info = {'id': sha} # END if we collected commit info # END distinguish filename,summary,rest # END distinguish author|committer vs filename,summary,rest From 5aa8c3401a860974db0126dc030e74bbddf217eb Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 23:22:04 +0100 Subject: [PATCH 0784/2375] Improve type of repo.blame_incremental() --- git/repo/base.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index e06e4eac4..344e8a718 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -811,8 +811,8 @@ def blame_incremental(self, rev: str | HEAD, file: str, **kwargs: Any) -> Iterat should get a continuous range spanning all line numbers in the file. """ - data = self.git.blame(rev, '--', file, p=True, incremental=True, stdout_as_string=False, **kwargs) - commits: Dict[str, Commit] = {} + data: bytes = self.git.blame(rev, '--', file, p=True, incremental=True, stdout_as_string=False, **kwargs) + commits: Dict[bytes, Commit] = {} stream = (line for line in data.split(b'\n') if line) while True: @@ -820,15 +820,15 @@ def blame_incremental(self, rev: str | HEAD, file: str, **kwargs: Any) -> Iterat line = next(stream) # when exhausted, causes a StopIteration, terminating this function except StopIteration: return - split_line: Tuple[str, str, str, str] = line.split() - hexsha, orig_lineno_str, lineno_str, num_lines_str = split_line - lineno = int(lineno_str) - num_lines = int(num_lines_str) - orig_lineno = int(orig_lineno_str) + split_line = line.split() + hexsha, orig_lineno_b, lineno_b, num_lines_b = split_line + lineno = int(lineno_b) + num_lines = int(num_lines_b) + orig_lineno = int(orig_lineno_b) if hexsha not in commits: # Now read the next few lines and build up a dict of properties # for this commit - props = {} + props: Dict[bytes, bytes] = {} while True: try: line = next(stream) @@ -1126,7 +1126,7 @@ def clone(self, path: PathLike, progress: Optional[Callable] = None, @ classmethod def clone_from(cls, url: PathLike, to_path: PathLike, progress: Optional[Callable] = None, - env: Optional[Mapping[str, Any]] = None, + env: Optional[Mapping[str, str]] = None, multi_options: Optional[List[str]] = None, **kwargs: Any) -> 'Repo': """Create a clone from the given URL From 8b8aa16ee247c6ce403db7178d6c0f9c4ccd529c Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 23:30:27 +0100 Subject: [PATCH 0785/2375] Improve type of repo.currently_rebasing_on() --- git/repo/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index 344e8a718..c0229a844 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -1148,7 +1148,7 @@ def clone_from(cls, url: PathLike, to_path: PathLike, progress: Optional[Callabl return cls._clone(git, url, to_path, GitCmdObjectDB, progress, multi_options, **kwargs) def archive(self, ostream: Union[TextIO, BinaryIO], treeish: Optional[str] = None, - prefix: Optional[str] = None, **kwargs: Any) -> 'Repo': + prefix: Optional[str] = None, **kwargs: Any) -> Repo: """Archive the tree at the given revision. :param ostream: file compatible stream object to which the archive will be written as bytes @@ -1195,7 +1195,7 @@ def __repr__(self) -> str: clazz = self.__class__ return '<%s.%s %r>' % (clazz.__module__, clazz.__name__, self.git_dir) - def currently_rebasing_on(self) -> Union['SymbolicReference', Commit_ish, None]: + def currently_rebasing_on(self) -> Commit | None: """ :return: The commit which is currently being replayed while rebasing. From 39f12bd49a49b96d435c0ab7915bde6011d34f0f Mon Sep 17 00:00:00 2001 From: Eric Wieser Date: Tue, 3 Aug 2021 16:19:51 +0100 Subject: [PATCH 0786/2375] Do not call get_user_id if it is not needed On systems without any environment variables and no pwd module, gitpython crashes as it tries to read the environment variable before looking at its config. --- git/util.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/git/util.py b/git/util.py index 92d95379e..84d0b0156 100644 --- a/git/util.py +++ b/git/util.py @@ -704,7 +704,11 @@ def default_name() -> str: setattr(actor, attr, val) except KeyError: if config_reader is not None: - setattr(actor, attr, config_reader.get_value('user', cvar, default())) + try: + val = config_reader.get_value('user', cvar) + except Exception: + val = default() + setattr(actor, attr, val) # END config-reader handling if not getattr(actor, attr): setattr(actor, attr, default()) From 84232f7c71e41e56636f203eb26763a03ab6e945 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Tue, 3 Aug 2021 16:34:06 +0100 Subject: [PATCH 0787/2375] Add Typing :: Typed to setup.py --- doc/source/intro.rst | 2 +- setup.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/source/intro.rst b/doc/source/intro.rst index d7a18412c..4f22a0942 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -18,7 +18,7 @@ Requirements It should also work with older versions, but it may be that some operations involving remotes will not work as expected. * `GitDB`_ - a pure python git database implementation -* `typing_extensions`_ >= 3.10.0 +* `typing_extensions`_ >= 3.7.3.4 (if python < 3.10) .. _Python: https://www.python.org .. _Git: https://git-scm.com/ diff --git a/setup.py b/setup.py index f11132068..ae6319f9e 100755 --- a/setup.py +++ b/setup.py @@ -113,6 +113,7 @@ def build_py_modules(basedir: str, excludes: Sequence = ()) -> Sequence: "Operating System :: POSIX", "Operating System :: Microsoft :: Windows", "Operating System :: MacOS :: MacOS X", + "Typing:: Typed", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", From ff0ecf7ff56ea1e19f0c4e3be24b893049939916 Mon Sep 17 00:00:00 2001 From: Eric Wieser Date: Tue, 3 Aug 2021 16:43:36 +0100 Subject: [PATCH 0788/2375] Fix mypy --- git/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/config.py b/git/config.py index 011d0e0b1..d65360fe2 100644 --- a/git/config.py +++ b/git/config.py @@ -708,12 +708,12 @@ def read_only(self) -> bool: return self._read_only @overload - def get_value(self, section: str, option: str, default: str + def get_value(self, section: str, option: str, default: Optional[str] ) -> str: ... @overload - def get_value(self, section: str, option: str, default: float + def get_value(self, section: str, option: str, default: Optional[float] ) -> float: ... From 335e59dc2cece491a5c5d42396ce70d4ed0715b5 Mon Sep 17 00:00:00 2001 From: Eric Wieser Date: Tue, 3 Aug 2021 16:44:10 +0100 Subject: [PATCH 0789/2375] Update config.py --- git/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/config.py b/git/config.py index d65360fe2..3c08dd5fc 100644 --- a/git/config.py +++ b/git/config.py @@ -708,12 +708,12 @@ def read_only(self) -> bool: return self._read_only @overload - def get_value(self, section: str, option: str, default: Optional[str] + def get_value(self, section: str, option: str, default: Optional[str] = None ) -> str: ... @overload - def get_value(self, section: str, option: str, default: Optional[float] + def get_value(self, section: str, option: str, default: Optional[float] = None ) -> float: ... From 0b89bfe855f0faadf359efcfad8ae752d98c6032 Mon Sep 17 00:00:00 2001 From: Dominic Date: Tue, 3 Aug 2021 17:03:41 +0100 Subject: [PATCH 0790/2375] Add overload to get_value() --- git/config.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/git/config.py b/git/config.py index 293281d21..08e9a8e42 100644 --- a/git/config.py +++ b/git/config.py @@ -710,14 +710,13 @@ def read_only(self) -> bool: return self._read_only @overload - def get_value(self, section: str, option: str, default: str - ) -> str: - ... + def get_value(self, section: str, option: str, default: None = None) -> str: ... @overload - def get_value(self, section: str, option: str, default: float - ) -> float: - ... + def get_value(self, section: str, option: str, default: str) -> str: ... + + @overload + def get_value(self, section: str, option: str, default: float) -> float: ... def get_value(self, section: str, option: str, default: Union[int, float, str, bool, None] = None ) -> Union[int, float, str, bool]: From 9c7a44fddc3d69781eab975b2b58c2e338092116 Mon Sep 17 00:00:00 2001 From: Eric Wieser Date: Tue, 3 Aug 2021 17:12:49 +0100 Subject: [PATCH 0791/2375] Fix trailing whitespace and incorrect overload --- git/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/config.py b/git/config.py index 08e9a8e42..cf32d4ba1 100644 --- a/git/config.py +++ b/git/config.py @@ -710,12 +710,12 @@ def read_only(self) -> bool: return self._read_only @overload - def get_value(self, section: str, option: str, default: None = None) -> str: ... + def get_value(self, section: str, option: str, default: None = None) -> Union[int, float, str, bool]: ... @overload def get_value(self, section: str, option: str, default: str) -> str: ... - @overload + @overload def get_value(self, section: str, option: str, default: float) -> float: ... def get_value(self, section: str, option: str, default: Union[int, float, str, bool, None] = None From 994f387cec4848ab854a5c06ad092c2850a3bf73 Mon Sep 17 00:00:00 2001 From: Eric Wieser Date: Tue, 3 Aug 2021 17:15:59 +0100 Subject: [PATCH 0792/2375] Use get instead of get_value This won't try and do something silly like convert `username=1` to a number. --- git/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/util.py b/git/util.py index 4463b092d..b81332ea4 100644 --- a/git/util.py +++ b/git/util.py @@ -706,7 +706,7 @@ def default_name() -> str: except KeyError: if config_reader is not None: try: - val = config_reader.get_value('user', cvar) + val = config_reader.get('user', cvar) except Exception: val = default() setattr(actor, attr, val) From 70b50e068dc2496d923ee336901ed55d212fc83d Mon Sep 17 00:00:00 2001 From: Eric Wieser Date: Tue, 3 Aug 2021 19:16:41 +0100 Subject: [PATCH 0793/2375] Fix test --- test/test_util.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/test_util.py b/test/test_util.py index ddc5f628f..3058dc745 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -238,16 +238,16 @@ def test_actor_get_uid_laziness_not_called(self, mock_get_uid): @mock.patch("getpass.getuser") def test_actor_get_uid_laziness_called(self, mock_get_uid): mock_get_uid.return_value = "user" - for cr in (None, self.rorepo.config_reader()): - committer = Actor.committer(cr) - author = Actor.author(cr) - if cr is None: # otherwise, use value from config_reader - self.assertEqual(committer.name, 'user') - self.assertTrue(committer.email.startswith('user@')) - self.assertEqual(author.name, 'user') - self.assertTrue(committer.email.startswith('user@')) + committer = Actor.committer(None) + author = Actor.author(None) + # We can't test with `self.rorepo.config_reader()` here, as the uuid laziness + # depends on whether the user running the test has their user.name config set. + self.assertEqual(committer.name, 'user') + self.assertTrue(committer.email.startswith('user@')) + self.assertEqual(author.name, 'user') + self.assertTrue(committer.email.startswith('user@')) self.assertTrue(mock_get_uid.called) - self.assertEqual(mock_get_uid.call_count, 4) + self.assertEqual(mock_get_uid.call_count, 2) def test_actor_from_string(self): self.assertEqual(Actor._from_string("name"), Actor("name", None)) From d490d66e4b82d94b378daa9ad1e1a286e0e09258 Mon Sep 17 00:00:00 2001 From: Eric Wieser Date: Wed, 4 Aug 2021 10:15:42 +0100 Subject: [PATCH 0794/2375] Try a better test --- test/test_util.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/test/test_util.py b/test/test_util.py index 3058dc745..e9701f0c4 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -217,8 +217,23 @@ def test_actor(self): self.assertIsInstance(Actor.author(cr), Actor) # END assure config reader is handled + @with_rw_repo('HEAD') @mock.patch("getpass.getuser") - def test_actor_get_uid_laziness_not_called(self, mock_get_uid): + def test_actor_get_uid_laziness_not_called(self, rwrepo, mock_get_uid): + with rwrepo.config_writer() as cw: + cw.set_value("user", "name", "John Config Doe") + cw.set_value("user", "email", "jcdoe@example.com") + + cr = rwrepo.config_reader() + committer = Actor.committer(cr) + author = Actor.author(cr) + + self.assertEqual(committer.name, 'John Config Doe') + self.assertEqual(committer.email, 'jcdoe@example.com') + self.assertEqual(author.name, 'John Config Doe') + self.assertEqual(author.email, 'jcdoe@example.com') + self.assertFalse(mock_get_uid.called) + env = { "GIT_AUTHOR_NAME": "John Doe", "GIT_AUTHOR_EMAIL": "jdoe@example.com", @@ -226,7 +241,7 @@ def test_actor_get_uid_laziness_not_called(self, mock_get_uid): "GIT_COMMITTER_EMAIL": "jane@example.com", } os.environ.update(env) - for cr in (None, self.rorepo.config_reader()): + for cr in (None, rwrepo.config_reader()): committer = Actor.committer(cr) author = Actor.author(cr) self.assertEqual(committer.name, 'Jane Doe') @@ -241,7 +256,7 @@ def test_actor_get_uid_laziness_called(self, mock_get_uid): committer = Actor.committer(None) author = Actor.author(None) # We can't test with `self.rorepo.config_reader()` here, as the uuid laziness - # depends on whether the user running the test has their user.name config set. + # depends on whether the user running the test has their global user.name config set. self.assertEqual(committer.name, 'user') self.assertTrue(committer.email.startswith('user@')) self.assertEqual(author.name, 'user') From ec04ea01dbbab9c36105dfc3e34c94bbbbf298b2 Mon Sep 17 00:00:00 2001 From: Eric Wieser Date: Wed, 4 Aug 2021 10:20:44 +0100 Subject: [PATCH 0795/2375] Update test_util.py --- test/test_util.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/test_util.py b/test/test_util.py index e9701f0c4..3961ff356 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -22,7 +22,10 @@ parse_date, tzoffset, from_timestamp) -from test.lib import TestBase +from test.lib import ( + TestBase, + with_rw_repo, +) from git.util import ( LockFile, BlockingLockFile, From 78b99d35f04dc96596a751376656f1df1fba09c1 Mon Sep 17 00:00:00 2001 From: yobmod Date: Sun, 8 Aug 2021 21:12:35 +0100 Subject: [PATCH 0796/2375] fix setup.py classifiers, improvefnmatchprocess handler types --- .gitignore | 1 + git/cmd.py | 42 ++++++++++++++++++++++++++++-------------- requirements-dev.txt | 3 +++ setup.py | 4 ++-- 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 2bae74e5f..72da84eee 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ nbproject .pytest_cache/ monkeytype.sqlite3 output.txt +tox.ini diff --git a/git/cmd.py b/git/cmd.py index b84c43df3..353cbf033 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -3,7 +3,7 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php - +from __future__ import annotations from contextlib import contextmanager import io import logging @@ -68,7 +68,7 @@ # Documentation ## @{ -def handle_process_output(process: Union[subprocess.Popen, 'Git.AutoInterrupt'], +def handle_process_output(process: 'Git.AutoInterrupt' | Popen, stdout_handler: Union[None, Callable[[AnyStr], None], Callable[[List[AnyStr]], None], @@ -78,7 +78,8 @@ def handle_process_output(process: Union[subprocess.Popen, 'Git.AutoInterrupt'], Callable[[List[AnyStr]], None]], finalizer: Union[None, Callable[[Union[subprocess.Popen, 'Git.AutoInterrupt']], None]] = None, - decode_streams: bool = True) -> None: + decode_streams: bool = True, + timeout: float = 10.0) -> None: """Registers for notifications to learn that process output is ready to read, and dispatches lines to the respective line handlers. This function returns once the finalizer returns @@ -93,9 +94,10 @@ def handle_process_output(process: Union[subprocess.Popen, 'Git.AutoInterrupt'], their contents to handlers. Set it to False if `universal_newline == True` (then streams are in text-mode) or if decoding must happen later (i.e. for Diffs). + :param timeout: float, timeout to pass to t.join() in case it hangs. Default = 10.0 seconds """ # Use 2 "pump" threads and wait for both to finish. - def pump_stream(cmdline: str, name: str, stream: Union[BinaryIO, TextIO], is_decode: bool, + def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], is_decode: bool, handler: Union[None, Callable[[Union[bytes, str]], None]]) -> None: try: for line in stream: @@ -107,22 +109,34 @@ def pump_stream(cmdline: str, name: str, stream: Union[BinaryIO, TextIO], is_dec else: handler(line) except Exception as ex: - log.error("Pumping %r of cmd(%s) failed due to: %r", name, remove_password_if_present(cmdline), ex) - raise CommandError(['<%s-pump>' % name] + remove_password_if_present(cmdline), ex) from ex + log.error(f"Pumping {name!r} of cmd({remove_password_if_present(cmdline)})} failed due to: {ex!r}") + raise CommandError([f'<{name}-pump>'] + remove_password_if_present(cmdline), ex) from ex finally: stream.close() - cmdline = getattr(process, 'args', '') # PY3+ only + + + if hasattr(process, 'proc'): + process = cast('Git.AutoInterrupt', process) + cmdline: str | Tuple[str, ...] | List[str] = getattr(process.proc, 'args', '') + p_stdout = process.proc.stdout + p_stderr = process.proc.stderr + else: + process = cast(Popen, process) + cmdline = getattr(process, 'args', '') + p_stdout = process.stdout + p_stderr = process.stderr + if not isinstance(cmdline, (tuple, list)): cmdline = cmdline.split() - pumps = [] - if process.stdout: - pumps.append(('stdout', process.stdout, stdout_handler)) - if process.stderr: - pumps.append(('stderr', process.stderr, stderr_handler)) + pumps: List[Tuple[str, IO, Callable[..., None] | None]] = [] + if p_stdout: + pumps.append(('stdout', p_stdout, stdout_handler)) + if p_stderr: + pumps.append(('stderr', p_stderr, stderr_handler)) - threads = [] + threads: List[threading.Thread] = [] for name, stream, handler in pumps: t = threading.Thread(target=pump_stream, @@ -134,7 +148,7 @@ def pump_stream(cmdline: str, name: str, stream: Union[BinaryIO, TextIO], is_dec ## FIXME: Why Join?? Will block if `stdin` needs feeding... # for t in threads: - t.join() + t.join(timeout=timeout) if finalizer: return finalizer(process) diff --git a/requirements-dev.txt b/requirements-dev.txt index e6d19427e..f3aad629a 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -12,3 +12,6 @@ flake8-type-checking;python_version>="3.8" # checks for TYPE_CHECKING only # pytest-flake8 pytest-icdiff # pytest-profiling + + +tox \ No newline at end of file diff --git a/setup.py b/setup.py index ae6319f9e..14e36dff9 100755 --- a/setup.py +++ b/setup.py @@ -113,12 +113,12 @@ def build_py_modules(basedir: str, excludes: Sequence = ()) -> Sequence: "Operating System :: POSIX", "Operating System :: Microsoft :: Windows", "Operating System :: MacOS :: MacOS X", - "Typing:: Typed", + "Typing :: Typed", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9" + "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10" ] ) From 38f5157253beb5801be80812e9b013a3cdd0bdc9 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sun, 8 Aug 2021 21:42:34 +0100 Subject: [PATCH 0797/2375] add type check to conf_encoding (in thoery could be bool or int) --- git/cmd.py | 8 +- git/config.py | 11 +- git/objects/commit.py | 2 + git/remote.py | 944 ------------------------------------------ 4 files changed, 6 insertions(+), 959 deletions(-) delete mode 100644 git/remote.py diff --git a/git/cmd.py b/git/cmd.py index 353cbf033..ff1dfa343 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -109,18 +109,16 @@ def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], else: handler(line) except Exception as ex: - log.error(f"Pumping {name!r} of cmd({remove_password_if_present(cmdline)})} failed due to: {ex!r}") + log.error(f"Pumping {name!r} of cmd({remove_password_if_present(cmdline)}) failed due to: {ex!r}") raise CommandError([f'<{name}-pump>'] + remove_password_if_present(cmdline), ex) from ex finally: stream.close() - - if hasattr(process, 'proc'): process = cast('Git.AutoInterrupt', process) cmdline: str | Tuple[str, ...] | List[str] = getattr(process.proc, 'args', '') - p_stdout = process.proc.stdout - p_stderr = process.proc.stderr + p_stdout = process.proc.stdout if process.proc else None + p_stderr = process.proc.stderr if process.proc else None else: process = cast(Popen, process) cmdline = getattr(process, 'args', '') diff --git a/git/config.py b/git/config.py index cf32d4ba1..cbd66022d 100644 --- a/git/config.py +++ b/git/config.py @@ -31,7 +31,7 @@ # typing------------------------------------------------------- from typing import (Any, Callable, Generic, IO, List, Dict, Sequence, - TYPE_CHECKING, Tuple, TypeVar, Union, cast, overload) + TYPE_CHECKING, Tuple, TypeVar, Union, cast) from git.types import Lit_config_levels, ConfigLevels_Tup, PathLike, assert_never, _T @@ -709,15 +709,6 @@ def read_only(self) -> bool: """:return: True if this instance may change the configuration file""" return self._read_only - @overload - def get_value(self, section: str, option: str, default: None = None) -> Union[int, float, str, bool]: ... - - @overload - def get_value(self, section: str, option: str, default: str) -> str: ... - - @overload - def get_value(self, section: str, option: str, default: float) -> float: ... - def get_value(self, section: str, option: str, default: Union[int, float, str, bool, None] = None ) -> Union[int, float, str, bool]: # can default or return type include bool? diff --git a/git/objects/commit.py b/git/objects/commit.py index b689167f5..b36cd46d2 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -446,6 +446,8 @@ def create_from_tree(cls, repo: 'Repo', tree: Union[Tree, str], message: str, # assume utf8 encoding enc_section, enc_option = cls.conf_encoding.split('.') conf_encoding = cr.get_value(enc_section, enc_option, cls.default_encoding) + if not isinstance(conf_encoding, str): + raise TypeError("conf_encoding could not be coerced to str") # if the tree is no object, make sure we create one - otherwise # the created commit object is invalid diff --git a/git/remote.py b/git/remote.py deleted file mode 100644 index 3888506fd..000000000 --- a/git/remote.py +++ /dev/null @@ -1,944 +0,0 @@ -# remote.py -# Copyright (C) 2008, 2009 Michael Trier (mtrier@gmail.com) and contributors -# -# This module is part of GitPython and is released under -# the BSD License: http://www.opensource.org/licenses/bsd-license.php - -# Module implementing a remote object allowing easy access to git remotes -import logging -import re - -from git.cmd import handle_process_output, Git -from git.compat import (defenc, force_text) -from git.exc import GitCommandError -from git.util import ( - LazyMixin, - IterableObj, - IterableList, - RemoteProgress, - CallableRemoteProgress, -) -from git.util import ( - join_path, -) - -from .config import ( - GitConfigParser, - SectionConstraint, - cp, -) -from .refs import ( - Head, - Reference, - RemoteReference, - SymbolicReference, - TagReference -) - -# typing------------------------------------------------------- - -from typing import (Any, Callable, Dict, Iterator, List, NoReturn, Optional, Sequence, - TYPE_CHECKING, Type, Union, cast, overload) - -from git.types import PathLike, Literal, Commit_ish - -if TYPE_CHECKING: - from git.repo.base import Repo - from git.objects.submodule.base import UpdateProgress - # from git.objects.commit import Commit - # from git.objects import Blob, Tree, TagObject - -flagKeyLiteral = Literal[' ', '!', '+', '-', '*', '=', 't', '?'] - -# def is_flagKeyLiteral(inp: str) -> TypeGuard[flagKeyLiteral]: -# return inp in [' ', '!', '+', '-', '=', '*', 't', '?'] - - -# ------------------------------------------------------------- - - -log = logging.getLogger('git.remote') -log.addHandler(logging.NullHandler()) - - -__all__ = ('RemoteProgress', 'PushInfo', 'FetchInfo', 'Remote') - -#{ Utilities - - -def add_progress(kwargs: Any, git: Git, - progress: Union[RemoteProgress, 'UpdateProgress', Callable[..., RemoteProgress], None] - ) -> Any: - """Add the --progress flag to the given kwargs dict if supported by the - git command. If the actual progress in the given progress instance is not - given, we do not request any progress - :return: possibly altered kwargs""" - if progress is not None: - v = git.version_info[:2] - if v >= (1, 7): - kwargs['progress'] = True - # END handle --progress - # END handle progress - return kwargs - -#} END utilities - - -@ overload -def to_progress_instance(progress: None) -> RemoteProgress: - ... - - -@ overload -def to_progress_instance(progress: Callable[..., Any]) -> CallableRemoteProgress: - ... - - -@ overload -def to_progress_instance(progress: RemoteProgress) -> RemoteProgress: - ... - - -def to_progress_instance(progress: Union[Callable[..., Any], RemoteProgress, None] - ) -> Union[RemoteProgress, CallableRemoteProgress]: - """Given the 'progress' return a suitable object derived from - RemoteProgress(). - """ - # new API only needs progress as a function - if callable(progress): - return CallableRemoteProgress(progress) - - # where None is passed create a parser that eats the progress - elif progress is None: - return RemoteProgress() - - # assume its the old API with an instance of RemoteProgress. - return progress - - -class PushInfo(IterableObj, object): - """ - Carries information about the result of a push operation of a single head:: - - info = remote.push()[0] - info.flags # bitflags providing more information about the result - info.local_ref # Reference pointing to the local reference that was pushed - # It is None if the ref was deleted. - info.remote_ref_string # path to the remote reference located on the remote side - info.remote_ref # Remote Reference on the local side corresponding to - # the remote_ref_string. It can be a TagReference as well. - info.old_commit # commit at which the remote_ref was standing before we pushed - # it to local_ref.commit. Will be None if an error was indicated - info.summary # summary line providing human readable english text about the push - """ - __slots__ = ('local_ref', 'remote_ref_string', 'flags', '_old_commit_sha', '_remote', 'summary') - _id_attribute_ = 'pushinfo' - - NEW_TAG, NEW_HEAD, NO_MATCH, REJECTED, REMOTE_REJECTED, REMOTE_FAILURE, DELETED, \ - FORCED_UPDATE, FAST_FORWARD, UP_TO_DATE, ERROR = [1 << x for x in range(11)] - - _flag_map = {'X': NO_MATCH, - '-': DELETED, - '*': 0, - '+': FORCED_UPDATE, - ' ': FAST_FORWARD, - '=': UP_TO_DATE, - '!': ERROR} - - def __init__(self, flags: int, local_ref: Union[SymbolicReference, None], remote_ref_string: str, remote: 'Remote', - old_commit: Optional[str] = None, summary: str = '') -> None: - """ Initialize a new instance - local_ref: HEAD | Head | RemoteReference | TagReference | Reference | SymbolicReference | None """ - self.flags = flags - self.local_ref = local_ref - self.remote_ref_string = remote_ref_string - self._remote = remote - self._old_commit_sha = old_commit - self.summary = summary - - @ property - def old_commit(self) -> Union[str, SymbolicReference, Commit_ish, None]: - return self._old_commit_sha and self._remote.repo.commit(self._old_commit_sha) or None - - @ property - def remote_ref(self) -> Union[RemoteReference, TagReference]: - """ - :return: - Remote Reference or TagReference in the local repository corresponding - to the remote_ref_string kept in this instance.""" - # translate heads to a local remote, tags stay as they are - if self.remote_ref_string.startswith("refs/tags"): - return TagReference(self._remote.repo, self.remote_ref_string) - elif self.remote_ref_string.startswith("refs/heads"): - remote_ref = Reference(self._remote.repo, self.remote_ref_string) - return RemoteReference(self._remote.repo, "refs/remotes/%s/%s" % (str(self._remote), remote_ref.name)) - else: - raise ValueError("Could not handle remote ref: %r" % self.remote_ref_string) - # END - - @ classmethod - def _from_line(cls, remote: 'Remote', line: str) -> 'PushInfo': - """Create a new PushInfo instance as parsed from line which is expected to be like - refs/heads/master:refs/heads/master 05d2687..1d0568e as bytes""" - control_character, from_to, summary = line.split('\t', 3) - flags = 0 - - # control character handling - try: - flags |= cls._flag_map[control_character] - except KeyError as e: - raise ValueError("Control character %r unknown as parsed from line %r" % (control_character, line)) from e - # END handle control character - - # from_to handling - from_ref_string, to_ref_string = from_to.split(':') - if flags & cls.DELETED: - from_ref: Union[SymbolicReference, None] = None - else: - if from_ref_string == "(delete)": - from_ref = None - else: - from_ref = Reference.from_path(remote.repo, from_ref_string) - - # commit handling, could be message or commit info - old_commit: Optional[str] = None - if summary.startswith('['): - if "[rejected]" in summary: - flags |= cls.REJECTED - elif "[remote rejected]" in summary: - flags |= cls.REMOTE_REJECTED - elif "[remote failure]" in summary: - flags |= cls.REMOTE_FAILURE - elif "[no match]" in summary: - flags |= cls.ERROR - elif "[new tag]" in summary: - flags |= cls.NEW_TAG - elif "[new branch]" in summary: - flags |= cls.NEW_HEAD - # uptodate encoded in control character - else: - # fast-forward or forced update - was encoded in control character, - # but we parse the old and new commit - split_token = "..." - if control_character == " ": - split_token = ".." - old_sha, _new_sha = summary.split(' ')[0].split(split_token) - # have to use constructor here as the sha usually is abbreviated - old_commit = old_sha - # END message handling - - return PushInfo(flags, from_ref, to_ref_string, remote, old_commit, summary) - - @ classmethod - def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any - ) -> NoReturn: # -> Iterator['PushInfo']: - raise NotImplementedError - - -class FetchInfo(IterableObj, object): - - """ - Carries information about the results of a fetch operation of a single head:: - - info = remote.fetch()[0] - info.ref # Symbolic Reference or RemoteReference to the changed - # remote head or FETCH_HEAD - info.flags # additional flags to be & with enumeration members, - # i.e. info.flags & info.REJECTED - # is 0 if ref is SymbolicReference - info.note # additional notes given by git-fetch intended for the user - info.old_commit # if info.flags & info.FORCED_UPDATE|info.FAST_FORWARD, - # field is set to the previous location of ref, otherwise None - info.remote_ref_path # The path from which we fetched on the remote. It's the remote's version of our info.ref - """ - __slots__ = ('ref', 'old_commit', 'flags', 'note', 'remote_ref_path') - _id_attribute_ = 'fetchinfo' - - NEW_TAG, NEW_HEAD, HEAD_UPTODATE, TAG_UPDATE, REJECTED, FORCED_UPDATE, \ - FAST_FORWARD, ERROR = [1 << x for x in range(8)] - - _re_fetch_result = re.compile(r'^\s*(.) (\[?[\w\s\.$@]+\]?)\s+(.+) -> ([^\s]+)( \(.*\)?$)?') - - _flag_map: Dict[flagKeyLiteral, int] = { - '!': ERROR, - '+': FORCED_UPDATE, - '*': 0, - '=': HEAD_UPTODATE, - ' ': FAST_FORWARD, - '-': TAG_UPDATE, - } - - @ classmethod - def refresh(cls) -> Literal[True]: - """This gets called by the refresh function (see the top level - __init__). - """ - # clear the old values in _flag_map - try: - del cls._flag_map["t"] - except KeyError: - pass - - try: - del cls._flag_map["-"] - except KeyError: - pass - - # set the value given the git version - if Git().version_info[:2] >= (2, 10): - cls._flag_map["t"] = cls.TAG_UPDATE - else: - cls._flag_map["-"] = cls.TAG_UPDATE - - return True - - def __init__(self, ref: SymbolicReference, flags: int, note: str = '', - old_commit: Union[Commit_ish, None] = None, - remote_ref_path: Optional[PathLike] = None) -> None: - """ - Initialize a new instance - """ - self.ref = ref - self.flags = flags - self.note = note - self.old_commit = old_commit - self.remote_ref_path = remote_ref_path - - def __str__(self) -> str: - return self.name - - @ property - def name(self) -> str: - """:return: Name of our remote ref""" - return self.ref.name - - @ property - def commit(self) -> Commit_ish: - """:return: Commit of our remote ref""" - return self.ref.commit - - @ classmethod - def _from_line(cls, repo: 'Repo', line: str, fetch_line: str) -> 'FetchInfo': - """Parse information from the given line as returned by git-fetch -v - and return a new FetchInfo object representing this information. - - We can handle a line as follows: - "%c %-\\*s %-\\*s -> %s%s" - - Where c is either ' ', !, +, -, \\*, or = - ! means error - + means success forcing update - - means a tag was updated - * means birth of new branch or tag - = means the head was up to date ( and not moved ) - ' ' means a fast-forward - - fetch line is the corresponding line from FETCH_HEAD, like - acb0fa8b94ef421ad60c8507b634759a472cd56c not-for-merge branch '0.1.7RC' of /tmp/tmpya0vairemote_repo""" - match = cls._re_fetch_result.match(line) - if match is None: - raise ValueError("Failed to parse line: %r" % line) - - # parse lines - remote_local_ref_str: str - control_character, operation, local_remote_ref, remote_local_ref_str, note = match.groups() - # assert is_flagKeyLiteral(control_character), f"{control_character}" - control_character = cast(flagKeyLiteral, control_character) - try: - _new_hex_sha, _fetch_operation, fetch_note = fetch_line.split("\t") - ref_type_name, fetch_note = fetch_note.split(' ', 1) - except ValueError as e: # unpack error - raise ValueError("Failed to parse FETCH_HEAD line: %r" % fetch_line) from e - - # parse flags from control_character - flags = 0 - try: - flags |= cls._flag_map[control_character] - except KeyError as e: - raise ValueError("Control character %r unknown as parsed from line %r" % (control_character, line)) from e - # END control char exception handling - - # parse operation string for more info - makes no sense for symbolic refs, but we parse it anyway - old_commit: Union[Commit_ish, None] = None - is_tag_operation = False - if 'rejected' in operation: - flags |= cls.REJECTED - if 'new tag' in operation: - flags |= cls.NEW_TAG - is_tag_operation = True - if 'tag update' in operation: - flags |= cls.TAG_UPDATE - is_tag_operation = True - if 'new branch' in operation: - flags |= cls.NEW_HEAD - if '...' in operation or '..' in operation: - split_token = '...' - if control_character == ' ': - split_token = split_token[:-1] - old_commit = repo.rev_parse(operation.split(split_token)[0]) - # END handle refspec - - # handle FETCH_HEAD and figure out ref type - # If we do not specify a target branch like master:refs/remotes/origin/master, - # the fetch result is stored in FETCH_HEAD which destroys the rule we usually - # have. In that case we use a symbolic reference which is detached - ref_type: Optional[Type[SymbolicReference]] = None - if remote_local_ref_str == "FETCH_HEAD": - ref_type = SymbolicReference - elif ref_type_name == "tag" or is_tag_operation: - # the ref_type_name can be branch, whereas we are still seeing a tag operation. It happens during - # testing, which is based on actual git operations - ref_type = TagReference - elif ref_type_name in ("remote-tracking", "branch"): - # note: remote-tracking is just the first part of the 'remote-tracking branch' token. - # We don't parse it correctly, but its enough to know what to do, and its new in git 1.7something - ref_type = RemoteReference - elif '/' in ref_type_name: - # If the fetch spec look something like this '+refs/pull/*:refs/heads/pull/*', and is thus pretty - # much anything the user wants, we will have trouble to determine what's going on - # For now, we assume the local ref is a Head - ref_type = Head - else: - raise TypeError("Cannot handle reference type: %r" % ref_type_name) - # END handle ref type - - # create ref instance - if ref_type is SymbolicReference: - remote_local_ref = ref_type(repo, "FETCH_HEAD") - else: - # determine prefix. Tags are usually pulled into refs/tags, they may have subdirectories. - # It is not clear sometimes where exactly the item is, unless we have an absolute path as indicated - # by the 'ref/' prefix. Otherwise even a tag could be in refs/remotes, which is when it will have the - # 'tags/' subdirectory in its path. - # We don't want to test for actual existence, but try to figure everything out analytically. - ref_path: Optional[PathLike] = None - remote_local_ref_str = remote_local_ref_str.strip() - - if remote_local_ref_str.startswith(Reference._common_path_default + "/"): - # always use actual type if we get absolute paths - # Will always be the case if something is fetched outside of refs/remotes (if its not a tag) - ref_path = remote_local_ref_str - if ref_type is not TagReference and not \ - remote_local_ref_str.startswith(RemoteReference._common_path_default + "/"): - ref_type = Reference - # END downgrade remote reference - elif ref_type is TagReference and 'tags/' in remote_local_ref_str: - # even though its a tag, it is located in refs/remotes - ref_path = join_path(RemoteReference._common_path_default, remote_local_ref_str) - else: - ref_path = join_path(ref_type._common_path_default, remote_local_ref_str) - # END obtain refpath - - # even though the path could be within the git conventions, we make - # sure we respect whatever the user wanted, and disabled path checking - remote_local_ref = ref_type(repo, ref_path, check_path=False) - # END create ref instance - - note = (note and note.strip()) or '' - - return cls(remote_local_ref, flags, note, old_commit, local_remote_ref) - - @ classmethod - def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any - ) -> NoReturn: # -> Iterator['FetchInfo']: - raise NotImplementedError - - -class Remote(LazyMixin, IterableObj): - - """Provides easy read and write access to a git remote. - - Everything not part of this interface is considered an option for the current - remote, allowing constructs like remote.pushurl to query the pushurl. - - NOTE: When querying configuration, the configuration accessor will be cached - to speed up subsequent accesses.""" - - __slots__ = ("repo", "name", "_config_reader") - _id_attribute_ = "name" - - def __init__(self, repo: 'Repo', name: str) -> None: - """Initialize a remote instance - - :param repo: The repository we are a remote of - :param name: the name of the remote, i.e. 'origin'""" - self.repo = repo - self.name = name - self.url: str - - def __getattr__(self, attr: str) -> Any: - """Allows to call this instance like - remote.special( \\*args, \\*\\*kwargs) to call git-remote special self.name""" - if attr == "_config_reader": - return super(Remote, self).__getattr__(attr) - - # sometimes, probably due to a bug in python itself, we are being called - # even though a slot of the same name exists - try: - return self._config_reader.get(attr) - except cp.NoOptionError: - return super(Remote, self).__getattr__(attr) - # END handle exception - - def _config_section_name(self) -> str: - return 'remote "%s"' % self.name - - def _set_cache_(self, attr: str) -> None: - if attr == "_config_reader": - # NOTE: This is cached as __getattr__ is overridden to return remote config values implicitly, such as - # in print(r.pushurl) - self._config_reader = SectionConstraint(self.repo.config_reader("repository"), self._config_section_name()) - else: - super(Remote, self)._set_cache_(attr) - - def __str__(self) -> str: - return self.name - - def __repr__(self) -> str: - return '' % (self.__class__.__name__, self.name) - - def __eq__(self, other: object) -> bool: - return isinstance(other, type(self)) and self.name == other.name - - def __ne__(self, other: object) -> bool: - return not (self == other) - - def __hash__(self) -> int: - return hash(self.name) - - def exists(self) -> bool: - """ - :return: True if this is a valid, existing remote. - Valid remotes have an entry in the repository's configuration""" - try: - self.config_reader.get('url') - return True - except cp.NoOptionError: - # we have the section at least ... - return True - except cp.NoSectionError: - return False - # end - - @ classmethod - def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> Iterator['Remote']: - """:return: Iterator yielding Remote objects of the given repository""" - for section in repo.config_reader("repository").sections(): - if not section.startswith('remote '): - continue - lbound = section.find('"') - rbound = section.rfind('"') - if lbound == -1 or rbound == -1: - raise ValueError("Remote-Section has invalid format: %r" % section) - yield Remote(repo, section[lbound + 1:rbound]) - # END for each configuration section - - def set_url(self, new_url: str, old_url: Optional[str] = None, **kwargs: Any) -> 'Remote': - """Configure URLs on current remote (cf command git remote set_url) - - This command manages URLs on the remote. - - :param new_url: string being the URL to add as an extra remote URL - :param old_url: when set, replaces this URL with new_url for the remote - :return: self - """ - scmd = 'set-url' - kwargs['insert_kwargs_after'] = scmd - if old_url: - self.repo.git.remote(scmd, self.name, new_url, old_url, **kwargs) - else: - self.repo.git.remote(scmd, self.name, new_url, **kwargs) - return self - - def add_url(self, url: str, **kwargs: Any) -> 'Remote': - """Adds a new url on current remote (special case of git remote set_url) - - This command adds new URLs to a given remote, making it possible to have - multiple URLs for a single remote. - - :param url: string being the URL to add as an extra remote URL - :return: self - """ - return self.set_url(url, add=True) - - def delete_url(self, url: str, **kwargs: Any) -> 'Remote': - """Deletes a new url on current remote (special case of git remote set_url) - - This command deletes new URLs to a given remote, making it possible to have - multiple URLs for a single remote. - - :param url: string being the URL to delete from the remote - :return: self - """ - return self.set_url(url, delete=True) - - @ property - def urls(self) -> Iterator[str]: - """:return: Iterator yielding all configured URL targets on a remote as strings""" - try: - remote_details = self.repo.git.remote("get-url", "--all", self.name) - assert isinstance(remote_details, str) - for line in remote_details.split('\n'): - yield line - except GitCommandError as ex: - ## We are on git < 2.7 (i.e TravisCI as of Oct-2016), - # so `get-utl` command does not exist yet! - # see: https://github.com/gitpython-developers/GitPython/pull/528#issuecomment-252976319 - # and: http://stackoverflow.com/a/32991784/548792 - # - if 'Unknown subcommand: get-url' in str(ex): - try: - remote_details = self.repo.git.remote("show", self.name) - assert isinstance(remote_details, str) - for line in remote_details.split('\n'): - if ' Push URL:' in line: - yield line.split(': ')[-1] - except GitCommandError as _ex: - if any(msg in str(_ex) for msg in ['correct access rights', 'cannot run ssh']): - # If ssh is not setup to access this repository, see issue 694 - remote_details = self.repo.git.config('--get-all', 'remote.%s.url' % self.name) - assert isinstance(remote_details, str) - for line in remote_details.split('\n'): - yield line - else: - raise _ex - else: - raise ex - - @ property - def refs(self) -> IterableList[RemoteReference]: - """ - :return: - IterableList of RemoteReference objects. It is prefixed, allowing - you to omit the remote path portion, i.e.:: - remote.refs.master # yields RemoteReference('/refs/remotes/origin/master')""" - out_refs: IterableList[RemoteReference] = IterableList(RemoteReference._id_attribute_, "%s/" % self.name) - out_refs.extend(RemoteReference.list_items(self.repo, remote=self.name)) - return out_refs - - @ property - def stale_refs(self) -> IterableList[Reference]: - """ - :return: - IterableList RemoteReference objects that do not have a corresponding - head in the remote reference anymore as they have been deleted on the - remote side, but are still available locally. - - The IterableList is prefixed, hence the 'origin' must be omitted. See - 'refs' property for an example. - - To make things more complicated, it can be possible for the list to include - other kinds of references, for example, tag references, if these are stale - as well. This is a fix for the issue described here: - https://github.com/gitpython-developers/GitPython/issues/260 - """ - out_refs: IterableList[Reference] = IterableList(RemoteReference._id_attribute_, "%s/" % self.name) - for line in self.repo.git.remote("prune", "--dry-run", self).splitlines()[2:]: - # expecting - # * [would prune] origin/new_branch - token = " * [would prune] " - if not line.startswith(token): - continue - ref_name = line.replace(token, "") - # sometimes, paths start with a full ref name, like refs/tags/foo, see #260 - if ref_name.startswith(Reference._common_path_default + '/'): - out_refs.append(Reference.from_path(self.repo, ref_name)) - else: - fqhn = "%s/%s" % (RemoteReference._common_path_default, ref_name) - out_refs.append(RemoteReference(self.repo, fqhn)) - # end special case handling - # END for each line - return out_refs - - @ classmethod - def create(cls, repo: 'Repo', name: str, url: str, **kwargs: Any) -> 'Remote': - """Create a new remote to the given repository - :param repo: Repository instance that is to receive the new remote - :param name: Desired name of the remote - :param url: URL which corresponds to the remote's name - :param kwargs: Additional arguments to be passed to the git-remote add command - :return: New Remote instance - :raise GitCommandError: in case an origin with that name already exists""" - scmd = 'add' - kwargs['insert_kwargs_after'] = scmd - repo.git.remote(scmd, name, Git.polish_url(url), **kwargs) - return cls(repo, name) - - # add is an alias - add = create - - @ classmethod - def remove(cls, repo: 'Repo', name: str) -> str: - """Remove the remote with the given name - :return: the passed remote name to remove - """ - repo.git.remote("rm", name) - if isinstance(name, cls): - name._clear_cache() - return name - - # alias - rm = remove - - def rename(self, new_name: str) -> 'Remote': - """Rename self to the given new_name - :return: self """ - if self.name == new_name: - return self - - self.repo.git.remote("rename", self.name, new_name) - self.name = new_name - self._clear_cache() - - return self - - def update(self, **kwargs: Any) -> 'Remote': - """Fetch all changes for this remote, including new branches which will - be forced in ( in case your local remote branch is not part the new remote branches - ancestry anymore ). - - :param kwargs: - Additional arguments passed to git-remote update - - :return: self """ - scmd = 'update' - kwargs['insert_kwargs_after'] = scmd - self.repo.git.remote(scmd, self.name, **kwargs) - return self - - def _get_fetch_info_from_stderr(self, proc: 'Git.AutoInterrupt', - progress: Union[Callable[..., Any], RemoteProgress, None] - ) -> IterableList['FetchInfo']: - - progress = to_progress_instance(progress) - - # skip first line as it is some remote info we are not interested in - output: IterableList['FetchInfo'] = IterableList('name') - - # lines which are no progress are fetch info lines - # this also waits for the command to finish - # Skip some progress lines that don't provide relevant information - fetch_info_lines = [] - # Basically we want all fetch info lines which appear to be in regular form, and thus have a - # command character. Everything else we ignore, - cmds = set(FetchInfo._flag_map.keys()) - - progress_handler = progress.new_message_handler() - handle_process_output(proc, None, progress_handler, finalizer=None, decode_streams=False) - - stderr_text = progress.error_lines and '\n'.join(progress.error_lines) or '' - proc.wait(stderr=stderr_text) - if stderr_text: - log.warning("Error lines received while fetching: %s", stderr_text) - - for line in progress.other_lines: - line = force_text(line) - for cmd in cmds: - if len(line) > 1 and line[0] == ' ' and line[1] == cmd: - fetch_info_lines.append(line) - continue - - # read head information - fetch_head = SymbolicReference(self.repo, "FETCH_HEAD") - with open(fetch_head.abspath, 'rb') as fp: - fetch_head_info = [line.decode(defenc) for line in fp.readlines()] - - l_fil = len(fetch_info_lines) - l_fhi = len(fetch_head_info) - if l_fil != l_fhi: - msg = "Fetch head lines do not match lines provided via progress information\n" - msg += "length of progress lines %i should be equal to lines in FETCH_HEAD file %i\n" - msg += "Will ignore extra progress lines or fetch head lines." - msg %= (l_fil, l_fhi) - log.debug(msg) - log.debug("info lines: " + str(fetch_info_lines)) - log.debug("head info : " + str(fetch_head_info)) - if l_fil < l_fhi: - fetch_head_info = fetch_head_info[:l_fil] - else: - fetch_info_lines = fetch_info_lines[:l_fhi] - # end truncate correct list - # end sanity check + sanitization - - for err_line, fetch_line in zip(fetch_info_lines, fetch_head_info): - try: - output.append(FetchInfo._from_line(self.repo, err_line, fetch_line)) - except ValueError as exc: - log.debug("Caught error while parsing line: %s", exc) - log.warning("Git informed while fetching: %s", err_line.strip()) - return output - - def _get_push_info(self, proc: 'Git.AutoInterrupt', - progress: Union[Callable[..., Any], RemoteProgress, None]) -> IterableList[PushInfo]: - progress = to_progress_instance(progress) - - # read progress information from stderr - # we hope stdout can hold all the data, it should ... - # read the lines manually as it will use carriage returns between the messages - # to override the previous one. This is why we read the bytes manually - progress_handler = progress.new_message_handler() - output: IterableList[PushInfo] = IterableList('push_infos') - - def stdout_handler(line: str) -> None: - try: - output.append(PushInfo._from_line(self, line)) - except ValueError: - # If an error happens, additional info is given which we parse below. - pass - - handle_process_output(proc, stdout_handler, progress_handler, finalizer=None, decode_streams=False) - stderr_text = progress.error_lines and '\n'.join(progress.error_lines) or '' - try: - proc.wait(stderr=stderr_text) - except Exception: - if not output: - raise - elif stderr_text: - log.warning("Error lines received while fetching: %s", stderr_text) - - return output - - def _assert_refspec(self) -> None: - """Turns out we can't deal with remotes if the refspec is missing""" - config = self.config_reader - unset = 'placeholder' - try: - if config.get_value('fetch', default=unset) is unset: - msg = "Remote '%s' has no refspec set.\n" - msg += "You can set it as follows:" - msg += " 'git config --add \"remote.%s.fetch +refs/heads/*:refs/heads/*\"'." - raise AssertionError(msg % (self.name, self.name)) - finally: - config.release() - - def fetch(self, refspec: Union[str, List[str], None] = None, - progress: Union[RemoteProgress, None, 'UpdateProgress'] = None, - verbose: bool = True, **kwargs: Any) -> IterableList[FetchInfo]: - """Fetch the latest changes for this remote - - :param refspec: - A "refspec" is used by fetch and push to describe the mapping - between remote ref and local ref. They are combined with a colon in - the format :, preceded by an optional plus sign, +. - For example: git fetch $URL refs/heads/master:refs/heads/origin means - "grab the master branch head from the $URL and store it as my origin - branch head". And git push $URL refs/heads/master:refs/heads/to-upstream - means "publish my master branch head as to-upstream branch at $URL". - See also git-push(1). - - Taken from the git manual - - Fetch supports multiple refspecs (as the - underlying git-fetch does) - supplying a list rather than a string - for 'refspec' will make use of this facility. - :param progress: See 'push' method - :param verbose: Boolean for verbose output - :param kwargs: Additional arguments to be passed to git-fetch - :return: - IterableList(FetchInfo, ...) list of FetchInfo instances providing detailed - information about the fetch results - - :note: - As fetch does not provide progress information to non-ttys, we cannot make - it available here unfortunately as in the 'push' method.""" - if refspec is None: - # No argument refspec, then ensure the repo's config has a fetch refspec. - self._assert_refspec() - - kwargs = add_progress(kwargs, self.repo.git, progress) - if isinstance(refspec, list): - args: Sequence[Optional[str]] = refspec - else: - args = [refspec] - - proc = self.repo.git.fetch(self, *args, as_process=True, with_stdout=False, - universal_newlines=True, v=verbose, **kwargs) - res = self._get_fetch_info_from_stderr(proc, progress) - if hasattr(self.repo.odb, 'update_cache'): - self.repo.odb.update_cache() - return res - - def pull(self, refspec: Union[str, List[str], None] = None, - progress: Union[RemoteProgress, 'UpdateProgress', None] = None, - **kwargs: Any) -> IterableList[FetchInfo]: - """Pull changes from the given branch, being the same as a fetch followed - by a merge of branch with your local branch. - - :param refspec: see 'fetch' method - :param progress: see 'push' method - :param kwargs: Additional arguments to be passed to git-pull - :return: Please see 'fetch' method """ - if refspec is None: - # No argument refspec, then ensure the repo's config has a fetch refspec. - self._assert_refspec() - kwargs = add_progress(kwargs, self.repo.git, progress) - proc = self.repo.git.pull(self, refspec, with_stdout=False, as_process=True, - universal_newlines=True, v=True, **kwargs) - res = self._get_fetch_info_from_stderr(proc, progress) - if hasattr(self.repo.odb, 'update_cache'): - self.repo.odb.update_cache() - return res - - def push(self, refspec: Union[str, List[str], None] = None, - progress: Union[RemoteProgress, 'UpdateProgress', Callable[..., RemoteProgress], None] = None, - **kwargs: Any) -> IterableList[PushInfo]: - """Push changes from source branch in refspec to target branch in refspec. - - :param refspec: see 'fetch' method - :param progress: - Can take one of many value types: - - * None to discard progress information - * A function (callable) that is called with the progress information. - Signature: ``progress(op_code, cur_count, max_count=None, message='')``. - `Click here `__ for a description of all arguments - given to the function. - * An instance of a class derived from ``git.RemoteProgress`` that - overrides the ``update()`` function. - - :note: No further progress information is returned after push returns. - :param kwargs: Additional arguments to be passed to git-push - :return: - list(PushInfo, ...) list of PushInfo instances, each - one informing about an individual head which had been updated on the remote - side. - If the push contains rejected heads, these will have the PushInfo.ERROR bit set - in their flags. - If the operation fails completely, the length of the returned IterableList will - be 0.""" - kwargs = add_progress(kwargs, self.repo.git, progress) - proc = self.repo.git.push(self, refspec, porcelain=True, as_process=True, - universal_newlines=True, **kwargs) - return self._get_push_info(proc, progress) - - @ property - def config_reader(self) -> SectionConstraint[GitConfigParser]: - """ - :return: - GitConfigParser compatible object able to read options for only our remote. - Hence you may simple type config.get("pushurl") to obtain the information""" - return self._config_reader - - def _clear_cache(self) -> None: - try: - del(self._config_reader) - except AttributeError: - pass - # END handle exception - - @ property - def config_writer(self) -> SectionConstraint: - """ - :return: GitConfigParser compatible object able to write options for this remote. - :note: - You can only own one writer at a time - delete it to release the - configuration file and make it usable by others. - - To assure consistent results, you should only query options through the - writer. Once you are done writing, you are free to use the config reader - once again.""" - writer = self.repo.config_writer() - - # clear our cache to assure we re-read the possibly changed configuration - self._clear_cache() - return SectionConstraint(writer, self._config_section_name()) From 22e05c4dc83291321f97ee9d2a369e77f9a4eb1f Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sun, 8 Aug 2021 21:49:34 +0100 Subject: [PATCH 0798/2375] type fix --- git/objects/remote.py | 944 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 944 insertions(+) create mode 100644 git/objects/remote.py diff --git a/git/objects/remote.py b/git/objects/remote.py new file mode 100644 index 000000000..dbff76e55 --- /dev/null +++ b/git/objects/remote.py @@ -0,0 +1,944 @@ +# remote.py +# Copyright (C) 2008, 2009 Michael Trier (mtrier@gmail.com) and contributors +# +# This module is part of GitPython and is released under +# the BSD License: http://www.opensource.org/licenses/bsd-license.php + +# Module implementing a remote object allowing easy access to git remotes +import logging +import re + +from git.cmd import handle_process_output, Git +from git.compat import (defenc, force_text) +from git.exc import GitCommandError +from git.util import ( + LazyMixin, + IterableObj, + IterableList, + RemoteProgress, + CallableRemoteProgress, +) +from git.util import ( + join_path, +) + +from git.config import ( + GitConfigParser, + SectionConstraint, + cp, +) +from git.refs import ( + Head, + Reference, + RemoteReference, + SymbolicReference, + TagReference +) + +# typing------------------------------------------------------- + +from typing import (Any, Callable, Dict, Iterator, List, NoReturn, Optional, Sequence, + TYPE_CHECKING, Type, Union, cast, overload) + +from git.types import PathLike, Literal, Commit_ish + +if TYPE_CHECKING: + from git.repo.base import Repo + from git.objects.submodule.base import UpdateProgress + # from git.objects.commit import Commit + # from git.objects import Blob, Tree, TagObject + +flagKeyLiteral = Literal[' ', '!', '+', '-', '*', '=', 't', '?'] + +# def is_flagKeyLiteral(inp: str) -> TypeGuard[flagKeyLiteral]: +# return inp in [' ', '!', '+', '-', '=', '*', 't', '?'] + + +# ------------------------------------------------------------- + + +log = logging.getLogger('git.remote') +log.addHandler(logging.NullHandler()) + + +__all__ = ('RemoteProgress', 'PushInfo', 'FetchInfo', 'Remote') + +#{ Utilities + + +def add_progress(kwargs: Any, git: Git, + progress: Union[RemoteProgress, 'UpdateProgress', Callable[..., RemoteProgress], None] + ) -> Any: + """Add the --progress flag to the given kwargs dict if supported by the + git command. If the actual progress in the given progress instance is not + given, we do not request any progress + :return: possibly altered kwargs""" + if progress is not None: + v = git.version_info[:2] + if v >= (1, 7): + kwargs['progress'] = True + # END handle --progress + # END handle progress + return kwargs + +#} END utilities + + +@ overload +def to_progress_instance(progress: None) -> RemoteProgress: + ... + + +@ overload +def to_progress_instance(progress: Callable[..., Any]) -> CallableRemoteProgress: + ... + + +@ overload +def to_progress_instance(progress: RemoteProgress) -> RemoteProgress: + ... + + +def to_progress_instance(progress: Union[Callable[..., Any], RemoteProgress, None] + ) -> Union[RemoteProgress, CallableRemoteProgress]: + """Given the 'progress' return a suitable object derived from + RemoteProgress(). + """ + # new API only needs progress as a function + if callable(progress): + return CallableRemoteProgress(progress) + + # where None is passed create a parser that eats the progress + elif progress is None: + return RemoteProgress() + + # assume its the old API with an instance of RemoteProgress. + return progress + + +class PushInfo(IterableObj, object): + """ + Carries information about the result of a push operation of a single head:: + + info = remote.push()[0] + info.flags # bitflags providing more information about the result + info.local_ref # Reference pointing to the local reference that was pushed + # It is None if the ref was deleted. + info.remote_ref_string # path to the remote reference located on the remote side + info.remote_ref # Remote Reference on the local side corresponding to + # the remote_ref_string. It can be a TagReference as well. + info.old_commit # commit at which the remote_ref was standing before we pushed + # it to local_ref.commit. Will be None if an error was indicated + info.summary # summary line providing human readable english text about the push + """ + __slots__ = ('local_ref', 'remote_ref_string', 'flags', '_old_commit_sha', '_remote', 'summary') + _id_attribute_ = 'pushinfo' + + NEW_TAG, NEW_HEAD, NO_MATCH, REJECTED, REMOTE_REJECTED, REMOTE_FAILURE, DELETED, \ + FORCED_UPDATE, FAST_FORWARD, UP_TO_DATE, ERROR = [1 << x for x in range(11)] + + _flag_map = {'X': NO_MATCH, + '-': DELETED, + '*': 0, + '+': FORCED_UPDATE, + ' ': FAST_FORWARD, + '=': UP_TO_DATE, + '!': ERROR} + + def __init__(self, flags: int, local_ref: Union[SymbolicReference, None], remote_ref_string: str, remote: 'Remote', + old_commit: Optional[str] = None, summary: str = '') -> None: + """ Initialize a new instance + local_ref: HEAD | Head | RemoteReference | TagReference | Reference | SymbolicReference | None """ + self.flags = flags + self.local_ref = local_ref + self.remote_ref_string = remote_ref_string + self._remote = remote + self._old_commit_sha = old_commit + self.summary = summary + + @ property + def old_commit(self) -> Union[str, SymbolicReference, Commit_ish, None]: + return self._old_commit_sha and self._remote.repo.commit(self._old_commit_sha) or None + + @ property + def remote_ref(self) -> Union[RemoteReference, TagReference]: + """ + :return: + Remote Reference or TagReference in the local repository corresponding + to the remote_ref_string kept in this instance.""" + # translate heads to a local remote, tags stay as they are + if self.remote_ref_string.startswith("refs/tags"): + return TagReference(self._remote.repo, self.remote_ref_string) + elif self.remote_ref_string.startswith("refs/heads"): + remote_ref = Reference(self._remote.repo, self.remote_ref_string) + return RemoteReference(self._remote.repo, "refs/remotes/%s/%s" % (str(self._remote), remote_ref.name)) + else: + raise ValueError("Could not handle remote ref: %r" % self.remote_ref_string) + # END + + @ classmethod + def _from_line(cls, remote: 'Remote', line: str) -> 'PushInfo': + """Create a new PushInfo instance as parsed from line which is expected to be like + refs/heads/master:refs/heads/master 05d2687..1d0568e as bytes""" + control_character, from_to, summary = line.split('\t', 3) + flags = 0 + + # control character handling + try: + flags |= cls._flag_map[control_character] + except KeyError as e: + raise ValueError("Control character %r unknown as parsed from line %r" % (control_character, line)) from e + # END handle control character + + # from_to handling + from_ref_string, to_ref_string = from_to.split(':') + if flags & cls.DELETED: + from_ref: Union[SymbolicReference, None] = None + else: + if from_ref_string == "(delete)": + from_ref = None + else: + from_ref = Reference.from_path(remote.repo, from_ref_string) + + # commit handling, could be message or commit info + old_commit: Optional[str] = None + if summary.startswith('['): + if "[rejected]" in summary: + flags |= cls.REJECTED + elif "[remote rejected]" in summary: + flags |= cls.REMOTE_REJECTED + elif "[remote failure]" in summary: + flags |= cls.REMOTE_FAILURE + elif "[no match]" in summary: + flags |= cls.ERROR + elif "[new tag]" in summary: + flags |= cls.NEW_TAG + elif "[new branch]" in summary: + flags |= cls.NEW_HEAD + # uptodate encoded in control character + else: + # fast-forward or forced update - was encoded in control character, + # but we parse the old and new commit + split_token = "..." + if control_character == " ": + split_token = ".." + old_sha, _new_sha = summary.split(' ')[0].split(split_token) + # have to use constructor here as the sha usually is abbreviated + old_commit = old_sha + # END message handling + + return PushInfo(flags, from_ref, to_ref_string, remote, old_commit, summary) + + @ classmethod + def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any + ) -> NoReturn: # -> Iterator['PushInfo']: + raise NotImplementedError + + +class FetchInfo(IterableObj, object): + + """ + Carries information about the results of a fetch operation of a single head:: + + info = remote.fetch()[0] + info.ref # Symbolic Reference or RemoteReference to the changed + # remote head or FETCH_HEAD + info.flags # additional flags to be & with enumeration members, + # i.e. info.flags & info.REJECTED + # is 0 if ref is SymbolicReference + info.note # additional notes given by git-fetch intended for the user + info.old_commit # if info.flags & info.FORCED_UPDATE|info.FAST_FORWARD, + # field is set to the previous location of ref, otherwise None + info.remote_ref_path # The path from which we fetched on the remote. It's the remote's version of our info.ref + """ + __slots__ = ('ref', 'old_commit', 'flags', 'note', 'remote_ref_path') + _id_attribute_ = 'fetchinfo' + + NEW_TAG, NEW_HEAD, HEAD_UPTODATE, TAG_UPDATE, REJECTED, FORCED_UPDATE, \ + FAST_FORWARD, ERROR = [1 << x for x in range(8)] + + _re_fetch_result = re.compile(r'^\s*(.) (\[?[\w\s\.$@]+\]?)\s+(.+) -> ([^\s]+)( \(.*\)?$)?') + + _flag_map: Dict[flagKeyLiteral, int] = { + '!': ERROR, + '+': FORCED_UPDATE, + '*': 0, + '=': HEAD_UPTODATE, + ' ': FAST_FORWARD, + '-': TAG_UPDATE, + } + + @ classmethod + def refresh(cls) -> Literal[True]: + """This gets called by the refresh function (see the top level + __init__). + """ + # clear the old values in _flag_map + try: + del cls._flag_map["t"] + except KeyError: + pass + + try: + del cls._flag_map["-"] + except KeyError: + pass + + # set the value given the git version + if Git().version_info[:2] >= (2, 10): + cls._flag_map["t"] = cls.TAG_UPDATE + else: + cls._flag_map["-"] = cls.TAG_UPDATE + + return True + + def __init__(self, ref: SymbolicReference, flags: int, note: str = '', + old_commit: Union[Commit_ish, None] = None, + remote_ref_path: Optional[PathLike] = None) -> None: + """ + Initialize a new instance + """ + self.ref = ref + self.flags = flags + self.note = note + self.old_commit = old_commit + self.remote_ref_path = remote_ref_path + + def __str__(self) -> str: + return self.name + + @ property + def name(self) -> str: + """:return: Name of our remote ref""" + return self.ref.name + + @ property + def commit(self) -> Commit_ish: + """:return: Commit of our remote ref""" + return self.ref.commit + + @ classmethod + def _from_line(cls, repo: 'Repo', line: str, fetch_line: str) -> 'FetchInfo': + """Parse information from the given line as returned by git-fetch -v + and return a new FetchInfo object representing this information. + + We can handle a line as follows: + "%c %-\\*s %-\\*s -> %s%s" + + Where c is either ' ', !, +, -, \\*, or = + ! means error + + means success forcing update + - means a tag was updated + * means birth of new branch or tag + = means the head was up to date ( and not moved ) + ' ' means a fast-forward + + fetch line is the corresponding line from FETCH_HEAD, like + acb0fa8b94ef421ad60c8507b634759a472cd56c not-for-merge branch '0.1.7RC' of /tmp/tmpya0vairemote_repo""" + match = cls._re_fetch_result.match(line) + if match is None: + raise ValueError("Failed to parse line: %r" % line) + + # parse lines + remote_local_ref_str: str + control_character, operation, local_remote_ref, remote_local_ref_str, note = match.groups() + # assert is_flagKeyLiteral(control_character), f"{control_character}" + control_character = cast(flagKeyLiteral, control_character) + try: + _new_hex_sha, _fetch_operation, fetch_note = fetch_line.split("\t") + ref_type_name, fetch_note = fetch_note.split(' ', 1) + except ValueError as e: # unpack error + raise ValueError("Failed to parse FETCH_HEAD line: %r" % fetch_line) from e + + # parse flags from control_character + flags = 0 + try: + flags |= cls._flag_map[control_character] + except KeyError as e: + raise ValueError("Control character %r unknown as parsed from line %r" % (control_character, line)) from e + # END control char exception handling + + # parse operation string for more info - makes no sense for symbolic refs, but we parse it anyway + old_commit: Union[Commit_ish, None] = None + is_tag_operation = False + if 'rejected' in operation: + flags |= cls.REJECTED + if 'new tag' in operation: + flags |= cls.NEW_TAG + is_tag_operation = True + if 'tag update' in operation: + flags |= cls.TAG_UPDATE + is_tag_operation = True + if 'new branch' in operation: + flags |= cls.NEW_HEAD + if '...' in operation or '..' in operation: + split_token = '...' + if control_character == ' ': + split_token = split_token[:-1] + old_commit = repo.rev_parse(operation.split(split_token)[0]) + # END handle refspec + + # handle FETCH_HEAD and figure out ref type + # If we do not specify a target branch like master:refs/remotes/origin/master, + # the fetch result is stored in FETCH_HEAD which destroys the rule we usually + # have. In that case we use a symbolic reference which is detached + ref_type: Optional[Type[SymbolicReference]] = None + if remote_local_ref_str == "FETCH_HEAD": + ref_type = SymbolicReference + elif ref_type_name == "tag" or is_tag_operation: + # the ref_type_name can be branch, whereas we are still seeing a tag operation. It happens during + # testing, which is based on actual git operations + ref_type = TagReference + elif ref_type_name in ("remote-tracking", "branch"): + # note: remote-tracking is just the first part of the 'remote-tracking branch' token. + # We don't parse it correctly, but its enough to know what to do, and its new in git 1.7something + ref_type = RemoteReference + elif '/' in ref_type_name: + # If the fetch spec look something like this '+refs/pull/*:refs/heads/pull/*', and is thus pretty + # much anything the user wants, we will have trouble to determine what's going on + # For now, we assume the local ref is a Head + ref_type = Head + else: + raise TypeError("Cannot handle reference type: %r" % ref_type_name) + # END handle ref type + + # create ref instance + if ref_type is SymbolicReference: + remote_local_ref = ref_type(repo, "FETCH_HEAD") + else: + # determine prefix. Tags are usually pulled into refs/tags, they may have subdirectories. + # It is not clear sometimes where exactly the item is, unless we have an absolute path as indicated + # by the 'ref/' prefix. Otherwise even a tag could be in refs/remotes, which is when it will have the + # 'tags/' subdirectory in its path. + # We don't want to test for actual existence, but try to figure everything out analytically. + ref_path: Optional[PathLike] = None + remote_local_ref_str = remote_local_ref_str.strip() + + if remote_local_ref_str.startswith(Reference._common_path_default + "/"): + # always use actual type if we get absolute paths + # Will always be the case if something is fetched outside of refs/remotes (if its not a tag) + ref_path = remote_local_ref_str + if ref_type is not TagReference and not \ + remote_local_ref_str.startswith(RemoteReference._common_path_default + "/"): + ref_type = Reference + # END downgrade remote reference + elif ref_type is TagReference and 'tags/' in remote_local_ref_str: + # even though its a tag, it is located in refs/remotes + ref_path = join_path(RemoteReference._common_path_default, remote_local_ref_str) + else: + ref_path = join_path(ref_type._common_path_default, remote_local_ref_str) + # END obtain refpath + + # even though the path could be within the git conventions, we make + # sure we respect whatever the user wanted, and disabled path checking + remote_local_ref = ref_type(repo, ref_path, check_path=False) + # END create ref instance + + note = (note and note.strip()) or '' + + return cls(remote_local_ref, flags, note, old_commit, local_remote_ref) + + @ classmethod + def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any + ) -> NoReturn: # -> Iterator['FetchInfo']: + raise NotImplementedError + + +class Remote(LazyMixin, IterableObj): + + """Provides easy read and write access to a git remote. + + Everything not part of this interface is considered an option for the current + remote, allowing constructs like remote.pushurl to query the pushurl. + + NOTE: When querying configuration, the configuration accessor will be cached + to speed up subsequent accesses.""" + + __slots__ = ("repo", "name", "_config_reader") + _id_attribute_ = "name" + + def __init__(self, repo: 'Repo', name: str) -> None: + """Initialize a remote instance + + :param repo: The repository we are a remote of + :param name: the name of the remote, i.e. 'origin'""" + self.repo = repo + self.name = name + self.url: str + + def __getattr__(self, attr: str) -> Any: + """Allows to call this instance like + remote.special( \\*args, \\*\\*kwargs) to call git-remote special self.name""" + if attr == "_config_reader": + return super(Remote, self).__getattr__(attr) + + # sometimes, probably due to a bug in python itself, we are being called + # even though a slot of the same name exists + try: + return self._config_reader.get(attr) + except cp.NoOptionError: + return super(Remote, self).__getattr__(attr) + # END handle exception + + def _config_section_name(self) -> str: + return 'remote "%s"' % self.name + + def _set_cache_(self, attr: str) -> None: + if attr == "_config_reader": + # NOTE: This is cached as __getattr__ is overridden to return remote config values implicitly, such as + # in print(r.pushurl) + self._config_reader = SectionConstraint(self.repo.config_reader("repository"), self._config_section_name()) + else: + super(Remote, self)._set_cache_(attr) + + def __str__(self) -> str: + return self.name + + def __repr__(self) -> str: + return '' % (self.__class__.__name__, self.name) + + def __eq__(self, other: object) -> bool: + return isinstance(other, type(self)) and self.name == other.name + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def __hash__(self) -> int: + return hash(self.name) + + def exists(self) -> bool: + """ + :return: True if this is a valid, existing remote. + Valid remotes have an entry in the repository's configuration""" + try: + self.config_reader.get('url') + return True + except cp.NoOptionError: + # we have the section at least ... + return True + except cp.NoSectionError: + return False + # end + + @ classmethod + def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any) -> Iterator['Remote']: + """:return: Iterator yielding Remote objects of the given repository""" + for section in repo.config_reader("repository").sections(): + if not section.startswith('remote '): + continue + lbound = section.find('"') + rbound = section.rfind('"') + if lbound == -1 or rbound == -1: + raise ValueError("Remote-Section has invalid format: %r" % section) + yield Remote(repo, section[lbound + 1:rbound]) + # END for each configuration section + + def set_url(self, new_url: str, old_url: Optional[str] = None, **kwargs: Any) -> 'Remote': + """Configure URLs on current remote (cf command git remote set_url) + + This command manages URLs on the remote. + + :param new_url: string being the URL to add as an extra remote URL + :param old_url: when set, replaces this URL with new_url for the remote + :return: self + """ + scmd = 'set-url' + kwargs['insert_kwargs_after'] = scmd + if old_url: + self.repo.git.remote(scmd, self.name, new_url, old_url, **kwargs) + else: + self.repo.git.remote(scmd, self.name, new_url, **kwargs) + return self + + def add_url(self, url: str, **kwargs: Any) -> 'Remote': + """Adds a new url on current remote (special case of git remote set_url) + + This command adds new URLs to a given remote, making it possible to have + multiple URLs for a single remote. + + :param url: string being the URL to add as an extra remote URL + :return: self + """ + return self.set_url(url, add=True) + + def delete_url(self, url: str, **kwargs: Any) -> 'Remote': + """Deletes a new url on current remote (special case of git remote set_url) + + This command deletes new URLs to a given remote, making it possible to have + multiple URLs for a single remote. + + :param url: string being the URL to delete from the remote + :return: self + """ + return self.set_url(url, delete=True) + + @ property + def urls(self) -> Iterator[str]: + """:return: Iterator yielding all configured URL targets on a remote as strings""" + try: + remote_details = self.repo.git.remote("get-url", "--all", self.name) + assert isinstance(remote_details, str) + for line in remote_details.split('\n'): + yield line + except GitCommandError as ex: + ## We are on git < 2.7 (i.e TravisCI as of Oct-2016), + # so `get-utl` command does not exist yet! + # see: https://github.com/gitpython-developers/GitPython/pull/528#issuecomment-252976319 + # and: http://stackoverflow.com/a/32991784/548792 + # + if 'Unknown subcommand: get-url' in str(ex): + try: + remote_details = self.repo.git.remote("show", self.name) + assert isinstance(remote_details, str) + for line in remote_details.split('\n'): + if ' Push URL:' in line: + yield line.split(': ')[-1] + except GitCommandError as _ex: + if any(msg in str(_ex) for msg in ['correct access rights', 'cannot run ssh']): + # If ssh is not setup to access this repository, see issue 694 + remote_details = self.repo.git.config('--get-all', 'remote.%s.url' % self.name) + assert isinstance(remote_details, str) + for line in remote_details.split('\n'): + yield line + else: + raise _ex + else: + raise ex + + @ property + def refs(self) -> IterableList[RemoteReference]: + """ + :return: + IterableList of RemoteReference objects. It is prefixed, allowing + you to omit the remote path portion, i.e.:: + remote.refs.master # yields RemoteReference('/refs/remotes/origin/master')""" + out_refs: IterableList[RemoteReference] = IterableList(RemoteReference._id_attribute_, "%s/" % self.name) + out_refs.extend(RemoteReference.list_items(self.repo, remote=self.name)) + return out_refs + + @ property + def stale_refs(self) -> IterableList[Reference]: + """ + :return: + IterableList RemoteReference objects that do not have a corresponding + head in the remote reference anymore as they have been deleted on the + remote side, but are still available locally. + + The IterableList is prefixed, hence the 'origin' must be omitted. See + 'refs' property for an example. + + To make things more complicated, it can be possible for the list to include + other kinds of references, for example, tag references, if these are stale + as well. This is a fix for the issue described here: + https://github.com/gitpython-developers/GitPython/issues/260 + """ + out_refs: IterableList[Reference] = IterableList(RemoteReference._id_attribute_, "%s/" % self.name) + for line in self.repo.git.remote("prune", "--dry-run", self).splitlines()[2:]: + # expecting + # * [would prune] origin/new_branch + token = " * [would prune] " + if not line.startswith(token): + continue + ref_name = line.replace(token, "") + # sometimes, paths start with a full ref name, like refs/tags/foo, see #260 + if ref_name.startswith(Reference._common_path_default + '/'): + out_refs.append(Reference.from_path(self.repo, ref_name)) + else: + fqhn = "%s/%s" % (RemoteReference._common_path_default, ref_name) + out_refs.append(RemoteReference(self.repo, fqhn)) + # end special case handling + # END for each line + return out_refs + + @ classmethod + def create(cls, repo: 'Repo', name: str, url: str, **kwargs: Any) -> 'Remote': + """Create a new remote to the given repository + :param repo: Repository instance that is to receive the new remote + :param name: Desired name of the remote + :param url: URL which corresponds to the remote's name + :param kwargs: Additional arguments to be passed to the git-remote add command + :return: New Remote instance + :raise GitCommandError: in case an origin with that name already exists""" + scmd = 'add' + kwargs['insert_kwargs_after'] = scmd + repo.git.remote(scmd, name, Git.polish_url(url), **kwargs) + return cls(repo, name) + + # add is an alias + add = create + + @ classmethod + def remove(cls, repo: 'Repo', name: str) -> str: + """Remove the remote with the given name + :return: the passed remote name to remove + """ + repo.git.remote("rm", name) + if isinstance(name, cls): + name._clear_cache() + return name + + # alias + rm = remove + + def rename(self, new_name: str) -> 'Remote': + """Rename self to the given new_name + :return: self """ + if self.name == new_name: + return self + + self.repo.git.remote("rename", self.name, new_name) + self.name = new_name + self._clear_cache() + + return self + + def update(self, **kwargs: Any) -> 'Remote': + """Fetch all changes for this remote, including new branches which will + be forced in ( in case your local remote branch is not part the new remote branches + ancestry anymore ). + + :param kwargs: + Additional arguments passed to git-remote update + + :return: self """ + scmd = 'update' + kwargs['insert_kwargs_after'] = scmd + self.repo.git.remote(scmd, self.name, **kwargs) + return self + + def _get_fetch_info_from_stderr(self, proc: 'Git.AutoInterrupt', + progress: Union[Callable[..., Any], RemoteProgress, None] + ) -> IterableList['FetchInfo']: + + progress = to_progress_instance(progress) + + # skip first line as it is some remote info we are not interested in + output: IterableList['FetchInfo'] = IterableList('name') + + # lines which are no progress are fetch info lines + # this also waits for the command to finish + # Skip some progress lines that don't provide relevant information + fetch_info_lines = [] + # Basically we want all fetch info lines which appear to be in regular form, and thus have a + # command character. Everything else we ignore, + cmds = set(FetchInfo._flag_map.keys()) + + progress_handler = progress.new_message_handler() + handle_process_output(proc, None, progress_handler, finalizer=None, decode_streams=False) + + stderr_text = progress.error_lines and '\n'.join(progress.error_lines) or '' + proc.wait(stderr=stderr_text) + if stderr_text: + log.warning("Error lines received while fetching: %s", stderr_text) + + for line in progress.other_lines: + line = force_text(line) + for cmd in cmds: + if len(line) > 1 and line[0] == ' ' and line[1] == cmd: + fetch_info_lines.append(line) + continue + + # read head information + fetch_head = SymbolicReference(self.repo, "FETCH_HEAD") + with open(fetch_head.abspath, 'rb') as fp: + fetch_head_info = [line.decode(defenc) for line in fp.readlines()] + + l_fil = len(fetch_info_lines) + l_fhi = len(fetch_head_info) + if l_fil != l_fhi: + msg = "Fetch head lines do not match lines provided via progress information\n" + msg += "length of progress lines %i should be equal to lines in FETCH_HEAD file %i\n" + msg += "Will ignore extra progress lines or fetch head lines." + msg %= (l_fil, l_fhi) + log.debug(msg) + log.debug("info lines: " + str(fetch_info_lines)) + log.debug("head info : " + str(fetch_head_info)) + if l_fil < l_fhi: + fetch_head_info = fetch_head_info[:l_fil] + else: + fetch_info_lines = fetch_info_lines[:l_fhi] + # end truncate correct list + # end sanity check + sanitization + + for err_line, fetch_line in zip(fetch_info_lines, fetch_head_info): + try: + output.append(FetchInfo._from_line(self.repo, err_line, fetch_line)) + except ValueError as exc: + log.debug("Caught error while parsing line: %s", exc) + log.warning("Git informed while fetching: %s", err_line.strip()) + return output + + def _get_push_info(self, proc: 'Git.AutoInterrupt', + progress: Union[Callable[..., Any], RemoteProgress, None]) -> IterableList[PushInfo]: + progress = to_progress_instance(progress) + + # read progress information from stderr + # we hope stdout can hold all the data, it should ... + # read the lines manually as it will use carriage returns between the messages + # to override the previous one. This is why we read the bytes manually + progress_handler = progress.new_message_handler() + output: IterableList[PushInfo] = IterableList('push_infos') + + def stdout_handler(line: str) -> None: + try: + output.append(PushInfo._from_line(self, line)) + except ValueError: + # If an error happens, additional info is given which we parse below. + pass + + handle_process_output(proc, stdout_handler, progress_handler, finalizer=None, decode_streams=False) + stderr_text = progress.error_lines and '\n'.join(progress.error_lines) or '' + try: + proc.wait(stderr=stderr_text) + except Exception: + if not output: + raise + elif stderr_text: + log.warning("Error lines received while fetching: %s", stderr_text) + + return output + + def _assert_refspec(self) -> None: + """Turns out we can't deal with remotes if the refspec is missing""" + config = self.config_reader + unset = 'placeholder' + try: + if config.get_value('fetch', default=unset) is unset: + msg = "Remote '%s' has no refspec set.\n" + msg += "You can set it as follows:" + msg += " 'git config --add \"remote.%s.fetch +refs/heads/*:refs/heads/*\"'." + raise AssertionError(msg % (self.name, self.name)) + finally: + config.release() + + def fetch(self, refspec: Union[str, List[str], None] = None, + progress: Union[RemoteProgress, None, 'UpdateProgress'] = None, + verbose: bool = True, **kwargs: Any) -> IterableList[FetchInfo]: + """Fetch the latest changes for this remote + + :param refspec: + A "refspec" is used by fetch and push to describe the mapping + between remote ref and local ref. They are combined with a colon in + the format :, preceded by an optional plus sign, +. + For example: git fetch $URL refs/heads/master:refs/heads/origin means + "grab the master branch head from the $URL and store it as my origin + branch head". And git push $URL refs/heads/master:refs/heads/to-upstream + means "publish my master branch head as to-upstream branch at $URL". + See also git-push(1). + + Taken from the git manual + + Fetch supports multiple refspecs (as the + underlying git-fetch does) - supplying a list rather than a string + for 'refspec' will make use of this facility. + :param progress: See 'push' method + :param verbose: Boolean for verbose output + :param kwargs: Additional arguments to be passed to git-fetch + :return: + IterableList(FetchInfo, ...) list of FetchInfo instances providing detailed + information about the fetch results + + :note: + As fetch does not provide progress information to non-ttys, we cannot make + it available here unfortunately as in the 'push' method.""" + if refspec is None: + # No argument refspec, then ensure the repo's config has a fetch refspec. + self._assert_refspec() + + kwargs = add_progress(kwargs, self.repo.git, progress) + if isinstance(refspec, list): + args: Sequence[Optional[str]] = refspec + else: + args = [refspec] + + proc = self.repo.git.fetch(self, *args, as_process=True, with_stdout=False, + universal_newlines=True, v=verbose, **kwargs) + res = self._get_fetch_info_from_stderr(proc, progress) + if hasattr(self.repo.odb, 'update_cache'): + self.repo.odb.update_cache() + return res + + def pull(self, refspec: Union[str, List[str], None] = None, + progress: Union[RemoteProgress, 'UpdateProgress', None] = None, + **kwargs: Any) -> IterableList[FetchInfo]: + """Pull changes from the given branch, being the same as a fetch followed + by a merge of branch with your local branch. + + :param refspec: see 'fetch' method + :param progress: see 'push' method + :param kwargs: Additional arguments to be passed to git-pull + :return: Please see 'fetch' method """ + if refspec is None: + # No argument refspec, then ensure the repo's config has a fetch refspec. + self._assert_refspec() + kwargs = add_progress(kwargs, self.repo.git, progress) + proc = self.repo.git.pull(self, refspec, with_stdout=False, as_process=True, + universal_newlines=True, v=True, **kwargs) + res = self._get_fetch_info_from_stderr(proc, progress) + if hasattr(self.repo.odb, 'update_cache'): + self.repo.odb.update_cache() + return res + + def push(self, refspec: Union[str, List[str], None] = None, + progress: Union[RemoteProgress, 'UpdateProgress', Callable[..., RemoteProgress], None] = None, + **kwargs: Any) -> IterableList[PushInfo]: + """Push changes from source branch in refspec to target branch in refspec. + + :param refspec: see 'fetch' method + :param progress: + Can take one of many value types: + + * None to discard progress information + * A function (callable) that is called with the progress information. + Signature: ``progress(op_code, cur_count, max_count=None, message='')``. + `Click here `__ for a description of all arguments + given to the function. + * An instance of a class derived from ``git.RemoteProgress`` that + overrides the ``update()`` function. + + :note: No further progress information is returned after push returns. + :param kwargs: Additional arguments to be passed to git-push + :return: + list(PushInfo, ...) list of PushInfo instances, each + one informing about an individual head which had been updated on the remote + side. + If the push contains rejected heads, these will have the PushInfo.ERROR bit set + in their flags. + If the operation fails completely, the length of the returned IterableList will + be 0.""" + kwargs = add_progress(kwargs, self.repo.git, progress) + proc = self.repo.git.push(self, refspec, porcelain=True, as_process=True, + universal_newlines=True, **kwargs) + return self._get_push_info(proc, progress) + + @ property + def config_reader(self) -> SectionConstraint[GitConfigParser]: + """ + :return: + GitConfigParser compatible object able to read options for only our remote. + Hence you may simple type config.get("pushurl") to obtain the information""" + return self._config_reader + + def _clear_cache(self) -> None: + try: + del(self._config_reader) + except AttributeError: + pass + # END handle exception + + @ property + def config_writer(self) -> SectionConstraint: + """ + :return: GitConfigParser compatible object able to write options for this remote. + :note: + You can only own one writer at a time - delete it to release the + configuration file and make it usable by others. + + To assure consistent results, you should only query options through the + writer. Once you are done writing, you are free to use the config reader + once again.""" + writer = self.repo.config_writer() + + # clear our cache to assure we re-read the possibly changed configuration + self._clear_cache() + return SectionConstraint(writer, self._config_section_name()) From 07078e9f11499ab0001e0eb1e6000b52e8a5fb81 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sun, 8 Aug 2021 21:51:31 +0100 Subject: [PATCH 0799/2375] type fixo --- git/{objects => }/remote.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename git/{objects => }/remote.py (100%) diff --git a/git/objects/remote.py b/git/remote.py similarity index 100% rename from git/objects/remote.py rename to git/remote.py From bf0c332700e90c5c8864c059562b7861941f48e1 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sun, 8 Aug 2021 21:55:33 +0100 Subject: [PATCH 0800/2375] add pypy to test matrix --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index dd94ab9d5..9604587e7 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9, "3.10.0-beta.4"] + python-version: [3.7, 3.8, 3.9, "3.10.0-beta.4", "pypy37"] steps: - uses: actions/checkout@v2 From 4381f6cb175c2749f05ca45f6cfa4f3e277a13c3 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sun, 8 Aug 2021 21:57:38 +0100 Subject: [PATCH 0801/2375] update 3.10 to rc1 in test matrix --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 9604587e7..25e3c3dd5 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9, "3.10.0-beta.4", "pypy37"] + python-version: [3.7, 3.8, 3.9, "3.10.0-rc.1"] steps: - uses: actions/checkout@v2 From 079d7fd6994bc6751bef4797a027b9e6daf966f4 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 9 Aug 2021 09:55:56 +0100 Subject: [PATCH 0802/2375] try fix for Protocol buy in 3.10 --- git/objects/util.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index 16d4c0ac8..9f98db56b 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -22,10 +22,10 @@ from datetime import datetime, timedelta, tzinfo # typing ------------------------------------------------------------ -from typing import (Any, Callable, Deque, Iterator, NamedTuple, overload, Sequence, +from typing import (Any, Callable, Deque, Iterator, Generic, NamedTuple, overload, Sequence, TYPE_CHECKING, Tuple, Type, TypeVar, Union, cast) -from git.types import Has_id_attribute, Literal, Protocol, runtime_checkable +from git.types import Has_id_attribute, Literal if TYPE_CHECKING: from io import BytesIO, StringIO @@ -35,6 +35,12 @@ from .tree import Tree, TraversedTreeTup from subprocess import Popen from .submodule.base import Submodule + from git.types import Protocol, runtime_checkable +else: + Protocol = Generic + + def runtime_checkable(f): + return f class TraverseNT(NamedTuple): From 1349ddc19f5a7f6aa56b0bc53d2f2c002128d360 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 9 Aug 2021 09:58:16 +0100 Subject: [PATCH 0803/2375] try fix for Protocol buy in 3.10 2 --- git/objects/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/objects/util.py b/git/objects/util.py index 9f98db56b..d227f3465 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -37,7 +37,7 @@ from .submodule.base import Submodule from git.types import Protocol, runtime_checkable else: - Protocol = Generic + Protocol = Generic[Any] def runtime_checkable(f): return f From 2f42966cd1ec287d1c2011224940131dbda2383d Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 9 Aug 2021 10:08:42 +0100 Subject: [PATCH 0804/2375] try fix for Protocol buy in 3.10 3 --- git/objects/util.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/objects/util.py b/git/objects/util.py index d227f3465..4b830e0e4 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -25,7 +25,7 @@ from typing import (Any, Callable, Deque, Iterator, Generic, NamedTuple, overload, Sequence, TYPE_CHECKING, Tuple, Type, TypeVar, Union, cast) -from git.types import Has_id_attribute, Literal +from git.types import Has_id_attribute, Literal, _T if TYPE_CHECKING: from io import BytesIO, StringIO @@ -37,7 +37,7 @@ from .submodule.base import Submodule from git.types import Protocol, runtime_checkable else: - Protocol = Generic[Any] + Protocol = Generic[_T] def runtime_checkable(f): return f From c35ab1dd61e91bd55d939302d1f02e1c58985826 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 9 Aug 2021 17:14:31 +0100 Subject: [PATCH 0805/2375] upgrade sphinx for 3.10 compat --- doc/requirements.txt | 2 +- git/objects/util.py | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/requirements.txt b/doc/requirements.txt index 20598a39c..917feb350 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -1,3 +1,3 @@ -sphinx==4.1.1 +sphinx==4.1.2 sphinx_rtd_theme sphinx-autodoc-typehints diff --git a/git/objects/util.py b/git/objects/util.py index 4b830e0e4..187318fe6 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -5,7 +5,7 @@ # the BSD License: http://www.opensource.org/licenses/bsd-license.php """Module for general utility functions""" -from abc import abstractmethod +from abc import ABC, abstractmethod import warnings from git.util import ( IterableList, @@ -22,10 +22,10 @@ from datetime import datetime, timedelta, tzinfo # typing ------------------------------------------------------------ -from typing import (Any, Callable, Deque, Iterator, Generic, NamedTuple, overload, Sequence, +from typing import (Any, Callable, Deque, Iterator, Generic, NamedTuple, overload, Sequence, # NOQA: F401 TYPE_CHECKING, Tuple, Type, TypeVar, Union, cast) -from git.types import Has_id_attribute, Literal, _T +from git.types import Has_id_attribute, Literal, _T # NOQA: F401 if TYPE_CHECKING: from io import BytesIO, StringIO @@ -37,7 +37,8 @@ from .submodule.base import Submodule from git.types import Protocol, runtime_checkable else: - Protocol = Generic[_T] + # Protocol = Generic[_T] # NNeeded for typing bug #572? + Protocol = ABC def runtime_checkable(f): return f From 5835f013e88d5e29fa73fe7eac8f620cfd3fc0a1 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 9 Aug 2021 18:02:25 +0100 Subject: [PATCH 0806/2375] Update changelog and version --- .github/workflows/pythonpackage.yml | 2 +- VERSION | 2 +- doc/source/changes.rst | 77 +++++++++++++++++++---------- git/cmd.py | 2 + 4 files changed, 56 insertions(+), 27 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 25e3c3dd5..4f871bb34 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9, "3.10.0-rc.1"] + python-version: [3.7, 3.8, 3.9, "3.10.0-b4"] steps: - uses: actions/checkout@v2 diff --git a/VERSION b/VERSION index 589ccc9b9..5c5bdc27d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.20 +3.1.21 diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 09da1eb27..833222fca 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,24 +2,51 @@ Changelog ========= -3.1.20 +3.1.21 ====== -* This is the second typed release with a lot of improvements under the hood. +* This is the second typed release with a lot of improvements under the hood. + +* General: + - Remove python 3.6 support + - Remove distutils inline with deprecation in standard library. + - Update sphinx to 4.1.12 and use autodoc-typehints. + +* Typing: + - Add types to ALL functions. + - Ensure py.typed is collected. + - Increase mypy strictness with disallow_untyped_defs, warn_redundant_casts, warn_unreachable. + - Use typing.NamedTuple and typing.OrderedDict now 3.6 dropped. + - Remove use of typing.TypeGuard until later release, to allow dependant libs time to update. + - Tracking issue: https://github.com/gitpython-developers/GitPython/issues/1095 + +* Runtime improvements: + - Add clone_multi_options support to submodule.add() + - Delay calling get_user_id() unless essential, to support sand-boxed environments. + - Add timeout to handle_process_output(), in case thread.join() hangs. + +See the following for details: +https://github.com/gitpython-developers/gitpython/milestone/52?closed=1 + + +3.1.20 (YANKED) +====== + +* This is the second typed release with a lot of improvements under the hood. * Tracking issue: https://github.com/gitpython-developers/GitPython/issues/1095 - + See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/52?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/52?closed=1 3.1.19 (YANKED) =============== -* This is the second typed release with a lot of improvements under the hood. +* This is the second typed release with a lot of improvements under the hood. * Tracking issue: https://github.com/gitpython-developers/GitPython/issues/1095 - + See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/51?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/51?closed=1 3.1.18 ====== @@ -27,7 +54,7 @@ https://github.com/gitpython-developers/gitpython/milestone/51?closed=1 * drop support for python 3.5 to reduce maintenance burden on typing. Lower patch levels of python 3.5 would break, too. See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/50?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/50?closed=1 3.1.17 ====== @@ -37,7 +64,7 @@ https://github.com/gitpython-developers/gitpython/milestone/50?closed=1 * Add more static typing information See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/49?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/49?closed=1 3.1.16 (YANKED) =============== @@ -46,7 +73,7 @@ https://github.com/gitpython-developers/gitpython/milestone/49?closed=1 * Add more static typing information See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/48?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/48?closed=1 3.1.15 (YANKED) =============== @@ -54,7 +81,7 @@ https://github.com/gitpython-developers/gitpython/milestone/48?closed=1 * add deprectation warning for python 3.5 See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/47?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/47?closed=1 3.1.14 ====== @@ -65,19 +92,19 @@ https://github.com/gitpython-developers/gitpython/milestone/47?closed=1 * Drop python 3.4 support See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/46?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/46?closed=1 3.1.13 ====== See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/45?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/45?closed=1 3.1.12 ====== See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/44?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/44?closed=1 3.1.11 ====== @@ -85,20 +112,20 @@ https://github.com/gitpython-developers/gitpython/milestone/44?closed=1 Fixes regression of 3.1.10. See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/43?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/43?closed=1 3.1.10 ====== See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/42?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/42?closed=1 3.1.9 ===== See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/41?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/41?closed=1 3.1.8 @@ -109,7 +136,7 @@ https://github.com/gitpython-developers/gitpython/milestone/41?closed=1 See the following for more details: -https://github.com/gitpython-developers/gitpython/milestone/40?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/40?closed=1 3.1.7 @@ -135,13 +162,13 @@ https://github.com/gitpython-developers/gitpython/milestone/40?closed=1 * package size was reduced significantly not placing tests into the package anymore. See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/39?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/39?closed=1 3.1.3 ===== See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/38?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/38?closed=1 3.1.2 ===== @@ -190,7 +217,7 @@ Bugfixes Bugfixes -------- -* Fixed Repo.__repr__ when subclassed +* Fixed Repo.__repr__ when subclassed (`#968 `_) * Removed compatibility shims for Python < 3.4 and old mock library * Replaced usage of deprecated unittest aliases and Logger.warn @@ -213,7 +240,7 @@ Bugfixes -------- * Fixed warning for usage of environment variables for paths containing ``$`` or ``%`` - (`#832 `_, + (`#832 `_, `#961 `_) * Added support for parsing Git internal date format (@ ) (`#965 `_) @@ -371,7 +398,7 @@ Notable fixes * The `GIT_DIR` environment variable does not override the `path` argument when initializing a `Repo` object anymore. However, if said `path` unset, `GIT_DIR` will be used to fill the void. - + All issues and PRs can be viewed in all detail when following this URL: https://github.com/gitpython-developers/GitPython/issues?q=is%3Aclosed+milestone%3A%22v2.1.0+-+proper+windows+support%22 @@ -401,7 +428,7 @@ https://github.com/gitpython-developers/GitPython/issues?q=is%3Aclosed+milestone 2.0.7 - New Features ==================== -* `IndexFile.commit(...,skip_hooks=False)` added. This parameter emulates the +* `IndexFile.commit(...,skip_hooks=False)` added. This parameter emulates the behaviour of `--no-verify` on the command-line. 2.0.6 - Fixes and Features @@ -441,7 +468,7 @@ https://github.com/gitpython-developers/GitPython/issues?q=is%3Aclosed+milestone commit messages contained ``\r`` characters * Fix: progress handler exceptions are not caught anymore, which would usually just hide bugs previously. -* Fix: The `Git.execute` method will now redirect `stdout` to `devnull` if `with_stdout` is false, +* Fix: The `Git.execute` method will now redirect `stdout` to `devnull` if `with_stdout` is false, which is the intended behaviour based on the parameter's documentation. 2.0.2 - Fixes diff --git a/git/cmd.py b/git/cmd.py index ff1dfa343..068ad134d 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -147,6 +147,8 @@ def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], # for t in threads: t.join(timeout=timeout) + if t.is_alive(): + raise RuntimeError(f"Thread join() timed out in cmd.handle_process_output(). Timeout={timeout} seconds") if finalizer: return finalizer(process) From 1a71d9abe019e9bb8689ee7189c4dcd62bd21df8 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 9 Aug 2021 18:05:59 +0100 Subject: [PATCH 0807/2375] Change CI to 3.10.0-beta.4, to get docs to pass --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 4f871bb34..dd94ab9d5 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9, "3.10.0-b4"] + python-version: [3.7, 3.8, 3.9, "3.10.0-beta.4"] steps: - uses: actions/checkout@v2 From 6835c910174daebdfbfcd735d7476d7929c2a8c0 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 9 Aug 2021 18:12:34 +0100 Subject: [PATCH 0808/2375] Update changes.rst --- doc/source/changes.rst | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 833222fca..16741ad90 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -9,7 +9,7 @@ Changelog * General: - Remove python 3.6 support - - Remove distutils inline with deprecation in standard library. + - Remove distutils ahead of deprecation in standard library. - Update sphinx to 4.1.12 and use autodoc-typehints. * Typing: @@ -17,6 +17,7 @@ Changelog - Ensure py.typed is collected. - Increase mypy strictness with disallow_untyped_defs, warn_redundant_casts, warn_unreachable. - Use typing.NamedTuple and typing.OrderedDict now 3.6 dropped. + - Make Protocol classes ABCs at runtime due to new bug in 3.10.0-rc1 - Remove use of typing.TypeGuard until later release, to allow dependant libs time to update. - Tracking issue: https://github.com/gitpython-developers/GitPython/issues/1095 @@ -30,7 +31,7 @@ https://github.com/gitpython-developers/gitpython/milestone/52?closed=1 3.1.20 (YANKED) -====== +=============== * This is the second typed release with a lot of improvements under the hood. * Tracking issue: https://github.com/gitpython-developers/GitPython/issues/1095 From 3439a3ec3582f7317ee46418c24996951409cedc Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 9 Aug 2021 18:19:37 +0100 Subject: [PATCH 0809/2375] Change CI python 3.10 to rc1 again. Spinx broken either way --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index dd94ab9d5..25e3c3dd5 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9, "3.10.0-beta.4"] + python-version: [3.7, 3.8, 3.9, "3.10.0-rc.1"] steps: - uses: actions/checkout@v2 From 5b3669e24a8ce7f3f482de86fcf95620db643467 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 12 Aug 2021 07:30:49 +0800 Subject: [PATCH 0810/2375] Don't fail on import if the working dir isn't valid (#1319) --- git/cmd.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/git/cmd.py b/git/cmd.py index b84c43df3..226b8710b 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -781,7 +781,10 @@ def execute(self, log.info(' '.join(redacted_command)) # Allow the user to have the command executed in their working dir. - cwd = self._working_dir or os.getcwd() + try: + cwd = self._working_dir or os.getcwd() # type: Union[None, str] + except FileNotFoundError: + cwd = None # Start the process inline_env = env From bd0fa882f6c8fd2ab907e9f5988f32f466d75bdf Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 18 Aug 2021 09:09:29 +0800 Subject: [PATCH 0811/2375] overhaul CONTIRIBUTING.md Thanks to #1322 --- CONTRIBUTING.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f685e7e72..56af0df2a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,11 +1,10 @@ -### How to contribute +# How to contribute The following is a short step-by-step rundown of what one typically would do to contribute. -* [fork this project](https://github.com/gitpython-developers/GitPython/fork) on GitHub. -* For setting up the environment to run the self tests, please look at `.travis.yml`. -* Please try to **write a test that fails unless the contribution is present.** -* Try to avoid massive commits and prefer to take small steps, with one commit for each. -* Feel free to add yourself to AUTHORS file. -* Create a pull request. - +- [fork this project](https://github.com/gitpython-developers/GitPython/fork) on GitHub. +- For setting up the environment to run the self tests, please run `init-tests-after-clone.sh`. +- Please try to **write a test that fails unless the contribution is present.** +- Try to avoid massive commits and prefer to take small steps, with one commit for each. +- Feel free to add yourself to AUTHORS file. +- Create a pull request. From 1207747121a79a0cd14426e595f5fe72ccc1d51a Mon Sep 17 00:00:00 2001 From: Michael Mulich Date: Tue, 17 Aug 2021 12:57:53 -0700 Subject: [PATCH 0812/2375] Use the Git class type definition within Repo classmethods Allow the GitCommandWrapperType definition to be used within the Repo classmethods. This change follows the intended purpose as stated in the code, "Subclasses may easily bring in their own custom types by placing a constructor or type here." The usecase that prompted this change has to do with `GIT_SSH_COMMAND`. The goal is to setup a custom `Git` class with knowledge of the value, something like as follows ```python from git import Git as BaseGit, Repo as BaseRepo class Git(BaseGit): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # For example, assign the SSH command using the current flask # app's configured setting. self.update_environment(GIT_SSH_COMMAND=current_app.config['GIT_SSH_COMMAND']) class Repo(BaseRepo): GitCommandWrapperType = _Git ``` With this change, the above example will allow the developer to use `Repo.clone_from(...)` with the indended outcome. Otherwise the developer will have two differing result when using `Repo(...)` vs `Repo.clone_from(...)`. --- git/repo/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index c0229a844..e308fd8a2 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -1042,7 +1042,7 @@ def init(cls, path: Union[PathLike, None] = None, mkdir: bool = True, odbt: Type os.makedirs(path, 0o755) # git command automatically chdir into the directory - git = Git(path) + git = cls.GitCommandWrapperType(path) git.init(**kwargs) return cls(path, odbt=odbt) @@ -1142,7 +1142,7 @@ def clone_from(cls, url: PathLike, to_path: PathLike, progress: Optional[Callabl :param multi_options: See ``clone`` method :param kwargs: see the ``clone`` method :return: Repo instance pointing to the cloned directory""" - git = Git(os.getcwd()) + git = cls.GitCommandWrapperType(os.getcwd()) if env is not None: git.update_environment(**env) return cls._clone(git, url, to_path, GitCmdObjectDB, progress, multi_options, **kwargs) From dff15cd8ba473776f76e8a3b6359a861e72d74aa Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 19 Aug 2021 12:09:11 +0300 Subject: [PATCH 0813/2375] Replace deprecated unittest aliases --- gitdb/test/db/lib.py | 4 ++-- gitdb/test/db/test_git.py | 2 +- gitdb/test/db/test_loose.py | 2 +- gitdb/test/db/test_pack.py | 2 +- gitdb/test/test_pack.py | 2 +- gitdb/test/test_stream.py | 2 +- gitdb/test/test_util.py | 6 +++--- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index c6f4316cd..3df326b68 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -102,8 +102,8 @@ def _assert_object_writing(self, db): assert ostream.type == str_blob_type assert ostream.size == len(data) else: - self.failUnlessRaises(BadObject, db.info, sha) - self.failUnlessRaises(BadObject, db.stream, sha) + self.assertRaises(BadObject, db.info, sha) + self.assertRaises(BadObject, db.stream, sha) # DIRECT STREAM COPY # our data hase been written in object format to the StringIO diff --git a/gitdb/test/db/test_git.py b/gitdb/test/db/test_git.py index acc0f153f..6ecf7d7a8 100644 --- a/gitdb/test/db/test_git.py +++ b/gitdb/test/db/test_git.py @@ -43,7 +43,7 @@ def test_reading(self): assert gdb.partial_to_complete_sha_hex(bin_to_hex(binsha)[:8 - (i % 2)]) == binsha # END for each sha - self.failUnlessRaises(BadObject, gdb.partial_to_complete_sha_hex, "0000") + self.assertRaises(BadObject, gdb.partial_to_complete_sha_hex, "0000") @with_rw_directory def test_writing(self, path): diff --git a/gitdb/test/db/test_loose.py b/gitdb/test/db/test_loose.py index 9c25a0249..8cc660b8a 100644 --- a/gitdb/test/db/test_loose.py +++ b/gitdb/test/db/test_loose.py @@ -32,5 +32,5 @@ def test_basics(self, path): assert bin_to_hex(ldb.partial_to_complete_sha_hex(short_sha)) == long_sha # END for each sha - self.failUnlessRaises(BadObject, ldb.partial_to_complete_sha_hex, '0000') + self.assertRaises(BadObject, ldb.partial_to_complete_sha_hex, '0000') # raises if no object could be found diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index 9694238bd..458d80434 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -84,4 +84,4 @@ def test_writing(self, path): # assert num_ambiguous # non-existing - self.failUnlessRaises(BadObject, pdb.partial_to_complete_sha, b'\0\0', 4) + self.assertRaises(BadObject, pdb.partial_to_complete_sha, b'\0\0', 4) diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index 8bf78f0d2..48a185290 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -73,7 +73,7 @@ def _assert_index_file(self, index, version, size): assert index.partial_sha_to_index(sha[:l], l * 2) == oidx # END for each object index in indexfile - self.failUnlessRaises(ValueError, index.partial_sha_to_index, "\0", 2) + self.assertRaises(ValueError, index.partial_sha_to_index, "\0", 2) def _assert_pack_file(self, pack, version, size): assert pack.version() == 2 diff --git a/gitdb/test/test_stream.py b/gitdb/test/test_stream.py index 96268252d..5d4b93db7 100644 --- a/gitdb/test/test_stream.py +++ b/gitdb/test/test_stream.py @@ -135,7 +135,7 @@ def test_compressed_writer(self): ostream.close() # its closed already - self.failUnlessRaises(OSError, os.close, fd) + self.assertRaises(OSError, os.close, fd) # read everything back, compare to data we zip fd = os.open(path, os.O_RDONLY | getattr(os, 'O_BINARY', 0)) diff --git a/gitdb/test/test_util.py b/gitdb/test/test_util.py index 847bdab5e..3b3165d14 100644 --- a/gitdb/test/test_util.py +++ b/gitdb/test/test_util.py @@ -40,8 +40,8 @@ def test_lockedfd(self): lockfilepath = lfd._lockfilepath() # cannot end before it was started - self.failUnlessRaises(AssertionError, lfd.rollback) - self.failUnlessRaises(AssertionError, lfd.commit) + self.assertRaises(AssertionError, lfd.rollback) + self.assertRaises(AssertionError, lfd.commit) # open for writing assert not os.path.isfile(lockfilepath) @@ -77,7 +77,7 @@ def test_lockedfd(self): wfdstream = lfd.open(write=True, stream=True) # this time as stream assert os.path.isfile(lockfilepath) # another one fails - self.failUnlessRaises(IOError, olfd.open) + self.assertRaises(IOError, olfd.open) wfdstream.write(new_data.encode("ascii")) lfd.commit() From 1003c6612e0ee8973ba701e317b7308b7d0136aa Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 19 Aug 2021 12:22:22 +0300 Subject: [PATCH 0814/2375] Fix Sphinx warnings --- doc/source/conf.py | 2 +- gitdb/db/base.py | 5 +++++ gitdb/db/mem.py | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 68d9a3fcd..3ab15ab35 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -120,7 +120,7 @@ # 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'] +#html_static_path = ['.static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. diff --git a/gitdb/db/base.py b/gitdb/db/base.py index 2d7b9fa8d..f0b8a0574 100644 --- a/gitdb/db/base.py +++ b/gitdb/db/base.py @@ -33,6 +33,9 @@ def __contains__(self, sha): #{ Query Interface def has_object(self, sha): """ + Whether the object identified by the given 20 bytes + binary sha is contained in the database + :return: True if the object identified by the given 20 bytes binary sha is contained in the database""" raise NotImplementedError("To be implemented in subclass") @@ -82,6 +85,8 @@ def set_ostream(self, stream): def ostream(self): """ + Return the output stream + :return: overridden output stream this instance will write to, or None if it will write to the default stream""" return self._ostream diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index 5b242e46e..212a68fd1 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -92,6 +92,7 @@ def stream_copy(self, sha_iter, odb): """Copy the streams as identified by sha's yielded by sha_iter into the given odb The streams will be copied directly **Note:** the object will only be written if it did not exist in the target db + :return: amount of streams actually copied into odb. If smaller than the amount of input shas, one or more objects did already exist in odb""" count = 0 From 01b6510de861ed19958ecdd445afaccd2d8a7951 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 19 Aug 2021 12:31:04 +0300 Subject: [PATCH 0815/2375] Remove redundant Python 2.6 code --- gitdb/stream.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gitdb/stream.py b/gitdb/stream.py index b94ef245d..d58d1a63e 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -30,7 +30,6 @@ from gitdb.utils.encoding import force_bytes has_perf_mod = False -PY26 = sys.version_info[:2] < (2, 7) try: from gitdb_speedups._perf import apply_delta as c_apply_delta has_perf_mod = True @@ -295,7 +294,7 @@ def read(self, size=-1): # However, the zlib VERSIONs as well as the platform check is used to further match the entries in the # table in the github issue. This is it ... it was the only way I could make this work everywhere. # IT's CERTAINLY GOING TO BITE US IN THE FUTURE ... . - if PY26 or ((zlib.ZLIB_VERSION == '1.2.7' or zlib.ZLIB_VERSION == '1.2.5') and not sys.platform == 'darwin'): + if zlib.ZLIB_VERSION in ('1.2.7', '1.2.5') and not sys.platform == 'darwin': unused_datalen = len(self._zip.unconsumed_tail) else: unused_datalen = len(self._zip.unconsumed_tail) + len(self._zip.unused_data) From e4cd296a2101df10e400ec2f1f7ac8b5ac2c37eb Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 19 Aug 2021 12:32:36 +0300 Subject: [PATCH 0816/2375] Remove redundant Python 2 code --- gitdb/db/mem.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/gitdb/db/mem.py b/gitdb/db/mem.py index 212a68fd1..b2542ff1b 100644 --- a/gitdb/db/mem.py +++ b/gitdb/db/mem.py @@ -82,10 +82,7 @@ def size(self): return len(self._cache) def sha_iter(self): - try: - return self._cache.iterkeys() - except AttributeError: - return self._cache.keys() + return self._cache.keys() #{ Interface def stream_copy(self, sha_iter, odb): From 0df4b09bac21b7d3e50931c01ccf261419f5e1ef Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 19 Aug 2021 12:42:16 +0300 Subject: [PATCH 0817/2375] Support Python 3.7-3.9 --- .github/workflows/pythonpackage.yml | 4 ++-- setup.py | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 4c67fbf5b..7f35b616e 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,14 +15,14 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.5, 3.6, 3.7, 3.8] + python-version: [3.5, 3.6, 3.7, 3.8, 3.9] steps: - uses: actions/checkout@v2 with: fetch-depth: 1000 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/setup.py b/setup.py index 59817d8b2..522a88f16 100755 --- a/setup.py +++ b/setup.py @@ -38,6 +38,8 @@ "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7" + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", ] ) From ef1ef4db2553384cc615ca2c5836883c52b910b0 Mon Sep 17 00:00:00 2001 From: f100024 Date: Mon, 23 Aug 2021 12:13:34 +0300 Subject: [PATCH 0818/2375] Add encoding to utf-8 for fetch_info_lines; Add encoding to utf-8 for fetch_head_info; --- git/remote.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/remote.py b/git/remote.py index 3888506fd..da08fb577 100644 --- a/git/remote.py +++ b/git/remote.py @@ -751,8 +751,8 @@ def _get_fetch_info_from_stderr(self, proc: 'Git.AutoInterrupt', msg += "Will ignore extra progress lines or fetch head lines." msg %= (l_fil, l_fhi) log.debug(msg) - log.debug("info lines: " + str(fetch_info_lines)) - log.debug("head info : " + str(fetch_head_info)) + log.debug(b"info lines: " + str(fetch_info_lines).encode("UTF-8")) + log.debug(b"head info: " + str(fetch_head_info).encode("UTF-8")) if l_fil < l_fhi: fetch_head_info = fetch_head_info[:l_fil] else: From 5da76e8b4466459a3b6a400c4750a622879acce8 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 5 Sep 2021 11:27:23 +0800 Subject: [PATCH 0819/2375] Assure CWD is readable after acquiring it Fixes #1334 --- git/cmd.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/git/cmd.py b/git/cmd.py index 226b8710b..7de5b9e1e 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -783,6 +783,8 @@ def execute(self, # Allow the user to have the command executed in their working dir. try: cwd = self._working_dir or os.getcwd() # type: Union[None, str] + if not os.access(str(cwd), os.X_OK): + cwd = None except FileNotFoundError: cwd = None From 40f4cebbc095d043463b3e72d740acbcb84491d8 Mon Sep 17 00:00:00 2001 From: Dominic Date: Thu, 9 Sep 2021 19:00:58 +0100 Subject: [PATCH 0820/2375] Update pythonpackage.yml Try python 3.10.0.rc.2 --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 25e3c3dd5..0878a1a58 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9, "3.10.0-rc.1"] + python-version: [3.7, 3.8, 3.9, "3.10.0-rc.2"] steps: - uses: actions/checkout@v2 From 4ed0531c04cea95e93fc4829ae6b01577697172f Mon Sep 17 00:00:00 2001 From: Dominic Date: Thu, 9 Sep 2021 19:03:41 +0100 Subject: [PATCH 0821/2375] Update pythonpackage.yml Rmv 3.10.0 from test matrix --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 0878a1a58..369286570 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9, "3.10.0-rc.2"] + python-version: [3.7, 3.8, 3.9] # , "3.10.0-rc.2"] steps: - uses: actions/checkout@v2 From d6017fbe075dcd0f1e146ad460449c89bfdcdc0b Mon Sep 17 00:00:00 2001 From: Dominic Date: Thu, 9 Sep 2021 19:04:27 +0100 Subject: [PATCH 0822/2375] Update setup.py Comment out python 3.10 for next release --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 14e36dff9..bf24ccce0 100755 --- a/setup.py +++ b/setup.py @@ -119,6 +119,6 @@ def build_py_modules(basedir: str, excludes: Sequence = ()) -> Sequence: "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10" + # "Programming Language :: Python :: 3.10" ] ) From cb7cbe583e08aeb26adcec3c0b4179833aeee797 Mon Sep 17 00:00:00 2001 From: Dominic Date: Thu, 9 Sep 2021 19:08:14 +0100 Subject: [PATCH 0823/2375] Update pythonpackage.yml try force tests on 3.9.7 --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 369286570..fa0e51d9c 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9] # , "3.10.0-rc.2"] + python-version: [3.7, 3.8, 3.9.7] # , "3.10.0-rc.2"] steps: - uses: actions/checkout@v2 From f7fddc1e8ec8eec8a37272d48b7357110ee9648c Mon Sep 17 00:00:00 2001 From: Dominic Date: Thu, 9 Sep 2021 19:11:21 +0100 Subject: [PATCH 0824/2375] Update pythonpackage.yml Add minor versions to test matrix --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index fa0e51d9c..1af0a9db9 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9.7] # , "3.10.0-rc.2"] + python-version: [3.7, 3.7.0, 3.7.2, 3.7.12, 3.8.0, 3.8.11, 3.8, 3.9.0, 3.9.7] # , "3.10.0-rc.2"] steps: - uses: actions/checkout@v2 From bb9b50ff2671cda598ff19653d3de49e03b6d163 Mon Sep 17 00:00:00 2001 From: Dominic Date: Thu, 9 Sep 2021 19:13:25 +0100 Subject: [PATCH 0825/2375] Update pythonpackage.yml 3.7.0 not available --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 1af0a9db9..4e7aa418c 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.7.0, 3.7.2, 3.7.12, 3.8.0, 3.8.11, 3.8, 3.9.0, 3.9.7] # , "3.10.0-rc.2"] + python-version: [3.7, 3.7.5, 3.7.12, 3.8, 3.8.0, 3.8.11, 3.8, 3.9, 3.9.0, 3.9.7] # , "3.10.0-rc.2"] steps: - uses: actions/checkout@v2 From e488ce376d7bb92d3d9bb1c6d2408f1ec2a2d5f4 Mon Sep 17 00:00:00 2001 From: Dominic Date: Thu, 9 Sep 2021 19:56:48 +0100 Subject: [PATCH 0826/2375] Update setup.py Import README.md --- setup.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index bf24ccce0..2425c3f19 100755 --- a/setup.py +++ b/setup.py @@ -16,6 +16,8 @@ with open('test-requirements.txt') as reqs_file: test_requirements = reqs_file.read().splitlines() +with open('README.md') as rm_file: + long_description = rm_file.read() class build_py(_build_py): @@ -82,7 +84,7 @@ def build_py_modules(basedir: str, excludes: Sequence = ()) -> Sequence: name="GitPython", cmdclass={'build_py': build_py, 'sdist': sdist}, version=VERSION, - description="Python Git Library", + description="""GitPython is a python library used to interact with Git repositories""", author="Sebastian Thiel, Michael Trier", author_email="byronimo@gmail.com, mtrier@gmail.com", license="BSD", @@ -96,6 +98,7 @@ def build_py_modules(basedir: str, excludes: Sequence = ()) -> Sequence: tests_require=requirements + test_requirements, zip_safe=False, long_description="""GitPython is a python library used to interact with Git repositories""", + long_description_content_type="text/markdown", classifiers=[ # Picked from # http://pypi.python.org/pypi?:action=list_classifiers From 58820a5e1481e3d3907eda24422f635893342047 Mon Sep 17 00:00:00 2001 From: Dominic Date: Thu, 9 Sep 2021 20:01:57 +0100 Subject: [PATCH 0827/2375] Update setup.py format path -> os.path in prep for pathlib --- setup.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/setup.py b/setup.py index 2425c3f19..11696e758 100755 --- a/setup.py +++ b/setup.py @@ -5,9 +5,8 @@ import fnmatch import os import sys -from os import path -with open(path.join(path.dirname(__file__), 'VERSION')) as v: +with open(os.path.join(os.path.dirname(__file__), 'VERSION')) as v: VERSION = v.readline().strip() with open('requirements.txt') as reqs_file: @@ -22,8 +21,8 @@ class build_py(_build_py): def run(self) -> None: - init = path.join(self.build_lib, 'git', '__init__.py') - if path.exists(init): + init = os.path.join(self.build_lib, 'git', '__init__.py') + if os.path.exists(init): os.unlink(init) _build_py.run(self) _stamp_version(init) @@ -34,10 +33,10 @@ class sdist(_sdist): def make_release_tree(self, base_dir: str, files: Sequence) -> None: _sdist.make_release_tree(self, base_dir, files) - orig = path.join('git', '__init__.py') - assert path.exists(orig), orig - dest = path.join(base_dir, orig) - if hasattr(os, 'link') and path.exists(dest): + orig = os.path.join('git', '__init__.py') + assert os.path.exists(orig), orig + dest = os.path.join(base_dir, orig) + if hasattr(os, 'link') and os.path.exists(dest): os.unlink(dest) self.copy_file(orig, dest) _stamp_version(dest) From bc2edef856254dc52109260ad44c4f5f4a208f9b Mon Sep 17 00:00:00 2001 From: Dominic Date: Thu, 9 Sep 2021 20:04:38 +0100 Subject: [PATCH 0828/2375] Update setup.py flake8 fix --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 11696e758..cd1007d74 100755 --- a/setup.py +++ b/setup.py @@ -18,6 +18,7 @@ with open('README.md') as rm_file: long_description = rm_file.read() + class build_py(_build_py): def run(self) -> None: From 0db50a27352a28404790ceac2f7abfc85f8e8680 Mon Sep 17 00:00:00 2001 From: Dominic Date: Thu, 9 Sep 2021 20:45:45 +0100 Subject: [PATCH 0829/2375] Update changes.rst Update changes for 3.1.21 --- doc/source/changes.rst | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 16741ad90..8c5a84885 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -8,22 +8,37 @@ Changelog * This is the second typed release with a lot of improvements under the hood. * General: + - Remove python 3.6 support + - Remove distutils ahead of deprecation in standard library. + - Update sphinx to 4.1.12 and use autodoc-typehints. + + - Include README as long_description on PiPI * Typing: + - Add types to ALL functions. + - Ensure py.typed is collected. + - Increase mypy strictness with disallow_untyped_defs, warn_redundant_casts, warn_unreachable. + - Use typing.NamedTuple and typing.OrderedDict now 3.6 dropped. - - Make Protocol classes ABCs at runtime due to new bug in 3.10.0-rc1 + + - Make Protocol classes ABCs at runtime due to new behaviour/bug in 3.9.7 & 3.10.0-rc1 + - Remove use of typing.TypeGuard until later release, to allow dependant libs time to update. + - Tracking issue: https://github.com/gitpython-developers/GitPython/issues/1095 * Runtime improvements: + - Add clone_multi_options support to submodule.add() + - Delay calling get_user_id() unless essential, to support sand-boxed environments. + - Add timeout to handle_process_output(), in case thread.join() hangs. See the following for details: From 9d6ddd3ceb3da321d5194fbcd9312815606073a1 Mon Sep 17 00:00:00 2001 From: Dominic Date: Thu, 9 Sep 2021 20:50:21 +0100 Subject: [PATCH 0830/2375] Update changes.rst --- doc/source/changes.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 8c5a84885..cc3c91b1d 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -15,7 +15,10 @@ Changelog - Update sphinx to 4.1.12 and use autodoc-typehints. - - Include README as long_description on PiPI + - Include README as long_description on PyPI + + - Test against earliest and latest minor version available on Github Actions (e.g. 3.9.0 and 3.9.7) + * Typing: From 856c0825abd856f01b21a2614f89df20f8f81443 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Sep 2021 10:11:57 +0800 Subject: [PATCH 0831/2375] bump version --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 5c5bdc27d..be706e820 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.21 +3.1.22 From 03f198f66cceca745a67658b7d16bf4b7e40b9ab Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Sep 2021 10:14:01 +0800 Subject: [PATCH 0832/2375] Fix version discrepancy --- VERSION | 2 +- doc/source/changes.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index be706e820..60b9d63bc 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.22 +3.1.23 diff --git a/doc/source/changes.rst b/doc/source/changes.rst index cc3c91b1d..bb7a23baa 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,7 +2,7 @@ Changelog ========= -3.1.21 +31.23 ====== * This is the second typed release with a lot of improvements under the hood. From 146202cdcbed8239651ccc62d36a8e5af3ceff8c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 10 Sep 2021 08:15:55 +0200 Subject: [PATCH 0833/2375] Fix title --- doc/source/changes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index bb7a23baa..ac73b1722 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,7 +2,7 @@ Changelog ========= -31.23 +3.1.23 ====== * This is the second typed release with a lot of improvements under the hood. From 10f24aee9c9b49f2ea1060536eab296446a06efd Mon Sep 17 00:00:00 2001 From: sroet Date: Fri, 10 Sep 2021 13:36:15 +0200 Subject: [PATCH 0834/2375] change default fetch timeout to 60 s --- git/cmd.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/cmd.py b/git/cmd.py index 642ef9ed6..13c5e7a55 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -79,7 +79,7 @@ def handle_process_output(process: 'Git.AutoInterrupt' | Popen, finalizer: Union[None, Callable[[Union[subprocess.Popen, 'Git.AutoInterrupt']], None]] = None, decode_streams: bool = True, - timeout: float = 10.0) -> None: + timeout: float = 60.0) -> None: """Registers for notifications to learn that process output is ready to read, and dispatches lines to the respective line handlers. This function returns once the finalizer returns From 9925785cbd29e02a4e38dfd29112a3a9533fc170 Mon Sep 17 00:00:00 2001 From: sroet Date: Fri, 10 Sep 2021 13:45:24 +0200 Subject: [PATCH 0835/2375] allow for timeout propagation --- git/remote.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/git/remote.py b/git/remote.py index 55772f4a0..e3a819cfc 100644 --- a/git/remote.py +++ b/git/remote.py @@ -707,7 +707,8 @@ def update(self, **kwargs: Any) -> 'Remote': return self def _get_fetch_info_from_stderr(self, proc: 'Git.AutoInterrupt', - progress: Union[Callable[..., Any], RemoteProgress, None] + progress: Union[Callable[..., Any], RemoteProgress, None], + timeout: float = 60.0 ) -> IterableList['FetchInfo']: progress = to_progress_instance(progress) @@ -724,7 +725,8 @@ def _get_fetch_info_from_stderr(self, proc: 'Git.AutoInterrupt', cmds = set(FetchInfo._flag_map.keys()) progress_handler = progress.new_message_handler() - handle_process_output(proc, None, progress_handler, finalizer=None, decode_streams=False) + handle_process_output(proc, None, progress_handler, finalizer=None, decode_streams=False, + timeout=timeout) stderr_text = progress.error_lines and '\n'.join(progress.error_lines) or '' proc.wait(stderr=stderr_text) @@ -769,7 +771,8 @@ def _get_fetch_info_from_stderr(self, proc: 'Git.AutoInterrupt', return output def _get_push_info(self, proc: 'Git.AutoInterrupt', - progress: Union[Callable[..., Any], RemoteProgress, None]) -> IterableList[PushInfo]: + progress: Union[Callable[..., Any], RemoteProgress, None], + timeout: float = 60.0) -> IterableList[PushInfo]: progress = to_progress_instance(progress) # read progress information from stderr @@ -786,7 +789,8 @@ def stdout_handler(line: str) -> None: # If an error happens, additional info is given which we parse below. pass - handle_process_output(proc, stdout_handler, progress_handler, finalizer=None, decode_streams=False) + handle_process_output(proc, stdout_handler, progress_handler, finalizer=None, decode_streams=False, + timeout=timeout) stderr_text = progress.error_lines and '\n'.join(progress.error_lines) or '' try: proc.wait(stderr=stderr_text) @@ -813,7 +817,8 @@ def _assert_refspec(self) -> None: def fetch(self, refspec: Union[str, List[str], None] = None, progress: Union[RemoteProgress, None, 'UpdateProgress'] = None, - verbose: bool = True, **kwargs: Any) -> IterableList[FetchInfo]: + verbose: bool = True, timeout: float = 60.0, + **kwargs: Any) -> IterableList[FetchInfo]: """Fetch the latest changes for this remote :param refspec: @@ -853,13 +858,14 @@ def fetch(self, refspec: Union[str, List[str], None] = None, proc = self.repo.git.fetch(self, *args, as_process=True, with_stdout=False, universal_newlines=True, v=verbose, **kwargs) - res = self._get_fetch_info_from_stderr(proc, progress) + res = self._get_fetch_info_from_stderr(proc, progress, timeout=timeout) if hasattr(self.repo.odb, 'update_cache'): self.repo.odb.update_cache() return res def pull(self, refspec: Union[str, List[str], None] = None, progress: Union[RemoteProgress, 'UpdateProgress', None] = None, + timeout: float = 60.0, **kwargs: Any) -> IterableList[FetchInfo]: """Pull changes from the given branch, being the same as a fetch followed by a merge of branch with your local branch. @@ -874,14 +880,14 @@ def pull(self, refspec: Union[str, List[str], None] = None, kwargs = add_progress(kwargs, self.repo.git, progress) proc = self.repo.git.pull(self, refspec, with_stdout=False, as_process=True, universal_newlines=True, v=True, **kwargs) - res = self._get_fetch_info_from_stderr(proc, progress) + res = self._get_fetch_info_from_stderr(proc, progress, timeout=timeout) if hasattr(self.repo.odb, 'update_cache'): self.repo.odb.update_cache() return res def push(self, refspec: Union[str, List[str], None] = None, progress: Union[RemoteProgress, 'UpdateProgress', Callable[..., RemoteProgress], None] = None, - **kwargs: Any) -> IterableList[PushInfo]: + timeout: float = 60.0, **kwargs: Any) -> IterableList[PushInfo]: """Push changes from source branch in refspec to target branch in refspec. :param refspec: see 'fetch' method @@ -909,7 +915,7 @@ def push(self, refspec: Union[str, List[str], None] = None, kwargs = add_progress(kwargs, self.repo.git, progress) proc = self.repo.git.push(self, refspec, porcelain=True, as_process=True, universal_newlines=True, **kwargs) - return self._get_push_info(proc, progress) + return self._get_push_info(proc, progress, timeout=timeout) @ property def config_reader(self) -> SectionConstraint[GitConfigParser]: From bd4ee0f2f4b18889134cdc63fc934902628da1ba Mon Sep 17 00:00:00 2001 From: sroet Date: Fri, 10 Sep 2021 13:50:57 +0200 Subject: [PATCH 0836/2375] add test timeout with the old 10 s timeout --- test/test_remote.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_remote.py b/test/test_remote.py index c29fac65c..13da128f7 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -401,7 +401,7 @@ def _assert_push_and_pull(self, remote, rw_repo, remote_repo): res = remote.push(all=True) self._do_test_push_result(res, remote) - remote.pull('master') + remote.pull('master', timeout=10.0) # cleanup - delete created tags and branches as we are in an innerloop on # the same repository @@ -467,7 +467,7 @@ def test_base(self, rw_repo, remote_repo): # Only for remotes - local cases are the same or less complicated # as additional progress information will never be emitted if remote.name == "daemon_origin": - self._do_test_fetch(remote, rw_repo, remote_repo) + self._do_test_fetch(remote, rw_repo, remote_repo, timeout=10.0) ran_fetch_test = True # END fetch test From 5d2dfb18777a95165f588d099111b2a553c6a8ca Mon Sep 17 00:00:00 2001 From: sroet Date: Fri, 10 Sep 2021 13:57:34 +0200 Subject: [PATCH 0837/2375] also test a call to 'push' with 10s timeout --- test/test_remote.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_remote.py b/test/test_remote.py index 13da128f7..243eec290 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -406,7 +406,7 @@ def _assert_push_and_pull(self, remote, rw_repo, remote_repo): # cleanup - delete created tags and branches as we are in an innerloop on # the same repository TagReference.delete(rw_repo, new_tag, other_tag) - remote.push(":%s" % other_tag.path) + remote.push(":%s" % other_tag.path, timeout=10.0) @skipIf(HIDE_WINDOWS_FREEZE_ERRORS, "FIXME: Freezes!") @with_rw_and_rw_remote_repo('0.1.6') From 5ec7967b64f1aea7e3258e0c1c8033639d0320ff Mon Sep 17 00:00:00 2001 From: sroet Date: Fri, 10 Sep 2021 14:05:24 +0200 Subject: [PATCH 0838/2375] propagate kwargs in do_test_fetch --- test/test_remote.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_remote.py b/test/test_remote.py index 243eec290..e5fe8dd00 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -164,7 +164,7 @@ def _commit_random_file(self, repo): index.commit("Committing %s" % new_file) return new_file - def _do_test_fetch(self, remote, rw_repo, remote_repo): + def _do_test_fetch(self, remote, rw_repo, remote_repo, **kwargs): # specialized fetch testing to de-clutter the main test self._do_test_fetch_info(rw_repo) @@ -183,7 +183,7 @@ def get_info(res, remote, name): # put remote head to master as it is guaranteed to exist remote_repo.head.reference = remote_repo.heads.master - res = fetch_and_test(remote) + res = fetch_and_test(remote, **kwargs) # all up to date for info in res: self.assertTrue(info.flags & info.HEAD_UPTODATE) From d6cdafe223fe2e4ec17c52d4bd5ad7affc599814 Mon Sep 17 00:00:00 2001 From: sroet Date: Fri, 10 Sep 2021 17:06:53 +0200 Subject: [PATCH 0839/2375] reset default timeout to None --- git/cmd.py | 2 +- git/remote.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index 13c5e7a55..0deb4ffcc 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -79,7 +79,7 @@ def handle_process_output(process: 'Git.AutoInterrupt' | Popen, finalizer: Union[None, Callable[[Union[subprocess.Popen, 'Git.AutoInterrupt']], None]] = None, decode_streams: bool = True, - timeout: float = 60.0) -> None: + timeout: Union[None, float] = None) -> None: """Registers for notifications to learn that process output is ready to read, and dispatches lines to the respective line handlers. This function returns once the finalizer returns diff --git a/git/remote.py b/git/remote.py index e3a819cfc..ce5d82b5b 100644 --- a/git/remote.py +++ b/git/remote.py @@ -708,7 +708,7 @@ def update(self, **kwargs: Any) -> 'Remote': def _get_fetch_info_from_stderr(self, proc: 'Git.AutoInterrupt', progress: Union[Callable[..., Any], RemoteProgress, None], - timeout: float = 60.0 + timeout: Union[None, float] = None, ) -> IterableList['FetchInfo']: progress = to_progress_instance(progress) @@ -772,7 +772,7 @@ def _get_fetch_info_from_stderr(self, proc: 'Git.AutoInterrupt', def _get_push_info(self, proc: 'Git.AutoInterrupt', progress: Union[Callable[..., Any], RemoteProgress, None], - timeout: float = 60.0) -> IterableList[PushInfo]: + timeout: Union[None, float] = None) -> IterableList[PushInfo]: progress = to_progress_instance(progress) # read progress information from stderr @@ -817,7 +817,7 @@ def _assert_refspec(self) -> None: def fetch(self, refspec: Union[str, List[str], None] = None, progress: Union[RemoteProgress, None, 'UpdateProgress'] = None, - verbose: bool = True, timeout: float = 60.0, + verbose: bool = True, timeout: Union[None, float] = None, **kwargs: Any) -> IterableList[FetchInfo]: """Fetch the latest changes for this remote @@ -865,7 +865,7 @@ def fetch(self, refspec: Union[str, List[str], None] = None, def pull(self, refspec: Union[str, List[str], None] = None, progress: Union[RemoteProgress, 'UpdateProgress', None] = None, - timeout: float = 60.0, + timeout: Union[None, float] = None, **kwargs: Any) -> IterableList[FetchInfo]: """Pull changes from the given branch, being the same as a fetch followed by a merge of branch with your local branch. @@ -887,7 +887,7 @@ def pull(self, refspec: Union[str, List[str], None] = None, def push(self, refspec: Union[str, List[str], None] = None, progress: Union[RemoteProgress, 'UpdateProgress', Callable[..., RemoteProgress], None] = None, - timeout: float = 60.0, **kwargs: Any) -> IterableList[PushInfo]: + timeout: Union[None, float] = None, **kwargs: Any) -> IterableList[PushInfo]: """Push changes from source branch in refspec to target branch in refspec. :param refspec: see 'fetch' method From b7cd5207ba05c733d8e29def0757edf4d7cc24f7 Mon Sep 17 00:00:00 2001 From: sroet Date: Fri, 10 Sep 2021 17:28:00 +0200 Subject: [PATCH 0840/2375] update docstring --- git/cmd.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/cmd.py b/git/cmd.py index 0deb4ffcc..f1b3194a3 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -94,7 +94,7 @@ def handle_process_output(process: 'Git.AutoInterrupt' | Popen, their contents to handlers. Set it to False if `universal_newline == True` (then streams are in text-mode) or if decoding must happen later (i.e. for Diffs). - :param timeout: float, timeout to pass to t.join() in case it hangs. Default = 10.0 seconds + :param timeout: float, or None timeout to pass to t.join() in case it hangs. Default = None. """ # Use 2 "pump" threads and wait for both to finish. def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], is_decode: bool, From ef0ca654f859d6caaf2a2029cb691d5beec79ed5 Mon Sep 17 00:00:00 2001 From: sroet Date: Mon, 13 Sep 2021 17:05:45 +0200 Subject: [PATCH 0841/2375] reuse kill_after_timeout kwarg --- git/cmd.py | 66 +++++++++++++++++++++++++++++++++++---------------- git/remote.py | 36 +++++++++++++++++++--------- 2 files changed, 71 insertions(+), 31 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index f1b3194a3..db06d5f7c 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -79,7 +79,7 @@ def handle_process_output(process: 'Git.AutoInterrupt' | Popen, finalizer: Union[None, Callable[[Union[subprocess.Popen, 'Git.AutoInterrupt']], None]] = None, decode_streams: bool = True, - timeout: Union[None, float] = None) -> None: + kill_after_timeout: Union[None, float] = None) -> None: """Registers for notifications to learn that process output is ready to read, and dispatches lines to the respective line handlers. This function returns once the finalizer returns @@ -94,7 +94,10 @@ def handle_process_output(process: 'Git.AutoInterrupt' | Popen, their contents to handlers. Set it to False if `universal_newline == True` (then streams are in text-mode) or if decoding must happen later (i.e. for Diffs). - :param timeout: float, or None timeout to pass to t.join() in case it hangs. Default = None. + :param kill_after_timeout: + float or None, Default = None + To specify a timeout in seconds for the git command, after which the process + should be killed. """ # Use 2 "pump" threads and wait for both to finish. def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], is_decode: bool, @@ -108,9 +111,12 @@ def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], handler(line_str) else: handler(line) + except Exception as ex: log.error(f"Pumping {name!r} of cmd({remove_password_if_present(cmdline)}) failed due to: {ex!r}") - raise CommandError([f'<{name}-pump>'] + remove_password_if_present(cmdline), ex) from ex + if "I/O operation on closed file" not in str(ex): + # Only reraise if the error was not due to the stream closing + raise CommandError([f'<{name}-pump>'] + remove_password_if_present(cmdline), ex) from ex finally: stream.close() @@ -146,9 +152,16 @@ def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], ## FIXME: Why Join?? Will block if `stdin` needs feeding... # for t in threads: - t.join(timeout=timeout) + t.join(timeout=kill_after_timeout) if t.is_alive(): - raise RuntimeError(f"Thread join() timed out in cmd.handle_process_output(). Timeout={timeout} seconds") + if hasattr(process, 'proc'): # Assume it is a Git.AutoInterrupt: + process._terminate() + else: # Don't want to deal with the other case + raise RuntimeError(f"Thread join() timed out in cmd.handle_process_output()." + " kill_after_timeout={kill_after_timeout} seconds") + if stderr_handler: + stderr_handler("error: process killed because it timed out." + f" kill_after_timeout={kill_after_timeout} seconds") if finalizer: return finalizer(process) @@ -386,13 +399,15 @@ class AutoInterrupt(object): The wait method was overridden to perform automatic status code checking and possibly raise.""" - __slots__ = ("proc", "args") + __slots__ = ("proc", "args", "status") def __init__(self, proc: Union[None, subprocess.Popen], args: Any) -> None: self.proc = proc self.args = args + self.status = None - def __del__(self) -> None: + def _terminate(self) -> None: + """Terminate the underlying process""" if self.proc is None: return @@ -408,6 +423,7 @@ def __del__(self) -> None: # did the process finish already so we have a return code ? try: if proc.poll() is not None: + self.status = proc.poll() return None except OSError as ex: log.info("Ignored error after process had died: %r", ex) @@ -419,7 +435,7 @@ def __del__(self) -> None: # try to kill it try: proc.terminate() - proc.wait() # ensure process goes away + self.status = proc.wait() # ensure process goes away except OSError as ex: log.info("Ignored error after process had died: %r", ex) except AttributeError: @@ -431,6 +447,11 @@ def __del__(self) -> None: call(("TASKKILL /F /T /PID %s 2>nul 1>nul" % str(proc.pid)), shell=True) # END exception handling + + + def __del__(self) -> None: + self._terminate() + def __getattr__(self, attr: str) -> Any: return getattr(self.proc, attr) @@ -447,21 +468,26 @@ def wait(self, stderr: Union[None, str, bytes] = b'') -> int: if self.proc is not None: status = self.proc.wait() + p_stderr = self.proc.stderr + else: #Assume the underlying proc was killed earlier or never existed + status = self.status + p_stderr = None - def read_all_from_possibly_closed_stream(stream: Union[IO[bytes], None]) -> bytes: - if stream: - try: - return stderr_b + force_bytes(stream.read()) - except ValueError: - return stderr_b or b'' - else: + def read_all_from_possibly_closed_stream(stream: Union[IO[bytes], None]) -> bytes: + if stream: + try: + return stderr_b + force_bytes(stream.read()) + except ValueError: return stderr_b or b'' + else: + return stderr_b or b'' - if status != 0: - errstr = read_all_from_possibly_closed_stream(self.proc.stderr) - log.debug('AutoInterrupt wait stderr: %r' % (errstr,)) - raise GitCommandError(remove_password_if_present(self.args), status, errstr) # END status handling + + if status != 0: + errstr = read_all_from_possibly_closed_stream(p_stderr) + log.debug('AutoInterrupt wait stderr: %r' % (errstr,)) + raise GitCommandError(remove_password_if_present(self.args), status, errstr) return status # END auto interrupt @@ -694,7 +720,7 @@ def execute(self, as_process: bool = False, output_stream: Union[None, BinaryIO] = None, stdout_as_string: bool = True, - kill_after_timeout: Union[None, int] = None, + kill_after_timeout: Union[None, float] = None, with_stdout: bool = True, universal_newlines: bool = False, shell: Union[None, bool] = None, diff --git a/git/remote.py b/git/remote.py index ce5d82b5b..bfa4db592 100644 --- a/git/remote.py +++ b/git/remote.py @@ -708,7 +708,7 @@ def update(self, **kwargs: Any) -> 'Remote': def _get_fetch_info_from_stderr(self, proc: 'Git.AutoInterrupt', progress: Union[Callable[..., Any], RemoteProgress, None], - timeout: Union[None, float] = None, + kill_after_timeout: Union[None, float] = None, ) -> IterableList['FetchInfo']: progress = to_progress_instance(progress) @@ -726,7 +726,7 @@ def _get_fetch_info_from_stderr(self, proc: 'Git.AutoInterrupt', progress_handler = progress.new_message_handler() handle_process_output(proc, None, progress_handler, finalizer=None, decode_streams=False, - timeout=timeout) + kill_after_timeout=kill_after_timeout) stderr_text = progress.error_lines and '\n'.join(progress.error_lines) or '' proc.wait(stderr=stderr_text) @@ -772,7 +772,7 @@ def _get_fetch_info_from_stderr(self, proc: 'Git.AutoInterrupt', def _get_push_info(self, proc: 'Git.AutoInterrupt', progress: Union[Callable[..., Any], RemoteProgress, None], - timeout: Union[None, float] = None) -> IterableList[PushInfo]: + kill_after_timeout: Union[None, float] = None) -> IterableList[PushInfo]: progress = to_progress_instance(progress) # read progress information from stderr @@ -790,7 +790,7 @@ def stdout_handler(line: str) -> None: pass handle_process_output(proc, stdout_handler, progress_handler, finalizer=None, decode_streams=False, - timeout=timeout) + kill_after_timeout=kill_after_timeout) stderr_text = progress.error_lines and '\n'.join(progress.error_lines) or '' try: proc.wait(stderr=stderr_text) @@ -817,7 +817,8 @@ def _assert_refspec(self) -> None: def fetch(self, refspec: Union[str, List[str], None] = None, progress: Union[RemoteProgress, None, 'UpdateProgress'] = None, - verbose: bool = True, timeout: Union[None, float] = None, + verbose: bool = True, + kill_after_timeout: Union[None, float] = None, **kwargs: Any) -> IterableList[FetchInfo]: """Fetch the latest changes for this remote @@ -838,6 +839,9 @@ def fetch(self, refspec: Union[str, List[str], None] = None, for 'refspec' will make use of this facility. :param progress: See 'push' method :param verbose: Boolean for verbose output + :param kill_after_timeout: + To specify a timeout in seconds for the git command, after which the process + should be killed. It is set to None by default. :param kwargs: Additional arguments to be passed to git-fetch :return: IterableList(FetchInfo, ...) list of FetchInfo instances providing detailed @@ -858,20 +862,22 @@ def fetch(self, refspec: Union[str, List[str], None] = None, proc = self.repo.git.fetch(self, *args, as_process=True, with_stdout=False, universal_newlines=True, v=verbose, **kwargs) - res = self._get_fetch_info_from_stderr(proc, progress, timeout=timeout) + res = self._get_fetch_info_from_stderr(proc, progress, + kill_after_timeout=kill_after_timeout) if hasattr(self.repo.odb, 'update_cache'): self.repo.odb.update_cache() return res def pull(self, refspec: Union[str, List[str], None] = None, progress: Union[RemoteProgress, 'UpdateProgress', None] = None, - timeout: Union[None, float] = None, + kill_after_timeout: Union[None, float] = None, **kwargs: Any) -> IterableList[FetchInfo]: """Pull changes from the given branch, being the same as a fetch followed by a merge of branch with your local branch. :param refspec: see 'fetch' method :param progress: see 'push' method + :param kill_after_timeout: see 'fetch' method :param kwargs: Additional arguments to be passed to git-pull :return: Please see 'fetch' method """ if refspec is None: @@ -880,14 +886,16 @@ def pull(self, refspec: Union[str, List[str], None] = None, kwargs = add_progress(kwargs, self.repo.git, progress) proc = self.repo.git.pull(self, refspec, with_stdout=False, as_process=True, universal_newlines=True, v=True, **kwargs) - res = self._get_fetch_info_from_stderr(proc, progress, timeout=timeout) + res = self._get_fetch_info_from_stderr(proc, progress, + kill_after_timeout=kill_after_timeout) if hasattr(self.repo.odb, 'update_cache'): self.repo.odb.update_cache() return res def push(self, refspec: Union[str, List[str], None] = None, progress: Union[RemoteProgress, 'UpdateProgress', Callable[..., RemoteProgress], None] = None, - timeout: Union[None, float] = None, **kwargs: Any) -> IterableList[PushInfo]: + kill_after_timeout: Union[None, float] = None, + **kwargs: Any) -> IterableList[PushInfo]: """Push changes from source branch in refspec to target branch in refspec. :param refspec: see 'fetch' method @@ -903,6 +911,9 @@ def push(self, refspec: Union[str, List[str], None] = None, overrides the ``update()`` function. :note: No further progress information is returned after push returns. + :param kill_after_timeout: + To specify a timeout in seconds for the git command, after which the process + should be killed. It is set to None by default. :param kwargs: Additional arguments to be passed to git-push :return: list(PushInfo, ...) list of PushInfo instances, each @@ -914,8 +925,11 @@ def push(self, refspec: Union[str, List[str], None] = None, be 0.""" kwargs = add_progress(kwargs, self.repo.git, progress) proc = self.repo.git.push(self, refspec, porcelain=True, as_process=True, - universal_newlines=True, **kwargs) - return self._get_push_info(proc, progress, timeout=timeout) + universal_newlines=True, + kill_after_timeout=kill_after_timeout, + **kwargs) + return self._get_push_info(proc, progress, + kill_after_timeout=kill_after_timeout) @ property def config_reader(self) -> SectionConstraint[GitConfigParser]: From 0a58afea0d7c3ff57916ddd694d052123e29087f Mon Sep 17 00:00:00 2001 From: sroet Date: Mon, 13 Sep 2021 17:59:24 +0200 Subject: [PATCH 0842/2375] update tests and add a comment about different behaviour of 'push' vs 'fetch' --- git/remote.py | 2 ++ test/test_remote.py | 20 +++++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/git/remote.py b/git/remote.py index bfa4db592..9917c4310 100644 --- a/git/remote.py +++ b/git/remote.py @@ -795,6 +795,8 @@ def stdout_handler(line: str) -> None: try: proc.wait(stderr=stderr_text) except Exception: + # This is different than fetch (which fails if there is any std_err + # even if there is an output) if not output: raise elif stderr_text: diff --git a/test/test_remote.py b/test/test_remote.py index e5fe8dd00..1cbc2eb21 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -6,6 +6,7 @@ import random import tempfile +import pytest from unittest import skipIf from git import ( @@ -401,12 +402,12 @@ def _assert_push_and_pull(self, remote, rw_repo, remote_repo): res = remote.push(all=True) self._do_test_push_result(res, remote) - remote.pull('master', timeout=10.0) + remote.pull('master', kill_after_timeout=10.0) # cleanup - delete created tags and branches as we are in an innerloop on # the same repository TagReference.delete(rw_repo, new_tag, other_tag) - remote.push(":%s" % other_tag.path, timeout=10.0) + remote.push(":%s" % other_tag.path, kill_after_timeout=10.0) @skipIf(HIDE_WINDOWS_FREEZE_ERRORS, "FIXME: Freezes!") @with_rw_and_rw_remote_repo('0.1.6') @@ -467,7 +468,8 @@ def test_base(self, rw_repo, remote_repo): # Only for remotes - local cases are the same or less complicated # as additional progress information will never be emitted if remote.name == "daemon_origin": - self._do_test_fetch(remote, rw_repo, remote_repo, timeout=10.0) + self._do_test_fetch(remote, rw_repo, remote_repo, + kill_after_timeout=10.0) ran_fetch_test = True # END fetch test @@ -651,3 +653,15 @@ def test_push_error(self, repo): rem = repo.remote('origin') with self.assertRaisesRegex(GitCommandError, "src refspec __BAD_REF__ does not match any"): rem.push('__BAD_REF__') + + +class TestTimeouts(TestBase): + @with_rw_repo('HEAD', bare=False) + def test_timeout_funcs(self, repo): + for function in ["pull", "fetch"]: #"can't get push to reliably timeout + f = getattr(repo.remotes.origin, function) + assert f is not None # Make sure these functions exist + + with self.assertRaisesRegex(GitCommandError, + "kill_after_timeout=0.01 s"): + f(kill_after_timeout=0.01) From cd2d53844ae50998fa81f9ce42e7bc66b60f8366 Mon Sep 17 00:00:00 2001 From: sroet Date: Mon, 13 Sep 2021 18:04:27 +0200 Subject: [PATCH 0843/2375] go for pytest.raises and test that the functions run --- test/test_remote.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_remote.py b/test/test_remote.py index 1cbc2eb21..10f0bb4bd 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -661,7 +661,7 @@ def test_timeout_funcs(self, repo): for function in ["pull", "fetch"]: #"can't get push to reliably timeout f = getattr(repo.remotes.origin, function) assert f is not None # Make sure these functions exist - - with self.assertRaisesRegex(GitCommandError, - "kill_after_timeout=0.01 s"): + _ = f() # Make sure the function runs + with pytest.raises(GitCommandError, + match="kill_after_timeout=0.01 s"): f(kill_after_timeout=0.01) From 144817a7da2c61cb0b678602d229a351f08df336 Mon Sep 17 00:00:00 2001 From: sroet Date: Tue, 14 Sep 2021 12:27:17 +0200 Subject: [PATCH 0844/2375] make flake8 and mypy happy --- git/cmd.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index db06d5f7c..7523ead57 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -154,14 +154,22 @@ def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], for t in threads: t.join(timeout=kill_after_timeout) if t.is_alive(): - if hasattr(process, 'proc'): # Assume it is a Git.AutoInterrupt: + if isinstance(process, Git.AutoInterrupt): process._terminate() else: # Don't want to deal with the other case - raise RuntimeError(f"Thread join() timed out in cmd.handle_process_output()." - " kill_after_timeout={kill_after_timeout} seconds") + raise RuntimeError("Thread join() timed out in cmd.handle_process_output()." + f" kill_after_timeout={kill_after_timeout} seconds") if stderr_handler: - stderr_handler("error: process killed because it timed out." - f" kill_after_timeout={kill_after_timeout} seconds") + error_str: Union[str, bytes] = ( + "error: process killed because it timed out." + f" kill_after_timeout={kill_after_timeout} seconds") + if not decode_streams and isinstance(p_stderr, BinaryIO): + # Assume stderr_handler needs binary input + error_str = cast(str, error_str) + error_str = error_str.encode() + # We ignore typing on the next line because mypy does not like + # the way we infered that stderr takes str of bytes + stderr_handler(error_str) # type: ignore if finalizer: return finalizer(process) @@ -404,7 +412,7 @@ class AutoInterrupt(object): def __init__(self, proc: Union[None, subprocess.Popen], args: Any) -> None: self.proc = proc self.args = args - self.status = None + self.status: Union[int, None] = None def _terminate(self) -> None: """Terminate the underlying process""" @@ -447,8 +455,6 @@ def _terminate(self) -> None: call(("TASKKILL /F /T /PID %s 2>nul 1>nul" % str(proc.pid)), shell=True) # END exception handling - - def __del__(self) -> None: self._terminate() @@ -465,11 +471,11 @@ def wait(self, stderr: Union[None, str, bytes] = b'') -> int: if stderr is None: stderr_b = b'' stderr_b = force_bytes(data=stderr, encoding='utf-8') - + status: Union[int, None] if self.proc is not None: status = self.proc.wait() p_stderr = self.proc.stderr - else: #Assume the underlying proc was killed earlier or never existed + else: # Assume the underlying proc was killed earlier or never existed status = self.status p_stderr = None From 415147046b6950cdc1812dce076a4de78eead162 Mon Sep 17 00:00:00 2001 From: sroet Date: Tue, 14 Sep 2021 12:34:23 +0200 Subject: [PATCH 0845/2375] fix typo's --- git/cmd.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/cmd.py b/git/cmd.py index 7523ead57..9279bb0c3 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -168,7 +168,7 @@ def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], error_str = cast(str, error_str) error_str = error_str.encode() # We ignore typing on the next line because mypy does not like - # the way we infered that stderr takes str of bytes + # the way we inferred that stderr takes str or bytes stderr_handler(error_str) # type: ignore if finalizer: From 42b05b0f5f3ae7ddd0590a42fd120ffdf2b34903 Mon Sep 17 00:00:00 2001 From: sroet Date: Tue, 14 Sep 2021 13:30:33 +0200 Subject: [PATCH 0846/2375] make test timeout stricter --- test/test_remote.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_remote.py b/test/test_remote.py index 10f0bb4bd..8f0206646 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -663,5 +663,5 @@ def test_timeout_funcs(self, repo): assert f is not None # Make sure these functions exist _ = f() # Make sure the function runs with pytest.raises(GitCommandError, - match="kill_after_timeout=0.01 s"): - f(kill_after_timeout=0.01) + match="kill_after_timeout=0 s"): + f(kill_after_timeout=0) From e95ee636504a42bd5d8c83314a676253a2de9ad6 Mon Sep 17 00:00:00 2001 From: sroet Date: Tue, 14 Sep 2021 13:59:22 +0200 Subject: [PATCH 0847/2375] fetch is also to quick on CI, only test pull --- test/test_remote.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_remote.py b/test/test_remote.py index 8f0206646..9fe649ad7 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -658,7 +658,7 @@ def test_push_error(self, repo): class TestTimeouts(TestBase): @with_rw_repo('HEAD', bare=False) def test_timeout_funcs(self, repo): - for function in ["pull", "fetch"]: #"can't get push to reliably timeout + for function in ["pull"]: #"can't get fetch and push to reliably timeout f = getattr(repo.remotes.origin, function) assert f is not None # Make sure these functions exist _ = f() # Make sure the function runs From 4588efd0e086a240f3e1c826be63a2bd30eedf36 Mon Sep 17 00:00:00 2001 From: sroet Date: Tue, 14 Sep 2021 14:00:30 +0200 Subject: [PATCH 0848/2375] two spaces before comments --- test/test_remote.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_remote.py b/test/test_remote.py index 9fe649ad7..4b06a88ac 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -658,7 +658,7 @@ def test_push_error(self, repo): class TestTimeouts(TestBase): @with_rw_repo('HEAD', bare=False) def test_timeout_funcs(self, repo): - for function in ["pull"]: #"can't get fetch and push to reliably timeout + for function in ["pull"]: # can't get fetch and push to reliably timeout f = getattr(repo.remotes.origin, function) assert f is not None # Make sure these functions exist _ = f() # Make sure the function runs From 893ddabd312535bfd906822e42f0223c40655163 Mon Sep 17 00:00:00 2001 From: sroet Date: Tue, 14 Sep 2021 14:09:29 +0200 Subject: [PATCH 0849/2375] set timeout to a non-zero value --- test/test_remote.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_remote.py b/test/test_remote.py index 4b06a88ac..4c1d02c86 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -663,5 +663,5 @@ def test_timeout_funcs(self, repo): assert f is not None # Make sure these functions exist _ = f() # Make sure the function runs with pytest.raises(GitCommandError, - match="kill_after_timeout=0 s"): - f(kill_after_timeout=0) + match="kill_after_timeout=0.001 s"): + f(kill_after_timeout=0.001) From aa5076626ca9f2ff1279c6b8e67408be9d0fa690 Mon Sep 17 00:00:00 2001 From: sroet Date: Wed, 15 Sep 2021 11:55:17 +0200 Subject: [PATCH 0850/2375] Add a way to force status codes inside AutoInterrupt._terminate, and let tests use it --- git/cmd.py | 19 ++++++++++++------- test/test_remote.py | 14 ++++++++++---- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index 9279bb0c3..8fb10742f 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -409,6 +409,10 @@ class AutoInterrupt(object): __slots__ = ("proc", "args", "status") + # If this is non-zero it will override any status code during + # _terminate, used to prevent race conditions in testing + _status_code_if_terminate: int = 0 + def __init__(self, proc: Union[None, subprocess.Popen], args: Any) -> None: self.proc = proc self.args = args @@ -427,11 +431,10 @@ def _terminate(self) -> None: proc.stdout.close() if proc.stderr: proc.stderr.close() - # did the process finish already so we have a return code ? try: if proc.poll() is not None: - self.status = proc.poll() + self.status = self._status_code_if_terminate or proc.poll() return None except OSError as ex: log.info("Ignored error after process had died: %r", ex) @@ -443,7 +446,9 @@ def _terminate(self) -> None: # try to kill it try: proc.terminate() - self.status = proc.wait() # ensure process goes away + status = proc.wait() # ensure process goes away + + self.status = self._status_code_if_terminate or status except OSError as ex: log.info("Ignored error after process had died: %r", ex) except AttributeError: @@ -849,7 +854,7 @@ def execute(self, if is_win: cmd_not_found_exception = OSError - if kill_after_timeout: + if kill_after_timeout is not None: raise GitCommandError(redacted_command, '"kill_after_timeout" feature is not supported on Windows.') else: cmd_not_found_exception = FileNotFoundError # NOQA # exists, flake8 unknown @UndefinedVariable @@ -916,7 +921,7 @@ def _kill_process(pid: int) -> None: return # end - if kill_after_timeout: + if kill_after_timeout is not None: kill_check = threading.Event() watchdog = threading.Timer(kill_after_timeout, _kill_process, args=(proc.pid,)) @@ -927,10 +932,10 @@ def _kill_process(pid: int) -> None: newline = "\n" if universal_newlines else b"\n" try: if output_stream is None: - if kill_after_timeout: + if kill_after_timeout is not None: watchdog.start() stdout_value, stderr_value = proc.communicate() - if kill_after_timeout: + if kill_after_timeout is not None: watchdog.cancel() if kill_check.is_set(): stderr_value = ('Timeout: the command "%s" did not complete in %d ' diff --git a/test/test_remote.py b/test/test_remote.py index 4c1d02c86..088fdad55 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -658,10 +658,16 @@ def test_push_error(self, repo): class TestTimeouts(TestBase): @with_rw_repo('HEAD', bare=False) def test_timeout_funcs(self, repo): - for function in ["pull"]: # can't get fetch and push to reliably timeout + # Force error code to prevent a race condition if the python thread is + # slow + default = Git.AutoInterrupt._status_code_if_terminate + Git.AutoInterrupt._status_code_if_terminate = -15 + for function in ["pull", "fetch"]: # can't get push to timeout f = getattr(repo.remotes.origin, function) assert f is not None # Make sure these functions exist - _ = f() # Make sure the function runs + _ = f() # Make sure the function runs with pytest.raises(GitCommandError, - match="kill_after_timeout=0.001 s"): - f(kill_after_timeout=0.001) + match="kill_after_timeout=0 s"): + f(kill_after_timeout=0) + + Git.AutoInterrupt._status_code_if_terminate = default From 2d15c5a601e698e8f7859e821950cad0701b756d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 18 Sep 2021 09:30:26 +0800 Subject: [PATCH 0851/2375] =?UTF-8?q?prepare=20new=20release,=20bump=20ver?= =?UTF-8?q?sion=20patch=20level=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …which could probably have been a minor version last time. --- VERSION | 2 +- doc/source/changes.rst | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/VERSION b/VERSION index 60b9d63bc..05f5ca23b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.23 +3.1.24 diff --git a/doc/source/changes.rst b/doc/source/changes.rst index ac73b1722..4186ac911 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,9 +2,19 @@ Changelog ========= -3.1.23 + +3.1.24 ====== +* Newly added timeout flag is not be enabled by default, and was renamed to kill_after_timeout + +See the following for details: +https://github.com/gitpython-developers/gitpython/milestone/54?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/53?closed=1 + +3.1.23 (YANKED) +=============== + * This is the second typed release with a lot of improvements under the hood. * General: @@ -45,7 +55,7 @@ Changelog - Add timeout to handle_process_output(), in case thread.join() hangs. See the following for details: -https://github.com/gitpython-developers/gitpython/milestone/52?closed=1 +https://github.com/gitpython-developers/gitpython/milestone/53?closed=1 3.1.20 (YANKED) From 5f4b4dbff46fae4c899f5573aea5a7266a41eeeb Mon Sep 17 00:00:00 2001 From: Russ Allbery Date: Mon, 20 Sep 2021 13:53:42 -0700 Subject: [PATCH 0852/2375] Fix typing issues with delete_head and Remote.add delete_head and Head.delete historically accept either Head objects or a str name of a head. Adjust the typing to match. This unfortunately requires suppressing type warnings in the signature of RemoteReference.delete, since it inherits from Head but does not accept str (since it needs access to the richer data of RemoteReference). Using assignment to make add an alias for create unfortunately confuses mypy, since it loses track of the fact that it's a classmethod and starts treating it like a staticmethod. Replace with a stub wrapper instead. --- git/refs/head.py | 2 +- git/refs/remote.py | 7 ++++++- git/remote.py | 4 +++- git/repo/base.py | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/git/refs/head.py b/git/refs/head.py index 56a87182f..d1d72c7bd 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -129,7 +129,7 @@ class Head(Reference): k_config_remote_ref = "merge" # branch to merge from remote @classmethod - def delete(cls, repo: 'Repo', *heads: 'Head', force: bool = False, **kwargs: Any) -> None: + def delete(cls, repo: 'Repo', *heads: 'Union[Head, str]', force: bool = False, **kwargs: Any) -> None: """Delete the given heads :param force: diff --git a/git/refs/remote.py b/git/refs/remote.py index 9b74d87fb..1b416bd0a 100644 --- a/git/refs/remote.py +++ b/git/refs/remote.py @@ -37,8 +37,13 @@ def iter_items(cls, repo: 'Repo', common_path: Union[PathLike, None] = None, # super is Reference return super(RemoteReference, cls).iter_items(repo, common_path) + # The Head implementation of delete also accepts strs, but this + # implementation does not. mypy doesn't have a way of representing + # tightening the types of arguments in subclasses and recommends Any or + # "type: ignore". (See https://github.com/python/typing/issues/241) @ classmethod - def delete(cls, repo: 'Repo', *refs: 'RemoteReference', **kwargs: Any) -> None: + def delete(cls, repo: 'Repo', *refs: 'RemoteReference', # type: ignore + **kwargs: Any) -> None: """Delete the given remote references :note: diff --git a/git/remote.py b/git/remote.py index 9917c4310..2cf5678b6 100644 --- a/git/remote.py +++ b/git/remote.py @@ -665,7 +665,9 @@ def create(cls, repo: 'Repo', name: str, url: str, **kwargs: Any) -> 'Remote': return cls(repo, name) # add is an alias - add = create + @ classmethod + def add(cls, repo: 'Repo', name: str, url: str, **kwargs: Any) -> 'Remote': + return cls.create(repo, name, url, **kwargs) @ classmethod def remove(cls, repo: 'Repo', name: str) -> str: diff --git a/git/repo/base.py b/git/repo/base.py index e308fd8a2..7713c9152 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -429,7 +429,7 @@ def create_head(self, path: PathLike, commit: str = 'HEAD', :return: newly created Head Reference""" return Head.create(self, path, commit, logmsg, force) - def delete_head(self, *heads: 'Head', **kwargs: Any) -> None: + def delete_head(self, *heads: 'Union[str, Head]', **kwargs: Any) -> None: """Delete the given heads :param kwargs: Additional keyword arguments to be passed to git-branch""" From 5e73cabd041f45337b270d5e78674d88448929e6 Mon Sep 17 00:00:00 2001 From: Ket3r Date: Wed, 29 Sep 2021 21:04:14 +0200 Subject: [PATCH 0853/2375] Fix broken test requirements The ddt package changed the function signature in version 1.4.3 from idata(iterable) to idata(iterable, index_len). Hopefully this was just a mistake and the new argument will be optional in future versions (see issue datadriventests/ddt#97) --- test-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-requirements.txt b/test-requirements.txt index deaafe214..d5d2346a0 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,4 +1,4 @@ -ddt>=1.1.1 +ddt>=1.1.1, !=1.4.3 mypy flake8 From 53d94b8091b36847bb9e495c76bb5a3ec2a2fdb5 Mon Sep 17 00:00:00 2001 From: Trym Bremnes Date: Thu, 30 Sep 2021 08:54:43 +0200 Subject: [PATCH 0854/2375] Replace wildcard imports with concrete imports All `from import *` has now been replaced by `from import X, Y, ...`. Contributes to #1349 --- git/__init__.py | 22 +++++++++++----------- git/exc.py | 3 +-- git/index/__init__.py | 4 ++-- git/objects/__init__.py | 14 +++++++------- git/refs/__init__.py | 12 ++++++------ test/lib/__init__.py | 7 +++++-- 6 files changed, 32 insertions(+), 30 deletions(-) diff --git a/git/__init__.py b/git/__init__.py index ae9254a26..a2213ee0f 100644 --- a/git/__init__.py +++ b/git/__init__.py @@ -5,7 +5,7 @@ # the BSD License: http://www.opensource.org/licenses/bsd-license.php # flake8: noqa #@PydevCodeAnalysisIgnore -from git.exc import * # @NoMove @IgnorePep8 +from git.exc import GitError, GitCommandError, GitCommandNotFound, UnmergedEntriesError, CheckoutError, InvalidGitRepositoryError, NoSuchPathError, BadName # @NoMove @IgnorePep8 import inspect import os import sys @@ -39,16 +39,16 @@ def _init_externals() -> None: #{ Imports try: - from git.config import GitConfigParser # @NoMove @IgnorePep8 - from git.objects import * # @NoMove @IgnorePep8 - from git.refs import * # @NoMove @IgnorePep8 - from git.diff import * # @NoMove @IgnorePep8 - from git.db import * # @NoMove @IgnorePep8 - from git.cmd import Git # @NoMove @IgnorePep8 - from git.repo import Repo # @NoMove @IgnorePep8 - from git.remote import * # @NoMove @IgnorePep8 - from git.index import * # @NoMove @IgnorePep8 - from git.util import ( # @NoMove @IgnorePep8 + from git.config import GitConfigParser # @NoMove @IgnorePep8 + from git.objects import Blob, Commit, Object, Submodule, Tree # @NoMove @IgnorePep8 + from git.refs import Head, Reference, RefLog, RemoteReference, SymbolicReference, TagReference # @NoMove @IgnorePep8 + from git.diff import Diff, DiffIndex, NULL_TREE # @NoMove @IgnorePep8 + from git.db import GitCmdObjectDB, GitDB # @NoMove @IgnorePep8 + from git.cmd import Git # @NoMove @IgnorePep8 + from git.repo import Repo # @NoMove @IgnorePep8 + from git.remote import FetchInfo, PushInfo, Remote, RemoteProgress # @NoMove @IgnorePep8 + from git.index import BlobFilter, IndexEntry, IndexFile # @NoMove @IgnorePep8 + from git.util import ( # @NoMove @IgnorePep8 LockFile, BlockingLockFile, Stats, diff --git a/git/exc.py b/git/exc.py index e8ff784c7..d29a25f63 100644 --- a/git/exc.py +++ b/git/exc.py @@ -5,8 +5,7 @@ # the BSD License: http://www.opensource.org/licenses/bsd-license.php """ Module containing all exceptions thrown throughout the git package, """ -from gitdb.exc import BadName # NOQA @UnusedWildImport skipcq: PYL-W0401, PYL-W0614 -from gitdb.exc import * # NOQA @UnusedWildImport skipcq: PYL-W0401, PYL-W0614 +from gitdb.exc import BadName, BadObject # NOQA @UnusedWildImport skipcq: PYL-W0401, PYL-W0614 from git.compat import safe_decode # typing ---------------------------------------------------- diff --git a/git/index/__init__.py b/git/index/__init__.py index 96b721f07..f0ac81e5a 100644 --- a/git/index/__init__.py +++ b/git/index/__init__.py @@ -1,4 +1,4 @@ """Initialize the index package""" # flake8: noqa -from .base import * -from .typ import * +from .base import IndexFile +from .typ import IndexEntry, BlobFilter diff --git a/git/objects/__init__.py b/git/objects/__init__.py index 1d0bb7a51..c4a492274 100644 --- a/git/objects/__init__.py +++ b/git/objects/__init__.py @@ -4,14 +4,14 @@ # flake8: noqa import inspect -from .base import * -from .blob import * -from .commit import * +from .base import Object, IndexObject +from .blob import Blob +from .commit import Commit from .submodule import util as smutil -from .submodule.base import * -from .submodule.root import * -from .tag import * -from .tree import * +from .submodule.base import Submodule, UpdateProgress +from .submodule.root import RootModule, RootUpdateProgress +from .tag import TagObject +from .tree import Tree # Fix import dependency - add IndexObject to the util module, so that it can be # imported by the submodule.base smutil.IndexObject = IndexObject # type: ignore[attr-defined] diff --git a/git/refs/__init__.py b/git/refs/__init__.py index 1486dffe6..075c65c8f 100644 --- a/git/refs/__init__.py +++ b/git/refs/__init__.py @@ -1,9 +1,9 @@ # flake8: noqa # import all modules in order, fix the names they require -from .symbolic import * -from .reference import * -from .head import * -from .tag import * -from .remote import * +from .symbolic import SymbolicReference +from .reference import Reference +from .head import HEAD, Head +from .tag import TagReference +from .remote import RemoteReference -from .log import * +from .log import RefLogEntry, RefLog diff --git a/test/lib/__init__.py b/test/lib/__init__.py index 1551ce455..3634df803 100644 --- a/test/lib/__init__.py +++ b/test/lib/__init__.py @@ -4,9 +4,12 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php -# flake8: noqa import inspect -from .helper import * + +from .helper import (GIT_DAEMON_PORT, SkipTest, StringProcessAdapter, TestBase, + TestCase, fixture, fixture_path, + with_rw_and_rw_remote_repo, with_rw_directory, + with_rw_repo) __all__ = [name for name, obj in locals().items() if not (name.startswith('_') or inspect.ismodule(obj))] From ce4afe46d211cdfb611b8e8109bb0dc160a12540 Mon Sep 17 00:00:00 2001 From: Trym Bremnes Date: Sat, 2 Oct 2021 16:42:35 +0200 Subject: [PATCH 0855/2375] Revert "Replace wildcard imports with concrete imports" This reverts commit 53d94b8091b36847bb9e495c76bb5a3ec2a2fdb5. The reason for the revert is that the commit in question introduced a regression where certain modules, functions and classes that were exposed before were no longer exposed. See https://github.com/gitpython-developers/GitPython/pull/1352#issuecomment-932757204 for additional information. --- git/__init__.py | 22 +++++++++++----------- git/exc.py | 3 ++- git/index/__init__.py | 4 ++-- git/objects/__init__.py | 14 +++++++------- git/refs/__init__.py | 12 ++++++------ test/lib/__init__.py | 7 ++----- 6 files changed, 30 insertions(+), 32 deletions(-) diff --git a/git/__init__.py b/git/__init__.py index a2213ee0f..ae9254a26 100644 --- a/git/__init__.py +++ b/git/__init__.py @@ -5,7 +5,7 @@ # the BSD License: http://www.opensource.org/licenses/bsd-license.php # flake8: noqa #@PydevCodeAnalysisIgnore -from git.exc import GitError, GitCommandError, GitCommandNotFound, UnmergedEntriesError, CheckoutError, InvalidGitRepositoryError, NoSuchPathError, BadName # @NoMove @IgnorePep8 +from git.exc import * # @NoMove @IgnorePep8 import inspect import os import sys @@ -39,16 +39,16 @@ def _init_externals() -> None: #{ Imports try: - from git.config import GitConfigParser # @NoMove @IgnorePep8 - from git.objects import Blob, Commit, Object, Submodule, Tree # @NoMove @IgnorePep8 - from git.refs import Head, Reference, RefLog, RemoteReference, SymbolicReference, TagReference # @NoMove @IgnorePep8 - from git.diff import Diff, DiffIndex, NULL_TREE # @NoMove @IgnorePep8 - from git.db import GitCmdObjectDB, GitDB # @NoMove @IgnorePep8 - from git.cmd import Git # @NoMove @IgnorePep8 - from git.repo import Repo # @NoMove @IgnorePep8 - from git.remote import FetchInfo, PushInfo, Remote, RemoteProgress # @NoMove @IgnorePep8 - from git.index import BlobFilter, IndexEntry, IndexFile # @NoMove @IgnorePep8 - from git.util import ( # @NoMove @IgnorePep8 + from git.config import GitConfigParser # @NoMove @IgnorePep8 + from git.objects import * # @NoMove @IgnorePep8 + from git.refs import * # @NoMove @IgnorePep8 + from git.diff import * # @NoMove @IgnorePep8 + from git.db import * # @NoMove @IgnorePep8 + from git.cmd import Git # @NoMove @IgnorePep8 + from git.repo import Repo # @NoMove @IgnorePep8 + from git.remote import * # @NoMove @IgnorePep8 + from git.index import * # @NoMove @IgnorePep8 + from git.util import ( # @NoMove @IgnorePep8 LockFile, BlockingLockFile, Stats, diff --git a/git/exc.py b/git/exc.py index d29a25f63..e8ff784c7 100644 --- a/git/exc.py +++ b/git/exc.py @@ -5,7 +5,8 @@ # the BSD License: http://www.opensource.org/licenses/bsd-license.php """ Module containing all exceptions thrown throughout the git package, """ -from gitdb.exc import BadName, BadObject # NOQA @UnusedWildImport skipcq: PYL-W0401, PYL-W0614 +from gitdb.exc import BadName # NOQA @UnusedWildImport skipcq: PYL-W0401, PYL-W0614 +from gitdb.exc import * # NOQA @UnusedWildImport skipcq: PYL-W0401, PYL-W0614 from git.compat import safe_decode # typing ---------------------------------------------------- diff --git a/git/index/__init__.py b/git/index/__init__.py index f0ac81e5a..96b721f07 100644 --- a/git/index/__init__.py +++ b/git/index/__init__.py @@ -1,4 +1,4 @@ """Initialize the index package""" # flake8: noqa -from .base import IndexFile -from .typ import IndexEntry, BlobFilter +from .base import * +from .typ import * diff --git a/git/objects/__init__.py b/git/objects/__init__.py index c4a492274..1d0bb7a51 100644 --- a/git/objects/__init__.py +++ b/git/objects/__init__.py @@ -4,14 +4,14 @@ # flake8: noqa import inspect -from .base import Object, IndexObject -from .blob import Blob -from .commit import Commit +from .base import * +from .blob import * +from .commit import * from .submodule import util as smutil -from .submodule.base import Submodule, UpdateProgress -from .submodule.root import RootModule, RootUpdateProgress -from .tag import TagObject -from .tree import Tree +from .submodule.base import * +from .submodule.root import * +from .tag import * +from .tree import * # Fix import dependency - add IndexObject to the util module, so that it can be # imported by the submodule.base smutil.IndexObject = IndexObject # type: ignore[attr-defined] diff --git a/git/refs/__init__.py b/git/refs/__init__.py index 075c65c8f..1486dffe6 100644 --- a/git/refs/__init__.py +++ b/git/refs/__init__.py @@ -1,9 +1,9 @@ # flake8: noqa # import all modules in order, fix the names they require -from .symbolic import SymbolicReference -from .reference import Reference -from .head import HEAD, Head -from .tag import TagReference -from .remote import RemoteReference +from .symbolic import * +from .reference import * +from .head import * +from .tag import * +from .remote import * -from .log import RefLogEntry, RefLog +from .log import * diff --git a/test/lib/__init__.py b/test/lib/__init__.py index 3634df803..1551ce455 100644 --- a/test/lib/__init__.py +++ b/test/lib/__init__.py @@ -4,12 +4,9 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php +# flake8: noqa import inspect - -from .helper import (GIT_DAEMON_PORT, SkipTest, StringProcessAdapter, TestBase, - TestCase, fixture, fixture_path, - with_rw_and_rw_remote_repo, with_rw_directory, - with_rw_repo) +from .helper import * __all__ = [name for name, obj in locals().items() if not (name.startswith('_') or inspect.ismodule(obj))] From b17bc980b1546159ceb119f04716f24b043fc3f8 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 3 Oct 2021 19:44:18 +0800 Subject: [PATCH 0856/2375] =?UTF-8?q?It's=20python,=20so=20stuff=20breaks?= =?UTF-8?q?=20with=20patches=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …https://github.com/pytest-dev/pytest-cov/pull/472 Break a few to fix a few. --- test-requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test-requirements.txt b/test-requirements.txt index d5d2346a0..53d8e606d 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -10,4 +10,5 @@ virtualenv pytest pytest-cov -pytest-sugar \ No newline at end of file +coverage[toml] +pytest-sugar From b0630030a1d2db994fb2fb488efa167b91594864 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Wed, 13 Oct 2021 11:16:27 +0300 Subject: [PATCH 0857/2375] Add support for Python 3.10 --- .github/workflows/pythonpackage.yml | 2 +- AUTHORS | 1 + setup.py | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 4e7aa418c..dd1e9a07e 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.7.5, 3.7.12, 3.8, 3.8.0, 3.8.11, 3.8, 3.9, 3.9.0, 3.9.7] # , "3.10.0-rc.2"] + python-version: [3.7, 3.7.5, 3.7.12, 3.8, 3.8.0, 3.8.11, 3.8, 3.9, 3.9.0, 3.9.7, "3.10"] steps: - uses: actions/checkout@v2 diff --git a/AUTHORS b/AUTHORS index 606796d98..55d681813 100644 --- a/AUTHORS +++ b/AUTHORS @@ -44,4 +44,5 @@ Contributors are: -Ram Rachum -Alba Mendez -Robert Westman +-Hugo van Kemenade Portions derived from other open source works and are clearly marked. diff --git a/setup.py b/setup.py index cd1007d74..4f1d0b75e 100755 --- a/setup.py +++ b/setup.py @@ -122,6 +122,6 @@ def build_py_modules(basedir: str, excludes: Sequence = ()) -> Sequence: "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", - # "Programming Language :: Python :: 3.10" + "Programming Language :: Python :: 3.10", ] ) From a9696eff9bbf8ffe266653f95c9748e40c58a5d1 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Wed, 13 Oct 2021 11:26:02 +0300 Subject: [PATCH 0858/2375] Sphinx 4.3.0 will be needed for Python 3.10 --- doc/requirements.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/requirements.txt b/doc/requirements.txt index 917feb350..ad3c118a2 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -1,3 +1,6 @@ -sphinx==4.1.2 +# TODO Temporary until Sphinx 4.3.0 released with Python 3.10 support: +# https://github.com/sphinx-doc/sphinx/pull/9712 +sphinx==4.1.2;python_version<="3.9" +git+git://github.com/sphinx-doc/sphinx@f13ad80#egg=sphinx;python_version>="3.10" sphinx_rtd_theme sphinx-autodoc-typehints From 3affd88c09635f0cad0f268c5ca22162c1aa0aa8 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 14 Oct 2021 17:19:42 +0300 Subject: [PATCH 0859/2375] Drop support for EOL Python 3.5 --- .github/workflows/pythonpackage.yml | 2 +- README.md | 2 +- doc/source/intro.rst | 2 +- setup.py | 3 +-- tox.ini | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index e070c68f8..3f1455d96 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.5, 3.6, 3.7, 3.8, 3.9] + python-version: ["3.6", "3.7", "3.8", "3.9"] steps: - uses: actions/checkout@v2 diff --git a/README.md b/README.md index 412dfd9c0..f083dd004 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ For performance critical 64 bit applications, a simplified version of memory map ## Prerequisites -* Python 3.5+ +* Python 3.6+ * OSX, Windows or Linux The package was tested on all of the previously mentioned configurations. diff --git a/doc/source/intro.rst b/doc/source/intro.rst index e458d53aa..3489b04ee 100644 --- a/doc/source/intro.rst +++ b/doc/source/intro.rst @@ -20,7 +20,7 @@ For performance critical 64 bit applications, a simplified version of memory map ############# Prerequisites ############# -* Python 3.5+ +* Python 3.6+ * OSX, Windows or Linux The package was tested on all of the previously mentioned configurations. diff --git a/setup.py b/setup.py index 0718c15ef..833379478 100755 --- a/setup.py +++ b/setup.py @@ -26,7 +26,7 @@ license="BSD", packages=find_packages(), zip_safe=True, - python_requires=">=3.5", + python_requires=">=3.6", classifiers=[ "Development Status :: 5 - Production/Stable", "Environment :: Console", @@ -38,7 +38,6 @@ "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", diff --git a/tox.ini b/tox.ini index e33f567f2..54f328da1 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ # and then run "tox" from this directory. [tox] -envlist = flake8, py35, py36, py37, py38, py39 +envlist = flake8, py36, py37, py38, py39 [testenv] commands = nosetests {posargs:--with-coverage --cover-package=smmap} From 19772d24cd63a0b5392084c07cb6a4e8a2ac86ae Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 14 Oct 2021 17:06:35 +0300 Subject: [PATCH 0860/2375] Add support for Python 3.10 --- .github/workflows/pythonpackage.yml | 2 +- setup.py | 1 + tox.ini | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 3f1455d96..e8726a269 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.6", "3.7", "3.8", "3.9"] + python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"] steps: - uses: actions/checkout@v2 diff --git a/setup.py b/setup.py index 833379478..c25e445ed 100755 --- a/setup.py +++ b/setup.py @@ -42,6 +42,7 @@ "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3 :: Only", ], long_description=long_description, diff --git a/tox.ini b/tox.ini index 54f328da1..6587dcedf 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ # and then run "tox" from this directory. [tox] -envlist = flake8, py36, py37, py38, py39 +envlist = flake8, py36, py37, py38, py39, py310 [testenv] commands = nosetests {posargs:--with-coverage --cover-package=smmap} From ddc4b9f412769915b77d857324ad165ef488499b Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 14 Oct 2021 17:14:27 +0300 Subject: [PATCH 0861/2375] Switch from abandoned nose to pytest to support Python 3.10 --- .github/workflows/pythonpackage.yml | 8 ++++---- Makefile | 6 +++--- setup.py | 2 -- tox.ini | 6 +++--- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index e8726a269..e6e68ff7c 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -22,7 +22,7 @@ jobs: with: fetch-depth: 1000 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies @@ -35,9 +35,9 @@ jobs: flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with nose + - name: Test run: | - pip install nose + pip install pytest ulimit -n 48 ulimit -n - nosetests -v + pytest -v diff --git a/Makefile b/Makefile index 593a758ee..9145cabb0 100644 --- a/Makefile +++ b/Makefile @@ -24,11 +24,11 @@ clean-files: clean: clean-files clean-docs test: - nosetests + pytest coverage: - nosetests --with-coverage --cover-package=smmap - + pytest --cov smmap --cov-report xml + build: ./setup.py build diff --git a/setup.py b/setup.py index c25e445ed..56e560a38 100755 --- a/setup.py +++ b/setup.py @@ -47,6 +47,4 @@ ], long_description=long_description, long_description_content_type='text/markdown', - tests_require=('nose', 'nosexcover'), - test_suite='nose.collector' ) diff --git a/tox.ini b/tox.ini index 6587dcedf..c34ab0290 100644 --- a/tox.ini +++ b/tox.ini @@ -7,10 +7,10 @@ envlist = flake8, py36, py37, py38, py39, py310 [testenv] -commands = nosetests {posargs:--with-coverage --cover-package=smmap} +commands = {envpython} -m pytest --cov smmap --cov-report xml {posargs} deps = - nose - nosexcover + pytest + pytest-cov [testenv:flake8] commands = flake8 {posargs} From 1bda3b6a5ee6e383e9fd3316caa2d8181e53bf45 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 14 Oct 2021 17:18:23 +0300 Subject: [PATCH 0862/2375] Universal wheels are for code expected to work on both Python 2 and 3 --- setup.cfg | 3 --- 1 file changed, 3 deletions(-) diff --git a/setup.cfg b/setup.cfg index 83a51c4b9..38c535ba5 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,2 @@ -[bdist_wheel] -universal = 1 - [flake8] exclude = .tox,.venv,build,dist,doc From f0b322afcf6934501bade7776c5331619485a06c Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 14 Oct 2021 17:27:17 +0300 Subject: [PATCH 0863/2375] Upgrade Python syntax with pyupgrade --py36-plus --- doc/source/conf.py | 9 ++++----- setup.py | 2 +- smmap/buf.py | 2 +- smmap/mman.py | 6 +++--- smmap/test/lib.py | 2 +- smmap/test/test_buf.py | 2 -- smmap/test/test_mman.py | 2 -- smmap/util.py | 6 +++--- 8 files changed, 13 insertions(+), 18 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 5aa28e2a6..55dfc5c46 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # # smmap documentation build configuration file, created by # sphinx-quickstart on Wed Jun 8 15:14:25 2011. @@ -38,8 +37,8 @@ master_doc = 'index' # General information about the project. -project = u'smmap' -copyright = u'2011, Sebastian Thiel' +project = 'smmap' +copyright = '2011, Sebastian Thiel' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -173,8 +172,8 @@ # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ - ('index', 'smmap.tex', u'smmap Documentation', - u'Sebastian Thiel', 'manual'), + ('index', 'smmap.tex', 'smmap Documentation', + 'Sebastian Thiel', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of diff --git a/setup.py b/setup.py index 56e560a38..9ab8a7f0c 100755 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ import smmap if os.path.exists("README.md"): - long_description = open('README.md', "r", encoding="utf-8").read().replace('\r\n', '\n') + long_description = open('README.md', encoding="utf-8").read().replace('\r\n', '\n') else: long_description = "See https://github.com/gitpython-developers/smmap" diff --git a/smmap/buf.py b/smmap/buf.py index af8496eff..795e0fd87 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -4,7 +4,7 @@ __all__ = ["SlidingWindowMapBuffer"] -class SlidingWindowMapBuffer(object): +class SlidingWindowMapBuffer: """A buffer like object which allows direct byte-wise object and slicing into memory of a mapped file. The mapping is controlled by the provided cursor. diff --git a/smmap/mman.py b/smmap/mman.py index 19c3a0223..1de7d9e97 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -15,7 +15,7 @@ #}END utilities -class WindowCursor(object): +class WindowCursor: """ Pointer into the mapped region of the memory manager, keeping the map @@ -233,7 +233,7 @@ def fd(self): #} END interface -class StaticWindowMapManager(object): +class StaticWindowMapManager: """Provides a manager which will produce single size cursors that are allowed to always map the whole file. @@ -486,7 +486,7 @@ class SlidingWindowMapManager(StaticWindowMapManager): def __init__(self, window_size=-1, max_memory_size=0, max_open_handles=sys.maxsize): """Adjusts the default window size to -1""" - super(SlidingWindowMapManager, self).__init__(window_size, max_memory_size, max_open_handles) + super().__init__(window_size, max_memory_size, max_open_handles) def _obtain_region(self, a, offset, size, flags, is_recursive): # bisect to find an existing region. The c++ implementation cannot diff --git a/smmap/test/lib.py b/smmap/test/lib.py index f86c0c6f1..ca91ee914 100644 --- a/smmap/test/lib.py +++ b/smmap/test/lib.py @@ -8,7 +8,7 @@ #{ Utilities -class FileCreator(object): +class FileCreator: """A instance which creates a temporary file with a prefix and a given size and provides this info to the user. diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index 3b6009e11..17555afe4 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -1,5 +1,3 @@ -from __future__ import print_function - from .lib import TestBase, FileCreator from smmap.mman import ( diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index 96bc355b7..d88316b8e 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -1,5 +1,3 @@ -from __future__ import print_function - from .lib import TestBase, FileCreator from smmap.mman import ( diff --git a/smmap/util.py b/smmap/util.py index 72b2394a3..cf027afdc 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -34,7 +34,7 @@ def is_64_bit(): #{ Utility Classes -class MapWindow(object): +class MapWindow: """Utility type which is used to snap windows towards each other, and to adjust their size""" __slots__ = ( @@ -80,7 +80,7 @@ def extend_right_to(self, window, max_size): self.size = min(self.size + (window.ofs - self.ofs_end()), max_size) -class MapRegion(object): +class MapRegion: """Defines a mapped region of memory, aligned to pagesizes @@ -198,7 +198,7 @@ class MapRegionList(list): ) def __new__(cls, path): - return super(MapRegionList, cls).__new__(cls) + return super().__new__(cls) def __init__(self, path_or_fd): self._path_or_fd = path_or_fd From db8810096503dd8a1f5a021ff39be907417f90a7 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 15 Oct 2021 21:18:55 +0800 Subject: [PATCH 0864/2375] bump major version and update changelog --- doc/source/changes.rst | 7 +++++++ smmap/__init__.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index ff5ca9918..d0623b533 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,13 @@ Changelog ######### +****** +v5.0.0 +****** + +- Dropped support 3.5 +- Added support for Python 3.10 + ****** v4.0.0 ****** diff --git a/smmap/__init__.py b/smmap/__init__.py index 45f8abec8..696401c8c 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -3,7 +3,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/smmap" -version_info = (4, 0, 0) +version_info = (5, 0, 0) __version__ = '.'.join(str(i) for i in version_info) # make everything available in root package for convenience From 47a74ca590efbdc3ae59277a491562efa7acc605 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 23 Oct 2021 08:29:50 +0800 Subject: [PATCH 0865/2375] Allow usage of smmap 5.0 (#76) --- gitdb/ext/smmap | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gitdb/ext/smmap b/gitdb/ext/smmap index 30e93fee5..db8810096 160000 --- a/gitdb/ext/smmap +++ b/gitdb/ext/smmap @@ -1 +1 @@ -Subproject commit 30e93fee57286afae25c28a97ba65a9770f9a729 +Subproject commit db8810096503dd8a1f5a021ff39be907417f90a7 diff --git a/requirements.txt b/requirements.txt index 72957a243..1b2e11db7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -smmap>=3.0.1,<5 +smmap>=3.0.1,<6 From 9a289258074fbf92a64186274067a46f7b27666e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 23 Oct 2021 08:36:34 +0800 Subject: [PATCH 0866/2375] Drop support for python 3.4/3.5; make use of smmap 5.0 which does the same --- doc/source/changes.rst | 8 ++++++++ gitdb/__init__.py | 2 +- setup.py | 8 +++----- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 1a41d537b..de448dd4e 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,14 @@ Changelog ######### +***** +4.0.8 +***** + +* drop support for python 3.4 and 3.5 due to EOL +* Updated upper bound for smmap requirement in setup.py + (`#69 `_) + ***** 4.0.7 ***** diff --git a/gitdb/__init__.py b/gitdb/__init__.py index bef9696c7..0d936dba5 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -30,7 +30,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 7) +version_info = (4, 0, 8) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index 522a88f16..251ea93ba 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 7) +version_info = (4, 0, 8) __version__ = '.'.join(str(i) for i in version_info) setup( @@ -20,9 +20,9 @@ packages=('gitdb', 'gitdb.db', 'gitdb.utils', 'gitdb.test'), license="BSD License", zip_safe=False, - install_requires=['smmap>=3.0.1,<5'], + install_requires=['smmap>=3.0.1,<6'], long_description="""GitDB is a pure-Python git object database""", - python_requires='>=3.4', + python_requires='>=3.6', # See https://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ "Development Status :: 5 - Production/Stable", @@ -35,8 +35,6 @@ "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.4", - "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", From a3efd2458afe535ffd9dcc756d8ba0c931d10ff2 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Wed, 10 Nov 2021 20:23:06 +0200 Subject: [PATCH 0867/2375] Remove Sphinx workaround --- doc/requirements.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/doc/requirements.txt b/doc/requirements.txt index ad3c118a2..41a7c90f1 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -1,6 +1,3 @@ -# TODO Temporary until Sphinx 4.3.0 released with Python 3.10 support: -# https://github.com/sphinx-doc/sphinx/pull/9712 -sphinx==4.1.2;python_version<="3.9" -git+git://github.com/sphinx-doc/sphinx@f13ad80#egg=sphinx;python_version>="3.10" +sphinx==4.3.0 sphinx_rtd_theme sphinx-autodoc-typehints From 3b82fa3018a21f0eeb76034ecb8fb4dedea9a966 Mon Sep 17 00:00:00 2001 From: Sjoerd Langkemper Date: Tue, 12 Oct 2021 11:23:39 +0200 Subject: [PATCH 0868/2375] Let remote.push return a PushInfoList List-like, so that it's backward compatible. But it has a new method raise_on_error, that throws an exception if anything failed to push. Related to #621 --- git/remote.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/git/remote.py b/git/remote.py index 2cf5678b6..63b4dc510 100644 --- a/git/remote.py +++ b/git/remote.py @@ -116,6 +116,22 @@ def to_progress_instance(progress: Union[Callable[..., Any], RemoteProgress, Non return progress +class PushInfoList(IterableList): + def __new__(cls) -> 'IterableList[IterableObj]': + return super(IterableList, cls).__new__(cls, 'push_infos') + + def __init__(self) -> None: + super().__init__('push_infos') + self.exception = None + + def raise_on_error(self): + """ + Raise an exception if any ref failed to push. + """ + if self.exception: + raise self.exception + + class PushInfo(IterableObj, object): """ Carries information about the result of a push operation of a single head:: @@ -774,7 +790,7 @@ def _get_fetch_info_from_stderr(self, proc: 'Git.AutoInterrupt', def _get_push_info(self, proc: 'Git.AutoInterrupt', progress: Union[Callable[..., Any], RemoteProgress, None], - kill_after_timeout: Union[None, float] = None) -> IterableList[PushInfo]: + kill_after_timeout: Union[None, float] = None) -> PushInfoList: progress = to_progress_instance(progress) # read progress information from stderr @@ -782,7 +798,7 @@ def _get_push_info(self, proc: 'Git.AutoInterrupt', # read the lines manually as it will use carriage returns between the messages # to override the previous one. This is why we read the bytes manually progress_handler = progress.new_message_handler() - output: IterableList[PushInfo] = IterableList('push_infos') + output: PushInfoList = PushInfoList() def stdout_handler(line: str) -> None: try: @@ -796,13 +812,14 @@ def stdout_handler(line: str) -> None: stderr_text = progress.error_lines and '\n'.join(progress.error_lines) or '' try: proc.wait(stderr=stderr_text) - except Exception: + except Exception as e: # This is different than fetch (which fails if there is any std_err # even if there is an output) if not output: raise elif stderr_text: log.warning("Error lines received while fetching: %s", stderr_text) + output.exception = e return output From 1481e7108fb206a95717c331478d4382cda51a6a Mon Sep 17 00:00:00 2001 From: Sjoerd Langkemper Date: Wed, 13 Oct 2021 10:03:53 +0200 Subject: [PATCH 0869/2375] Test that return value of push is a list-like object --- test/test_remote.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/test_remote.py b/test/test_remote.py index 088fdad55..fedfa2070 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -30,7 +30,7 @@ fixture, GIT_DAEMON_PORT ) -from git.util import rmtree, HIDE_WINDOWS_FREEZE_ERRORS +from git.util import rmtree, HIDE_WINDOWS_FREEZE_ERRORS, IterableList import os.path as osp @@ -128,6 +128,9 @@ def _do_test_fetch_result(self, results, remote): # END for each info def _do_test_push_result(self, results, remote): + self.assertIsInstance(results, list) + self.assertIsInstance(results, IterableList) + self.assertGreater(len(results), 0) self.assertIsInstance(results[0], PushInfo) for info in results: From 9240de9f788396c45199cd3d9fa7fdbd8a5666c4 Mon Sep 17 00:00:00 2001 From: Sjoerd Langkemper Date: Mon, 8 Nov 2021 16:20:32 +0000 Subject: [PATCH 0870/2375] Rename exception to error, raise_on_error to raise_if_error --- git/remote.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/git/remote.py b/git/remote.py index 63b4dc510..745436761 100644 --- a/git/remote.py +++ b/git/remote.py @@ -122,14 +122,14 @@ def __new__(cls) -> 'IterableList[IterableObj]': def __init__(self) -> None: super().__init__('push_infos') - self.exception = None + self.error = None - def raise_on_error(self): + def raise_if_error(self): """ Raise an exception if any ref failed to push. """ - if self.exception: - raise self.exception + if self.error: + raise self.error class PushInfo(IterableObj, object): @@ -819,7 +819,7 @@ def stdout_handler(line: str) -> None: raise elif stderr_text: log.warning("Error lines received while fetching: %s", stderr_text) - output.exception = e + output.error = e return output From 699e223c51d99d1fc8d05b2b0fe0ef1e2ee7fd01 Mon Sep 17 00:00:00 2001 From: Sjoerd Langkemper Date: Mon, 8 Nov 2021 17:06:37 +0000 Subject: [PATCH 0871/2375] Test raise_if_error --- test/test_remote.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/test_remote.py b/test/test_remote.py index fedfa2070..761a7a3e7 100644 --- a/test/test_remote.py +++ b/test/test_remote.py @@ -154,6 +154,12 @@ def _do_test_push_result(self, results, remote): # END error checking # END for each info + if any([info.flags & info.ERROR for info in results]): + self.assertRaises(GitCommandError, results.raise_if_error) + else: + # No errors, so this should do nothing + results.raise_if_error() + def _do_test_fetch_info(self, repo): self.assertRaises(ValueError, FetchInfo._from_line, repo, "nonsense", '') self.assertRaises( From 63f4ca304bddf019220912b7b8e2abe585d88fe0 Mon Sep 17 00:00:00 2001 From: Sjoerd Langkemper Date: Tue, 9 Nov 2021 11:55:51 +0000 Subject: [PATCH 0872/2375] Add raise_if_error() to tutorial --- test/test_docs.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/test_docs.py b/test/test_docs.py index 220156bce..8897bbb75 100644 --- a/test/test_docs.py +++ b/test/test_docs.py @@ -393,7 +393,8 @@ def test_references_and_objects(self, rw_dir): origin.rename('new_origin') # push and pull behaves similarly to `git push|pull` origin.pull() - origin.push() + origin.push() # attempt push, ignore errors + origin.push().raise_if_error() # push and raise error if it fails # assert not empty_repo.delete_remote(origin).exists() # create and delete remotes # ![25-test_references_and_objects] From 8797904d04abc2df5da93ca7d799da21e5a50cb5 Mon Sep 17 00:00:00 2001 From: Sjoerd Langkemper Date: Tue, 9 Nov 2021 12:17:02 +0000 Subject: [PATCH 0873/2375] Fix type handing on PushInfoList --- git/remote.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/git/remote.py b/git/remote.py index 745436761..aae845e5d 100644 --- a/git/remote.py +++ b/git/remote.py @@ -117,14 +117,15 @@ def to_progress_instance(progress: Union[Callable[..., Any], RemoteProgress, Non class PushInfoList(IterableList): - def __new__(cls) -> 'IterableList[IterableObj]': - return super(IterableList, cls).__new__(cls, 'push_infos') + def __new__(cls) -> 'PushInfoList': + base = super().__new__(cls, 'push_infos') + return cast(PushInfoList, base) def __init__(self) -> None: super().__init__('push_infos') self.error = None - def raise_if_error(self): + def raise_if_error(self) -> None: """ Raise an exception if any ref failed to push. """ From e67e458ece9077f6c6db9fc6a867ac61e0ae6579 Mon Sep 17 00:00:00 2001 From: Sjoerd Langkemper Date: Tue, 9 Nov 2021 15:16:44 +0000 Subject: [PATCH 0874/2375] Specify type for PushInfoList.error --- git/remote.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/remote.py b/git/remote.py index aae845e5d..c212f6d28 100644 --- a/git/remote.py +++ b/git/remote.py @@ -123,7 +123,7 @@ def __new__(cls) -> 'PushInfoList': def __init__(self) -> None: super().__init__('push_infos') - self.error = None + self.error: Optional[Exception] = None def raise_if_error(self) -> None: """ From 35f7e9486c8bc596506a6872c7e0df37c4a35da3 Mon Sep 17 00:00:00 2001 From: Sjoerd Langkemper Date: Wed, 10 Nov 2021 12:40:06 +0000 Subject: [PATCH 0875/2375] Extend IterableList[PushInfo] instead of IterableList --- git/remote.py | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/git/remote.py b/git/remote.py index c212f6d28..7d5918a5a 100644 --- a/git/remote.py +++ b/git/remote.py @@ -116,23 +116,6 @@ def to_progress_instance(progress: Union[Callable[..., Any], RemoteProgress, Non return progress -class PushInfoList(IterableList): - def __new__(cls) -> 'PushInfoList': - base = super().__new__(cls, 'push_infos') - return cast(PushInfoList, base) - - def __init__(self) -> None: - super().__init__('push_infos') - self.error: Optional[Exception] = None - - def raise_if_error(self) -> None: - """ - Raise an exception if any ref failed to push. - """ - if self.error: - raise self.error - - class PushInfo(IterableObj, object): """ Carries information about the result of a push operation of a single head:: @@ -252,6 +235,22 @@ def iter_items(cls, repo: 'Repo', *args: Any, **kwargs: Any raise NotImplementedError +class PushInfoList(IterableList[PushInfo]): + def __new__(cls) -> 'PushInfoList': + return cast(PushInfoList, IterableList.__new__(cls, 'push_infos')) + + def __init__(self) -> None: + super().__init__('push_infos') + self.error: Optional[Exception] = None + + def raise_if_error(self) -> None: + """ + Raise an exception if any ref failed to push. + """ + if self.error: + raise self.error + + class FetchInfo(IterableObj, object): """ From 62131f3905ac37ff841142e2bb04bb585401a3d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Tue, 30 Nov 2021 10:17:52 +0100 Subject: [PATCH 0876/2375] Revert the use of typing_extensions in py3.8+ The original change requiring py3.10 TypeGuard (and matching typing_extensions) has been reverted, so revert the requirement on typing_extensions as well. --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index a20310fb2..7159416a9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ gitdb>=4.0.1,<5 -typing-extensions>=3.7.4.3;python_version<"3.10" +typing-extensions>=3.7.4.3;python_version<"3.8" From 2141eaef76fdfb2775dde45d087b34144d34a1fb Mon Sep 17 00:00:00 2001 From: yogabonito Date: Wed, 1 Dec 2021 00:42:39 +0100 Subject: [PATCH 0877/2375] DOC: fix typo --- doc/source/tutorial.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/source/tutorial.rst b/doc/source/tutorial.rst index 303e89cff..bc386e7c4 100644 --- a/doc/source/tutorial.rst +++ b/doc/source/tutorial.rst @@ -8,9 +8,9 @@ GitPython Tutorial ================== -GitPython provides object model access to your git repository. This tutorial is composed of multiple sections, most of which explains a real-life usecase. +GitPython provides object model access to your git repository. This tutorial is composed of multiple sections, most of which explain a real-life use case. -All code presented here originated from `test_docs.py `_ to assure correctness. Knowing this should also allow you to more easily run the code for your own testing purposes, all you need is a developer installation of git-python. +All code presented here originated from `test_docs.py `_ to assure correctness. Knowing this should also allow you to more easily run the code for your own testing purposes. All you need is a developer installation of git-python. Meet the Repo type ****************** From 2913a6454c9dfc803679dc5f75315e2d821ee977 Mon Sep 17 00:00:00 2001 From: Kian-Meng Ang Date: Wed, 5 Jan 2022 21:58:22 +0800 Subject: [PATCH 0878/2375] Fix typos --- gitdb/__init__.py | 2 +- gitdb/db/pack.py | 2 +- gitdb/fun.py | 8 ++++---- gitdb/pack.py | 4 ++-- gitdb/stream.py | 2 +- gitdb/test/db/lib.py | 2 +- gitdb/test/db/test_pack.py | 2 +- gitdb/test/test_pack.py | 2 +- gitdb/util.py | 6 +++--- 9 files changed, 15 insertions(+), 15 deletions(-) diff --git a/gitdb/__init__.py b/gitdb/__init__.py index 0d936dba5..b5d1939dc 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -21,7 +21,7 @@ def _init_externals(): except ImportError as e: raise ImportError("'%s' could not be imported, assure it is located in your PYTHONPATH" % module) from e # END verify import - # END handel imports + # END handle imports #} END initialization diff --git a/gitdb/db/pack.py b/gitdb/db/pack.py index 177ed7bb2..90de02b61 100644 --- a/gitdb/db/pack.py +++ b/gitdb/db/pack.py @@ -131,7 +131,7 @@ def store(self, istream): def update_cache(self, force=False): """ - Update our cache with the acutally existing packs on disk. Add new ones, + Update our cache with the actually existing packs on disk. Add new ones, and remove deleted ones. We keep the unchanged ones :param force: If True, the cache will be updated even though the directory diff --git a/gitdb/fun.py b/gitdb/fun.py index 98465975d..abb4277db 100644 --- a/gitdb/fun.py +++ b/gitdb/fun.py @@ -103,7 +103,7 @@ def delta_chunk_apply(dc, bbuf, write): write(bbuf[dc.so:dc.so + dc.ts]) else: # APPEND DATA - # whats faster: if + 4 function calls or just a write with a slice ? + # what's faster: if + 4 function calls or just a write with a slice ? # Considering data can be larger than 127 bytes now, it should be worth it if dc.ts < len(dc.data): write(dc.data[:dc.ts]) @@ -292,7 +292,7 @@ def check_integrity(self, target_size=-1): """Verify the list has non-overlapping chunks only, and the total size matches target_size :param target_size: if not -1, the total size of the chain must be target_size - :raise AssertionError: if the size doen't match""" + :raise AssertionError: if the size doesn't match""" if target_size > -1: assert self[-1].rbound() == target_size assert reduce(lambda x, y: x + y, (d.ts for d in self), 0) == target_size @@ -331,7 +331,7 @@ def connect_with_next_base(self, bdcl): cannot be changed by any of the upcoming bases anymore. Once all our chunks are marked like that, we can stop all processing :param bdcl: data chunk list being one of our bases. They must be fed in - consequtively and in order, towards the earliest ancestor delta + consecutively and in order, towards the earliest ancestor delta :return: True if processing was done. Use it to abort processing of remaining streams if False is returned""" nfc = 0 # number of frozen chunks @@ -624,7 +624,7 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write): :param src_buf: random access data from which the delta was created :param src_buf_size: size of the source buffer in bytes - :param delta_buf_size: size fo the delta buffer in bytes + :param delta_buf_size: size for the delta buffer in bytes :param delta_buf: random access delta data :param write: write method taking a chunk of bytes diff --git a/gitdb/pack.py b/gitdb/pack.py index a38468e37..0b26c121c 100644 --- a/gitdb/pack.py +++ b/gitdb/pack.py @@ -224,7 +224,7 @@ def write(self, pack_sha, write): if ofs > 0x7fffffff: tmplist.append(ofs) ofs = 0x80000000 + len(tmplist) - 1 - # END hande 64 bit offsets + # END handle 64 bit offsets sha_write(pack('>L', ofs & 0xffffffff)) # END for each offset @@ -506,7 +506,7 @@ class PackFile(LazyMixin): """A pack is a file written according to the Version 2 for git packs As we currently use memory maps, it could be assumed that the maximum size of - packs therefor is 32 bit on 32 bit systems. On 64 bit systems, this should be + packs therefore is 32 bit on 32 bit systems. On 64 bit systems, this should be fine though. **Note:** at some point, this might be implemented using streams as well, or diff --git a/gitdb/stream.py b/gitdb/stream.py index d58d1a63e..37380ad3e 100644 --- a/gitdb/stream.py +++ b/gitdb/stream.py @@ -289,7 +289,7 @@ def read(self, size=-1): # They are thorough, and I assume it is truly working. # Why is this logic as convoluted as it is ? Please look at the table in # https://github.com/gitpython-developers/gitdb/issues/19 to learn about the test-results. - # Bascially, on py2.6, you want to use branch 1, whereas on all other python version, the second branch + # Basically, on py2.6, you want to use branch 1, whereas on all other python version, the second branch # will be the one that works. # However, the zlib VERSIONs as well as the platform check is used to further match the entries in the # table in the github issue. This is it ... it was the only way I could make this work everywhere. diff --git a/gitdb/test/db/lib.py b/gitdb/test/db/lib.py index 3df326b68..b38f1d5e5 100644 --- a/gitdb/test/db/lib.py +++ b/gitdb/test/db/lib.py @@ -107,7 +107,7 @@ def _assert_object_writing(self, db): # DIRECT STREAM COPY # our data hase been written in object format to the StringIO - # we pasesd as output stream. No physical database representation + # we passed as output stream. No physical database representation # was created. # Test direct stream copy of object streams, the result must be # identical to what we fed in diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index 458d80434..ff96a58ac 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -80,7 +80,7 @@ def test_writing(self, path): # END for each sha to find # we should have at least one ambiguous, considering the small sizes - # but in our pack, there is no ambigious ... + # but in our pack, there is no ambiguous ... # assert num_ambiguous # non-existing diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index 48a185290..4b01741b2 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -101,7 +101,7 @@ def _assert_pack_file(self, pack, version, size): dstream = DeltaApplyReader.new(streams) except ValueError: # ignore these, old git versions use only ref deltas, - # which we havent resolved ( as we are without an index ) + # which we haven't resolved ( as we are without an index ) # Also ignore non-delta streams continue # END get deltastream diff --git a/gitdb/util.py b/gitdb/util.py index c4cafecc6..f9f8c0ed7 100644 --- a/gitdb/util.py +++ b/gitdb/util.py @@ -182,7 +182,7 @@ def file_contents_ro(fd, stream=False, allow_mmap=True): pass # END exception handling - # read manully + # read manually contents = os.read(fd, os.fstat(fd).st_size) if stream: return _RandomAccessBytesIO(contents) @@ -248,7 +248,7 @@ class LazyMixin(object): def __getattr__(self, attr): """ Whenever an attribute is requested that we do not know, we allow it - to be created and set. Next time the same attribute is reqeusted, it is simply + to be created and set. Next time the same attribute is requested, it is simply returned from our dict/slots. """ self._set_cache_(attr) # will raise in case the cache was not created @@ -332,7 +332,7 @@ def open(self, write=False, stream=False): # open actual file if required if self._fd is None: - # we could specify exlusive here, as we obtained the lock anyway + # we could specify exclusive here, as we obtained the lock anyway try: self._fd = os.open(self._filepath, os.O_RDONLY | binary) except: From d79d20d28b1f9324193309cffd2ab79e0edae925 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 7 Jan 2022 08:59:19 +0800 Subject: [PATCH 0879/2375] Avoid taking a lock for reading This isn't needed as git will replace this file atomicially, hence we always see a fully written file when reading. Only when writing we need to obtain a lock. --- git/ext/gitdb | 2 +- git/index/base.py | 17 ++--------------- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/git/ext/gitdb b/git/ext/gitdb index 03ab3a1d4..1c976835c 160000 --- a/git/ext/gitdb +++ b/git/ext/gitdb @@ -1 +1 @@ -Subproject commit 03ab3a1d40c04d6a944299c21db61cf9ce30f6bb +Subproject commit 1c976835c5d1779a28b9e11afd1656152db26a68 diff --git a/git/index/base.py b/git/index/base.py index 102703e6d..d1f039cd9 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -127,30 +127,17 @@ def __init__(self, repo: 'Repo', file_path: Union[PathLike, None] = None) -> Non def _set_cache_(self, attr: str) -> None: if attr == "entries": - # read the current index - # try memory map for speed - lfd = LockedFD(self._file_path) - ok = False try: - fd = lfd.open(write=False, stream=False) - ok = True + fd = os.open(self._file_path, os.O_RDONLY) except OSError: # in new repositories, there may be no index, which means we are empty self.entries: Dict[Tuple[PathLike, StageType], IndexEntry] = {} return None - finally: - if not ok: - lfd.rollback() # END exception handling stream = file_contents_ro(fd, stream=True, allow_mmap=True) - try: - self._deserialize(stream) - finally: - lfd.rollback() - # The handles will be closed on destruction - # END read from default index on demand + self._deserialize(stream) else: super(IndexFile, self)._set_cache_(attr) From da7b5b286a8fc75f2d2e9183bf1d13f9d8cdce49 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 7 Jan 2022 09:47:16 +0800 Subject: [PATCH 0880/2375] Ignore mypi errors With each patch level it may bring up new issues that cause CI failure for without being related to the actual change. --- .github/workflows/pythonpackage.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index dd1e9a07e..881f2ec57 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -50,6 +50,9 @@ jobs: flake8 - name: Check types with mypy + # With new versions of pypi new issues might arise. This is a problem if there is nobody able to fix them, + # so we have to ignore errors until that changes. + continue-on-error: true run: | set -x mypy -p git From 01f09888208341876d1480bd22dc8f4107c100f1 Mon Sep 17 00:00:00 2001 From: NHanser Date: Thu, 23 Dec 2021 12:51:32 +0100 Subject: [PATCH 0881/2375] Use NUL character to extract meta and path from git diff Use NUL character instead of semicolon to extract meta and path. Avoid errors in during git diff when dealing with filenames containing semicolons --- git/diff.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/git/diff.py b/git/diff.py index cea66d7ee..c8c57685b 100644 --- a/git/diff.py +++ b/git/diff.py @@ -509,9 +509,9 @@ def _index_from_patch_format(cls, repo: 'Repo', proc: Union['Popen', 'Git.AutoIn def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> None: lines = lines_bytes.decode(defenc) - for line in lines.split(':')[1:]: - meta, _, path = line.partition('\x00') - path = path.rstrip('\x00') + it = iter(lines.split('\x00')) + for meta, path in zip(it, it): + meta = meta[1:] a_blob_id: Optional[str] b_blob_id: Optional[str] old_mode, new_mode, a_blob_id, b_blob_id, _change_type = meta.split(None, 4) From cdf7ffc33fa05ba5afcb915a374c140c7658c839 Mon Sep 17 00:00:00 2001 From: Peter Kempter Date: Wed, 29 Sep 2021 12:08:30 +0200 Subject: [PATCH 0882/2375] Add failing unit test --- test/test_commit.py | 46 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/test/test_commit.py b/test/test_commit.py index 67dc7d732..5aeef2e6c 100644 --- a/test/test_commit.py +++ b/test/test_commit.py @@ -4,6 +4,7 @@ # # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php +import copy from datetime import datetime from io import BytesIO import re @@ -429,3 +430,48 @@ def test_datetimes(self): datetime(2009, 10, 8, 20, 22, 51, tzinfo=tzoffset(-7200))) self.assertEqual(commit.committed_datetime, datetime(2009, 10, 8, 18, 22, 51, tzinfo=utc), commit.committed_datetime) + + def test_trailers(self): + KEY_1 = "Hello" + VALUE_1 = "World" + KEY_2 = "Key" + VALUE_2 = "Value" + + # Check if KEY 1 & 2 with Value 1 & 2 is extracted from multiple msg variations + msgs = [] + msgs.append(f"Subject\n\n{KEY_1}: {VALUE_1}\n{KEY_2}: {VALUE_2}\n") + msgs.append(f"Subject\n \nSome body of a function\n \n{KEY_1}: {VALUE_1}\n{KEY_2}: {VALUE_2}\n") + msgs.append(f"Subject\n \nSome body of a function\n\nnon-key: non-value\n\n{KEY_1}: {VALUE_1}\n{KEY_2}: {VALUE_2}\n") + msgs.append(f"Subject\n \nSome multiline\n body of a function\n\nnon-key: non-value\n\n{KEY_1}: {VALUE_1}\n{KEY_2}: {VALUE_2}\n") + + for msg in msgs: + commit = self.rorepo.commit('master') + commit = copy.copy(commit) + commit.message = msg + assert KEY_1 in commit.trailers.keys() + assert KEY_2 in commit.trailers.keys() + assert commit.trailers[KEY_1] == VALUE_1 + assert commit.trailers[KEY_2] == VALUE_2 + + # Check that trailer stays empty for multiple msg combinations + msgs = [] + msgs.append(f"Subject\n") + msgs.append(f"Subject\n\nBody with some\nText\n") + msgs.append(f"Subject\n\nBody with\nText\n\nContinuation but\n doesn't contain colon\n") + msgs.append(f"Subject\n\nBody with\nText\n\nContinuation but\n only contains one :\n") + msgs.append(f"Subject\n\nBody with\nText\n\nKey: Value\nLine without colon\n") + msgs.append(f"Subject\n\nBody with\nText\n\nLine without colon\nKey: Value\n") + + for msg in msgs: + commit = self.rorepo.commit('master') + commit = copy.copy(commit) + commit.message = msg + assert len(commit.trailers.keys()) == 0 + + # check that only the last key value paragraph is evaluated + commit = self.rorepo.commit('master') + commit = copy.copy(commit) + commit.message = f"Subject\n\nMultiline\nBody\n\n{KEY_1}: {VALUE_1}\n\n{KEY_2}: {VALUE_2}\n" + assert KEY_1 not in commit.trailers.keys() + assert KEY_2 in commit.trailers.keys() + assert commit.trailers[KEY_2] == VALUE_2 From edbf76f98f8430d711115f2c754de88e268e9303 Mon Sep 17 00:00:00 2001 From: Peter Kempter Date: Wed, 29 Sep 2021 12:08:56 +0200 Subject: [PATCH 0883/2375] Add trailer as commit property With the command `git interpret-trailers` git provides a way to interact with trailer lines in the commit messages that look similar to RFC 822 e-mail headers (see: https://git-scm.com/docs/git-interpret-trailers). The new property returns those parsed trailer lines from the message as dictionary. --- git/objects/commit.py | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/git/objects/commit.py b/git/objects/commit.py index b36cd46d2..780461a0c 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -4,6 +4,7 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php import datetime +import re from subprocess import Popen from gitdb import IStream from git.util import ( @@ -39,7 +40,7 @@ # typing ------------------------------------------------------------------ -from typing import Any, IO, Iterator, List, Sequence, Tuple, Union, TYPE_CHECKING, cast +from typing import Any, IO, Iterator, List, Sequence, Tuple, Union, TYPE_CHECKING, cast, Dict from git.types import PathLike, Literal @@ -315,6 +316,44 @@ def stats(self) -> Stats: text = self.repo.git.diff(self.parents[0].hexsha, self.hexsha, '--', numstat=True) return Stats._list_from_string(self.repo, text) + @property + def trailers(self) -> Dict: + """Get the trailers of the message as dictionary + + Git messages can contain trailer information that are similar to RFC 822 + e-mail headers (see: https://git-scm.com/docs/git-interpret-trailers). + + The trailer is thereby the last paragraph (seperated by a empty line + from the subject/body). This trailer paragraph must contain a ``:`` as + seperator for key and value in every line. + + Valid message with trailer: + + .. code-block:: + + Subject line + + some body information + + another information + + key1: value1 + key2: value2 + + :return: Dictionary containing whitespace stripped trailer information + """ + d: Dict[str, str] = {} + match = re.search(r".+^\s*$\n([\w\n\s:]+?)\s*\Z", str(self.message), re.MULTILINE | re.DOTALL) + if match is None: + return d + last_paragraph = match.group(1) + if not all(':' in line for line in last_paragraph.split('\n')): + return d + for line in last_paragraph.split('\n'): + key, value = line.split(':', 1) + d[key.strip()] = value.strip() + return d + @ classmethod def _iter_from_process_or_stream(cls, repo: 'Repo', proc_or_stream: Union[Popen, IO]) -> Iterator['Commit']: """Parse out commit information into a list of Commit objects From cd8b9b2fd875b5040b1ca9f0c8f5acaffe70ab7f Mon Sep 17 00:00:00 2001 From: Ket3r Date: Thu, 30 Sep 2021 16:07:05 +0200 Subject: [PATCH 0884/2375] Use git interpret-trailers for trailers property The whitespace handling and trailer selection isn't very trivial or good documented. It therefore seemed easier and less error prone to just call git to parse the message for the trailers section and remove superfluos whitespaces. --- git/objects/commit.py | 43 ++++++++++++++++++++++++++----------------- test/test_commit.py | 4 ++-- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/git/objects/commit.py b/git/objects/commit.py index 780461a0c..bbd485da8 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -4,8 +4,7 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php import datetime -import re -from subprocess import Popen +from subprocess import Popen, PIPE from gitdb import IStream from git.util import ( hex_to_bin, @@ -14,6 +13,7 @@ finalize_process ) from git.diff import Diffable +from git.cmd import Git from .tree import Tree from . import base @@ -322,10 +322,10 @@ def trailers(self) -> Dict: Git messages can contain trailer information that are similar to RFC 822 e-mail headers (see: https://git-scm.com/docs/git-interpret-trailers). - - The trailer is thereby the last paragraph (seperated by a empty line - from the subject/body). This trailer paragraph must contain a ``:`` as - seperator for key and value in every line. + + This funcions calls ``git interpret-trailers --parse`` onto the message + to extract the trailer information. The key value pairs are stripped of + leading and trailing whitespaces before they get saved into a dictionary. Valid message with trailer: @@ -338,20 +338,29 @@ def trailers(self) -> Dict: another information key1: value1 - key2: value2 + key2 : value 2 with inner spaces + + dictionary will look like this: + .. code-block:: + + { + "key1": "value1", + "key2": "value 2 with inner spaces" + } :return: Dictionary containing whitespace stripped trailer information + """ - d: Dict[str, str] = {} - match = re.search(r".+^\s*$\n([\w\n\s:]+?)\s*\Z", str(self.message), re.MULTILINE | re.DOTALL) - if match is None: - return d - last_paragraph = match.group(1) - if not all(':' in line for line in last_paragraph.split('\n')): - return d - for line in last_paragraph.split('\n'): - key, value = line.split(':', 1) - d[key.strip()] = value.strip() + d = {} + cmd = ['git', 'interpret-trailers', '--parse'] + proc: Git.AutoInterrupt = self.repo.git.execute(cmd, as_process=True, istream=PIPE) # type: ignore + trailer: str = proc.communicate(str(self.message).encode())[0].decode() + if trailer.endswith('\n'): + trailer = trailer[0:-1] + if trailer != '': + for line in trailer.split('\n'): + key, value = line.split(':', 1) + d[key.strip()] = value.strip() return d @ classmethod diff --git a/test/test_commit.py b/test/test_commit.py index 5aeef2e6c..40cf7dd26 100644 --- a/test/test_commit.py +++ b/test/test_commit.py @@ -435,14 +435,14 @@ def test_trailers(self): KEY_1 = "Hello" VALUE_1 = "World" KEY_2 = "Key" - VALUE_2 = "Value" + VALUE_2 = "Value with inner spaces" # Check if KEY 1 & 2 with Value 1 & 2 is extracted from multiple msg variations msgs = [] msgs.append(f"Subject\n\n{KEY_1}: {VALUE_1}\n{KEY_2}: {VALUE_2}\n") msgs.append(f"Subject\n \nSome body of a function\n \n{KEY_1}: {VALUE_1}\n{KEY_2}: {VALUE_2}\n") msgs.append(f"Subject\n \nSome body of a function\n\nnon-key: non-value\n\n{KEY_1}: {VALUE_1}\n{KEY_2}: {VALUE_2}\n") - msgs.append(f"Subject\n \nSome multiline\n body of a function\n\nnon-key: non-value\n\n{KEY_1}: {VALUE_1}\n{KEY_2}: {VALUE_2}\n") + msgs.append(f"Subject\n \nSome multiline\n body of a function\n\nnon-key: non-value\n\n{KEY_1}: {VALUE_1}\n{KEY_2} : {VALUE_2}\n") for msg in msgs: commit = self.rorepo.commit('master') From 3ef81e182fcd3fca3f83216cf81d92d08c19cf5e Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 7 Jan 2022 09:57:33 +0800 Subject: [PATCH 0885/2375] Revert "Use NUL character to extract meta and path from git diff" This reverts commit 01f09888208341876d1480bd22dc8f4107c100f1. --- git/diff.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/git/diff.py b/git/diff.py index c8c57685b..cea66d7ee 100644 --- a/git/diff.py +++ b/git/diff.py @@ -509,9 +509,9 @@ def _index_from_patch_format(cls, repo: 'Repo', proc: Union['Popen', 'Git.AutoIn def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> None: lines = lines_bytes.decode(defenc) - it = iter(lines.split('\x00')) - for meta, path in zip(it, it): - meta = meta[1:] + for line in lines.split(':')[1:]: + meta, _, path = line.partition('\x00') + path = path.rstrip('\x00') a_blob_id: Optional[str] b_blob_id: Optional[str] old_mode, new_mode, a_blob_id, b_blob_id, _change_type = meta.split(None, 4) From b94cc253fe9e6355881eb299cfae8eea1a57a9c2 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 7 Jan 2022 10:08:16 +0800 Subject: [PATCH 0886/2375] prep version bump --- VERSION | 2 +- doc/source/changes.rst | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 05f5ca23b..199eda56a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.24 +3.1.25 diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 4186ac911..d955aebea 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,12 @@ Changelog ========= +3.1.25 +====== + +See the following for all changes. +https://github.com/gitpython-developers/gitpython/milestone/55?closed=1 + 3.1.24 ====== From 53d22bbc14ed871991ef169b59770a4c5b3caa19 Mon Sep 17 00:00:00 2001 From: Takuya Kitazawa Date: Sun, 9 Jan 2022 09:37:29 -0800 Subject: [PATCH 0887/2375] Fix doc string error in Objects.Commit --- git/objects/commit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/objects/commit.py b/git/objects/commit.py index bbd485da8..07355e7e6 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -99,8 +99,7 @@ def __init__(self, repo: 'Repo', binsha: bytes, tree: Union[Tree, None] = None, :param binsha: 20 byte sha1 :param parents: tuple( Commit, ... ) is a tuple of commit ids or actual Commits - :param tree: Tree - Tree object + :param tree: Tree object :param author: Actor is the author Actor object :param authored_date: int_seconds_since_epoch @@ -341,6 +340,7 @@ def trailers(self) -> Dict: key2 : value 2 with inner spaces dictionary will look like this: + .. code-block:: { From e16a0040d07afa4ac9c0548aa742ec18ec1395a8 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 10 Jan 2022 21:01:21 +0800 Subject: [PATCH 0888/2375] Assure index file descriptor is closed after reader (#1394) (#1395) A regression that was introduced with d79d20d. --- git/index/base.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/git/index/base.py b/git/index/base.py index d1f039cd9..7cb77f15b 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -135,7 +135,10 @@ def _set_cache_(self, attr: str) -> None: return None # END exception handling - stream = file_contents_ro(fd, stream=True, allow_mmap=True) + try: + stream = file_contents_ro(fd, stream=True, allow_mmap=True) + finally: + os.close(fd) self._deserialize(stream) else: From 851beabc93319d8dd05bff211b13d2b35ef097e0 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 10 Jan 2022 21:10:34 +0800 Subject: [PATCH 0889/2375] bump patch level --- VERSION | 2 +- doc/source/changes.rst | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 199eda56a..265be6386 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.25 +3.1.26 diff --git a/doc/source/changes.rst b/doc/source/changes.rst index d955aebea..82106ee4f 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -1,6 +1,16 @@ ========= Changelog -========= + +3.1.26 +====== + +- Fixes a leaked file descriptor when reading the index, which would cause make writing a previously + read index on windows impossible. + See https://github.com/gitpython-developers/GitPython/issues/1395 for details. + +See the following for all changes. +https://github.com/gitpython-developers/gitpython/milestone/56?closed=1 + 3.1.25 ====== From 35e302da2d9cfa8004414c2b325d194e7d77d9d9 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 10 Jan 2022 21:14:51 +0800 Subject: [PATCH 0890/2375] fix documentation --- doc/source/changes.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 82106ee4f..35fa4ced2 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -1,5 +1,6 @@ ========= Changelog +========= 3.1.26 ====== From e24f9b70209eb6681f055596846033f7d3215ea5 Mon Sep 17 00:00:00 2001 From: wonder-mice Date: Tue, 11 Jan 2022 00:41:03 -0800 Subject: [PATCH 0891/2375] import unittest adds 0.250s to script launch time This should not be imported at root level, since it adds a lot of initialization overhead without need. --- git/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/util.py b/git/util.py index b81332ea4..6e6f09557 100644 --- a/git/util.py +++ b/git/util.py @@ -20,7 +20,6 @@ import stat from sys import maxsize import time -from unittest import SkipTest from urllib.parse import urlsplit, urlunsplit import warnings @@ -130,6 +129,7 @@ def onerror(func: Callable, path: PathLike, exc_info: str) -> None: func(path) # Will scream if still not possible to delete. except Exception as ex: if HIDE_WINDOWS_KNOWN_ERRORS: + from unittest import SkipTest raise SkipTest("FIXME: fails with: PermissionError\n {}".format(ex)) from ex raise From 67d0631e54c44f4523d3b308040e6a0643b6396d Mon Sep 17 00:00:00 2001 From: wonder-mice Date: Tue, 11 Jan 2022 00:44:25 -0800 Subject: [PATCH 0892/2375] import unittest adds 0.250s to script launch time This should not be imported at root level, since it adds a lot of initialization overhead without need. --- git/objects/submodule/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index d306c91d4..f78204555 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -3,8 +3,6 @@ import logging import os import stat - -from unittest import SkipTest import uuid import git @@ -934,6 +932,7 @@ def remove(self, module: bool = True, force: bool = False, rmtree(str(wtd)) except Exception as ex: if HIDE_WINDOWS_KNOWN_ERRORS: + from unittest import SkipTest raise SkipTest("FIXME: fails with: PermissionError\n {}".format(ex)) from ex raise # END delete tree if possible @@ -945,6 +944,7 @@ def remove(self, module: bool = True, force: bool = False, rmtree(git_dir) except Exception as ex: if HIDE_WINDOWS_KNOWN_ERRORS: + from unittest import SkipTest raise SkipTest(f"FIXME: fails with: PermissionError\n {ex}") from ex else: raise From fac603789d66c0fd7c26e75debb41b06136c5026 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 12 Jan 2022 08:25:26 +0800 Subject: [PATCH 0893/2375] keep track of upcoming changes --- doc/source/changes.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 35fa4ced2..ced8f8584 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,14 @@ Changelog ========= +3.1.27 +====== + +- Reduced startup time due to optimized imports. + +See the following for all changes. +https://github.com/gitpython-developers/gitpython/milestone/57?closed=1 + 3.1.26 ====== From b719e1809c2c81283e930086faebd7d6050cd5d7 Mon Sep 17 00:00:00 2001 From: David Briscoe Date: Wed, 12 Jan 2022 23:39:10 -0800 Subject: [PATCH 0894/2375] Use bash to open extensionless hooks on windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix #971. Partly resolve #703. If the hook doesn't have a file extension, then Windows won't know how to run it and you'll get "[WinError 193] %1 is not a valid Win32 application". It's very likely that it's a shell script of some kind, so use bash.exe (commonly installed via Windows Subsystem for Linux). We don't want to run all hooks with bash because they could be .bat files. Update tests to get several hook ones working. More work necessary to get commit-msg hook working. The hook writes to the wrong file because it's not using forward slashes in the path: C:\Users\idbrii\AppData\Local\Temp\bare_test_commit_msg_hook_successy5fo00du\CUsersidbriiAppDataLocalTempbare_test_commit_msg_hook_successy5fo00duCOMMIT_EDITMSG --- git/index/fun.py | 15 ++++++++++++++- test/test_index.py | 9 ++++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/git/index/fun.py b/git/index/fun.py index 16ec744e2..59fa1be19 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -3,6 +3,7 @@ # NOTE: Autodoc hates it if this is a docstring from io import BytesIO +from pathlib import Path import os from stat import ( S_IFDIR, @@ -21,6 +22,7 @@ force_text, force_bytes, is_posix, + is_win, safe_decode, ) from git.exc import ( @@ -76,6 +78,10 @@ def hook_path(name: str, git_dir: PathLike) -> str: return osp.join(git_dir, 'hooks', name) +def _has_file_extension(path): + return osp.splitext(path)[1] + + def run_commit_hook(name: str, index: 'IndexFile', *args: str) -> None: """Run the commit hook of the given name. Silently ignores hooks that do not exist. :param name: name of hook, like 'pre-commit' @@ -89,8 +95,15 @@ def run_commit_hook(name: str, index: 'IndexFile', *args: str) -> None: env = os.environ.copy() env['GIT_INDEX_FILE'] = safe_decode(str(index.path)) env['GIT_EDITOR'] = ':' + cmd = [hp] try: - cmd = subprocess.Popen([hp] + list(args), + if is_win and not _has_file_extension(hp): + # Windows only uses extensions to determine how to open files + # (doesn't understand shebangs). Try using bash to run the hook. + relative_hp = Path(hp).relative_to(index.repo.working_dir).as_posix() + cmd = ["bash.exe", relative_hp] + + cmd = subprocess.Popen(cmd + list(args), env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, diff --git a/test/test_index.py b/test/test_index.py index 02cb4e813..233a4c643 100644 --- a/test/test_index.py +++ b/test/test_index.py @@ -13,6 +13,7 @@ ) import tempfile from unittest import skipIf +import shutil from git import ( IndexFile, @@ -52,8 +53,9 @@ HOOKS_SHEBANG = "#!/usr/bin/env sh\n" +is_win_without_bash = is_win and not shutil.which('bash.exe') + -@skipIf(HIDE_WINDOWS_KNOWN_ERRORS, "TODO: fix hooks execution on Windows: #703") def _make_hook(git_dir, name, content, make_exec=True): """A helper to create a hook""" hp = hook_path(name, git_dir) @@ -881,7 +883,7 @@ def test_pre_commit_hook_fail(self, rw_repo): try: index.commit("This should fail") except HookExecutionError as err: - if is_win: + if is_win_without_bash: self.assertIsInstance(err.status, OSError) self.assertEqual(err.command, [hp]) self.assertEqual(err.stdout, '') @@ -896,6 +898,7 @@ def test_pre_commit_hook_fail(self, rw_repo): else: raise AssertionError("Should have caught a HookExecutionError") + @skipIf(HIDE_WINDOWS_KNOWN_ERRORS, "TODO: fix hooks execution on Windows: #703") @with_rw_repo('HEAD', bare=True) def test_commit_msg_hook_success(self, rw_repo): commit_message = "commit default head by Frèderic Çaufl€" @@ -920,7 +923,7 @@ def test_commit_msg_hook_fail(self, rw_repo): try: index.commit("This should fail") except HookExecutionError as err: - if is_win: + if is_win_without_bash: self.assertIsInstance(err.status, OSError) self.assertEqual(err.command, [hp]) self.assertEqual(err.stdout, '') From 597d36c4ac84af6deb7cecf2a1e8b4ca4b7dccdf Mon Sep 17 00:00:00 2001 From: Kian-Meng Ang Date: Sat, 15 Jan 2022 23:28:12 +0800 Subject: [PATCH 0895/2375] Fix typos --- smmap/__init__.py | 2 +- smmap/buf.py | 2 +- smmap/mman.py | 10 +++++----- smmap/test/test_buf.py | 2 +- smmap/test/test_mman.py | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/smmap/__init__.py b/smmap/__init__.py index 696401c8c..6b1a44cb5 100644 --- a/smmap/__init__.py +++ b/smmap/__init__.py @@ -1,4 +1,4 @@ -"""Intialize the smmap package""" +"""Initialize the smmap package""" __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" diff --git a/smmap/buf.py b/smmap/buf.py index 795e0fd87..ad27b6974 100644 --- a/smmap/buf.py +++ b/smmap/buf.py @@ -21,7 +21,7 @@ class SlidingWindowMapBuffer: ) def __init__(self, cursor=None, offset=0, size=sys.maxsize, flags=0): - """Initalize the instance to operate on the given cursor. + """Initialize the instance to operate on the given cursor. :param cursor: if not None, the associated cursor to the file you want to access If None, you have call begin_access before using the buffer and provide a cursor :param offset: absolute offset in bytes diff --git a/smmap/mman.py b/smmap/mman.py index 1de7d9e97..873f687fd 100644 --- a/smmap/mman.py +++ b/smmap/mman.py @@ -27,7 +27,7 @@ class WindowCursor: that it must be suited for the somewhat quite different sliding manager. It could be improved, but I see no real need to do so.""" __slots__ = ( - '_manager', # the manger keeping all file regions + '_manager', # the manager keeping all file regions '_rlist', # a regions list with regions for our file '_region', # our current class:`MapRegion` or None '_ofs', # relative offset from the actually mapped area to our start area @@ -66,7 +66,7 @@ def _destroy(self): # sometimes, during shutdown, getrefcount is None. Its possible # to re-import it, however, its probably better to just ignore # this python problem (for now). - # The next step is to get rid of the error prone getrefcount alltogether. + # The next step is to get rid of the error prone getrefcount altogether. pass # END exception handling # END handle regions @@ -95,7 +95,7 @@ def __copy__(self): #{ Interface def assign(self, rhs): """Assign rhs to this instance. This is required in order to get a real copy. - Alternativly, you can copy an existing instance using the copy module""" + Alternatively, you can copy an existing instance using the copy module""" self._destroy() self._copy_from(rhs) @@ -342,7 +342,7 @@ def _collect_lru_region(self, size): return num_found def _obtain_region(self, a, offset, size, flags, is_recursive): - """Utilty to create a new region - for more information on the parameters, + """Utility to create a new region - for more information on the parameters, see MapCursor.use_region. :param a: A regions (a)rray :return: The newly created region""" @@ -427,7 +427,7 @@ def mapped_memory_size(self): return self._memory_size def max_file_handles(self): - """:return: maximium amount of handles we may have opened""" + """:return: maximum amount of handles we may have opened""" return self._max_handle_count def max_mapped_memory_size(self): diff --git a/smmap/test/test_buf.py b/smmap/test/test_buf.py index 17555afe4..f0a86fb64 100644 --- a/smmap/test/test_buf.py +++ b/smmap/test/test_buf.py @@ -30,7 +30,7 @@ def test_basics(self): self.assertRaises(ValueError, SlidingWindowMapBuffer, type(c)()) # invalid cursor self.assertRaises(ValueError, SlidingWindowMapBuffer, c, fc.size) # offset too large - buf = SlidingWindowMapBuffer() # can create uninitailized buffers + buf = SlidingWindowMapBuffer() # can create uninitialized buffers assert buf.cursor() is None # can call end access any time diff --git a/smmap/test/test_mman.py b/smmap/test/test_mman.py index d88316b8e..7a5f4092c 100644 --- a/smmap/test/test_mman.py +++ b/smmap/test/test_mman.py @@ -154,7 +154,7 @@ def test_memman_operation(self): if man.window_size(): assert man.num_file_handles() == 2 assert c.size() < size - assert c.region() is not rr # old region is still available, but has not curser ref anymore + assert c.region() is not rr # old region is still available, but has not cursor ref anymore assert rr.client_count() == 1 # only held by manager else: assert c.size() < fc.size @@ -194,7 +194,7 @@ def test_memman_operation(self): # precondition if man.window_size(): assert max_mapped_memory_size >= mapped_memory_size() - # END statics will overshoot, which is fine + # END statistics will overshoot, which is fine assert max_file_handles >= num_file_handles() assert c.use_region(base_offset, (size or c.size())).is_valid() csize = c.size() @@ -205,7 +205,7 @@ def test_memman_operation(self): assert includes_ofs(base_offset + csize - 1) assert not includes_ofs(base_offset + csize) # END while we should do an access - elapsed = max(time() - st, 0.001) # prevent zero divison errors on windows + elapsed = max(time() - st, 0.001) # prevent zero division errors on windows mb = float(1000 * 1000) print("%s: Read %i mb of memory with %i random on cursor initialized with %s accesses in %fs (%f mb/s)\n" % (mtype, memory_read / mb, max_random_accesses, type(item), elapsed, (memory_read / mb) / elapsed), From b3f873a1458223c075fdde6c85eb656648bcdcae Mon Sep 17 00:00:00 2001 From: smokephil Date: Fri, 21 Jan 2022 09:43:40 +0100 Subject: [PATCH 0896/2375] set unassigned stdin to improve pyinstaller compatibility To create a window application with pyinstaller, all suprocess input and output streams must be assigned and must not be None. https://stackoverflow.com/a/51706087/7076612 --- git/cmd.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index 8fb10742f..4f0569879 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -12,7 +12,8 @@ from subprocess import ( call, Popen, - PIPE + PIPE, + DEVNULL ) import subprocess import threading @@ -873,7 +874,7 @@ def execute(self, env=env, cwd=cwd, bufsize=-1, - stdin=istream, + stdin=istream or DEVNULL, stderr=PIPE, stdout=stdout_sink, shell=shell is not None and shell or self.USE_SHELL, From cd29f07b2efda24bdc690626ed557590289d11a6 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 3 Feb 2022 15:34:10 +0800 Subject: [PATCH 0897/2375] Let index.commit refer to correct method for parameter information (#1407) --- git/index/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/index/base.py b/git/index/base.py index 7cb77f15b..209bfa8de 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -974,7 +974,7 @@ def commit(self, commit_date: Union[str, None] = None, skip_hooks: bool = False) -> Commit: """Commit the current default index file, creating a commit object. - For more information on the arguments, see tree.commit. + For more information on the arguments, see Commit.create_from_tree(). :note: If you have manually altered the .entries member of this instance, don't forget to write() your changes to disk beforehand. From e3a4cfe0ef2bc7b9c785c4fec650f5045cdd1e50 Mon Sep 17 00:00:00 2001 From: Carl George Date: Wed, 9 Feb 2022 17:15:39 -0600 Subject: [PATCH 0898/2375] Switch from nose to pytest This is not a full rewrite to pytest style tests, it just changes the minimum to allow pytest to run the existing tests. Resolves #72 --- .github/workflows/pythonpackage.yml | 6 +++--- Makefile | 3 +-- README.rst | 4 ++-- gitdb.pro.user | 3 +-- gitdb/test/db/test_pack.py | 4 ++-- gitdb/test/lib.py | 4 ++-- gitdb/test/test_pack.py | 4 ++-- 7 files changed, 13 insertions(+), 15 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 7f35b616e..c695ad302 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -36,9 +36,9 @@ jobs: flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with nose + - name: Test with pytest run: | - pip install nose + pip install pytest ulimit -n 48 ulimit -n - nosetests -v + pytest -v diff --git a/Makefile b/Makefile index 82907561b..e0630283d 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,5 @@ PYTHON = python SETUP = $(PYTHON) setup.py -TESTRUNNER = $(shell which nosetests) TESTFLAGS = all:: @@ -37,5 +36,5 @@ clean:: rm -f *.so coverage:: build - PYTHONPATH=. $(PYTHON) $(TESTRUNNER) --cover-package=gitdb --with-coverage --cover-erase --cover-inclusive gitdb + PYTHONPATH=. $(PYTHON) -m pytest --cov=gitdb gitdb diff --git a/README.rst b/README.rst index 44b3eddf8..29c70f781 100644 --- a/README.rst +++ b/README.rst @@ -30,7 +30,7 @@ If you want to go up to 20% faster, you can install gitdb-speedups with: REQUIREMENTS ============ -* Python Nose - for running the tests +* pytest - for running the tests SOURCE ====== @@ -45,7 +45,7 @@ Once the clone is complete, please be sure to initialize the submodules using Run the tests with - nosetests + pytest DEVELOPMENT =========== diff --git a/gitdb.pro.user b/gitdb.pro.user index 398cb70a1..3ca1e2182 100644 --- a/gitdb.pro.user +++ b/gitdb.pro.user @@ -233,8 +233,7 @@ - /usr/bin/nosetests - -s + /usr/bin/pytest gitdb/test/test_pack.py 2 diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py index ff96a58ac..4539f4278 100644 --- a/gitdb/test/db/test_pack.py +++ b/gitdb/test/db/test_pack.py @@ -16,7 +16,7 @@ import random import sys -from nose.plugins.skip import SkipTest +import pytest class TestPackDB(TestDBBase): @@ -24,7 +24,7 @@ class TestPackDB(TestDBBase): @with_packs_rw def test_writing(self, path): if sys.platform == "win32": - raise SkipTest("FIXME: Currently fail on windows") + pytest.skip("FIXME: Currently fail on windows") pdb = PackedDB(path) diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py index a04084f5f..abd4ad57d 100644 --- a/gitdb/test/lib.py +++ b/gitdb/test/lib.py @@ -65,8 +65,8 @@ def skip_on_travis_ci(func): @wraps(func) def wrapper(self, *args, **kwargs): if 'TRAVIS' in os.environ: - import nose - raise nose.SkipTest("Cannot run on travis-ci") + import pytest + pytest.skip("Cannot run on travis-ci") # end check for travis ci return func(self, *args, **kwargs) # end wrapper diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py index 4b01741b2..f9461975b 100644 --- a/gitdb/test/test_pack.py +++ b/gitdb/test/test_pack.py @@ -26,7 +26,7 @@ from gitdb.exc import UnsupportedOperation from gitdb.util import to_bin_sha -from nose import SkipTest +import pytest import os import tempfile @@ -246,4 +246,4 @@ def rewind_streams(): def test_pack_64(self): # TODO: hex-edit a pack helping us to verify that we can handle 64 byte offsets # of course without really needing such a huge pack - raise SkipTest() + pytest.skip('not implemented') From d0b48f3f4888d69a7b59024114bff897f24561b2 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 12 Feb 2022 11:55:57 +0800 Subject: [PATCH 0899/2375] Create SECURITY.md --- SECURITY.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..cf25c09ea --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,16 @@ +# Security Policy + +## Supported Versions + +Only the latest version of GitPython can receive security updates. If a vulnerability is discovered, a fix can be issued in a new release, while older releases +are likely to be yanked. + +| Version | Supported | +| ------- | ------------------ | +| 3.x.x | :white_check_mark: | +| < 3.0 | :x: | + +## Reporting a Vulnerability + +Please report private portions of a vulnerability to sebastian.thiel@icloud.com that would help to reproduce and fix it. To receive updates on progress and provide +general information to the public, you can create an issue [on the issue tracker](https://github.com/gitpython-developers/GitPython/issues). From 75f4f63ab3856a552f06082aabf98845b5fa21e3 Mon Sep 17 00:00:00 2001 From: theworstcomrade <4lbercik@gmail.com> Date: Fri, 18 Feb 2022 16:28:03 +0100 Subject: [PATCH 0900/2375] Low risk ReDoS vuln https://huntr.dev/bounties/8549d81f-dc45-4af7-9f2a-2d70752d8524/ --- git/remote.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/remote.py b/git/remote.py index 7d5918a5a..56f3c5b33 100644 --- a/git/remote.py +++ b/git/remote.py @@ -273,7 +273,7 @@ class FetchInfo(IterableObj, object): NEW_TAG, NEW_HEAD, HEAD_UPTODATE, TAG_UPDATE, REJECTED, FORCED_UPDATE, \ FAST_FORWARD, ERROR = [1 << x for x in range(8)] - _re_fetch_result = re.compile(r'^\s*(.) (\[?[\w\s\.$@]+\]?)\s+(.+) -> ([^\s]+)( \(.*\)?$)?') + _re_fetch_result = re.compile(r'^\s*(.) (\[[\w\s\.$@]+\]|[\w\.$@]+)\s+(.+) -> ([^\s]+)( \(.*\)?$)?') _flag_map: Dict[flagKeyLiteral, int] = { '!': ERROR, From 65346820b81e0de7f32369ba5773004df082b793 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 20 Feb 2022 09:12:39 +0800 Subject: [PATCH 0901/2375] update changelog --- doc/source/changes.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index ced8f8584..f9717438d 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,15 @@ Changelog ========= +3.1.28 +====== + +- Fix a vulenerability that could cause great slowdowns when encountering long remote path names + when pulling/fetching. + +See the following for all changes. +https://github.com/gitpython-developers/gitpython/milestone/58?closed=1 + 3.1.27 ====== From d438e088278f2df10b3c38bd635d7207cb7548a6 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 20 Feb 2022 09:14:20 +0800 Subject: [PATCH 0902/2375] bump patch level --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 265be6386..054a6481f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.26 +3.1.27 From 02b594ecdb3ba36e8477e2ff1dcb065c8626ca3d Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 20 Feb 2022 22:01:27 +0800 Subject: [PATCH 0903/2375] fix changelog --- doc/source/changes.rst | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index f9717438d..3f22a4866 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,19 +2,12 @@ Changelog ========= -3.1.28 -====== - -- Fix a vulenerability that could cause great slowdowns when encountering long remote path names - when pulling/fetching. - -See the following for all changes. -https://github.com/gitpython-developers/gitpython/milestone/58?closed=1 - 3.1.27 ====== - Reduced startup time due to optimized imports. +- Fix a vulenerability that could cause great slowdowns when encountering long remote path names + when pulling/fetching. See the following for all changes. https://github.com/gitpython-developers/gitpython/milestone/57?closed=1 From c0f2cf373e8296d07b3a7d7610add0cf3d5957be Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 21 Feb 2022 10:42:25 +0800 Subject: [PATCH 0904/2375] Deprecate GPG signature docs; stop signing releases Related to https://github.com/gitpython-developers/gitdb/issues/77 --- Makefile | 2 +- README.md | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index fe82a694b..9054de2b8 100644 --- a/Makefile +++ b/Makefile @@ -17,4 +17,4 @@ release: clean force_release: clean git push --tags origin main python3 setup.py sdist bdist_wheel - twine upload -s -i 27C50E7F590947D7273A741E85194C08421980C9 dist/* \ No newline at end of file + twine upload 27C50E7F590947D7273A741E85194C08421980C9 dist/* \ No newline at end of file diff --git a/README.md b/README.md index dd449d32f..54a735e53 100644 --- a/README.md +++ b/README.md @@ -149,7 +149,12 @@ Please have a look at the [contributions file][contributing]. incrementing the patch level, and possibly by appending `-dev`. Probably you want to `git push` once more. -### How to verify a release +### How to verify a release (DEPRECATED) + +Note that what follows is deprecated and future releases won't be signed anymore. +More details about how it came to that can be found [in this issue](https://github.com/gitpython-developers/gitdb/issues/77). + +---- Please only use releases from `pypi` as you can verify the respective source tarballs. From 7c67010acf541b4269825cb2c13e226fe2d65ea9 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 24 Oct 2021 21:38:51 +0800 Subject: [PATCH 0905/2375] bump patch level in the hopes for a valid sig on release https://github.com/gitpython-developers/gitdb/issues/77 --- doc/source/changes.rst | 6 ++++++ gitdb/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index de448dd4e..5ef1326d0 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -2,6 +2,12 @@ Changelog ######### +***** +4.0.9 +***** + +- re-release of 4.0.8 to get a valid signature. + ***** 4.0.8 ***** diff --git a/gitdb/__init__.py b/gitdb/__init__.py index b5d1939dc..246014554 100644 --- a/gitdb/__init__.py +++ b/gitdb/__init__.py @@ -30,7 +30,7 @@ def _init_externals(): __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 8) +version_info = (4, 0, 9) __version__ = '.'.join(str(i) for i in version_info) diff --git a/setup.py b/setup.py index 251ea93ba..31dc62f47 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ __author__ = "Sebastian Thiel" __contact__ = "byronimo@gmail.com" __homepage__ = "https://github.com/gitpython-developers/gitdb" -version_info = (4, 0, 8) +version_info = (4, 0, 9) __version__ = '.'.join(str(i) for i in version_info) setup( From 4762d99d978586fcdf08ade552f4712bfde6ef22 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 21 Feb 2022 10:43:54 +0800 Subject: [PATCH 0906/2375] Stop signing releases (#77) The key stopped producing correct signatures when upgrading MacOS, at least when used by `twine`. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e0630283d..a7acbb10e 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ release:: clean force_release:: clean git push --tags python3 setup.py sdist bdist_wheel - twine upload -s -i 27C50E7F590947D7273A741E85194C08421980C9 dist/* + twine upload dist/* doc:: make -C doc/ html From 334ef84a05c953ed5dbec7b9c6d4310879eeab5a Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 21 Feb 2022 10:45:33 +0800 Subject: [PATCH 0907/2375] Stop signing releases Related to https://github.com/gitpython-developers/gitdb/issues/77 --- Makefile | 2 +- smmap/util.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 9145cabb0..051e99ba0 100644 --- a/Makefile +++ b/Makefile @@ -46,4 +46,4 @@ release: clean force_release:: clean git push --tags python3 setup.py sdist bdist_wheel - twine upload -s -i 27C50E7F590947D7273A741E85194C08421980C9 dist/* + twine upload dist/* diff --git a/smmap/util.py b/smmap/util.py index cf027afdc..fbb387211 100644 --- a/smmap/util.py +++ b/smmap/util.py @@ -71,7 +71,7 @@ def extend_left_to(self, window, max_size): rofs = self.ofs - window.ofs_end() nsize = rofs + self.size rofs -= nsize - min(nsize, max_size) - self.ofs = self.ofs - rofs + self.ofs -= rofs self.size += rofs def extend_right_to(self, window, max_size): From 56f18ac6d9efc12d0aa9406a0b28c82fcf73aca5 Mon Sep 17 00:00:00 2001 From: Houssam Kherraz Date: Wed, 23 Feb 2022 10:20:19 -0500 Subject: [PATCH 0908/2375] fix iter_commits comment, more in line with iter_items --- git/repo/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/repo/base.py b/git/repo/base.py index 7713c9152..510eb12bf 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -567,8 +567,8 @@ def iter_commits(self, rev: Union[str, Commit, 'SymbolicReference', None] = None If None, the active branch will be used. :param paths: - is an optional path or a list of paths to limit the returned commits to - Commits that do not contain that path or the paths will not be returned. + is an optional path or a list of paths; if set only commits that include the path + or paths will be returned :param kwargs: Arguments to be passed to git-rev-list - common ones are From c0740570b31f0f0fe499bf4fc5abbf89feb1757d Mon Sep 17 00:00:00 2001 From: Jerry Jones Date: Wed, 23 Feb 2022 17:03:30 -0500 Subject: [PATCH 0909/2375] fix typos --- doc/source/tutorial.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/source/tutorial.rst b/doc/source/tutorial.rst index bc386e7c4..fcbc18bff 100644 --- a/doc/source/tutorial.rst +++ b/doc/source/tutorial.rst @@ -66,7 +66,7 @@ Archive the repository contents to a tar file. Advanced Repo Usage =================== -And of course, there is much more you can do with this type, most of the following will be explained in greater detail in specific tutorials. Don't worry if you don't understand some of these examples right away, as they may require a thorough understanding of gits inner workings. +And of course, there is much more you can do with this type, most of the following will be explained in greater detail in specific tutorials. Don't worry if you don't understand some of these examples right away, as they may require a thorough understanding of git's inner workings. Query relevant repository paths ... @@ -363,7 +363,7 @@ Handling Remotes :start-after: # [25-test_references_and_objects] :end-before: # ![25-test_references_and_objects] -You can easily access configuration information for a remote by accessing options as if they where attributes. The modification of remote configuration is more explicit though. +You can easily access configuration information for a remote by accessing options as if they were attributes. The modification of remote configuration is more explicit though. .. literalinclude:: ../../test/test_docs.py :language: python @@ -391,7 +391,7 @@ Here's an example executable that can be used in place of the `ssh_executable` a ID_RSA=/var/lib/openshift/5562b947ecdd5ce939000038/app-deployments/id_rsa exec /usr/bin/ssh -o StrictHostKeyChecking=no -i $ID_RSA "$@" -Please note that the script must be executable (i.e. `chomd +x script.sh`). `StrictHostKeyChecking=no` is used to avoid prompts asking to save the hosts key to `~/.ssh/known_hosts`, which happens in case you run this as daemon. +Please note that the script must be executable (i.e. `chmod +x script.sh`). `StrictHostKeyChecking=no` is used to avoid prompts asking to save the hosts key to `~/.ssh/known_hosts`, which happens in case you run this as daemon. You might also have a look at `Git.update_environment(...)` in case you want to setup a changed environment more permanently. @@ -509,14 +509,14 @@ The type of the database determines certain performance characteristics, such as GitDB ===== -The GitDB is a pure-python implementation of the git object database. It is the default database to use in GitPython 0.3. Its uses less memory when handling huge files, but will be 2 to 5 times slower when extracting large quantities small of objects from densely packed repositories:: +The GitDB is a pure-python implementation of the git object database. It is the default database to use in GitPython 0.3. It uses less memory when handling huge files, but will be 2 to 5 times slower when extracting large quantities of small objects from densely packed repositories:: repo = Repo("path/to/repo", odbt=GitDB) GitCmdObjectDB ============== -The git command database uses persistent git-cat-file instances to read repository information. These operate very fast under all conditions, but will consume additional memory for the process itself. When extracting large files, memory usage will be much higher than the one of the ``GitDB``:: +The git command database uses persistent git-cat-file instances to read repository information. These operate very fast under all conditions, but will consume additional memory for the process itself. When extracting large files, memory usage will be much higher than ``GitDB``:: repo = Repo("path/to/repo", odbt=GitCmdObjectDB) From 2ce0e3175bcbbf397d25f18b1008d1fdf54611f2 Mon Sep 17 00:00:00 2001 From: randymcmillan Date: Tue, 15 Mar 2022 17:51:07 -0400 Subject: [PATCH 0910/2375] .gitmodules: update smmap url Github.com is currenly redirecting the smmap url: https://github.com/Byron/smmap.git to: https://github.com/gitpython-developers/smmap For correctness we update to the url directly --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index d85b15c9f..e73cdedab 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "smmap"] path = gitdb/ext/smmap - url = https://github.com/Byron/smmap.git + url = https://github.com/gitpython-developers/smmap.git From b85c2594f31179e135af893d82868e7742464fe6 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinin Date: Mon, 21 Mar 2022 19:19:32 +0300 Subject: [PATCH 0911/2375] Fixed setting ref with non-ascii in path --- git/refs/symbolic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 0c0fa4045..1c5506737 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -352,7 +352,7 @@ def set_reference(self, ref: Union[Commit_ish, 'SymbolicReference', str], fd = lfd.open(write=True, stream=True) ok = True try: - fd.write(write_value.encode('ascii') + b'\n') + fd.write(write_value.encode('utf-8') + b'\n') lfd.commit() ok = True finally: From 0b33576f8e7add5671f8927dff228e7f92eec076 Mon Sep 17 00:00:00 2001 From: David Robertson Date: Fri, 1 Apr 2022 15:28:02 +0100 Subject: [PATCH 0912/2375] Allow `repo.create_head`'s `commit` arg to be a `SymbolicReference` This matches the signature from `Head.create`. --- git/repo/base.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/git/repo/base.py b/git/repo/base.py index 510eb12bf..f8bc8128e 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -420,7 +420,8 @@ def _to_full_tag_path(path: PathLike) -> str: else: return TagReference._common_path_default + '/' + path_str - def create_head(self, path: PathLike, commit: str = 'HEAD', + def create_head(self, path: PathLike, + commit: Union['SymbolicReference', 'str'] = 'HEAD', force: bool = False, logmsg: Optional[str] = None ) -> 'Head': """Create a new head within the repository. From e4360aea32aad11bf3c54b0dc0a6cabb21b5e687 Mon Sep 17 00:00:00 2001 From: Hiroki Tokunaga Date: Wed, 6 Apr 2022 23:08:36 +0900 Subject: [PATCH 0913/2375] feat(cmd): add the `strip_newline` flag This commit adds the `strip_newline` flag to the `Git.execute` method. When this flag is set to `True`, it will trim the trailing `\n`. The default value is `True` for backward compatibility. Setting it to `False` is helpful for, e.g., the `git show` output, especially with the binary file, as the missing `\n` may invalidate the file. --- git/cmd.py | 7 +++++-- test/test_repo.py | 10 ++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index 4f0569879..9c5da89dc 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -55,7 +55,7 @@ execute_kwargs = {'istream', 'with_extended_output', 'with_exceptions', 'as_process', 'stdout_as_string', 'output_stream', 'with_stdout', 'kill_after_timeout', - 'universal_newlines', 'shell', 'env', 'max_chunk_size'} + 'universal_newlines', 'shell', 'env', 'max_chunk_size', 'strip_newline'} log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) @@ -738,6 +738,7 @@ def execute(self, shell: Union[None, bool] = None, env: Union[None, Mapping[str, str]] = None, max_chunk_size: int = io.DEFAULT_BUFFER_SIZE, + strip_newline: bool = True, **subprocess_kwargs: Any ) -> Union[str, bytes, Tuple[int, Union[str, bytes], str], AutoInterrupt]: """Handles executing the command on the shell and consumes and returns @@ -810,6 +811,8 @@ def execute(self, effects on a repository. For example, stale locks in case of git gc could render the repository incapable of accepting changes until the lock is manually removed. + :param strip_newline: + Whether to strip the trailing '\n' of the command output. :return: * str(output) if extended_output = False (Default) @@ -944,7 +947,7 @@ def _kill_process(pid: int) -> None: if not universal_newlines: stderr_value = stderr_value.encode(defenc) # strip trailing "\n" - if stdout_value.endswith(newline): # type: ignore + if stdout_value.endswith(newline) and strip_newline: # type: ignore stdout_value = stdout_value[:-1] if stderr_value.endswith(newline): # type: ignore stderr_value = stderr_value[:-1] diff --git a/test/test_repo.py b/test/test_repo.py index 6d6176090..14339f57f 100644 --- a/test/test_repo.py +++ b/test/test_repo.py @@ -1098,3 +1098,13 @@ def test_rebasing(self, rw_dir): except GitCommandError: pass self.assertEqual(r.currently_rebasing_on(), commitSpanish) + + @with_rw_directory + def test_do_not_strip_newline(self, rw_dir): + r = Repo.init(rw_dir) + fp = osp.join(rw_dir, 'hello.txt') + with open(fp, 'w') as fs: + fs.write("hello\n") + r.git.add(Git.polish_url(fp)) + r.git.commit(message="init") + self.assertEqual(r.git.show("HEAD:hello.txt", strip_newline=False), 'hello\n') From 946b64b62bdc9fb3447b6daf0053b11a2e4c5277 Mon Sep 17 00:00:00 2001 From: Hiroki Tokunaga Date: Wed, 6 Apr 2022 23:23:42 +0900 Subject: [PATCH 0914/2375] chore: add me to AUTHORS --- AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS b/AUTHORS index 55d681813..546818f5f 100644 --- a/AUTHORS +++ b/AUTHORS @@ -45,4 +45,5 @@ Contributors are: -Alba Mendez -Robert Westman -Hugo van Kemenade +-Hiroki Tokunaga Portions derived from other open source works and are clearly marked. From 49150e79c6f7a19a0d61a5ea6864b9ac140264ff Mon Sep 17 00:00:00 2001 From: Hiroki Tokunaga Date: Thu, 7 Apr 2022 10:04:19 +0900 Subject: [PATCH 0915/2375] chore: `s/strip_newline/&_in_stdout` --- git/cmd.py | 10 +++++----- test/test_repo.py | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index 9c5da89dc..228b9d382 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -55,7 +55,7 @@ execute_kwargs = {'istream', 'with_extended_output', 'with_exceptions', 'as_process', 'stdout_as_string', 'output_stream', 'with_stdout', 'kill_after_timeout', - 'universal_newlines', 'shell', 'env', 'max_chunk_size', 'strip_newline'} + 'universal_newlines', 'shell', 'env', 'max_chunk_size', 'strip_newline_in_stdout'} log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) @@ -738,7 +738,7 @@ def execute(self, shell: Union[None, bool] = None, env: Union[None, Mapping[str, str]] = None, max_chunk_size: int = io.DEFAULT_BUFFER_SIZE, - strip_newline: bool = True, + strip_newline_in_stdout: bool = True, **subprocess_kwargs: Any ) -> Union[str, bytes, Tuple[int, Union[str, bytes], str], AutoInterrupt]: """Handles executing the command on the shell and consumes and returns @@ -811,8 +811,8 @@ def execute(self, effects on a repository. For example, stale locks in case of git gc could render the repository incapable of accepting changes until the lock is manually removed. - :param strip_newline: - Whether to strip the trailing '\n' of the command output. + :param strip_newline_in_stdout: + Whether to strip the trailing '\n' of the command stdout. :return: * str(output) if extended_output = False (Default) @@ -947,7 +947,7 @@ def _kill_process(pid: int) -> None: if not universal_newlines: stderr_value = stderr_value.encode(defenc) # strip trailing "\n" - if stdout_value.endswith(newline) and strip_newline: # type: ignore + if stdout_value.endswith(newline) and strip_newline_in_stdout: # type: ignore stdout_value = stdout_value[:-1] if stderr_value.endswith(newline): # type: ignore stderr_value = stderr_value[:-1] diff --git a/test/test_repo.py b/test/test_repo.py index 14339f57f..c5b2680d0 100644 --- a/test/test_repo.py +++ b/test/test_repo.py @@ -1100,11 +1100,11 @@ def test_rebasing(self, rw_dir): self.assertEqual(r.currently_rebasing_on(), commitSpanish) @with_rw_directory - def test_do_not_strip_newline(self, rw_dir): + def test_do_not_strip_newline_in_stdout(self, rw_dir): r = Repo.init(rw_dir) fp = osp.join(rw_dir, 'hello.txt') with open(fp, 'w') as fs: fs.write("hello\n") r.git.add(Git.polish_url(fp)) r.git.commit(message="init") - self.assertEqual(r.git.show("HEAD:hello.txt", strip_newline=False), 'hello\n') + self.assertEqual(r.git.show("HEAD:hello.txt", strip_newline_in_stdout=False), 'hello\n') From 2a50f28fa3571e3d2c4d5ea86f4243f715717269 Mon Sep 17 00:00:00 2001 From: Hiroki Tokunaga Date: Thu, 7 Apr 2022 10:11:28 +0900 Subject: [PATCH 0916/2375] docs: escape with backticks --- git/cmd.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/cmd.py b/git/cmd.py index 228b9d382..fe161309b 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -812,7 +812,7 @@ def execute(self, render the repository incapable of accepting changes until the lock is manually removed. :param strip_newline_in_stdout: - Whether to strip the trailing '\n' of the command stdout. + Whether to strip the trailing `\n` of the command stdout. :return: * str(output) if extended_output = False (Default) From 17b2b128fb6d6f987b47d60ccb1ab09b8fc238ea Mon Sep 17 00:00:00 2001 From: Hiroki Tokunaga Date: Thu, 7 Apr 2022 10:20:59 +0900 Subject: [PATCH 0917/2375] fix(docs): remove an unexpected blank line --- git/cmd.py | 1 - 1 file changed, 1 deletion(-) diff --git a/git/cmd.py b/git/cmd.py index fe161309b..1ddf9e03f 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -813,7 +813,6 @@ def execute(self, removed. :param strip_newline_in_stdout: Whether to strip the trailing `\n` of the command stdout. - :return: * str(output) if extended_output = False (Default) * tuple(int(status), str(stdout), str(stderr)) if extended_output = True From 85fe2735b7c9119804813bcbbdd8d14018291ed3 Mon Sep 17 00:00:00 2001 From: Glenn Matthews Date: Wed, 4 May 2022 12:48:09 -0400 Subject: [PATCH 0918/2375] Fix #1284: strip usernames from URLs as well as passwords --- git/exc.py | 7 ++++--- git/util.py | 20 +++++++++++++------- test/test_exc.py | 9 ++++++--- test/test_util.py | 30 +++++++++++++++++++++++------- 4 files changed, 46 insertions(+), 20 deletions(-) diff --git a/git/exc.py b/git/exc.py index e8ff784c7..045ea9d27 100644 --- a/git/exc.py +++ b/git/exc.py @@ -8,6 +8,7 @@ from gitdb.exc import BadName # NOQA @UnusedWildImport skipcq: PYL-W0401, PYL-W0614 from gitdb.exc import * # NOQA @UnusedWildImport skipcq: PYL-W0401, PYL-W0614 from git.compat import safe_decode +from git.util import remove_password_if_present # typing ---------------------------------------------------- @@ -54,7 +55,7 @@ def __init__(self, command: Union[List[str], Tuple[str, ...], str], stdout: Union[bytes, str, None] = None) -> None: if not isinstance(command, (tuple, list)): command = command.split() - self.command = command + self.command = remove_password_if_present(command) self.status = status if status: if isinstance(status, Exception): @@ -66,8 +67,8 @@ def __init__(self, command: Union[List[str], Tuple[str, ...], str], s = safe_decode(str(status)) status = "'%s'" % s if isinstance(status, str) else s - self._cmd = safe_decode(command[0]) - self._cmdline = ' '.join(safe_decode(i) for i in command) + self._cmd = safe_decode(self.command[0]) + self._cmdline = ' '.join(safe_decode(i) for i in self.command) self._cause = status and " due to: %s" % status or "!" stdout_decode = safe_decode(stdout) stderr_decode = safe_decode(stderr) diff --git a/git/util.py b/git/util.py index 6e6f09557..0711265a6 100644 --- a/git/util.py +++ b/git/util.py @@ -5,7 +5,6 @@ # the BSD License: http://www.opensource.org/licenses/bsd-license.php from abc import abstractmethod -from .exc import InvalidGitRepositoryError import os.path as osp from .compat import is_win import contextlib @@ -94,6 +93,8 @@ def unbare_repo(func: Callable[..., T]) -> Callable[..., T]: """Methods with this decorator raise InvalidGitRepositoryError if they encounter a bare repository""" + from .exc import InvalidGitRepositoryError + @wraps(func) def wrapper(self: 'Remote', *args: Any, **kwargs: Any) -> T: if self.repo.bare: @@ -412,11 +413,12 @@ def expand_path(p: Union[None, PathLike], expand_vars: bool = True) -> Optional[ def remove_password_if_present(cmdline: Sequence[str]) -> List[str]: """ Parse any command line argument and if on of the element is an URL with a - password, replace it by stars (in-place). + username and/or password, replace them by stars (in-place). If nothing found just returns the command line as-is. - This should be used for every log line that print a command line. + This should be used for every log line that print a command line, as well as + exception messages. """ new_cmdline = [] for index, to_parse in enumerate(cmdline): @@ -424,12 +426,16 @@ def remove_password_if_present(cmdline: Sequence[str]) -> List[str]: try: url = urlsplit(to_parse) # Remove password from the URL if present - if url.password is None: + if url.password is None and url.username is None: continue - edited_url = url._replace( - netloc=url.netloc.replace(url.password, "*****")) - new_cmdline[index] = urlunsplit(edited_url) + if url.password is not None: + url = url._replace( + netloc=url.netloc.replace(url.password, "*****")) + if url.username is not None: + url = url._replace( + netloc=url.netloc.replace(url.username, "*****")) + new_cmdline[index] = urlunsplit(url) except ValueError: # This is not a valid URL continue diff --git a/test/test_exc.py b/test/test_exc.py index f16498ab5..c77be7824 100644 --- a/test/test_exc.py +++ b/test/test_exc.py @@ -22,6 +22,7 @@ HookExecutionError, RepositoryDirtyError, ) +from git.util import remove_password_if_present from test.lib import TestBase import itertools as itt @@ -34,6 +35,7 @@ ('cmd', 'ελληνικα', 'args'), ('θνιψοδε', 'κι', 'αλλα', 'strange', 'args'), ('θνιψοδε', 'κι', 'αλλα', 'non-unicode', 'args'), + ('git', 'clone', '-v', 'https://fakeuser:fakepassword1234@fakerepo.example.com/testrepo'), ) _causes_n_substrings = ( (None, None), # noqa: E241 @IgnorePep8 @@ -81,7 +83,7 @@ def test_CommandError_unicode(self, case): self.assertIsNotNone(c._msg) self.assertIn(' cmdline: ', s) - for a in argv: + for a in remove_password_if_present(argv): self.assertIn(a, s) if not cause: @@ -137,14 +139,15 @@ def test_GitCommandNotFound(self, init_args): @ddt.data( (['cmd1'], None), (['cmd1'], "some cause"), - (['cmd1'], Exception()), + (['cmd1', 'https://fakeuser@fakerepo.example.com/testrepo'], Exception()), ) def test_GitCommandError(self, init_args): argv, cause = init_args c = GitCommandError(argv, cause) s = str(c) - self.assertIn(argv[0], s) + for arg in remove_password_if_present(argv): + self.assertIn(arg, s) if cause: self.assertIn(' failed due to: ', s) self.assertIn(str(cause), s) diff --git a/test/test_util.py b/test/test_util.py index 3961ff356..a213b46c9 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -343,18 +343,34 @@ def test_pickle_tzoffset(self): self.assertEqual(t1._name, t2._name) def test_remove_password_from_command_line(self): + username = "fakeuser" password = "fakepassword1234" - url_with_pass = "https://fakeuser:{}@fakerepo.example.com/testrepo".format(password) - url_without_pass = "https://fakerepo.example.com/testrepo" + url_with_user_and_pass = "https://{}:{}@fakerepo.example.com/testrepo".format(username, password) + url_with_user = "https://{}@fakerepo.example.com/testrepo".format(username) + url_with_pass = "https://:{}@fakerepo.example.com/testrepo".format(password) + url_without_user_or_pass = "https://fakerepo.example.com/testrepo" - cmd_1 = ["git", "clone", "-v", url_with_pass] - cmd_2 = ["git", "clone", "-v", url_without_pass] - cmd_3 = ["no", "url", "in", "this", "one"] + cmd_1 = ["git", "clone", "-v", url_with_user_and_pass] + cmd_2 = ["git", "clone", "-v", url_with_user] + cmd_3 = ["git", "clone", "-v", url_with_pass] + cmd_4 = ["git", "clone", "-v", url_without_user_or_pass] + cmd_5 = ["no", "url", "in", "this", "one"] redacted_cmd_1 = remove_password_if_present(cmd_1) + assert username not in " ".join(redacted_cmd_1) assert password not in " ".join(redacted_cmd_1) # Check that we use a copy assert cmd_1 is not redacted_cmd_1 + assert username in " ".join(cmd_1) assert password in " ".join(cmd_1) - assert cmd_2 == remove_password_if_present(cmd_2) - assert cmd_3 == remove_password_if_present(cmd_3) + + redacted_cmd_2 = remove_password_if_present(cmd_2) + assert username not in " ".join(redacted_cmd_2) + assert password not in " ".join(redacted_cmd_2) + + redacted_cmd_3 = remove_password_if_present(cmd_3) + assert username not in " ".join(redacted_cmd_3) + assert password not in " ".join(redacted_cmd_3) + + assert cmd_4 == remove_password_if_present(cmd_4) + assert cmd_5 == remove_password_if_present(cmd_5) From dde3a8bd9229ff25ec8bc03c35d937f43233f48e Mon Sep 17 00:00:00 2001 From: luz paz Date: Sat, 7 May 2022 15:59:10 -0400 Subject: [PATCH 0919/2375] Fix various typos Found via `codespell -q 3 -S ./git/ext/gitdb,./test/fixtures/reflog_master,./test/fixtures/diff_mode_only,./test/fixtures/reflog_HEAD` --- doc/source/changes.rst | 6 +++--- git/config.py | 2 +- git/index/base.py | 8 ++++---- git/index/fun.py | 2 +- git/objects/base.py | 2 +- git/objects/commit.py | 4 ++-- git/objects/submodule/root.py | 2 +- git/objects/util.py | 4 ++-- git/refs/symbolic.py | 2 +- git/refs/tag.py | 4 ++-- git/repo/base.py | 4 ++-- git/repo/fun.py | 2 +- git/types.py | 2 +- pyproject.toml | 2 +- test/fixtures/diff_p | 2 +- test/fixtures/git_config | 2 +- test/fixtures/rev_list_bisect_all | 2 +- test/test_config.py | 2 +- test/test_diff.py | 2 +- test/test_docs.py | 2 +- test/test_git.py | 2 +- test/test_index.py | 2 +- test/test_submodule.py | 4 ++-- 23 files changed, 33 insertions(+), 33 deletions(-) diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 3f22a4866..f37c81677 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -69,7 +69,7 @@ https://github.com/gitpython-developers/gitpython/milestone/53?closed=1 - Make Protocol classes ABCs at runtime due to new behaviour/bug in 3.9.7 & 3.10.0-rc1 - - Remove use of typing.TypeGuard until later release, to allow dependant libs time to update. + - Remove use of typing.TypeGuard until later release, to allow dependent libs time to update. - Tracking issue: https://github.com/gitpython-developers/GitPython/issues/1095 @@ -134,7 +134,7 @@ https://github.com/gitpython-developers/gitpython/milestone/48?closed=1 3.1.15 (YANKED) =============== -* add deprectation warning for python 3.5 +* add deprecation warning for python 3.5 See the following for details: https://github.com/gitpython-developers/gitpython/milestone/47?closed=1 @@ -595,7 +595,7 @@ It follows the `semantic version scheme `_, and thus will not - Renamed `ignore_tree_extension_data` keyword argument in `IndexFile.write(...)` to `ignore_extension_data` * If the git command executed during `Remote.push(...)|fetch(...)` returns with an non-zero exit code and GitPython didn't obtain any head-information, the corresponding `GitCommandError` will be raised. This may break previous code which expected - these operations to never raise. However, that behavious is undesirable as it would effectively hide the fact that there + these operations to never raise. However, that behaviour is undesirable as it would effectively hide the fact that there was an error. See `this issue `__ for more information. * If the git executable can't be found in the PATH or at the path provided by `GIT_PYTHON_GIT_EXECUTABLE`, this is made diff --git a/git/config.py b/git/config.py index cbd66022d..1ac3c9cec 100644 --- a/git/config.py +++ b/git/config.py @@ -71,7 +71,7 @@ class MetaParserBuilder(abc.ABCMeta): - """Utlity class wrapping base-class methods into decorators that assure read-only properties""" + """Utility class wrapping base-class methods into decorators that assure read-only properties""" def __new__(cls, name: str, bases: Tuple, clsdict: Dict[str, Any]) -> 'MetaParserBuilder': """ Equip all base-class methods with a needs_values decorator, and all non-const methods diff --git a/git/index/base.py b/git/index/base.py index 209bfa8de..00e51bf5e 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -579,7 +579,7 @@ def _process_diff_args(self, # type: ignore[override] def _to_relative_path(self, path: PathLike) -> PathLike: """ :return: Version of path relative to our git directory or raise ValueError - if it is not within our git direcotory""" + if it is not within our git directory""" if not osp.isabs(path): return path if self.repo.bare: @@ -682,7 +682,7 @@ def add(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, 'Submodule'] into the object database. PathStrings may contain globs, such as 'lib/__init__*' or can be directories - like 'lib', the latter ones will add all the files within the dirctory and + like 'lib', the latter ones will add all the files within the directory and subdirectories. This equals a straight git-add. @@ -779,7 +779,7 @@ def add(self, items: Sequence[Union[PathLike, Blob, BaseIndexEntry, 'Submodule'] "At least one Entry has a null-mode - please use index.remove to remove files for clarity") # END null mode should be remove - # HANLDE ENTRY OBJECT CREATION + # HANDLE ENTRY OBJECT CREATION # create objects if required, otherwise go with the existing shas null_entries_indices = [i for i, e in enumerate(entries) if e.binsha == Object.NULL_BIN_SHA] if null_entries_indices: @@ -813,7 +813,7 @@ def handle_null_entries(self: 'IndexFile') -> None: fprogress(entry.path, False, entry) fprogress(entry.path, True, entry) # END handle progress - # END for each enty + # END for each entry entries_added.extend(entries) # END if there are base entries diff --git a/git/index/fun.py b/git/index/fun.py index 59fa1be19..acab74239 100644 --- a/git/index/fun.py +++ b/git/index/fun.py @@ -314,7 +314,7 @@ def write_tree_from_cache(entries: List[IndexEntry], odb: 'GitCmdObjectDB', sl: # finally create the tree sio = BytesIO() - tree_to_stream(tree_items, sio.write) # writes to stream as bytes, but doesnt change tree_items + tree_to_stream(tree_items, sio.write) # writes to stream as bytes, but doesn't change tree_items sio.seek(0) istream = odb.store(IStream(str_tree_type, len(sio.getvalue()), sio)) diff --git a/git/objects/base.py b/git/objects/base.py index a3b0f230a..66e15a8f5 100644 --- a/git/objects/base.py +++ b/git/objects/base.py @@ -32,7 +32,7 @@ # -------------------------------------------------------------------------- -_assertion_msg_format = "Created object %r whose python type %r disagrees with the acutual git object type %r" +_assertion_msg_format = "Created object %r whose python type %r disagrees with the actual git object type %r" __all__ = ("Object", "IndexObject") diff --git a/git/objects/commit.py b/git/objects/commit.py index 07355e7e6..96a2a8e59 100644 --- a/git/objects/commit.py +++ b/git/objects/commit.py @@ -322,7 +322,7 @@ def trailers(self) -> Dict: Git messages can contain trailer information that are similar to RFC 822 e-mail headers (see: https://git-scm.com/docs/git-interpret-trailers). - This funcions calls ``git interpret-trailers --parse`` onto the message + This functions calls ``git interpret-trailers --parse`` onto the message to extract the trailer information. The key value pairs are stripped of leading and trailing whitespaces before they get saved into a dictionary. @@ -461,7 +461,7 @@ def create_from_tree(cls, repo: 'Repo', tree: Union[Tree, str], message: str, # * Environment variables override configuration values # * Sensible defaults are set according to the git documentation - # COMMITER AND AUTHOR INFO + # COMMITTER AND AUTHOR INFO cr = repo.config_reader() env = os.environ diff --git a/git/objects/submodule/root.py b/git/objects/submodule/root.py index 5e84d1616..08e1f9543 100644 --- a/git/objects/submodule/root.py +++ b/git/objects/submodule/root.py @@ -338,7 +338,7 @@ def update(self, previous_commit: Union[Commit_ish, None] = None, sm.update(recursive=False, init=init, to_latest_revision=to_latest_revision, progress=progress, dry_run=dry_run, force=force_reset, keep_going=keep_going) - # update recursively depth first - question is which inconsitent + # update recursively depth first - question is which inconsistent # state will be better in case it fails somewhere. Defective branch # or defective depth. The RootSubmodule type will never process itself, # which was done in the previous expression diff --git a/git/objects/util.py b/git/objects/util.py index 187318fe6..800eccdf4 100644 --- a/git/objects/util.py +++ b/git/objects/util.py @@ -37,7 +37,7 @@ from .submodule.base import Submodule from git.types import Protocol, runtime_checkable else: - # Protocol = Generic[_T] # NNeeded for typing bug #572? + # Protocol = Generic[_T] # Needed for typing bug #572? Protocol = ABC def runtime_checkable(f): @@ -359,7 +359,7 @@ def _list_traverse(self, as_edge: bool = False, *args: Any, **kwargs: Any out: IterableList[Union['Commit', 'Submodule', 'Tree', 'Blob']] = IterableList(id) out.extend(self.traverse(as_edge=as_edge, *args, **kwargs)) return out - # overloads in subclasses (mypy does't allow typing self: subclass) + # overloads in subclasses (mypy doesn't allow typing self: subclass) # Union[IterableList['Commit'], IterableList['Submodule'], IterableList[Union['Submodule', 'Tree', 'Blob']]] else: # Raise deprecationwarning, doesn't make sense to use this diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py index 1c5506737..8d869173e 100644 --- a/git/refs/symbolic.py +++ b/git/refs/symbolic.py @@ -298,7 +298,7 @@ def set_reference(self, ref: Union[Commit_ish, 'SymbolicReference', str], logmsg: Union[str, None] = None) -> 'SymbolicReference': """Set ourselves to the given ref. It will stay a symbol if the ref is a Reference. Otherwise an Object, given as Object instance or refspec, is assumed and if valid, - will be set which effectively detaches the refererence if it was a purely + will be set which effectively detaches the reference if it was a purely symbolic one. :param ref: SymbolicReference instance, Object instance or refspec string diff --git a/git/refs/tag.py b/git/refs/tag.py index edfab33d8..8cc79eddd 100644 --- a/git/refs/tag.py +++ b/git/refs/tag.py @@ -36,7 +36,7 @@ class TagReference(Reference): _common_path_default = Reference._common_path_default + "/" + _common_default @property - def commit(self) -> 'Commit': # type: ignore[override] # LazyMixin has unrelated comit method + def commit(self) -> 'Commit': # type: ignore[override] # LazyMixin has unrelated commit method """:return: Commit object the tag ref points to :raise ValueError: if the tag points to a tree or blob""" @@ -91,7 +91,7 @@ def create(cls: Type['TagReference'], repo: 'Repo', path: PathLike, :param message: Synonym for :param logmsg: - Included for backwards compatability. :param logmsg is used in preference if both given. + Included for backwards compatibility. :param logmsg is used in preference if both given. :param force: If True, to force creation of a tag even though that tag already exists. diff --git a/git/repo/base.py b/git/repo/base.py index f8bc8128e..bea0dcb57 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -711,7 +711,7 @@ def is_dirty(self, index: bool = True, working_tree: bool = True, untracked_file index or the working copy have changes.""" if self._bare: # Bare repositories with no associated working directory are - # always consired to be clean. + # always considered to be clean. return False # start from the one which is fastest to evaluate @@ -760,7 +760,7 @@ def _get_untracked_files(self, *args: Any, **kwargs: Any) -> List[str]: untracked_files=True, as_process=True, **kwargs) - # Untracked files preffix in porcelain mode + # Untracked files prefix in porcelain mode prefix = "?? " untracked_files = [] for line in proc.stdout: diff --git a/git/repo/fun.py b/git/repo/fun.py index 1a83dd3dc..74c0657d6 100644 --- a/git/repo/fun.py +++ b/git/repo/fun.py @@ -266,7 +266,7 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: # END handle tag elif token == '@': # try single int - assert ref is not None, "Requre Reference to access reflog" + assert ref is not None, "Require Reference to access reflog" revlog_index = None try: # transform reversed index into the format of our revlog diff --git a/git/types.py b/git/types.py index 64bf3d96d..7f44ba242 100644 --- a/git/types.py +++ b/git/types.py @@ -54,7 +54,7 @@ def assert_never(inp: NoReturn, raise_error: bool = True, exc: Union[Exception, None] = None) -> None: """For use in exhaustive checking of literal or Enum in if/else chain. - Should only be reached if all memebers not handled OR attempt to pass non-members through chain. + Should only be reached if all members not handled OR attempt to pass non-members through chain. If all members handled, type is Empty. Otherwise, will cause mypy error. If non-members given, should cause mypy error at variable creation. diff --git a/pyproject.toml b/pyproject.toml index 102b6fdc4..da3e605ad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [tool.pytest.ini_options] python_files = 'test_*.py' -testpaths = 'test' # space seperated list of paths from root e.g test tests doc/testing +testpaths = 'test' # space separated list of paths from root e.g test tests doc/testing addopts = '--cov=git --cov-report=term --maxfail=10 --force-sugar --disable-warnings' filterwarnings = 'ignore::DeprecationWarning' # --cov coverage diff --git a/test/fixtures/diff_p b/test/fixtures/diff_p index af4759e50..76242b58c 100644 --- a/test/fixtures/diff_p +++ b/test/fixtures/diff_p @@ -397,7 +397,7 @@ index 1d5251d40fb65ac89184ec662a3e1b04d0c24861..98eeddda5ed2b0e215e21128112393bd self.git_dir = git_dir end -- # Converstion hash from Ruby style options to git command line +- # Conversion hash from Ruby style options to git command line - # style options - TRANSFORM = {:max_count => "--max-count=", - :skip => "--skip=", diff --git a/test/fixtures/git_config b/test/fixtures/git_config index b8c178e3f..a8cad56e8 100644 --- a/test/fixtures/git_config +++ b/test/fixtures/git_config @@ -28,7 +28,7 @@ [branch "mainline_performance"] remote = mainline merge = refs/heads/master -# section with value defined before include to be overriden +# section with value defined before include to be overridden [sec] var0 = value0_main [include] diff --git a/test/fixtures/rev_list_bisect_all b/test/fixtures/rev_list_bisect_all index 810b66093..342ea94ae 100644 --- a/test/fixtures/rev_list_bisect_all +++ b/test/fixtures/rev_list_bisect_all @@ -40,7 +40,7 @@ committer David Aguilar 1220418344 -0700 commit: handle --bisect-all output in Commit.list_from_string Rui Abreu Ferrerira pointed out that "git rev-list --bisect-all" - returns a slightly different format which we can easily accomodate + returns a slightly different format which we can easily accommodate by changing the way we parse rev-list output. http://groups.google.com/group/git-python/browse_thread/thread/aed1d5c4b31d5027 diff --git a/test/test_config.py b/test/test_config.py index 8892b8399..50d9b010d 100644 --- a/test/test_config.py +++ b/test/test_config.py @@ -175,7 +175,7 @@ def test_base(self): assert num_sections and num_options assert r_config._is_initialized is True - # get value which doesnt exist, with default + # get value which doesn't exist, with default default = "my default value" assert r_config.get_value("doesnt", "exist", default) == default diff --git a/test/test_diff.py b/test/test_diff.py index 9b20893a4..92e27f5d2 100644 --- a/test/test_diff.py +++ b/test/test_diff.py @@ -273,7 +273,7 @@ def test_diff_unsafe_paths(self): self.assertEqual(res[13].b_path, 'b/"with even more quotes"') def test_diff_patch_format(self): - # test all of the 'old' format diffs for completness - it should at least + # test all of the 'old' format diffs for completeness - it should at least # be able to deal with it fixtures = ("diff_2", "diff_2f", "diff_f", "diff_i", "diff_mode_only", "diff_new_mode", "diff_numstat", "diff_p", "diff_rename", diff --git a/test/test_docs.py b/test/test_docs.py index 8897bbb75..08fc84399 100644 --- a/test/test_docs.py +++ b/test/test_docs.py @@ -135,7 +135,7 @@ def update(self, op_code, cur_count, max_count=None, message=''): for fetch_info in origin.fetch(progress=MyProgressPrinter()): print("Updated %s to %s" % (fetch_info.ref, fetch_info.commit)) # create a local branch at the latest fetched master. We specify the name statically, but you have all - # information to do it programatically as well. + # information to do it programmatically as well. bare_master = bare_repo.create_head('master', origin.refs.master) bare_repo.head.set_reference(bare_master) assert not bare_repo.delete_remote(origin).exists() diff --git a/test/test_git.py b/test/test_git.py index 7f52d650f..10e21487a 100644 --- a/test/test_git.py +++ b/test/test_git.py @@ -159,7 +159,7 @@ def test_cmd_override(self): prev_cmd = self.git.GIT_PYTHON_GIT_EXECUTABLE exc = GitCommandNotFound try: - # set it to something that doens't exist, assure it raises + # set it to something that doesn't exist, assure it raises type(self.git).GIT_PYTHON_GIT_EXECUTABLE = osp.join( "some", "path", "which", "doesn't", "exist", "gitbinary") self.assertRaises(exc, self.git.version) diff --git a/test/test_index.py b/test/test_index.py index 233a4c643..4a20a8f65 100644 --- a/test/test_index.py +++ b/test/test_index.py @@ -936,4 +936,4 @@ def test_commit_msg_hook_fail(self, rw_repo): self.assertEqual(err.stderr, "\n stderr: 'stderr\n'") assert str(err) else: - raise AssertionError("Should have cought a HookExecutionError") + raise AssertionError("Should have caught a HookExecutionError") diff --git a/test/test_submodule.py b/test/test_submodule.py index 3307bc788..a79123dcc 100644 --- a/test/test_submodule.py +++ b/test/test_submodule.py @@ -546,7 +546,7 @@ def test_root_module(self, rwrepo): assert nsm.module().head.commit.hexsha == nsm.hexsha nsm.module().index.add([nsm]) nsm.module().index.commit("added new file") - rm.update(recursive=False, dry_run=True, progress=prog) # would not change head, and thus doens't fail + rm.update(recursive=False, dry_run=True, progress=prog) # would not change head, and thus doesn't fail # Everything we can do from now on will trigger the 'future' check, so no is_dirty() check will even run # This would only run if our local branch is in the past and we have uncommitted changes @@ -730,7 +730,7 @@ def test_git_submodules_and_add_sm_with_new_commit(self, rwdir): assert parent.head.commit.tree[sm.path].binsha == sm.binsha assert sm_too.binsha == sm.binsha, "cached submodule should point to the same commit as updated one" - added_bies = parent.index.add([sm]) # addded base-index-entries + added_bies = parent.index.add([sm]) # added base-index-entries assert len(added_bies) == 1 parent.index.commit("add same submodule entry") commit_sm = parent.head.commit.tree[sm.path] From 21ec529987d10e0010badd37f8da3274167d436f Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 18 May 2022 07:43:53 +0800 Subject: [PATCH 0920/2375] Run everything through 'black' That way people who use it won't be deterred, while it unifies style everywhere. --- doc/source/conf.py | 92 ++--- git/__init__.py | 54 +-- git/cmd.py | 592 +++++++++++++++++++------------ git/compat.py | 37 +- git/config.py | 274 +++++++++----- git/db.py | 15 +- git/diff.py | 377 +++++++++++++------- git/exc.py | 78 ++-- git/ext/gitdb | 2 +- git/index/base.py | 479 ++++++++++++++++--------- git/index/fun.py | 185 ++++++---- git/index/typ.py | 67 ++-- git/index/util.py | 35 +- git/objects/__init__.py | 10 +- git/objects/base.py | 61 ++-- git/objects/blob.py | 7 +- git/objects/commit.py | 339 +++++++++++------- git/objects/fun.py | 75 ++-- git/objects/submodule/base.py | 536 +++++++++++++++++++--------- git/objects/submodule/root.py | 204 ++++++++--- git/objects/submodule/util.py | 40 ++- git/objects/tag.py | 50 ++- git/objects/tree.py | 158 ++++++--- git/objects/util.py | 362 ++++++++++++------- git/refs/head.py | 87 +++-- git/refs/log.py | 117 +++--- git/refs/reference.py | 58 +-- git/refs/remote.py | 21 +- git/refs/symbolic.py | 266 +++++++++----- git/refs/tag.py | 42 ++- git/remote.py | 538 ++++++++++++++++++---------- git/repo/base.py | 582 +++++++++++++++++++----------- git/repo/fun.py | 131 ++++--- git/types.py | 61 +++- git/util.py | 453 ++++++++++++++--------- setup.py | 34 +- test/lib/__init__.py | 7 +- test/lib/helper.py | 146 +++++--- test/performance/lib.py | 43 +-- test/performance/test_commit.py | 52 ++- test/performance/test_odb.py | 39 +- test/performance/test_streams.py | 87 +++-- test/test_actor.py | 1 - test/test_base.py | 55 ++- test/test_blob.py | 9 +- test/test_clone.py | 17 +- test/test_commit.py | 252 ++++++++----- test/test_config.py | 289 ++++++++------- test/test_db.py | 3 +- test/test_diff.py | 236 +++++++----- test/test_docs.py | 433 ++++++++++++++-------- test/test_exc.py | 83 +++-- test/test_fun.py | 103 +++--- test/test_git.py | 173 +++++---- test/test_index.py | 311 +++++++++------- test/test_installation.py | 61 +++- test/test_reflog.py | 37 +- test/test_refs.py | 137 ++++--- test/test_remote.py | 218 +++++++----- test/test_repo.py | 477 +++++++++++++++---------- test/test_stats.py | 24 +- test/test_submodule.py | 567 ++++++++++++++++++----------- test/test_tree.py | 38 +- test/test_util.py | 172 +++++---- test/tstrunner.py | 3 +- 65 files changed, 6674 insertions(+), 3918 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 286058fdc..d2803a826 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -20,38 +20,40 @@ # If your extensions are in another directory, add it 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('.')) -sys.path.insert(0, os.path.abspath('../..')) +# sys.path.append(os.path.abspath('.')) +sys.path.insert(0, os.path.abspath("../..")) # 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'] +extensions = ["sphinx.ext.autodoc", "sphinx.ext.doctest"] # Add any paths that contain templates here, relative to this directory. templates_path = [] # The suffix of source filenames. -source_suffix = '.rst' +source_suffix = ".rst" # The encoding of source files. -#source_encoding = 'utf-8' +# source_encoding = 'utf-8' # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = 'GitPython' -copyright = 'Copyright (C) 2008, 2009 Michael Trier and contributors, 2010-2015 Sebastian Thiel' +project = "GitPython" +copyright = ( + "Copyright (C) 2008, 2009 Michael Trier and contributors, 2010-2015 Sebastian Thiel" +) # 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. -with open(os.path.join(os.path.dirname(__file__), "..", "..", 'VERSION')) as fd: +with open(os.path.join(os.path.dirname(__file__), "..", "..", "VERSION")) as fd: VERSION = fd.readline().strip() version = VERSION # The full version, including alpha/beta/rc tags. @@ -59,61 +61,60 @@ # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. -#language = None +# language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: -#today = '' +# today = '' # Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' +# today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. -#unused_docs = [] +# unused_docs = [] # List of directories, relative to source directory, that shouldn't be searched # for source files. -exclude_trees = ['build'] +exclude_trees = ["build"] # The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None +# default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True +# 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 +# add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. -#show_authors = False +# show_authors = False # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # Options for HTML output # ----------------------- -html_theme = 'sphinx_rtd_theme' -html_theme_options = { -} +html_theme = "sphinx_rtd_theme" +html_theme_options = {} # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". -#html_title = None +# html_title = None # A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None +# html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. -#html_logo = None +# 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 +# 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, @@ -122,72 +123,71 @@ # 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' +# 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 +# html_use_smartypants = True # Custom sidebar templates, maps document names to template names. -#html_sidebars = {} +# html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. -#html_additional_pages = {} +# html_additional_pages = {} # If false, no module index is generated. -#html_use_modindex = True +# html_use_modindex = True # If false, no index is generated. -#html_use_index = True +# html_use_index = True # If true, the index is split into individual pages for each letter. -#html_split_index = False +# html_split_index = False # If true, the reST sources are included in the HTML build as _sources/. -#html_copy_source = True +# html_copy_source = True # 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 = '' +# html_use_opensearch = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = '' +# html_file_suffix = '' # Output file base name for HTML help builder. -htmlhelp_basename = 'gitpythondoc' +htmlhelp_basename = "gitpythondoc" # Options for LaTeX output # ------------------------ # The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' +# latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' +# latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, document class [howto/manual]). latex_documents = [ - ('index', 'GitPython.tex', r'GitPython Documentation', - r'Michael Trier', 'manual'), + ("index", "GitPython.tex", r"GitPython Documentation", r"Michael Trier", "manual"), ] # The name of an image file (relative to this directory) to place at the top of # the title page. -#latex_logo = None +# latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. -#latex_use_parts = False +# latex_use_parts = False # Additional stuff for the LaTeX preamble. -#latex_preamble = '' +# latex_preamble = '' # Documents to append as an appendix to all manuals. -#latex_appendices = [] +# latex_appendices = [] # If false, no module index is generated. -#latex_use_modindex = True +# latex_use_modindex = True diff --git a/git/__init__.py b/git/__init__.py index ae9254a26..3f26886f7 100644 --- a/git/__init__.py +++ b/git/__init__.py @@ -4,8 +4,8 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php # flake8: noqa -#@PydevCodeAnalysisIgnore -from git.exc import * # @NoMove @IgnorePep8 +# @PydevCodeAnalysisIgnore +from git.exc import * # @NoMove @IgnorePep8 import inspect import os import sys @@ -14,14 +14,14 @@ from typing import Optional from git.types import PathLike -__version__ = 'git' +__version__ = "git" -#{ Initialization +# { Initialization def _init_externals() -> None: """Initialize external projects by putting them into the path""" - if __version__ == 'git' and 'PYOXIDIZER' not in os.environ: - sys.path.insert(1, osp.join(osp.dirname(__file__), 'ext', 'gitdb')) + if __version__ == "git" and "PYOXIDIZER" not in os.environ: + sys.path.insert(1, osp.join(osp.dirname(__file__), "ext", "gitdb")) try: import gitdb @@ -29,26 +29,27 @@ def _init_externals() -> None: raise ImportError("'gitdb' could not be found in your PYTHONPATH") from e # END verify import -#} END initialization + +# } END initialization ################# _init_externals() ################# -#{ Imports +# { Imports try: from git.config import GitConfigParser # @NoMove @IgnorePep8 - from git.objects import * # @NoMove @IgnorePep8 - from git.refs import * # @NoMove @IgnorePep8 - from git.diff import * # @NoMove @IgnorePep8 - from git.db import * # @NoMove @IgnorePep8 - from git.cmd import Git # @NoMove @IgnorePep8 - from git.repo import Repo # @NoMove @IgnorePep8 - from git.remote import * # @NoMove @IgnorePep8 - from git.index import * # @NoMove @IgnorePep8 - from git.util import ( # @NoMove @IgnorePep8 + from git.objects import * # @NoMove @IgnorePep8 + from git.refs import * # @NoMove @IgnorePep8 + from git.diff import * # @NoMove @IgnorePep8 + from git.db import * # @NoMove @IgnorePep8 + from git.cmd import Git # @NoMove @IgnorePep8 + from git.repo import Repo # @NoMove @IgnorePep8 + from git.remote import * # @NoMove @IgnorePep8 + from git.index import * # @NoMove @IgnorePep8 + from git.util import ( # @NoMove @IgnorePep8 LockFile, BlockingLockFile, Stats, @@ -56,15 +57,18 @@ def _init_externals() -> None: rmtree, ) except GitError as exc: - raise ImportError('%s: %s' % (exc.__class__.__name__, exc)) from exc + raise ImportError("%s: %s" % (exc.__class__.__name__, exc)) from exc -#} END imports +# } END imports -__all__ = [name for name, obj in locals().items() - if not (name.startswith('_') or inspect.ismodule(obj))] +__all__ = [ + name + for name, obj in locals().items() + if not (name.startswith("_") or inspect.ismodule(obj)) +] -#{ Initialize git executable path +# { Initialize git executable path GIT_OK = None @@ -79,12 +83,14 @@ def refresh(path: Optional[PathLike] = None) -> None: return GIT_OK = True -#} END initialize git executable path + + +# } END initialize git executable path ################# try: refresh() except Exception as exc: - raise ImportError('Failed to initialize: {0}'.format(exc)) from exc + raise ImportError("Failed to initialize: {0}".format(exc)) from exc ################# diff --git a/git/cmd.py b/git/cmd.py index 1ddf9e03f..12409b0c8 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -9,12 +9,7 @@ import logging import os import signal -from subprocess import ( - call, - Popen, - PIPE, - DEVNULL -) +from subprocess import call, Popen, PIPE, DEVNULL import subprocess import threading from textwrap import dedent @@ -29,10 +24,7 @@ from git.exc import CommandError from git.util import is_cygwin_git, cygpath, expand_path, remove_password_if_present -from .exc import ( - GitCommandError, - GitCommandNotFound -) +from .exc import GitCommandError, GitCommandNotFound from .util import ( LazyMixin, stream_copy, @@ -40,8 +32,24 @@ # typing --------------------------------------------------------------------------- -from typing import (Any, AnyStr, BinaryIO, Callable, Dict, IO, Iterator, List, Mapping, - Sequence, TYPE_CHECKING, TextIO, Tuple, Union, cast, overload) +from typing import ( + Any, + AnyStr, + BinaryIO, + Callable, + Dict, + IO, + Iterator, + List, + Mapping, + Sequence, + TYPE_CHECKING, + TextIO, + Tuple, + Union, + cast, + overload, +) from git.types import PathLike, Literal, TBD @@ -52,15 +60,26 @@ # --------------------------------------------------------------------------------- -execute_kwargs = {'istream', 'with_extended_output', - 'with_exceptions', 'as_process', 'stdout_as_string', - 'output_stream', 'with_stdout', 'kill_after_timeout', - 'universal_newlines', 'shell', 'env', 'max_chunk_size', 'strip_newline_in_stdout'} +execute_kwargs = { + "istream", + "with_extended_output", + "with_exceptions", + "as_process", + "stdout_as_string", + "output_stream", + "with_stdout", + "kill_after_timeout", + "universal_newlines", + "shell", + "env", + "max_chunk_size", + "strip_newline_in_stdout", +} log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) -__all__ = ('Git',) +__all__ = ("Git",) # ============================================================================== @@ -69,18 +88,24 @@ # Documentation ## @{ -def handle_process_output(process: 'Git.AutoInterrupt' | Popen, - stdout_handler: Union[None, - Callable[[AnyStr], None], - Callable[[List[AnyStr]], None], - Callable[[bytes, 'Repo', 'DiffIndex'], None]], - stderr_handler: Union[None, - Callable[[AnyStr], None], - Callable[[List[AnyStr]], None]], - finalizer: Union[None, - Callable[[Union[subprocess.Popen, 'Git.AutoInterrupt']], None]] = None, - decode_streams: bool = True, - kill_after_timeout: Union[None, float] = None) -> None: + +def handle_process_output( + process: "Git.AutoInterrupt" | Popen, + stdout_handler: Union[ + None, + Callable[[AnyStr], None], + Callable[[List[AnyStr]], None], + Callable[[bytes, "Repo", "DiffIndex"], None], + ], + stderr_handler: Union[ + None, Callable[[AnyStr], None], Callable[[List[AnyStr]], None] + ], + finalizer: Union[ + None, Callable[[Union[subprocess.Popen, "Git.AutoInterrupt"]], None] + ] = None, + decode_streams: bool = True, + kill_after_timeout: Union[None, float] = None, +) -> None: """Registers for notifications to learn that process output is ready to read, and dispatches lines to the respective line handlers. This function returns once the finalizer returns @@ -101,8 +126,13 @@ def handle_process_output(process: 'Git.AutoInterrupt' | Popen, should be killed. """ # Use 2 "pump" threads and wait for both to finish. - def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], is_decode: bool, - handler: Union[None, Callable[[Union[bytes, str]], None]]) -> None: + def pump_stream( + cmdline: List[str], + name: str, + stream: Union[BinaryIO, TextIO], + is_decode: bool, + handler: Union[None, Callable[[Union[bytes, str]], None]], + ) -> None: try: for line in stream: if handler: @@ -114,21 +144,25 @@ def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], handler(line) except Exception as ex: - log.error(f"Pumping {name!r} of cmd({remove_password_if_present(cmdline)}) failed due to: {ex!r}") + log.error( + f"Pumping {name!r} of cmd({remove_password_if_present(cmdline)}) failed due to: {ex!r}" + ) if "I/O operation on closed file" not in str(ex): # Only reraise if the error was not due to the stream closing - raise CommandError([f'<{name}-pump>'] + remove_password_if_present(cmdline), ex) from ex + raise CommandError( + [f"<{name}-pump>"] + remove_password_if_present(cmdline), ex + ) from ex finally: stream.close() - if hasattr(process, 'proc'): - process = cast('Git.AutoInterrupt', process) - cmdline: str | Tuple[str, ...] | List[str] = getattr(process.proc, 'args', '') + if hasattr(process, "proc"): + process = cast("Git.AutoInterrupt", process) + cmdline: str | Tuple[str, ...] | List[str] = getattr(process.proc, "args", "") p_stdout = process.proc.stdout if process.proc else None p_stderr = process.proc.stderr if process.proc else None else: process = cast(Popen, process) - cmdline = getattr(process, 'args', '') + cmdline = getattr(process, "args", "") p_stdout = process.stdout p_stderr = process.stderr @@ -137,15 +171,16 @@ def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], pumps: List[Tuple[str, IO, Callable[..., None] | None]] = [] if p_stdout: - pumps.append(('stdout', p_stdout, stdout_handler)) + pumps.append(("stdout", p_stdout, stdout_handler)) if p_stderr: - pumps.append(('stderr', p_stderr, stderr_handler)) + pumps.append(("stderr", p_stderr, stderr_handler)) threads: List[threading.Thread] = [] for name, stream, handler in pumps: - t = threading.Thread(target=pump_stream, - args=(cmdline, name, stream, decode_streams, handler)) + t = threading.Thread( + target=pump_stream, args=(cmdline, name, stream, decode_streams, handler) + ) t.daemon = True t.start() threads.append(t) @@ -158,12 +193,15 @@ def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], if isinstance(process, Git.AutoInterrupt): process._terminate() else: # Don't want to deal with the other case - raise RuntimeError("Thread join() timed out in cmd.handle_process_output()." - f" kill_after_timeout={kill_after_timeout} seconds") + raise RuntimeError( + "Thread join() timed out in cmd.handle_process_output()." + f" kill_after_timeout={kill_after_timeout} seconds" + ) if stderr_handler: error_str: Union[str, bytes] = ( "error: process killed because it timed out." - f" kill_after_timeout={kill_after_timeout} seconds") + f" kill_after_timeout={kill_after_timeout} seconds" + ) if not decode_streams and isinstance(p_stderr, BinaryIO): # Assume stderr_handler needs binary input error_str = cast(str, error_str) @@ -179,19 +217,22 @@ def pump_stream(cmdline: List[str], name: str, stream: Union[BinaryIO, TextIO], def dashify(string: str) -> str: - return string.replace('_', '-') + return string.replace("_", "-") def slots_to_dict(self: object, exclude: Sequence[str] = ()) -> Dict[str, Any]: return {s: getattr(self, s) for s in self.__slots__ if s not in exclude} -def dict_to_slots_and__excluded_are_none(self: object, d: Mapping[str, Any], excluded: Sequence[str] = ()) -> None: +def dict_to_slots_and__excluded_are_none( + self: object, d: Mapping[str, Any], excluded: Sequence[str] = () +) -> None: for k, v in d.items(): setattr(self, k, v) for k in excluded: setattr(self, k, None) + ## -- End Utilities -- @} @@ -200,8 +241,11 @@ def dict_to_slots_and__excluded_are_none(self: object, d: Mapping[str, Any], exc ## CREATE_NEW_PROCESS_GROUP is needed to allow killing it afterwards, # see https://docs.python.org/3/library/subprocess.html#subprocess.Popen.send_signal -PROC_CREATIONFLAGS = (CREATE_NO_WINDOW | subprocess.CREATE_NEW_PROCESS_GROUP # type: ignore[attr-defined] - if is_win else 0) # mypy error if not windows +PROC_CREATIONFLAGS = ( + CREATE_NO_WINDOW | subprocess.CREATE_NEW_PROCESS_GROUP # type: ignore[attr-defined] + if is_win + else 0 +) # mypy error if not windows class Git(LazyMixin): @@ -220,10 +264,18 @@ class Git(LazyMixin): of the command to stdout. Set its value to 'full' to see details about the returned values. """ - __slots__ = ("_working_dir", "cat_file_all", "cat_file_header", "_version_info", - "_git_options", "_persistent_git_options", "_environment") - _excluded_ = ('cat_file_all', 'cat_file_header', '_version_info') + __slots__ = ( + "_working_dir", + "cat_file_all", + "cat_file_header", + "_version_info", + "_git_options", + "_persistent_git_options", + "_environment", + ) + + _excluded_ = ("cat_file_all", "cat_file_header", "_version_info") def __getstate__(self) -> Dict[str, Any]: return slots_to_dict(self, exclude=self._excluded_) @@ -233,7 +285,7 @@ def __setstate__(self, d: Dict[str, Any]) -> None: # CONFIGURATION - git_exec_name = "git" # default that should work on linux and windows + git_exec_name = "git" # default that should work on linux and windows # Enables debugging of GitPython's git commands GIT_PYTHON_TRACE = os.environ.get("GIT_PYTHON_TRACE", False) @@ -282,13 +334,18 @@ def refresh(cls, path: Union[None, PathLike] = None) -> bool: # warn or raise exception if test failed if not has_git: - err = dedent("""\ + err = ( + dedent( + """\ Bad git executable. The git executable must be specified in one of the following ways: - be included in your $PATH - be set via $%s - explicitly set via git.refresh() - """) % cls._git_exec_env_var + """ + ) + % cls._git_exec_env_var + ) # revert to whatever the old_git was cls.GIT_PYTHON_GIT_EXECUTABLE = old_git @@ -314,7 +371,9 @@ def refresh(cls, path: Union[None, PathLike] = None) -> bool: if mode in quiet: pass elif mode in warn or mode in error: - err = dedent("""\ + err = ( + dedent( + """\ %s All git commands will error until this is rectified. @@ -326,32 +385,42 @@ def refresh(cls, path: Union[None, PathLike] = None) -> bool: Example: export %s=%s - """) % ( - err, - cls._refresh_env_var, - "|".join(quiet), - "|".join(warn), - "|".join(error), - cls._refresh_env_var, - quiet[0]) + """ + ) + % ( + err, + cls._refresh_env_var, + "|".join(quiet), + "|".join(warn), + "|".join(error), + cls._refresh_env_var, + quiet[0], + ) + ) if mode in warn: print("WARNING: %s" % err) else: raise ImportError(err) else: - err = dedent("""\ + err = ( + dedent( + """\ %s environment variable has been set but it has been set with an invalid value. Use only the following values: - %s: for no warning or exception - %s: for a printed warning - %s: for a raised exception - """) % ( - cls._refresh_env_var, - "|".join(quiet), - "|".join(warn), - "|".join(error)) + """ + ) + % ( + cls._refresh_env_var, + "|".join(quiet), + "|".join(warn), + "|".join(error), + ) + ) raise ImportError(err) # we get here if this was the init refresh and the refresh mode @@ -395,7 +464,7 @@ def polish_url(cls, url: str, is_cygwin: Union[None, bool] = None) -> PathLike: Hence we undo the escaping just to be sure. """ url = os.path.expandvars(url) - if url.startswith('~'): + if url.startswith("~"): url = os.path.expanduser(url) url = url.replace("\\\\", "\\").replace("\\", "/") return url @@ -441,7 +510,7 @@ def _terminate(self) -> None: log.info("Ignored error after process had died: %r", ex) # can be that nothing really exists anymore ... - if os is None or getattr(os, 'kill', None) is None: + if os is None or getattr(os, "kill", None) is None: return None # try to kill it @@ -458,7 +527,10 @@ def _terminate(self) -> None: # we simply use the shell and redirect to nul. Its slower than CreateProcess, question # is whether we really want to see all these messages. Its annoying no matter what. if is_win: - call(("TASKKILL /F /T /PID %s 2>nul 1>nul" % str(proc.pid)), shell=True) + call( + ("TASKKILL /F /T /PID %s 2>nul 1>nul" % str(proc.pid)), + shell=True, + ) # END exception handling def __del__(self) -> None: @@ -468,15 +540,15 @@ def __getattr__(self, attr: str) -> Any: return getattr(self.proc, attr) # TODO: Bad choice to mimic `proc.wait()` but with different args. - def wait(self, stderr: Union[None, str, bytes] = b'') -> int: + def wait(self, stderr: Union[None, str, bytes] = b"") -> int: """Wait for the process and return its status code. :param stderr: Previously read value of stderr, in case stderr is already closed. :warn: may deadlock if output or error pipes are used and not handled separately. :raise GitCommandError: if the return status is not 0""" if stderr is None: - stderr_b = b'' - stderr_b = force_bytes(data=stderr, encoding='utf-8') + stderr_b = b"" + stderr_b = force_bytes(data=stderr, encoding="utf-8") status: Union[int, None] if self.proc is not None: status = self.proc.wait() @@ -485,21 +557,25 @@ def wait(self, stderr: Union[None, str, bytes] = b'') -> int: status = self.status p_stderr = None - def read_all_from_possibly_closed_stream(stream: Union[IO[bytes], None]) -> bytes: + def read_all_from_possibly_closed_stream( + stream: Union[IO[bytes], None] + ) -> bytes: if stream: try: return stderr_b + force_bytes(stream.read()) except ValueError: - return stderr_b or b'' + return stderr_b or b"" else: - return stderr_b or b'' + return stderr_b or b"" # END status handling if status != 0: errstr = read_all_from_possibly_closed_stream(p_stderr) - log.debug('AutoInterrupt wait stderr: %r' % (errstr,)) - raise GitCommandError(remove_password_if_present(self.args), status, errstr) + log.debug("AutoInterrupt wait stderr: %r" % (errstr,)) + raise GitCommandError( + remove_password_if_present(self.args), status, errstr + ) return status # END auto interrupt @@ -513,12 +589,12 @@ class CatFileContentStream(object): If not all data is read to the end of the objects's lifetime, we read the rest to assure the underlying stream continues to work""" - __slots__: Tuple[str, ...] = ('_stream', '_nbr', '_size') + __slots__: Tuple[str, ...] = ("_stream", "_nbr", "_size") def __init__(self, size: int, stream: IO[bytes]) -> None: self._stream = stream self._size = size - self._nbr = 0 # num bytes read + self._nbr = 0 # num bytes read # special case: if the object is empty, has null bytes, get the # final newline right away. @@ -529,7 +605,7 @@ def __init__(self, size: int, stream: IO[bytes]) -> None: def read(self, size: int = -1) -> bytes: bytes_left = self._size - self._nbr if bytes_left == 0: - return b'' + return b"" if size > -1: # assure we don't try to read past our limit size = min(bytes_left, size) @@ -542,13 +618,13 @@ def read(self, size: int = -1) -> bytes: # check for depletion, read our final byte to make the stream usable by others if self._size - self._nbr == 0: - self._stream.read(1) # final newline + self._stream.read(1) # final newline # END finish reading return data def readline(self, size: int = -1) -> bytes: if self._nbr == self._size: - return b'' + return b"" # clamp size to lowest allowed value bytes_left = self._size - self._nbr @@ -589,7 +665,7 @@ def readlines(self, size: int = -1) -> List[bytes]: return out # skipcq: PYL-E0301 - def __iter__(self) -> 'Git.CatFileContentStream': + def __iter__(self) -> "Git.CatFileContentStream": return self def __next__(self) -> bytes: @@ -634,7 +710,7 @@ def __getattr__(self, name: str) -> Any: """A convenience method as it allows to call the command as if it was an object. :return: Callable object that will execute call _call_process with your arguments.""" - if name[0] == '_': + if name[0] == "_": return LazyMixin.__getattr__(self, name) return lambda *args, **kwargs: self._call_process(name, *args, **kwargs) @@ -650,27 +726,31 @@ def set_persistent_git_options(self, **kwargs: Any) -> None: """ self._persistent_git_options = self.transform_kwargs( - split_single_char_options=True, **kwargs) + split_single_char_options=True, **kwargs + ) def _set_cache_(self, attr: str) -> None: - if attr == '_version_info': + if attr == "_version_info": # We only use the first 4 numbers, as everything else could be strings in fact (on windows) - process_version = self._call_process('version') # should be as default *args and **kwargs used - version_numbers = process_version.split(' ')[2] - - self._version_info = cast(Tuple[int, int, int, int], - tuple(int(n) for n in version_numbers.split('.')[:4] if n.isdigit()) - ) + process_version = self._call_process( + "version" + ) # should be as default *args and **kwargs used + version_numbers = process_version.split(" ")[2] + + self._version_info = cast( + Tuple[int, int, int, int], + tuple(int(n) for n in version_numbers.split(".")[:4] if n.isdigit()), + ) else: super(Git, self)._set_cache_(attr) # END handle version info - @ property + @property def working_dir(self) -> Union[None, PathLike]: """:return: Git directory we are working on""" return self._working_dir - @ property + @property def version_info(self) -> Tuple[int, int, int, int]: """ :return: tuple(int, int, int, int) tuple with integers representing the major, minor @@ -678,69 +758,72 @@ def version_info(self) -> Tuple[int, int, int, int]: This value is generated on demand and is cached""" return self._version_info - @ overload - def execute(self, - command: Union[str, Sequence[Any]], - *, - as_process: Literal[True] - ) -> 'AutoInterrupt': + @overload + def execute( + self, command: Union[str, Sequence[Any]], *, as_process: Literal[True] + ) -> "AutoInterrupt": ... - @ overload - def execute(self, - command: Union[str, Sequence[Any]], - *, - as_process: Literal[False] = False, - stdout_as_string: Literal[True] - ) -> Union[str, Tuple[int, str, str]]: + @overload + def execute( + self, + command: Union[str, Sequence[Any]], + *, + as_process: Literal[False] = False, + stdout_as_string: Literal[True], + ) -> Union[str, Tuple[int, str, str]]: ... - @ overload - def execute(self, - command: Union[str, Sequence[Any]], - *, - as_process: Literal[False] = False, - stdout_as_string: Literal[False] = False - ) -> Union[bytes, Tuple[int, bytes, str]]: + @overload + def execute( + self, + command: Union[str, Sequence[Any]], + *, + as_process: Literal[False] = False, + stdout_as_string: Literal[False] = False, + ) -> Union[bytes, Tuple[int, bytes, str]]: ... - @ overload - def execute(self, - command: Union[str, Sequence[Any]], - *, - with_extended_output: Literal[False], - as_process: Literal[False], - stdout_as_string: Literal[True] - ) -> str: + @overload + def execute( + self, + command: Union[str, Sequence[Any]], + *, + with_extended_output: Literal[False], + as_process: Literal[False], + stdout_as_string: Literal[True], + ) -> str: ... - @ overload - def execute(self, - command: Union[str, Sequence[Any]], - *, - with_extended_output: Literal[False], - as_process: Literal[False], - stdout_as_string: Literal[False] - ) -> bytes: + @overload + def execute( + self, + command: Union[str, Sequence[Any]], + *, + with_extended_output: Literal[False], + as_process: Literal[False], + stdout_as_string: Literal[False], + ) -> bytes: ... - def execute(self, - command: Union[str, Sequence[Any]], - istream: Union[None, BinaryIO] = None, - with_extended_output: bool = False, - with_exceptions: bool = True, - as_process: bool = False, - output_stream: Union[None, BinaryIO] = None, - stdout_as_string: bool = True, - kill_after_timeout: Union[None, float] = None, - with_stdout: bool = True, - universal_newlines: bool = False, - shell: Union[None, bool] = None, - env: Union[None, Mapping[str, str]] = None, - max_chunk_size: int = io.DEFAULT_BUFFER_SIZE, - strip_newline_in_stdout: bool = True, - **subprocess_kwargs: Any - ) -> Union[str, bytes, Tuple[int, Union[str, bytes], str], AutoInterrupt]: + def execute( + self, + command: Union[str, Sequence[Any]], + istream: Union[None, BinaryIO] = None, + with_extended_output: bool = False, + with_exceptions: bool = True, + as_process: bool = False, + output_stream: Union[None, BinaryIO] = None, + stdout_as_string: bool = True, + kill_after_timeout: Union[None, float] = None, + with_stdout: bool = True, + universal_newlines: bool = False, + shell: Union[None, bool] = None, + env: Union[None, Mapping[str, str]] = None, + max_chunk_size: int = io.DEFAULT_BUFFER_SIZE, + strip_newline_in_stdout: bool = True, + **subprocess_kwargs: Any, + ) -> Union[str, bytes, Tuple[int, Union[str, bytes], str], AutoInterrupt]: """Handles executing the command on the shell and consumes and returns the returned information (stdout) @@ -831,8 +914,8 @@ def execute(self, you must update the execute_kwargs tuple housed in this module.""" # Remove password for the command if present redacted_command = remove_password_if_present(command) - if self.GIT_PYTHON_TRACE and (self.GIT_PYTHON_TRACE != 'full' or as_process): - log.info(' '.join(redacted_command)) + if self.GIT_PYTHON_TRACE and (self.GIT_PYTHON_TRACE != "full" or as_process): + log.info(" ".join(redacted_command)) # Allow the user to have the command executed in their working dir. try: @@ -858,33 +941,47 @@ def execute(self, if is_win: cmd_not_found_exception = OSError if kill_after_timeout is not None: - raise GitCommandError(redacted_command, '"kill_after_timeout" feature is not supported on Windows.') + raise GitCommandError( + redacted_command, + '"kill_after_timeout" feature is not supported on Windows.', + ) else: - cmd_not_found_exception = FileNotFoundError # NOQA # exists, flake8 unknown @UndefinedVariable + cmd_not_found_exception = ( + FileNotFoundError # NOQA # exists, flake8 unknown @UndefinedVariable + ) # end handle - stdout_sink = (PIPE - if with_stdout - else getattr(subprocess, 'DEVNULL', None) or open(os.devnull, 'wb')) + stdout_sink = ( + PIPE + if with_stdout + else getattr(subprocess, "DEVNULL", None) or open(os.devnull, "wb") + ) istream_ok = "None" if istream: istream_ok = "" - log.debug("Popen(%s, cwd=%s, universal_newlines=%s, shell=%s, istream=%s)", - redacted_command, cwd, universal_newlines, shell, istream_ok) + log.debug( + "Popen(%s, cwd=%s, universal_newlines=%s, shell=%s, istream=%s)", + redacted_command, + cwd, + universal_newlines, + shell, + istream_ok, + ) try: - proc = Popen(command, - env=env, - cwd=cwd, - bufsize=-1, - stdin=istream or DEVNULL, - stderr=PIPE, - stdout=stdout_sink, - shell=shell is not None and shell or self.USE_SHELL, - close_fds=is_posix, # unsupported on windows - universal_newlines=universal_newlines, - creationflags=PROC_CREATIONFLAGS, - **subprocess_kwargs - ) + proc = Popen( + command, + env=env, + cwd=cwd, + bufsize=-1, + stdin=istream or DEVNULL, + stderr=PIPE, + stdout=stdout_sink, + shell=shell is not None and shell or self.USE_SHELL, + close_fds=is_posix, # unsupported on windows + universal_newlines=universal_newlines, + creationflags=PROC_CREATIONFLAGS, + **subprocess_kwargs, + ) except cmd_not_found_exception as err: raise GitCommandNotFound(redacted_command, err) from err @@ -897,9 +994,12 @@ def execute(self, return self.AutoInterrupt(proc, command) def _kill_process(pid: int) -> None: - """ Callback method to kill a process. """ - p = Popen(['ps', '--ppid', str(pid)], stdout=PIPE, - creationflags=PROC_CREATIONFLAGS) + """Callback method to kill a process.""" + p = Popen( + ["ps", "--ppid", str(pid)], + stdout=PIPE, + creationflags=PROC_CREATIONFLAGS, + ) child_pids = [] if p.stdout is not None: for line in p.stdout: @@ -909,29 +1009,32 @@ def _kill_process(pid: int) -> None: child_pids.append(int(local_pid)) try: # Windows does not have SIGKILL, so use SIGTERM instead - sig = getattr(signal, 'SIGKILL', signal.SIGTERM) + sig = getattr(signal, "SIGKILL", signal.SIGTERM) os.kill(pid, sig) for child_pid in child_pids: try: os.kill(child_pid, sig) except OSError: pass - kill_check.set() # tell the main routine that the process was killed + kill_check.set() # tell the main routine that the process was killed except OSError: # It is possible that the process gets completed in the duration after timeout # happens and before we try to kill the process. pass return + # end if kill_after_timeout is not None: kill_check = threading.Event() - watchdog = threading.Timer(kill_after_timeout, _kill_process, args=(proc.pid,)) + watchdog = threading.Timer( + kill_after_timeout, _kill_process, args=(proc.pid,) + ) # Wait for the process to return status = 0 - stdout_value: Union[str, bytes] = b'' - stderr_value: Union[str, bytes] = b'' + stdout_value: Union[str, bytes] = b"" + stderr_value: Union[str, bytes] = b"" newline = "\n" if universal_newlines else b"\n" try: if output_stream is None: @@ -941,8 +1044,10 @@ def _kill_process(pid: int) -> None: if kill_after_timeout is not None: watchdog.cancel() if kill_check.is_set(): - stderr_value = ('Timeout: the command "%s" did not complete in %d ' - 'secs.' % (" ".join(redacted_command), kill_after_timeout)) + stderr_value = ( + 'Timeout: the command "%s" did not complete in %d ' + "secs." % (" ".join(redacted_command), kill_after_timeout) + ) if not universal_newlines: stderr_value = stderr_value.encode(defenc) # strip trailing "\n" @@ -953,12 +1058,16 @@ def _kill_process(pid: int) -> None: status = proc.returncode else: - max_chunk_size = max_chunk_size if max_chunk_size and max_chunk_size > 0 else io.DEFAULT_BUFFER_SIZE + max_chunk_size = ( + max_chunk_size + if max_chunk_size and max_chunk_size > 0 + else io.DEFAULT_BUFFER_SIZE + ) stream_copy(proc.stdout, output_stream, max_chunk_size) stdout_value = proc.stdout.read() stderr_value = proc.stderr.read() # strip trailing "\n" - if stderr_value.endswith(newline): # type: ignore + if stderr_value.endswith(newline): # type: ignore stderr_value = stderr_value[:-1] status = proc.wait() # END stdout handling @@ -966,18 +1075,28 @@ def _kill_process(pid: int) -> None: proc.stdout.close() proc.stderr.close() - if self.GIT_PYTHON_TRACE == 'full': + if self.GIT_PYTHON_TRACE == "full": cmdstr = " ".join(redacted_command) def as_text(stdout_value: Union[bytes, str]) -> str: - return not output_stream and safe_decode(stdout_value) or '' + return ( + not output_stream and safe_decode(stdout_value) or "" + ) + # end if stderr_value: - log.info("%s -> %d; stdout: '%s'; stderr: '%s'", - cmdstr, status, as_text(stdout_value), safe_decode(stderr_value)) + log.info( + "%s -> %d; stdout: '%s'; stderr: '%s'", + cmdstr, + status, + as_text(stdout_value), + safe_decode(stderr_value), + ) elif stdout_value: - log.info("%s -> %d; stdout: '%s'", cmdstr, status, as_text(stdout_value)) + log.info( + "%s -> %d; stdout: '%s'", cmdstr, status, as_text(stdout_value) + ) else: log.info("%s -> %d", cmdstr, status) # END handle debug printing @@ -985,7 +1104,9 @@ def as_text(stdout_value: Union[bytes, str]) -> str: if with_exceptions and status != 0: raise GitCommandError(redacted_command, status, stderr_value, stdout_value) - if isinstance(stdout_value, bytes) and stdout_as_string: # could also be output_stream + if ( + isinstance(stdout_value, bytes) and stdout_as_string + ): # could also be output_stream stdout_value = safe_decode(stdout_value) # Allow access to the command's status code @@ -1042,7 +1163,9 @@ def custom_environment(self, **kwargs: Any) -> Iterator[None]: finally: self.update_environment(**old_env) - def transform_kwarg(self, name: str, value: Any, split_single_char_options: bool) -> List[str]: + def transform_kwarg( + self, name: str, value: Any, split_single_char_options: bool + ) -> List[str]: if len(name) == 1: if value is True: return ["-%s" % name] @@ -1058,7 +1181,9 @@ def transform_kwarg(self, name: str, value: Any, split_single_char_options: bool return ["--%s=%s" % (dashify(name), value)] return [] - def transform_kwargs(self, split_single_char_options: bool = True, **kwargs: Any) -> List[str]: + def transform_kwargs( + self, split_single_char_options: bool = True, **kwargs: Any + ) -> List[str]: """Transforms Python style kwargs into git command line options.""" args = [] for k, v in kwargs.items(): @@ -1081,7 +1206,7 @@ def __unpack_args(cls, arg_list: Sequence[str]) -> List[str]: return outlist - def __call__(self, **kwargs: Any) -> 'Git': + def __call__(self, **kwargs: Any) -> "Git": """Specify command line options to the git executable for a subcommand call @@ -1094,28 +1219,34 @@ def __call__(self, **kwargs: Any) -> 'Git': ``Examples``:: git(work_tree='/tmp').difftool()""" self._git_options = self.transform_kwargs( - split_single_char_options=True, **kwargs) + split_single_char_options=True, **kwargs + ) return self @overload - def _call_process(self, method: str, *args: None, **kwargs: None - ) -> str: + def _call_process(self, method: str, *args: None, **kwargs: None) -> str: ... # if no args given, execute called with all defaults @overload - def _call_process(self, method: str, - istream: int, - as_process: Literal[True], - *args: Any, **kwargs: Any - ) -> 'Git.AutoInterrupt': ... + def _call_process( + self, + method: str, + istream: int, + as_process: Literal[True], + *args: Any, + **kwargs: Any, + ) -> "Git.AutoInterrupt": + ... @overload - def _call_process(self, method: str, *args: Any, **kwargs: Any - ) -> Union[str, bytes, Tuple[int, Union[str, bytes], str], 'Git.AutoInterrupt']: + def _call_process( + self, method: str, *args: Any, **kwargs: Any + ) -> Union[str, bytes, Tuple[int, Union[str, bytes], str], "Git.AutoInterrupt"]: ... - def _call_process(self, method: str, *args: Any, **kwargs: Any - ) -> Union[str, bytes, Tuple[int, Union[str, bytes], str], 'Git.AutoInterrupt']: + def _call_process( + self, method: str, *args: Any, **kwargs: Any + ) -> Union[str, bytes, Tuple[int, Union[str, bytes], str], "Git.AutoInterrupt"]: """Run the given git command with the specified arguments and return the result as a String @@ -1145,13 +1276,13 @@ def _call_process(self, method: str, *args: Any, **kwargs: Any :return: Same as ``execute`` if no args given used execute default (esp. as_process = False, stdout_as_string = True) - and return str """ + and return str""" # Handle optional arguments prior to calling transform_kwargs # otherwise these'll end up in args, which is bad. exec_kwargs = {k: v for k, v in kwargs.items() if k in execute_kwargs} opts_kwargs = {k: v for k, v in kwargs.items() if k not in execute_kwargs} - insert_after_this_arg = opts_kwargs.pop('insert_kwargs_after', None) + insert_after_this_arg = opts_kwargs.pop("insert_kwargs_after", None) # Prepare the argument list @@ -1164,10 +1295,12 @@ def _call_process(self, method: str, *args: Any, **kwargs: Any try: index = ext_args.index(insert_after_this_arg) except ValueError as err: - raise ValueError("Couldn't find argument '%s' in args %s to insert cmd options after" - % (insert_after_this_arg, str(ext_args))) from err + raise ValueError( + "Couldn't find argument '%s' in args %s to insert cmd options after" + % (insert_after_this_arg, str(ext_args)) + ) from err # end handle error - args_list = ext_args[:index + 1] + opt_args + ext_args[index + 1:] + args_list = ext_args[: index + 1] + opt_args + ext_args[index + 1 :] # end handle opts_kwargs call = [self.GIT_PYTHON_GIT_EXECUTABLE] @@ -1197,9 +1330,15 @@ def _parse_object_header(self, header_line: str) -> Tuple[str, str, int]: tokens = header_line.split() if len(tokens) != 3: if not tokens: - raise ValueError("SHA could not be resolved, git returned: %r" % (header_line.strip())) + raise ValueError( + "SHA could not be resolved, git returned: %r" + % (header_line.strip()) + ) else: - raise ValueError("SHA %s could not be resolved, git returned: %r" % (tokens[0], header_line.strip())) + raise ValueError( + "SHA %s could not be resolved, git returned: %r" + % (tokens[0], header_line.strip()) + ) # END handle actual return value # END error handling @@ -1211,9 +1350,9 @@ def _prepare_ref(self, ref: AnyStr) -> bytes: # required for command to separate refs on stdin, as bytes if isinstance(ref, bytes): # Assume 40 bytes hexsha - bin-to-ascii for some reason returns bytes, not text - refstr: str = ref.decode('ascii') + refstr: str = ref.decode("ascii") elif not isinstance(ref, str): - refstr = str(ref) # could be ref-object + refstr = str(ref) # could be ref-object else: refstr = ref @@ -1221,8 +1360,9 @@ def _prepare_ref(self, ref: AnyStr) -> bytes: refstr += "\n" return refstr.encode(defenc) - def _get_persistent_cmd(self, attr_name: str, cmd_name: str, *args: Any, **kwargs: Any - ) -> 'Git.AutoInterrupt': + def _get_persistent_cmd( + self, attr_name: str, cmd_name: str, *args: Any, **kwargs: Any + ) -> "Git.AutoInterrupt": cur_val = getattr(self, attr_name) if cur_val is not None: return cur_val @@ -1232,10 +1372,12 @@ def _get_persistent_cmd(self, attr_name: str, cmd_name: str, *args: Any, **kwarg cmd = self._call_process(cmd_name, *args, **options) setattr(self, attr_name, cmd) - cmd = cast('Git.AutoInterrupt', cmd) + cmd = cast("Git.AutoInterrupt", cmd) return cmd - def __get_object_header(self, cmd: 'Git.AutoInterrupt', ref: AnyStr) -> Tuple[str, str, int]: + def __get_object_header( + self, cmd: "Git.AutoInterrupt", ref: AnyStr + ) -> Tuple[str, str, int]: if cmd.stdin and cmd.stdout: cmd.stdin.write(self._prepare_ref(ref)) cmd.stdin.flush() @@ -1244,7 +1386,7 @@ def __get_object_header(self, cmd: 'Git.AutoInterrupt', ref: AnyStr) -> Tuple[st raise ValueError("cmd stdin was empty") def get_object_header(self, ref: str) -> Tuple[str, str, int]: - """ Use this method to quickly examine the type and size of the object behind + """Use this method to quickly examine the type and size of the object behind the given ref. :note: The method will only suffer from the costs of command invocation @@ -1255,16 +1397,18 @@ def get_object_header(self, ref: str) -> Tuple[str, str, int]: return self.__get_object_header(cmd, ref) def get_object_data(self, ref: str) -> Tuple[str, str, int, bytes]: - """ As get_object_header, but returns object data as well + """As get_object_header, but returns object data as well :return: (hexsha, type_string, size_as_int,data_string) :note: not threadsafe""" hexsha, typename, size, stream = self.stream_object_data(ref) data = stream.read(size) - del(stream) + del stream return (hexsha, typename, size, data) - def stream_object_data(self, ref: str) -> Tuple[str, str, int, 'Git.CatFileContentStream']: - """ As get_object_header, but returns the data as a stream + def stream_object_data( + self, ref: str + ) -> Tuple[str, str, int, "Git.CatFileContentStream"]: + """As get_object_header, but returns the data as a stream :return: (hexsha, type_string, size_as_int, stream) :note: This method is not threadsafe, you need one independent Command instance per thread to be safe !""" @@ -1273,7 +1417,7 @@ def stream_object_data(self, ref: str) -> Tuple[str, str, int, 'Git.CatFileConte cmd_stdout = cmd.stdout if cmd.stdout is not None else io.BytesIO() return (hexsha, typename, size, self.CatFileContentStream(size, cmd_stdout)) - def clear_cache(self) -> 'Git': + def clear_cache(self) -> "Git": """Clear all kinds of internal caches to release resources. Currently persistent commands will be interrupted. diff --git a/git/compat.py b/git/compat.py index 988c04eff..e7ef28c30 100644 --- a/git/compat.py +++ b/git/compat.py @@ -12,8 +12,8 @@ import sys from gitdb.utils.encoding import ( - force_bytes, # @UnusedImport - force_text # @UnusedImport + force_bytes, # @UnusedImport + force_text, # @UnusedImport ) # typing -------------------------------------------------------------------- @@ -29,21 +29,24 @@ Union, overload, ) + # --------------------------------------------------------------------------- -is_win: bool = (os.name == 'nt') -is_posix = (os.name == 'posix') -is_darwin = (os.name == 'darwin') +is_win: bool = os.name == "nt" +is_posix = os.name == "posix" +is_darwin = os.name == "darwin" defenc = sys.getfilesystemencoding() @overload -def safe_decode(s: None) -> None: ... +def safe_decode(s: None) -> None: + ... @overload -def safe_decode(s: AnyStr) -> str: ... +def safe_decode(s: AnyStr) -> str: + ... def safe_decode(s: Union[AnyStr, None]) -> Optional[str]: @@ -51,19 +54,21 @@ def safe_decode(s: Union[AnyStr, None]) -> Optional[str]: if isinstance(s, str): return s elif isinstance(s, bytes): - return s.decode(defenc, 'surrogateescape') + return s.decode(defenc, "surrogateescape") elif s is None: return None else: - raise TypeError('Expected bytes or text, but got %r' % (s,)) + raise TypeError("Expected bytes or text, but got %r" % (s,)) @overload -def safe_encode(s: None) -> None: ... +def safe_encode(s: None) -> None: + ... @overload -def safe_encode(s: AnyStr) -> bytes: ... +def safe_encode(s: AnyStr) -> bytes: + ... def safe_encode(s: Optional[AnyStr]) -> Optional[bytes]: @@ -75,15 +80,17 @@ def safe_encode(s: Optional[AnyStr]) -> Optional[bytes]: elif s is None: return None else: - raise TypeError('Expected bytes or text, but got %r' % (s,)) + raise TypeError("Expected bytes or text, but got %r" % (s,)) @overload -def win_encode(s: None) -> None: ... +def win_encode(s: None) -> None: + ... @overload -def win_encode(s: AnyStr) -> bytes: ... +def win_encode(s: AnyStr) -> bytes: + ... def win_encode(s: Optional[AnyStr]) -> Optional[bytes]: @@ -93,5 +100,5 @@ def win_encode(s: Optional[AnyStr]) -> Optional[bytes]: elif isinstance(s, bytes): return s elif s is not None: - raise TypeError('Expected bytes or text, but got %r' % (s,)) + raise TypeError("Expected bytes or text, but got %r" % (s,)) return None diff --git a/git/config.py b/git/config.py index 1ac3c9cec..24c2b2013 100644 --- a/git/config.py +++ b/git/config.py @@ -30,8 +30,20 @@ # typing------------------------------------------------------- -from typing import (Any, Callable, Generic, IO, List, Dict, Sequence, - TYPE_CHECKING, Tuple, TypeVar, Union, cast) +from typing import ( + Any, + Callable, + Generic, + IO, + List, + Dict, + Sequence, + TYPE_CHECKING, + Tuple, + TypeVar, + Union, + cast, +) from git.types import Lit_config_levels, ConfigLevels_Tup, PathLike, assert_never, _T @@ -39,23 +51,25 @@ from git.repo.base import Repo from io import BytesIO -T_ConfigParser = TypeVar('T_ConfigParser', bound='GitConfigParser') -T_OMD_value = TypeVar('T_OMD_value', str, bytes, int, float, bool) +T_ConfigParser = TypeVar("T_ConfigParser", bound="GitConfigParser") +T_OMD_value = TypeVar("T_OMD_value", str, bytes, int, float, bool) if sys.version_info[:3] < (3, 7, 2): # typing.Ordereddict not added until py 3.7.2 from collections import OrderedDict + OrderedDict_OMD = OrderedDict else: from typing import OrderedDict + OrderedDict_OMD = OrderedDict[str, List[T_OMD_value]] # type: ignore[assignment, misc] # ------------------------------------------------------------- -__all__ = ('GitConfigParser', 'SectionConstraint') +__all__ = ("GitConfigParser", "SectionConstraint") -log = logging.getLogger('git.config') +log = logging.getLogger("git.config") log.addHandler(logging.NullHandler()) # invariants @@ -67,26 +81,37 @@ # Section pattern to detect conditional includes. # https://git-scm.com/docs/git-config#_conditional_includes -CONDITIONAL_INCLUDE_REGEXP = re.compile(r"(?<=includeIf )\"(gitdir|gitdir/i|onbranch):(.+)\"") +CONDITIONAL_INCLUDE_REGEXP = re.compile( + r"(?<=includeIf )\"(gitdir|gitdir/i|onbranch):(.+)\"" +) class MetaParserBuilder(abc.ABCMeta): """Utility class wrapping base-class methods into decorators that assure read-only properties""" - def __new__(cls, name: str, bases: Tuple, clsdict: Dict[str, Any]) -> 'MetaParserBuilder': + + def __new__( + cls, name: str, bases: Tuple, clsdict: Dict[str, Any] + ) -> "MetaParserBuilder": """ Equip all base-class methods with a needs_values decorator, and all non-const methods with a set_dirty_and_flush_changes decorator in addition to that.""" - kmm = '_mutating_methods_' + kmm = "_mutating_methods_" if kmm in clsdict: mutating_methods = clsdict[kmm] for base in bases: - methods = (t for t in inspect.getmembers(base, inspect.isroutine) if not t[0].startswith("_")) + methods = ( + t + for t in inspect.getmembers(base, inspect.isroutine) + if not t[0].startswith("_") + ) for name, method in methods: if name in clsdict: continue method_with_values = needs_values(method) if name in mutating_methods: - method_with_values = set_dirty_and_flush_changes(method_with_values) + method_with_values = set_dirty_and_flush_changes( + method_with_values + ) # END mutating methods handling clsdict[name] = method_with_values @@ -102,9 +127,10 @@ def needs_values(func: Callable[..., _T]) -> Callable[..., _T]: """Returns method assuring we read values (on demand) before we try to access them""" @wraps(func) - def assure_data_present(self: 'GitConfigParser', *args: Any, **kwargs: Any) -> _T: + def assure_data_present(self: "GitConfigParser", *args: Any, **kwargs: Any) -> _T: self.read() return func(self, *args, **kwargs) + # END wrapper method return assure_data_present @@ -114,11 +140,12 @@ def set_dirty_and_flush_changes(non_const_func: Callable[..., _T]) -> Callable[. If so, the instance will be set dirty. Additionally, we flush the changes right to disk""" - def flush_changes(self: 'GitConfigParser', *args: Any, **kwargs: Any) -> _T: + def flush_changes(self: "GitConfigParser", *args: Any, **kwargs: Any) -> _T: rval = non_const_func(self, *args, **kwargs) self._dirty = True self.write() return rval + # END wrapper method flush_changes.__name__ = non_const_func.__name__ return flush_changes @@ -133,9 +160,21 @@ class SectionConstraint(Generic[T_ConfigParser]): :note: If used as a context manager, will release the wrapped ConfigParser.""" + __slots__ = ("_config", "_section_name") - _valid_attrs_ = ("get_value", "set_value", "get", "set", "getint", "getfloat", "getboolean", "has_option", - "remove_section", "remove_option", "options") + _valid_attrs_ = ( + "get_value", + "set_value", + "get", + "set", + "getint", + "getfloat", + "getboolean", + "has_option", + "remove_section", + "remove_option", + "options", + ) def __init__(self, config: T_ConfigParser, section: str) -> None: self._config = config @@ -166,11 +205,13 @@ def release(self) -> None: """Equivalent to GitConfigParser.release(), which is called on our underlying parser instance""" return self._config.release() - def __enter__(self) -> 'SectionConstraint[T_ConfigParser]': + def __enter__(self) -> "SectionConstraint[T_ConfigParser]": self._config.__enter__() return self - def __exit__(self, exception_type: str, exception_value: str, traceback: str) -> None: + def __exit__( + self, exception_type: str, exception_value: str, traceback: str + ) -> None: self._config.__exit__(exception_type, exception_value, traceback) @@ -228,16 +269,22 @@ def get_config_path(config_level: Lit_config_levels) -> str: if config_level == "system": return "/etc/gitconfig" elif config_level == "user": - config_home = os.environ.get("XDG_CONFIG_HOME") or osp.join(os.environ.get("HOME", '~'), ".config") + config_home = os.environ.get("XDG_CONFIG_HOME") or osp.join( + os.environ.get("HOME", "~"), ".config" + ) return osp.normpath(osp.expanduser(osp.join(config_home, "git", "config"))) elif config_level == "global": return osp.normpath(osp.expanduser("~/.gitconfig")) elif config_level == "repository": - raise ValueError("No repo to get repository configuration from. Use Repo._get_config_path") + raise ValueError( + "No repo to get repository configuration from. Use Repo._get_config_path" + ) else: # Should not reach here. Will raise ValueError if does. Static typing will warn missing elifs - assert_never(config_level, # type: ignore[unreachable] - ValueError(f"Invalid configuration level: {config_level!r}")) + assert_never( + config_level, # type: ignore[unreachable] + ValueError(f"Invalid configuration level: {config_level!r}"), + ) class GitConfigParser(cp.RawConfigParser, metaclass=MetaParserBuilder): @@ -258,30 +305,36 @@ class GitConfigParser(cp.RawConfigParser, metaclass=MetaParserBuilder): must match perfectly. If used as a context manager, will release the locked file.""" - #{ Configuration + # { Configuration # The lock type determines the type of lock to use in new configuration readers. # They must be compatible to the LockFile interface. # A suitable alternative would be the BlockingLockFile t_lock = LockFile - re_comment = re.compile(r'^\s*[#;]') + re_comment = re.compile(r"^\s*[#;]") - #} END configuration + # } END configuration - optvalueonly_source = r'\s*(?P